19 #ifndef MatrixSolver_H
20 #define MatrixSolver_H
22 #include "../Grid/Grid.h"
23 #include "../DiffusionCoefficient/DiffusionCoefficient.h"
25 #include "../GMRES/itlin.h"
45 string lower_border_condition_type,
46 string upper_border_condition_type,
47 string approximationMethod =
"AM_Split_C");
81 bool tridag(
double a[],
double b[],
double c[],
double r[],
double u[],
long n);
92 int L_size,
int pc_size,
int alpha_size,
99 string L_lowerBoundaryCondition_calculationType,
100 string L_upperBoundaryCondition_calculationType,
101 string pc_lowerBoundaryCondition_calculationType,
102 string pc_upperBoundaryCondition_calculationType,
103 string alpha_lowerBoundaryCondition_calculationType,
104 string alpha_upperBoundaryCondition_calculationType,
110 double tau = 1e99,
double tauLpp = 1e99);
115 int L_size,
int pc_size,
int alpha_size,
122 string L_lowerBoundaryCondition_calculationType,
123 string L_upperBoundaryCondition_calculationType,
124 string pc_lowerBoundaryCondition_calculationType,
125 string pc_upperBoundaryCondition_calculationType,
126 string alpha_lowerBoundaryCondition_calculationType,
127 string alpha_upperBoundaryCondition_calculationType,
133 double tau = 1e99,
double tauLpp = 1e99);
137 int il,
int im,
int ia,
138 string FirstDerivative,
string SecondDerivative,
141 double multiplicator);
144 int il,
int im,
int ia,
145 string FirstDerivative,
string SecondDerivative,
148 double multiplicator);
151 int il,
int im,
int ia,
152 string FirstDerivative,
string SecondDerivative,
155 double multiplicator);
void SecondDerivativeApproximation_3D_KC_Diagonal(CalculationMatrix &matr_A, int il, int im, int ia, string FirstDerivative, string SecondDerivative, Matrix3D< double > &L, Matrix3D< double > &pc, Matrix3D< double > &alpha, Matrix3D< double > &Dxx, Matrix3D< double > &Jacobian, double multiplicator)
bool tridag(double a[], double b[], double c[], double r[], double u[], long n)
Solve the AU=R system of equations, where A - tridiagonal matrix nxn with diagonals a[]...
void SecondDerivativeApproximation_3D(CalculationMatrix &matr_A, int il, int im, int ia, string FirstDerivative, string SecondDerivative, Matrix3D< double > &L, Matrix3D< double > &pc, Matrix3D< double > &alpha, Matrix3D< double > &Dxx, Matrix3D< double > &Jacobian, double multiplicator)
bool SolveMatrix(double *f, double *A, double *B1, double *C, double *R, double f_lower, double f_upper, int nx, double dt)
Solver for 1d general equation.
bool MakeMatrix(double *A, double *B1, double *C, double *R, double *x, double tau, double n, double f_lower, double f_upper, int nx, double dt, double *Dxx, double taulc, double alc, int g_flag, string lower_border_condition_type, string upper_border_condition_type, string approximationMethod="AM_Split_C")
Make matrix for 1d diffusion.
This matrix calculates the diagonal values and index given parameters for x, y, and z...
void gauss_solve(double *a, double *b, int n)
Gauss inversion.
double B(double lambda, double L)
This method of storage for matrices is convenient for diagonal (spread) matrices. Stored as map (diag...
bool MakeModelMatrix_3D(CalculationMatrix &matr_A, CalculationMatrix &matr_B, CalculationMatrix &matr_C, Matrix3D< double > &L, Matrix3D< double > &pc, Matrix3D< double > &alpha, int L_size, int pc_size, int alpha_size, Matrix2D< double > &L_lowerBoundaryCondition, Matrix2D< double > &L_upperBoundaryCondition, Matrix2D< double > &pc_lowerBoundaryCondition, Matrix2D< double > &pc_upperBoundaryCondition, Matrix2D< double > &alpha_lowerBoundaryCondition, Matrix2D< double > &alpha_upperBoundaryCondition, string L_lowerBoundaryCondition_calculationType, string L_upperBoundaryCondition_calculationType, string pc_lowerBoundaryCondition_calculationType, string pc_upperBoundaryCondition_calculationType, string alpha_lowerBoundaryCondition_calculationType, string alpha_upperBoundaryCondition_calculationType, Matrix3D< double > &DLL, Matrix3D< double > &Dpcpc, Matrix3D< double > &DpcpcLpp, Matrix3D< double > &Daa, Matrix3D< double > &DaaLpp, Matrix3D< double > &Dpca, Matrix3D< double > &DpcaLpp, Matrix3D< double > &Jacobian, double dt, double Lpp, double tau=1e99, double tauLpp=1e99)
void gauss(DiagMatrix &A, Matrix1D< double > &B, Matrix1D< double > &X, int n)
Gauss method - added to move out of if statements.
void SecondDerivativeApproximation_3D_KC_Mixed(CalculationMatrix &matr_A, int il, int im, int ia, string FirstDerivative, string SecondDerivative, Matrix3D< double > &L, Matrix3D< double > &pc, Matrix3D< double > &alpha, Matrix3D< double > &Dxx, Matrix3D< double > &Jacobian, double multiplicator)
double alc(double L)
Loss cone calculations.
GMRES parameters structure.
void gmres2_wrapout(CalculationMatrix &A, Matrix1D< double > &B, Matrix1D< double > &X, Parameters_structure::PSD::GMRES_parameters_structure GMRES_parameters)
Used for calculating matrix inversion with GMRES2.
bool MakeModelMatrix_3D_KC(CalculationMatrix &matr_A, CalculationMatrix &matr_B, CalculationMatrix &matr_C, Matrix3D< double > &L, Matrix3D< double > &pc, Matrix3D< double > &alpha, int L_size, int pc_size, int alpha_size, Matrix2D< double > &L_lowerBoundaryCondition, Matrix2D< double > &L_upperBoundaryCondition, Matrix2D< double > &pc_lowerBoundaryCondition, Matrix2D< double > &pc_upperBoundaryCondition, Matrix2D< double > &alpha_lowerBoundaryCondition, Matrix2D< double > &alpha_upperBoundaryCondition, string L_lowerBoundaryCondition_calculationType, string L_upperBoundaryCondition_calculationType, string pc_lowerBoundaryCondition_calculationType, string pc_upperBoundaryCondition_calculationType, string alpha_lowerBoundaryCondition_calculationType, string alpha_upperBoundaryCondition_calculationType, Matrix3D< double > &DLL, Matrix3D< double > &Dpcpc, Matrix3D< double > &DpcpcLpp, Matrix3D< double > &Daa, Matrix3D< double > &DaaLpp, Matrix3D< double > &Dpca, Matrix3D< double > &DpcaLpp, Matrix3D< double > &Jacobian, double dt, double Lpp, double tau=1e99, double tauLpp=1e99)
void over_relaxation_diag(DiagMatrix &A, Matrix1D< double > &B, Matrix1D< double > &X, int max_steps=1e5, double EE=1e-3)
void gmres_wrapout(CalculationMatrix &A, Matrix1D< double > &B, Matrix1D< double > &X, Parameters_structure::PSD::GMRES_parameters_structure GMRES_parameters)
void Lapack(DiagMatrix &A, Matrix1D< double > &B, Matrix1D< double > &X)