![]() |
Block-Structured AMR Software Framework
|
#include <AMReX_MLCellLinOp.H>
Public Types | |
| using | FAB = typename FabDataType< MF >::fab_type |
| using | RT = typename FabDataType< MF >::value_type |
| using | BCType = LinOpBCType |
| using | BCMode = typename MLLinOpT< MF >::BCMode |
| using | StateMode = typename MLLinOpT< MF >::StateMode |
| using | Location = typename MLLinOpT< MF >::Location |
Public Types inherited from amrex::MLLinOpT< MF > | |
| using | MFType = MF |
| using | FAB = typename FabDataType< MF >::fab_type |
| using | RT = typename FabDataType< MF >::value_type |
| using | BCType = LinOpBCType |
| using | BCMode = LinOpEnumType::BCMode |
| using | StateMode = LinOpEnumType::StateMode |
| using | Location = LinOpEnumType::Location |
Public Member Functions | |
| MLCellLinOpT () | |
| ~MLCellLinOpT () override=default | |
| MLCellLinOpT (const MLCellLinOpT< MF > &)=delete | |
| MLCellLinOpT (MLCellLinOpT< MF > &&)=delete | |
| MLCellLinOpT< MF > & | operator= (const MLCellLinOpT< MF > &)=delete |
| MLCellLinOpT< MF > & | operator= (MLCellLinOpT< MF > &&)=delete |
| void | define (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo(), const Vector< FabFactory< FAB > const * > &a_factory={}) |
| Bind the operator to an AMR hierarchy. | |
| void | setLevelBC (int amrlev, const MF *levelbcdata, const MF *robinbc_a=nullptr, const MF *robinbc_b=nullptr, const MF *robinbc_f=nullptr) final |
| Provide per-level inhomogeneous boundary data. | |
| template<MultiFabLike AMF> requires (!std::same_as<MF,AMF>) | |
| void | setLevelBC (int amrlev, const AMF *levelbcdata, const AMF *robinbc_a=nullptr, const AMF *robinbc_b=nullptr, const AMF *robinbc_f=nullptr) |
| bool | needsUpdate () const override |
| Does it need update if it's reused? | |
| void | update () override |
| Update for reuse. | |
| void | setGaussSeidel (bool flag) noexcept |
| Toggle Gauss–Seidel smoothing in place of Jacobi relaxation. | |
| virtual bool | isCrossStencil () const |
| Whether the stencil is the cross shape. | |
| virtual bool | isTensorOp () const |
| Whether this operator is a tensor solve. | |
| void | updateSolBC (int amrlev, const MF &crse_bcdata) const |
| Refresh stored solution BC data from coarse inputs. | |
| void | updateCorBC (int amrlev, const MF &crse_bcdata) const |
| Refresh stored correction BC data from coarse inputs. | |
| virtual void | applyBC (int amrlev, int mglev, MF &in, BCMode bc_mode, StateMode s_mode, const MLMGBndryT< MF > *bndry=nullptr, bool skip_fillboundary=false) const |
| Apply physical BCs (optionally skipping FillBoundary). | |
| BoxArray | makeNGrids (int grid_size) const |
Helper that builds a BoxArray for NSolve with boxes no larger than the requested grid_size. | |
| void | restriction (int amrlev, int cmglev, MF &crse, MF &fine) const override |
| Restrict a fine-grid field onto its coarse counterpart. | |
| void | interpolation (int amrlev, int fmglev, MF &fine, const MF &crse) const override |
Add the prolongation of coarse data onto the fine grid (fine += prolong(crse)). | |
| void | interpAssign (int amrlev, int fmglev, MF &fine, MF &crse) const override |
Overwrite fine data with the prolongation of coarse data (fine = prolong(crse)). | |
| void | interpolationAmr (int famrlev, MF &fine, const MF &crse, IntVect const &nghost) const override |
| Prolong AMR-level data during FMG initialization. | |
| void | averageDownSolutionRHS (int camrlev, MF &crse_sol, MF &crse_rhs, const MF &fine_sol, const MF &fine_rhs) override |
| Average fine solution/RHS onto the next coarser AMR level. | |
| void | apply (int amrlev, int mglev, MF &out, MF &in, BCMode bc_mode, StateMode s_mode, const MLMGBndryT< MF > *bndry=nullptr) const override |
| Apply the linear operator with boundary conditions. | |
| void | smooth (int amrlev, int mglev, MF &sol, const MF &rhs, bool skip_fillboundary, int niter) const final |
Perform niter smoothing iterations on the supplied residual equation. | |
| void | solutionResidual (int amrlev, MF &resid, MF &x, const MF &b, const MF *crse_bcdata=nullptr) override |
Compute the residual resid = b - A(x) using solution boundary data. | |
| void | prepareForFluxes (int amrlev, const MF *crse_bcdata=nullptr) override |
| Ensure BC caches are ready for flux computations (e.g., getFluxes). | |
| void | correctionResidual (int amrlev, int mglev, MF &resid, MF &x, const MF &b, BCMode bc_mode, const MF *crse_bcdata=nullptr) final |
| Compute the correction residual with optional coarse data. | |
| void | reflux (int crse_amrlev, MF &res, const MF &crse_sol, const MF &, MF &, MF &fine_sol, const MF &) const final |
| Reflux fine-level fluxes into the coarse residual. | |
| void | compFlux (int amrlev, const Array< MF *, 3 > &fluxes, MF &sol, Location loc) const override |
| Compute face-centered fluxes from the supplied solution. | |
| void | compGrad (int amrlev, const Array< MF *, 3 > &grad, MF &sol, Location loc) const override |
| Compute directional gradients of the solution. | |
| void | applyMetricTerm (int amrlev, int mglev, MF &rhs) const final |
| Multiply the RHS by metric terms appropriate for curvilinear coordinates. | |
| void | unapplyMetricTerm (int amrlev, int mglev, MF &rhs) const final |
| Remove metric scaling previously applied to the RHS. | |
| Vector< RT > | getSolvabilityOffset (int amrlev, int mglev, MF const &rhs) const override |
| Compute the average offset needed to enforce solvability constraints. | |
| void | fixSolvabilityByOffset (int amrlev, int mglev, MF &rhs, Vector< RT > const &offset) const override |
| Apply solvability offsets to the RHS (subtracting the average). | |
| void | prepareForSolve () override |
| Prepare multilevel metadata before MLMG iterates (coefficients, BC caches, etc.). | |
| RT | xdoty (int amrlev, int mglev, const MF &x, const MF &y, bool local) const final |
| Dot product helper. | |
| RT | dotProductPrecond (Vector< MF const * > const &x, Vector< MF const * > const &y) const final |
| Dot product over the composite AMR hierarchy, excluding cells covered by finer levels (used when the operator is a preconditioner). | |
| RT | norm2Precond (Vector< MF const * > const &x) const final |
| L2 norm over the composite AMR hierarchy, excluding cells covered by finer levels (used when the operator is a preconditioner). | |
| virtual void | Fapply (int amrlev, int mglev, MF &out, const MF &in) const =0 |
| virtual void | Fsmooth (int amrlev, int mglev, MF &sol, const MF &rhs, int redblack) const =0 |
| virtual void | FFlux (int amrlev, const MFIter &mfi, const Array< FAB *, 3 > &flux, const FAB &sol, Location loc, int face_only=0) const =0 |
| virtual void | addInhomogNeumannFlux (int, const Array< MF *, 3 > &, MF const &, bool) const |
| Optional hook for adding inhomogeneous Neumann contributions. | |
| RT | normInf (int amrlev, MF const &mf, bool local) const override |
| Infinity norm helper used by solvers and diagnostics. | |
| void | averageDownAndSync (Vector< MF > &sol) const override |
| Average the solution hierarchy down (fine-to-coarse) and sync. | |
| void | avgDownResAmr (int clev, MF &cres, MF const &fres) const override |
| Average a residual from a fine AMR level to its coarse parent. | |
| void | beginPrecondBC () override |
| Called when the operator starts being used as a preconditioner. | |
| void | endPrecondBC () override |
| Called when the operator stops being used as a preconditioner. | |
| void | setInterpBndryHalfWidth (int w) |
| Control how many cells the interpolation boundary stencil spans. | |
Public Member Functions inherited from amrex::MLLinOpT< MF > | |
| MLLinOpT ()=default | |
| virtual | ~MLLinOpT ()=default |
| MLLinOpT (const MLLinOpT< MF > &)=delete | |
| MLLinOpT (MLLinOpT< MF > &&)=delete | |
| MLLinOpT< MF > & | operator= (const MLLinOpT< MF > &)=delete |
| MLLinOpT< MF > & | operator= (MLLinOpT< MF > &&)=delete |
| void | define (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info, const Vector< FabFactory< FAB > const * > &a_factory, bool eb_limit_coarsening=true) |
| Initialize the operator hierarchy on a set of AMR levels. | |
| virtual std::string | name () const |
| void | setDomainBC (const Array< BCType, 3 > &lobc, const Array< BCType, 3 > &hibc) noexcept |
| Boundary of the whole domain. | |
| void | setDomainBC (const Vector< Array< BCType, 3 > > &lobc, const Vector< Array< BCType, 3 > > &hibc) |
| Boundary of the whole domain. | |
| void | setDomainBCLoc (const Array< Real, 3 > &lo_bcloc, const Array< Real, 3 > &hi_bcloc) noexcept |
| Set location offsets for the physical domain boundaries. | |
| bool | needsCoarseDataForBC () const noexcept |
| Needs coarse data for bc? | |
| void | setCoarseFineBC (const MF *crse, int crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept |
| Set coarse/fine boundary conditions. For cell-centered solves only. | |
| void | setCoarseFineBC (const MF *crse, IntVect const &crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept |
| template<typename AMF > requires (!std::same_as<MF,AMF>) | |
| void | setCoarseFineBC (const AMF *crse, int crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept |
| template<typename AMF > requires (!std::same_as<MF,AMF>) | |
| void | setCoarseFineBC (const AMF *crse, IntVect const &crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept |
| template<MultiFabLike AMF> requires (!std::same_as<MF,AMF>) | |
| void | setLevelBC (int amrlev, const AMF *levelbcdata, const AMF *robinbc_a=nullptr, const AMF *robinbc_b=nullptr, const AMF *robinbc_f=nullptr) |
| void | setVerbose (int v) noexcept |
| Set verbosity. | |
| void | setMaxOrder (int o) noexcept |
| Set order of interpolation at coarse/fine boundary. | |
| int | getMaxOrder () const noexcept |
| Get order of interpolation at coarse/fine boundary. | |
| void | setEnforceSingularSolvable (bool o) noexcept |
| Control whether the solver should try to make singular problems solvable. | |
| bool | getEnforceSingularSolvable () const noexcept |
| virtual BottomSolver | getDefaultBottomSolver () const |
| virtual int | getNComp () const |
| Return number of components. | |
| virtual int | getNGrow (int=0, int=0) const |
| virtual void | normalize (int amrlev, int mglev, MF &mf) const |
Divide mf by the diagonal component of the operator. Used by the bottom solvers. | |
| virtual void | unimposeNeumannBC (int amrlev, MF &rhs) const |
| Undo Neumann contributions stored on the RHS. | |
| virtual void | applyInhomogNeumannTerm (int amrlev, MF &rhs) const |
| Add extra terms introduced when treating inhomogeneous Neumann BC as homogeneous. | |
| virtual void | applyOverset (int amrlev, MF &rhs) const |
| Overset-only hook for zeroing regions covered by masks. | |
| virtual bool | scaleRHS (int amrlev, MF *rhs) const |
| Optionally scale the RHS to fix solvability. | |
| virtual void | preparePrecond () |
| Prepare auxiliary data used when the operator acts as a preconditioner. | |
| virtual void | setDirichletNodesToZero (int amrlev, int mglev, MF &mf) const |
| Optional hook for masking out Dirichlet nodes or cells prior to GMRES solves; the default is a no-op with a warning. | |
| virtual bool | isSingular (int amrlev) const =0 |
Is it singular on AMR level amrlev? | |
| virtual bool | isBottomSingular () const =0 |
| Is the bottom of the multigrid hierarchy singular? | |
| virtual std::unique_ptr< MLLinOpT< MF > > | makeNLinOp (int grid_size) const |
| Create the NSolve counterpart of this operator with the requested grid size. | |
| virtual void | getFluxes (const Vector< Array< MF *, 3 > > &a_flux, const Vector< MF * > &a_sol, Location a_loc) const |
| Extract per-direction fluxes for each AMR level. | |
| virtual void | getFluxes (const Vector< MF * > &a_flux, const Vector< MF * > &a_sol) const |
| Extract fluxes when the operator stores them in single MultiFabs per level. | |
| virtual void | getEBFluxes (const Vector< MF * > &a_flux, const Vector< MF * > &a_sol) const |
| Extract embedded-boundary fluxes. | |
| virtual bool | supportNSolve () const |
| Whether this operator supports NSolve. | |
| virtual void | copyNSolveSolution (MF &dst, MF const &src) const |
Copy an NSolve solution from src to dst. | |
| virtual void | postSolve (Vector< MF * > const &sol) const |
| Optional hook invoked after the main solve completes. | |
| virtual void | avgDownResMG (int clev, MF &cres, MF const &fres) const |
| Average residuals from fine to coarse MG levels (FMG helper). | |
| bool | isMFIterSafe (int amrlev, int mglev1, int mglev2) const |
| Check whether mixing MFIter loops for different MG levels is safe. | |
| int | NAMRLevels () const noexcept |
| Return the number of AMR levels. | |
| int | NMGLevels (int amrlev) const noexcept |
| Return the number of MG levels at given AMR level. | |
| const Geometry & | Geom (int amr_lev, int mglev=0) const noexcept |
Geometry accessor for (amr_lev,mglev). | |
Public Attributes | |
| Vector< std::unique_ptr< MF > > | m_robin_bcval |
Public Attributes inherited from amrex::MLLinOpT< MF > | |
| Vector< Array< BCType, 3 > > | m_lobc |
| Vector< Array< BCType, 3 > > | m_hibc |
| Vector< Array< BCType, 3 > > | m_lobc_orig |
| Vector< Array< BCType, 3 > > | m_hibc_orig |
Protected Types | |
| using | RealTuple = Array< RT, 2 *3 > |
| using | BCTuple = Array< BoundCond, 2 *3 > |
Additional Inherited Members | |
Protected Member Functions inherited from amrex::MLLinOpT< MF > | |
| const Vector< int > & | AMRRefRatio () const noexcept |
| Return AMR refinement ratios. | |
| int | AMRRefRatio (int amr_lev) const noexcept |
| Return AMR refinement ratio at given AMR level. | |
| IntVect | AMRRefRatioVect (int amr_lev) const noexcept |
| Return AMR refinement ratio as IntVect (1 in hidden direction) | |
| FabFactory< FAB > const * | Factory (int amr_lev, int mglev=0) const noexcept |
| GpuArray< BCType, 3 > | LoBC (int icomp=0) const noexcept |
| GpuArray< BCType, 3 > | HiBC (int icomp=0) const noexcept |
| bool | hasBC (BCType bct) const noexcept |
| bool | hasInhomogNeumannBC () const noexcept |
| bool | hasRobinBC () const noexcept |
| virtual bool | supportRobinBC () const noexcept |
| virtual bool | supportInhomogNeumannBC () const noexcept |
| bool | isBottomActive () const noexcept |
| MPI_Comm | BottomCommunicator () const noexcept |
| MPI_Comm | Communicator () const noexcept |
| void | setCoarseFineBCLocation (const RealVect &cloc) noexcept |
| bool | doAgglomeration () const noexcept |
| bool | doConsolidation () const noexcept |
| bool | doSemicoarsening () const noexcept |
| bool | isCellCentered () const noexcept |
| virtual IntVect | getNGrowVectRestriction () const |
| virtual void | make (Vector< Vector< MF > > &mf, IntVect const &ng) const |
| virtual MF | make (int amrlev, int mglev, IntVect const &ng) const |
| virtual MF | makeAlias (MF const &mf) const |
| virtual MF | makeCoarseMG (int amrlev, int mglev, IntVect const &ng) const |
Allocate an MF on the next coarser MG level (mglev+1) with grow cells ng. | |
| virtual MF | makeCoarseAmr (int famrlev, IntVect const &ng) const |
Allocate an MF on the next coarser AMR level (famrlev-1) with grow cells ng. | |
| virtual std::unique_ptr< FabFactory< FAB > > | makeFactory (int, int) const |
| virtual void | resizeMultiGrid (int new_size) |
| bool | hasHiddenDimension () const noexcept |
| int | hiddenDirection () const noexcept |
| Box | compactify (Box const &b) const noexcept |
| template<typename T > | |
| Array4< T > | compactify (Array4< T > const &a) const noexcept |
| template<typename T > | |
| T | get_d0 (T const &dx, T const &dy, T const &) const noexcept |
| template<typename T > | |
| T | get_d1 (T const &, T const &dy, T const &dz) const noexcept |
Static Protected Attributes inherited from amrex::MLLinOpT< MF > | |
| static constexpr int | mg_coarsen_ratio = 2 |
| static constexpr int | mg_box_min_width = 2 |
| using amrex::MLCellLinOpT< MF >::BCMode = typename MLLinOpT<MF>::BCMode |
|
protected |
| using amrex::MLCellLinOpT< MF >::BCType = LinOpBCType |
| using amrex::MLCellLinOpT< MF >::FAB = typename FabDataType<MF>::fab_type |
| using amrex::MLCellLinOpT< MF >::Location = typename MLLinOpT<MF>::Location |
|
protected |
| using amrex::MLCellLinOpT< MF >::RT = typename FabDataType<MF>::value_type |
| using amrex::MLCellLinOpT< MF >::StateMode = typename MLLinOpT<MF>::StateMode |
| amrex::MLCellLinOpT< MF >::MLCellLinOpT | ( | ) |
|
overridedefault |
|
delete |
|
delete |
|
inlinevirtual |
Optional hook for adding inhomogeneous Neumann contributions.
Default implementation is a no-op; derived classes override if needed. The interface receives the AMR level, the face-centered gradient arrays, the solution MultiFab, and a flag indicating whether beta coefficients have already been applied to those gradients.
Reimplemented in amrex::MLCellABecLapT< MF >.
|
overridevirtual |
Apply the linear operator with boundary conditions.
| amrlev | AMR level index. |
| mglev | Multigrid level index. |
| out | Destination array for A(in). |
| in | Input state. |
| bc_mode | Boundary-condition mode (solution vs correction). |
| s_mode | State interpretation (solution or correction). |
| bndry | Optional cached BC data (nullptr rebuilds on the fly). |
Implements amrex::MLLinOpT< MF >.
|
virtual |
Apply physical BCs (optionally skipping FillBoundary).
| amrlev | AMR level index. |
| mglev | Multigrid level index. |
| in | MultiFab whose boundary values are updated. |
| bc_mode | Boundary-condition interpretation (solution vs correction). |
| s_mode | State interpretation (solution or correction). |
| bndry | Optional cached boundary data. |
| skip_fillboundary | True to assume ghost cells already filled. |
|
finalvirtual |
Multiply the RHS by metric terms appropriate for curvilinear coordinates.
| amrlev | AMR level index. |
| mglev | Multigrid level index. |
| rhs | Right-hand side updated in place. |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Average the solution hierarchy down (fine-to-coarse) and sync.
| sol | Vector of MultiFabs spanning all AMR levels. |
Implements amrex::MLLinOpT< MF >.
|
overridevirtual |
Average fine solution/RHS onto the next coarser AMR level.
| camrlev | Coarse AMR level to update. |
| crse_sol | Destination coarse solution. |
| crse_rhs | Destination coarse RHS. |
| fine_sol | Source fine solution. |
| fine_rhs | Source fine RHS. |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Average a residual from a fine AMR level to its coarse parent.
| clev | Coarse level index to update. |
| cres | Destination coarse residual. |
| fres | Source fine residual. |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Called when the operator starts being used as a preconditioner.
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Compute face-centered fluxes from the supplied solution.
| amrlev | AMR level index. |
| fluxes | Destination arrays for each spatial direction. |
| sol | Solution whose gradient forms the flux. |
| loc | Geometric location (face centers or centroids). |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Compute directional gradients of the solution.
| amrlev | AMR level index. |
| grad | Destination gradient arrays per direction. |
| sol | Source solution. |
| loc | Location where gradients are evaluated. |
Reimplemented from amrex::MLLinOpT< MF >.
|
finalvirtual |
Compute the correction residual with optional coarse data.
| amrlev | AMR level index. |
| mglev | Multigrid level index. |
| resid | Output residual. |
| x | Current correction. |
| b | Right-hand side. |
| bc_mode | Boundary-condition mode (usually homogeneous). |
| crse_bcdata | Optional coarse data for physical BCs. |
Implements amrex::MLLinOpT< MF >.
| void amrex::MLCellLinOpT< MF >::define | ( | const Vector< Geometry > & | a_geom, |
| const Vector< BoxArray > & | a_grids, | ||
| const Vector< DistributionMapping > & | a_dmap, | ||
| const LPInfo & | a_info = LPInfo(), |
||
| const Vector< FabFactory< FAB > const * > & | a_factory = {} |
||
| ) |
Bind the operator to an AMR hierarchy.
| a_geom | Geometries per level (fine to coarse). |
| a_grids | Grid arrays. |
| a_dmap | Distribution mappings. |
| a_info | Optional operator configuration overrides. |
| a_factory | Optional FAB factories (defaults to FArrayBox). |
|
finalvirtual |
Dot product over the composite AMR hierarchy, excluding cells covered by finer levels (used when the operator is a preconditioner).
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Called when the operator stops being used as a preconditioner.
Reimplemented from amrex::MLLinOpT< MF >.
|
pure virtual |
Implemented in amrex::MLALaplacianT< MF >, amrex::MLPoissonT< MF >, and amrex::MLABecLaplacianT< MF >.
|
pure virtual |
|
overridevirtual |
Apply solvability offsets to the RHS (subtracting the average).
| amrlev | AMR level index. |
| mglev | Multigrid level index. |
| rhs | Right-hand side updated in place. |
| offset | Offsets returned by getSolvabilityOffset(). |
Reimplemented from amrex::MLLinOpT< MF >.
|
pure virtual |
Implemented in amrex::MLALaplacianT< MF >, amrex::MLPoissonT< MF >, and amrex::MLABecLaplacianT< MF >.
|
overridevirtual |
Compute the average offset needed to enforce solvability constraints.
| amrlev | AMR level index. |
| mglev | Multigrid level index. |
| rhs | Right-hand side used to evaluate the offset. |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Overwrite fine data with the prolongation of coarse data (fine = prolong(crse)).
| amrlev | AMR level index. |
| fmglev | Multigrid level index within that AMR level. |
| fine | Destination fine-grid data (overwritten in place). |
| crse | Source coarse-grid data (its ghost cells may be modified). |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Add the prolongation of coarse data onto the fine grid (fine += prolong(crse)).
| amrlev | AMR level index. |
| fmglev | Multigrid level index within that AMR level. |
| fine | Destination fine-grid data (updated in place). |
| crse | Source coarse-grid data. |
Implements amrex::MLLinOpT< MF >.
|
overridevirtual |
Prolong AMR-level data during FMG initialization.
| famrlev | Fine AMR level receiving the data. |
| fine | Destination fine data. |
| crse | Source coarse data. |
| nghost | Requested grow cells (currently unused in this base implementation; overrides may use it). |
Reimplemented from amrex::MLLinOpT< MF >.
|
inlinevirtual |
Whether the stencil is the cross shape.
Reimplemented in amrex::MLEBTensorOp, amrex::MLTensorOp, and amrex::MLEBABecLap.
|
inlinevirtual |
Whether this operator is a tensor solve.
Reimplemented in amrex::MLEBTensorOp, and amrex::MLTensorOp.
| BoxArray amrex::MLCellLinOpT< MF >::makeNGrids | ( | int | grid_size | ) | const |
Helper that builds a BoxArray for NSolve with boxes no larger than the requested grid_size.
|
inlineoverridevirtual |
Does it need update if it's reused?
Reimplemented from amrex::MLLinOpT< MF >.
Reimplemented in amrex::MLEBTensorOp, amrex::MLTensorOp, and amrex::MLEBABecLap.
|
finalvirtual |
L2 norm over the composite AMR hierarchy, excluding cells covered by finer levels (used when the operator is a preconditioner).
| x | Vector of MultiFabs (one per AMR level). |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Infinity norm helper used by solvers and diagnostics.
| amrlev | AMR level index. |
| mf | MultiFab to measure. |
| local | True to skip parallel reduction. |
Implements amrex::MLLinOpT< MF >.
|
delete |
|
delete |
|
overridevirtual |
Ensure BC caches are ready for flux computations (e.g., getFluxes).
| amrlev | AMR level index. |
| crse_bcdata | Optional coarse BC data applied during setup. |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Prepare multilevel metadata before MLMG iterates (coefficients, BC caches, etc.).
Implements amrex::MLLinOpT< MF >.
Reimplemented in amrex::MLEBTensorOp, amrex::MLPoissonT< MF >, amrex::MLTensorOp, and amrex::MLEBABecLap.
|
finalvirtual |
Reflux fine-level fluxes into the coarse residual.
The unnamed arguments are the coarse RHS, fine residual, and fine RHS required by the MLLinOp interface; they are unused for cell-centered ABec ops. Assumes coarse solutions already have valid ghost cells while fine solutions do not.
| crse_amrlev | Coarse AMR level receiving refluxed updates. |
| res | Residual updated in place on the coarse level. |
| crse_sol | Coarse solution whose fluxes enter the reflux. |
| fine_sol | Fine solution that supplies the opposing fluxes. |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Restrict a fine-grid field onto its coarse counterpart.
| amrlev | AMR level whose data are being restricted. |
| cmglev | Multigrid level index on that AMR level. |
| crse | Destination MultiFab on the coarse level. |
| fine | Source MultiFab on the fine level. |
Implements amrex::MLLinOpT< MF >.
|
inlinenoexcept |
Toggle Gauss–Seidel smoothing in place of Jacobi relaxation.
| flag | True selects Gauss–Seidel; false selects Jacobi. (Gauss–Seidel is the default.) |
|
inline |
Control how many cells the interpolation boundary stencil spans.
| w | Half-width (in cells) for the interpolation boundary stencil. |
|
inline |
|
finalvirtual |
Provide per-level inhomogeneous boundary data.
Robin coefficients are required (non-null) when the operator has active Robin BCs; otherwise they are optional and passing nullptr keeps any previously stored values.
| amrlev | Target AMR level. |
| levelbcdata | Inhomogeneous BC data (nullptr uses homogeneous BCs). |
| robinbc_a | Robin a coefficient MultiFab. |
| robinbc_b | Robin b coefficient MultiFab. |
| robinbc_f | Robin f coefficient MultiFab. |
Implements amrex::MLLinOpT< MF >.
|
finalvirtual |
Perform niter smoothing iterations on the supplied residual equation.
| amrlev | AMR level index. |
| mglev | Multigrid level index. |
| sol | Correction updated in place. |
| rhs | Right-hand side for the current level. |
| skip_fillboundary | True to assume ghost cells are already filled. |
| niter | Number of smoothing passes to execute. |
Implements amrex::MLLinOpT< MF >.
|
overridevirtual |
Compute the residual resid = b - A(x) using solution boundary data.
| amrlev | AMR level index. |
| resid | Residual MultiFab (output). |
| x | Solution MultiFab. |
| b | Right-hand side MultiFab. |
| crse_bcdata | Optional coarse data used to populate coarse/fine BCs. |
Implements amrex::MLLinOpT< MF >.
|
finalvirtual |
Remove metric scaling previously applied to the RHS.
| amrlev | AMR level index. |
| mglev | Multigrid level index. |
| rhs | Right-hand side updated in place. |
Reimplemented from amrex::MLLinOpT< MF >.
|
overridevirtual |
Update for reuse.
Reimplemented from amrex::MLLinOpT< MF >.
Reimplemented in amrex::MLEBTensorOp, amrex::MLTensorOp, and amrex::MLEBABecLap.
| void amrex::MLCellLinOpT< MF >::updateCorBC | ( | int | amrlev, |
| const MF & | crse_bcdata | ||
| ) | const |
Refresh stored correction BC data from coarse inputs.
| amrlev | AMR level index being refreshed. |
| crse_bcdata | Coarse BC MultiFab copied into the correction cache. |
| void amrex::MLCellLinOpT< MF >::updateSolBC | ( | int | amrlev, |
| const MF & | crse_bcdata | ||
| ) | const |
Refresh stored solution BC data from coarse inputs.
| amrlev | AMR level index being refreshed. |
| crse_bcdata | Coarse BC MultiFab copied into the cache. |
|
finalvirtual |
Dot product helper.
| amrlev | AMR level index. |
| mglev | Multigrid level index. |
| x | First field. |
| y | Second field. |
| local | True to skip the MPI reduction. |
Implements amrex::MLLinOpT< MF >.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
mutableprotected |
|
protected |
|
protected |
|
protected |
| Vector<std::unique_ptr<MF> > amrex::MLCellLinOpT< MF >::m_robin_bcval |
|
mutableprotected |
|
protected |