20 #ifndef _FORTRANTHICKNESSIBC_H_ 21 #define _FORTRANTHICKNESSIBC_H_ 24 #include "RefCountedPtr.H" 25 #include "NamespaceHeader.H" 60 virtual void define(
const ProblemDomain& a_domain,
69 static void setFAB(Real* a_data_ptr,
71 const int* boxlo,
const int* boxhi,
72 const Real* a_dew,
const Real* a_dns,
73 const IntVect& a_offset,
74 const IntVect& a_nGhost,
78 const bool a_verbose =
false);
86 virtual void setVelFAB(Real* a_uVelPtr, Real* a_vVelPtr,
88 const int* boxlo,
const int* boxhi,
89 const Real* a_dew,
const Real* a_dns,
90 const IntVect& a_offset,
91 const IntVect& a_nGhost,
96 const bool a_nodal =
false,
97 const bool a_fillData =
false);
102 const int* a_dimInfo,
103 const int* boxlo,
const int* boxhi,
104 const Real* a_dew,
const Real* a_dns,
106 const IntVect& a_offset,
107 const IntVect& a_nGhost = IntVect::Zero,
108 const bool a_nodal =
false);
111 const int* a_dimInfo,
112 const int* boxlo,
const int* boxhi,
113 const Real* a_dew,
const Real* a_dns,
115 const IntVect& a_offset,
116 const IntVect& a_nGhost = IntVect::Zero,
117 const bool a_nodal =
false);
123 const int* a_dimInfo,
124 const int* boxlo,
const int* boxhi,
125 const Real* a_dew,
const Real* a_dns,
127 const IntVect& a_offset,
128 const IntVect& a_nGhost = IntVect::Zero,
129 const bool a_nodal =
false);
155 virtual void initialize(LevelData<FArrayBox>& a_U);
161 const RealVect& a_dx,
162 const RealVect& a_domainSize,
165 const int a_refRatio) ;
169 const RealVect& a_dx,
170 const RealVect& a_domainSize,
173 const int a_refRatio) ;
180 virtual void flattenIceGeometry(
const Vector<RefCountedPtr<LevelSigmaCS> > & a_amrGeometry);
184 const int* a_dimInfo,
185 const int* a_boxlo,
const int* a_boxhi,
186 const Real* a_dew,
const Real* a_dns,
187 const IntVect& a_offset,
188 const Vector<LevelData<FArrayBox>* >& a_amrData,
189 const Vector<int>& a_vectRefRatio,
190 const Vector<Real>& a_amrDx,
194 const IntVect& a_nGhost,
200 const int* a_dimInfo,
201 const int* a_boxlo,
const int* a_boxhi,
202 const Real* a_dew,
const Real* a_dns,
203 const IntVect& a_offset,
204 const Vector<LevelData<FArrayBox>* >& a_amrVel,
205 const Vector<int>& a_vectRefRatio,
206 const Vector<Real>& a_amrDx,
207 const IntVect& a_nGhost,
214 virtual void primBC(FArrayBox& a_WGdnv,
215 const FArrayBox& a_Wextrap,
216 const FArrayBox& a_W,
218 const Side::LoHiSide& a_side,
229 const FArrayBox& a_W,
238 const FArrayBox& a_U,
239 const FArrayBox& a_divVel,
253 const ProblemDomain& a_domain,
254 const RealVect& a_dx,
255 Real a_time, Real a_dt);
259 const ProblemDomain& a_domain,
260 const RealVect& a_dx,
261 Real a_time, Real a_dt);
266 static void setGrids(DisjointBoxLayout& a_grids,
267 const Box& a_gridBox,
268 const ProblemDomain& a_domain,
367 MayDay::Error(
"invalid operator");
373 MayDay::Error(
"invalid operator");
377 #include "NamespaceFooter.H" bool m_isBCsetUp
Definition: FortranInterfaceIBC.H:296
virtual ~FortranInterfaceIBC()
Destructor.
Definition: FortranInterfaceIBC.cpp:252
FArrayBox m_ccInputTopography
cell-centered input topography
Definition: FortranInterfaceIBC.H:338
Physical/domain initial and boundary conditions.
Definition: FortranInterfaceIBC.H:40
Definition: FortranInterfaceIBC.H:33
bool m_nodalTopography
Definition: FortranInterfaceIBC.H:331
virtual bool regridIceGeometry(LevelSigmaCS &a_coords, const RealVect &a_dx, const RealVect &a_domainSize, const Real &a_time, const LevelSigmaCS *a_crseCoords, const int a_refRatio)
update the topgraphy in LevelSigmaCS but not the thickness
Definition: FortranInterfaceIBC.cpp:1230
virtual void setThickness(Real *a_data_ptr, const int *a_dimInfo, const int *boxlo, const int *boxhi, const Real *a_dew, const Real *a_dns, const IntVect &a_offset, const IntVect &a_nGhost=IntVect::Zero, const bool a_nodal=false)
nGhost is the number of ghost cells in in the input data (which are ignored)
Definition: FortranInterfaceIBC.cpp:464
FArrayBox m_ccInputThickness
cell-centered input thickness
Definition: FortranInterfaceIBC.H:318
FArrayBox m_inputThickness
alias to data array passed in from glimmer-CISM
Definition: FortranInterfaceIBC.H:310
RefCountedPtr< LevelData< FArrayBox > > m_inputTopographyLDF
distributed version of topography
Definition: FortranInterfaceIBC.H:343
void flattenVelocity(Real *a_uVelPtr, Real *a_vVelPtr, const int *a_dimInfo, const int *a_boxlo, const int *a_boxhi, const Real *a_dew, const Real *a_dns, const IntVect &a_offset, const Vector< LevelData< FArrayBox > * > &a_amrVel, const Vector< int > &a_vectRefRatio, const Vector< Real > &a_amrDx, const IntVect &a_nGhost, const bool a_nodal)
flatten velocity field to the 3D velocity data holder
Definition: FortranInterfaceIBC.cpp:1605
virtual void checkOK() const
Definition: FortranInterfaceIBC.cpp:1865
RefCountedPtr< LevelData< FArrayBox > > m_inputSurfaceLDF
distributed version of topography
Definition: FortranInterfaceIBC.H:361
Definition: FortranInterfaceIBC.H:30
RealVect m_inputSurfaceDx
Definition: FortranInterfaceIBC.H:358
bool m_nodalThickness
true if m_inputThickness is nodal
Definition: FortranInterfaceIBC.H:312
IntVect m_topographyGhost
Definition: FortranInterfaceIBC.H:341
RealVect m_domainSize
Definition: FortranInterfaceIBC.H:291
FortranInterfaceIBC()
Constructor.
Definition: FortranInterfaceIBC.cpp:237
Definition: FortranInterfaceIBC.H:29
class to manage non-subcycled AMR ice-sheet model
Definition: AmrIce.H:40
Physical/domain initial and boundary conditions for ice-sheet problems.
Definition: IceThicknessIBC.H:84
virtual void setVelFAB(Real *a_uVelPtr, Real *a_vVelPtr, const int *a_dimInfo, const int *boxlo, const int *boxhi, const Real *a_dew, const Real *a_dns, const IntVect &a_offset, const IntVect &a_nGhost, FArrayBox &a_uFab, FArrayBox &a_vFab, FArrayBox &a_uccFab, FArrayBox &a_vccFab, const bool a_nodal=false, const bool a_fillData=false)
sets reference fabs for (horizontal) velocity
Definition: FortranInterfaceIBC.cpp:341
virtual IceThicknessIBC * new_thicknessIBC()
Factory method - this object is its own factory.
Definition: FortranInterfaceIBC.cpp:717
void setVerbose(bool a_verbose)
Definition: FortranInterfaceIBC.H:248
const RefCountedPtr< LevelData< FArrayBox > > & inputThicknessPtr() const
Definition: FortranInterfaceIBC.H:283
virtual RefCountedPtr< CompGridVTOBC > velocitySolveBC()
return boundary condition for Ice velocity solve
Definition: FortranInterfaceIBC.cpp:865
virtual void setThicknessClearRegions(const Vector< Box > &a_clearRegions)
regions where we artificially set thickness to zero
Definition: FortranInterfaceIBC.cpp:705
FArrayBox m_inputTopography
alias to data array passed in from glimmer-CISM
Definition: FortranInterfaceIBC.H:329
Definition: FortranInterfaceIBC.H:31
static void setFAB(Real *a_data_ptr, const int *a_dimInfo, const int *boxlo, const int *boxhi, const Real *a_dew, const Real *a_dns, const IntVect &a_offset, const IntVect &a_nGhost, FArrayBox &a_fab, FArrayBox &a_ccFab, const bool a_nodal, const bool a_verbose=false)
static function to set reference fabs
Definition: FortranInterfaceIBC.cpp:276
virtual void initialize(LevelData< FArrayBox > &a_U)
Set up initial conditions.
Definition: FortranInterfaceIBC.cpp:776
virtual void flattenIceGeometry(const Vector< RefCountedPtr< LevelSigmaCS > > &a_amrGeometry)
flatten thickness and basal topography back to input FArrayBoxes
Definition: FortranInterfaceIBC.cpp:1293
RefCountedPtr< CompGridVTOBC > m_velBCs
Definition: FortranInterfaceIBC.H:303
void setupBCs()
set up bc's based on parmparse inputs
Definition: FortranInterfaceIBC.cpp:1747
Vector< Box > m_thicknessClearRegions
regions where we will artificially set ice thickness to zero
Definition: FortranInterfaceIBC.H:326
FArrayBox m_inputSurface
alias to data array passed in from glimmer-CISM
Definition: FortranInterfaceIBC.H:347
virtual void setSurface(Real *a_data_ptr, const int *a_dimInfo, const int *boxlo, const int *boxhi, const Real *a_dew, const Real *a_dns, const IntVect &a_offset, const IntVect &a_nGhost=IntVect::Zero, const bool a_nodal=false)
sets storage for upper surface.
Definition: FortranInterfaceIBC.cpp:630
static void setGrids(DisjointBoxLayout &a_grids, const Box &a_gridBox, const ProblemDomain &a_domain, bool a_verbose)
set grids using Boxes passed in from CISM
Definition: FortranInterfaceIBC.cpp:937
virtual void artViscBC(FArrayBox &a_F, const FArrayBox &a_U, const FArrayBox &a_divVel, const int &a_dir, const Real &a_time)
Adjust boundary fluxes to account for artificial viscosity.
Definition: FortranInterfaceIBC.cpp:849
Definition: FortranInterfaceIBC.H:32
RealVect m_inputThicknessDx
Definition: FortranInterfaceIBC.H:320
Basic Sigma fourth-order coordinate system on an AMR level.
Definition: LevelSigmaCS.H:48
bool m_gridsSet
Definition: FortranInterfaceIBC.H:306
FArrayBox m_ccInputSurface
cell-centered input upper ice surface
Definition: FortranInterfaceIBC.H:356
virtual void flattenData(Real *a_data_ptr, const int *a_dimInfo, const int *a_boxlo, const int *a_boxhi, const Real *a_dew, const Real *a_dns, const IntVect &a_offset, const Vector< LevelData< FArrayBox > * > &a_amrData, const Vector< int > &a_vectRefRatio, const Vector< Real > &a_amrDx, int a_srcComp, int a_destComp, int a_nComp, const IntVect &a_nGhost, const bool a_nodal)
flatten an arbitrary dataset back to input FArrayBoxes
Definition: FortranInterfaceIBC.cpp:1500
Real m_boundaryThickness
Definition: FortranInterfaceIBC.H:289
RealVect m_inputTopographyDx
Definition: FortranInterfaceIBC.H:340
DisjointBoxLayout m_grids
Definition: FortranInterfaceIBC.H:305
FIBC_types
Definition: FortranInterfaceIBC.H:29
virtual void setGeometryBCs(LevelSigmaCS &a_coords, const ProblemDomain &a_domain, const RealVect &a_dx, Real a_time, Real a_dt)
set non-periodic geometry (thickness, topography) ghost cells
Definition: FortranInterfaceIBC.cpp:905
bool m_extrapBoundary
Definition: FortranInterfaceIBC.H:301
bool m_nodalSurface
Definition: FortranInterfaceIBC.H:349
virtual void fillTopographyHoles(Real holeVal)
utility function to fill in holes in topography
Definition: FortranInterfaceIBC.cpp:970
bool m_verbose
Definition: FortranInterfaceIBC.H:293
virtual void setBdrySlopes(FArrayBox &a_dW, const FArrayBox &a_W, const int &a_dir, const Real &a_time)
Set boundary slopes.
Definition: FortranInterfaceIBC.cpp:837
RefCountedPtr< LevelData< FArrayBox > > m_inputThicknessLDF
distributed version of thickness
Definition: FortranInterfaceIBC.H:323
IntVect m_surfaceGhost
Definition: FortranInterfaceIBC.H:359
virtual void define(const ProblemDomain &a_domain, const Real &a_dx)
Define the object.
Definition: FortranInterfaceIBC.cpp:267
virtual void primBC(FArrayBox &a_WGdnv, const FArrayBox &a_Wextrap, const FArrayBox &a_W, const int &a_dir, const Side::LoHiSide &a_side, const Real &a_time)
Set boundary fluxes.
Definition: FortranInterfaceIBC.cpp:789
virtual void initializeIceGeometry(LevelSigmaCS &a_coords, const RealVect &a_dx, const RealVect &a_domainSize, const Real &a_time, const LevelSigmaCS *a_crseCoords, const int a_refRatio)
set up initial ice state
Definition: FortranInterfaceIBC.cpp:1036
virtual void setSurfaceHeightBCs(LevelData< FArrayBox > &a_zSurface, LevelSigmaCS &a_coords, const ProblemDomain &a_domain, const RealVect &a_dx, Real a_time, Real a_dt)
set non-periodic ghost cells for surface height z_s.
Definition: FortranInterfaceIBC.cpp:879
IntVect m_thicknessGhost
Definition: FortranInterfaceIBC.H:321
bool gridsSet() const
has setGrids been called?
Definition: FortranInterfaceIBC.H:272
virtual void setTopography(Real *a_data_ptr, const int *a_dimInfo, const int *boxlo, const int *boxhi, const Real *a_dew, const Real *a_dns, const IntVect &a_offset, const IntVect &a_nGhost=IntVect::Zero, const bool a_nodal=false)
Definition: FortranInterfaceIBC.cpp:563