12 extern __device__ __constant__ cuDoubleComplex
poles[
N_RA];
13 extern __device__ __constant__ cuDoubleComplex
res[
N_RA];
28 double* __restrict__ phiA,
const solver_memory* __restrict__ solver,
29 cuDoubleComplex* __restrict__ work) {
31 cuDoubleComplex *
const __restrict__ invA = solver->invA;
32 int *
const __restrict__ ipiv = solver->ipiv;
36 for (
int i = 0; i < m; ++i) {
38 for (
int j = 0; j < m; ++j) {
44 for (
int q = 0; q <
N_RA; q += 2) {
47 for (
int i = 0; i < m; ++i) {
48 for (
int j = 0; j < m; ++j) {
65 for (
int i = 0; i < m; ++i) {
67 for (
int j = 0; j < m; ++j) {
87 int phiAc_variable(
const int m,
const double* __restrict__ A,
const double c,
88 double* __restrict__ phiA,
const solver_memory* __restrict__ solver,
89 cuDoubleComplex* __restrict__ work) {
91 cuDoubleComplex *
const __restrict__ invA = solver->invA;
92 int *
const __restrict__ ipiv = solver->ipiv;
96 for (
int i = 0; i < m; ++i) {
98 for (
int j = 0; j < m; ++j) {
104 for (
int q = 0; q <
N_RA; q += 2) {
107 for (
int i = 0; i < m; ++i) {
108 for (
int j = 0; j < m; ++j) {
125 for (
int i = 0; i < m; ++i) {
127 for (
int j = 0; j < m; ++j) {
149 double* __restrict__ phiA,
const solver_memory* __restrict__ solver,
150 cuDoubleComplex* __restrict__ work) {
152 cuDoubleComplex *
const __restrict__ invA = solver->invA;
153 int *
const __restrict__ ipiv = solver->ipiv;
157 for (
int i = 0; i < m; ++i) {
159 for (
int j = 0; j < m; ++j) {
165 for (
int q = 0; q <
N_RA; q += 2) {
168 for (
int i = 0; i < m; ++i) {
169 for (
int j = 0; j < m; ++j) {
187 for (
int i = 0; i < m; ++i) {
189 for (
int j = 0; j < m; ++j) {
__device__ __constant__ cuDoubleComplex res[N_RA]
__device__ __constant__ cuDoubleComplex poles[N_RA]
void getComplexInverseHessenberg(const int n, double complex *__restrict__ A, int *__restrict__ ipiv, int *__restrict__ info)
getComplexInverseHessenberg computes the inverse of an upper Hessenberg matrix A using a LU factoriza...
__device__ int phi2Ac_variable(const int m, const double *__restrict__ A, const double c, double *__restrict__ phiA, const solver_memory *__restrict__ solver, cuDoubleComplex *__restrict__ work)
Compute the 2nd order Phi (exponential) matrix function.
Header definitions for CUDA LU factorization routines.
#define STRIDE
the matrix dimensions
simple convenience file to include the correct solver properties file
__device__ int expAc_variable(const int m, const double *__restrict__ A, const double c, double *__restrict__ phiA, const solver_memory *__restrict__ solver, cuDoubleComplex *__restrict__ work)
Compute the zeroth order Phi (exponential) matrix function. This is the regular matrix exponential...
A file generated by Scons that specifies various options to the solvers.
#define INDEX(i)
Convenience macro to get the value of a vector at index i, calculated as i * GRID_DIM + T_ID...
__device__ int phiAc_variable(const int m, const double *__restrict__ A, const double c, double *__restrict__ phiA, const solver_memory *__restrict__ solver, cuDoubleComplex *__restrict__ work)
Compute the first order Phi (exponential) matrix function.