Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_Interpolater.H
Go to the documentation of this file.
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
14namespace amrex {
15
16class Geometry;
17class FArrayBox;
18class IArrayBox;
19
26 : public InterpBase
27{
28public:
46 virtual void interp (const FArrayBox& crse,
47 int crse_comp,
49 int fine_comp,
50 int ncomp,
51 const Box& fine_region,
52 const IntVect& ratio,
53 const Geometry& crse_geom,
54 const Geometry& fine_geom,
55 Vector<BCRec> const & bcr,
56 int actual_comp,
57 int actual_state,
58 RunOn runon) = 0;
59
66 virtual void interp_face (const FArrayBox& /*crse*/,
67 const int /*crse_comp*/,
68 FArrayBox& /*fine*/,
69 const int /*fine_comp*/,
70 const int /*ncomp*/,
71 const Box& /*fine_region*/,
72 const IntVect& /*ratio*/,
73 const IArrayBox& /*solve_mask*/,
74 const Geometry& /*crse_geom*/,
75 const Geometry& /*fine_geom*/,
76 Vector<BCRec> const & /*bcr*/,
77 const int /*bccomp*/,
78 RunOn /*runon*/)
79 { amrex::Abort("The version of this Interpolater for face-based data is not implemented or does not apply. Call 'interp' instead."); }
80
84 virtual void interp_arr (Array<FArrayBox*, AMREX_SPACEDIM> const& /*crse*/,
85 const int /*crse_comp*/,
87 const int /*fine_comp*/,
88 const int /*ncomp*/,
89 const Box& /*fine_region*/,
90 const IntVect& /*ratio*/,
91 Array<IArrayBox*, AMREX_SPACEDIM> const& /*solve_mask*/,
92 const Geometry& /*crse_geom*/,
93 const Geometry& /*fine_geom*/,
94 Vector<Array<BCRec, AMREX_SPACEDIM> > const& /*bcr*/,
95 const int /*actual_comp*/,
96 const int /*actual_state*/,
97 const RunOn /*runon*/)
98
99 { amrex::Abort("The Array<FArrayBox*, AMREX_SPACEDIM> version of this Interpolater is not implemented or does not apply. Call 'interp' instead."); }
100
104 virtual void protect (const FArrayBox& /*crse*/,
105 int /*crse_comp*/,
106 FArrayBox& /*fine*/,
107 int /*fine_comp*/,
108 FArrayBox& /*fine_state*/,
109 int /*state_comp*/,
110 int /*ncomp*/,
111 const Box& /*fine_region*/,
112 const IntVect& /*ratio*/,
113 const Geometry& /*crse_geom*/,
114 const Geometry& /*fine_geom*/,
115 Vector<BCRec>& /*bcr*/,
116 RunOn /*runon*/) {}
117};
118
119
126 :
127 public Interpolater
128{
129public:
136 Box CoarseBox (const Box& fine, int ratio) override;
137
144 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
145
163 void interp (const FArrayBox& crse,
164 int crse_comp,
166 int fine_comp,
167 int ncomp,
168 const Box& fine_region,
169 const IntVect& ratio,
170 const Geometry& crse_geom,
171 const Geometry& fine_geom,
172 Vector<BCRec> const& bcr,
173 int actual_comp,
174 int actual_state,
175 RunOn runon) override;
176};
177
178
185 :
186 public Interpolater
187{
188public:
195 Box CoarseBox (const Box& fine, int ratio) override;
196
203 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
204
222 void interp (const FArrayBox& crse,
223 int crse_comp,
225 int fine_comp,
226 int ncomp,
227 const Box& fine_region,
228 const IntVect& ratio,
229 const Geometry& crse_geom,
230 const Geometry& fine_geom,
231 Vector<BCRec> const& bcr,
232 int actual_comp,
233 int actual_state,
234 RunOn runon) override;
235};
236
237
252 :
253 public Interpolater
254{
255public:
256
262 explicit CellConservativeLinear (bool do_linear_limiting_= true);
263
270 Box CoarseBox (const Box& fine, int ratio) override;
271
278 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
282 void interp (const FArrayBox& crse,
283 int crse_comp,
285 int fine_comp,
286 int ncomp,
287 const Box& fine_region,
288 const IntVect& ratio,
289 const Geometry& crse_geom,
290 const Geometry& fine_geom,
291 Vector<BCRec> const& bcr,
292 int /*actual_comp*/,
293 int /*actual_state*/,
294 RunOn runon) override;
295
296protected:
297
299};
300
301
309 :
311{
312public:
313
318
336 void protect (const FArrayBox& crse,
337 int crse_comp,
339 int fine_comp,
340 FArrayBox& fine_state,
341 int state_comp,
342 int ncomp,
343 const Box& fine_region,
344 const IntVect& ratio,
345 const Geometry& crse_geom,
346 const Geometry& fine_geom,
347 Vector<BCRec>& bcr,
348 RunOn runon) override;
349};
350
351
358 :
359 public Interpolater
360{
361public:
362
369 Box CoarseBox (const Box& fine, int ratio) override;
370
377 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
378
396 void interp (const FArrayBox& crse,
397 int crse_comp,
399 int fine_comp,
400 int ncomp,
401 const Box& fine_region,
402 const IntVect& ratio,
403 const Geometry& crse_geom,
404 const Geometry& fine_geom,
405 Vector<BCRec> const& bcr,
406 int actual_comp,
407 int actual_state,
408 RunOn runon) override;
409};
410
411
416 :
417 public Interpolater
418{
419public:
426 Box CoarseBox (const Box& fine, int ratio) override;
427
434 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
435
453 void interp (const FArrayBox& crse,
454 int crse_comp,
456 int fine_comp,
457 int ncomp,
458 const Box& fine_region,
459 const IntVect& ratio,
460 const Geometry& crse_geom,
461 const Geometry& fine_geom,
462 Vector<BCRec> const& bcr,
463 int actual_comp,
464 int actual_state,
465 RunOn runon) override;
466};
467
468
477 :
478 public Interpolater
479{
480public:
487 Box CoarseBox (const Box& fine, int ratio) override;
488
495 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
496
514 void interp (const FArrayBox& crse,
515 int crse_comp,
517 int fine_comp,
518 int ncomp,
519 const Box& fine_region,
520 const IntVect& ratio,
521 const Geometry& crse_geom,
522 const Geometry& fine_geom,
523 Vector<BCRec> const& bcr,
524 int actual_comp,
525 int actual_state,
526 RunOn runon) override;
527};
528
542 :
543 public Interpolater
544{
545public:
552 Box CoarseBox (const Box& fine, int ratio) override;
553
560 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
561
579 void interp (const FArrayBox& crse,
580 int crse_comp,
582 int fine_comp,
583 int ncomp,
584 const Box& fine_region,
585 const IntVect& ratio,
586 const Geometry& crse_geom,
587 const Geometry& fine_geom,
588 Vector<BCRec> const& bcr,
589 int actual_comp,
590 int actual_state,
591 RunOn runon) override;
592
612 int crse_comp,
614 int fine_comp,
615 int ncomp,
616 const Box& fine_region,
617 const IntVect& ratio,
618 Array<IArrayBox*, AMREX_SPACEDIM> const& solve_mask,
619 const Geometry& crse_geom,
620 const Geometry& fine_geom,
622 int actual_comp,
623 int actual_state,
624 RunOn runon) override;
625};
626
627
634 :
635 public Interpolater
636{
637public:
644 Box CoarseBox (const Box& fine, int ratio) override;
645
652 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
653
671 void interp (const FArrayBox& crse,
672 int crse_comp,
674 int fine_comp,
675 int ncomp,
676 const Box& fine_region,
677 const IntVect& ratio,
678 const Geometry& crse_geom,
679 const Geometry& fine_geom,
680 Vector<BCRec> const& bcr,
681 int actual_comp,
682 int actual_state,
683 RunOn runon) override;
684
702 void interp_face (const FArrayBox& crse,
703 int crse_comp,
705 int fine_comp,
706 int ncomp,
707 const Box& fine_region,
708 const IntVect& ratio,
709 const IArrayBox& solve_mask,
710 const Geometry& crse_geom,
711 const Geometry& fine_geom,
712 Vector<BCRec> const & bcr,
713 int bccomp,
714 RunOn runon) override;
715
730 int crse_comp,
732 int fine_comp,
733 int ncomp,
734 const Box& fine_region,
735 const IntVect& ratio,
736 Array<IArrayBox*, AMREX_SPACEDIM> const& solve_mask,
737 const Geometry& /*crse_geom*/,
738 const Geometry& /*fine_geom*/,
739 Vector<Array<BCRec, AMREX_SPACEDIM> > const& /*bcr*/,
740 int /*actual_comp*/,
741 int /*actual_state*/,
742 RunOn runon) override;
743
744
745};
746
753 :
754 public Interpolater
755{
756public:
763 Box CoarseBox (const Box& fine, int ratio) override;
764
771 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
772
790 void interp (const FArrayBox& crse,
791 int crse_comp,
793 int fine_comp,
794 int ncomp,
795 const Box& fine_region,
796 const IntVect& ratio,
797 const Geometry& crse_geom,
798 const Geometry& fine_geom,
799 Vector<BCRec> const& bcr,
800 int actual_comp,
801 int actual_state,
802 RunOn runon) override;
803
821 void interp_face (const FArrayBox& crse,
822 int crse_comp,
824 int fine_comp,
825 int ncomp,
826 const Box& fine_region,
827 const IntVect& ratio,
828 const IArrayBox& solve_mask,
829 const Geometry& crse_geom,
830 const Geometry& fine_geom,
831 Vector<BCRec> const & bcr,
832 int bccomp,
833 RunOn runon) override;
834
850 int crse_comp,
852 int fine_comp,
853 int ncomp,
854 const Box& fine_region,
855 const IntVect& ratio,
856 Array<IArrayBox*, AMREX_SPACEDIM> const& solve_mask,
857 const Geometry& crse_geom,
858 const Geometry& /*fine_geom*/,
859 Vector<Array<BCRec, AMREX_SPACEDIM> > const& /*bcr*/,
860 int /*actual_comp*/,
861 int /*actual_state*/,
862 RunOn runon) override;
863
864
865};
866
873 :
874 public Interpolater
875{
876public:
883 Box CoarseBox (const Box& fine, int ratio) override;
884
891 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
892
910 void interp (const FArrayBox& crse,
911 int crse_comp,
913 int fine_comp,
914 int ncomp,
915 const Box& fine_region,
916 const IntVect& ratio,
917 const Geometry& crse_geom,
918 const Geometry& fine_geom,
919 Vector<BCRec> const& bcr,
920 int actual_comp,
921 int actual_state,
922 RunOn runon) override;
923};
924
938
939}
940
941#endif /*_INTERPOLATER_H_*/
#define AMREX_EXPORT
Definition AMReX_Extension.H:191
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:187
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:754
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:781
Linear conservative interpolation on cell centered data.
Definition AMReX_Interpolater.H:254
bool do_linear_limiting
Definition AMReX_Interpolater.H:298
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:833
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:824
Lin. cons. interp. on cc data with protection against under/over-shoots.
Definition AMReX_Interpolater.H:311
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:1164
CellConservativeProtected()
The constructor.
Definition AMReX_Interpolater.cpp:1160
Conservative quartic interpolation on cell averaged data.
Definition AMReX_Interpolater.H:479
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:1246
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:1264
Quadratic interpolation on cell centered data.
Definition AMReX_Interpolater.H:360
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:995
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:1004
Quartic interpolation on cell centered data.
Definition AMReX_Interpolater.H:875
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:1422
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:1430
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:231
Bilinear tangential interpolation / linear normal interpolation of face data.
Definition AMReX_Interpolater.H:755
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:474
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:442
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:414
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:623
Divergence-preserving interpolation on face centered data.
Definition AMReX_Interpolater.H:544
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:1315
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:1333
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:1299
Piecewise constant tangential interpolation / linear normal interpolation of face data.
Definition AMReX_Interpolater.H:636
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:133
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:192
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:293
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:114
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:74
A Fortran Array of ints.
Definition AMReX_IArrayBox.H:49
Definition AMReX_InterpBase.H:34
Virtual base class for interpolaters.
Definition AMReX_Interpolater.H:27
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:84
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:66
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:104
Bilinear interpolation on node centered data.
Definition AMReX_Interpolater.H:128
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:49
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:89
Piecewise Constant interpolation on cell centered data.
Definition AMReX_Interpolater.H:418
Box CoarseBox(const Box &fine, int ratio) override
Returns coarsened box given fine box and refinement ratio.
Definition AMReX_Interpolater.cpp:1121
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:1135
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:28
std::array< T, N > Array
Definition AMReX_Array.H:26
Definition AMReX_Amr.cpp:49
CellQuartic cell_quartic_interp
Definition AMReX_Interpolater.cpp:46
CellConservativeQuartic quartic_interp
Definition AMReX_Interpolater.cpp:43
RunOn
Definition AMReX_GpuControl.H:69
FaceDivFree face_divfree_interp
Definition AMReX_Interpolater.cpp:39
FaceConservativeLinear face_cons_linear_interp
Definition AMReX_Interpolater.cpp:38
CellBilinear cell_bilinear_interp
Definition AMReX_Interpolater.cpp:44
CellConservativeLinear cell_cons_interp(false)
Definition AMReX_Interpolater.H:932
NodeBilinear node_bilinear_interp
Definition AMReX_Interpolater.cpp:36
CellConservativeLinear lincc_interp
Definition AMReX_Interpolater.cpp:40
CellQuadratic quadratic_interp
Definition AMReX_Interpolater.cpp:45
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition AMReX.cpp:240
PCInterp pc_interp
CONSTRUCT A GLOBAL OBJECT OF EACH VERSION.
Definition AMReX_Interpolater.cpp:35
CellConservativeProtected protected_interp
Definition AMReX_Interpolater.cpp:42
FaceLinear face_linear_interp
Definition AMReX_Interpolater.cpp:37