BISICLES AMR ice sheet model  0.9
MuCoefficient.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 coefficient of effective viscosity
12 // for ice-sheet model. NB : this is an additional coefficient a, so
13 // that the viscous tensor is (a * mu * rate-of-strain)
14 
15 #ifndef _MUCOEFFICIENT_H_
16 #define _MUCOEFFICIENT_H_
17 
18 #include "LevelData.H"
19 #include "FArrayBox.H"
20 #include "LevelSigmaCS.H"
21 
22 #include "NamespaceHeader.H"
23 
24 
26 {
27 public:
28 
30  static MuCoefficient* parseMuCoefficient(const char* a_prefix);
31 
34 
36  virtual ~MuCoefficient() {};
37 
39 
41  virtual MuCoefficient* new_muCoefficient() const = 0;
43  virtual void setMuCoefficient(LevelData<FArrayBox>& a_muCoef,
44  LevelSigmaCS& a_coordSys,
45  Real a_time,
46  Real a_dt) = 0;
47 
48 
49 private:
50  // Disallowed for all the usual reasons
51  void operator=(const MuCoefficient& a_input)
52  {
53  MayDay::Error("invalid operator");
54  }
55 
56  // Disallowed for all the usual reasons
57  MuCoefficient(const MuCoefficient& a_input)
58  {
59  MayDay::Error("invalid operator");
60  }
61 };
62 
63 
64 // simple version which sets mu coefficient to one
66 {
67 public:
70 
72  virtual ~UnitMuCoefficient() {};
73 
75 
77  virtual MuCoefficient* new_muCoefficient() const;
78 
80 
82  virtual void setMuCoefficient(LevelData<FArrayBox>& a_cellMuCoef,
83  LevelSigmaCS& a_coordSys,
84  Real a_time,
85  Real a_dt);
86 
87 
88 private:
89  // Disallowed for all the usual reasons
90  void operator=(const UnitMuCoefficient& a_input)
91  {
92  MayDay::Error("invalid operator");
93  }
94 
95  // Disallowed for all the usual reasons
96  UnitMuCoefficient(const UnitMuCoefficient& a_input)
97  {
98  MayDay::Error("invalid operator");
99  }
100 };
101 
102 
103 //class which contains two muCoefficients (x and y)
104 //and two scalars (a and b) and provides the
105 //coefficient a x + b y
107 {
108 
109  MuCoefficient* m_x;
110  MuCoefficient* m_y;
111  Real m_a,m_b;
112 
113 public:
115  AxbyMuCoefficient(const Real& a_a, MuCoefficient* a_x,
116  const Real& a_b, MuCoefficient* a_y);
117 
119  virtual ~AxbyMuCoefficient();
120 
122 
124  virtual MuCoefficient* new_muCoefficient() const;
125 
127 
129  virtual void setMuCoefficient(LevelData<FArrayBox>& a_cellMuCoef,
130  LevelSigmaCS& a_coordSys,
131  Real a_time,
132  Real a_dt);
133 
134 
135 private:
136  // Disallowed for all the usual reasons
137  void operator=(const AxbyMuCoefficient& a_input)
138  {
139  MayDay::Error("invalid operator");
140  }
141 
142  // Disallowed for all the usual reasons
143  AxbyMuCoefficient(const AxbyMuCoefficient& a_input)
144  {
145  MayDay::Error("invalid operator");
146  }
147 };
148 
150 
170 {
171 
172 public:
173  //constructor
175  (RefCountedPtr<LevelData<FArrayBox> > a_muCoef,
176  const RealVect& a_dx)
177  :m_timeFileMap(NULL),m_startTime(-1.2345678e+300),m_endTime(1.2345678e+300),
178  m_muCoef(a_muCoef),m_endMuCoef(a_muCoef),m_dx(a_dx),m_verbose(true),m_name("")
179  {
180  }
181 
183 
188  LevelDataMuCoefficient(RefCountedPtr<std::map<Real, std::string> >& a_timeFileMap,
189  const std::string& a_name)
190  :m_timeFileMap(a_timeFileMap),m_startTime(1.2345678e+299),m_endTime(-1.2345678e+299),
191  m_muCoef(new LevelData<FArrayBox>()),m_endMuCoef(new LevelData<FArrayBox>())
192  ,m_verbose(true),m_name(a_name)
193  {
194 
195  }
196 
198 
200  virtual MuCoefficient* new_muCoefficient() const;
201 
202  virtual void setMuCoefficient
203  (LevelData<FArrayBox>& a_muCoef,
204  LevelSigmaCS& a_coordSys,
205  Real a_time,
206  Real a_dt) ;
207 
208 protected:
209  RefCountedPtr<std::map<Real,std::string> > m_timeFileMap;
210  Real m_startTime, m_endTime;
211  RefCountedPtr< LevelData<FArrayBox> > m_muCoef; // P at t = m_startTime
212  RefCountedPtr< LevelData<FArrayBox> > m_endMuCoef; // P at t = m_endTime
213  RealVect m_dx;
214  bool m_verbose;
215  std::string m_name;
216 
217 private:
218  void operator=(const LevelDataMuCoefficient& a_input)
219  {
220  MayDay::Error("invalid operator");
221  }
222 
224  {
225  MayDay::Error("invalid operator");
226  }
227 
228 };
229 
231 {
232 
233 public:
234  //constructor
236  (const Vector< RefCountedPtr<LevelData<FArrayBox> > >& a_muCoef,
237  const RealVect& a_dxCrse, const Vector<int> & a_ratio)
238  :m_muCoef(a_muCoef),m_dxCrse(a_dxCrse),m_ratio(a_ratio),m_verbose(true)
239  {
240  }
242 
244  virtual MuCoefficient* new_muCoefficient() const;
245 
246  virtual void setMuCoefficient
247  (LevelData<FArrayBox>& a_muCoef,
248  RealVect a_dx,
249  Real a_time,
250  Real a_dt) ;
251 
252  virtual void setMuCoefficient
253  (LevelData<FArrayBox>& a_muCoef,
254  LevelSigmaCS& a_coordSys,
255  Real a_time,
256  Real a_dt) ;
257 
258 protected:
259  Vector< RefCountedPtr< LevelData<FArrayBox> > > m_muCoef;
260  RealVect m_dxCrse;
261  Vector<int> m_ratio;
262  bool m_verbose;
263 
264 private:
265  void operator=(const MultiLevelDataMuCoefficient& a_input)
266  {
267  MayDay::Error("invalid operator");
268  }
269 
271  {
272  MayDay::Error("invalid operator");
273  }
274 
275 };
276 
277 
278 
279 #include "NamespaceFooter.H"
280 
281 
282 #endif // multiple-include preventer
RefCountedPtr< std::map< Real, std::string > > m_timeFileMap
Definition: MuCoefficient.H:209
Definition: MuCoefficient.H:230
Definition: MuCoefficient.H:25
Vector< RefCountedPtr< LevelData< FArrayBox > > > m_muCoef
Definition: MuCoefficient.H:259
RealVect m_dx
Definition: MuCoefficient.H:213
RefCountedPtr< LevelData< FArrayBox > > m_endMuCoef
Definition: MuCoefficient.H:212
bool m_verbose
Definition: MuCoefficient.H:262
Vector< int > m_ratio
Definition: MuCoefficient.H:261
std::string m_name
Definition: MuCoefficient.H:215
Real m_startTime
Definition: MuCoefficient.H:210
static MuCoefficient * parseMuCoefficient(const char *a_prefix)
assemble a MuCoefficient object from ParmParse input, return pointer
Definition: MuCoefficient.cpp:21
Basic Sigma fourth-order coordinate system on an AMR level.
Definition: LevelSigmaCS.H:48
virtual ~MuCoefficient()
destructor
Definition: MuCoefficient.H:36
virtual void setMuCoefficient(LevelData< FArrayBox > &a_muCoef, LevelSigmaCS &a_coordSys, Real a_time, Real a_dt)=0
define cell and face-centered coefficient
MuCoefficient()
constructor
Definition: MuCoefficient.H:33
virtual MuCoefficient * new_muCoefficient() const =0
factory method
virtual ~UnitMuCoefficient()
destructor
Definition: MuCoefficient.H:72
Definition: MuCoefficient.H:106
RealVect m_dxCrse
Definition: MuCoefficient.H:260
MuCoeffcient that computes from data on a uniform grid.
Definition: MuCoefficient.H:169
LevelDataMuCoefficient(RefCountedPtr< std::map< Real, std::string > > &a_timeFileMap, const std::string &a_name)
construct from a sequence of files
Definition: MuCoefficient.H:188
RefCountedPtr< LevelData< FArrayBox > > m_muCoef
Definition: MuCoefficient.H:211
UnitMuCoefficient()
constructor
Definition: MuCoefficient.H:69
bool m_verbose
Definition: MuCoefficient.H:214
Definition: MuCoefficient.H:65