Plugins
Loading...
Searching...
No Matches
ug::d3f::DensityDrivenFlowFV< TDomain > Class Template Reference

Finite Volume Element Discretization for Density Driven Flow. More...

#include <density_driven_flow_fv.h>

+ Inheritance diagram for ug::d3f::DensityDrivenFlowFV< TDomain >:

Public Member Functions

 DensityDrivenFlowFV (const char *functions, const char *subsets)
 Constructor.
 
virtual void prepare_setting (const std::vector< LFEID > &vLfeID, bool bNonRegularGrid)
 type of trial space for each function used
 
virtual bool use_hanging () const
 returns if hanging nodes are needed
 
virtual void set_porosity (SmartPtr< CplUserData< number, dim > > user)
 
virtual void set_gravity (SmartPtr< CplUserData< MathVector< dim >, dim > > user)
 
virtual void set_molecular_diffusion (SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > user)
 
virtual void set_permeability (SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > user)
 
virtual void set_viscosity (SmartPtr< CplUserData< number, dim > > user)
 
virtual void set_density (SmartPtr< CplUserData< number, dim > > data)
 
virtual void set_dispersion (SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > data)
 
- Public Member Functions inherited from ug::d3f::DensityDrivenFlowBase< TDomain >
SmartPtr< CplUserData< number, dim > > brine ()
 returns the export of brine mass fracture
 
SmartPtr< CplUserData< MathVector< dim >, dim > > brine_grad ()
 returns the export of brine mass fracture
 
SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > brine_tensor ()
 returns the export of brine tensor
 
SmartPtr< CplUserData< MathVector< dim >, dim > > darcy_velocity ()
 returns the export of the darcy velocity
 
 DensityDrivenFlowBase (const char *functions, const char *subsets)
 Constructor.
 
 DensityDrivenFlowBase (const std::vector< std::string > &vFct, const std::vector< std::string > &vSubset)
 
SmartPtr< CplUserData< number, dim > > pressure ()
 returns the export of pressure
 
SmartPtr< CplUserData< MathVector< dim >, dim > > pressure_grad ()
 returns the export of brine mass fracture
 
SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > pressure_tensor ()
 returns the export of brine tensor
 
void set_boussinesq_flow (bool bUse)
 sets usage of boussinesq approximation for flow equation
 
void set_boussinesq_transport (bool bUse)
 sets usage of boussinesq approximation for transport equation
 
void set_porosity (number val)
 sets the porosity
 
void set_gravity (const std::vector< number > &vVel)
 sets the gravity vector
 
void set_molecular_diffusion (number val)
 sets the molecular diffusion tensor
 
void set_permeability (number val)
 sets the permeability tensor
 
void set_viscosity (number val)
 sets the viscosity tensor
 
void set_density (number val)
 sets the density
 
- Public Member Functions inherited from ug::IElemDisc< TDomain >
void add_elem_modifier (SmartPtr< IElemDiscModifier< TDomain > > elemModifier)
 
std::vector< SmartPtr< IElemDiscModifier< TDomain > > > & get_elem_modifier ()
 
 IElemDisc (const char *functions, const char *subsets)
 
 IElemDisc (const std::vector< std::string > &vFct, const std::vector< std::string > &vSubset)
 
- Public Member Functions inherited from ug::IElemAssembleFuncs< IElemDisc< TDomain >, TDomain >
virtual void add_def_A_expl_elem (LocalVector &d, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
TLeaf & asLeaf ()
 
void check_roid (ReferenceObjectID roid, int discType)
 
void do_add_def_A_elem (LocalVector &d, LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void do_add_def_A_expl_elem (LocalVector &d, LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void do_add_def_M_elem (LocalVector &d, LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void do_add_jac_A_elem (LocalMatrix &J, LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void do_add_jac_M_elem (LocalMatrix &J, LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void do_add_rhs_elem (LocalVector &rhs, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void do_fsh_elem_loop ()
 
void do_fsh_timestep (const number time, VectorProxyBase *u, size_t algebra_id)
 
void do_fsh_timestep_elem (const number time, LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void do_prep_elem (LocalVector &u, GridObject *elem, const ReferenceObjectID roid, const MathVector< dim > vCornerCoords[])
 
void do_prep_elem_loop (const ReferenceObjectID roid, const int si)
 
void do_prep_timestep (number future_time, const number time, VectorProxyBase *u, size_t algebra_id)
 
void do_prep_timestep_elem (const number time, LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
virtual void fsh_timestep (number time, VectorProxyBase *u)
 
virtual void fsh_timestep_elem (const number time, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
 IElemAssembleFuncs ()
 
virtual void post_assemble_loop ()
 
virtual void prep_assemble_loop ()
 
virtual void prep_timestep (number future_time, number time, VectorProxyBase *u)
 
virtual void prep_timestep_elem (const number time, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void set_roid (ReferenceObjectID id, int discType)
 
virtual ~IElemAssembleFuncs ()
 
- Public Member Functions inherited from ug::IElemError< typename TDomain >
 IElemError (const char *functions, const char *subsets)
 
 IElemError (const std::vector< std::string > &vFct, const std::vector< std::string > &vSubset)
 
- Public Member Functions inherited from ug::IElemDiscBase< typename TDomain >
SmartPtr< ApproximationSpace< TDomain > > approx_space ()
 
ConstSmartPtr< ApproximationSpace< TDomain > > approx_space () const
 
void check_setup (bool bNonRegularGrid)
 
void clear_imports ()
 
SmartPtr< TDomain > domain ()
 
ConstSmartPtr< TDomain > domain () const
 
const FunctionGroupfunction_group () const
 
ConstSmartPtr< FunctionPatternfunction_pattern () const
 
IDataImport< dim > & get_import (size_t i)
 
 IElemDiscBase (const char *functions="", const char *subsets="")
 
 IElemDiscBase (const std::vector< std::string > &vFct, const std::vector< std::string > &vSubset)
 
bool is_time_dependent () const
 
bool local_time_series_needed ()
 
const LocalVectorTimeSerieslocal_time_solutions () const
 
const FunctionIndexMappingmap () const
 
number mass_scale () const
 
number mass_scale () const
 
number mass_scale (const size_t timePoint) const
 
number mass_scale (const size_t timePoint) const
 
const std::vector< number > & mass_scales () const
 
const std::vector< number > & mass_scales () const
 
size_t num_fct () const
 
size_t num_imports () const
 
size_t num_subsets () const
 
void register_import (IDataImport< dim > &Imp)
 
void set_approximation_space (SmartPtr< ApproximationSpace< TDomain > > approxSpace)
 
void set_functions (const std::string &functions)
 
void set_functions (const std::vector< std::string > &functions)
 
void set_stationary ()
 
void set_stationary (bool bStationaryForced=true)
 
void set_subsets (const std::string &subsets)
 
void set_subsets (const std::vector< std::string > &subsets)
 
void set_time_dependent (LocalVectorTimeSeries &locTimeSeries, const std::vector< number > &vScaleMass, const std::vector< number > &vScaleStiff)
 
void set_time_independent ()
 
void set_time_point (const size_t timePoint)
 
number stiff_scale () const
 
number stiff_scale () const
 
number stiff_scale (const size_t timePoint) const
 
number stiff_scale (const size_t timePoint) const
 
const std::vector< number > & stiff_scales () const
 
const std::vector< number > & stiff_scales () const
 
TDomain::subset_handler_type & subset_handler ()
 
const TDomain::subset_handler_type & subset_handler () const
 
const std::vector< std::string > & symb_fcts () const
 
const std::vector< std::string > & symb_subsets () const
 
number time () const
 
size_t time_point () const
 
virtual int type () const
 
virtual ~IElemDiscBase ()
 
- Public Member Functions inherited from ug::IElemEstimatorFuncs< IElemDisc< TDomain >, TDomain >
TLeaf & asLeaf ()
 
void check_roid (ReferenceObjectID roid, int discType)
 
virtual void compute_err_est_A_elem (const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const number &scale)
 
virtual void compute_err_est_M_elem (const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const number &scale)
 
virtual void compute_err_est_rhs_elem (GridObject *elem, const MathVector< dim > vCornerCoords[], const number &scale)
 
void do_compute_err_est_A_elem (LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const number &scale)
 
void do_compute_err_est_M_elem (LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const number &scale)
 
void do_compute_err_est_rhs_elem (GridObject *elem, const MathVector< dim > vCornerCoords[], const number &scale)
 
void do_fsh_err_est_elem_loop ()
 
void do_prep_err_est_elem (LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void do_prep_err_est_elem_loop (const ReferenceObjectID roid, const int si)
 
virtual SmartPtr< IErrEstData< TDomain > > err_est_data ()
 
bool err_est_enabled () const
 
virtual void fsh_err_est_elem_loop ()
 
 IElemEstimatorFuncs ()
 
virtual void prep_err_est_elem (const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
virtual void prep_err_est_elem_loop (const ReferenceObjectID roid, const int si)
 
void set_error_estimator (SmartPtr< IErrEstData< TDomain > > ee)
 
void set_roid (ReferenceObjectID id, int discType)
 
virtual ~IElemEstimatorFuncs ()
 

Static Public Attributes

static const int dim = base_type::dim
 World dimension.
 
- Static Public Attributes inherited from ug::d3f::DensityDrivenFlowBase< TDomain >
static const int dim = base_type::dim
 World dimension.
 
- Static Public Attributes inherited from ug::IElemDisc< TDomain >
static const int dim
 
- Static Public Attributes inherited from ug::IElemAssembleFuncs< IElemDisc< TDomain >, TDomain >
static const int dim
 
- Static Public Attributes inherited from ug::IElemError< typename TDomain >
static const int dim
 
- Static Public Attributes inherited from ug::IElemDiscBase< typename TDomain >
static const int dim
 
- Static Public Attributes inherited from ug::IElemEstimatorFuncs< IElemDisc< TDomain >, TDomain >
static const int dim
 

Protected Member Functions

template<typename TElem , typename CGeom , typename PGeom >
void add_def_A_elem (LocalVector &d, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
template<typename TElem , typename CGeom , typename PGeom >
void add_def_M_elem (LocalVector &d, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
template<typename TElem , typename CGeom , typename PGeom >
void add_jac_A_elem (LocalMatrix &J, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
template<typename TElem , typename CGeom , typename PGeom >
void add_jac_M_elem (LocalMatrix &J, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
template<typename TElem , typename CGeom , typename PGeom >
void add_rhs_elem (LocalVector &d, GridObject *elem, const MathVector< dim > vCornerCoords[])
 
void compute_ip_darcy_velocity_std (MathVector< dim > &DarcyVel, const MathMatrix< dim, dim > &Permeability, number Viscosity, const MathVector< dim > &DensityTimesGravity, const MathVector< dim > &PressureGrad, bool compDeriv=false, MathVector< dim > *DarcyVel_c=NULL, MathVector< dim > *DarcyVel_p=NULL, const MathVector< dim > *DensityTimesGravity_c=NULL, const number *Viscosity_c=NULL, const MathVector< dim > *PressureGrad_p=NULL, size_t numSh=0)
 compute darcy velocity at one ip
 
template<typename TElem , typename CGeom , typename PGeom >
void ex_brine (number vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< CGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< number > > vvvDeriv[])
 computes the value of the brine mass fraction
 
template<typename TElem , typename CGeom , typename PGeom >
void ex_brine_grad (MathVector< dim > vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< CGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< MathVector< dim > > > vvvDeriv[])
 computes the value of the gradient of the brine mass fraction
 
template<typename TElem , typename CGeom , typename PGeom >
void ex_darcy_std (MathVector< dim > vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< CGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< MathVector< dim > > > vvvDeriv[])
 computes the darcy velocity using consistent gravity
 
template<typename TElem , typename CGeom , typename PGeom >
void ex_pressure_grad (MathVector< dim > vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< CGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< MathVector< dim > > > vvvDeriv[])
 computes the value of the gradient of the pressure
 
template<typename TElem , typename CGeom , typename PGeom >
void fsh_elem_loop ()
 
template<typename TElem , typename CGeom , typename PGeom >
void prep_elem (const LocalVector &u, GridObject *elem, const ReferenceObjectID roid, const MathVector< dim > vCornerCoords[])
 
template<typename TElem , typename CGeom , typename PGeom >
void prep_elem_loop (const ReferenceObjectID roid, const int si)
 
void register_all_funcs (const LFEID &vLfeID, const LFEID &pLfeID)
 
template<typename TElem , typename CGeom , typename PGeom >
void register_func ()
 
- Protected Member Functions inherited from ug::d3f::DensityDrivenFlowBase< TDomain >
void compute_ip_darcy_velocity_std (MathVector< dim > &DarcyVel, const MathMatrix< dim, dim > &Permeability, number Viscosity, const MathVector< dim > &DensityTimesGravity, const MathVector< dim > &PressureGrad, bool compDeriv=false, MathVector< dim > *DarcyVel_c=NULL, MathVector< dim > *DarcyVel_p=NULL, const MathVector< dim > *DensityTimesGravity_c=NULL, const number *Viscosity_c=NULL, const MathVector< dim > *PressureGrad_p=NULL, size_t numSh=0)
 compute darcy velocity at one ip
 
void init (const char *functions)
 standard initialization
 
virtual bool requests_local_time_series ()
 returns if local time series is needed
 
- Protected Member Functions inherited from ug::IElemDisc< TDomain >
void clear_add_fct ()
 
void clear_add_fct (ReferenceObjectID id)
 
void set_default_add_fct ()
 
- Protected Member Functions inherited from ug::IElemAssembleFuncs< IElemDisc< TDomain >, TDomain >
void clear_add_fct ()
 
void clear_add_fct (ReferenceObjectID id)
 
void remove_add_def_A_elem_fct (ReferenceObjectID id)
 
void remove_add_def_A_expl_elem_fct (ReferenceObjectID id)
 
void remove_add_def_M_elem_fct (ReferenceObjectID id)
 
void remove_add_jac_A_elem_fct (ReferenceObjectID id)
 
void remove_add_jac_M_elem_fct (ReferenceObjectID id)
 
void remove_add_rhs_elem_fct (ReferenceObjectID id)
 
void remove_fsh_elem_loop_fct (ReferenceObjectID id)
 
void remove_fsh_timestep_elem_fct (ReferenceObjectID id)
 
void remove_fsh_timestep_fct (size_t algebra_id)
 
void remove_prep_elem_fct (ReferenceObjectID id)
 
void remove_prep_elem_loop_fct (ReferenceObjectID id)
 
void remove_prep_timestep_elem_fct (ReferenceObjectID id)
 
void remove_prep_timestep_fct (size_t algebra_id)
 
void set_add_def_A_elem_fct (ReferenceObjectID id, TAssFunc func)
 
void set_add_def_A_expl_elem_fct (ReferenceObjectID id, TAssFunc func)
 
void set_add_def_M_elem_fct (ReferenceObjectID id, TAssFunc func)
 
void set_add_jac_A_elem_fct (ReferenceObjectID id, TAssFunc func)
 
void set_add_jac_M_elem_fct (ReferenceObjectID id, TAssFunc func)
 
void set_add_rhs_elem_fct (ReferenceObjectID id, TAssFunc func)
 
void set_default_add_fct ()
 
void set_fsh_elem_loop_fct (ReferenceObjectID id, TAssFunc func)
 
void set_fsh_timestep_elem_fct (ReferenceObjectID id, TAssFunc func)
 
void set_fsh_timestep_fct (size_t algebra_id, TAssFunc func)
 
void set_prep_elem_fct (ReferenceObjectID id, TAssFunc func)
 
void set_prep_elem_loop_fct (ReferenceObjectID id, TAssFunc func)
 
void set_prep_timestep_elem_fct (ReferenceObjectID id, TAssFunc func)
 
void set_prep_timestep_fct (size_t algebra_id, TAssFunc func)
 
- Protected Member Functions inherited from ug::IElemError< typename TDomain >
void clear_add_fct ()
 
void clear_add_fct (ReferenceObjectID id)
 
- Protected Member Functions inherited from ug::IElemDiscBase< typename TDomain >
virtual void approximation_space_changed ()
 
void set_function_pattern (ConstSmartPtr< FunctionPattern > fctPatt)
 
void update_function_index_mapping ()
 
- Protected Member Functions inherited from ug::IElemEstimatorFuncs< IElemDisc< TDomain >, TDomain >
void clear_add_fct ()
 
void clear_add_fct (ReferenceObjectID id)
 
void remove_compute_err_est_A_elem (ReferenceObjectID id)
 
void remove_compute_err_est_M_elem (ReferenceObjectID id)
 
void remove_compute_err_est_rhs_elem (ReferenceObjectID id)
 
void remove_fsh_err_est_elem_loop (ReferenceObjectID id)
 
void remove_prep_err_est_elem (ReferenceObjectID id)
 
void remove_prep_err_est_elem_loop (ReferenceObjectID id)
 
void set_compute_err_est_A_elem (ReferenceObjectID id, TAssFunc func)
 
void set_compute_err_est_M_elem (ReferenceObjectID id, TAssFunc func)
 
void set_compute_err_est_rhs_elem (ReferenceObjectID id, TAssFunc func)
 
void set_default_add_fct ()
 
void set_fsh_err_est_elem_loop (ReferenceObjectID id, TAssFunc func)
 
void set_prep_err_est_elem (ReferenceObjectID id, TAssFunc func)
 
void set_prep_err_est_elem_loop (ReferenceObjectID id, TAssFunc func)
 

Protected Attributes

bool m_BoussinesqFlow
 flag if using boussinesq flow
 
bool m_BoussinesqTransport
 flag if using boussinesq transport
 
LFEID m_c_lfeID
 current shape function set
 
SmartPtr< DataExport< number, dim > > m_exBrine
 Export for the brine mass fraction.
 
SmartPtr< DataExport< MathVector< dim >, dim > > m_exBrineGrad
 Export for the gradient of brine mass fraction.
 
SmartPtr< DataExport< MathVector< dim >, dim > > m_exDarcyVel
 Export for the Darcy velocity.
 
SmartPtr< DataExport< MathVector< dim >, dim > > m_exPressureGrad
 Export for the gradient of brine mass fraction.
 
MathVector< dimm_Gravity
 constant Gravity, read in once
 
LFEID m_p_lfeID
 
- Protected Attributes inherited from ug::d3f::DensityDrivenFlowBase< TDomain >
bool m_BoussinesqFlow
 flag if using boussinesq flow
 
bool m_BoussinesqTransport
 flag if using boussinesq transport
 
SmartPtr< DataExport< number, dim > > m_exBrine
 Export for the brine mass fraction.
 
SmartPtr< DataExport< MathVector< dim >, dim > > m_exBrineGrad
 Export for the gradient of brine mass fraction.
 
SmartPtr< DataExport< MathMatrix< dim, dim >, dim > > m_exBrineTensor
 Export for the brine related tensor.
 
SmartPtr< DataExport< MathVector< dim >, dim > > m_exDarcyVel
 Export for the Darcy velocity.
 
SmartPtr< DataExport< number, dim > > m_exPressure
 Export for the brine mass fraction.
 
SmartPtr< DataExport< MathVector< dim >, dim > > m_exPressureGrad
 Export for the gradient of brine mass fraction.
 
SmartPtr< DataExport< MathMatrix< dim, dim >, dim > > m_exPressureTensor
 Export for the pressure related tensor.
 
MathVector< dimm_Gravity
 constant Gravity, read in once
 
- Protected Attributes inherited from ug::IElemDisc< TDomain >
std::vector< SmartPtr< IElemDiscModifier< TDomain > > > m_spElemModifier
 
- Protected Attributes inherited from ug::IElemAssembleFuncs< IElemDisc< TDomain >, TDomain >
ReferenceObjectID m_roid
 
- Protected Attributes inherited from ug::IElemDiscBase< typename TDomain >
bool m_bStationaryForced
 
FunctionGroup m_fctGrp
 
FunctionIndexMapping m_fctIndexMap
 
LocalVectorTimeSeriesm_pLocalVectorTimeSeries
 
SmartPtr< ApproximationSpace< TDomain > > m_spApproxSpace
 
ConstSmartPtr< FunctionPatternm_spFctPattern
 
size_t m_timePoint
 
std::vector< std::string > m_vFct
 
std::vector< IDataImport< dim > * > m_vIImport
 
std::vector< numberm_vScaleMass
 
std::vector< numberm_vScaleStiff
 
std::vector< std::string > m_vSubset
 
- Protected Attributes inherited from ug::IElemEstimatorFuncs< IElemDisc< TDomain >, TDomain >
ReferenceObjectID m_roid
 
SmartPtr< IErrEstData< TDomain > > m_spErrEstData
 

Static Protected Attributes

static const size_t _C_ = 0
 abbreviation for local function: brine mass fraction
 
static const size_t _P_ = 1
 abbreviation for local function: pressure
 

Private Types

typedef DensityDrivenFlowBase< TDomain > base_type
 Base class type.
 
typedef DensityDrivenFlowFV< TDomain > this_type
 own type
 

Private Attributes

DataImport< number, dimm_imBrine_cscvf
 Data import for brine mass fraction at scvf ips.
 
DataImport< MathVector< dim >, dimm_imBrineGrad_cscvf
 
DataImport< MathVector< dim >, dimm_imConstGravity
 Data import for gravity (must be constant in current implementation)
 
DataImport< MathVector< dim >, dimm_imDarcyVel_cscvf
 Data import for Darcy Velocity.
 
DataImport< MathVector< dim >, dimm_imDarcyVel_pscvf
 
DataImport< number, dimm_imDensity_cscv
 Data import for density.
 
DataImport< number, dimm_imDensity_cscvf
 
DataImport< number, dimm_imDensity_pscv
 
DataImport< number, dimm_imDensity_pscvf
 
DataImport< MathMatrix< dim, dim >, dimm_imMolDiffusion_cscvf
 Data import for molecular diffusion tensor.
 
DataImport< MathMatrix< dim, dim >, dimm_imMolDiffusion_pscvf
 
DataImport< MathMatrix< dim, dim >, dimm_imPermeability_cscvf
 Data import for permeability tensor.
 
DataImport< MathMatrix< dim, dim >, dimm_imPermeability_pscvf
 
DataImport< number, dimm_imPorosity_cscv
 Data import for the reaction term.
 
DataImport< number, dimm_imPorosity_cscvf
 
DataImport< number, dimm_imPorosity_pscv
 
DataImport< number, dimm_imPorosity_pscvf
 
DataImport< MathVector< dim >, dimm_imPressureGrad_cscvf
 Data import for pressure gradient at scvf ips.
 
DataImport< MathVector< dim >, dimm_imPressureGrad_pscvf
 
DataImport< number, dimm_imViscosity_cscvf
 Data import for viscosity.
 
DataImport< number, dimm_imViscosity_pscvf
 

Additional Inherited Members

- Public Types inherited from ug::IElemDisc< TDomain >
typedef IElemAssembleFuncs< IElemDisc< TDomain >, TDomain > assemble_base_type
 
typedef IElemError< TDomain > base_type
 
typedef TDomain domain_type
 
typedef IElemEstimatorFuncs< IElemDisc< TDomain >, TDomain > estimator_base_type
 
- Public Types inherited from ug::IElemAssembleFuncs< IElemDisc< TDomain >, TDomain >
typedef TDomain domain_type
 
typedef TLeaf leaf_type
 
- Public Types inherited from ug::IElemError< typename TDomain >
typedef TDomain domain_type
 
typedef IElemEstimatorFuncs< IElemDisc< TDomain >, TDomain > estimator_base_type
 
- Public Types inherited from ug::IElemDiscBase< typename TDomain >
typedef TDomain domain_type
 
typedef TDomain::position_type position_type
 
- Public Types inherited from ug::IElemEstimatorFuncs< IElemDisc< TDomain >, TDomain >
typedef TDomain domain_type
 
typedef TLeaf leaf_type
 

Detailed Description

template<typename TDomain>
class ug::d3f::DensityDrivenFlowFV< TDomain >

Finite Volume Element Discretization for Density Driven Flow.

This class implements the IElemDisc interface for the density driven flow equations. It is a system of two coupled equations of the form.

\begin{align*} \partial_t (\phi \rho) + \nabla(\rho \vec{q}) &= 0\\ \partial_t (\phi \rho c) - \nabla(\rho D \nabla c -\rho c \vec{q}) &= 0\\ \vec{q} &:= - \frac{K}{\mu}(\nabla p - \rho \vec{g}) \end{align*}

with

  • \( c \) unknown brine mass fraction
  • \( p \) unknown pressure

and given data

  • \( \phi(\vec{x}, t) \) Porosity
  • \( K(\vec{x}, t) \) Permeability tensor
  • \( \vec{g} \) constant Gravity field
  • \( D(\vec{q}, \vec{x}, t) := \phi(\vec{x}, t) D_d(\vec{x}, t) + D_m(\vec{q}) \) Diffusion-Dispersion tensor
  • \( D_m(\vec{q}) \) mechanical Dispersion tensor
  • \( D_d(\vec{x}, t) \) molecular Diffusion tensor (prop. to Tortuosity)
  • \( \mu(c) \) Viscosity
  • \( \rho(c)\) Density

as well as the abbreviation

  • \( \vec{q} \) Darcy velocity

The first equation is usually referred to as the flow equation. The second equation is known as the transport equation.

Template Parameters
TFVGeomFinite Volume Geometry
TDomainDomain
TAlgebraAlgebra

Member Typedef Documentation

◆ base_type

template<typename TDomain >
typedef DensityDrivenFlowBase<TDomain> ug::d3f::DensityDrivenFlowFV< TDomain >::base_type
private

Base class type.

◆ this_type

template<typename TDomain >
typedef DensityDrivenFlowFV<TDomain> ug::d3f::DensityDrivenFlowFV< TDomain >::this_type
private

own type

Constructor & Destructor Documentation

◆ DensityDrivenFlowFV()

template<typename TDomain >
ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV ( const char *  functions,
const char *  subsets 
)

Constructor.

References ug::IElemDisc< TDomain >::clear_add_fct(), ug::d3f::DensityDrivenFlowFV< TDomain >::m_exBrine, ug::d3f::DensityDrivenFlowFV< TDomain >::m_exBrineGrad, ug::d3f::DensityDrivenFlowFV< TDomain >::m_exDarcyVel, ug::d3f::DensityDrivenFlowFV< TDomain >::m_exPressureGrad, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imBrine_cscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imBrineGrad_cscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDarcyVel_cscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDarcyVel_pscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDensity_cscv, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDensity_cscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDensity_pscv, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDensity_pscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imMolDiffusion_cscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imMolDiffusion_pscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPermeability_cscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPermeability_pscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPorosity_cscv, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPorosity_cscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPorosity_pscv, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPorosity_pscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPressureGrad_cscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPressureGrad_pscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imViscosity_cscvf, ug::d3f::DensityDrivenFlowFV< TDomain >::m_imViscosity_pscvf, ug::IElemDiscBase< typename TDomain >::register_import(), and ug::DataImport< typename TData, int dim >::set_data().

Member Function Documentation

◆ add_def_A_elem()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::add_def_A_elem ( LocalVector d,
const LocalVector u,
GridObject elem,
const MathVector< dim vCornerCoords[] 
)
protectedvirtual

◆ add_def_M_elem()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::add_def_M_elem ( LocalVector d,
const LocalVector u,
GridObject elem,
const MathVector< dim vCornerCoords[] 
)
protectedvirtual

◆ add_jac_A_elem()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::add_jac_A_elem ( LocalMatrix J,
const LocalVector u,
GridObject elem,
const MathVector< dim vCornerCoords[] 
)
protectedvirtual

◆ add_jac_M_elem()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::add_jac_M_elem ( LocalMatrix J,
const LocalVector u,
GridObject elem,
const MathVector< dim vCornerCoords[] 
)
protectedvirtual

◆ add_rhs_elem()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::add_rhs_elem ( LocalVector d,
GridObject elem,
const MathVector< dim vCornerCoords[] 
)
protectedvirtual

◆ compute_ip_darcy_velocity_std()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowBase< TDomain >::compute_ip_darcy_velocity_std ( MathVector< dim > &  DarcyVel,
const MathMatrix< dim, dim > &  Permeability,
number  Viscosity,
const MathVector< dim > &  DensityTimesGravity,
const MathVector< dim > &  PressureGrad,
bool  compDeriv = false,
MathVector< dim > *  DarcyVel_c = NULL,
MathVector< dim > *  DarcyVel_p = NULL,
const MathVector< dim > *  DensityTimesGravity_c = NULL,
const number Viscosity_c = NULL,
const MathVector< dim > *  PressureGrad_p = NULL,
size_t  numSh = 0 
)
protected

compute darcy velocity at one ip

References ug::MatVecMult(), UG_ASSERT, ug::VecScale(), ug::VecScaleAppend(), ug::VecSubtract(), and Viscosity().

◆ ex_brine()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::ex_brine ( number  vValue[],
const MathVector< dim vGlobIP[],
number  time,
int  si,
const LocalVector u,
GridObject elem,
const MathVector< dim vCornerCoords[],
const MathVector< CGeom::dim >  vLocIP[],
const size_t  nip,
bool  bDeriv,
std::vector< std::vector< number > >  vvvDeriv[] 
)
protected

◆ ex_brine_grad()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::ex_brine_grad ( MathVector< dim vValue[],
const MathVector< dim vGlobIP[],
number  time,
int  si,
const LocalVector u,
GridObject elem,
const MathVector< dim vCornerCoords[],
const MathVector< CGeom::dim >  vLocIP[],
const size_t  nip,
bool  bDeriv,
std::vector< std::vector< MathVector< dim > > >  vvvDeriv[] 
)
protected

◆ ex_darcy_std()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::ex_darcy_std ( MathVector< dim vValue[],
const MathVector< dim vGlobIP[],
number  time,
int  si,
const LocalVector u,
GridObject elem,
const MathVector< dim vCornerCoords[],
const MathVector< CGeom::dim >  vLocIP[],
const size_t  nip,
bool  bDeriv,
std::vector< std::vector< MathVector< dim > > >  vvvDeriv[] 
)
protected

computes the darcy velocity using consistent gravity

References ug::GeomProvider< typename TGeom >::get(), UG_THROW, and ug::VecScale().

◆ ex_pressure_grad()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::ex_pressure_grad ( MathVector< dim vValue[],
const MathVector< dim vGlobIP[],
number  time,
int  si,
const LocalVector u,
GridObject elem,
const MathVector< dim vCornerCoords[],
const MathVector< CGeom::dim >  vLocIP[],
const size_t  nip,
bool  bDeriv,
std::vector< std::vector< MathVector< dim > > >  vvvDeriv[] 
)
protected

◆ fsh_elem_loop()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::fsh_elem_loop ( )
protectedvirtual

◆ prep_elem()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::prep_elem ( const LocalVector u,
GridObject elem,
const ReferenceObjectID  roid,
const MathVector< dim vCornerCoords[] 
)
protectedvirtual

◆ prep_elem_loop()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::prep_elem_loop ( const ReferenceObjectID  roid,
const int  si 
)
protectedvirtual

◆ prepare_setting()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowFV< TDomain >::prepare_setting ( const std::vector< LFEID > &  vLfeID,
bool  bNonRegularGrid 
)
virtual

type of trial space for each function used

Implements ug::IElemDiscBase< typename TDomain >.

References ug::LFEID::LAGRANGE, type(), and UG_THROW.

◆ register_all_funcs()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowFV< TDomain >::register_all_funcs ( const LFEID vLfeID,
const LFEID pLfeID 
)
protected

register utils

◆ register_func()

template<typename TDomain >
template<typename TElem , typename CGeom , typename PGeom >
void ug::d3f::DensityDrivenFlowFV< TDomain >::register_func ( )
protected

register utils

◆ set_density()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowFV< TDomain >::set_density ( SmartPtr< CplUserData< number, dim > >  data)
virtual

user data as requested by base class

Implements ug::d3f::DensityDrivenFlowBase< TDomain >.

◆ set_dispersion()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowFV< TDomain >::set_dispersion ( SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > >  data)
virtual

user data as requested by base class

Implements ug::d3f::DensityDrivenFlowBase< TDomain >.

References UG_THROW.

◆ set_gravity()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowFV< TDomain >::set_gravity ( SmartPtr< CplUserData< MathVector< dim >, dim > >  user)
virtual

user data as requested by base class

Implements ug::d3f::DensityDrivenFlowBase< TDomain >.

◆ set_molecular_diffusion()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowFV< TDomain >::set_molecular_diffusion ( SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > >  user)
virtual

user data as requested by base class

Implements ug::d3f::DensityDrivenFlowBase< TDomain >.

◆ set_permeability()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowFV< TDomain >::set_permeability ( SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > >  user)
virtual

user data as requested by base class

Implements ug::d3f::DensityDrivenFlowBase< TDomain >.

◆ set_porosity()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowFV< TDomain >::set_porosity ( SmartPtr< CplUserData< number, dim > >  user)
virtual

user data as requested by base class

Implements ug::d3f::DensityDrivenFlowBase< TDomain >.

◆ set_viscosity()

template<typename TDomain >
void ug::d3f::DensityDrivenFlowFV< TDomain >::set_viscosity ( SmartPtr< CplUserData< number, dim > >  user)
virtual

user data as requested by base class

Implements ug::d3f::DensityDrivenFlowBase< TDomain >.

◆ use_hanging()

template<typename TDomain >
bool ug::d3f::DensityDrivenFlowFV< TDomain >::use_hanging ( ) const
virtual

returns if hanging nodes are needed

Reimplemented from ug::IElemDiscBase< typename TDomain >.

Member Data Documentation

◆ _C_

template<typename TDomain >
const size_t ug::d3f::DensityDrivenFlowFV< TDomain >::_C_ = 0
staticprotected

abbreviation for local function: brine mass fraction

◆ _P_

template<typename TDomain >
const size_t ug::d3f::DensityDrivenFlowFV< TDomain >::_P_ = 1
staticprotected

abbreviation for local function: pressure

◆ dim

template<typename TDomain >
const int ug::d3f::DensityDrivenFlowFV< TDomain >::dim = base_type::dim
static

World dimension.

◆ m_BoussinesqFlow

template<typename TDomain >
bool ug::d3f::DensityDrivenFlowBase< TDomain >::m_BoussinesqFlow
protected

flag if using boussinesq flow

◆ m_BoussinesqTransport

template<typename TDomain >
bool ug::d3f::DensityDrivenFlowBase< TDomain >::m_BoussinesqTransport
protected

flag if using boussinesq transport

◆ m_c_lfeID

template<typename TDomain >
LFEID ug::d3f::DensityDrivenFlowFV< TDomain >::m_c_lfeID
protected

current shape function set

◆ m_exBrine

template<typename TDomain >
SmartPtr<DataExport<number, dim> > ug::d3f::DensityDrivenFlowBase< TDomain >::m_exBrine
protected

Export for the brine mass fraction.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_exBrineGrad

template<typename TDomain >
SmartPtr<DataExport<MathVector<dim>,dim> > ug::d3f::DensityDrivenFlowBase< TDomain >::m_exBrineGrad
protected

Export for the gradient of brine mass fraction.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_exDarcyVel

template<typename TDomain >
SmartPtr<DataExport<MathVector<dim>, dim> > ug::d3f::DensityDrivenFlowBase< TDomain >::m_exDarcyVel
protected

Export for the Darcy velocity.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_exPressureGrad

template<typename TDomain >
SmartPtr<DataExport<MathVector<dim>,dim> > ug::d3f::DensityDrivenFlowBase< TDomain >::m_exPressureGrad
protected

Export for the gradient of brine mass fraction.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_Gravity

template<typename TDomain >
MathVector<dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_Gravity
protected

constant Gravity, read in once

◆ m_imBrine_cscvf

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imBrine_cscvf
private

Data import for brine mass fraction at scvf ips.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_imBrineGrad_cscvf

template<typename TDomain >
DataImport<MathVector<dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imBrineGrad_cscvf
private

◆ m_imConstGravity

template<typename TDomain >
DataImport<MathVector<dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imConstGravity
private

Data import for gravity (must be constant in current implementation)

◆ m_imDarcyVel_cscvf

template<typename TDomain >
DataImport<MathVector<dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDarcyVel_cscvf
private

Data import for Darcy Velocity.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_imDarcyVel_pscvf

template<typename TDomain >
DataImport<MathVector<dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDarcyVel_pscvf
private

◆ m_imDensity_cscv

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDensity_cscv
private

Data import for density.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_imDensity_cscvf

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDensity_cscvf
private

◆ m_imDensity_pscv

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDensity_pscv
private

◆ m_imDensity_pscvf

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imDensity_pscvf
private

◆ m_imMolDiffusion_cscvf

template<typename TDomain >
DataImport<MathMatrix<dim, dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imMolDiffusion_cscvf
private

Data import for molecular diffusion tensor.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_imMolDiffusion_pscvf

template<typename TDomain >
DataImport<MathMatrix<dim, dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imMolDiffusion_pscvf
private

◆ m_imPermeability_cscvf

template<typename TDomain >
DataImport<MathMatrix<dim, dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPermeability_cscvf
private

Data import for permeability tensor.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_imPermeability_pscvf

template<typename TDomain >
DataImport<MathMatrix<dim, dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPermeability_pscvf
private

◆ m_imPorosity_cscv

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPorosity_cscv
private

Data import for the reaction term.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_imPorosity_cscvf

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPorosity_cscvf
private

◆ m_imPorosity_pscv

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPorosity_pscv
private

◆ m_imPorosity_pscvf

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPorosity_pscvf
private

◆ m_imPressureGrad_cscvf

template<typename TDomain >
DataImport<MathVector<dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPressureGrad_cscvf
private

Data import for pressure gradient at scvf ips.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_imPressureGrad_pscvf

template<typename TDomain >
DataImport<MathVector<dim>, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imPressureGrad_pscvf
private

◆ m_imViscosity_cscvf

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imViscosity_cscvf
private

Data import for viscosity.

Referenced by ug::d3f::DensityDrivenFlowFV< TDomain >::DensityDrivenFlowFV().

◆ m_imViscosity_pscvf

template<typename TDomain >
DataImport<number, dim> ug::d3f::DensityDrivenFlowFV< TDomain >::m_imViscosity_pscvf
private

◆ m_p_lfeID

template<typename TDomain >
LFEID ug::d3f::DensityDrivenFlowFV< TDomain >::m_p_lfeID
protected

The documentation for this class was generated from the following files: