accelerInt  v0.1
exponential_linear_algebra.cuh
Go to the documentation of this file.
1 
10 #ifndef EXPONENTIAL_LINEAR_ALGEBRA_CUH
11 #define EXPONENTIAL_LINEAR_ALGEBRA_CUH
12 
13 #include "header.cuh"
14 #include "solver_options.cuh"
15 #include "solver_props.cuh"
16 
18 
26 __device__
27 void matvec_m_by_m (const int m,
28  const double * const __restrict__ A,
29  const double * const __restrict__ V, double * const __restrict__ Av);
30 
32 
43 __device__ void matvec_m_by_m_plusequal (const int m,
44  const double * const __restrict__ A,
45  const double * const __restrict__ V, double * const __restrict__ Av);
46 
58 __device__
59 void matvec_n_by_m_scale (const int m,
60  const double scale,
61  const double * const __restrict__ A,
62  const double * const __restrict__ V, double * const __restrict__ Av);
63 
64 
79 __device__
80 void matvec_n_by_m_scale_special (const int m,
81  const double * __restrict__ scale,
82  const double * __restrict__ A,
83  double * const __restrict__ * V, double * __restrict__* Av);
84 
101 __device__
102 void matvec_n_by_m_scale_special2 (const int m,
103  const double* __restrict__ scale,
104  const double* __restrict__ A,
105  double* const __restrict__ * V, double* __restrict__ * Av);
106 
119 __device__
120 void matvec_n_by_m_scale_add (const int m,
121  const double scale,
122  const double* __restrict__ add,
123  const double* __restrict__ A,
124  double* __restrict__ V, const double* __restrict__ Av);
125 
127 
142 __device__
143 void matvec_n_by_m_scale_add_subtract (const int m,
144  const double scale,
145  const double* __restrict__ A,
146  const double* V,
147  double* __restrict__ Av,
148  const double* __restrict__ add, const double* __restrict__ sub);
149 
151 
161 __device__
162 void scale (const double* __restrict__ y0,
163  const double* __restrict__ y1, double* __restrict__ sc);
164 
166 
173 __device__
174 void scale_init (const double* __restrict__ y0, double* __restrict__ sc);
175 
177 
187 __device__
188 double sc_norm(const double* __restrict__ nums, const double* __restrict__ sc);
189 
197 __device__
198 double two_norm(const double* __restrict__ v);
199 
208 __device__
209 double normalize (const double* __restrict__ v, double* __restrict__ v_out);
210 
220 __device__
221 double dotproduct(const double* __restrict__ w, const double* __restrict__ Vm);
222 
232 __device__
233 void scale_subtract(const double s, const double* __restrict__ Vm, double* __restrict__ w);
234 
244 __device__
245 void scale_mult(const double s, const double* __restrict__ w, double* __restrict__ Vm);
246 
247 #endif
__device__ double two_norm(const double *__restrict__ v)
Computes and returns the two norm of a vector.
__device__ void matvec_n_by_m_scale(const int m, const double scale, const double *const __restrict__ A, const double *const __restrict__ V, double *const __restrict__ Av)
Matrix-vector multiplication of a matrix sized NSPxM and a vector of size Mx1 scaled by a specified f...
__device__ double normalize(const double *__restrict__ v, double *__restrict__ v_out)
Normalize the input vector using a 2-norm.
__device__ void matvec_m_by_m_plusequal(const int m, const double *const __restrict__ A, const double *const __restrict__ V, double *const __restrict__ Av)
Matrix-vector plus equals for a matrix of size MxM and vector of size Mx1. That is, it returns (A + I) * v.
__device__ void scale_subtract(const double s, const double *__restrict__ Vm, double *__restrict__ w)
Subtracts Vm scaled by s from w.
simple convenience file to include the correct solver properties file
__device__ void scale(const double *__restrict__ y0, const double *__restrict__ y1, double *__restrict__ sc)
Get scaling for weighted norm.
__device__ void matvec_m_by_m(const int m, const double *const __restrict__ A, const double *const __restrict__ V, double *const __restrict__ Av)
Matrix-vector multiplication of a matrix sized MxM and a vector Mx1.
An example header file that defines system size, memory functions and other required methods for inte...
__device__ double dotproduct(const double *__restrict__ w, const double *__restrict__ Vm)
Performs the dot product of the w (NSP x 1) vector with the given subspace vector (NSP x 1) ...
__device__ void scale_init(const double *__restrict__ y0, double *__restrict__ sc)
Get scaling for weighted norm for the initial timestep (used in krylov process)
__device__ void matvec_n_by_m_scale_special(const int m, const double *__restrict__ scale, const double *__restrict__ A, double *const __restrict__ *V, double *__restrict__ *Av)
Matrix-vector multiplication of a matrix sized NSPxM and a vector of size Mx1 scaled by a specified f...
__device__ void matvec_n_by_m_scale_special2(const int m, const double *__restrict__ scale, const double *__restrict__ A, double *const __restrict__ *V, double *__restrict__ *Av)
Matrix-vector multiplication of a matrix sized NSPxM and a vector of size Mx1 scaled by a specified f...
__device__ void matvec_n_by_m_scale_add_subtract(const int m, const double scale, const double *__restrict__ A, const double *V, double *__restrict__ Av, const double *__restrict__ add, const double *__restrict__ sub)
Matrix-vector multiplication of a matrix sized NSPxM and a vector of size Mx1 scaled by a specified f...
A file generated by Scons that specifies various options to the solvers.
__device__ double sc_norm(const double *__restrict__ nums, const double *__restrict__ sc)
Perform weighted norm.
__device__ void scale_mult(const double s, const double *__restrict__ w, double *__restrict__ Vm)
Sets Vm to s * w.
__device__ void matvec_n_by_m_scale_add(const int m, const double scale, const double *__restrict__ add, const double *__restrict__ A, double *__restrict__ V, const double *__restrict__ Av)
Matrix-vector multiplication of a matrix sized NSPxM and a vector of size Mx1 scaled by a specified f...