Chombo + EB
3.2
|
#include <PetscSolver.H>
Public Member Functions | |
PetscSolver () | |
virtual | ~PetscSolver () |
void | destroy () |
virtual void | setHomogeneous (bool a_homogeneous) |
virtual void | setFunctionAndJacobian (PetscErrorCode(*f)(SNES, Vec, Vec, void *), PetscErrorCode(*j)(SNES, Vec, Mat *, Mat *, MatStructure *, void *)) |
virtual void | define (Real a_dx, bool a_homogeneous=true) |
virtual void | define (LinearOp< T > *, bool a_homogeneous=true) |
virtual void | solve (T &a_phi, const T &a_rhs) |
int | solve_private (T &a_phi, const T &a_rhs) |
virtual void | solve_mfree (T &a_phi, const T &a_rhs, LinearOp< T > *a_op) |
int | solve_mfree_private (T &a_phi, const T &a_rhs, LinearOp< T > *a_op) |
Real | computeResidual () |
virtual int | applyOp (T &a_phi, const T &a_rhs) |
void | setInitialGuessNonzero (bool b=true) |
void | setOptionsPrefix (const char prefix[]) |
KSP | getKSP () |
virtual int | getNNZPerRow () const |
virtual bool | supportNNZExact () const |
virtual void | rhsOperation (const T &a_rhs) |
virtual Real | addBCdiagValue (const IntVect &a_iv, const IntVect &a_jv, const T &a_rhs, const DataIndex &a_datInd, const Real coeff=1) |
int | resetOperator () |
Real | normInfinity (const T &a_phi) const |
int | setup_solver (const T &a_phi) |
int | create_mat_vec (const T &a_phi) |
PetscErrorCode | putPetscInChombo (T &a_phi, const Vec xx) |
PetscErrorCode | putChomboInPetsc (Vec out, const T &a_phi) |
virtual int | formMatrix (Mat, const T *=0, PetscInt my0=0, PetscInt nloc=0, PetscInt *d=0, PetscInt *o=0)=0 |
virtual BaseFab< Real > & | getRegFab (T &a_fab, const DataIndex &a_datInd)=0 |
virtual const BaseFab< Real > & | getRegFab (const T &a_fab, const DataIndex &a_datInd) const =0 |
virtual const BaseFab< Real > & | getRegFab (const T &a_fab, const DataIndex &a_datInd, Box &a_box) const =0 |
void | setNull (bool n=true) |
Public Member Functions inherited from LinearSolver< T > | |
virtual | ~LinearSolver () |
virtual void | setConvergenceMetrics (Real a_metric, Real a_tolerance) |
Set a convergence metric, along with solver tolerance, if desired. More... | |
Static Public Member Functions | |
static PetscErrorCode | ksp_monitor_pout (KSP ksp, PetscInt it, PetscReal rnorm, void *ctx) |
static PetscErrorCode | apply_mfree (Mat A, Vec x, Vec f) |
Public Attributes | |
LinearOp< T > * | m_op_mfree |
T | m_phi_mfree |
T | m_Lphi_mfree |
bool | m_mfree_homogeneous |
bool | m_homogeneous |
Real | m_dx |
Mat | m_mat |
void * | m_ctx |
Vec | m_xx |
Vec | m_rr |
Vec | m_bb |
SNES | m_snes |
KSP | m_ksp |
LevelData< BaseFab< PetscInt > > | m_gids |
PetscInt | m_gid0 |
Protected Member Functions | |
virtual Real | addBCrhsValue (const IntVect &a_iv, const T &a_phi, const DataIndex &a_datInd, const Real &coeff=1) |
Protected Attributes | |
PetscInt | m_defined |
PetscErrorCode(* | m_function )(SNES, Vec, Vec, void *) |
PetscErrorCode(* | m_jacobian )(SNES, Vec, Mat *, Mat *, MatStructure *, void *) |
char | m_prestring [32] |
bool | m_null |
bool | m_nz_init_guess |
LevelData< BaseFab< bool > > | m_bccode |
Interface to PETSC linear solvers BC implementation hooks: addBCdiagValue (formMatrix) and addBCrhsValue (solveprivate) m_bccode should be encoded true for cells that are at the domain boundaries at formMatrix time.
PetscSolver< T >::PetscSolver | ( | ) |
|
virtual |
void PetscSolver< T >::destroy | ( | ) |
Referenced by PetscSolver< LevelData< FArrayBox > >::~PetscSolver().
|
inlinevirtual |
Set whether the solver uses only homogeneous boundary conditions
Implements LinearSolver< T >.
|
inlinevirtual |
Set Function F(u) = 0 and Jacobian dF(u)/du for nonlinear solves
|
inlinestatic |
|
virtual |
Reimplemented in PetscSolverPoisson< T >.
Referenced by PetscSolver< LevelData< FArrayBox > >::define(), PetscSolverPoisson< T >::define(), and PetscSolver< LevelData< FArrayBox > >::ksp_monitor_pout().
|
virtual |
Define the operator and whether it is a homogeneous solver or not. The LinearSolver does not take over ownership of this a_operator object. It does not call delete on it when the LinearSolver is deleted. It is meant to be like a late-binding reference. If you created a_operator with new, you should call delete on it after LinearSolver is deleted if you want to avoid memory leaks.
Implements LinearSolver< T >.
Reimplemented in PetscSolverPoisson< T >.
|
virtual |
Solve
Implements LinearSolver< T >.
Referenced by PetscSolver< LevelData< FArrayBox > >::ksp_monitor_pout().
int PetscSolver< T >::solve_private | ( | T & | a_phi, |
const T & | a_rhs | ||
) |
|
virtual |
Solve a_op*a_phi = a_rhs using the PETSC matrix free functions The preconditioner (for which a matrix is formed) need not be the same as the actual operator.
Referenced by PetscSolver< LevelData< FArrayBox > >::ksp_monitor_pout().
int PetscSolver< T >::solve_mfree_private | ( | T & | a_phi, |
const T & | a_rhs, | ||
LinearOp< T > * | a_op | ||
) |
|
static |
Referenced by PetscSolver< LevelData< FArrayBox > >::solve_mfree_private().
Real PetscSolver< T >::computeResidual | ( | ) |
viewResidual
|
virtual |
apply
|
inline |
set initial guess non-zero
|
inline |
set initial guess non-zero
|
inline |
|
inlinevirtual |
get an estimate of the number of nnz/row for matrix allocation
Reimplemented in PetscSolverViscousTensor< T >.
Referenced by PetscSolver< LevelData< FArrayBox > >::create_mat_vec().
|
inlinevirtual |
do I support having formMatrix precompute exact NNZ/row
Referenced by PetscSolver< LevelData< FArrayBox > >::create_mat_vec().
|
inlinevirtual |
|
inlinevirtual |
handling boundary conditions, turn it into a term to be added to the diag term this function coordinates with addBCrhsValue for Dirichlet BC for Neumann BC no RHS modification is required
|
inline |
Real PetscSolver< T >::normInfinity | ( | const T & | a_phi | ) | const |
Infinity norm
Referenced by PetscSolver< LevelData< FArrayBox > >::resetOperator().
|
inlineprotectedvirtual |
handling boundary conditions, turn it into a term to be added to the RHS this function coordinates with addBCdiagValue for Dirichlet BC, should return a term that is to be added to RHS
Referenced by PetscSolver< LevelData< FArrayBox > >::putChomboInPetsc(), PetscSolver< LevelData< FArrayBox > >::solve_mfree_private(), and PetscSolver< LevelData< FArrayBox > >::solve_private().
int PetscSolver< T >::setup_solver | ( | const T & | a_phi | ) |
int PetscSolver< T >::create_mat_vec | ( | const T & | a_phi | ) |
PetscErrorCode PetscSolver< T >::putPetscInChombo | ( | T & | a_phi, |
const Vec | xx | ||
) |
Referenced by PetscSolver< LevelData< FArrayBox > >::apply_mfree(), PetscSolver< LevelData< FArrayBox > >::applyOp(), PetscSolver< LevelData< FArrayBox > >::computeResidual(), PetscSolver< LevelData< FArrayBox > >::normInfinity(), PetscSolver< LevelData< FArrayBox > >::solve_mfree_private(), and PetscSolver< LevelData< FArrayBox > >::solve_private().
PetscErrorCode PetscSolver< T >::putChomboInPetsc | ( | Vec | out, |
const T & | a_phi | ||
) |
|
pure virtual |
|
pure virtual |
Implemented in PetscSolverFAB< LevelData< FArrayBox > >.
Referenced by PetscSolver< LevelData< FArrayBox > >::putChomboInPetsc(), PetscSolver< LevelData< FArrayBox > >::putPetscInChombo(), PetscSolver< LevelData< FArrayBox > >::solve_mfree_private(), and PetscSolver< LevelData< FArrayBox > >::solve_private().
|
pure virtual |
Implemented in PetscSolverFAB< LevelData< FArrayBox > >.
|
pure virtual |
Implemented in PetscSolverFAB< LevelData< FArrayBox > >.
void PetscSolver< T >::setNull | ( | bool | n = true | ) |
LinearOp<T>* PetscSolver< T >::m_op_mfree |
T PetscSolver< T >::m_phi_mfree |
T PetscSolver< T >::m_Lphi_mfree |
bool PetscSolver< T >::m_mfree_homogeneous |
bool PetscSolver< T >::m_homogeneous |
public member data: whether or not to use inhomogeneous boundary conditions.
Referenced by PetscSolver< LevelData< FArrayBox > >::apply_mfree(), PetscSolver< LevelData< FArrayBox > >::define(), and PetscSolver< LevelData< FArrayBox > >::setHomogeneous().
Real PetscSolver< T >::m_dx |
member data: grid spacing
Referenced by PetscSolver< LevelData< FArrayBox > >::define(), PetscSolver< LevelData< FArrayBox > >::PetscSolver(), PetscSolver< LevelData< FArrayBox > >::putChomboInPetsc(), PetscSolver< LevelData< FArrayBox > >::solve_mfree_private(), and PetscSolver< LevelData< FArrayBox > >::solve_private().
Mat PetscSolver< T >::m_mat |
Referenced by PetscSolver< LevelData< FArrayBox > >::applyOp(), PetscSolver< LevelData< FArrayBox > >::computeResidual(), PetscSolver< LevelData< FArrayBox > >::create_mat_vec(), PetscSolver< LevelData< FArrayBox > >::destroy(), PetscSolver< LevelData< FArrayBox > >::setup_solver(), PetscSolver< LevelData< FArrayBox > >::solve_mfree_private(), and PetscSolver< LevelData< FArrayBox > >::solve_private().
void* PetscSolver< T >::m_ctx |
Vec PetscSolver< T >::m_xx |
Referenced by PetscSolver< LevelData< FArrayBox > >::applyOp(), PetscSolver< LevelData< FArrayBox > >::computeResidual(), PetscSolver< LevelData< FArrayBox > >::create_mat_vec(), PetscSolver< LevelData< FArrayBox > >::destroy(), PetscSolver< LevelData< FArrayBox > >::solve_mfree_private(), and PetscSolver< LevelData< FArrayBox > >::solve_private().
Vec PetscSolver< T >::m_rr |
Vec PetscSolver< T >::m_bb |
Referenced by PetscSolver< LevelData< FArrayBox > >::applyOp(), PetscSolver< LevelData< FArrayBox > >::computeResidual(), PetscSolver< LevelData< FArrayBox > >::create_mat_vec(), PetscSolver< LevelData< FArrayBox > >::destroy(), PetscSolver< LevelData< FArrayBox > >::solve_mfree_private(), and PetscSolver< LevelData< FArrayBox > >::solve_private().
SNES PetscSolver< T >::m_snes |
KSP PetscSolver< T >::m_ksp |
Referenced by PetscSolver< LevelData< FArrayBox > >::destroy(), PetscSolver< LevelData< FArrayBox > >::getKSP(), PetscSolver< LevelData< FArrayBox > >::setOptionsPrefix(), PetscSolver< LevelData< FArrayBox > >::setup_solver(), PetscSolver< LevelData< FArrayBox > >::solve_mfree_private(), and PetscSolver< LevelData< FArrayBox > >::solve_private().
|
protected |
|
protected |
|
protected |
|
protected |
Referenced by PetscSolver< LevelData< FArrayBox > >::create_mat_vec(), PetscSolver< LevelData< FArrayBox > >::PetscSolver(), PetscSolver< LevelData< FArrayBox > >::setOptionsPrefix(), PetscSolver< LevelData< FArrayBox > >::setup_solver(), and PetscSolver< LevelData< FArrayBox > >::solve_mfree_private().
|
protected |
|
protected |
|
protected |
Referenced by PetscSolver< LevelData< FArrayBox > >::create_mat_vec().
LevelData<BaseFab<PetscInt> > PetscSolver< T >::m_gids |
Referenced by PetscSolver< LevelData< FArrayBox > >::computeResidual(), PetscSolver< LevelData< FArrayBox > >::create_mat_vec(), PetscSolver< LevelData< FArrayBox > >::putChomboInPetsc(), PetscSolver< LevelData< FArrayBox > >::putPetscInChombo(), PetscSolver< LevelData< FArrayBox > >::solve_mfree_private(), and PetscSolver< LevelData< FArrayBox > >::solve_private().
PetscInt PetscSolver< T >::m_gid0 |