BISICLES AMR ice sheet model  0.9
HumpIBC.H
Go to the documentation of this file.
1 #ifdef CH_LANG_CC
2 /*
3 * _______ __
4 * / ___/ / ___ __ _ / / ___
5 * / /__/ _ \/ _ \/ V \/ _ \/ _ \
6 * \___/_//_/\___/_/_/_/_.__/\___/
7 * Please refer to Copyright.txt, in Chombo's root directory.
8 */
9 #endif
10 
11 //
12 // HumpIBC.H
13 // ============
14 //
15 // PhysIBC-derived class for "hump" test case
16 // (a ellipsoidal hump of ice on a flat plain)
17 
18 
19 #ifndef _HUMPIBC_H_
20 #define _HUMPIBC_H_
21 
22 #include "IceThicknessIBC.H"
23 
24 #include "NamespaceHeader.H"
25 
26 
28 
31 class HumpIBC : public IceThicknessIBC
32 {
33 public:
35 
37  HumpIBC();
38 
40 
42  virtual ~HumpIBC();
43 
45 
49  virtual void define(const ProblemDomain& a_domain,
50  const Real& a_dx);
51 
53  void setParameters(Real a_maxThickness,
54  Real a_radSqr,
55  Real a_baseElevation,
56  Real a_minThickness,
57  RealVect a_center,
58  const Real& a_seaLevel,
59  const RealVect& a_widthScale = RealVect::Unit);
60 
62 
68 
70 
72  virtual void initialize(LevelData<FArrayBox>& a_U);
73 
75 
77  virtual void initializeIceGeometry(LevelSigmaCS& a_coords,
78  const RealVect& a_dx,
79  const RealVect& a_domainSize,
80  const Real& a_time,
81  const LevelSigmaCS* a_crseCoords,
82  const int a_refRatio);
83 
84 
86 
88  virtual void primBC(FArrayBox& a_WGdnv,
89  const FArrayBox& a_Wextrap,
90  const FArrayBox& a_W,
91  const int& a_dir,
92  const Side::LoHiSide& a_side,
93  const Real& a_time);
94 
96 
101  virtual
102  void setBdrySlopes(FArrayBox& a_dW,
103  const FArrayBox& a_W,
104  const int& a_dir,
105  const Real& a_time);
106 
108 
110  virtual
111  void artViscBC(FArrayBox& a_F,
112  const FArrayBox& a_U,
113  const FArrayBox& a_divVel,
114  const int& a_dir,
115  const Real& a_time);
116 
118 
120  virtual RefCountedPtr<CompGridVTOBC> velocitySolveBC();
121 
123 
129  virtual void modifyVelocityRHS(LevelData<FArrayBox>& a_rhs,
130  LevelSigmaCS& a_coords,
131  const ProblemDomain& a_domain,
132  Real a_time, Real a_dt);
133 
134 
136 
138  virtual void setSurfaceHeightBCs(LevelData<FArrayBox>& a_zSurface,
139  LevelSigmaCS& a_coords,
140  const ProblemDomain& a_domain,
141  const RealVect& a_dx,
142  Real a_time, Real a_dt);
143 
144 protected:
145 
148 
151 
152  // it's easier to work in terms of radius squared...
153  Real m_radSqr;
154 
155  RealVect m_center;
156 
157  // width factor (0 means no variation in that direction)
160  RealVect m_widthScale;
161 
162  RealVect m_domainSize;
163 
164  // thickness of ice outside of hump (normally zero)
166 
168 
169  // have bc's been set up?
171 
172  // have parameters been set
174 
176  void setupBCs();
177 
178  RefCountedPtr<CompGridVTOBC> m_velBCs;
179 
180  // do higher-order averaged initial condition (for convergence testing)
182 
183 private:
184  // Disallowed for all the usual reasons
185  void operator=(const HumpIBC& a_input)
186  {
187  MayDay::Error("invalid operator");
188  }
189 
190  // Disallowed for all the usual reasons
191  HumpIBC(const HumpIBC& a_input)
192  {
193  MayDay::Error("invalid operator");
194  }
195 };
196 
197 #include "NamespaceFooter.H"
198 #endif
RealVect m_widthScale
Definition: HumpIBC.H:160
Real m_radSqr
Definition: HumpIBC.H:153
virtual IceThicknessIBC * new_thicknessIBC()
Factory method - this object is its own factory.
Definition: HumpIBC.cpp:181
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: HumpIBC.cpp:329
void setParameters(Real a_maxThickness, Real a_radSqr, Real a_baseElevation, Real a_minThickness, RealVect a_center, const Real &a_seaLevel, const RealVect &a_widthScale=RealVect::Unit)
sets parameters for the hump problem
Definition: HumpIBC.cpp:154
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: HumpIBC.cpp:147
HumpIBC()
Constructor.
Definition: HumpIBC.cpp:128
bool m_paramsSet
Definition: HumpIBC.H:173
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: HumpIBC.cpp:216
Real m_baseElevation
Definition: HumpIBC.H:147
Real m_seaLevel
Definition: HumpIBC.H:167
bool m_doHOinit
Definition: HumpIBC.H:181
Real m_minThickness
Definition: HumpIBC.H:165
bool m_isBCsetUp
Definition: HumpIBC.H:170
virtual RefCountedPtr< CompGridVTOBC > velocitySolveBC()
return boundary condition for Ice velocity solve
Definition: HumpIBC.cpp:313
virtual ~HumpIBC()
Destructor.
Definition: HumpIBC.cpp:136
Real m_maxThickness
max ice sheet thickness
Definition: HumpIBC.H:150
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: HumpIBC.cpp:394
virtual void initialize(LevelData< FArrayBox > &a_U)
Set up initial conditions.
Definition: HumpIBC.cpp:206
Basic Sigma fourth-order coordinate system on an AMR level.
Definition: LevelSigmaCS.H:48
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: HumpIBC.cpp:342
RealVect m_center
Definition: HumpIBC.H:155
virtual void setBdrySlopes(FArrayBox &a_dW, const FArrayBox &a_W, const int &a_dir, const Real &a_time)
Set boundary slopes.
Definition: HumpIBC.cpp:285
RefCountedPtr< CompGridVTOBC > m_velBCs
Definition: HumpIBC.H:178
Physical/domain initial and boundary conditions.
Definition: HumpIBC.H:31
RealVect m_domainSize
Definition: HumpIBC.H:162
void setupBCs()
set up bc&#39;s based on parmparse inputs
Definition: HumpIBC.cpp:528
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: HumpIBC.cpp:297