LCOV - code coverage report
Current view: top level - ext/amrex/3d-coverage-g++-24.08/include - AMReX_Interpolater.H (source / functions) Hit Total Coverage
Test: coverage_merged.info Lines: 0 6 0.0 %
Date: 2024-11-18 05:28:54 Functions: 0 3 0.0 %

          Line data    Source code
       1             : #ifndef AMREX_INTERPOLATER_H_
       2             : #define AMREX_INTERPOLATER_H_
       3             : #include <AMReX_Config.H>
       4             : 
       5             : #include <AMReX_Extension.H>
       6             : #include <AMReX_GpuControl.H>
       7             : #include <AMReX_InterpBase.H>
       8             : 
       9             : namespace amrex {
      10             : 
      11             : class Geometry;
      12             : class FArrayBox;
      13             : class IArrayBox;
      14             : 
      15             : /**
      16             : * \brief Virtual base class for interpolaters.
      17             : *
      18             : * Specifies interpolater interface for coarse-to-fine interpolation in space.
      19             : */
      20             : class Interpolater
      21             :     : public InterpBase
      22             : {
      23             : public:
      24             :     /**
      25             :     * \brief Coarse to fine interpolation in space.
      26             :     * This is a pure virtual function and hence MUST
      27             :     * be implemented by derived classes.
      28             :     *
      29             :     * \param crse
      30             :     * \param crse_comp
      31             :     * \param fine
      32             :     * \param fine_comp
      33             :     * \param ncomp
      34             :     * \param fine_region
      35             :     * \param ratio
      36             :     * \param crse_geom
      37             :     * \param fine_geom
      38             :     * \param bcr
      39             :     * \param actual_comp
      40             :     * \param actual_state
      41             :     */
      42             :     virtual void interp (const FArrayBox& crse,
      43             :                          int              crse_comp,
      44             :                          FArrayBox&       fine,
      45             :                          int              fine_comp,
      46             :                          int              ncomp,
      47             :                          const Box&       fine_region,
      48             :                          const IntVect&   ratio,
      49             :                          const Geometry&  crse_geom,
      50             :                          const Geometry&  fine_geom,
      51             :                          Vector<BCRec> const & bcr,
      52             :                          int              actual_comp,
      53             :                          int              actual_state,
      54             :                          RunOn            runon) = 0;
      55             : 
      56             :     /**
      57             :     * \brief Coarse to fine interpolation in space for face-based data.
      58             :     *
      59             :     * \param crse
      60             :     * \param crse_comp
      61             :     * \param fine
      62             :     * \param fine_comp
      63             :     * \param ncomp
      64             :     * \param fine_region
      65             :     * \param fine_values
      66             :     * \param fine_known
      67             :     * \param ratio
      68             :     * \param crse_geom
      69             :     * \param fine_geom
      70             :     * \param bcr
      71             :     * \param bccomp
      72             :     * \param runon
      73             :     */
      74           0 :     virtual void interp_face (const FArrayBox& /*crse*/,
      75             :                               const int        /*crse_comp*/,
      76             :                               FArrayBox&       /*fine*/,
      77             :                               const int        /*fine_comp*/,
      78             :                               const int        /*ncomp*/,
      79             :                               const Box&       /*fine_region*/,
      80             :                               const IntVect&   /*ratio*/,
      81             :                               const IArrayBox& /*solve_mask*/,
      82             :                               const Geometry&  /*crse_geom*/,
      83             :                               const Geometry&  /*fine_geom*/,
      84             :                               Vector<BCRec> const & /*bcr*/,
      85             :                               const int        /*bccomp*/,
      86             :                               RunOn            /*runon*/)
      87           0 :     { amrex::Abort("The version of this Interpolater for face-based data is not implemented or does not apply. Call 'interp' instead."); }
      88             : 
      89             :     /**
      90             :     * \brief Coarse to fine interpolation in space.
      91             :     *        Takes an Array of FArrayBox*s
      92             :     *
      93             :     * \param crse
      94             :     * \param crse_comp
      95             :     * \param fine
      96             :     * \param fine_comp
      97             :     * \param ncomp
      98             :     * \param fine_region
      99             :     * \param fine_values
     100             :     * \param fine_known
     101             :     * \param ratio
     102             :     * \param crse_geom
     103             :     * \param fine_geom
     104             :     * \param bcr
     105             :     * \param actual_comp
     106             :     * \param actual_state
     107             :     */
     108           0 :     virtual void interp_arr (Array<FArrayBox*, AMREX_SPACEDIM> const& /*crse*/,
     109             :                              const int         /*crse_comp*/,
     110             :                              Array<FArrayBox*, AMREX_SPACEDIM> const& /*fine*/,
     111             :                              const int         /*fine_comp*/,
     112             :                              const int         /*ncomp*/,
     113             :                              const Box&        /*fine_region*/,
     114             :                              const IntVect&    /*ratio*/,
     115             :                              Array<IArrayBox*, AMREX_SPACEDIM> const& /*solve_mask*/,
     116             :                              const Geometry&   /*crse_geom*/,
     117             :                              const Geometry&   /*fine_geom*/,
     118             :                              Vector<Array<BCRec, AMREX_SPACEDIM> > const& /*bcr*/,
     119             :                              const int         /*actual_comp*/,
     120             :                              const int         /*actual_state*/,
     121             :                              const RunOn       /*runon*/)
     122             : 
     123           0 :     { amrex::Abort("The Array<FArrayBox*, AMREX_SPACEDIM> version of this Interpolater is not implemented or does not apply. Call 'interp' instead."); }
     124             : 
     125             :     /**
     126             :     * \brief Re-visit the interpolation to protect against under- or overshoots.
     127             :     *
     128             :     * \param crse
     129             :     * \param crse_comp
     130             :     * \param fine
     131             :     * \param fine_comp
     132             :     * \param fine_state
     133             :     * \param state_comp
     134             :     * \param ncomp
     135             :     * \param fine_region
     136             :     * \param ratio
     137             :     * \param crse_geom
     138             :     * \param fine_geom
     139             :     * \param bcr
     140             :     */
     141           0 :     virtual void protect (const FArrayBox& /*crse*/,
     142             :                           int              /*crse_comp*/,
     143             :                           FArrayBox&       /*fine*/,
     144             :                           int              /*fine_comp*/,
     145             :                           FArrayBox&       /*fine_state*/,
     146             :                           int              /*state_comp*/,
     147             :                           int              /*ncomp*/,
     148             :                           const Box&       /*fine_region*/,
     149             :                           const IntVect&   /*ratio*/,
     150             :                           const Geometry&  /*crse_geom*/,
     151             :                           const Geometry&  /*fine_geom*/,
     152             :                           Vector<BCRec>&   /*bcr*/,
     153           0 :                           RunOn            /*runon*/) {}
     154             : };
     155             : 
     156             : 
     157             : /**
     158             : * \brief Bilinear interpolation on node centered data.
     159             : *
     160             : * Bilinear interpolation on node centered data.
     161             : */
     162             : class NodeBilinear
     163             :     :
     164             :     public Interpolater
     165             : {
     166             : public:
     167             :     /**
     168             :     * \brief Returns coarsened box given fine box and refinement ratio.
     169             :     *
     170             :     * \param fine
     171             :     * \param ratio
     172             :     */
     173             :     Box CoarseBox (const Box& fine, int ratio) override;
     174             : 
     175             :     /**
     176             :     * \brief Returns coarsened box given fine box and refinement ratio.
     177             :     *
     178             :     * \param fine
     179             :     * \param ratio
     180             :     */
     181             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     182             : 
     183             :     /**
     184             :     * \brief Coarse to fine interpolation in space.
     185             :     *
     186             :     * \param crse
     187             :     * \param crse_comp
     188             :     * \param fine
     189             :     * \param fine_comp
     190             :     * \param ncomp
     191             :     * \param fine_region
     192             :     * \param ratio
     193             :     * \param crse_geom
     194             :     * \param fine_geom
     195             :     * \param bcr
     196             :     * \param actual_comp
     197             :     * \param actual_state
     198             :     */
     199             :     void interp (const FArrayBox& crse,
     200             :                  int              crse_comp,
     201             :                  FArrayBox&       fine,
     202             :                  int              fine_comp,
     203             :                  int              ncomp,
     204             :                  const Box&       fine_region,
     205             :                  const IntVect&   ratio,
     206             :                  const Geometry&  crse_geom,
     207             :                  const Geometry&  fine_geom,
     208             :                  Vector<BCRec> const& bcr,
     209             :                  int              actual_comp,
     210             :                  int              actual_state,
     211             :                  RunOn            runon) override;
     212             : };
     213             : 
     214             : 
     215             : /**
     216             : * \brief Bilinear interpolation on cell centered data.
     217             : *
     218             : * Bilinear interpolation on cell centered data.
     219             : */
     220             : class CellBilinear
     221             :     :
     222             :     public Interpolater
     223             : {
     224             : public:
     225             :     /**
     226             :     * \brief Returns coarsened box given fine box and refinement ratio.
     227             :     *
     228             :     * \param fine
     229             :     * \param ratio
     230             :     */
     231             :     Box CoarseBox (const Box& fine, int ratio) override;
     232             : 
     233             :     /**
     234             :     * \brief Returns coarsened box given fine box and refinement ratio.
     235             :     *
     236             :     * \param fine
     237             :     * \param ratio
     238             :     */
     239             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     240             : 
     241             :     /**
     242             :     * \brief Coarse to fine interpolation in space.
     243             :     *
     244             :     * \param crse
     245             :     * \param crse_comp
     246             :     * \param fine
     247             :     * \param fine_comp
     248             :     * \param ncomp
     249             :     * \param fine_region
     250             :     * \param ratio
     251             :     * \param crse_geom
     252             :     * \param fine_geom
     253             :     * \param bcr
     254             :     * \param actual_comp
     255             :     * \param actual_state
     256             :     */
     257             :     void interp (const FArrayBox& crse,
     258             :                  int              crse_comp,
     259             :                  FArrayBox&       fine,
     260             :                  int              fine_comp,
     261             :                  int              ncomp,
     262             :                  const Box&       fine_region,
     263             :                  const IntVect&   ratio,
     264             :                  const Geometry&  crse_geom,
     265             :                  const Geometry&  fine_geom,
     266             :                  Vector<BCRec> const& bcr,
     267             :                  int              actual_comp,
     268             :                  int              actual_state,
     269             :                  RunOn            runon) override;
     270             : };
     271             : 
     272             : 
     273             : /**
     274             : * \brief Linear conservative interpolation on cell centered data
     275             : *
     276             : *
     277             : * Linear conservative interpolation on cell centered data
     278             : * I.e, conservative interpolation with a limiting scheme that
     279             : * preserves the value of any linear combination  of the
     280             : * fab components; //!< e.g.,
     281             : *
     282             : * if sum_ivar a(ic,jc,ivar)*fab(ic,jc,ivar) = 0, then
     283             : * sum_ivar a(ic,jc,ivar)*fab(if,jf,ivar) = 0 is satisfied
     284             : * in all fine cells if,jf covering coarse cell ic,jc.
     285             : */
     286             : class CellConservativeLinear
     287             :     :
     288             :     public Interpolater
     289             : {
     290             : public:
     291             : 
     292             :     /**
     293             :     * \brief The constructor.
     294             :     *
     295             :     * \param do_linear_limiting_
     296             :     */
     297             :     explicit CellConservativeLinear (bool do_linear_limiting_= true);
     298             : 
     299             :     /**
     300             :     * \brief Returns coarsened box given fine box and refinement ratio.
     301             :     *
     302             :     * \param fine
     303             :     * \param ratio
     304             :     */
     305             :     Box CoarseBox (const Box& fine, int ratio) override;
     306             : 
     307             :     /**
     308             :     * \brief Returns coarsened box given fine box and refinement ratio.
     309             :     *
     310             :     * \param fine
     311             :     * \param ratio
     312             :     */
     313             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     314             :     /**
     315             :     * \brief Coarse to fine interpolation in space.
     316             :     */
     317             :     void interp (const FArrayBox& crse,
     318             :                  int              crse_comp,
     319             :                  FArrayBox&       fine,
     320             :                  int              fine_comp,
     321             :                  int              ncomp,
     322             :                  const Box&       fine_region,
     323             :                  const IntVect&   ratio,
     324             :                  const Geometry&  crse_geom,
     325             :                  const Geometry&  fine_geom,
     326             :                  Vector<BCRec> const& bcr,
     327             :                  int              /*actual_comp*/,
     328             :                  int              /*actual_state*/,
     329             :                  RunOn            runon) override;
     330             : 
     331             : protected:
     332             : 
     333             :     bool do_linear_limiting;
     334             : };
     335             : 
     336             : 
     337             : /**
     338             : * \brief Lin. cons. interp. on cc data with protection against under/over-shoots.
     339             : *
     340             : * Linear conservative interpolation on cell centered data
     341             : * but with protection against undershoots or overshoots.
     342             : */
     343             : class CellConservativeProtected
     344             :     :
     345             :     public CellConservativeLinear
     346             : {
     347             : public:
     348             : 
     349             :     /**
     350             :     * \brief The constructor.
     351             :     */
     352             :     CellConservativeProtected ();
     353             : 
     354             :     /**
     355             :     * \brief Re-visit the interpolation to protect against under- or overshoots.
     356             :     *
     357             :     * \param crse
     358             :     * \param crse_comp
     359             :     * \param fine
     360             :     * \param fine_comp
     361             :     * \param fine_state
     362             :     * \param state_comp
     363             :     * \param ncomp
     364             :     * \param fine_region
     365             :     * \param ratio
     366             :     * \param crse_geom
     367             :     * \param fine_geom
     368             :     * \param bcr
     369             :     */
     370             :     void protect (const FArrayBox& crse,
     371             :                   int              crse_comp,
     372             :                   FArrayBox&       fine,
     373             :                   int              fine_comp,
     374             :                   FArrayBox&       fine_state,
     375             :                   int              state_comp,
     376             :                   int              ncomp,
     377             :                   const Box&       fine_region,
     378             :                   const IntVect&   ratio,
     379             :                   const Geometry&  crse_geom,
     380             :                   const Geometry&  fine_geom,
     381             :                   Vector<BCRec>&   bcr,
     382             :                   RunOn            runon) override;
     383             : };
     384             : 
     385             : 
     386             : /**
     387             : * \brief Quadratic interpolation on cell centered data.
     388             : *
     389             : * Quadratic interpolation on cell centered data.
     390             : */
     391             : class CellQuadratic
     392             :     :
     393             :     public Interpolater
     394             : {
     395             : public:
     396             : 
     397             :     /**
     398             :     * \brief Returns coarsened box given fine box and refinement ratio.
     399             :     *
     400             :     * \param fine
     401             :     * \param ratio
     402             :     */
     403             :     Box CoarseBox (const Box& fine, int ratio) override;
     404             : 
     405             :     /**
     406             :     * \brief Returns coarsened box given fine box and refinement ratio.
     407             :     *
     408             :     * \param fine
     409             :     * \param ratio
     410             :     */
     411             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     412             : 
     413             :     /**
     414             :     * \brief Coarse to fine interpolation in space.
     415             :     *
     416             :     * \param crse
     417             :     * \param crse_comp
     418             :     * \param fine
     419             :     * \param fine_comp
     420             :     * \param ncomp
     421             :     * \param fine_region
     422             :     * \param ratio
     423             :     * \param crse_geom
     424             :     * \param fine_geom
     425             :     * \param bcr
     426             :     * \param actual_comp
     427             :     * \param actual_state
     428             :     */
     429             :     void interp (const FArrayBox& crse,
     430             :                  int              crse_comp,
     431             :                  FArrayBox&       fine,
     432             :                  int              fine_comp,
     433             :                  int              ncomp,
     434             :                  const Box&       fine_region,
     435             :                  const IntVect&   ratio,
     436             :                  const Geometry&  crse_geom,
     437             :                  const Geometry&  fine_geom,
     438             :                  Vector<BCRec> const& bcr,
     439             :                  int              actual_comp,
     440             :                  int              actual_state,
     441             :                  RunOn            runon) override;
     442             : };
     443             : 
     444             : 
     445             : /**
     446             : * \brief Piecewise Constant interpolation on cell centered data.
     447             : */
     448             : class PCInterp
     449             :     :
     450             :     public Interpolater
     451             : {
     452             : public:
     453             :     /**
     454             :     * \brief Returns coarsened box given fine box and refinement ratio.
     455             :     *
     456             :     * \param fine
     457             :     * \param ratio
     458             :     */
     459             :     Box CoarseBox (const Box& fine, int ratio) override;
     460             : 
     461             :     /**
     462             :     * \brief Returns coarsened box given fine box and refinement ratio.
     463             :     *
     464             :     * \param fine
     465             :     * \param ratio
     466             :     */
     467             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     468             : 
     469             :     /**
     470             :     * \brief Coarse to fine interpolation in space.
     471             :     *
     472             :     * \param crse
     473             :     * \param crse_comp
     474             :     * \param fine
     475             :     * \param fine_comp
     476             :     * \param ncomp
     477             :     * \param fine_region
     478             :     * \param ratio
     479             :     * \param crse_geom
     480             :     * \param fine_geom
     481             :     * \param bcr
     482             :     * \param actual_comp
     483             :     * \param actual_state
     484             :     */
     485             :     void interp (const FArrayBox& crse,
     486             :                  int              crse_comp,
     487             :                  FArrayBox&       fine,
     488             :                  int              fine_comp,
     489             :                  int              ncomp,
     490             :                  const Box&       fine_region,
     491             :                  const IntVect&   ratio,
     492             :                  const Geometry&  crse_geom,
     493             :                  const Geometry&  fine_geom,
     494             :                  Vector<BCRec> const&  bcr,
     495             :                  int              actual_comp,
     496             :                  int              actual_state,
     497             :                  RunOn            runon) override;
     498             : };
     499             : 
     500             : 
     501             : /**
     502             : * \brief Conservative quartic interpolation on cell averaged data.
     503             : *
     504             : * An order 4 polynomial is used to fit the data.  For each cell involved
     505             : * in constructing the polynomial, the average of the polynomial inside that
     506             : * cell is equal to the cell averaged value of the original data.
     507             : */
     508             : class CellConservativeQuartic
     509             :     :
     510             :     public Interpolater
     511             : {
     512             : public:
     513             :     /**
     514             :     * \brief Returns coarsened box given fine box and refinement ratio.
     515             :     *
     516             :     * \param fine
     517             :     * \param ratio
     518             :     */
     519             :     Box CoarseBox (const Box& fine, int ratio) override;
     520             : 
     521             :     /**
     522             :     * \brief Returns coarsened box given fine box and refinement ratio.
     523             :     *
     524             :     * \param fine
     525             :     * \param ratio
     526             :     */
     527             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     528             : 
     529             :     /**
     530             :     * \brief Coarse to fine interpolation in space.
     531             :     *
     532             :     * \param crse
     533             :     * \param crse_comp
     534             :     * \param fine
     535             :     * \param fine_comp
     536             :     * \param ncomp
     537             :     * \param fine_region
     538             :     * \param ratio
     539             :     * \param crse_geom
     540             :     * \param fine_geom
     541             :     * \param bcr
     542             :     * \param actual_comp
     543             :     * \param actual_state
     544             :     */
     545             :     void interp (const FArrayBox& crse,
     546             :                  int              crse_comp,
     547             :                  FArrayBox&       fine,
     548             :                  int              fine_comp,
     549             :                  int              ncomp,
     550             :                  const Box&       fine_region,
     551             :                  const IntVect&   ratio,
     552             :                  const Geometry&  crse_geom,
     553             :                  const Geometry&  fine_geom,
     554             :                  Vector<BCRec> const&  bcr,
     555             :                  int              actual_comp,
     556             :                  int              actual_state,
     557             :                  RunOn            runon) override;
     558             : };
     559             : 
     560             : /**
     561             : * \brief Divergence-preserving interpolation on face centered data.
     562             : *
     563             : * Divergence-preserving interpolation on face centered data,
     564             : * i.e., it ensures the divergence of the fine ghost cells match the value
     565             : * of the divergence of the underlying crse cell. All fine cells overlying
     566             : * a given coarse cell will have the same divergence, even when the coarse
     567             : * grid divergence is spatially varying.
     568             : * Based on Vanella et. al. (doi:10.1016/j.jcp.2010.05.003, section 3.2),
     569             : * but solves the interior closure problem using least squares with an
     570             : * initial guess equal to the average of fine face values across the cell.
     571             : */
     572             : class FaceDivFree
     573             :     :
     574             :     public Interpolater
     575             : {
     576             : public:
     577             :     /**
     578             :     * \brief Returns coarsened box given fine box and refinement ratio.
     579             :     *
     580             :     * \param fine
     581             :     * \param ratio
     582             :     */
     583             :     Box CoarseBox (const Box& fine, int ratio) override;
     584             : 
     585             :     /**
     586             :     * \brief Returns coarsened box given fine box and refinement ratio.
     587             :     *
     588             :     * \param fine
     589             :     * \param ratio
     590             :     */
     591             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     592             : 
     593             :     /**
     594             :     * \brief Coarse to fine interpolation in space.
     595             :     *
     596             :     * \param crse
     597             :     * \param crse_comp
     598             :     * \param fine
     599             :     * \param fine_comp
     600             :     * \param ncomp
     601             :     * \param fine_region
     602             :     * \param ratio
     603             :     * \param crse_geom
     604             :     * \param fine_geom
     605             :     * \param bcr
     606             :     * \param actual_comp
     607             :     * \param actual_state
     608             :     * \param runon
     609             :     */
     610             :     void interp (const FArrayBox& crse,
     611             :                  int              crse_comp,
     612             :                  FArrayBox&       fine,
     613             :                  int              fine_comp,
     614             :                  int              ncomp,
     615             :                  const Box&       fine_region,
     616             :                  const IntVect&   ratio,
     617             :                  const Geometry&  crse_geom,
     618             :                  const Geometry&  fine_geom,
     619             :                  Vector<BCRec> const& bcr,
     620             :                  int              actual_comp,
     621             :                  int              actual_state,
     622             :                  RunOn            runon) override;
     623             : 
     624             :     /**
     625             :     * \brief Coarse to fine interpolation in space.
     626             :     *
     627             :     * \param crse
     628             :     * \param crse_comp
     629             :     * \param fine
     630             :     * \param fine_comp
     631             :     * \param ncomp
     632             :     * \param fine_region
     633             :     * \param ratio
     634             :     * \param solve_mask
     635             :     * \param crse_geom
     636             :     * \param fine_geom
     637             :     * \param bcr
     638             :     * \param actual_comp
     639             :     * \param actual_state
     640             :     * \param runon
     641             :     */
     642             :     void interp_arr (Array<FArrayBox*, AMREX_SPACEDIM> const& crse,
     643             :                      int         crse_comp,
     644             :                      Array<FArrayBox*, AMREX_SPACEDIM> const& fine,
     645             :                      int         fine_comp,
     646             :                      int         ncomp,
     647             :                      const Box&        fine_region,
     648             :                      const IntVect&    ratio,
     649             :                      Array<IArrayBox*, AMREX_SPACEDIM> const& solve_mask,
     650             :                      const Geometry&   crse_geom,
     651             :                      const Geometry&   fine_geom,
     652             :                      Vector<Array<BCRec, AMREX_SPACEDIM> > const& bcr,
     653             :                      int         actual_comp,
     654             :                      int         actual_state,
     655             :                      RunOn       runon) override;
     656             : };
     657             : 
     658             : 
     659             : /**
     660             : * \brief Piecewise constant tangential interpolation / linear normal interpolation of face data.
     661             : *
     662             : * Piecewise constant tangential interpolation / linear normal interpolation of face data.
     663             : */
     664             : class FaceLinear
     665             :     :
     666             :     public Interpolater
     667             : {
     668             : public:
     669             :     /**
     670             :     * \brief Returns coarsened box given fine box and refinement ratio.
     671             :     *
     672             :     * \param fine
     673             :     * \param ratio
     674             :     */
     675             :     Box CoarseBox (const Box& fine, int ratio) override;
     676             : 
     677             :     /**
     678             :     * \brief Returns coarsened box given fine box and refinement ratio.
     679             :     *
     680             :     * \param fine
     681             :     * \param ratio
     682             :     */
     683             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     684             : 
     685             :     /**
     686             :     * \brief Coarse to fine interpolation in space.
     687             :     *
     688             :     * \param crse
     689             :     * \param crse_comp
     690             :     * \param fine
     691             :     * \param fine_comp
     692             :     * \param ncomp
     693             :     * \param fine_region
     694             :     * \param ratio
     695             :     * \param crse_geom
     696             :     * \param fine_geom
     697             :     * \param bcr
     698             :     * \param actual_comp
     699             :     * \param actual_state
     700             :     */
     701             :     void interp (const FArrayBox& crse,
     702             :                  int              crse_comp,
     703             :                  FArrayBox&       fine,
     704             :                  int              fine_comp,
     705             :                  int              ncomp,
     706             :                  const Box&       fine_region,
     707             :                  const IntVect&   ratio,
     708             :                  const Geometry&  crse_geom,
     709             :                  const Geometry&  fine_geom,
     710             :                  Vector<BCRec> const& bcr,
     711             :                  int              actual_comp,
     712             :                  int              actual_state,
     713             :                  RunOn            runon) override;
     714             : 
     715             :     /**
     716             :     * \brief Coarse to fine interpolation in space for face-based data.
     717             :     *
     718             :     * \param crse
     719             :     * \param crse_comp
     720             :     * \param fine
     721             :     * \param fine_comp
     722             :     * \param ncomp
     723             :     * \param fine_region
     724             :     * \param ratio
     725             :     * \param solve_mask
     726             :     * \param crse_geom
     727             :     * \param fine_geom
     728             :     * \param bcr
     729             :     * \param bccomp
     730             :     * \param runon
     731             :     */
     732             :     void interp_face (const FArrayBox& crse,
     733             :                       int        crse_comp,
     734             :                       FArrayBox&       fine,
     735             :                       int        fine_comp,
     736             :                       int        ncomp,
     737             :                       const Box&       fine_region,
     738             :                       const IntVect&   ratio,
     739             :                       const IArrayBox& solve_mask,
     740             :                       const Geometry&  crse_geom,
     741             :                       const Geometry&  fine_geom,
     742             :                       Vector<BCRec> const & bcr,
     743             :                       int        bccomp,
     744             :                       RunOn            runon) override;
     745             : 
     746             :     /**
     747             :     * \brief Coarse to fine interpolation in space.
     748             :     *
     749             :     * \param crse
     750             :     * \param crse_comp
     751             :     * \param fine
     752             :     * \param fine_comp
     753             :     * \param ncomp
     754             :     * \param fine_region
     755             :     * \param ratio
     756             :     * \param crse_geom
     757             :     * \param fine_geom
     758             :     * \param bcr
     759             :     * \param actual_comp
     760             :     * \param actual_state
     761             :     */
     762             :     void interp_arr (Array<FArrayBox*, AMREX_SPACEDIM> const& crse,
     763             :                      int         crse_comp,
     764             :                      Array<FArrayBox*, AMREX_SPACEDIM> const& fine,
     765             :                      int         fine_comp,
     766             :                      int         ncomp,
     767             :                      const Box&        fine_region,
     768             :                      const IntVect&    ratio,
     769             :                      Array<IArrayBox*, AMREX_SPACEDIM> const& solve_mask,
     770             :                      const Geometry&   /*crse_geom*/,
     771             :                      const Geometry&   /*fine_geom*/,
     772             :                      Vector<Array<BCRec, AMREX_SPACEDIM> > const& /*bcr*/,
     773             :                      int         /*actual_comp*/,
     774             :                      int         /*actual_state*/,
     775             :                      RunOn       runon) override;
     776             : 
     777             : 
     778             : };
     779             : 
     780             : /**
     781             : * \brief Bilinear tangential interpolation / linear normal interpolation of face data.
     782             : *
     783             : * Bilinear tangential interpolation / linear normal interpolation of face data.
     784             : */
     785             : class FaceConservativeLinear
     786             :     :
     787             :     public Interpolater
     788             : {
     789             : public:
     790             :     /**
     791             :     * \brief Returns coarsened box given fine box and refinement ratio.
     792             :     *
     793             :     * \param fine
     794             :     * \param ratio
     795             :     */
     796             :     Box CoarseBox (const Box& fine, int ratio) override;
     797             : 
     798             :     /**
     799             :     * \brief Returns coarsened box given fine box and refinement ratio.
     800             :     *
     801             :     * \param fine
     802             :     * \param ratio
     803             :     */
     804             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     805             : 
     806             :     /**
     807             :     * \brief Coarse to fine interpolation in space.
     808             :     *
     809             :     * \param crse
     810             :     * \param crse_comp
     811             :     * \param fine
     812             :     * \param fine_comp
     813             :     * \param ncomp
     814             :     * \param fine_region
     815             :     * \param ratio
     816             :     * \param crse_geom
     817             :     * \param fine_geom
     818             :     * \param bcr
     819             :     * \param actual_comp
     820             :     * \param actual_state
     821             :     */
     822             :     void interp (const FArrayBox& crse,
     823             :                  int              crse_comp,
     824             :                  FArrayBox&       fine,
     825             :                  int              fine_comp,
     826             :                  int              ncomp,
     827             :                  const Box&       fine_region,
     828             :                  const IntVect&   ratio,
     829             :                  const Geometry&  crse_geom,
     830             :                  const Geometry&  fine_geom,
     831             :                  Vector<BCRec> const& bcr,
     832             :                  int              actual_comp,
     833             :                  int              actual_state,
     834             :                  RunOn            runon) override;
     835             : 
     836             :     /**
     837             :     * \brief Coarse to fine interpolation in space for face-based data.
     838             :     *
     839             :     * \param crse
     840             :     * \param crse_comp
     841             :     * \param fine
     842             :     * \param fine_comp
     843             :     * \param ncomp
     844             :     * \param fine_region
     845             :     * \param ratio
     846             :     * \param solve_mask
     847             :     * \param crse_geom
     848             :     * \param fine_geom
     849             :     * \param bcr
     850             :     * \param bccomp
     851             :     * \param runon
     852             :     */
     853             :     void interp_face (const FArrayBox& crse,
     854             :                       int        crse_comp,
     855             :                       FArrayBox&       fine,
     856             :                       int        fine_comp,
     857             :                       int        ncomp,
     858             :                       const Box&       fine_region,
     859             :                       const IntVect&   ratio,
     860             :                       const IArrayBox& solve_mask,
     861             :                       const Geometry&  crse_geom,
     862             :                       const Geometry&  fine_geom,
     863             :                       Vector<BCRec> const & bcr,
     864             :                       int        bccomp,
     865             :                       RunOn            runon) override;
     866             : 
     867             :     /**
     868             :     * \brief Coarse to fine interpolation in space.
     869             :     *
     870             :     * \param crse
     871             :     * \param crse_comp
     872             :     * \param fine
     873             :     * \param fine_comp
     874             :     * \param ncomp
     875             :     * \param fine_region
     876             :     * \param ratio
     877             :     * \param crse_geom
     878             :     * \param fine_geom
     879             :     * \param bcr
     880             :     * \param actual_comp
     881             :     * \param actual_state
     882             :     */
     883             :     void interp_arr (Array<FArrayBox*, AMREX_SPACEDIM> const& crse,
     884             :                      int         crse_comp,
     885             :                      Array<FArrayBox*, AMREX_SPACEDIM> const& fine,
     886             :                      int         fine_comp,
     887             :                      int         ncomp,
     888             :                      const Box&        fine_region,
     889             :                      const IntVect&    ratio,
     890             :                      Array<IArrayBox*, AMREX_SPACEDIM> const& solve_mask,
     891             :                      const Geometry&   /*crse_geom*/,
     892             :                      const Geometry&   /*fine_geom*/,
     893             :                      Vector<Array<BCRec, AMREX_SPACEDIM> > const& /*bcr*/,
     894             :                      int         /*actual_comp*/,
     895             :                      int         /*actual_state*/,
     896             :                      RunOn       runon) override;
     897             : 
     898             : 
     899             : };
     900             : 
     901             : /**
     902             : * \brief Quartic interpolation on cell centered data.
     903             : *
     904             : * Quartic interpolation on cell centered data.
     905             : */
     906             : class CellQuartic
     907             :     :
     908             :     public Interpolater
     909             : {
     910             : public:
     911             :     /**
     912             :     * \brief Returns coarsened box given fine box and refinement ratio.
     913             :     *
     914             :     * \param fine
     915             :     * \param ratio
     916             :     */
     917             :     Box CoarseBox (const Box& fine, int ratio) override;
     918             : 
     919             :     /**
     920             :     * \brief Returns coarsened box given fine box and refinement ratio.
     921             :     *
     922             :     * \param fine
     923             :     * \param ratio
     924             :     */
     925             :     Box CoarseBox (const Box& fine, const IntVect& ratio) override;
     926             : 
     927             :     /**
     928             :     * \brief Coarse to fine interpolation in space.
     929             :     *
     930             :     * \param crse
     931             :     * \param crse_comp
     932             :     * \param fine
     933             :     * \param fine_comp
     934             :     * \param ncomp
     935             :     * \param fine_region
     936             :     * \param ratio
     937             :     * \param crse_geom
     938             :     * \param fine_geom
     939             :     * \param bcr
     940             :     * \param actual_comp
     941             :     * \param actual_state
     942             :     */
     943             :     void interp (const FArrayBox& crse,
     944             :                  int              crse_comp,
     945             :                  FArrayBox&       fine,
     946             :                  int              fine_comp,
     947             :                  int              ncomp,
     948             :                  const Box&       fine_region,
     949             :                  const IntVect&   ratio,
     950             :                  const Geometry&  crse_geom,
     951             :                  const Geometry&  fine_geom,
     952             :                  Vector<BCRec> const& bcr,
     953             :                  int              actual_comp,
     954             :                  int              actual_state,
     955             :                  RunOn            runon) override;
     956             : };
     957             : 
     958             : //! CONSTRUCT A GLOBAL OBJECT OF EACH VERSION.
     959             : extern AMREX_EXPORT PCInterp                  pc_interp;
     960             : extern AMREX_EXPORT NodeBilinear              node_bilinear_interp;
     961             : extern AMREX_EXPORT FaceDivFree               face_divfree_interp;
     962             : extern AMREX_EXPORT FaceLinear                face_linear_interp;
     963             : extern AMREX_EXPORT FaceConservativeLinear    face_cons_linear_interp;
     964             : extern AMREX_EXPORT CellConservativeLinear    lincc_interp;
     965             : extern AMREX_EXPORT CellConservativeLinear    cell_cons_interp;
     966             : extern AMREX_EXPORT CellBilinear              cell_bilinear_interp;
     967             : extern AMREX_EXPORT CellConservativeProtected protected_interp;
     968             : extern AMREX_EXPORT CellConservativeQuartic   quartic_interp;
     969             : extern AMREX_EXPORT CellQuadratic             quadratic_interp;
     970             : extern AMREX_EXPORT CellQuartic               cell_quartic_interp;
     971             : 
     972             : }
     973             : 
     974             : #endif /*_INTERPOLATER_H_*/

Generated by: LCOV version 1.14