Ice Sheet System Model  4.18
Code documentation
Solver.h
Go to the documentation of this file.
1 
4 #ifndef _SOLVER_CLASS_H_
5 #define _SOLVER_CLASS_H_
6 
7 /*Headers:*/
8 #ifdef HAVE_CONFIG_H
9  #include <config.h>
10 #else
11 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
12 #endif
13 #include "./Matrix.h"
14 #include "./Vector.h"
15 #include "../issm/issmtoolkit.h"
16 #include "../petsc/petscincludes.h"
17 class Parameters;
18 
19 template <class doubletype>
20 class Solver{
21 
22  private:
28 
29  public:
30  /*Constructors, destructors:*/
31  Solver(){/*{{{*/
32  }
33  /*}}}*/
34  Solver(Matrix<doubletype>* Kff_in, Vector<doubletype>* pf_in, Vector<doubletype>* uf0_in,Vector<doubletype>* df_in, Parameters* parameters_in){/*{{{*/
35 
36  /*In debugging mode, check that stiffness matrix and load vectors are not NULL (they can be empty)*/
37  _assert_(Kff_in);
38  _assert_(pf_in);
39 
40  /*initialize fields: */
41  this->Kff=Kff_in;
42  this->pf=pf_in;
43  this->uf0=uf0_in;
44  this->df=df_in;
45  this->parameters=parameters_in;
46  }
47  /*}}}*/
48  ~Solver(){/*{{{*/
49  }
50  /*}}}*/
51 
52  /*Methods: */
53  Vector<doubletype>* Solve(void){ /*{{{*/
54 
55  /*output: */
56  Vector<doubletype>* uf=NULL;
57 
58  /*Initialize vector: */
59  uf=new Vector<doubletype>();
60 
61  /*According to matrix type, use specific solvers: */
62  switch(Kff->type){
63  #ifdef _HAVE_PETSC_
64  case PetscMatType:{
65  PetscVec* uf0_vector = NULL;
66  PetscVec* df_vector = NULL;
67  if(uf0) uf0_vector = uf0->pvector;
68  if(df) df_vector = df->pvector;
69  PetscSolve(&uf->pvector,Kff->pmatrix,pf->pvector,uf0_vector,df_vector,parameters);
70  break;
71  }
72  #endif
73  case IssmMatType:{
74  IssmSolve(&uf->ivector,Kff->imatrix,pf->ivector,parameters);
75  break;
76  }
77  default:
78  _error_("Matrix type: " << Kff->type << " not supported yet!");
79  }
80 
81  /*allocate output pointer: */
82  return uf;
83  }
84  /*}}}*/
85 };
86 #endif //#ifndef _SOLVER_H_
Matrix
Definition: Matrix.h:27
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
Solver::Kff
Matrix< doubletype > * Kff
Definition: Solver.h:23
Vector.h
wrapper to vector objects. The goal is to control which API (PETSc,Scalpack, Plapack?...
Parameters
Declaration of Parameters class.
Definition: Parameters.h:18
PetscSolve
void PetscSolve(PetscVec **puf, PetscMat *Kff, PetscVec *pf, PetscVec *uf0, PetscVec *df, Parameters *parameters)
Definition: PetscSolver.cpp:19
Matrix.h
wrapper to matrix objects. The goal is to control which API (PETSc,Scalpack, Plapack?...
Solver::uf0
Vector< doubletype > * uf0
Definition: Solver.h:25
IssmMatType
@ IssmMatType
Definition: Matrix.h:22
Solver::df
Vector< doubletype > * df
Definition: Solver.h:26
Solver::parameters
Parameters * parameters
Definition: Solver.h:27
Solver::pf
Vector< doubletype > * pf
Definition: Solver.h:24
Solver
Definition: Solver.h:20
Solver::~Solver
~Solver()
Definition: Solver.h:48
Solver::Solve
Vector< doubletype > * Solve(void)
Definition: Solver.h:53
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
Vector::ivector
IssmVec< doubletype > * ivector
Definition: Vector.h:33
IssmSolve
void IssmSolve(IssmVec< IssmDouble > **pout, IssmMat< IssmDouble > *Kff, IssmVec< IssmDouble > *pf, Parameters *parameters)
Definition: IssmSolver.cpp:15
PetscVec
Definition: PetscVec.h:22
Solver::Solver
Solver(Matrix< doubletype > *Kff_in, Vector< doubletype > *pf_in, Vector< doubletype > *uf0_in, Vector< doubletype > *df_in, Parameters *parameters_in)
Definition: Solver.h:34
Solver::Solver
Solver()
Definition: Solver.h:31
Vector
Definition: Vector.h:25
PetscMatType
@ PetscMatType
Definition: Matrix.h:22