Plugins
biot_tools.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019-2020: G-CSC, Goethe University Frankfurt
3  * Author: Arne Naegel
4  *
5  * This file is part of UG4.
6  *
7  * UG4 is free software: you can redistribute it and/or modify it under the
8  * terms of the GNU Lesser General Public License version 3 (as published by the
9  * Free Software Foundation) with the following additional attribution
10  * requirements (according to LGPL/GPL v3 §7):
11  *
12  * (1) The following notice must be displayed in the Appropriate Legal Notices
13  * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14  *
15  * (2) The following notice must be displayed at a prominent place in the
16  * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17  *
18  * (3) The following bibliography is recommended for citation and must be
19  * preserved in all covered files:
20  * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21  * parallel geometric multigrid solver on hierarchically distributed grids.
22  * Computing and visualization in science 16, 4 (2013), 151-164"
23  * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24  * flexible software system for simulating pde based models on high performance
25  * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30  * GNU Lesser General Public License for more details.
31  */
32 
33 #ifndef __BIOT_TOOLS_H__
34 #define __BIOT_TOOLS_H__
35 
36 
37 // std libs.
38 #include <string.h>
39 #include <vector>
40 
41 // Boost
42 #include <boost/math/special_functions/bessel.hpp>
43 
44 // UG4 dependencies.
48 
49 
50 // Plugin dependencies.
51 #include "../ConvectionDiffusion/fe/convection_diffusion_fe.h"
52 #include "../ConvectionDiffusion/fe/convection_diffusion_stab_fe.h"
53 #include "../ConvectionDiffusion/fv1/convection_diffusion_fv1.h"
54 #include "../SmallStrainMechanics/small_strain_mech.h"
55 #include "../SmallStrainMechanics/material_laws/hooke.h"
56 
57 #define WITH_JSON
58 #ifdef WITH_JSON
59 #include <nlohmann/json.hpp>
60 #endif
61 
62 namespace ug {
63 namespace Poroelasticity {
64 
66 double BesselJ0(double x);
67 double BesselJ1(double x);
68 
69 
70 
71 
73 {
74  BiotDiscConfig(const char* uCmp, const char *pCmp)
75  : m_uCmp(uCmp), m_pCmp(pCmp), m_uOrder(2), m_pOrder(1), m_dStab(0.0), m_bSteadyStateMechanics(true)
76  {}
77 
78  BiotDiscConfig(const char* uCmp, int uorder, const char *pCmp, int porder)
79  : m_uCmp(uCmp), m_pCmp(pCmp), m_uOrder(uorder), m_pOrder(porder), m_dStab(0.0), m_bSteadyStateMechanics(true) {}
80 
81  BiotDiscConfig(const char* uCmp, int uorder, const char *pCmp, int porder, double dStab)
82  : m_uCmp(uCmp), m_pCmp(pCmp), m_uOrder(uorder), m_pOrder(porder), m_dStab(dStab), m_bSteadyStateMechanics(true) {}
83 
84  BiotDiscConfig(const char* uCmp, int uorder, const char *pCmp, int porder, bool bSteadyStateMechanics)
85  : m_uCmp(uCmp), m_pCmp(pCmp), m_uOrder(uorder), m_pOrder(porder), m_dStab(0.0), m_bSteadyStateMechanics(bSteadyStateMechanics) {}
86 
87 
89  void set_stabilization(double dStab)
90  { m_dStab = dStab; }
91 
92  int get_porder() const {return m_pOrder;}
93  int get_uorder() const {return m_uOrder;}
94 
95  std::string m_uCmp, m_pCmp;
97  double m_dStab;
98 
100 };
101 
103 /*
104  *
105  *
106  {
107 
108  {"alpha":1.0,"beta":2.799999999999999e-06,"kappa":0.01,"lambda":142857.1428571429,"mu":35714.28571428572,"phi":0.0,"subsets":"INNER"}
109  } */
111 {
112 public:
113 
116 
118  BiotSubsetParameters(const char *s, number alpha, number kappa, number phi, number lambda, number mu, number beta)
119  : m_subsets(s), m_alpha(alpha), m_kappa(kappa), m_phi(phi), m_lambda(lambda), m_mu(mu), m_beta_uzawa(beta)
120  {}
121 
123  std::string get_subsets() const { return m_subsets; }
124  void set_subsets(std::string subset) { m_subsets = subset; }
125 
127  number get_alpha() const { return m_alpha; }
128  void set_alpha(number alpha) { m_alpha = alpha; }
129 
131  number get_phi() const { return m_phi; }
132  void set_phi(number phi) { m_phi = phi; }
133 
135  number get_kappa() const { return m_kappa; }
136  void set_kappa(number kappa) { m_kappa = kappa; }
137 
139  number get_lambda() const { return m_lambda; }
140  void set_lambda(number lambda) { m_lambda = lambda; }
141 
143  number get_mu() const { return m_mu; }
144  void set_mu(number mu) { m_mu = mu; }
145 
147  number get_beta() const { return m_beta_uzawa; }
148  void set_beta(number beta) { m_beta_uzawa = beta; }
149 
150 #ifdef WITH_JSON
151  friend void from_json(const nlohmann::json& j, BiotSubsetParameters& p);
152 #endif
153 
154 protected:
155  std::string m_subsets;
156 
159 
163 
165 };
166 
167 #ifdef WITH_JSON
168 void to_json(nlohmann::json &j, const BiotSubsetParameters &p);
169 void from_json(const nlohmann::json &j, BiotSubsetParameters &p);
170 #endif
171 
172 
173 
175 double DefaultCharTime(const BiotSubsetParameters& p, double length=1.0);
176 
177 // Container for data (TODO: Extend to real IElemDisc?)
178 template <typename TDomain>
180 {
181 public:
182  static const int dim = TDomain::dim;
187 
190 
192  : flowEqDisc(pDisc), displacementEqDisc(uDisc) {}
193 
194  // SmartPtr<TConvectionDiffusion> pressure_disc()
196  {return flowEqDisc; }
197 
198  // SmartPtr<TSmallStrainMechanics> displacement_disc()
200  {return displacementEqDisc; }
201 
203  {return compressionLinker; }
204 
206  {return divLinker; }
207 
208 protected:
209  // Container data.
212 
213 
216 
217 public:
219  const BiotDiscConfig &config)
220  {
221  CreateElemDiscs(param, config.m_uCmp.c_str(), config.m_uOrder,
222  config.m_pCmp.c_str(), config.m_pOrder,
223  config.m_bSteadyStateMechanics);
224  }
225  // This is the main function for constructing from a parameter set.
227  const char *ucmps, int uorder,
228  const char *pcmp, int porder,
229  bool bSteadyStateMechanics=true)
230  {
231 
232  // Create main objects.
233  flowEqDisc = make_sp(new TConvectionDiffusion(pcmp, param.get_subsets().c_str()));
234  displacementEqDisc = make_sp(new TSmallStrainMechanics(ucmps, param.get_subsets().c_str()));
235 
236  // Do not scale with tau?
237  displacementEqDisc->set_stationary(bSteadyStateMechanics);
238 
239  // A) Specify displacement eq (for u)
240  // (Note: This corresponds to plane strain in 2D)
242  matLaw->set_hooke_elasticity_tensor(param.get_lambda(), param.get_mu());
243 
244  displacementEqDisc->set_material_law(matLaw);
245  displacementEqDisc->set_mass_scale(0.0);
246 
247  // Add divergence.
249  divLinker->add(param.get_alpha(), flowEqDisc->value());
250  displacementEqDisc->set_div_factor(divLinker);
251 
252  // B) Specify flow eq (for p).
254  compressionLinker->add(param.get_alpha(), displacementEqDisc->divergence());
255 
256  flowEqDisc->set_mass(compressionLinker);
257  flowEqDisc->set_mass_scale(param.get_phi()); // Storativity 1.0/M = S ‰
258  flowEqDisc->set_diffusion((number) param.get_kappa());
259 
260  // TODO: Adjust quadrature order
261  if (dim==2) {
262 
263  if (porder==1) { flowEqDisc->set_quad_order(4); }
264  if (uorder==2) { displacementEqDisc->set_quad_order(4); }
265 
266  }
267  else if (dim == 3) {
268 
269  if (uorder == 1) {
270  // displacementEqDisc->set_quad_order(2);
271  } else if (uorder == 2) {
272  displacementEqDisc->set_quad_order(5);
273  flowEqDisc->set_quad_order(3);
274  }
275  }
276 
277  // Print info.
278  // UG_LOG(flowEqDisc->config_string());
279  UG_LOG(displacementEqDisc->config_string());
280 
281 
282  }
283 
284 
285 
286 };
287 
289 template <typename TDomain>
291 public:
292  static const int dim = TDomain::dim;
294 
295  BiotElemDiscFactory(const char *ucmps, int uorder, const char *pcmp, int porder,
296  bool bSteadyStateMechanics=true)
297  : m_config(ucmps, uorder, pcmp, porder, bSteadyStateMechanics){}
298 
300 
301  // Create new disc container.
303  {
304  SmartPtr<TBiotDisc> biot = make_sp(new TBiotDisc ());
305  biot->CreateElemDiscs(param, m_config);
306  return biot;
307  }
308 protected:
309  // BiotDiscConfig& config() {return m_config;}
310  const BiotDiscConfig& config() {return m_config;} const
312 
313 };
314 
315 /* JSON object representation
316 {
317  "discretization" = {
318  "ucmp" = "ux, uy, uz"
319  "uorder" = 2,
320 
321  "pcmp" = "p"
322  "porder" = 1,
323 
324  "stab" = 1.0
325  }
326 
327 
328  "gridname" = "mygrid"
329 
330 
331  "params" : [
332  { "subset" = "subset1", "alpha" = 1.0, "mu" = },
333  { "subset" = "subset2", "alpha" = 1.0 },
334  ]
335 }
336 */
337 
339 
340 template <typename TDomain, typename TAlgebra>
342 {
343 public:
344  static const int dim = TDomain::dim;
348 protected:
351 public:
352 
354  BiotProblem(const char* uCmp, const char *pCmp, const char *gridname)
355  : m_config(uCmp, pCmp), m_gridname(gridname) {}
356 
358  BiotProblem(const BiotDiscConfig& config, const char *gridname)
359  : m_config(config), m_gridname(gridname) {}
360 
362  virtual ~BiotProblem() {}
363 
364  // get grid name
365  const char* get_gridname() const { return m_gridname.c_str();}
366 
369  { m_params.push_back(p); }
370 
371 #ifdef WITH_JSON
373  void add_subset_parameters(const char* &json_string)
374  {
375  std::stringstream ss;
376  ss << json_string;
377 
378  nlohmann::json json;
379  ss >> json;
380 
381  BiotSubsetParameters _p = json; // implicit use of from_json!
382  m_params.push_back(_p);
383  }
384 #endif
385 
386 
387 
389  virtual double get_char_time()
390  {
391  std::vector<BiotSubsetParameters>::const_iterator it= m_params.begin();
392  double tchar = 0.0;
393 
394  for(it = m_params.begin(); it != m_params.end(); it++) {
395  tchar=std::max(tchar, DefaultCharTime(*it));
396  }
397 
398  return tchar;
399  }
400 
401  virtual double start_time()
402  { return 0.0; }
403 
404  virtual double end_time()
405  { return 2.0*get_char_time(); }
406 
407 
409  virtual void add_elem_discs(SmartPtr<TDomainDisc> dd, bool bSteadyStateMechanics=true)
410  {
411  // Using factory to create elem discs.
412  typedef BiotElemDiscFactory<TDomain> TBiotElemDiscFactory;
413  typedef BiotElemDisc<TDomain> TBiotElemDisc;
414 
415 
416  BiotDiscConfig conf = config();
417  conf.m_bSteadyStateMechanics = bSteadyStateMechanics;
418 
419  BiotElemDiscFactory<TDomain> elemDiscFactory(conf);
420 
421  // Iterate over parameter sets.
422  std::vector<BiotSubsetParameters>::iterator it;
423  for(it = m_params.begin(); it != m_params.end(); it++) {
424 
425  // Create elem discs and add
426  SmartPtr<TBiotElemDisc> biot = elemDiscFactory.create_elem_discs(*it);
427 
428  dd->add(biot->pressure_disc().template cast_dynamic<TElemDisc>());
429  dd->add(biot->displacement_disc().template cast_dynamic<TElemDisc>());
430 
431  }
432  }
433 
434 protected:
436  virtual void add_stab_discs(SmartPtr<TDomainDisc> dd, bool bSteadyStateMechanics=true)
437  {
438  UG_ASSERT(bSteadyStateMechanics == true, "ERROR: Only implemented for Mass matrix!");
439 
440  if (config().m_dStab <= 0.0) return;
441 
442  SmartPtr<TElemDisc> pDiscStab;
443  std::vector<BiotSubsetParameters>::iterator it;
444  for(it = m_params.begin(); it != m_params.end(); it++) {
445  double gamma = it->get_lambda() + 2.0*it->get_mu();
446  pDiscStab = make_sp(new TConvectionDiffusionStab(config().m_pCmp.c_str(), it->get_subsets().c_str(), config().m_dStab/gamma));
447  dd->add(pDiscStab.template cast_dynamic<TElemDisc>());
448  }
449  }
450 
451 public:
453  virtual void add_uzawa_discs(SmartPtr<TDomainDisc> dd, bool bSteadyStateMechanics=true)
454  {
455 
456  UG_ASSERT(bSteadyStateMechanics == true, "ERROR: Only implemented for Mass matrix!");
457 
459  std::vector<BiotSubsetParameters>::iterator it;
460  for(it = m_params.begin(); it != m_params.end(); it++) {
461  pDiscUzawa = make_sp(new TConvectionDiffusionFV1(config().m_pCmp.c_str(), it->get_subsets().c_str()));
462  pDiscUzawa->set_mass_scale(it->get_beta());
463  dd->add(pDiscUzawa.template cast_static<TElemDisc>());
464  }
465 
466  }
467 
469  virtual void add_boundary_conditions(SmartPtr<TDomainDisc> dd, bool bSteadyStateMechanics=true)
470  {}
471 
474  {}
475 
477  virtual bool post_processing(SmartPtr<TGridFunction> u, size_t step, double time) {return true; }
478 
479 
480 
481  const BiotDiscConfig& config() const { return m_config; }
482  int get_porder() const {return config().m_pOrder;}
483  int get_uorder() const {return config().m_uOrder;}
484 
485 protected:
487  std::vector<BiotSubsetParameters> m_params;
488  const std::string m_gridname;
489 };
490 
491 
492 #ifdef WITH_JSON
493 template <typename TDomain, typename TAlgebra>
494 void to_json(nlohmann::json &j, const BiotProblem<TDomain,TAlgebra> &p);
495 
496 template <typename TDomain, typename TAlgebra>
497 void from_json(const nlohmann::json &j, BiotProblem<TDomain,TAlgebra> &p);
498 #endif
499 
500 
501 } // namespace Poroelasticity
502 } // namespace ug
503 
504 #endif
parameterString p
Definition: Biogas.lua:1
Discretization for the Convection-Diffusion Equation.
Definition: convection_diffusion_fe.h:58
FV Discretization for the Convection-Diffusion Equation.
Definition: convection_diffusion_fv1.h:61
Discretization for the Convection-Diffusion Equation.
Definition: convection_diffusion_stab_fe.h:56
This class generates element discretizations.
Definition: biot_tools.h:290
const BiotDiscConfig m_config
Definition: biot_tools.h:311
BiotElemDiscFactory(const char *ucmps, int uorder, const char *pcmp, int porder, bool bSteadyStateMechanics=true)
Definition: biot_tools.h:295
BiotElemDiscFactory(const BiotDiscConfig &config)
Definition: biot_tools.h:299
static const int dim
Definition: biot_tools.h:292
BiotElemDisc< TDomain > TBiotDisc
Definition: biot_tools.h:293
SmartPtr< TBiotDisc > create_elem_discs(const BiotSubsetParameters &param) const
Definition: biot_tools.h:302
const BiotDiscConfig & config()
Definition: biot_tools.h:310
Definition: biot_tools.h:180
SmartPtr< TElemDisc > displacement_disc()
Definition: biot_tools.h:199
SmartPtr< TSmallStrainMechanics > displacementEqDisc
Definition: biot_tools.h:211
static const int dim
Definition: biot_tools.h:182
void CreateElemDiscs(const BiotSubsetParameters &param, const BiotDiscConfig &config)
Definition: biot_tools.h:218
SmartPtr< TScaleAddLinkerNumber > divLinker
Definition: biot_tools.h:214
SmartPtr< TElemDisc > pressure_disc()
Definition: biot_tools.h:195
SmartPtr< TScaleAddLinkerNumber > compressionLinker
Definition: biot_tools.h:215
ConstSmartPtr< TScaleAddLinkerNumber > divergence()
Definition: biot_tools.h:205
ConvectionDiffusionPlugin::ConvectionDiffusionFE< TDomain > TConvectionDiffusion
Definition: biot_tools.h:185
void CreateElemDiscs(const BiotSubsetParameters &param, const char *ucmps, int uorder, const char *pcmp, int porder, bool bSteadyStateMechanics=true)
Definition: biot_tools.h:226
ScaleAddLinker< number, dim, number > TScaleAddLinkerNumber
Definition: biot_tools.h:186
ConstSmartPtr< TScaleAddLinkerNumber > compression_linker()
Definition: biot_tools.h:202
SmallStrainMechanics::SmallStrainMechanicsElemDisc< TDomain > TSmallStrainMechanics
Definition: biot_tools.h:184
BiotElemDisc()
Definition: biot_tools.h:188
IElemDisc< TDomain > TElemDisc
Definition: biot_tools.h:183
BiotElemDisc(SmartPtr< TConvectionDiffusion > pDisc, SmartPtr< TSmallStrainMechanics > uDisc)
Definition: biot_tools.h:191
SmartPtr< TConvectionDiffusion > flowEqDisc
Definition: biot_tools.h:210
A Biot problem consists of several element discs plus boundary conditions.
Definition: biot_tools.h:342
DomainDiscretization< TDomain, TAlgebra > TDomainDisc
Definition: biot_tools.h:346
BiotDiscConfig m_config
Definition: biot_tools.h:486
virtual double start_time()
Definition: biot_tools.h:401
virtual bool post_processing(SmartPtr< TGridFunction > u, size_t step, double time)
Post-processing (per time step)
Definition: biot_tools.h:477
const char * get_gridname() const
Definition: biot_tools.h:365
virtual void add_stab_discs(SmartPtr< TDomainDisc > dd, bool bSteadyStateMechanics=true)
Add stabilizationto domain disc.
Definition: biot_tools.h:436
GridFunction< TDomain, TAlgebra > TGridFunction
Definition: biot_tools.h:347
virtual double get_char_time()
Get characteristic time.
Definition: biot_tools.h:389
void add_subset_parameters(const BiotSubsetParameters &p)
Add subset parameters.
Definition: biot_tools.h:368
const BiotDiscConfig & config() const
Definition: biot_tools.h:481
BiotProblem(const BiotDiscConfig &config, const char *gridname)
CTOR (full)
Definition: biot_tools.h:358
virtual void add_boundary_conditions(SmartPtr< TDomainDisc > dd, bool bSteadyStateMechanics=true)
This add all boundary conditions.
Definition: biot_tools.h:469
ConvectionDiffusionPlugin::ConvectionDiffusionStabFE< TDomain > TConvectionDiffusionStab
Definition: biot_tools.h:349
void add_subset_parameters(const char *&json_string)
Allows adding descriptions.
Definition: biot_tools.h:373
virtual void interpolate_start_values(SmartPtr< TGridFunction > u, double t0)
Initial values.
Definition: biot_tools.h:473
std::vector< BiotSubsetParameters > m_params
Definition: biot_tools.h:487
int get_porder() const
Definition: biot_tools.h:482
int get_uorder() const
Definition: biot_tools.h:483
static const int dim
Definition: biot_tools.h:344
const std::string m_gridname
Definition: biot_tools.h:488
BiotProblem(const char *uCmp, const char *pCmp, const char *gridname)
CTOR (default orders)
Definition: biot_tools.h:354
virtual void add_uzawa_discs(SmartPtr< TDomainDisc > dd, bool bSteadyStateMechanics=true)
Add stabilization to domain disc.
Definition: biot_tools.h:453
ConvectionDiffusionPlugin::ConvectionDiffusionFV1< TDomain > TConvectionDiffusionFV1
Definition: biot_tools.h:350
IElemDisc< TDomain > TElemDisc
Definition: biot_tools.h:345
virtual ~BiotProblem()
DTOR.
Definition: biot_tools.h:362
virtual void add_elem_discs(SmartPtr< TDomainDisc > dd, bool bSteadyStateMechanics=true)
Adding all elem discs to domain disc.
Definition: biot_tools.h:409
virtual double end_time()
Definition: biot_tools.h:404
Class for Biot parameters (per subset)
Definition: biot_tools.h:111
void set_mu(number mu)
Definition: biot_tools.h:144
void set_kappa(number kappa)
Definition: biot_tools.h:136
number m_phi
Definition: biot_tools.h:160
number m_alpha
Definition: biot_tools.h:157
void set_beta(number beta)
Definition: biot_tools.h:148
number get_lambda() const
Elasticity lambda.
Definition: biot_tools.h:139
friend void from_json(const nlohmann::json &j, BiotSubsetParameters &p)
Definition: biot_tools.cpp:69
void set_phi(number phi)
Definition: biot_tools.h:132
BiotSubsetParameters(const char *s, number alpha, number kappa, number phi, number lambda, number mu, number beta)
Create from table.
Definition: biot_tools.h:118
void set_alpha(number alpha)
Definition: biot_tools.h:128
number m_beta_uzawa
Definition: biot_tools.h:164
number m_lambda
Definition: biot_tools.h:161
void set_subsets(std::string subset)
Definition: biot_tools.h:124
void set_lambda(number lambda)
Definition: biot_tools.h:140
BiotSubsetParameters()
Default constructor.
Definition: biot_tools.h:115
number get_alpha() const
Biot coefficient.
Definition: biot_tools.h:127
number get_beta() const
OPTIONAL: Fixed-stress beta.
Definition: biot_tools.h:147
std::string get_subsets() const
Subset.
Definition: biot_tools.h:123
number m_kappa
Definition: biot_tools.h:158
number m_mu
Definition: biot_tools.h:162
std::string m_subsets
Definition: biot_tools.h:155
number get_mu() const
Elasticity mu.
Definition: biot_tools.h:143
number get_kappa() const
Diffusion.
Definition: biot_tools.h:135
number get_phi() const
Storativity.
Definition: biot_tools.h:131
static const int dim
StringTable s
const NullSmartPtr SPNULL
#define UG_ASSERT(expr, msg)
#define UG_LOG(msg)
double number
double BesselJ1(double x)
Definition: biot_tools.cpp:42
double DefaultCharTime(const BiotSubsetParameters &p, double length)
Compute characteristic time.
Definition: biot_tools.cpp:81
void to_json(nlohmann::json &j, const BiotSubsetParameters &p)
Definition: biot_tools.cpp:57
double BesselJ0(double x)
Bessel functions.
Definition: biot_tools.cpp:39
void from_json(const nlohmann::json &j, BiotSubsetParameters &p)
Definition: biot_tools.cpp:69
SmartPtr< T, FreePolicy > make_sp(T *inst)
Definition: biot_tools.h:73
int m_uOrder
Definition: biot_tools.h:96
BiotDiscConfig(const char *uCmp, const char *pCmp)
Definition: biot_tools.h:74
BiotDiscConfig(const char *uCmp, int uorder, const char *pCmp, int porder, bool bSteadyStateMechanics)
Definition: biot_tools.h:84
bool m_bSteadyStateMechanics
Definition: biot_tools.h:99
double m_dStab
Definition: biot_tools.h:97
int get_uorder() const
Definition: biot_tools.h:93
BiotDiscConfig(const char *uCmp, int uorder, const char *pCmp, int porder)
Definition: biot_tools.h:78
int m_pOrder
Definition: biot_tools.h:96
std::string m_pCmp
Definition: biot_tools.h:95
void set_stabilization(double dStab)
Stabilization parameter (from [0,1]).
Definition: biot_tools.h:89
int get_porder() const
Definition: biot_tools.h:92
std::string m_uCmp
Definition: biot_tools.h:95
BiotDiscConfig(const char *uCmp, int uorder, const char *pCmp, int porder, double dStab)
Definition: biot_tools.h:81