libMesh
Loading...
Searching...
No Matches
petsc_diff_solver.h
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 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
42namespace libMesh
43{
44
57{
58public:
63 explicit
65
69 virtual ~PetscDiffSolver ();
70
72
77 virtual void reinit () override;
78
82 virtual void init () override;
83
87 void clear ();
88
94 virtual unsigned int solve () override;
95
96protected:
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
112private:
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
This is a generic class that defines a solver to handle ImplicitSystem classes, including NonlinearIm...
Definition diff_solver.h:70
const sys_type & system() const
Manages consistently variables, degrees of freedom, coefficient vectors, and matrices for implicit sy...
This class defines a wrapper around the PETSc DM infrastructure.
This class defines a solver which uses a PETSc SNES context to handle a DifferentiableSystem.
virtual unsigned int solve() override
This method performs a solve.
void clear()
The clear function.
virtual void init() override
The initialization function.
void setup_petsc_data()
Common helper function to setup PETSc data structures.
PetscDMWrapper _dm_wrapper
Wrapper object for interacting with PetscDM.
virtual void reinit() override
The reinitialization function.
virtual ~PetscDiffSolver()
Destructor.
WrappedPetsc< SNES > _snes
Nonlinear solver context.
The libMesh namespace provides an interface to certain functionality in the library.