29 #ifndef __SolverNonLinearPetsc_H
30 #define __SolverNonLinearPetsc_H 1
32 #include <feel/feelcore/feel.hpp>
38 #if defined( FEELPP_HAS_PETSC_H )
40 #ifndef USE_COMPLEX_NUMBERS
42 # include <petscversion.h>
44 # include <petscsnes.h>
47 # include <petscversion.h>
49 # include <petscsnes.h>
73 class SolverNonLinearPetsc
75 public SolverNonLinear<T>
77 typedef SolverNonLinear<T> super;
85 typedef SolverNonLinearPetsc<T> self_type;
87 typedef typename super::value_type value_type;
88 typedef typename super::real_type real_type;
89 typedef typename super::sparse_matrix_ptrtype sparse_matrix_ptrtype;
90 typedef typename super::vector_ptrtype vector_ptrtype;
92 typedef typename super::dense_matrix_type dense_matrix_type;
93 typedef typename super::dense_vector_type dense_vector_type;
96 typedef typename super::map_dense_matrix_type map_dense_matrix_type;
97 typedef typename super::map_dense_vector_type map_dense_vector_type;
99 typedef DataMap datamap_type;
100 typedef boost::shared_ptr<datamap_type> datamap_ptrtype;
111 SolverNonLinearPetsc(WorldComm
const& worldComm=Environment::worldComm());
112 SolverNonLinearPetsc( SolverNonLinearPetsc
const & );
117 ~SolverNonLinearPetsc();
122 virtual void init ();
142 void setReuse(
int jac=1,
int prec=1 );
152 virtual void clear ();
158 virtual std::pair<int, real_type> solve ( sparse_matrix_ptrtype&,
162 const unsigned int );
164 virtual std::pair<unsigned int, real_type> solve ( dense_matrix_type&,
168 const unsigned int );
171 virtual std::pair<unsigned int, real_type> solve ( map_dense_matrix_type&,
172 map_dense_vector_type&,
173 map_dense_vector_type&,
175 const unsigned int );
180 datamap_type
const& mapRow()
const
184 datamap_type
const& mapCol()
const
188 datamap_ptrtype
const& mapRowPtr()
const
192 datamap_ptrtype
const& mapColPtr()
const
197 void setMapRow( datamap_ptrtype
const& d )
201 void setMapCol( datamap_ptrtype
const& d )
211 void setPetscNlSolverType ();
217 void setPetscKspSolverType ();
223 void setPetscPreconditionerType ();
231 uint16_type M_prec_mat_structure;
244 datamap_ptrtype M_mapRow,M_mapCol;
248 template <
typename T>
250 SolverNonLinearPetsc<T>::SolverNonLinearPetsc(WorldComm
const& worldComm)
253 M_mapRow(new datamap_type(worldComm)),
254 M_mapCol(new datamap_type(worldComm))
259 template <
typename T>
261 SolverNonLinearPetsc<T>::~SolverNonLinearPetsc ()