|
| | MLNodeTensorLaplacian ()=default |
| |
| | MLNodeTensorLaplacian (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo()) |
| |
| | ~MLNodeTensorLaplacian () override=default |
| |
| | MLNodeTensorLaplacian (const MLNodeTensorLaplacian &)=delete |
| |
| | MLNodeTensorLaplacian (MLNodeTensorLaplacian &&)=delete |
| |
| MLNodeTensorLaplacian & | operator= (const MLNodeTensorLaplacian &)=delete |
| |
| MLNodeTensorLaplacian & | operator= (MLNodeTensorLaplacian &&)=delete |
| |
| void | setSigma (Array< Real, nelems > const &a_sigma) noexcept |
| |
| void | setBeta (Array< Real, 3 > const &a_beta) noexcept |
| |
| void | define (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo()) |
| |
| std::string | name () const override |
| |
| void | restriction (int amrlev, int cmglev, MultiFab &crse, MultiFab &fine) const final |
| |
| void | interpolation (int amrlev, int fmglev, MultiFab &fine, const MultiFab &crse) const final |
| |
| void | averageDownSolutionRHS (int camrlev, MultiFab &crse_sol, MultiFab &crse_rhs, const MultiFab &fine_sol, const MultiFab &fine_rhs) final |
| |
| void | reflux (int crse_amrlev, MultiFab &res, const MultiFab &crse_sol, const MultiFab &crse_rhs, MultiFab &fine_res, MultiFab &fine_sol, const MultiFab &fine_rhs) const final |
| |
| void | smooth (int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs, bool skip_fillboundary, int niter) const final |
| |
| void | prepareForSolve () final |
| |
| void | Fapply (int amrlev, int mglev, MultiFab &out, const MultiFab &in) const final |
| |
| void | Fsmooth (int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs) const final |
| |
| void | normalize (int amrlev, int mglev, MultiFab &mf) const final |
| |
| void | fixUpResidualMask (int amrlev, iMultiFab &resmsk) final |
| |
| | MLNodeLinOp () |
| |
| | ~MLNodeLinOp () override=default |
| |
| | MLNodeLinOp (const MLNodeLinOp &)=delete |
| |
| | MLNodeLinOp (MLNodeLinOp &&)=delete |
| |
| MLNodeLinOp & | operator= (const MLNodeLinOp &)=delete |
| |
| MLNodeLinOp & | operator= (MLNodeLinOp &&)=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< FArrayBox > const * > &a_factory={}, int a_eb_limit_coarsening=-1) |
| |
| void | setSmoothNumSweeps (int nsweeps) noexcept |
| |
| void | setLevelBC (int, const MultiFab *, const MultiFab *=nullptr, const MultiFab *=nullptr, const MultiFab *=nullptr) final |
| |
| void | apply (int amrlev, int mglev, MultiFab &out, MultiFab &in, BCMode bc_mode, StateMode s_mode, const MLMGBndry *bndry=nullptr) const final |
| |
| void | smooth (int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs, bool skip_fillboundary, int niter) const override |
| |
| void | solutionResidual (int amrlev, MultiFab &resid, MultiFab &x, const MultiFab &b, const MultiFab *crse_bcdata=nullptr) override |
| |
| void | correctionResidual (int amrlev, int mglev, MultiFab &resid, MultiFab &x, const MultiFab &b, BCMode bc_mode, const MultiFab *crse_bcdata=nullptr) override |
| |
| Vector< Real > | getSolvabilityOffset (int amrlev, int mglev, MultiFab const &rhs) const override |
| |
| void | fixSolvabilityByOffset (int amrlev, int mglev, MultiFab &rhs, Vector< Real > const &offset) const override |
| |
| void | preparePrecond () override |
| |
| void | setDirichletNodesToZero (int amrlev, int mglev, MultiFab &mf) const override |
| |
| bool | isSingular (int amrlev) const override |
| | Is it singular on given AMR level?
|
| |
| bool | isBottomSingular () const override |
| | Is the bottom of MG singular?
|
| |
| Real | xdoty (int amrlev, int mglev, const MultiFab &x, const MultiFab &y, bool local) const final |
| |
| Real | dotProductPrecond (Vector< MultiFab const * > const &x, Vector< MultiFab const * > const &y) const final |
| |
| Real | norm2Precond (Vector< MultiFab const * > const &x) const final |
| |
| virtual void | applyBC (int amrlev, int mglev, MultiFab &phi, BCMode bc_mode, StateMode state_mode, bool skip_fillboundary=false) const |
| |
| void | nodalSync (int amrlev, int mglev, MultiFab &mf) const |
| |
| void | buildMasks () |
| |
| void | setOversetMask (int amrlev, const iMultiFab &a_dmask) |
| |
| Real | normInf (int amrlev, MultiFab const &mf, bool local) const override |
| |
| void | avgDownResAmr (int, MultiFab &, MultiFab const &) const final |
| |
| void | interpolationAmr (int famrlev, MultiFab &fine, const MultiFab &crse, IntVect const &nghost) const override |
| |
| void | averageDownAndSync (Vector< MultiFab > &sol) const override |
| |
| void | interpAssign (int amrlev, int fmglev, MultiFab &fine, MultiFab &crse) const override |
| |
| | 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) |
| |
| 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) noexcept |
| | Boundary of the whole domain.
|
| |
| void | setDomainBCLoc (const Array< Real, 3 > &lo_bcloc, const Array< Real, 3 > &hi_bcloc) noexcept |
| | Set location of 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 , std::enable_if_t<!std::is_same_v< MF, AMF >, int > = 0> |
| void | setCoarseFineBC (const AMF *crse, int crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept |
| |
| template<typename AMF , std::enable_if_t<!std::is_same_v< MF, AMF >, int > = 0> |
| void | setCoarseFineBC (const AMF *crse, IntVect const &crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept |
| |
| virtual void | setLevelBC (int, const MF *, const MF *=nullptr, const MF *=nullptr, const MF *=nullptr)=0 |
| | Set boundary conditions for given level. For cell-centered solves only.
|
| |
| template<typename AMF , std::enable_if_t<!std::is_same_v< MF, AMF >, int > = 0> |
| 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 |
| |
| 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 bool | needsUpdate () const |
| | Does it need update if it's reused?
|
| |
| virtual void | update () |
| | Update for reuse.
|
| |
| virtual void | restriction (int amrlev, int cmglev, MF &crse, MF &fine) const =0 |
| | Restriction onto coarse MG level.
|
| |
| virtual void | interpolation (int amrlev, int fmglev, MF &fine, const MF &crse) const =0 |
| | Add interpolated coarse MG level data to fine MG level data.
|
| |
| virtual void | interpAssign (int amrlev, int fmglev, MF &fine, MF &crse) const |
| | Overwrite fine MG level data with interpolated coarse data.
|
| |
| virtual void | interpolationAmr (int famrlev, MF &fine, const MF &crse, IntVect const &nghost) const |
| | Interpolation between AMR levels.
|
| |
| virtual void | averageDownSolutionRHS (int camrlev, MF &crse_sol, MF &crse_rhs, const MF &fine_sol, const MF &fine_rhs) |
| | Average-down data from fine AMR level to coarse AMR level.
|
| |
| virtual void | apply (int amrlev, int mglev, MF &out, MF &in, BCMode bc_mode, StateMode s_mode, const MLMGBndryT< MF > *bndry=nullptr) const =0 |
| | Apply the linear operator, out = L(in)
|
| |
| virtual void | smooth (int amrlev, int mglev, MF &sol, const MF &rhs, bool skip_fillboundary, int niter) const =0 |
| | Smooth.
|
| |
| virtual void | normalize (int amrlev, int mglev, MF &mf) const |
| | Divide mf by the diagonal component of the operator. Used by bicgstab.
|
| |
| virtual void | solutionResidual (int amrlev, MF &resid, MF &x, const MF &b, const MF *crse_bcdata=nullptr)=0 |
| | Compute residual for solution.
|
| |
| virtual void | prepareForFluxes (int, const MF *=nullptr) |
| |
| virtual void | correctionResidual (int amrlev, int mglev, MF &resid, MF &x, const MF &b, BCMode bc_mode, const MF *crse_bcdata=nullptr)=0 |
| | Compute residual for the residual-correction form, resid = b - L(x)
|
| |
| virtual void | reflux (int crse_amrlev, MF &res, const MF &crse_sol, const MF &crse_rhs, MF &fine_res, MF &fine_sol, const MF &fine_rhs) const |
| | Reflux at AMR coarse/fine boundary.
|
| |
| virtual void | compFlux (int amrlev, const Array< MF *, 3 > &fluxes, MF &sol, Location loc) const |
| | Compute fluxes.
|
| |
| virtual void | compGrad (int amrlev, const Array< MF *, 3 > &grad, MF &sol, Location loc) const |
| | Compute gradients of the solution.
|
| |
| virtual void | applyMetricTerm (int, int, MF &) const |
| | apply metric terms if there are any
|
| |
| virtual void | unapplyMetricTerm (int, int, MF &) const |
| | unapply metric terms if there are any
|
| |
| virtual void | unimposeNeumannBC (int, MF &) const |
| | This is needed for our nodal projection solver.
|
| |
| virtual void | applyInhomogNeumannTerm (int, MF &) const |
| | Extra terms introduced when we treat inhomogeneous Nuemann BC as homogeneous.
|
| |
| virtual void | applyOverset (int, MF &) const |
| | for overset solver only
|
| |
| virtual bool | scaleRHS (int, MF *) const |
| | scale RHS to fix solvability
|
| |
| virtual Vector< RT > | getSolvabilityOffset (int, int, MF const &) const |
| | get offset for fixing solvability
|
| |
| virtual void | fixSolvabilityByOffset (int, int, MF &, Vector< RT > const &) const |
| | fix solvability by subtracting offset from RHS
|
| |
| virtual void | setDirichletNodesToZero (int, int, MF &) const |
| |
| virtual RT | xdoty (int amrlev, int mglev, const MF &x, const MF &y, bool local) const =0 |
| | x dot y, used by the bottom solver
|
| |
| virtual RT | dotProductPrecond (Vector< MF const * > const &x, Vector< MF const * > const &y) const |
| |
| virtual RT | norm2Precond (Vector< MF const * > const &x) const |
| |
| virtual std::unique_ptr< MLLinOpT< MF > > | makeNLinOp (int) const |
| |
| virtual void | getFluxes (const Vector< Array< MF *, 3 > > &, const Vector< MF * > &, Location) const |
| |
| virtual void | getFluxes (const Vector< MF * > &, const Vector< MF * > &) const |
| |
| virtual void | getEBFluxes (const Vector< MF * > &, const Vector< MF * > &) const |
| |
| virtual bool | supportNSolve () const |
| |
| virtual void | copyNSolveSolution (MF &, MF const &) const |
| |
| virtual void | postSolve (Vector< MF * > const &) const |
| |
| virtual RT | normInf (int amrlev, MF const &mf, bool local) const =0 |
| |
| virtual void | averageDownAndSync (Vector< MF > &sol) const =0 |
| |
| virtual void | avgDownResAmr (int clev, MF &cres, MF const &fres) const |
| |
| virtual void | avgDownResMG (int clev, MF &cres, MF const &fres) const |
| |
| virtual void | beginPrecondBC () |
| |
| virtual void | endPrecondBC () |
| |
| bool | isMFIterSafe (int amrlev, int mglev1, int mglev2) const |
| |
| 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 |
| |
|
| enum struct | CoarseningStrategy : int { Sigma
, RAP
} |
| |
| 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 |
| |
| static std::unique_ptr< iMultiFab > | makeOwnerMask (const BoxArray &ba, const DistributionMapping &dm, const Geometry &geom) |
| |
| 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 |
| |
| void | resizeMultiGrid (int new_size) override |
| |
| 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.
|
| |
| 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 |
| |
| virtual MF | makeCoarseAmr (int famrlev, IntVect const &ng) const |
| |
| virtual std::unique_ptr< FabFactory< FAB > > | makeFactory (int, int) const |
| |
| 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 |
| |
| std::unique_ptr< iMultiFab > | m_owner_mask_top |
| |
| std::unique_ptr< iMultiFab > | m_owner_mask_bottom |
| |
| Vector< Vector< std::unique_ptr< iMultiFab > > > | m_dirichlet_mask |
| |
| Vector< std::unique_ptr< iMultiFab > > | m_cc_fine_mask |
| |
| Vector< std::unique_ptr< iMultiFab > > | m_nd_fine_mask |
| |
| Vector< std::unique_ptr< LayoutData< int > > > | m_has_fine_bndry |
| |
| MultiFab | m_bottom_dot_mask |
| |
| MultiFab | m_coarse_dot_mask |
| |
| Vector< MultiFab > | m_precond_weight_mask |
| |
| Vector< std::unique_ptr< iMultiFab > > | m_norm_fine_mask |
| |
| CoarseningStrategy | m_coarsening_strategy = CoarseningStrategy::RAP |
| |
| bool | m_masks_built = false |
| |
| bool | m_overset_dirichlet_mask = false |
| |
| int | m_smooth_num_sweeps = 4 |
| |
| bool | m_in_solution_mode = true |
| |
| int | mg_domain_min_width = 2 |
| |
| LPInfo | info |
| |
| int | verbose = 0 |
| |
| int | maxorder = 3 |
| |
| bool | enforceSingularSolvable = true |
| |
| int | m_num_amr_levels = 0 |
| |
| Vector< int > | m_amr_ref_ratio |
| |
| Vector< int > | m_num_mg_levels |
| |
| const MLLinOpT< MF > * | m_parent = nullptr |
| |
| IntVect | m_ixtype |
| |
| bool | m_do_agglomeration = false |
| |
| bool | m_do_consolidation = false |
| |
| bool | m_do_semicoarsening = false |
| |
| Vector< IntVect > | mg_coarsen_ratio_vec |
| |
| Vector< Vector< Geometry > > | m_geom |
| | first Vector is for amr level and second is mg level
|
| |
| Vector< Vector< BoxArray > > | m_grids |
| |
| Vector< Vector< DistributionMapping > > | m_dmap |
| |
| Vector< Vector< std::unique_ptr< FabFactory< FAB > > > > | m_factory |
| |
| Vector< int > | m_domain_covered |
| |
| MPI_Comm | m_default_comm = MPI_COMM_NULL |
| |
| MPI_Comm | m_bottom_comm = MPI_COMM_NULL |
| |
| std::unique_ptr< CommContainer > | m_raii_comm |
| |
| Array< Real, 3 > | m_domain_bloc_lo {{ 0._rt , 0._rt , 0._rt }} |
| |
| Array< Real, 3 > | m_domain_bloc_hi {{ 0._rt , 0._rt , 0._rt }} |
| |
| bool | m_needs_coarse_data_for_bc = false |
| |
| LinOpBCType | m_coarse_fine_bc_type = LinOpBCType::Dirichlet |
| |
| IntVect | m_coarse_data_crse_ratio = IntVect(-1) |
| |
| RealVect | m_coarse_bc_loc |
| |
| const MF * | m_coarse_data_for_bc = nullptr |
| |
| MF | m_coarse_data_for_bc_raii |
| |
| bool | m_precond_mode = false |
| |
| static constexpr int | mg_coarsen_ratio = 2 |
| |
| static constexpr int | mg_box_min_width = 2 |
| |