|
|
| EBLeastSquaresMultigridInterpolator ()=delete |
| | Disallowed constructor.
|
| |
|
| EBLeastSquaresMultigridInterpolator (const EBLeastSquaresMultigridInterpolator &a_other)=delete |
| | Disallowed copy constructor.
|
| |
| | EBLeastSquaresMultigridInterpolator (const EBLevelGrid &a_eblgFine, const EBLevelGrid &a_eblgCoFi, const EBLevelGrid &a_eblgCoar, const CellLocation a_dataLocation, const IntVect &a_ghostVector, const int a_refRat, const int a_ghostCF, const int a_order, const int a_weighting=0) noexcept |
| | Full constructor.
|
| |
|
virtual | ~EBLeastSquaresMultigridInterpolator () noexcept |
| | Destructor (does nothing)
|
| |
| virtual int | getGhostCF () const noexcept override |
| | Return number of ghost cells across CF interface.
|
| |
| virtual std::pair< DerivStencil, DerivStencil > | getInterpolationStencilRegular (const IntVect &a_fineGhost, const DataIndex &a_din, const int a_dir, const Side::LoHiSide a_side) const noexcept override |
| | Get the interpolation stencil near the refinement boundary.
|
| |
| virtual std::pair< VoFStencil, VoFStencil > | getInterpolationStencilEB (const VolIndex &a_fineGhost, const DataIndex &a_din) const noexcept override |
| | Get an explicit stencil for a ghost cell near the refinement boundary.
|
| |
| virtual void | coarseFineInterp (LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phiCoar, const Interval a_variables) const noexcept override |
| | Do inhomogeneous interpolation.
|
| |
| virtual void | coarseFineInterpH (LevelData< EBCellFAB > &a_phiFine, const Interval a_variables) const noexcept override |
| | Do homogeneous interpolation.
|
| |
| virtual void | coarseFineInterpH (EBCellFAB &a_phiFine, const Interval a_variables, const DataIndex &a_din) const noexcept override |
| | Do homogeneous coarse-fine interpolation on a grid patch.
|
| |
|
| EBMultigridInterpolator ()=delete |
| | Disallowed constructor.
|
| |
|
| EBMultigridInterpolator (const EBMultigridInterpolator &a_other)=delete |
| | Disallowed copy constructor.
|
| |
| | EBMultigridInterpolator (const EBLevelGrid &a_eblgFine, const EBLevelGrid &a_eblgCoar, const CellLocation a_dataLocation, const IntVect &a_ghostVector, const int a_refRat, const int a_ghostCF, const int a_order, const int a_weighting=0) |
| | Full constructor.
|
| |
|
| ~EBMultigridInterpolator () |
| | Destructor (does nothing)
|
| |
|
int | getGhostCF () const |
| | Return number of ghost cells across CF interface.
|
| |
| void | coarseFineInterp (LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phiCoar, const Interval a_variables) |
| | Do inhomogeneous interpolation.
|
| |
| void | slowCoarseFineInterp (LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phiCoar, const Interval a_variables) |
| | Do inhomogeneous interpolation.
|
| |
| void | coarseFineInterpH (LevelData< EBCellFAB > &a_phiFine, const Interval a_variables) const |
| | Do homogeneous interpolation.
|
| |
| void | slowCoarseFineInterpH (LevelData< EBCellFAB > &a_phiFine, const Interval a_variables) const |
| | Do homogeneous interpolation.
|
| |
| void | coarseFineInterpH (EBCellFAB &a_phiFine, const Interval a_variables, const DataIndex &a_dit) const |
| | Do homogeneous coarse-fine interpolation on a grid patch.
|
| |
| void | slowCoarseFineInterpH (EBCellFAB &a_phiFine, const Interval a_variables, const DataIndex &a_dit) const |
| | Do homogeneous coarse-fine interpolation on a grid patch.
|
| |
|
| EBMultigridInterpolator () |
| | Basic constructor.
|
| |
|
| EBMultigridInterpolator (const EBMultigridInterpolator &a_other)=delete |
| | Disallowed copy constructor.
|
| |
|
virtual | ~EBMultigridInterpolator () |
| | Destructor (does nothing)
|
| |
|
|
virtual void | defineGhostRegions () noexcept |
| | Define ghost cells to be filled in range m_ghostCF from each cut-cell.
|
| |
|
virtual void | defineBuffers () noexcept |
| | Define buffer data holder.
|
| |
|
virtual void | defineCoarseInterp () noexcept |
| | Define the coarse-sided interpolation stencils for doing the orthogonal derivatives.
|
| |
|
virtual void | defineStencilsEBCF () noexcept |
| | Define stencils for interpolation across the EBCF refinement boundary.
|
| |
|
virtual void | makeAggStencils () noexcept |
| | Build the AggStencil objects for faster stencil aggregation.
|
| |
| virtual bool | getStencil (VoFStencil &a_stencilFine, VoFStencil &a_stencilCoar, const CellLocation &a_dataLocation, const VolIndex &a_ghostVofFine, const VolIndex &a_ghostVofCoar, const EBISBox &a_ebisboxFine, const EBISBox &a_ebisboxCoar, const DenseIntVectSet &a_validFineCells, const DenseIntVectSet &a_validCoarCells, const Real &a_dxFine, const Real &a_dxCoar, const int &a_order, const int &a_weight) const noexcept |
| | Build an interpolation stencil.
|
| |
| virtual void | regularCoarseFineInterp (LevelData< EBCellFAB > &a_finePhi, const LevelData< EBCellFAB > &a_coarPhi, const int a_fineVar, const int a_coarVar) const noexcept |
| | Do regular coarse-fine interpolation as if the EB is not there.
|
| |
|
void | defineGhostRegions () |
| | Define ghost cells to be filled in range m_ghostCF from each cut-cell.
|
| |
| void | defineGrids (const EBLevelGrid &a_eblgFine, const EBLevelGrid &a_eblgCoar) |
| | Define grids.
|
| |
|
void | defineBuffers () |
| | Define data holders.
|
| |
|
void | defineStencilsEBCF () |
| | Define stencils for interpolation across the EBCF refinement boundary.
|
| |
|
void | makeAggStencils () |
| | Build the AggStencil objects for faster stencil aggregation.
|
| |
| bool | getStencil (VoFStencil &a_stencilFine, VoFStencil &a_stencilCoar, const CellLocation &a_dataLocation, const VolIndex &a_ghostVofFine, const VolIndex &a_ghostVofCoar, const EBISBox &a_ebisboxFine, const EBISBox &a_ebisboxCoar, const DenseIntVectSet &a_validFineCells, const DenseIntVectSet &a_validCoarCells, const Real &a_dxFine, const Real &a_dxCoar, const int &a_order, const int &a_weight) |
| | Build an interpolation stencil.
|
| |
Multigrid interpolator class.
This interpolator class interpolates with classical multigrid-type interpolation where the interpolation stencils only reach into valid cells, ignoring the region underneath the fine level. Near regular refinement boundaries we use the conventional approach where we interpolate coarse data onto the line of cells that runs between the fine-grid cells and the ghost cell. This value is used together with the valid data on the fine-grid cells to interpolate the ghost cell to O(h^2). Near EBs this is much more complex since both the fine and coarse regions may be missing cells that make that interpolation possible. Worse, EB stencils may be much bigger than the 5/7-point Laplacian, requiring us to fill more ghost cells across the coarse-fine interface near the EB. We achieve this by switching to least-squares based interpolation here, again using only the valid fine and coarse-level cells. The way of achieving this consists of building dual-level stencils for each ghost cell; these stencils represent the part of the interpolation stencil that reach into the fine and coarse grids. For efficiency reasons, we copy the coarse grid data onto data layouts that may have more ghost cells than your regular data. Since the least squares stencils require a specified number of cells to reach specified order, this permits us to use fine-grid stencils that only reach into valid data without dropping order. This optimization is useful for pruning extra communications due homogeneous multigrid interpolation. This means that our interpolation, which is in the form
phiGhost = sum(vofCoar) w(vofCoar)*phi(vofCoar) + sum(vofFine)[w(vofFine)*phi(vofFine)]
will have a coarse and and a fine grid stencil, but the fine stencil does not reach out of the ghosted fine-grid patch. The fine-grid part of the stencil is thus allowed to use the ghost cells in the patch that are filled from neighboring patches.