33#ifndef __BIOT_TOOLS_H__
34#define __BIOT_TOOLS_H__
42#include <boost/math/special_functions/bessel.hpp>
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"
58#include <nlohmann/json.hpp>
62namespace Poroelasticity {
82 BiotDiscConfig(
const char* uCmp,
int uorder,
const char *pCmp,
int porder,
double dStab)
82 BiotDiscConfig(
const char* uCmp,
int uorder,
const char *pCmp,
int porder,
double dStab) {
…}
86 BiotDiscConfig(
const char* uCmp,
int uorder,
const char *pCmp,
int porder,
bool bSteadyStateMechanics)
86 BiotDiscConfig(
const char* uCmp,
int uorder,
const char *pCmp,
int porder,
bool bSteadyStateMechanics) {
…}
182template <
typename TDomain>
186 static const int dim = TDomain::dim;
231 const char *ucmps,
int uorder,
232 const char *pcmp,
int porder,
233 bool bSteadyStateMechanics=
true)
267 if (porder==1) {
flowEqDisc->set_quad_order(4); }
275 }
else if (uorder == 2) {
309template <
typename TDomain>
312 static const int dim = TDomain::dim;
316 bool bSteadyStateMechanics=
true)
317 :
m_config(ucmps, uorder, pcmp, porder, bSteadyStateMechanics){}
325 biot->CreateElemDiscs(param,
m_config);
328 { biot->SetPressureDiscIdentity(); }
336 biot->CreateElemDiscs(param,
m_config);
337 biot->SetPressureDiscIdentity();
373template <
typename TDomain,
typename TAlgebra>
377 static const int dim = TDomain::dim;
387 BiotProblem(
const char* uCmp,
const char *pCmp,
const char *gridname)
387 BiotProblem(
const char* uCmp,
const char *pCmp,
const char *gridname) {
…}
408 std::stringstream ss;
424 std::vector<BiotSubsetParameters>::const_iterator it=
m_params.begin();
455 std::vector<BiotSubsetParameters>::iterator it;
460 dd->add(biot->displacement_disc().template cast_dynamic<TElemDisc>());
461 dd->add(biot->pressure_disc().template cast_dynamic<TElemDisc>());
478 UG_ASSERT(bSteadyStateMechanics ==
true,
"ERROR: Only implemented for Mass matrix!");
480 if (
config().m_dStab <= 0.0)
return;
483 std::vector<BiotSubsetParameters>::iterator it;
485 double gamma = it->get_lambda() + 2.0*it->get_mu();
487 dd->add(pDiscStab.template cast_dynamic<TElemDisc>());
496 UG_ASSERT(bSteadyStateMechanics ==
true,
"ERROR: Only implemented for Mass matrix!");
499 std::vector<BiotSubsetParameters>::iterator it;
502 pDiscUzawa->set_mass_scale(it->get_beta());
503 dd->add(pDiscUzawa.template cast_static<TElemDisc>());
544template <
typename TDomain,
typename TAlgebra>
547template <
typename TDomain,
typename TAlgebra>
parameterString p
Definition Biogas.lua:1
parameterString s
Definition Biogas.lua:2
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:310
const BiotDiscConfig m_config
Definition biot_tools.h:344
BiotElemDiscFactory(const char *ucmps, int uorder, const char *pcmp, int porder, bool bSteadyStateMechanics=true)
Definition biot_tools.h:315
const BiotDiscConfig & config()
Definition biot_tools.h:343
BiotElemDiscFactory(const BiotDiscConfig &config)
Definition biot_tools.h:319
static const int dim
Definition biot_tools.h:312
BiotElemDisc< TDomain > TBiotDisc
Definition biot_tools.h:313
SmartPtr< TBiotDisc > create_elem_discs(const BiotSubsetParameters ¶m) const
Definition biot_tools.h:322
SmartPtr< TBiotDisc > create_elem_discs_for_consistency(const BiotSubsetParameters ¶m) const
Definition biot_tools.h:333
Definition biot_tools.h:184
SmartPtr< TSmallStrainMechanics > displacementEqDisc
Definition biot_tools.h:215
static const int dim
Definition biot_tools.h:186
ConstSmartPtr< TScaleAddLinkerNumber > divergence()
Definition biot_tools.h:209
void CreateElemDiscs(const BiotSubsetParameters ¶m, const BiotDiscConfig &config)
Definition biot_tools.h:222
ConstSmartPtr< TScaleAddLinkerNumber > compression_linker()
Definition biot_tools.h:206
SmartPtr< TScaleAddLinkerNumber > divLinker
Definition biot_tools.h:218
SmartPtr< TScaleAddLinkerNumber > compressionLinker
Definition biot_tools.h:219
ConvectionDiffusionPlugin::ConvectionDiffusionFE< TDomain > TConvectionDiffusion
Definition biot_tools.h:189
void CreateElemDiscs(const BiotSubsetParameters ¶m, const char *ucmps, int uorder, const char *pcmp, int porder, bool bSteadyStateMechanics=true)
Definition biot_tools.h:230
ScaleAddLinker< number, dim, number > TScaleAddLinkerNumber
Definition biot_tools.h:190
SmartPtr< TElemDisc > displacement_disc()
Definition biot_tools.h:203
SmartPtr< TElemDisc > pressure_disc()
Definition biot_tools.h:199
SmallStrainMechanics::SmallStrainMechanicsElemDisc< TDomain > TSmallStrainMechanics
Definition biot_tools.h:188
BiotElemDisc()
Definition biot_tools.h:192
IElemDisc< TDomain > TElemDisc
Definition biot_tools.h:187
BiotElemDisc(SmartPtr< TConvectionDiffusion > pDisc, SmartPtr< TSmallStrainMechanics > uDisc)
Definition biot_tools.h:195
void SetPressureDiscIdentity()
Reset pressure disc to identity (for consistent initial values)
Definition biot_tools.h:289
SmartPtr< TConvectionDiffusion > flowEqDisc
Definition biot_tools.h:214
A Biot problem consists of several element discs plus boundary conditions.
Definition biot_tools.h:375
DomainDiscretization< TDomain, TAlgebra > TDomainDisc
Definition biot_tools.h:379
BiotDiscConfig m_config
Definition biot_tools.h:537
virtual double start_time()
Definition biot_tools.h:434
virtual bool post_processing(SmartPtr< TGridFunction > u, size_t step, double time)
Post-processing (per time step)
Definition biot_tools.h:528
virtual void add_boundary_conditions_p(SmartPtr< TDomainDisc > dd)=0
Add boundary conditions for pressure.
virtual void add_boundary_conditions_u(SmartPtr< TDomainDisc > dd)=0
Add boundary conditions for deformation.
virtual void add_stab_discs(SmartPtr< TDomainDisc > dd, bool bSteadyStateMechanics=true)
Add stabilizationto domain disc.
Definition biot_tools.h:476
GridFunction< TDomain, TAlgebra > TGridFunction
Definition biot_tools.h:380
virtual double get_char_time()
Get characteristic time.
Definition biot_tools.h:422
void add_subset_parameters(const BiotSubsetParameters &p)
Add subset parameters.
Definition biot_tools.h:401
BiotProblem(const BiotDiscConfig &config, const char *gridname)
CTOR (full)
Definition biot_tools.h:391
virtual void add_boundary_conditions(SmartPtr< TDomainDisc > dd, bool bSteadyStateMechanics=true)
Add all boundary conditions.
Definition biot_tools.h:516
ConvectionDiffusionPlugin::ConvectionDiffusionStabFE< TDomain > TConvectionDiffusionStab
Definition biot_tools.h:382
virtual void add_elem_discs_with_static_pressure(SmartPtr< TDomainDisc > dd)
Definition biot_tools.h:469
virtual void interpolate_start_values(SmartPtr< TGridFunction > u, double t0)
Initial values.
Definition biot_tools.h:524
const BiotDiscConfig & config() const
Definition biot_tools.h:532
std::vector< BiotSubsetParameters > m_params
Definition biot_tools.h:538
int get_porder() const
Definition biot_tools.h:533
int get_uorder() const
Definition biot_tools.h:534
static const int dim
Definition biot_tools.h:377
const std::string m_gridname
Definition biot_tools.h:539
BiotProblem(const char *uCmp, const char *pCmp, const char *gridname)
CTOR (default orders)
Definition biot_tools.h:387
virtual void add_uzawa_discs(SmartPtr< TDomainDisc > dd, bool bSteadyStateMechanics=true)
Add stabilization to domain disc.
Definition biot_tools.h:493
ConvectionDiffusionPlugin::ConvectionDiffusionFV1< TDomain > TConvectionDiffusionFV1
Definition biot_tools.h:383
IElemDisc< TDomain > TElemDisc
Definition biot_tools.h:378
virtual ~BiotProblem()
DTOR.
Definition biot_tools.h:395
virtual void add_elem_discs(SmartPtr< TDomainDisc > dd, bool bSteadyStateMechanics=true)
Definition biot_tools.h:466
void add_elem_discs_general(SmartPtr< TDomainDisc > dd, bool bSteadyStateMechanics=true, bool bIdentityFlow=false)
Adding all elem discs to domain disc.
Definition biot_tools.h:442
const char * get_gridname() const
Definition biot_tools.h:398
virtual double end_time()
Definition biot_tools.h:437
Class for Biot parameters (per subset)
Definition biot_tools.h:115
void set_mu(number mu)
Definition biot_tools.h:148
void set_kappa(number kappa)
Definition biot_tools.h:140
number m_phi
Definition biot_tools.h:164
number m_alpha
Definition biot_tools.h:161
void set_beta(number beta)
Definition biot_tools.h:152
number get_lambda() const
Elasticity lambda.
Definition biot_tools.h:143
void set_phi(number phi)
Definition biot_tools.h:136
BiotSubsetParameters(const char *s, number alpha, number kappa, number phi, number lambda, number mu, number beta)
Create from table.
Definition biot_tools.h:122
void set_alpha(number alpha)
Definition biot_tools.h:132
number m_beta_uzawa
Definition biot_tools.h:168
number m_lambda
Definition biot_tools.h:165
void set_subsets(std::string subset)
Definition biot_tools.h:128
void set_lambda(number lambda)
Definition biot_tools.h:144
BiotSubsetParameters()
Default constructor.
Definition biot_tools.h:119
number get_alpha() const
Biot coefficient.
Definition biot_tools.h:131
number get_beta() const
OPTIONAL: Fixed-stress beta.
Definition biot_tools.h:151
std::string get_subsets() const
Subset.
Definition biot_tools.h:127
number m_kappa
Definition biot_tools.h:162
number m_mu
Definition biot_tools.h:166
std::string m_subsets
Definition biot_tools.h:159
number get_mu() const
Elasticity mu.
Definition biot_tools.h:147
number get_kappa() const
Diffusion.
Definition biot_tools.h:139
number get_phi() const
Storativity.
Definition biot_tools.h:135
Definition small_strain_mech.h:102
const NullSmartPtr SPNULL
#define UG_ASSERT(expr, msg)
double BesselJ1(double x)
Definition biot_tools.cpp:42
double DefaultCharTime(const BiotSubsetParameters &p, double length)
Compute characteristic time.
Definition biot_tools.cpp:81
double BesselJ0(double x)
Bessel functions.
Definition biot_tools.cpp:39
SmartPtr< T, FreePolicy > make_sp(T *inst)
Definition biot_tools.h:72
int m_uOrder
Definition biot_tools.h:99
BiotDiscConfig(const char *uCmp, const char *pCmp)
Definition biot_tools.h:73
BiotDiscConfig(const char *uCmp, int uorder, const char *pCmp, int porder, bool bSteadyStateMechanics)
Definition biot_tools.h:86
bool m_identityFlow
Definition biot_tools.h:103
bool m_bSteadyStateMechanics
Definition biot_tools.h:102
double m_dStab
Definition biot_tools.h:100
int get_uorder() const
Definition biot_tools.h:96
BiotDiscConfig(const char *uCmp, int uorder, const char *pCmp, int porder)
Definition biot_tools.h:78
int m_pOrder
Definition biot_tools.h:99
std::string m_pCmp
Definition biot_tools.h:98
void set_stabilization(double dStab)
Stabilization parameter (from [0,1]).
Definition biot_tools.h:92
int get_porder() const
Definition biot_tools.h:95
std::string m_uCmp
Definition biot_tools.h:98
BiotDiscConfig(const char *uCmp, int uorder, const char *pCmp, int porder, double dStab)
Definition biot_tools.h:82