1#ifndef AMREX_INTERPOLATER_H_
2#define AMREX_INTERPOLATER_H_
3#include <AMReX_Config.H>
56 const Box& fine_region,
84 {
amrex::Abort(
"The version of this Interpolater for face-based data is not implemented or does not apply. Call 'interp' instead."); }
104 {
amrex::Abort(
"The Array<FArrayBox*, AMREX_SPACEDIM> version of this Interpolater is not implemented or does not apply. Call 'interp' instead."); }
173 const Box& fine_region,
180 RunOn runon)
override;
232 const Box& fine_region,
239 RunOn runon)
override;
292 const Box& fine_region,
299 RunOn runon)
override;
348 const Box& fine_region,
353 RunOn runon)
override;
406 const Box& fine_region,
413 RunOn runon)
override;
463 const Box& fine_region,
470 RunOn runon)
override;
524 const Box& fine_region,
531 RunOn runon)
override;
592 const Box& fine_region,
599 RunOn runon)
override;
624 const Box& fine_region,
632 RunOn runon)
override;
636#if (AMREX_SPACEDIM == 2)
637 using Solver_t = std::variant<LUSolver< 4,Real>,
641#elif (AMREX_SPACEDIM == 3)
642 using Solver_t = std::variant<LUSolver< 8,Real>,
652#if (AMREX_SPACEDIM > 1)
705 const Box& fine_region,
712 RunOn runon)
override;
736 const Box& fine_region,
743 RunOn runon)
override;
763 const Box& fine_region,
771 RunOn runon)
override;
824 const Box& fine_region,
831 RunOn runon)
override;
855 const Box& fine_region,
862 RunOn runon)
override;
883 const Box& fine_region,
891 RunOn runon)
override;
944 const Box& fine_region,
951 RunOn runon)
override;
Compiler- and backend-specific extension macros (e.g., restrict, SIMD, inline).
#define AMREX_EXPORT
Definition AMReX_Extension.H:223
Abstract base for spatial interpolaters used during FillPatch.
Array4< Real > fine
Definition AMReX_InterpFaceRegister.cpp:90
Array4< Real const > crse
Definition AMReX_InterpFaceRegister.cpp:92
Bilinear interpolation on cell centered data.
Definition AMReX_Interpolater.H:192
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:757
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:784
Linear conservative interpolation on cell centered data.
Definition AMReX_Interpolater.H:259
bool do_linear_limiting
Definition AMReX_Interpolater.H:303
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int, int, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:836
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:827
Lin. cons. interp. on cc data with protection against under/over-shoots.
Definition AMReX_Interpolater.H:316
void protect(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, FArrayBox &fine_state, int state_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > &bcr, RunOn runon) override
Re-visit the interpolation to protect against under- or overshoots.
Definition AMReX_Interpolater.cpp:1167
CellConservativeProtected()
The constructor.
Definition AMReX_Interpolater.cpp:1163
Conservative quartic interpolation on cell averaged data.
Definition AMReX_Interpolater.H:484
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:1251
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:1269
Quadratic interpolation on cell centered data.
Definition AMReX_Interpolater.H:365
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:998
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:1007
Quartic interpolation on cell centered data.
Definition AMReX_Interpolater.H:904
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:1555
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:1563
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:237
Bilinear tangential interpolation / linear normal interpolation of face data.
Definition AMReX_Interpolater.H:784
void interp_face(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const IArrayBox &solve_mask, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int bccomp, RunOn runon) override
Coarse to fine interpolation in space for face-based data.
Definition AMReX_Interpolater.cpp:477
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:445
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:417
void interp_arr(Array< FArrayBox *, 3 > const &crse, int crse_comp, Array< FArrayBox *, 3 > const &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, Array< IArrayBox *, 3 > const &solve_mask, const Geometry &crse_geom, const Geometry &, Vector< Array< BCRec, 3 > > const &, int, int, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:626
Divergence-preserving interpolation on face centered data.
Definition AMReX_Interpolater.H:549
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:1327
void interp_arr(Array< FArrayBox *, 3 > const &crse, int crse_comp, Array< FArrayBox *, 3 > const &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, Array< IArrayBox *, 3 > const &solve_mask, const Geometry &crse_geom, const Geometry &fine_geom, Vector< Array< BCRec, 3 > > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:1345
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:1311
FaceDivFree()
Definition AMReX_Interpolater.cpp:1303
Piecewise constant tangential interpolation / linear normal interpolation of face data.
Definition AMReX_Interpolater.H:665
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:136
void interp_face(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const IArrayBox &solve_mask, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int bccomp, RunOn runon) override
Coarse to fine interpolation in space for face-based data.
Definition AMReX_Interpolater.cpp:195
void interp_arr(Array< FArrayBox *, 3 > const &crse, int crse_comp, Array< FArrayBox *, 3 > const &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, Array< IArrayBox *, 3 > const &solve_mask, const Geometry &, const Geometry &, Vector< Array< BCRec, 3 > > const &, int, int, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:296
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:117
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:85
A Fortran Array of ints.
Definition AMReX_IArrayBox.H:49
Definition AMReX_InterpBase.H:34
Virtual base class for interpolaters.
Definition AMReX_Interpolater.H:32
virtual void interp_arr(Array< FArrayBox *, 3 > const &, const int, Array< FArrayBox *, 3 > const &, const int, const int, const Box &, const IntVect &, Array< IArrayBox *, 3 > const &, const Geometry &, const Geometry &, Vector< Array< BCRec, 3 > > const &, const int, const int, const RunOn)
Interpolate arrays of face-centered FABs simultaneously (optional override).
Definition AMReX_Interpolater.H:89
virtual void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon)=0
Perform coarse-to-fine interpolation on a cell-centered FAB.
virtual void interp_face(const FArrayBox &, const int, FArrayBox &, const int, const int, const Box &, const IntVect &, const IArrayBox &, const Geometry &, const Geometry &, Vector< BCRec > const &, const int, RunOn)
Coarse-to-fine interpolation for face-based data (optional override).
Definition AMReX_Interpolater.H:71
virtual void protect(const FArrayBox &, int, FArrayBox &, int, FArrayBox &, int, int, const Box &, const IntVect &, const Geometry &, const Geometry &, Vector< BCRec > &, RunOn)
Optional limiter hook that reprojects fine data to avoid undershoot/overshoot.
Definition AMReX_Interpolater.H:109
Definition AMReX_LUSolver.H:16
Bilinear interpolation on node centered data.
Definition AMReX_Interpolater.H:133
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:52
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:92
Piecewise Constant interpolation on cell centered data.
Definition AMReX_Interpolater.H:423
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:1124
void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine, int fine_comp, int ncomp, const Box &fine_region, const IntVect &ratio, const Geometry &crse_geom, const Geometry &fine_geom, Vector< BCRec > const &bcr, int actual_comp, int actual_state, RunOn runon) override
Coarse to fine interpolation in space.
Definition AMReX_Interpolater.cpp:1138
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:29
std::array< T, N > Array
Definition AMReX_Array.H:31
Definition AMReX_Amr.cpp:50
CellQuartic cell_quartic_interp
Definition AMReX_Interpolater.cpp:49
CellConservativeQuartic quartic_interp
Definition AMReX_Interpolater.cpp:46
RunOn
Definition AMReX_GpuControl.H:65
FaceDivFree face_divfree_interp
Definition AMReX_Interpolater.cpp:42
FaceConservativeLinear face_cons_linear_interp
Definition AMReX_Interpolater.cpp:41
CellBilinear cell_bilinear_interp
Definition AMReX_Interpolater.cpp:47
CellConservativeLinear cell_cons_interp(false)
Definition AMReX_Interpolater.H:961
NodeBilinear node_bilinear_interp
Definition AMReX_Interpolater.cpp:39
CellConservativeLinear lincc_interp
Definition AMReX_Interpolater.cpp:43
CellQuadratic quadratic_interp
Definition AMReX_Interpolater.cpp:48
void Abort(const std::string &msg)
Print a fatal-error message to stderr and abort execution.
Definition AMReX.cpp:242
PCInterp pc_interp
CONSTRUCT A GLOBAL OBJECT OF EACH VERSION.
Definition AMReX_Interpolater.cpp:38
CellConservativeProtected protected_interp
Definition AMReX_Interpolater.cpp:45
FaceLinear face_linear_interp
Definition AMReX_Interpolater.cpp:40