|
chombo-discharge
|
Helmholtz operator for equations like alpha*a(x)*phi(x) + beta*div(b(x)*grad(phi(x))) = rho. More...
#include <CD_EBHelmholtzOp.H>


Classes | |
| struct | DomainBndryBoxes |
| Cached domain-boundary boxes for a single grid patch. More... | |
Public Types | |
| enum class | Smoother { NoRelax , PointJacobi , GauSaiRedBlack , GauSaiMultiColor , Chebyshev , RestrictedAdditiveSchwarz } |
| Relaxation method for the operators. | |
Public Member Functions | |
| EBHelmholtzOp ()=delete | |
| Disallowed default constructor. | |
| EBHelmholtzOp (const EBHelmholtzOp &a_other)=delete | |
| Disallowed copy constructor. | |
| EBHelmholtzOp (const EBHelmholtzOp &&a_other)=delete | |
| Disallowed move constructor. | |
| EBHelmholtzOp (const Location::Cell a_dataLocation, const EBLevelGrid &a_eblgFine, const EBLevelGrid &a_eblg, const EBLevelGrid &a_eblgCoFi, const EBLevelGrid &a_eblgCoar, const EBLevelGrid &a_eblgCoarMG, const RefCountedPtr< LevelData< BaseFab< bool > > > &a_validCells, const RefCountedPtr< EBMultigridInterpolator > &a_interpolator, const RefCountedPtr< EBReflux > &a_fluxReg, const RefCountedPtr< EBCoarAve > &a_coarAve, const RefCountedPtr< EBHelmholtzDomainBC > &a_domainBC, const RefCountedPtr< EBHelmholtzEBBC > &a_ebBC, const RealVect &a_probLo, const Real &a_dx, const int &a_refToFine, const int &a_refToCoar, const bool &a_hasFine, const bool &a_hasCoar, const bool &a_hasMGObjects, const Real &a_alpha, const Real &a_beta, const RefCountedPtr< LevelData< EBCellFAB > > &a_Acoef, const RefCountedPtr< LevelData< EBFluxFAB > > &a_Bcoef, const RefCountedPtr< LevelData< BaseIVFAB< Real > > > &a_BcoefIrreg, const IntVect &a_ghostPhi, const IntVect &a_ghostRhs, const Smoother &a_smoother, const Real &a_relaxFactor, const int &a_chebyOrder, const Real &a_chebyEigRatio, const int &a_rasInnerSweeps, const bool a_refluxFree=false) | |
| Full constructor. | |
| virtual | ~EBHelmholtzOp () |
| Dtor. | |
| EBHelmholtzOp & | operator= (const EBHelmholtzOp &a_oper)=delete |
| No copy assignment allowed. | |
| EBHelmholtzOp & | operator= (const EBHelmholtzOp &&a_oper)=delete |
| No move assignment allowed. | |
| void | turnOffCFInterp () |
| Turn off BCs. | |
| void | turnOnCFInterp () |
| Turn on BCs. | |
| void | turnOffExchange () |
| Turn off exchange operation. | |
| void | turnOnExchange () |
| Turn on exchange operation. | |
| void | turnOffCoarsening () |
| Turn off coarsening operation. | |
| void | turnOnCoarsening () |
| Turn on coarsening operation. | |
| void | setAcoAndBco (const RefCountedPtr< LevelData< EBCellFAB > > &a_Acoef, const RefCountedPtr< LevelData< EBFluxFAB > > &a_Bcoef, const RefCountedPtr< LevelData< BaseIVFAB< Real > > > &a_BcoefIrreg) |
| Update with new A and B coefficients. | |
| const RefCountedPtr< LevelData< EBCellFAB > > & | getAcoef () |
| Get the Helmholtz A-coefficient on cell centers. | |
| const RefCountedPtr< LevelData< EBFluxFAB > > & | getBcoef () |
| Get the Helmholtz B-coefficient on faces. | |
| const RefCountedPtr< LevelData< BaseIVFAB< Real > > > & | getBcoefIrreg () |
| Get the Helmholtz B-coefficient on the EB. | |
| void | coarsenCell (LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiFine) |
| Coarsen data from fine to coar level. | |
| void | coarsenFlux (LevelData< EBFluxFAB > &a_flux, const LevelData< EBFluxFAB > &a_fineFlux) |
| Coarsen fluxes on the fine level onto this level. | |
| void | pointJacobiKernel (EBCellFAB &a_Lcorr, EBCellFAB &a_corr, const EBCellFAB &a_resid, const EBCellFAB &a_Acoef, const EBFluxFAB &a_Bcoef, const BaseIVFAB< Real > &a_BcoefIrreg, const Box &a_cellBox, const DataIndex &a_dit) const noexcept |
| Point Jacobi kernel. | |
| void | chebyshevKernel (EBCellFAB &a_Lcorr, EBCellFAB &a_corr, const EBCellFAB &a_resid, const EBCellFAB &a_Acoef, const EBFluxFAB &a_Bcoef, const BaseIVFAB< Real > &a_BcoefIrreg, const Box &a_cellBox, const DataIndex &a_dit, const Real a_omega) const noexcept |
| Chebyshev smoother kernel. | |
| void | gauSaiRedBlackKernel (EBCellFAB &a_Lcorr, EBCellFAB &a_corr, const EBCellFAB &a_resid, const EBCellFAB &a_Acoef, const EBFluxFAB &a_Bcoef, const BaseIVFAB< Real > &a_BcoefIrreg, const Box &a_cellBox, const DataIndex &a_dit, const int &a_redBlack) const noexcept |
| Red-black Gauss-Seidel kernel. | |
| void | gauSaiMultiColorKernel (EBCellFAB &a_Lcorr, EBCellFAB &a_corr, const EBCellFAB &a_resid, const EBCellFAB &a_Acoef, const EBFluxFAB &a_Bcoef, const BaseIVFAB< Real > &a_BcoefIrreg, const Box &a_cellBox, const DataIndex &a_dit, const IntVect &a_color) const noexcept |
| Multi-color Gauss-Seidel kernel. | |
| void | residual (LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_rhs, const bool a_homogeneousPhysBc) override |
| Compute residual on this level. | |
| void | preCond (LevelData< EBCellFAB > &a_corr, const LevelData< EBCellFAB > &a_residual) override final |
| Precondition system before bottom solve. | |
| void | interpolateCF (LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > *a_phiCoar, const bool a_homogeneousCFBC) |
| Apply coarse-fine boundary conditions. | |
| void | homogeneousCFInterp (LevelData< EBCellFAB > &a_phi) |
| Do homogeneous coarse-fine interpolation. | |
| void | inhomogeneousCFInterp (LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoar) |
| Inhomogeneous coarse-fine interpolation. | |
| void | gauSaiMultiColor (LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_Lphi, const LevelData< EBCellFAB > &a_rhs, const IntVect &a_color) const |
| Multi-colored Gauss-Seidel kernel. Public because MFHelmholtzOp may want to use use. | |
| void | applyOp (LevelData< EBCellFAB > &a_Lphi, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > *const a_phiCoar, const bool a_homogeneousPhysBC, const bool a_homogeneousCFBC) |
| Apply operator on this level. This is a more general version which can turn on/off homogeneous and CF bcs. | |
| void | applyOp (LevelData< EBCellFAB > &a_Lphi, const LevelData< EBCellFAB > &a_phi, bool a_homogeneousPhysBc) override final |
| Apply operator. | |
| void | applyOp (EBCellFAB &a_Lphi, EBCellFAB &a_phi, const EBCellFAB &a_Acoef, const EBFluxFAB &a_Bcoef, const BaseIVFAB< Real > &a_BcoefIrreg, const Box &a_cellBox, const DataIndex &a_dit, const bool a_homogeneousPhysBC) const noexcept |
| Apply operator in a grid box. | |
| void | applyOpRegular (EBCellFAB &a_Lphi, EBCellFAB &a_phi, const EBCellFAB &a_Acoef, const EBFluxFAB &a_Bcoef, const BaseIVFAB< Real > &a_BcoefIrreg, const Box &a_cellBox, const DataIndex &a_dit, const bool a_homogeneousPhysBC) const noexcept |
| Apply operator in regular cells. | |
| void | applyDomainFlux (EBCellFAB &a_phi, const EBFluxFAB &a_Bcoef, const Box &a_cellBox, const DataIndex &a_dit, const bool a_homogeneousPhysBc) const noexcept |
| Apply domain flux. | |
| void | fillDomainFlux (EBFluxFAB &a_flux, const EBCellFAB &a_phi, const Box &a_cellBox, const DataIndex &a_dit, const bool a_homogeneousPhysBC) |
| Fill domain flux. This fills the flux on the domain face using centered differencing ala applyDomainFlux. | |
| void | applyOpIrregular (EBCellFAB &a_Lphi, const EBCellFAB &a_phi, const EBCellFAB &a_Acoef, const EBFluxFAB &a_Bcoef, const BaseIVFAB< Real > &a_BcoefIrreg, const BaseIVFAB< Real > &a_alphaDiagWeight, const Box &a_cellBox, const DataIndex &a_dit, const bool a_homogeneousPhysBC) const noexcept |
| Apply operator in irregular cells. | |
| void | create (LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs) override final |
| Create data which clones the layout of the other. | |
| void | assign (LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs) override final |
| Assign data. | |
| void | assignCopier (LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs, const Copier &a_copier) override final |
| Assign lhs. | |
| void | assignLocal (LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs) override final |
| Local assignment function. | |
| void | buildCopier (Copier &a_copier, const LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs) override |
| Build copier. | |
| Real | dotProduct (const LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs) override final |
| Compute the dot product?? | |
| void | dotProductMaskedLocal (Real &a_sumKappaXY, Real &a_sumVolume, const LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs, const LevelData< BaseFab< bool > > &a_mask, const bool a_needVolume) const noexcept |
| Rank-local (un-reduced) partials for the masked AMR-composite Krylov inner product. | |
| void | incr (LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs, const Real a_scale) override final |
| Increment operator. | |
| void | axby (LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_x, const LevelData< EBCellFAB > &a_y, const Real a_a, const Real a_b) override final |
| Set a_lhs = a*x + b*y. | |
| void | scale (LevelData< EBCellFAB > &a_lhs, const Real &a_scale) override final |
| Scale data. Returns a_lhs = a_lhs*a_scale. | |
| Real | norm (const LevelData< EBCellFAB > &a_rhs, const int a_order) override final |
| Compute norm of data. | |
| void | setToZero (LevelData< EBCellFAB > &a_lhs) override final |
| Set data to zero. | |
| void | createCoarser (LevelData< EBCellFAB > &a_coarse, const LevelData< EBCellFAB > &a_fine, bool a_ghosted) override final |
| Create coarsened data. | |
| void | relax (LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_residual, int a_iterations) override final |
| Relaxation method. This does smoothing for the system L(correction) = residual. | |
| void | restrictResidual (LevelData< EBCellFAB > &a_resCoar, LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_rhs) override final |
| Restrict residual onto coarse level. | |
| void | prolongIncrement (LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_correctCoarse) override final |
| Prolongation method. | |
| int | refToCoarser () override final |
| Return coarsening factor to coarser level (1 if there is no coarser level);. | |
| void | AMROperator (LevelData< EBCellFAB > &a_Lphi, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoar, const bool a_homogeneousPhysBC, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp) override final |
| Apply the AMR operator, i.e. compute L(phi) in an AMR context. | |
| void | refluxFreeAMROperator (LevelData< EBCellFAB > &a_Lphi, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoar, const bool a_homogeneousPhysBC, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp) |
| Apply the AMR operator, i.e. compute L(phi) in an AMR context. | |
| void | AMRResidual (LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoar, const LevelData< EBCellFAB > &a_rhs, bool a_homogeneousPhysBC, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp) override final |
| Compute residual on this level. AMR version. | |
| void | AMRResidualNF (LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoar, const LevelData< EBCellFAB > &a_rhs, bool a_homogeneousPhysBC) override final |
| Compute AMR residual on finest AMR level. | |
| void | AMRResidualNC (LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_rhs, bool a_homogeneousPhysBC, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp) override final |
| Compute AMR residual on coarsest. | |
| void | AMROperatorNF (LevelData< EBCellFAB > &a_Lphi, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoar, bool a_homogeneousPhysBC) override final |
| Apply the AMR operator, i.e. compute L(phi) in an AMR context, assuming no finer levels. | |
| void | AMROperatorNC (LevelData< EBCellFAB > &a_Lphi, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, bool a_homogeneousPhysBC, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp) override final |
| Apply the AMR operator, i.e. compute L(phi) in an AMR context, assuming no coarser AMR levels. | |
| void | AMRRestrict (LevelData< EBCellFAB > &a_residualCoarse, const LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_coarseCorrection, bool a_skip_res) override final |
| Restrict residual. | |
| void | AMRProlong (LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_coarseCorrection) override final |
| Prolongation onto AMR level. | |
| void | AMRUpdateResidual (LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_coarseCorrection) override final |
| Update AMR residual. | |
| void | setAlphaAndBeta (const Real &a_alpha, const Real &a_beta) override final |
| Set alpha coefficient and beta coefficient (can change as diffusion solvers progress) | |
| void | createCoarsened (LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs, const int &a_refRat) override final |
| Create coarsening of data holder. | |
| void | diagonalScale (LevelData< EBCellFAB > &a_rhs, bool a_kappaWeighted) override final |
| Do diagonal scaling. | |
| void | divideByIdentityCoef (LevelData< EBCellFAB > &a_rhs) override final |
| Divide by the a-coefficient. | |
| void | applyOpNoBoundary (LevelData< EBCellFAB > &a_Lphi, const LevelData< EBCellFAB > &a_phi) override final |
| Apply operator but turn off all BCs. | |
| void | fillGrad (const LevelData< EBCellFAB > &a_phi) override final |
| Not called, I think. | |
| void | getFlux (EBFluxFAB &a_flux, const LevelData< EBCellFAB > &a_data, const Box &a_grid, const DataIndex &a_dit, Real a_scale) override final |
| Fill flux. | |
| void | allocateFlux () const noexcept |
| Allocate m_flux. | |
| void | deallocateFlux () const noexcept |
| Deallocate m_flux. | |
| LevelData< EBFluxFAB > & | getFlux () const |
| Returns m_flux. This is used in refluxing routines. | |
| const LevelData< EBCellFAB > & | getRelaxationCoeff () const noexcept |
| Returns m_relCoef. Used by MFHelmholtzOp. | |
| int | getChebyOrder () const noexcept |
| Returns m_chebyOrder. Used by MFHelmholtzOp to replicate Chebyshev parameters. | |
| Real | getChebyEigRatio () const noexcept |
| Returns m_chebyEigRatio. Used by MFHelmholtzOp to replicate Chebyshev parameters. | |
| Real | getSpectralRadius () const noexcept |
| Returns m_spectralRadius. Used by MFHelmholtzOp to replicate Chebyshev parameters. | |
| int | getRasInnerSweeps () const noexcept |
| Returns m_rasInnerSweeps. Used by MFHelmholtzOp to replicate the Schwarz block solve. | |
| LayoutData< VoFIterator > & | getVofIterIrreg () const noexcept |
| Return all-cut VoFIterators (one per patch). Used by MFHelmholtzOp. | |
Static Public Member Functions | |
| static void | scaleLocal (LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs) noexcept |
| Local scaling function. Multiplies the left-hand side by the right-hand side. | |
Protected Member Functions | |
| void | relaxPointJacobi (LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_residual, const int a_iterations) |
| Jacobi relaxation. | |
| void | relaxGSRedBlack (LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_residual, const int a_iterations) |
| Jacobi relaxation. | |
| void | relaxGSMultiColor (LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_residual, const int a_iterations) |
| Multi-colored gauss-seidel relaxation. | |
| void | relaxChebyshev (LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_residual, const int a_iterations) |
| Chebyshev polynomial smoother. | |
| void | relaxRestrictedAdditiveSchwarz (LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_residual, const int a_iterations) |
| Restricted additive Schwarz smoother (block smoother). | |
| void | computeDiagWeight () |
| Calculate the weight of the diagonal term. | |
| void | computeRelaxationCoefficient () |
| Calculate relaxation coefficient. | |
| void | computeSpectralRadius () |
| Estimate the spectral radius of D^{-1}A (Jacobi-preconditioned operator) via the Gershgorin bound. | |
| void | makeAggStencil () |
| Compute aggregated stencils. | |
| void | defineStencils () |
| Define stencils. | |
| VoFStencil | getFaceCenterFluxStencil (const FaceIndex &a_face, const DataIndex &a_dit) const |
| Get the face-centered flux stencil. | |
| VoFStencil | getFaceCentroidFluxStencil (const FaceIndex &a_face, const DataIndex &a_dit) const |
| Get the face-centroid flux stencil. | |
| void | computeFlux (EBFaceFAB &a_fluxCentroid, const EBCellFAB &a_phi, const Box &a_cellBox, const DataIndex &a_dit, const int a_dir) |
| Compute centroid fluxes in a direction. | |
| void | computeFaceCenteredFlux (EBFaceFAB &a_fluxCenter, const EBCellFAB &a_phi, const Box &a_cellBox, const DataIndex &a_dit, const int a_dir) |
| Compute face-centered fluxes. | |
| void | computeFaceCentroidFlux (EBFaceFAB &a_flux, const EBCellFAB &a_phi, const Box &a_cellBox, const DataIndex &a_dit, const int a_dir) |
| Compute face-centroid fluxes. | |
| void | computeFlux (const LevelData< EBCellFAB > &a_phi) |
| Fill face centroid-centered fluxes on this level. | |
| void | reflux (LevelData< EBCellFAB > &a_Lphi, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, AMRLevelOp< LevelData< EBCellFAB > > &a_finerOp) |
| Reflux algorithm. | |
Protected Attributes | |
| Timer | m_timer |
| Timer so user can profile. | |
| Interval | m_interval |
| Interval. | |
| Smoother | m_smoother |
| Relaxation method. | |
| Location::Cell | m_dataLocation |
| Data centering. | |
| bool | m_refluxFree |
| Use reflux-free formulation or not. | |
| bool | m_profile |
| Profile the operator. | |
| bool | m_hasMGObjects |
| True if there is a multigrid level below this operator. | |
| bool | m_hasFine |
| True if there's a finer level. | |
| bool | m_hasCoar |
| True if there's a coarser level. | |
| int | m_refToCoar |
| Refinement factor to coarse level. | |
| int | m_refToFine |
| Refinement factor to fine level. | |
| int | m_numSmoothPreCond |
| Number of smoothings in the preconditioner. | |
| bool | m_doInterpCF |
| Do coarse-fine interpolation or not. | |
| bool | m_doExchange |
| Turn on/off exchange operation. | |
| bool | m_doCoarsen |
| Turn on/off exchange operation. | |
| IntVect | m_ghostPhi |
| Ghost cells for phi. | |
| IntVect | m_ghostRhs |
| Ghost cells for rhs (note, the operator rhs) | |
| Real | m_alpha |
| Alpha-coefficient. | |
| Real | m_beta |
| Beta-coefficient. | |
| Real | m_dx |
| Grid resolution;. | |
| Real | m_relaxFactor |
| Successive over-relaxation factor (Must be >= 1). | |
| int | m_chebyOrder |
| Number of Chebyshev polynomial steps per smoother invocation. | |
| Real | m_chebyEigRatio |
| Ratio lambda_max/lambda_min for the Chebyshev eigenvalue window. | |
| Real | m_spectralRadius |
| Spectral radius estimate for the Jacobi-preconditioned operator D^{-1}A. | |
| int | m_rasInnerSweeps |
| Number of inner (frozen-ghost) red-black sweeps per outer restricted-additive-Schwarz iteration. | |
| RealVect | m_vecDx |
| Vector resolution. | |
| RealVect | m_probLo |
| Lower-left corner of domain. | |
| Copier | m_exchangeCopier |
| Pre-built exchange copier. | |
| Copier | m_exchangeCopierFine |
| Pre-built exchange copier. | |
| EBLevelGrid | m_eblgFine |
| Fine level grid (if the operator has a fine level) | |
| EBLevelGrid | m_eblg |
| Grid. | |
| EBLevelGrid | m_eblgCoFi |
| Coarsened of m_eblg. | |
| EBLevelGrid | m_eblgCoar |
| Coarse level grid (if the operator has a coarse level) | |
| EBLevelGrid | m_eblgCoarMG |
| Coarser grids (multigrid level) | |
| EBMGRestrict | m_restrictOp |
| Restriction operator for AMR levels. | |
| EBMGRestrict | m_restrictOpMG |
| Restriction operator if this is an MG level. | |
| EBMGProlong | m_prolongOp |
| Prolongation operator for AMR levels. | |
| EBMGProlong | m_prolongOpMG |
| Prolongation operator for MG levels. | |
| RefCountedPtr< LevelData< BaseFab< bool > > > | m_validCells |
| Valid grid cells (might be nullptr on MG levels) | |
| RefCountedPtr< EBHelmholtzDomainBC > | m_domainBc |
| Domain bc object. | |
| RefCountedPtr< EBHelmholtzEBBC > | m_ebBc |
| Domain bc object. | |
| RefCountedPtr< EBMultigridInterpolator > | m_interpolator |
| Interpolator object. | |
| RefCountedPtr< EBReflux > | m_fluxReg |
| Flux register. | |
| RefCountedPtr< EBCoarAve > | m_coarAve |
| Conservative coarsener. | |
| RefCountedPtr< LevelData< EBCellFAB > > | m_Acoef |
| A-coefficient in Helmholtz equation. | |
| RefCountedPtr< LevelData< EBFluxFAB > > | m_Bcoef |
| B-coefficient in Helmholtz equation. | |
| RefCountedPtr< LevelData< BaseIVFAB< Real > > > | m_BcoefIrreg |
| B-coefficient in Helmholtz equation, but on EB faces. | |
| LevelData< EBCellFAB > | m_relCoef |
| Relaxation coefficient. | |
| LevelData< EBFluxFAB > * | m_flux |
| For holding fluxes. | |
| LayoutData< BaseIFFAB< Real > > | m_interpolant [SpaceDim] |
| Interpolant for when we want centroid fluxes. | |
| LayoutData< BaseIFFAB< FaceStencil > > | m_interpStencil [SpaceDim] |
| Face centroid interpolation stencil. | |
| LayoutData< BaseIFFAB< VoFStencil > > | m_centroidFluxStencil [SpaceDim] |
| Face centroid flux stencil. Defined on all faces connecting one or more irregular vofs. | |
| LayoutData< BaseIVFAB< VoFStencil > > | m_relaxStencils |
| Operator stencils in irregular cells (and ones that border irregular cells if using a centroid discretization). | |
| LayoutData< RefCountedPtr< VCAggStencil > > | m_aggRelaxStencil |
| For making irregular stencil applications go faster. | |
| LayoutData< BaseIVFAB< Real > > | m_alphaDiagWeight |
| Weights of diagonal alpha terms. | |
| LayoutData< BaseIVFAB< Real > > | m_betaDiagWeight |
| Weights of diagonal beta terms. | |
| LayoutData< VoFIterator > | m_vofIterIrreg |
| VoFIterator for irregular cells. | |
| LayoutData< VoFIterator > | m_vofIterMulti |
| VoFIterator for "multi-cells". | |
| LayoutData< VoFIterator > | m_vofIterStenc |
| VoFIterator which iterates over all cells that are 1) a cut-cell or 2) borders a cut-cell. | |
| LayoutData< VoFIterator > | m_vofIterDomLo [SpaceDim] |
| VoF iterators for lo domain side. | |
| LayoutData< VoFIterator > | m_vofIterDomHi [SpaceDim] |
| VoF iterators for hi domain side. | |
| std::map< std::pair< int, Side::LoHiSide >, Box > | m_sideBox |
| Domain boxes on each side. | |
| LayoutData< DomainBndryBoxes > | m_domainBndryBoxes |
| Precomputed domain-boundary boxes for each grid patch. | |
| Vector< IntVect > | m_colors |
| "Colors" for the relaxation methods | |
Static Protected Attributes | |
| static constexpr int | m_nComp = 1 |
| Number of components that we solve for (always one..) | |
| static constexpr int | m_comp = 0 |
| Component that we solve for. | |
Helmholtz operator for equations like alpha*a(x)*phi(x) + beta*div(b(x)*grad(phi(x))) = rho.
This can be used with TGA time stepping.
|
delete |
Disallowed copy constructor.
| [in] | a_other | Other operator |
|
delete |
Disallowed move constructor.
| [in] | a_other | Other operator |
| EBHelmholtzOp::EBHelmholtzOp | ( | const Location::Cell | a_dataLocation, |
| const EBLevelGrid & | a_eblgFine, | ||
| const EBLevelGrid & | a_eblg, | ||
| const EBLevelGrid & | a_eblgCoFi, | ||
| const EBLevelGrid & | a_eblgCoar, | ||
| const EBLevelGrid & | a_eblgCoarMG, | ||
| const RefCountedPtr< LevelData< BaseFab< bool > > > & | a_validCells, | ||
| const RefCountedPtr< EBMultigridInterpolator > & | a_interpolator, | ||
| const RefCountedPtr< EBReflux > & | a_fluxReg, | ||
| const RefCountedPtr< EBCoarAve > & | a_coarAve, | ||
| const RefCountedPtr< EBHelmholtzDomainBC > & | a_domainBC, | ||
| const RefCountedPtr< EBHelmholtzEBBC > & | a_ebBC, | ||
| const RealVect & | a_probLo, | ||
| const Real & | a_dx, | ||
| const int & | a_refToFine, | ||
| const int & | a_refToCoar, | ||
| const bool & | a_hasFine, | ||
| const bool & | a_hasCoar, | ||
| const bool & | a_hasMGObjects, | ||
| const Real & | a_alpha, | ||
| const Real & | a_beta, | ||
| const RefCountedPtr< LevelData< EBCellFAB > > & | a_Acoef, | ||
| const RefCountedPtr< LevelData< EBFluxFAB > > & | a_Bcoef, | ||
| const RefCountedPtr< LevelData< BaseIVFAB< Real > > > & | a_BcoefIrreg, | ||
| const IntVect & | a_ghostPhi, | ||
| const IntVect & | a_ghostRhs, | ||
| const Smoother & | a_smoother, | ||
| const Real & | a_relaxFactor, | ||
| const int & | a_chebyOrder, | ||
| const Real & | a_chebyEigRatio, | ||
| const int & | a_rasInnerSweeps, | ||
| const bool | a_refluxFree = false |
||
| ) |
Full constructor.
| [in] | a_dataLocation | Data location, either cell center or cell centroid |
| [in] | a_eblgFine | Fine grids |
| [in] | a_eblg | Grids on this level |
| [in] | a_eblgCoFi | Coarsening of fine level grids |
| [in] | a_eblgCoar | Coarse grids |
| [in] | a_eblgCoarMG | Multigrid-grids |
| [in] | a_validCells | Valid grid cells |
| [in] | a_interpolator | Interpolator |
| [in] | a_fluxReg | Flux register |
| [in] | a_coarAve | Coarsener |
| [in] | a_domainBC | Domain BC |
| [in] | a_ebBC | Boundary conditions on EBs |
| [in] | a_probLo | Lower-left corner of computational domain |
| [in] | a_dx | Grid resolution |
| [in] | a_refToFine | Refinement ratio to fine level |
| [in] | a_refToCoar | Refinement ratio to coarse level |
| [in] | a_hasFine | Has fine level or not |
| [in] | a_hasCoar | Has coarse level or not |
| [in] | a_hasMGObjects | Has multigrid-objects (special objects between AMR levels, or below the AMR levels) |
| [in] | a_alpha | Operator alpha |
| [in] | a_beta | Operator beta |
| [in] | a_Acoef | Operator A-coefficient |
| [in] | a_Bcoef | Operator B-coefficient |
| [in] | a_ghostPhi | Ghost cells in solution vector |
| [in] | a_ghostRhs | Ghost cells in right-hand side |
| [in] | a_smoother | Which smoother to use |
| [in] | a_relaxFactor | Relaxation factor |
| [in] | a_chebyOrder | Chebyshev polynomial degree (only used when a_smoother is Smoother::Chebyshev) |
| [in] | a_chebyEigRatio | Chebyshev eigenvalue ratio lambda_max/lambda_min (only used when a_smoother is Smoother::Chebyshev) |
| [in] | a_rasInnerSweeps | Number of inner frozen-ghost sweeps per restricted-additive-Schwarz iteration (only used when a_smoother is Smoother::RestrictedAdditiveSchwarz) |
| [in] | a_refluxFree | If true, use the reflux-free AMR operator (skips coarse-fine flux refluxing) |
| [in] | a_BcoefIrreg | B-coefficient on EB faces |
|
finaloverride |
Apply the AMR operator, i.e. compute L(phi) in an AMR context.
| [in] | a_phiFine | Phi on fine level |
| [in] | a_phi | Phi on this level |
| [in] | a_phiCoar | Phi on coar level |
| [in] | a_homogeneousPhysBC | Use homogeneous physical BCs or not |
| [in] | a_finerOp | Finer operator |
This involves ghost cell interpolation if there's a coarse level, and refluxing if there's a fine level.
| [in] | a_Lphi | Lphi |
|
finaloverride |
Apply the AMR operator, i.e. compute L(phi) in an AMR context, assuming no coarser AMR levels.
| [out] | a_Lphi | L(phi) |
| [in] | a_phiFine | Phi on fine level |
| [in] | a_phi | Phi on this level |
| [in] | a_homogeneousPhysBC | Use homogeneous physical BCs or not |
| [in] | a_finerOp | Finer operator |
This involves ghost cell interpolation if there's a coarse level, and refluxing if there's a fine level.
|
finaloverride |
Apply the AMR operator, i.e. compute L(phi) in an AMR context, assuming no finer levels.
| [out] | a_Lphi | L(phi) |
| [in] | a_phi | Phi on this level |
| [in] | a_phiCoar | Phi on coar level |
| [in] | a_homogeneousPhysBC | Use homogeneous physical BCs or not |
This involves ghost cell interpolation if there's a coarse level, and refluxing if there's a fine level.
|
finaloverride |
Prolongation onto AMR level.
| [out] | a_correction | Interpolated correction |
| [in] | a_coarseCorrection | Correction on coarse level |
|
finaloverride |
Compute residual on this level. AMR version.
| [out] | a_residual | Residual on this level |
| [in] | a_phiFine | Phi on fine level |
| [in] | a_phi | Phi on this level |
| [in] | a_phiCoar | Phi on coar level |
| [in] | a_rhs | Right-hand side on this level |
| [in] | a_homogeneousPhysBC | Use homogeneous physical BCs or not |
| [in] | a_finerOp | Finer operator |
|
finaloverride |
Compute AMR residual on coarsest.
| [out] | a_residual | Residual on this level |
| [in] | a_phiFine | Phi on fine level |
| [in] | a_phi | Phi on this level |
| [in] | a_rhs | Right-hand side on this level |
| [in] | a_homogeneousPhysBC | Use homogeneous physical BCs or not |
| [in] | a_finerOp | Finer operator |
|
finaloverride |
Compute AMR residual on finest AMR level.
| [out] | a_residual | Residual on this level |
| [in] | a_phi | Phi on this level |
| [in] | a_phiCoar | Phi on coar level |
| [in] | a_rhs | Right-hand side on this level |
| [in] | a_homogeneousPhysBC | Use homogeneous physical BCs or not |
|
finaloverride |
Restrict residual.
| [out] | a_residualCoarse | Coarse residual |
| [out] | a_residual | Residual |
| [out] | a_correction | Correction on this level |
| [out] | a_coarseCorrection | Coarse level correction |
| [in] | a_skip_res | I have no idea what this one is supposed to do. |
|
finaloverride |
Update AMR residual.
| [in] | a_residual | Residual |
| [in] | a_correction | Correction |
| [in] | a_coarseCorrection | Coarse-level correction |
|
noexcept |
Apply domain flux.
| [in,out] | a_phi | Cell data |
| [in] | a_Bcoef | Helmholtz B-coefficient |
| [in] | a_cellBox | Computation box |
| [in] | a_dit | Data index |
| [in] | a_homogeneousPhysBc | Homogeneous phys bc |
|
noexcept |
Apply operator in a grid box.
| [out] | a_Lphi | L(phi) |
| [in] | a_phi | Phi |
| [in] | a_cellBox | Grid box |
| [in] | a_dit | Data indxe |
| [in] | a_homogeneousPhysBC | Homogeneous physical BCs or not |
| [in] | a_Acoef | Description |
| [in] | a_Bcoef | Description |
| [in] | a_BcoefIrreg | Description |
|
finaloverride |
Apply operator.
| [out] | a_Lphi | L(phi) |
| [in] | a_phi | Phi |
| [in] | a_homogeneousPhysBc | Homogeneous physical BCs or not |
This computes a_Lphi = L(a_phi) using homogeneous physical BCs or not
| void EBHelmholtzOp::applyOp | ( | LevelData< EBCellFAB > & | a_Lphi, |
| const LevelData< EBCellFAB > & | a_phi, | ||
| const LevelData< EBCellFAB > *const | a_phiCoar, | ||
| const bool | a_homogeneousPhysBC, | ||
| const bool | a_homogeneousCFBC | ||
| ) |
Apply operator on this level. This is a more general version which can turn on/off homogeneous and CF bcs.
| [out] | a_Lphi | L(phi) |
| [out] | a_phi | Phi on this level |
| [out] | a_phiCoar | Coarse-level phi. If you have a coar this |
| [in] | a_homogeneousPhysBC | Use homogeneous physical BCs or not |
| [in] | a_homogeneousCFBC | Use homogeneous coarse-fine bcs or not |
|
noexcept |
Apply operator in irregular cells.
| [out] | a_Lphi | L(phi) |
| [in] | a_phi | Cell-centered data |
| [in] | a_cellBox | Cell box |
| [in] | a_dit | Grid index |
| [in] | a_homogeneousPhysBC | Homogeneous physical BCs or not |
| [in] | a_Acoef | Description |
| [in] | a_Bcoef | Description |
| [in] | a_BcoefIrreg | Description |
| [in] | a_alphaDiagWeight | Description |
|
finaloverride |
Apply operator but turn off all BCs.
| [in,out] | a_Lphi | L(phi) on output |
| [in] | a_phi | Phi |
|
noexcept |
Apply operator in regular cells.
| [out] | a_Lphi | L(phi) |
| [in] | a_phi | Phi |
| [in] | a_cellBox | Grid box |
| [in] | a_dit | Data indxe |
| [in] | a_homogeneousPhysBC | Homogeneous physical BCs or not |
| [in] | a_Acoef | Description |
| [in] | a_Bcoef | Description |
| [in] | a_BcoefIrreg | Description |
|
finaloverride |
Assign data.
This does a copy from rhs to lhs
| [in,out] | a_lhs | Description |
| [in,out] | a_rhs | Description |
|
finaloverride |
Assign lhs.
This is the version that is called by AMRMultiGrid::VCycle. Note that the other version might be called by other operators (e.g., EBBackwardEuler)
| [out] | a_lhs | Outgoing data |
| [in] | a_rhs | Incoming data |
| [in] | a_copier | Copier |
|
finaloverride |
Local assignment function.
| [out] | a_lhs | Equal to a_rhs on output |
| [in] | a_rhs | Data |
|
finaloverride |
Set a_lhs = a*x + b*y.
| [out] | a_lhs | Result data |
| [in] | a_x | x-data |
| [in] | a_y | y-data |
| [in] | a_a | Scaling factor |
| [in] | a_b | Scaling factor |
|
override |
Build copier.
| [out] | a_copier | Copier for copying between a_lhs and a_rhs |
| [in] | a_lhs | Copying from |
| [in] | a_rhs | Copying to |
|
noexcept |
Chebyshev smoother kernel.
Same as pointJacobiKernel but scales the update by a_omega (the Chebyshev step size).
| [in,out] | a_Lcorr | Storage for computing L(a_corr) |
| [in,out] | a_corr | Correction |
| [in] | a_resid | Residual |
| [in] | a_Acoef | A-coefficient |
| [in] | a_Bcoef | B-coefficient |
| [in] | a_BcoefIrreg | B-coefficient on EB faces |
| [in] | a_cellBox | Grid box |
| [in] | a_dit | Data index |
| [in] | a_omega | Chebyshev step-size scaling factor |
| void EBHelmholtzOp::coarsenCell | ( | LevelData< EBCellFAB > & | a_phi, |
| const LevelData< EBCellFAB > & | a_phiFine | ||
| ) |
Coarsen data from fine to coar level.
| [in] | a_phi | Data on this level |
| [in] | a_phiFine | Data on finer level |
| void EBHelmholtzOp::coarsenFlux | ( | LevelData< EBFluxFAB > & | a_flux, |
| const LevelData< EBFluxFAB > & | a_fineFlux | ||
| ) |
Coarsen fluxes on the fine level onto this level.
User must update fluxes before calling this routine.
| [in] | a_flux | Flux on this level. |
| [in] | a_fineFlux | Flux on finer level |
|
protected |
Compute face-centered fluxes.
| [out] | a_fluxCenter | Flux on center |
| [in] | a_phi | Cell-centered data |
| [in] | a_cellBox | Cell-centered compute box. |
| [in] | a_dit | Data index |
| [in] | a_dir | Coordinate direction |
|
protected |
Compute face-centroid fluxes.
| [out] | a_flux | Flux on face centroid |
| [in] | a_phi | Cell-centered data |
| [in] | a_cellBox | Cell-centered compute box. |
| [in] | a_dit | Data index |
| [in] | a_dir | Coordinate direction |
|
protected |
Fill face centroid-centered fluxes on this level.
| [in] | a_phi | Cell-centered data. Must have updated ghost cells for this to make any sense. |
|
protected |
Compute centroid fluxes in a direction.
| [out] | a_fluxCentroid | Flux on face centroid |
| [in] | a_phi | Cell-centered data |
| [in] | a_cellBox | Cell-centered compute box. |
| [in] | a_dit | Data index |
| [in] | a_dir | Coordinate direction |
|
protected |
Estimate the spectral radius of D^{-1}A (Jacobi-preconditioned operator) via the Gershgorin bound.
rho_i = 2 - alpha * A_i * relCoef_i. Equals 2 for pure Laplacian and decreases with alpha > 0. Must be called after computeRelaxationCoefficient() and computeDiagWeight().
|
finaloverride |
Create data which clones the layout of the other.
| [out] | a_lhs | Data clone (returned data is not initialized) |
| [out] | a_rhs | Data layout to be cloned |
|
finaloverride |
Create coarsening of data holder.
| [out] | a_lhs | Coarsened data |
| [in] | a_rhs | Fine data |
| [in] | a_refRat | Coarsening factor |
|
finaloverride |
Create coarsened data.
| [out] | a_coarse | Coarse data |
| [in] | a_fine | Fine data |
| [in] | a_ghosted | Include ghost cells or nto |
|
finaloverride |
Do diagonal scaling.
| [in,out] | a_rhs | Data to be scaled |
| [in] | a_kappaWeighted | Use kappa-weighted scaling or not |
|
finaloverride |
Divide by the a-coefficient.
| [in,out] | a_rhs | Divided data |
|
finaloverride |
Compute the dot product??
| [in,out] | a_lhs | Description |
| [in,out] | a_rhs | Description |
|
noexcept |
Rank-local (un-reduced) partials for the masked AMR-composite Krylov inner product.
Same kappa-weighted inner product as dotProduct, except cells where a_mask is false (e.g. cells covered by a finer AMR level) are excluded from the numerator; the volume normalisation counts all valid cells, matching Chombo's MultilevelLinearOp AMR dot product. Unlike dotProduct this performs NO MPI reduction: it returns the rank-local partial sums so the caller (AMRMultigridKrylovOp) can batch the per-level partials into a single MPI_Allreduce. The volume is geometry-only and is reduced/cached once by the caller, so a_needVolume can be set false on later calls to skip recomputing it.
| [out] | a_sumKappaXY | Rank-local masked numerator (sum of kappa*X*Y over unmasked cells) |
| [out] | a_sumVolume | Rank-local volume (sum over all valid cells); set to zero when a_needVolume is false |
| [in] | a_lhs | First operand |
| [in] | a_rhs | Second operand |
| [in] | a_mask | Per-cell mask; false marks cells excluded from the numerator |
| [in] | a_needVolume | If false, skip accumulating a_sumVolume (caller already cached it) |
| void EBHelmholtzOp::fillDomainFlux | ( | EBFluxFAB & | a_flux, |
| const EBCellFAB & | a_phi, | ||
| const Box & | a_cellBox, | ||
| const DataIndex & | a_dit, | ||
| const bool | a_homogeneousPhysBC | ||
| ) |
Fill domain flux. This fills the flux on the domain face using centered differencing ala applyDomainFlux.
a_flux is replaced by the user-specified flux on the domain faces.
| [in,out] | a_flux | Flux data holder. |
| [in,out] | a_phi | Cell-centered data |
| [in] | a_cellBox | Computation box |
| [in] | a_dit | Data index |
| [in] | a_homogeneousPhysBC | If true, use homogeneous physical BCs |
|
finaloverride |
Not called, I think.
| [in] | a_phi | Phi |
| void EBHelmholtzOp::gauSaiMultiColor | ( | LevelData< EBCellFAB > & | a_phi, |
| const LevelData< EBCellFAB > & | a_Lphi, | ||
| const LevelData< EBCellFAB > & | a_rhs, | ||
| const IntVect & | a_color | ||
| ) | const |
Multi-colored Gauss-Seidel kernel. Public because MFHelmholtzOp may want to use use.
| [in] | a_phi | Correction |
| [in] | a_rhs | Residual |
| [in] | a_color | "Color": |
| [in] | a_Lphi | Description |
|
noexcept |
Multi-color Gauss-Seidel kernel.
| [in,out] | a_Lcorr | Storage for computing L(a_corr) |
| [in,out] | a_corr | Correction |
| [in] | a_resid | Residual |
| [in] | a_Acoef | A-coefficient |
| [in] | a_Bcoef | B-coefficient |
| [in] | a_BcoefIrreg | B-coefficient on EB faces |
| [in] | a_cellBox | Grid box |
| [in] | a_dit | Data index |
| [in] | a_color | Color |
|
noexcept |
Red-black Gauss-Seidel kernel.
| [in,out] | a_Lcorr | Storage for computing L(a_corr) |
| [in,out] | a_corr | Correction |
| [in] | a_resid | Residual |
| [in] | a_Acoef | A-coefficient |
| [in] | a_Bcoef | B-coefficient |
| [in] | a_BcoefIrreg | B-coefficient on EB faces |
| [in] | a_redBlack | Red or black |
| [in] | a_cellBox | Grid box |
| [in] | a_dit | Data index |
| const RefCountedPtr< LevelData< EBCellFAB > > & EBHelmholtzOp::getAcoef | ( | ) |
Get the Helmholtz A-coefficient on cell centers.
| const RefCountedPtr< LevelData< EBFluxFAB > > & EBHelmholtzOp::getBcoef | ( | ) |
Get the Helmholtz B-coefficient on faces.
| const RefCountedPtr< LevelData< BaseIVFAB< Real > > > & EBHelmholtzOp::getBcoefIrreg | ( | ) |
Get the Helmholtz B-coefficient on the EB.
|
noexcept |
Returns m_chebyEigRatio. Used by MFHelmholtzOp to replicate Chebyshev parameters.
|
noexcept |
Returns m_chebyOrder. Used by MFHelmholtzOp to replicate Chebyshev parameters.
|
protected |
Get the face-centered flux stencil.
| [in] | a_face | Face |
| [in] | a_dit | Data index. Need because we multiply by B-coefficient |
|
protected |
Get the face-centroid flux stencil.
| [in] | a_face | Face |
| [in] | a_dit | Data index. Need because we multiply by B-coefficient |
| LevelData< EBFluxFAB > & EBHelmholtzOp::getFlux | ( | ) | const |
Returns m_flux. This is used in refluxing routines.
|
finaloverride |
Fill flux.
| [out] | a_flux | Flux |
| [in] | a_data | Data for which we will compute the flux |
| [in] | a_grid | Grid |
| [in] | a_dit | Corresponding data index. |
| [in] | a_scale | Scaling factor |
|
noexcept |
Returns m_rasInnerSweeps. Used by MFHelmholtzOp to replicate the Schwarz block solve.
|
noexcept |
Returns m_relCoef. Used by MFHelmholtzOp.
|
noexcept |
Returns m_spectralRadius. Used by MFHelmholtzOp to replicate Chebyshev parameters.
|
noexcept |
Return all-cut VoFIterators (one per patch). Used by MFHelmholtzOp.
| void EBHelmholtzOp::homogeneousCFInterp | ( | LevelData< EBCellFAB > & | a_phi | ) |
Do homogeneous coarse-fine interpolation.
| [in] | a_phi | Data |
|
finaloverride |
Increment operator.
| [in,out] | a_lhs | Data to be incremented |
| [in] | a_rhs | Incrementation data |
| [in] | a_scale | Scaling factor |
| void EBHelmholtzOp::inhomogeneousCFInterp | ( | LevelData< EBCellFAB > & | a_phi, |
| const LevelData< EBCellFAB > & | a_phiCoar | ||
| ) |
Inhomogeneous coarse-fine interpolation.
| [in,out] | a_phiCoar | Coarse data. |
| [in] | a_phi | Phi |
| void EBHelmholtzOp::interpolateCF | ( | LevelData< EBCellFAB > & | a_phiFine, |
| const LevelData< EBCellFAB > * | a_phiCoar, | ||
| const bool | a_homogeneousCFBC | ||
| ) |
Apply coarse-fine boundary conditions.
| [in,out] | a_phiFine | Fine data |
| [in,out] | a_phiCoar | Coarse data |
| [in] | a_homogeneousCFBC | Homogeneous CF or not (i.e. coar data is zero); |
|
finaloverride |
Compute norm of data.
| [in] | a_rhs | Data to compute norm of |
| [in] | a_order | Norm order (currently ignored) |
a_order is currently ignored as we call a static routine in EBAMRPoissonOp for now.
|
delete |
No move assignment allowed.
| [in] | a_oper | Oper |
|
delete |
No copy assignment allowed.
| [in] | a_oper | Oper |
|
noexcept |
Point Jacobi kernel.
| [in,out] | a_Lcorr | Storage for computing L(a_corr) |
| [in,out] | a_corr | Correction |
| [in] | a_resid | Residual |
| [in] | a_Acoef | A-coefficient |
| [in] | a_Bcoef | B-coefficient |
| [in] | a_BcoefIrreg | B-coefficient on EB faces |
| [in] | a_cellBox | Grid box |
| [in] | a_dit | Data index |
|
finaloverride |
Precondition system before bottom solve.
| [in] | a_corr | Correction |
| [in] | a_residual | Residual |
This just runs a few relaxations.
|
finaloverride |
Prolongation method.
| [out] | a_phi | Correction on this level |
| [out] | a_correctCoarse | Correction on coarse level |
|
protected |
Reflux algorithm.
| [in,out] | a_Lphi | L(phiFine, phiCoar). This is modified along the CF interface to consistently account for fine-level fluxes. |
| [in] | a_phiFine | Data on finer level |
| [in] | a_phi | Data on this operator's level |
| [in] | a_finerOp | Operator on fine level |
| void EBHelmholtzOp::refluxFreeAMROperator | ( | LevelData< EBCellFAB > & | a_Lphi, |
| const LevelData< EBCellFAB > & | a_phiFine, | ||
| const LevelData< EBCellFAB > & | a_phi, | ||
| const LevelData< EBCellFAB > & | a_phiCoar, | ||
| const bool | a_homogeneousPhysBC, | ||
| AMRLevelOp< LevelData< EBCellFAB > > * | a_finerOp | ||
| ) |
Apply the AMR operator, i.e. compute L(phi) in an AMR context.
This is the reflux-free version of AMROperator.
| [in] | a_phiFine | Phi on fine level |
| [in] | a_phi | Phi on this level |
| [in] | a_phiCoar | Phi on coar level |
| [in] | a_homogeneousPhysBC | Use homogeneous physical BCs or not |
| [in] | a_finerOp | Finer operator |
This involves ghost cell interpolation if there's a coarse level, and refluxing if there's a fine level.
| [in] | a_Lphi | Lphi |
|
finaloverride |
Return coarsening factor to coarser level (1 if there is no coarser level);.
|
finaloverride |
Relaxation method. This does smoothing for the system L(correction) = residual.
| [in,out] | a_correction | Correction |
| [in] | a_residual | Residual |
| [in] | a_iterations | Number of iterations |
|
protected |
Chebyshev polynomial smoother.
Applies m_chebyOrder Chebyshev-Richardson steps of the form correction += omega_i * relCoef * (residual - L(correction)). The step sizes omega_i are derived from Chebyshev nodes on [lambdaMax/m_chebyEigRatio, lambdaMax] where lambdaMax = 2 (safe bound for the Jacobi-preconditioned Laplacian-type operator).
| [in,out] | a_correction | Correction |
| [in] | a_residual | Residual |
| [in] | a_iterations | Number of outer smoother invocations (each applies m_chebyOrder steps) |
|
protected |
Multi-colored gauss-seidel relaxation.
| [in,out] | a_correction | Correction |
| [in] | a_residual | Residual |
| [in] | a_iterations | Number of iterations |
|
protected |
Jacobi relaxation.
| [in,out] | a_correction | Correction |
| [in] | a_residual | Residual |
| [in] | a_iterations | Number of iterations |
|
protected |
Jacobi relaxation.
| [in,out] | a_correction | Correction |
| [in] | a_residual | Residual |
| [in] | a_iterations | Number of iterations |
|
protected |
Restricted additive Schwarz smoother (block smoother).
Each outer iteration exchanges ghost cells once and then performs m_rasInnerSweeps red-black Gauss-Seidel sweeps per patch with the ghost cells held frozen (Dirichlet). The blocks are the disjoint patches, so the update is automatically restricted to the valid region and no additive damping is required (overlap = 0). Because the ghost exchange is amortised over the inner sweeps, this smoother performs fewer halo exchanges per multigrid cycle than point relaxation.
| [in,out] | a_correction | Correction |
| [in] | a_residual | Residual |
| [in] | a_iterations | Number of outer Schwarz iterations |
|
override |
Compute residual on this level.
| [out] | a_residual | Residual rhs - L(phi) |
| [in] | a_phi | phi |
| [in] | a_rhs | Right-hand side of system |
| [in] | a_homogeneousPhysBc | Homogeneous phys bc |
|
finaloverride |
Restrict residual onto coarse level.
| [in,out] | a_resCoar | Coarse residual |
| [in,out] | a_phi | Phi on this level |
| [in] | a_rhs | Rhs on this level |
|
finaloverride |
Scale data. Returns a_lhs = a_lhs*a_scale.
| [in,out] | a_lhs | Data to be scaled |
| [in] | a_scale | Scaling factor |
|
staticnoexcept |
Local scaling function. Multiplies the left-hand side by the right-hand side.
| [out] | a_lhs | Equal to a_lhs*a_rhs on output |
| [in] | a_rhs | Scaling data |
| void EBHelmholtzOp::setAcoAndBco | ( | const RefCountedPtr< LevelData< EBCellFAB > > & | a_Acoef, |
| const RefCountedPtr< LevelData< EBFluxFAB > > & | a_Bcoef, | ||
| const RefCountedPtr< LevelData< BaseIVFAB< Real > > > & | a_BcoefIrreg | ||
| ) |
Update with new A and B coefficients.
| [in] | a_Acoef | Operator A-coefficient |
| [in] | a_Bcoef | Operator B-coefficient |
| [in] | a_BcoefIrreg | Operator B-coefficient (on EB faces) |
|
finaloverride |
Set alpha coefficient and beta coefficient (can change as diffusion solvers progress)
| [in] | a_alpha | Alpha-coefficient |
| [in] | a_beta | Beta-coefficient |
|
finaloverride |
Set data to zero.
| [in,out] | a_lhs | Data to be set to zero. |
| void EBHelmholtzOp::turnOffCoarsening | ( | ) |
Turn off coarsening operation.
| void EBHelmholtzOp::turnOffExchange | ( | ) |
Turn off exchange operation.
| void EBHelmholtzOp::turnOnCoarsening | ( | ) |
Turn on coarsening operation.
| void EBHelmholtzOp::turnOnExchange | ( | ) |
Turn on exchange operation.
|
protected |
For making irregular stencil applications go faster.
This wraps m_relaxStencils in VCAggStencil (which computes explicit stencil offsets)
|
protected |
Ratio lambda_max/lambda_min for the Chebyshev eigenvalue window.
Targets the upper (1 - 1/m_chebyEigRatio) fraction of the spectrum.
|
protected |
Turn on/off exchange operation.
|
protected |
Turn on/off exchange operation.
|
protected |
Do coarse-fine interpolation or not.
|
protected |
Precomputed domain-boundary boxes for each grid patch.
Filled in EBHelmholtzOp::defineStencils and consumed by applyDomainFlux/fillDomainFlux.
|
protected |
Operator stencils in irregular cells (and ones that border irregular cells if using a centroid discretization).
This stencil is => sum(fluxes)/dx, not including boundary faces or EB faces. I.e. this is the same as kappa*div(F) with the exclusion of faces where we have boundary conditions.
|
protected |
Spectral radius estimate for the Jacobi-preconditioned operator D^{-1}A.
Computed via the Gershgorin bound after defineStencils(). Used as lambda_max in the Chebyshev smoother.