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
9namespace amrex {
10
11class Geometry;
12class FArrayBox;
13class IArrayBox;
14
21 : public InterpBase
22{
23public:
43 virtual void interp (const FArrayBox& crse,
44 int crse_comp,
46 int fine_comp,
47 int ncomp,
48 const Box& fine_region,
49 const IntVect& ratio,
50 const Geometry& crse_geom,
51 const Geometry& fine_geom,
52 Vector<BCRec> const & bcr,
53 int actual_comp,
54 int actual_state,
55 RunOn runon) = 0;
56
60 virtual void interp_face (const FArrayBox& /*crse*/,
61 const int /*crse_comp*/,
62 FArrayBox& /*fine*/,
63 const int /*fine_comp*/,
64 const int /*ncomp*/,
65 const Box& /*fine_region*/,
66 const IntVect& /*ratio*/,
67 const IArrayBox& /*solve_mask*/,
68 const Geometry& /*crse_geom*/,
69 const Geometry& /*fine_geom*/,
70 Vector<BCRec> const & /*bcr*/,
71 const int /*bccomp*/,
72 RunOn /*runon*/)
73 { amrex::Abort("The version of this Interpolater for face-based data is not implemented or does not apply. Call 'interp' instead."); }
74
79 virtual void interp_arr (Array<FArrayBox*, AMREX_SPACEDIM> const& /*crse*/,
80 const int /*crse_comp*/,
82 const int /*fine_comp*/,
83 const int /*ncomp*/,
84 const Box& /*fine_region*/,
85 const IntVect& /*ratio*/,
86 Array<IArrayBox*, AMREX_SPACEDIM> const& /*solve_mask*/,
87 const Geometry& /*crse_geom*/,
88 const Geometry& /*fine_geom*/,
89 Vector<Array<BCRec, AMREX_SPACEDIM> > const& /*bcr*/,
90 const int /*actual_comp*/,
91 const int /*actual_state*/,
92 const RunOn /*runon*/)
93
94 { amrex::Abort("The Array<FArrayBox*, AMREX_SPACEDIM> version of this Interpolater is not implemented or does not apply. Call 'interp' instead."); }
95
99 virtual void protect (const FArrayBox& /*crse*/,
100 int /*crse_comp*/,
101 FArrayBox& /*fine*/,
102 int /*fine_comp*/,
103 FArrayBox& /*fine_state*/,
104 int /*state_comp*/,
105 int /*ncomp*/,
106 const Box& /*fine_region*/,
107 const IntVect& /*ratio*/,
108 const Geometry& /*crse_geom*/,
109 const Geometry& /*fine_geom*/,
110 Vector<BCRec>& /*bcr*/,
111 RunOn /*runon*/) {}
112};
113
114
121 :
122 public Interpolater
123{
124public:
131 Box CoarseBox (const Box& fine, int ratio) override;
132
139 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
140
158 void interp (const FArrayBox& crse,
159 int crse_comp,
161 int fine_comp,
162 int ncomp,
163 const Box& fine_region,
164 const IntVect& ratio,
165 const Geometry& crse_geom,
166 const Geometry& fine_geom,
167 Vector<BCRec> const& bcr,
168 int actual_comp,
169 int actual_state,
170 RunOn runon) override;
171};
172
173
180 :
181 public Interpolater
182{
183public:
190 Box CoarseBox (const Box& fine, int ratio) override;
191
198 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
199
217 void interp (const FArrayBox& crse,
218 int crse_comp,
220 int fine_comp,
221 int ncomp,
222 const Box& fine_region,
223 const IntVect& ratio,
224 const Geometry& crse_geom,
225 const Geometry& fine_geom,
226 Vector<BCRec> const& bcr,
227 int actual_comp,
228 int actual_state,
229 RunOn runon) override;
230};
231
232
247 :
248 public Interpolater
249{
250public:
251
257 explicit CellConservativeLinear (bool do_linear_limiting_= true);
258
265 Box CoarseBox (const Box& fine, int ratio) override;
266
273 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
277 void interp (const FArrayBox& crse,
278 int crse_comp,
280 int fine_comp,
281 int ncomp,
282 const Box& fine_region,
283 const IntVect& ratio,
284 const Geometry& crse_geom,
285 const Geometry& fine_geom,
286 Vector<BCRec> const& bcr,
287 int /*actual_comp*/,
288 int /*actual_state*/,
289 RunOn runon) override;
290
291protected:
292
294};
295
296
304 :
306{
307public:
308
313
331 void protect (const FArrayBox& crse,
332 int crse_comp,
334 int fine_comp,
335 FArrayBox& fine_state,
336 int state_comp,
337 int ncomp,
338 const Box& fine_region,
339 const IntVect& ratio,
340 const Geometry& crse_geom,
341 const Geometry& fine_geom,
342 Vector<BCRec>& bcr,
343 RunOn runon) override;
344};
345
346
353 :
354 public Interpolater
355{
356public:
357
364 Box CoarseBox (const Box& fine, int ratio) override;
365
372 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
373
391 void interp (const FArrayBox& crse,
392 int crse_comp,
394 int fine_comp,
395 int ncomp,
396 const Box& fine_region,
397 const IntVect& ratio,
398 const Geometry& crse_geom,
399 const Geometry& fine_geom,
400 Vector<BCRec> const& bcr,
401 int actual_comp,
402 int actual_state,
403 RunOn runon) override;
404};
405
406
411 :
412 public Interpolater
413{
414public:
421 Box CoarseBox (const Box& fine, int ratio) override;
422
429 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
430
448 void interp (const FArrayBox& crse,
449 int crse_comp,
451 int fine_comp,
452 int ncomp,
453 const Box& fine_region,
454 const IntVect& ratio,
455 const Geometry& crse_geom,
456 const Geometry& fine_geom,
457 Vector<BCRec> const& bcr,
458 int actual_comp,
459 int actual_state,
460 RunOn runon) override;
461};
462
463
472 :
473 public Interpolater
474{
475public:
482 Box CoarseBox (const Box& fine, int ratio) override;
483
490 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
491
509 void interp (const FArrayBox& crse,
510 int crse_comp,
512 int fine_comp,
513 int ncomp,
514 const Box& fine_region,
515 const IntVect& ratio,
516 const Geometry& crse_geom,
517 const Geometry& fine_geom,
518 Vector<BCRec> const& bcr,
519 int actual_comp,
520 int actual_state,
521 RunOn runon) override;
522};
523
537 :
538 public Interpolater
539{
540public:
547 Box CoarseBox (const Box& fine, int ratio) override;
548
555 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
556
574 void interp (const FArrayBox& crse,
575 int crse_comp,
577 int fine_comp,
578 int ncomp,
579 const Box& fine_region,
580 const IntVect& ratio,
581 const Geometry& crse_geom,
582 const Geometry& fine_geom,
583 Vector<BCRec> const& bcr,
584 int actual_comp,
585 int actual_state,
586 RunOn runon) override;
587
607 int crse_comp,
609 int fine_comp,
610 int ncomp,
611 const Box& fine_region,
612 const IntVect& ratio,
613 Array<IArrayBox*, AMREX_SPACEDIM> const& solve_mask,
614 const Geometry& crse_geom,
615 const Geometry& fine_geom,
617 int actual_comp,
618 int actual_state,
619 RunOn runon) override;
620};
621
622
629 :
630 public Interpolater
631{
632public:
639 Box CoarseBox (const Box& fine, int ratio) override;
640
647 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
648
666 void interp (const FArrayBox& crse,
667 int crse_comp,
669 int fine_comp,
670 int ncomp,
671 const Box& fine_region,
672 const IntVect& ratio,
673 const Geometry& crse_geom,
674 const Geometry& fine_geom,
675 Vector<BCRec> const& bcr,
676 int actual_comp,
677 int actual_state,
678 RunOn runon) override;
679
697 void interp_face (const FArrayBox& crse,
698 int crse_comp,
700 int fine_comp,
701 int ncomp,
702 const Box& fine_region,
703 const IntVect& ratio,
704 const IArrayBox& solve_mask,
705 const Geometry& crse_geom,
706 const Geometry& fine_geom,
707 Vector<BCRec> const & bcr,
708 int bccomp,
709 RunOn runon) override;
710
725 int crse_comp,
727 int fine_comp,
728 int ncomp,
729 const Box& fine_region,
730 const IntVect& ratio,
731 Array<IArrayBox*, AMREX_SPACEDIM> const& solve_mask,
732 const Geometry& /*crse_geom*/,
733 const Geometry& /*fine_geom*/,
734 Vector<Array<BCRec, AMREX_SPACEDIM> > const& /*bcr*/,
735 int /*actual_comp*/,
736 int /*actual_state*/,
737 RunOn runon) override;
738
739
740};
741
748 :
749 public Interpolater
750{
751public:
758 Box CoarseBox (const Box& fine, int ratio) override;
759
766 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
767
785 void interp (const FArrayBox& crse,
786 int crse_comp,
788 int fine_comp,
789 int ncomp,
790 const Box& fine_region,
791 const IntVect& ratio,
792 const Geometry& crse_geom,
793 const Geometry& fine_geom,
794 Vector<BCRec> const& bcr,
795 int actual_comp,
796 int actual_state,
797 RunOn runon) override;
798
816 void interp_face (const FArrayBox& crse,
817 int crse_comp,
819 int fine_comp,
820 int ncomp,
821 const Box& fine_region,
822 const IntVect& ratio,
823 const IArrayBox& solve_mask,
824 const Geometry& crse_geom,
825 const Geometry& fine_geom,
826 Vector<BCRec> const & bcr,
827 int bccomp,
828 RunOn runon) override;
829
845 int crse_comp,
847 int fine_comp,
848 int ncomp,
849 const Box& fine_region,
850 const IntVect& ratio,
851 Array<IArrayBox*, AMREX_SPACEDIM> const& solve_mask,
852 const Geometry& crse_geom,
853 const Geometry& /*fine_geom*/,
854 Vector<Array<BCRec, AMREX_SPACEDIM> > const& /*bcr*/,
855 int /*actual_comp*/,
856 int /*actual_state*/,
857 RunOn runon) override;
858
859
860};
861
868 :
869 public Interpolater
870{
871public:
878 Box CoarseBox (const Box& fine, int ratio) override;
879
886 Box CoarseBox (const Box& fine, const IntVect& ratio) override;
887
905 void interp (const FArrayBox& crse,
906 int crse_comp,
908 int fine_comp,
909 int ncomp,
910 const Box& fine_region,
911 const IntVect& ratio,
912 const Geometry& crse_geom,
913 const Geometry& fine_geom,
914 Vector<BCRec> const& bcr,
915 int actual_comp,
916 int actual_state,
917 RunOn runon) override;
918};
919
933
934}
935
936#endif /*_INTERPOLATER_H_*/
#define AMREX_EXPORT
Definition AMReX_Extension.H:191
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:182
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:249
bool do_linear_limiting
Definition AMReX_Interpolater.H:293
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:306
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:474
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:355
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:870
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:229
Bilinear tangential interpolation / linear normal interpolation of face data.
Definition AMReX_Interpolater.H:750
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:539
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:631
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:73
A Fortran Array of ints.
Definition AMReX_IArrayBox.H:47
Definition AMReX_InterpBase.H:26
Virtual base class for interpolaters.
Definition AMReX_Interpolater.H:22
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)
Coarse to fine interpolation in space. Takes an Array of FArrayBox*s.
Definition AMReX_Interpolater.H:79
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
Coarse to fine interpolation in space. This is a pure virtual function and hence MUST be implemented ...
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 in space for face-based data.
Definition AMReX_Interpolater.H:60
virtual void protect(const FArrayBox &, int, FArrayBox &, int, FArrayBox &, int, int, const Box &, const IntVect &, const Geometry &, const Geometry &, Vector< BCRec > &, RunOn)
Re-visit the interpolation to protect against under- or overshoots.
Definition AMReX_Interpolater.H:99
Bilinear interpolation on node centered data.
Definition AMReX_Interpolater.H:123
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:413
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
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:927
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:230
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
std::array< T, N > Array
Definition AMReX_Array.H:24