Plugins
Loading...
Searching...
No Matches
density_driven_flow_fv.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 Gesellschaft fuer Anlagen- und Reaktorsicherheit gGmbH
3 * SPDX-License-Identifier: EUPL-1.2
4 * SPDX-FileContributor: Andreas Vogel
5 * SPDX-FileContributor: Goethe Universität Frankfurt
6 * SPDX-FileType: SOURCE
7 *
8 * This file is part of d3f++.
9 * d3f++ is an extension for UG4. Licensing information and citation requirements of UG4 are provided in LICENSES/UG4-LGPL_2.1
10 */
11
12#ifndef __H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__DENSITY_DRIVEN_FLOW_FV_
13#define __H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__DENSITY_DRIVEN_FLOW_FV_
14
15// other ug4 modules
16#include "common/common.h"
17#include "lib_grid/lg_base.h"
18
19// library intern headers
23
24#include "../density_driven_flow_base.h"
25
26namespace ug{
27namespace d3f{
28
31
33
70template<typename TDomain>
72 : public DensityDrivenFlowBase<TDomain>
73{
74 private:
77
80
81 public:
83 static const int dim = base_type::dim;
84
85 public:
87 DensityDrivenFlowFV(const char* functions, const char* subsets);
88
92 virtual void set_gravity(SmartPtr<CplUserData<MathVector<dim>, dim> > user);
96 virtual void set_density(SmartPtr<CplUserData<number,dim> > data);
99
100 protected:
101 template<typename TElem, typename CGeom, typename PGeom>
102 void prep_elem_loop(const ReferenceObjectID roid, const int si);
103
104 template<typename TElem, typename CGeom, typename PGeom>
105 void prep_elem(const LocalVector& u, GridObject* elem, const ReferenceObjectID roid, const MathVector<dim> vCornerCoords[]);
106
107 template<typename TElem, typename CGeom, typename PGeom>
108 void fsh_elem_loop();
109
110 template<typename TElem, typename CGeom, typename PGeom>
111 void add_jac_A_elem(LocalMatrix& J, const LocalVector& u, GridObject* elem, const MathVector<dim> vCornerCoords[]);
112
113 template<typename TElem, typename CGeom, typename PGeom>
114 void add_jac_M_elem(LocalMatrix& J, const LocalVector& u, GridObject* elem, const MathVector<dim> vCornerCoords[]);
115
116 template<typename TElem, typename CGeom, typename PGeom>
117 void add_def_A_elem(LocalVector& d, const LocalVector& u, GridObject* elem, const MathVector<dim> vCornerCoords[]);
118
119 template<typename TElem, typename CGeom, typename PGeom>
120 void add_def_M_elem(LocalVector& d, const LocalVector& u, GridObject* elem, const MathVector<dim> vCornerCoords[]);
121
122 template<typename TElem, typename CGeom, typename PGeom>
123 void add_rhs_elem(LocalVector& d, GridObject* elem, const MathVector<dim> vCornerCoords[]);
124
125 protected:
128
130 static const size_t _C_ = 0;
131
133 static const size_t _P_ = 1;
134
135 private:
139
143
149
152
156
160
164
170
174
175 protected:
177 template<typename TElem, typename CGeom, typename PGeom>
178 void ex_darcy_std(MathVector<dim> vValue[],
179 const MathVector<dim> vGlobIP[],
180 number time, int si,
181 const LocalVector& u,
182 GridObject* elem,
183 const MathVector<dim> vCornerCoords[],
184 const MathVector<CGeom::dim> vLocIP[],
185 const size_t nip,
186 bool bDeriv,
187 std::vector<std::vector<MathVector<dim> > > vvvDeriv[]);
188
190 template<typename TElem, typename CGeom, typename PGeom>
191 void ex_brine(number vValue[],
192 const MathVector<dim> vGlobIP[],
193 number time, int si,
194 const LocalVector& u,
195 GridObject* elem,
196 const MathVector<dim> vCornerCoords[],
197 const MathVector<CGeom::dim> vLocIP[],
198 const size_t nip,
199 bool bDeriv,
200 std::vector<std::vector<number> > vvvDeriv[]);
201
203 template<typename TElem, typename CGeom, typename PGeom>
204 void ex_brine_grad(MathVector<dim> vValue[],
205 const MathVector<dim> vGlobIP[],
206 number time, int si,
207 const LocalVector& u,
208 GridObject* elem,
209 const MathVector<dim> vCornerCoords[],
210 const MathVector<CGeom::dim> vLocIP[],
211 const size_t nip,
212 bool bDeriv,
213 std::vector<std::vector<MathVector<dim> > > vvvDeriv[]);
214
216 template<typename TElem, typename CGeom, typename PGeom>
217 void ex_pressure_grad(MathVector<dim> vValue[],
218 const MathVector<dim> vGlobIP[],
219 number time, int si,
220 const LocalVector& u,
221 GridObject* elem,
222 const MathVector<dim> vCornerCoords[],
223 const MathVector<CGeom::dim> vLocIP[],
224 const size_t nip,
225 bool bDeriv,
226 std::vector<std::vector<MathVector<dim> > > vvvDeriv[]);
227
235
236 public:
238 virtual void prepare_setting(const std::vector<LFEID>& vLfeID, bool bNonRegularGrid);
239
241 virtual bool use_hanging() const;
242
243 protected:
247
248 protected:
251 void register_all_funcs(const LFEID& vLfeID, const LFEID& pLfeID);
252 template<typename TElem, typename CGeom, typename PGeom> void register_func();
254};
255
257
258} // namespace d3f
259} // end namespace ug
260
261#endif /*__H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__DENSITY_DRIVEN_FLOW_FV_*/
number time() const
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< 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< 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_fv.h:73
static const size_t _P_
abbreviation for local function: pressure
Definition density_driven_flow_fv.h:133
void prep_elem_loop(const ReferenceObjectID roid, const int si)
Definition density_driven_flow_fv.cpp:619
virtual bool use_hanging() const
returns if hanging nodes are needed
Definition density_driven_flow_fv.cpp:111
virtual void set_porosity(SmartPtr< CplUserData< number, dim > > user)
Definition density_driven_flow_fv.cpp:123
void register_all_funcs(const LFEID &vLfeID, const LFEID &pLfeID)
virtual void set_density(SmartPtr< CplUserData< number, dim > > data)
Definition density_driven_flow_fv.cpp:174
DataImport< number, dim > m_imBrine_cscvf
Data import for brine mass fraction at scvf ips.
Definition density_driven_flow_fv.h:137
DataImport< MathVector< dim >, dim > m_imDarcyVel_cscvf
Data import for Darcy Velocity.
Definition density_driven_flow_fv.h:172
void add_def_M_elem(LocalVector &d, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv.cpp:1021
virtual void set_dispersion(SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > data)
Definition density_driven_flow_fv.cpp:200
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
Definition density_driven_flow_fv.cpp:441
DataImport< number, dim > m_imDensity_pscvf
Definition density_driven_flow_fv.h:169
DataImport< MathVector< dim >, dim > m_imPressureGrad_pscvf
Definition density_driven_flow_fv.h:142
void add_jac_M_elem(LocalMatrix &J, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv.cpp:962
DataImport< MathMatrix< dim, dim >, dim > m_imMolDiffusion_cscvf
Data import for molecular diffusion tensor.
Definition density_driven_flow_fv.h:158
virtual void set_viscosity(SmartPtr< CplUserData< number, dim > > user)
Definition density_driven_flow_fv.cpp:164
static const int dim
World dimension.
Definition density_driven_flow_fv.h:83
DataImport< number, dim > m_imViscosity_pscvf
Definition density_driven_flow_fv.h:163
DataImport< number, dim > m_imPorosity_pscvf
Definition density_driven_flow_fv.h:148
DataImport< MathVector< dim >, dim > m_imPressureGrad_cscvf
Data import for pressure gradient at scvf ips.
Definition density_driven_flow_fv.h:141
DataImport< number, dim > m_imDensity_pscv
Definition density_driven_flow_fv.h:167
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
Definition density_driven_flow_fv.cpp:530
DataImport< number, dim > m_imPorosity_cscv
Data import for the reaction term.
Definition density_driven_flow_fv.h:145
DensityDrivenFlowBase< TDomain > base_type
Base class type.
Definition density_driven_flow_fv.h:76
DataImport< number, dim > m_imDensity_cscvf
Definition density_driven_flow_fv.h:168
void prep_elem(const LocalVector &u, GridObject *elem, const ReferenceObjectID roid, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv.cpp:706
void register_func()
Definition density_driven_flow_fv.cpp:1113
LFEID m_p_lfeID
Definition density_driven_flow_fv.h:246
virtual void set_gravity(SmartPtr< CplUserData< MathVector< dim >, dim > > user)
Definition density_driven_flow_fv.cpp:135
void fsh_elem_loop()
Definition density_driven_flow_fv.cpp:700
DataImport< number, dim > m_imPorosity_pscv
Definition density_driven_flow_fv.h:146
LFEID m_c_lfeID
current shape function set
Definition density_driven_flow_fv.h:245
DataImport< MathMatrix< dim, dim >, dim > m_imPermeability_pscvf
Definition density_driven_flow_fv.h:155
DataImport< MathVector< dim >, dim > m_imConstGravity
Data import for gravity (must be constant in current implementation)
Definition density_driven_flow_fv.h:151
void add_jac_A_elem(LocalMatrix &J, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv.cpp:757
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
Definition density_driven_flow_fv.cpp:214
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
Definition density_driven_flow_fv.cpp:343
DataImport< MathMatrix< dim, dim >, dim > m_imMolDiffusion_pscvf
Definition density_driven_flow_fv.h:159
DensityDrivenFlowFV< TDomain > this_type
own type
Definition density_driven_flow_fv.h:79
virtual void set_permeability(SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > user)
Definition density_driven_flow_fv.cpp:154
virtual void set_molecular_diffusion(SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > user)
Definition density_driven_flow_fv.cpp:144
DataImport< number, dim > m_imViscosity_cscvf
Data import for viscosity.
Definition density_driven_flow_fv.h:162
void add_def_A_elem(LocalVector &d, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv.cpp:891
DataImport< MathMatrix< dim, dim >, dim > m_imPermeability_cscvf
Data import for permeability tensor.
Definition density_driven_flow_fv.h:154
DataImport< MathVector< dim >, dim > m_imDarcyVel_pscvf
Definition density_driven_flow_fv.h:173
DataImport< number, dim > m_imDensity_cscv
Data import for density.
Definition density_driven_flow_fv.h:166
DataImport< number, dim > m_imPorosity_cscvf
Definition density_driven_flow_fv.h:147
void add_rhs_elem(LocalVector &d, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition density_driven_flow_fv.cpp:1065
static const size_t _C_
abbreviation for local function: brine mass fraction
Definition density_driven_flow_fv.h:130
MathVector< dim > m_Gravity
constant Gravity, read in once
Definition density_driven_flow_fv.h:127
virtual void prepare_setting(const std::vector< LFEID > &vLfeID, bool bNonRegularGrid)
type of trial space for each function used
Definition density_driven_flow_fv.cpp:88
DataImport< MathVector< dim >, dim > m_imBrineGrad_cscvf
Definition density_driven_flow_fv.h:138
double number
ReferenceObjectID