19 #ifndef _ICETHICKNESSIBC_H_ 20 #define _ICETHICKNESSIBC_H_ 24 #include "PetscCompGridVTO.H" 27 #include "NamespaceHeader.H" 50 const ProblemDomain& a_domain,
55 m_funcptr(a_state, a_valid, a_domain, a_dx, a_homogeneous);
103 virtual void define(
const ProblemDomain& a_domain,
105 {PhysIBC::define(a_domain, a_dx);}
113 {
return static_cast<PhysIBC*
>(new_thicknessIBC());}
122 virtual void initialize(LevelData<FArrayBox>& a_U) = 0;
125 virtual void initializeIceGeometry(
LevelSigmaCS& a_coords,
126 const RealVect& a_dx,
127 const RealVect& a_domainSize,
130 const int a_refRatio) = 0;
139 const RealVect& a_dx,
140 const RealVect& a_domainSize,
143 const int a_refRatio)
150 virtual void primBC(FArrayBox& a_WGdnv,
151 const FArrayBox& a_Wextrap,
152 const FArrayBox& a_W,
154 const Side::LoHiSide& a_side,
155 const Real& a_time) = 0;
164 void setBdrySlopes(FArrayBox& a_dW,
165 const FArrayBox& a_W,
167 const Real& a_time) = 0;
173 void artViscBC(FArrayBox& a_F,
174 const FArrayBox& a_U,
175 const FArrayBox& a_divVel,
177 const Real& a_time) = 0;
182 virtual RefCountedPtr<CompGridVTOBC> velocitySolveBC() = 0;
201 const ProblemDomain& a_domain,
204 RefCountedPtr<CompGridVTOBC> velBC = velocitySolveBC();
205 const RealVect& dx = a_coords.
dx();
206 for (DataIterator dit=a_velocity.dataIterator(); dit.ok(); ++dit)
207 (*velBC)(a_velocity[dit],a_velocity.getBoxes()[dit],
208 a_domain, dx[0], dit(),
false);
218 const ProblemDomain& a_domain,
219 Real a_time, Real a_dt) {;}
226 const ProblemDomain& a_domain)
const 237 const ProblemDomain& a_domain,
238 const RealVect& a_dx,
239 Real a_time, Real a_dt) {;}
247 const ProblemDomain& a_domain,
248 const RealVect& a_dx,
249 Real a_time, Real a_dt) {;}
256 const ProblemDomain& a_domain,
257 const RealVect& a_dx,
258 Real a_time, Real a_dt){;}
263 Vector<ProblemDomain>& a_vectDomain) {;}
279 MayDay::Error(
"invalid operator");
285 MayDay::Error(
"invalid operator");
300 Vector<ProblemDomain>& a_vectDomain) {;}
305 virtual void define(Vector<RefCountedPtr<LevelSigmaCS> >& a_vectCS,
306 Vector<ProblemDomain>& a_vectDomain) =0;
311 const ProblemDomain& a_domain,
313 bool a_homogeneous) =0;
325 #include "NamespaceFooter.H" IceBCFuncWrapper()
Definition: IceThicknessIBC.H:34
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)
set up topography, etc at regrid time
Definition: IceThicknessIBC.H:138
virtual PhysIBC * new_physIBC()
Factory method - this object is its own factory.
Definition: IceThicknessIBC.H:112
virtual void checkOK() const
Definition: IceThicknessIBC.H:269
IceBCFuncWrapper(BCFunc funcptr)
Definition: IceThicknessIBC.H:38
virtual void setGeometryBCs(LevelSigmaCS &a_coords, const ProblemDomain &a_domain, const RealVect &a_dx, Real a_time, Real a_dt)
set non-periodic ghost cells for geometry
Definition: IceThicknessIBC.H:246
this BCFunction simply wraps a BCFunc
Definition: IceThicknessIBC.H:31
virtual void setGridHierarchy(Vector< RefCountedPtr< LevelSigmaCS > > &a_vectCS, Vector< ProblemDomain > &a_vectDomain)
set AMR grid hierarchy (for the BC's which need this)
Definition: IceThicknessIBC.H:262
BCFunction-derived class to handle velocity-solve BC's.
Definition: IceThicknessIBC.H:294
IceVelBCFunction(Vector< RefCountedPtr< LevelSigmaCS > > &a_vectCS, Vector< ProblemDomain > &a_vectDomain)
Definition: IceThicknessIBC.H:299
Physical/domain initial and boundary conditions for ice-sheet problems.
Definition: IceThicknessIBC.H:84
virtual void define(const ProblemDomain &a_domain, const Real &a_dx)
Define the object.
Definition: IceThicknessIBC.H:103
virtual void modifyVelocityRHS(LevelData< FArrayBox > &a_rhs, LevelSigmaCS &a_coords, const ProblemDomain &a_domain, Real a_time, Real a_dt)
if appropriate, modify velocity solve RHS in a problem-dependent way.
Definition: IceThicknessIBC.H:216
~IceVelBCFunction()
Definition: IceThicknessIBC.H:303
virtual void setIceFractionBCs(LevelData< FArrayBox > &a_iceFrac, const ProblemDomain &a_domain, const RealVect &a_dx, Real a_time, Real a_dt)
set non-periodic ghost cells for ice fraction
Definition: IceThicknessIBC.H:255
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: IceThicknessIBC.H:235
virtual ~IceThicknessIBC()
Destructor.
Definition: IceThicknessIBC.H:95
virtual IceBCFuncWrapper & operator=(const IceBCFuncWrapper &src)
Definition: IceThicknessIBC.H:63
IceVelBCFunction()
Definition: IceThicknessIBC.H:297
IceThicknessIBC()
Constructor.
Definition: IceThicknessIBC.H:90
virtual void velocityGhostBC(LevelData< FArrayBox > &a_velocity, const LevelSigmaCS &a_coords, const ProblemDomain &a_domain, Real a_time)
fill ghost cells on velocity
Definition: IceThicknessIBC.H:199
virtual void modifyFaceVelocity(LevelData< FluxBox > &a_faceVel, const LevelSigmaCS &a_coords, const ProblemDomain &a_domain) const
if appropriate, modify face velocities in a problem-dependent way.
Definition: IceThicknessIBC.H:224
Basic Sigma fourth-order coordinate system on an AMR level.
Definition: LevelSigmaCS.H:48
Vector< ProblemDomain > m_vectDomain
Definition: IceThicknessIBC.H:319
virtual ~IceBCFuncWrapper()
Definition: IceThicknessIBC.H:43
IceBCFuncWrapper(const IceBCFuncWrapper &src)
Definition: IceThicknessIBC.H:59
Vector< RefCountedPtr< LevelSigmaCS > > m_vectCS
Definition: IceThicknessIBC.H:317
RealVect dx() const
Definition: LevelSigmaCS.H:97
BCFunc m_funcptr
Definition: IceThicknessIBC.H:70
virtual void operator()(FArrayBox &a_state, const Box &a_valid, const ProblemDomain &a_domain, Real a_dx, bool a_homogeneous)
simply calls through to bcFunc
Definition: IceThicknessIBC.H:48