BISICLES AMR ice sheet model  0.9
SurfaceFlux.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 // Virtual base class encapsulating surface fluxes for ice-sheet model
12 
13 #ifndef _SURFACEFLUX_H_
14 #define _SURFACEFLUX_H_
15 
16 #include "LevelData.H"
17 #include "FArrayBox.H"
18 #include "LevelSigmaCS.H"
19 #include "NamespaceHeader.H"
20 
21 class AmrIceBase;
22 
24 
25 typedef SurfaceFlux SurfaceData;
26 
28 
40 {
41 
42 public:
43 
45  virtual ~SurfaceFlux() {};
46 
48  virtual SurfaceFlux* new_surfaceFlux() = 0;
49 
51 
61  virtual void surfaceThicknessFlux(LevelData<FArrayBox>& a_flux,
62  const AmrIceBase& a_amrIce,
63  int a_level, Real a_dt) = 0;
64 
66 
72  virtual void evaluate(LevelData<FArrayBox>& a_data,
73  const AmrIceBase& a_amrIce,
74  int a_level, Real a_dt)
75  {
76  surfaceThicknessFlux(a_data, a_amrIce, a_level,a_dt);
77  }
78 
79 
81 
101  static SurfaceFlux* parse(const char* a_prefix);
102 
103  // /// re-implement to set something up once
104  // virtual void init(const AmrIceBase& a_amrIce){};
105  // /// re-implement to set something up once per time step, rather
106  // /// than per-level per-timestep
107  // virtual void initTimeStep(const AmrIceBase& a_amrIce){};
108 
109 private:
110  // Disallowed for all the usual reasons
111  void operator=(const SurfaceFlux& a_input)
112  {
113  MayDay::Error("invalid operator");
114  }
115 
116  // // Disallowed for all the usual reasons
117  // SurfaceFlux(const SurfaceFlux& a_input)
118  // {
119  // MayDay::Error("invalid operator");
120  // }
121 };
122 
123 
125 
129 class zeroFlux : public SurfaceFlux
130 {
131 public:
132  zeroFlux() {};
133 
134  virtual ~zeroFlux() {};
135 
136  virtual SurfaceFlux* new_surfaceFlux();
137 
138  virtual void surfaceThicknessFlux(LevelData<FArrayBox>& a_flux,
139  const AmrIceBase& a_amrIce,
140  int a_level, Real a_dt);
141 
142 private:
143  // Disallowed for all the usual reasons
144  void operator=(const zeroFlux& a_input)
145  {
146  MayDay::Error("invalid operator");
147  }
148 
149  // Disallowed for all the usual reasons
150  zeroFlux(const zeroFlux& a_input)
151  {
152  MayDay::Error("invalid operator");
153  }
154 };
155 
156 
158 
160 
168 class constantFlux : public SurfaceFlux
169 {
170 public:
171  constantFlux();
172 
174  constantFlux(const Real& a_fluxVal):
175  m_fluxVal(a_fluxVal), m_isValSet(true){;};
176 
177  virtual ~constantFlux() {}
178 
179  virtual SurfaceFlux* new_surfaceFlux();
180 
181  virtual void surfaceThicknessFlux(LevelData<FArrayBox>& a_flux,
182  const AmrIceBase& a_amrIce,
183  int a_level, Real a_dt);
184 
186  void setFluxVal(const Real& a_fluxVal);
187 
188 protected:
189  Real m_fluxVal;
190 
192 
193 private:
194  // Disallowed for all the usual reasons
195  void operator=(const constantFlux& a_input)
196  {
197  MayDay::Error("invalid operator");
198  }
199 
200  // Disallowed for all the usual reasons
201  constantFlux(const constantFlux& a_input)
202  {
203  MayDay::Error("invalid operator");
204  }
205 };
206 
208 
209 
210 #include "NamespaceFooter.H"
211 
212 
213 #endif // multiple-include preventer
virtual ~SurfaceFlux()
virtual destructor
Definition: SurfaceFlux.H:45
zeroFlux()
Definition: SurfaceFlux.H:132
simple implementation of SurfaceFlux which sets surface flux to a constant in space and time ...
Definition: SurfaceFlux.H:168
virtual ~zeroFlux()
Definition: SurfaceFlux.H:134
abstract class defining the surface flux interface
Definition: SurfaceFlux.H:39
virtual void evaluate(LevelData< FArrayBox > &a_data, const AmrIceBase &a_amrIce, int a_level, Real a_dt)
Sub-classes of this class turned out to be useful for various data apart from thickness fluxes...
Definition: SurfaceFlux.H:72
SurfaceFlux SurfaceData
Definition: SurfaceFlux.H:23
simple implementation of SurfaceFlux which sets surface flux to zero
Definition: SurfaceFlux.H:129
static SurfaceFlux * parse(const char *a_prefix)
assemble a SurfaceFlux* object from ParmParse inputs
Definition: SurfaceFlux.cpp:106
virtual ~constantFlux()
Definition: SurfaceFlux.H:177
zeroFlux ZeroData
Definition: SurfaceFlux.H:157
virtual void surfaceThicknessFlux(LevelData< FArrayBox > &a_flux, const AmrIceBase &a_amrIce, int a_level, Real a_dt)=0
define source term for thickness evolution and place it in flux
virtual SurfaceFlux * new_surfaceFlux()=0
factory method: return a pointer to a new SurfaceFlux object
bool m_isValSet
Definition: SurfaceFlux.H:191
Real m_fluxVal
Definition: SurfaceFlux.H:189
constantFlux(const Real &a_fluxVal)
Construct a constantFlux with a given constant value.
Definition: SurfaceFlux.H:174
abstract base class for amr ice sheet models (AmrIce, AMRIceControl)
Definition: AmrIceBase.H:21
constantFlux ConstantData
Definition: SurfaceFlux.H:207