File snes.hxx#
Functions
-
BOUT_ENUM_CLASS(BoutSnesEquationForm, pseudo_transient, rearranged_backward_euler, backward_euler, direct_newton)#
-
class SNESSolver : public Solver#
- #include <snes.hxx>
Uses PETSc’s SNES interface to find a steady state solution to a nonlinear ODE by integrating in time with Backward Euler
Public Functions
-
~SNESSolver() override = default#
-
virtual int init() override#
Initialise the solver.
-
virtual int run() override#
Run the solver, calling monitors nout times, at intervals of tstep. This function is called by solve(), and is specific to each solver type
This should probably be protected, since it shouldn’t be called by users.
-
PetscErrorCode snes_function(Vec x, Vec f, bool linear)#
Nonlinear function.
Nonlinear function. This is called by PETSc SNES object via a static C-style function. For implicit time integration this function calculates:
f = (x - gamma*G(x)) - rhs
- Parameters:
x – [in] The state vector
f – [out] The vector for the result f(x)
linear – [in] Specifies that the SNES solver is in a linear (KSP) inner loop, so the operator should be linearised if possible
-
PetscErrorCode precon(Vec x, Vec f)#
Preconditioner. Called by PCapply via a C-style static function.
- Parameters:
x – [in] The vector to be operated on
f – [out] The result of the operation
-
PetscErrorCode scaleJacobian(Mat B)#
Scale an approximate Jacobian, and update the internal RHS scaling factors This is called by SNESComputeJacobianScaledColor with the finite difference approximated Jacobian.
Private Functions
-
void updateColoring()#
Updates the coloring using Jfd.
Private Members
-
int maxf#
Maximum number of function evaluations allowed in the solver (default: 10000)
-
int maxits#
Maximum nonlinear iterations.
-
int lower_its#
-
int upper_its#
Limits on iterations for timestep adjustment.
-
bool pid_controller#
Use PID controller?
-
int target_its#
Use with caution! Not tested values.
Target number of nonlinear iterations for the PID controller.
-
int nl_its_prev#
-
int nl_its_prev2#
-
bool diagnose_failures#
Print diagnostics on SNES failures.
-
int nlocal#
Number of variables on local processor.
-
int neq#
Number of variables in total.
-
BoutSnesEquationForm equation_form#
Form of the equation to solve.
-
Vec snes_f#
Used by SNES to store function.
-
Vec snes_x#
Result of SNES.
-
Vec x0#
Solution at start of current timestep.
-
Vec delta_x#
Change in solution.
-
Vec output_x#
Solution to output. Used if interpolating.
-
bool predictor#
Use linear predictor?
-
Vec x1#
Previous solution.
-
SNES snes#
SNES context.
-
Mat Jfd#
Finite Difference Jacobian.
-
bool use_precon#
Use preconditioner.
-
int maxl#
Maximum linear iterations.
-
bool matrix_free#
Use matrix free Jacobian.
-
bool matrix_free_operator#
Use matrix free Jacobian in the operator?
-
int lag_jacobian#
Re-use Jacobian.
-
bool use_coloring#
Use matrix coloring.
-
bool jacobian_recalculated#
Flag set when Jacobian is recalculated.
-
bool prune_jacobian#
Remove small elements in the Jacobian?
-
bool jacobian_pruned = {false}#
Has the Jacobian been pruned?
-
Mat Jfd_original#
Used to reset the Jacobian if over-pruned.
-
bool scale_rhs#
Scale time derivatives?
-
Vec rhs_scaling_factors#
Factors to multiply RHS function.
-
Vec jac_row_inv_norms#
1 / Norm of the rows of the Jacobian
-
bool scale_vars#
Scale individual variables?
-
Vec var_scaling_factors#
Factors to multiply variables when passing to user.
-
Vec scaled_x#
The values passed to the user RHS.
-
~SNESSolver() override = default#