Block-Structured AMR Software Framework
 
Loading...
Searching...
No Matches
AMReX_AmrData.H
Go to the documentation of this file.
1// ---------------------------------------------------------------
2// AmrData.H
3// ---------------------------------------------------------------
4#ifndef AMREX_AMRDATA_H_
5#define AMREX_AMRDATA_H_
6#include <AMReX_Config.H>
7
9#include <AMReX_Array.H>
10#include <AMReX_Vector.H>
11#include <AMReX_MultiFab.H>
12#include <AMReX_VisMF.H>
13
14#include <iosfwd>
15#include <string>
16
17namespace amrex {
18
19class AmrData {
20
21 protected:
22 // List of grids at each level, level 0 being coarsest.
23 Vector<Vector<MultiFab *> > dataGrids; // [level][component]
24 Vector<Vector<std::vector<bool> > > dataGridsDefined; // [level][component][index]
25 Vector<Vector<VisMF *> > visMF; // [level][whichMultiFab]
28
29 int finestLevel; // most refined level available
30 Vector<int> refRatio; // refinement ratio between level L and L+1
31 Vector< Vector<Real> > dxLevel; // [level][dim]; // grid spacing
34 Vector<Box> maxDomain; // max problem domain size
36 Real time;
40 int nRegions; // number of boundary regions
41 int boundaryWidth; // number of zones in the boundary regions
43 Vector< Vector< FArrayBox *> > regions; // [lev][nReg] ptrs to bndry data
44 BoxArray fabBoxArray; // used only for fileType == Amrvis::FAB
45 std::string plotFileVersion;
46
49 int vCartGrid; // ---- the CartGrid version
52
53 public:
54 AmrData();
55 ~AmrData();
56
57 bool ReadData(const std::string &filename, Amrvis::FileType filetype);
58 bool ReadNonPlotfileData(const std::string &filename, Amrvis::FileType filetype);
59
60 const Vector<std::string> &PlotVarNames() const { return plotVars; }
61
62 int FinestLevel() const { return finestLevel; }
63 const Vector<int> &RefRatio() const { return refRatio; }
64 const BoxArray &boxArray(int level) const {
65 if(fileType == Amrvis::FAB || (fileType == Amrvis::MULTIFAB && level == 0)) {
66 return fabBoxArray;
67 } else {
68 // use visMF[][0]: all boxArrays are
69 // guaranteed to be the same for each MultiFab
70 return visMF[level][0]->boxArray();
71 }
72 }
73
74 const DistributionMapping& DistributionMap (int level) const {
75 if(fileType == Amrvis::FAB || (fileType == Amrvis::MULTIFAB && level == 0)) {
76 return dataGrids[0][0]->DistributionMap();
77 } else {
78 return dataGrids[level][0]->DistributionMap();
79 }
80 }
81
82 // limits of interior region of computational domain at each level
83 const Vector<Box> &ProbDomain() const { return probDomain; }
84 // physical size of computational domain
85 const Vector<Real> &ProbSize() const { return probSize; }
86 const Vector<Real> &ProbLo() const { return probLo; }
87 const Vector<Real> &ProbHi() const { return probHi; }
88
89 // return physical location of cell at index ix, level lev
90 // cellLoc = location of cell center
91 // loNodeLoc = location of node (vertex) on lower left hand corner
92 // hiNodeLoc = location of node (vertex) on upper right hand corner
93 void CellLoc(int lev, IntVect ix, Vector<Real> &pos) const;
94 void LoNodeLoc(int lev, IntVect ix, Vector<Real> &pos) const;
95 void HiNodeLoc(int lev, IntVect ix, Vector<Real> &pos) const;
96
97 // Return grid spacing at level iLevel
98 Vector<Real> CellSize(int iLevel) const { return dxLevel[iLevel]; }
99
100 // find the IntVect given a physical location
101 // returns the intvect, the finest level it is contained on,
102 // and the intvect at the given finest level
103 void IntVectFromLocation(const int finestFillLevel, const Vector<Real> &location,
104 IntVect &ivLoc, int &ivLevel, IntVect &ivFinestFillLev) const;
105
106 const Vector< Vector< Vector<Real> > > &GridLocLo() const { return gridLocLo; }
107 const Vector< Vector< Vector<Real> > > &GridLocHi() const { return gridLocHi; }
108 const Vector< Vector<Real> > &DxLevel() const { return dxLevel; }
109 const Vector<int> &LevelSteps() const { return levelSteps; }
110
111 int NComp() const { return nComp; }
112 int BoundaryWidth() const { return boundaryWidth; }
113 int NGrow() const { return nGrow; }
114 int CoordSys() const { return coordSys; }
115 Real Time() const { return time; }
116 const std::string &PlotFileVersion() const { return plotFileVersion; }
117
118 // fill a databox using conservative interpolation
119 void FillVar(FArrayBox *destFab, const Box &destBox,
120 int finestFillLevel, const std::string &varName, int procWithFabs);
121 void FillVar(Vector<FArrayBox *> &destFabs, const Vector<Box> &destBoxes,
122 int finestFillLevel, const std::string &varName, int procWithFabs);
123 void FillVar(MultiFab &destMultiFab, int finestFillLevel,
124 const Vector<std::string> &varNames, const Vector<int> &destFillComps);
125 void FillVar(MultiFab &destMultiFab, int finestFillLevel,
126 const std::string &varname, int destcomp = 0);
127
128 const std::string &GetFileName() const { return fileName; }
129
132 bool CartGrid() const { return bCartGrid; }
133 bool GetShowBody() const { return bShowBody; }
134 void SetShowBody(bool tf) { bShowBody = tf; }
135 int CartGridVersion() const { return vCartGrid; }
136 Real VfEps(int level) const { return vfEps[level]; }
137 void SetVfEps(Real *newvfeps, int finestlev);
138 bool Terrain() const { return bTerrain; }
139
140 void SetBoundaryWidth(int width) { boundaryWidth = width; }
141
142 bool CanDerive(const std::string &name) const;
143 bool CanDerive(const Vector<std::string> &names) const;
144 int NumDeriveFunc() const;
145 void ListDeriveFunc(std::ostream &os) const;
146 int StateNumber(const std::string &statename) const;
147
148 // return the finest level <= startLevel that fully contains box b
149 // b is defined on startLevel
150 int FinestContainingLevel(const Box &b, int startLevel) const;
151
152 // return the finest level <= startLevel that intersects box b
153 // b is defined on startLevel
154 int FinestIntersectingLevel(const Box &b, int startLevel) const;
155
156 // number of grids at level which intersect b
157 int NIntersectingGrids(int level, const Box &b) const;
158 MultiFab &GetGrids(int level, int componentIndex);
159 MultiFab &GetGrids(int level, int componentIndex, const Box &onBox);
160
161 void FlushGrids(); // Clear all internal field data
162 void FlushGrids(int componentIndex); // Clear all internal field data associated with this component
163
164 // calculate the min and max values of derived on onBox at level
165 // return false if onBox did not intersect any grids
166 bool MinMax(const Box &onBox, const std::string &derived, int level,
167 Real &dataMin, Real &dataMax);
168
169 static void SetVerbose(bool tf) { verbose = tf; }
170 static bool Verbose() { return verbose; }
171 static void SetSkipPltLines(int spl) { skipPltLines = spl; }
172 static void SetStaticBoundaryWidth(int bw) { sBoundaryWidth = bw; }
173
174 private:
175 std::string fileName;
177 static bool verbose;
178 static int skipPltLines;
179 static int sBoundaryWidth;
180
181 // fill on interior by piecewise constant interpolation
182 void FillInterior(FArrayBox &dest, int level, const Box &subbox);
183 void PcInterp(FArrayBox &fine, const FArrayBox &crse,
184 const Box &subbox, int lrat);
185 FArrayBox *ReadGrid(std::istream &is, int numVar);
186 bool DefineFab(int level, int componentIndex, int fabIndex);
187};
188
189}
190
191#endif
Array4< Real > fine
Definition AMReX_InterpFaceRegister.cpp:90
Array4< Real const > crse
Definition AMReX_InterpFaceRegister.cpp:92
Definition AMReX_AmrData.H:19
Vector< Real > CellSize(int iLevel) const
Definition AMReX_AmrData.H:98
int CoordSys() const
Definition AMReX_AmrData.H:114
static int sBoundaryWidth
Definition AMReX_AmrData.H:179
Vector< Real > probSize
Definition AMReX_AmrData.H:35
const std::string & PlotFileVersion() const
Definition AMReX_AmrData.H:116
void LoNodeLoc(int lev, IntVect ix, Vector< Real > &pos) const
Definition AMReX_AmrData.cpp:976
bool ReadNonPlotfileData(const std::string &filename, Amrvis::FileType filetype)
Definition AMReX_AmrData.cpp:741
int NumDeriveFunc() const
Definition AMReX_AmrData.cpp:1516
void ListDeriveFunc(std::ostream &os) const
Definition AMReX_AmrData.cpp:1553
Vector< Real > afEps
Definition AMReX_AmrData.H:38
static bool verbose
Definition AMReX_AmrData.H:177
int FinestLevel() const
Definition AMReX_AmrData.H:62
Vector< Real > probLo
Definition AMReX_AmrData.H:35
const std::string & GetFileName() const
Definition AMReX_AmrData.H:128
const Vector< std::string > & PlotVarNames() const
Definition AMReX_AmrData.H:60
const Vector< Real > & ProbHi() const
Definition AMReX_AmrData.H:87
Vector< int > compIndexToVisMFComponentMap
Definition AMReX_AmrData.H:27
Vector< Vector< Vector< Real > > > gridLocLo
Definition AMReX_AmrData.H:32
void SetFileType(Amrvis::FileType type)
Vector< Vector< FArrayBox * > > regions
Definition AMReX_AmrData.H:43
bool CartGrid() const
Definition AMReX_AmrData.H:132
Real VfEps(int level) const
Definition AMReX_AmrData.H:136
const Vector< Real > & ProbSize() const
Definition AMReX_AmrData.H:85
Real Time() const
Definition AMReX_AmrData.H:115
static void SetStaticBoundaryWidth(int bw)
Definition AMReX_AmrData.H:172
const Vector< Vector< Vector< Real > > > & GridLocHi() const
Definition AMReX_AmrData.H:107
FArrayBox * ReadGrid(std::istream &is, int numVar)
Definition AMReX_AmrData.cpp:1922
Amrvis::FileType fileType
Definition AMReX_AmrData.H:47
int BoundaryWidth() const
Definition AMReX_AmrData.H:112
Amrvis::FileType GetFileType() const
Definition AMReX_AmrData.H:131
Vector< Vector< VisMF * > > visMF
Definition AMReX_AmrData.H:25
std::string plotFileVersion
Definition AMReX_AmrData.H:45
int nRegions
Definition AMReX_AmrData.H:40
int finestLevel
Definition AMReX_AmrData.H:29
std::string fileName
Definition AMReX_AmrData.H:175
int coordSys
Definition AMReX_AmrData.H:42
int NIntersectingGrids(int level, const Box &b) const
Definition AMReX_AmrData.cpp:1561
MultiFab & GetGrids(int level, int componentIndex)
Definition AMReX_AmrData.cpp:1627
Vector< Vector< Vector< Real > > > gridLocHi
Definition AMReX_AmrData.H:32
const Vector< Vector< Vector< Real > > > & GridLocLo() const
Definition AMReX_AmrData.H:106
Vector< Box > probDomain
Definition AMReX_AmrData.H:33
void PcInterp(FArrayBox &fine, const FArrayBox &crse, const Box &subbox, int lrat)
Definition AMReX_AmrData.cpp:1898
static Amrvis::FileType defaultFileType
Definition AMReX_AmrData.H:176
bool Terrain() const
Definition AMReX_AmrData.H:138
Vector< Box > maxDomain
Definition AMReX_AmrData.H:34
Vector< Vector< MultiFab * > > dataGrids
Definition AMReX_AmrData.H:23
AmrData()
Definition AMReX_AmrData.cpp:44
int StateNumber(const std::string &statename) const
Definition AMReX_AmrData.cpp:1883
static void SetVerbose(bool tf)
Definition AMReX_AmrData.H:169
int NGrow() const
Definition AMReX_AmrData.H:113
int vCartGrid
Definition AMReX_AmrData.H:49
int FinestIntersectingLevel(const Box &b, int startLevel) const
Definition AMReX_AmrData.cpp:1602
bool GetShowBody() const
Definition AMReX_AmrData.H:133
Vector< int > levelSteps
Definition AMReX_AmrData.H:51
void FillVar(FArrayBox *destFab, const Box &destBox, int finestFillLevel, const std::string &varName, int procWithFabs)
Definition AMReX_AmrData.cpp:1022
void HiNodeLoc(int lev, IntVect ix, Vector< Real > &pos) const
Definition AMReX_AmrData.cpp:985
Vector< Real > vfEps
Definition AMReX_AmrData.H:38
int nComp
Definition AMReX_AmrData.H:39
~AmrData()
Definition AMReX_AmrData.cpp:55
void FlushGrids()
Definition AMReX_AmrData.cpp:1669
Vector< int > refRatio
Definition AMReX_AmrData.H:30
int nGrow
Definition AMReX_AmrData.H:39
void CellLoc(int lev, IntVect ix, Vector< Real > &pos) const
Definition AMReX_AmrData.cpp:967
void SetVfEps(Real *newvfeps, int finestlev)
bool bCartGrid
Definition AMReX_AmrData.H:48
void IntVectFromLocation(const int finestFillLevel, const Vector< Real > &location, IntVect &ivLoc, int &ivLevel, IntVect &ivFinestFillLev) const
Definition AMReX_AmrData.cpp:994
const Vector< int > & RefRatio() const
Definition AMReX_AmrData.H:63
Vector< std::string > plotVars
Definition AMReX_AmrData.H:37
int CartGridVersion() const
Definition AMReX_AmrData.H:135
const Vector< Box > & ProbDomain() const
Definition AMReX_AmrData.H:83
int FinestContainingLevel(const Box &b, int startLevel) const
Definition AMReX_AmrData.cpp:1581
Vector< Real > probHi
Definition AMReX_AmrData.H:35
void SetShowBody(bool tf)
Definition AMReX_AmrData.H:134
bool bShowBody
Definition AMReX_AmrData.H:48
void SetBoundaryWidth(int width)
Definition AMReX_AmrData.H:140
bool DefineFab(int level, int componentIndex, int fabIndex)
Definition AMReX_AmrData.cpp:1654
Vector< Vector< Real > > dxLevel
Definition AMReX_AmrData.H:31
int NComp() const
Definition AMReX_AmrData.H:111
const DistributionMapping & DistributionMap(int level) const
Definition AMReX_AmrData.H:74
const Vector< int > & LevelSteps() const
Definition AMReX_AmrData.H:109
const Vector< Real > & ProbLo() const
Definition AMReX_AmrData.H:86
const Vector< Vector< Real > > & DxLevel() const
Definition AMReX_AmrData.H:108
Vector< int > compIndexToVisMFMap
Definition AMReX_AmrData.H:26
static void SetSkipPltLines(int spl)
Definition AMReX_AmrData.H:171
bool ReadData(const std::string &filename, Amrvis::FileType filetype)
Definition AMReX_AmrData.cpp:91
static int skipPltLines
Definition AMReX_AmrData.H:178
bool MinMax(const Box &onBox, const std::string &derived, int level, Real &dataMin, Real &dataMax)
Definition AMReX_AmrData.cpp:1702
Real time
Definition AMReX_AmrData.H:36
Vector< Vector< std::vector< bool > > > dataGridsDefined
Definition AMReX_AmrData.H:24
bool CanDerive(const std::string &name) const
Definition AMReX_AmrData.cpp:1525
static bool Verbose()
Definition AMReX_AmrData.H:170
bool bTerrain
Definition AMReX_AmrData.H:50
void FillInterior(FArrayBox &dest, int level, const Box &subbox)
Definition AMReX_AmrData.cpp:1510
const BoxArray & boxArray(int level) const
Definition AMReX_AmrData.H:64
BoxArray fabBoxArray
Definition AMReX_AmrData.H:44
int boundaryWidth
Definition AMReX_AmrData.H:41
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:550
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:41
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:229
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:38
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:27
FileType
Definition AMReX_AmrvisConstants.H:86
@ MULTIFAB
Definition AMReX_AmrvisConstants.H:86
@ FAB
Definition AMReX_AmrvisConstants.H:86
Definition AMReX_Amr.cpp:49