12#ifndef __H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__DENSITY_DRIVEN_FLOW_FV1_
13#define __H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__DENSITY_DRIVEN_FLOW_FV1_
26#include "../../river_networks/river_sss.h"
27#include "../../extravol.h"
28#include "../../d3f_sss.h"
30#include "../density_driven_flow_base.h"
32#include "../../d3f_limex.h"
79template<
typename TDomain>
98 const std::vector<std::string>& vSubset);
147 template <
typename TElem,
typename TFVGeom>
150 template <
typename TElem,
typename TFVGeom>
153 template <
typename TElem,
typename TFVGeom>
156 template <
typename TElem,
typename TFVGeom>
159 template <
typename TElem,
typename TFVGeom>
162 template <
typename TElem,
typename TFVGeom>
165 template <
typename TElem,
typename TFVGeom>
168 template <
typename TElem,
typename TFVGeom>
176 template<
typename TElem,
typename TFVGeom>
189 template<
typename TElem,
typename TFVGeom>
201 template<
typename TElem,
typename TFVGeom>
211 number bottom_permeability,
216 template<
typename TElem,
typename TFVGeom>
226 number bottom_permeability,
248 static const size_t _C_ = 0;
251 static const size_t _P_ = 1;
308 template <
typename TElem,
typename TFVGeom>
321 template <
typename TElem,
typename TFVGeom>
334 template <
typename TElem,
typename TFVGeom>
344 std::vector<std::vector<number> > vvvDeriv[]);
347 template <
typename TElem,
typename TFVGeom>
360 template <
typename TElem,
typename TFVGeom>
370 std::vector<std::vector<number> > vvvDeriv[]);
373 template <
typename TElem,
typename TFVGeom>
386 template <
typename TElem,
typename TFVGeom>
398 template <
typename TElem,
typename TFVGeom>
424 virtual void prepare_setting(
const std::vector<LFEID>& vLfeID,
bool bNonRegularGrid);
441 template <
typename TElem,
typename TFVGeom>
void register_func();
Finite Volume Element Discretization for Density Driven Flow.
Definition density_driven_flow_base.h:72
SmartPtr< DataExport< MathVector< dim >, dim > > m_exPressureGrad
Export for the gradient of brine mass fraction.
Definition density_driven_flow_base.h:245
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
Definition density_driven_flow_base.cpp:216
SmartPtr< DataExport< MathMatrix< dim, dim >, dim > > m_exPressureTensor
Export for the pressure related tensor.
Definition density_driven_flow_base.h:251
SmartPtr< DataExport< MathVector< dim >, dim > > m_exBrineGrad
Export for the gradient of brine mass fraction.
Definition density_driven_flow_base.h:239
bool m_BoussinesqTransport
flag if using boussinesq transport
Definition density_driven_flow_base.h:185
SmartPtr< DataExport< MathMatrix< dim, dim >, dim > > m_exBrineTensor
Export for the brine related tensor.
Definition density_driven_flow_base.h:248
SmartPtr< DataExport< number, dim > > m_exPressure
Export for the brine mass fraction.
Definition density_driven_flow_base.h:242
SmartPtr< DataExport< MathVector< dim >, dim > > m_exDarcyVel
Export for the Darcy velocity.
Definition density_driven_flow_base.h:233
SmartPtr< DataExport< number, dim > > m_exBrine
Export for the brine mass fraction.
Definition density_driven_flow_base.h:236
bool m_BoussinesqFlow
flag if using boussinesq flow
Definition density_driven_flow_base.h:188
static const int dim
World dimension.
Definition density_driven_flow_base.h:82
Finite Volume Element Discretization for Density Driven Flow.
Definition density_driven_flow_fv1.h:82
virtual void set_relative_permeability(SmartPtr< CplUserData< number, dim > > user)
Definition density_driven_flow_fv1.cpp:236
void set_consistent_gravity(bool bUse)
sets usage of consistent gravity
Definition density_driven_flow_fv1.cpp:162
void add_river_sss_def_elem(LocalVector &d, const LocalVector &u, GridObject *elem, const TFVGeom &geo, size_t i, number intensity, number concentration, number bottom_permeability, number len=1)
adds contributions of a singular source or sink to the defect
Definition density_driven_flow_fv1.cpp:1685
DataImport< MathMatrix< dim, dim >, dim > m_imPermeabilityScv
Definition density_driven_flow_fv1.h:280
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< TFVGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< MathVector< dim > > > vvvDeriv[])
computes the darcy velocity using consistent gravity
Definition density_driven_flow_fv1.cpp:337
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< TFVGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< MathVector< dim > > > vvvDeriv[])
computes the value of the gradient of the pressure
Definition density_driven_flow_fv1.cpp:916
bool condensed_FV()
returns the 'condensed scvf ip' flag
Definition density_driven_flow_fv1.h:140
DataImport< MathVector< dim >, dim > m_imBrineGradScvf
Definition density_driven_flow_fv1.h:263
void set_sss_manager(SmartPtr< DDSingularSourcesAndSinks< dim > > sss_mngr)
set singular sources and sinks
Definition density_driven_flow_fv1.h:131
virtual void prep_assemble_loop()
Definition density_driven_flow_fv1.cpp:1089
void add_sss_jac_elem(LocalMatrix &J, const LocalVector &u, GridObject *elem, const TFVGeom &geo, size_t i, number intensity, number concentration)
adds contributions of a singular source or sink to the matrix
Definition density_driven_flow_fv1.cpp:1276
DataImport< MathVector< dim >, dim > m_imPressureGradScvf
Definition density_driven_flow_fv1.h:267
virtual void set_viscosity(SmartPtr< CplUserData< number, dim > > user)
Definition density_driven_flow_fv1.cpp:257
virtual void set_saturation(SmartPtr< CplUserData< number, dim > > user)
Definition density_driven_flow_fv1.cpp:247
bool m_bVolStabDataActive
whether the volume stabilization is active (i.e. m_spVolStabData is not SPNULL and active)
Definition density_driven_flow_fv1.h:242
DataImport< number, dim > m_imPressureScvf
Data import for pressure at scvf ips.
Definition density_driven_flow_fv1.h:266
DataImport< number, dim > m_imBrineScvf
Data import for brine mass fraction at scvf ips.
Definition density_driven_flow_fv1.h:262
void add_def_M_elem(LocalVector &d, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv1.cpp:1979
DataImport< MathMatrix< dim, dim >, dim > m_imMolDiffusionScvf
Data import for molecular diffusion tensor.
Definition density_driven_flow_fv1.h:290
SmartPtr< IConvectionShapes< dim > > m_spUpwind
strategy to compute the upwind shapes
Definition density_driven_flow_fv1.h:234
void set_scheidegger_dispersion(const number alphaLong, const number alphaTrans)
Definition density_driven_flow_fv1.h:124
virtual void set_permeability(SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > user)
Definition density_driven_flow_fv1.cpp:225
void ex_pressure(number vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< TFVGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< number > > vvvDeriv[])
computes the value of the brine mass fraction
Definition density_driven_flow_fv1.cpp:820
void add_river_sss_jac_elem(LocalMatrix &J, const LocalVector &u, GridObject *elem, const TFVGeom &geo, size_t i, number intensity, number concentration, number bottom_permeability, number len=1)
Definition density_driven_flow_fv1.cpp:1328
virtual bool requests_local_time_series()
returns if local time series is needed
Definition density_driven_flow_fv1.cpp:182
SmartPtr< FlowVolStabData< TDomain > > m_spVolStabData
the volume stabilization
Definition density_driven_flow_fv1.h:240
void register_func_for_(bool bHang)
Definition density_driven_flow_fv1.cpp:2066
void set_beta_p(SmartPtr< CplUserData< number, dim > > user)
void prep_elem_loop(const ReferenceObjectID roid, const int si)
Definition density_driven_flow_fv1.cpp:1103
SmartPtr< DDSingularSourcesAndSinks< dim > > sss_manager()
get singular sources and sinks
Definition density_driven_flow_fv1.h:134
DataImport< number, dim > m_imDensityScv
Data import for density.
Definition density_driven_flow_fv1.h:296
void add_def_A_elem(LocalVector &d, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv1.cpp:1724
void register_all_funcs(bool bHang)
Definition density_driven_flow_fv1.cpp:2050
bool m_bConsGravity
flag if using consistent gravity
Definition density_driven_flow_fv1.h:237
static const int dim
World dimension.
Definition density_driven_flow_fv1.h:92
void set_upwind(SmartPtr< IConvectionShapes< dim > > shape)
sets the type of upwind
Definition density_driven_flow_fv1.cpp:188
DataImport< number, dim > m_imOldDensityScv
Definition density_driven_flow_fv1.h:298
void add_rhs_elem(LocalVector &d, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv1.cpp:2035
DataImport< MathVector< dim >, dim > m_imConstGravity
Data import for gravity (must be constant in current implementation)
Definition density_driven_flow_fv1.h:276
virtual bool use_hanging() const
returns if hanging nodes are needed
Definition density_driven_flow_fv1.cpp:152
DensityDrivenFlowBase< TDomain > base_type
Base class type.
Definition density_driven_flow_fv1.h:85
static const size_t _C_
abbreviation for local function: brine mass fraction
Definition density_driven_flow_fv1.h:248
void set_condensed_FV(bool condensed)
activates/deactivates the condensed scvf ip's for the FV scheme
Definition density_driven_flow_fv1.h:137
bool m_bCondensedFV
if to use the 'condensed' FV scvf ip's
Definition density_driven_flow_fv1.h:434
void prep_elem(const LocalVector &u, GridObject *elem, const ReferenceObjectID roid, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv1.cpp:1195
virtual void set_dispersion(SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > data)
Definition density_driven_flow_fv1.cpp:305
void ex_darcy_cons_grav(MathVector< dim > vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< TFVGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< MathVector< dim > > > vvvDeriv[])
computes the darcy velocity using consistent gravity
Definition density_driven_flow_fv1.cpp:460
void init()
Definition density_driven_flow_fv1.cpp:56
void fsh_elem_loop()
Definition density_driven_flow_fv1.cpp:1189
SmartPtr< DDSingularSourcesAndSinks< dim > > m_sss_mngr
singular sources and sinks manager
Definition density_driven_flow_fv1.h:256
static const size_t _P_
abbreviation for local function: pressure
Definition density_driven_flow_fv1.h:251
MathVector< dim > m_Gravity
constant Gravity, read in once
Definition density_driven_flow_fv1.h:245
DataImport< number, dim > m_imRelativePermeabilityScvf
Definition density_driven_flow_fv1.h:284
SmartPtr< RiverSingularSourcesAndSinks< dim > > m_river_sss_mngr
river singular sources and sinks manager
Definition density_driven_flow_fv1.h:259
DataImport< MathVector< dim >, dim > m_imDarcyVelScvf
Data import for Darcy Velocity.
Definition density_driven_flow_fv1.h:301
DataImport< number, dim > m_imSaturationScv
Data import for saturation.
Definition density_driven_flow_fv1.h:287
DataImport< MathMatrix< dim, dim >, dim > m_imDispersionScvf
Data import for Dispersion.
Definition density_driven_flow_fv1.h:304
DataImport< number, dim > m_imRelativePermeabilityScv
Data import for permeability scale.
Definition density_driven_flow_fv1.h:283
DataImport< number, dim > m_imPorosityScv
Data import for the porosity term.
Definition density_driven_flow_fv1.h:270
void ex_brine_tensor(MathMatrix< dim, dim > vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< TFVGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< MathMatrix< dim, dim > > > vvvDeriv[])
computes the value of the gradient of the brine mass fraction
Definition density_driven_flow_fv1.cpp:1003
void ex_brine(number vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< TFVGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< number > > vvvDeriv[])
computes the value of the brine mass fraction
Definition density_driven_flow_fv1.cpp:637
void register_func()
Definition density_driven_flow_fv1.cpp:2091
bool m_bNonRegularGrid
current regular grid flag
Definition density_driven_flow_fv1.h:431
DataImport< MathMatrix< dim, dim >, dim > m_imPermeabilityScvf
Data import for permeability tensor.
Definition density_driven_flow_fv1.h:279
virtual void prepare_setting(const std::vector< LFEID > &vLfeID, bool bNonRegularGrid)
type of trial space for each function used
Definition density_driven_flow_fv1.cpp:122
DataImport< number, dim > m_imDensityScvf
Definition density_driven_flow_fv1.h:297
virtual void set_porosity(SmartPtr< CplUserData< number, dim > > user)
Definition density_driven_flow_fv1.cpp:196
void set_river_sss_manager(SmartPtr< RiverSingularSourcesAndSinks< dim > > sss_mngr)
Definition density_driven_flow_fv1.h:132
virtual void set_molecular_diffusion(SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > user)
Definition density_driven_flow_fv1.cpp:216
void set_volume_stabilization(SmartPtr< FlowVolStabData< TDomain > > volStabData)
sets usage of volume stabilization
Definition density_driven_flow_fv1.cpp:170
void set_partial_velocity(int mask)
Definition density_driven_flow_fv1.h:452
DensityDrivenFlowFV1< TDomain > this_type
own type
Definition density_driven_flow_fv1.h:88
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< TFVGeom::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
Definition density_driven_flow_fv1.cpp:733
DataImport< number, dim > m_imPorosityScvf
Definition density_driven_flow_fv1.h:271
void add_sss_def_elem(LocalVector &d, const LocalVector &u, GridObject *elem, const TFVGeom &geo, size_t i, number intensity, number concentration)
adds contributions of a singular source or sink to the defect
Definition density_driven_flow_fv1.cpp:1648
void set_scheidegger_dispersion(const number alphaLong, const number alphaTrans, const number wlimex=1.0)
Definition density_driven_flow_fv1.cpp:313
virtual void set_gravity(SmartPtr< CplUserData< MathVector< dim >, dim > > user)
Definition density_driven_flow_fv1.cpp:207
void add_jac_M_elem(LocalMatrix &J, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv1.cpp:1896
DataImport< number, dim > m_imViscosityScvf
Data import for viscosity.
Definition density_driven_flow_fv1.h:293
int m_partialAssMask_Conv
Definition density_driven_flow_fv1.h:456
virtual void set_density(SmartPtr< CplUserData< number, dim > > data)
Definition density_driven_flow_fv1.cpp:275
void ex_pressure_tensor(MathMatrix< dim, dim > vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< TFVGeom::dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< MathMatrix< dim, dim > > > vvvDeriv[])
computes the value of the gradient of the brine mass fraction
Definition density_driven_flow_fv1.cpp:1052
void add_jac_A_elem(LocalMatrix &J, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv1.cpp:1381
Specialization of the optimized SSS manager for river networks.
Definition river_sss.h:357
Definition density_driven_flow_fv1.h:443
void operator()(TElem &)
Definition density_driven_flow_fv1.h:446
this_type * m_pThis
Definition density_driven_flow_fv1.h:444
RegisterLocalDiscr(this_type *pThis, bool bHang)
Definition density_driven_flow_fv1.h:445
bool m_bHang
Definition density_driven_flow_fv1.h:444