libMesh
petsc_diff_solver.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2024 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 
19 
20 #ifndef LIBMESH_PETSC_DIFF_SOLVER_H
21 #define LIBMESH_PETSC_DIFF_SOLVER_H
22 
23 #include "libmesh/libmesh_common.h"
24 
25 #ifdef LIBMESH_HAVE_PETSC
26 
27 // Local includes
28 #include "libmesh/diff_solver.h"
29 #include "libmesh/petsc_macro.h"
30 #include "libmesh/petsc_dm_wrapper.h"
31 #include "libmesh/wrapped_petsc.h"
32 
33 // PETSc includes
34 #ifdef I
35 # define LIBMESH_SAW_I
36 #endif
37 #include <petscsnes.h>
38 #ifndef LIBMESH_SAW_I
39 # undef I // Avoid complex.h contamination
40 #endif
41 
42 namespace libMesh
43 {
44 
57 {
58 public:
63  explicit
65 
69  virtual ~PetscDiffSolver ();
70 
71  typedef DiffSolver Parent;
72 
77  virtual void reinit () override;
78 
82  virtual void init () override;
83 
87  void clear ();
88 
94  virtual unsigned int solve () override;
95 
96 protected:
97 
102 
106 #if !PETSC_VERSION_LESS_THAN(3,7,3)
107 #if defined(LIBMESH_ENABLE_AMR) && defined(LIBMESH_HAVE_METAPHYSICL)
109 #endif
110 #endif
111 
112 private:
113 
117  void setup_petsc_data();
118 };
119 
120 } // namespace libMesh
121 
122 #endif // #ifdef LIBMESH_HAVE_PETSC
123 
124 #endif // LIBMESH_PETSC_DIFF_SOLVER_H
virtual void init() override
The initialization function.
void clear()
The clear function.
void setup_petsc_data()
Common helper function to setup PETSc data structures.
virtual ~PetscDiffSolver()
Destructor.
virtual unsigned int solve() override
This method performs a solve.
The libMesh namespace provides an interface to certain functionality in the library.
This class defines a wrapper around the PETSc DM infrastructure.
PetscDiffSolver(sys_type &system)
Constructor.
This is a generic class that defines a solver to handle ImplicitSystem classes, including NonlinearIm...
Definition: diff_solver.h:68
This class defines a solver which uses a PETSc SNES context to handle a DifferentiableSystem.
const sys_type & system() const
Definition: diff_solver.h:135
PetscDMWrapper _dm_wrapper
Wrapper object for interacting with PetscDM.
WrappedPetsc< SNES > _snes
Nonlinear solver context.
virtual void reinit() override
The reinitialization function.
Manages consistently variables, degrees of freedom, coefficient vectors, and matrices for implicit sy...