Plugins
Loading...
Searching...
No Matches
fract_ddf_fv1.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: Dmitry Logashenko, Sabine Stichel
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/*
13 * fract_ddf_fv1.h - discretization of the density driven flow in porous media
14 * with fractures.
15 *
16 * Based on the modules by A. Vogel.
17 */
18
19#ifndef __H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__FRACT_DDF_FV1_
20#define __H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__FRACT_DDF_FV1_
21
22// ug4 headers
23
24#include "common/common.h"
25#include "lib_grid/lg_base.h"
27
34
35#ifdef UG_FOR_LUA
37#endif
38
39// d3f headers
40#include "../../extravol.h"
41#include "../../d3f_sss.h"
42
43namespace ug{
44namespace d3f{
45
48
50
63template <typename TDomain>
65 : public IElemDisc<TDomain>
66{
67private:
70
73
76
79
81 static const int dim = base_type::dim;
82
84 static const int low_dim = dim - 1;
85
88
91
94
97
100
102 static const size_t _C_ = 0;
103
105 static const size_t _P_ = 1;
106
107public:
108
111 (
112 const char* functions,
113 const char* subsets
114 );
116 (
117 const std::vector<std::string>& vFct,
118 const std::vector<std::string>& vSubset
119 );
120 void init();
121
122//---- Settings: ----
123public:
124
127 {
128 m_spFractManager = fract_manager;
129 }
130
133
135 void set_boussinesq_flow (bool bUse) {m_BoussinesqFlow = bUse;}
136
139
142 {
143 m_spUpwind = upwind;
144 }
145
148 {
149 // remove old data
151 if (oldData.valid())
152 {
153 m_exFractDarcyVel->remove_needed_data(oldData);
154 m_exOrthoFractDarcyVel->remove_needed_data(oldData);
155 }
156 oldData = m_imDensityIP.data();
157 if (oldData.valid())
158 {
159 m_exFractDarcyVel->remove_needed_data(oldData);
160 m_exOrthoFractDarcyVel->remove_needed_data(oldData);
161 }
162
163 // connect to import
166 if (m_spVolStabData.valid())
168 else
170
171 // reset the data in the old density
173
174 // darcy velocity depends on density
175 m_exFractDarcyVel->add_needed_data(data);
176 m_exOrthoFractDarcyVel->add_needed_data(data);
177 }
179 {
181 }
183 {
184 // remove old data
186 if (oldData.valid())
187 {
188 m_exFractDarcyVel->remove_needed_data(oldData);
189 m_exOrthoFractDarcyVel->remove_needed_data(oldData);
190 }
191 oldData = m_imViscosityIP.data();
192 if (oldData.valid())
193 {
194 m_exFractDarcyVel->remove_needed_data(oldData);
195 m_exOrthoFractDarcyVel->remove_needed_data(oldData);
196 }
197
198 // connect to import
201
202 // darcy velocity depends on viscosity
203 m_exFractDarcyVel->add_needed_data(user);
204 m_exOrthoFractDarcyVel->add_needed_data(user);
205
206 }
208 {
210 }
212 {
213 m_imConstGravity.set_data(user);
214 }
215 void set_gravity(const std::vector<number>& vGravity)
216 {
218 }
219
226 {
228 }
229#ifdef UG_FOR_LUA
230 void set_porosity(const char* fctName)
231 {
233 }
235 {
237 }
238#endif
239
241
243 {
244 m_imPermeability.set_data(user);
245 }
250#ifdef UG_FOR_LUA
251 void set_permeability(const char* fctName)
252 {
254 }
256 {
258 }
259#endif
260
269#ifdef UG_FOR_LUA
270 void set_molecular_diffusion(const char* fctName)
271 {
273 }
275 {
277 }
278#endif
279
281
287 {
289 }
290#ifdef UG_FOR_LUA
291 void set_aperture(const char* fctName)
292 {
294 }
296 {
298 }
299#endif
300
309#ifdef UG_FOR_LUA
310 void set_fract_permeability(const char* fctName)
311 {
313 }
315 {
317 }
318#endif
319
328#ifdef UG_FOR_LUA
329 void set_orthofract_permeability(const char* fctName)
330 {
332 }
334 {
336 }
337#endif
338
347#ifdef UG_FOR_LUA
348 void set_fract_molecular_diffusion(const char* fctName)
349 {
351 }
353 {
355 }
356#endif
357
366#ifdef UG_FOR_LUA
367 void set_orthofract_molecular_diffusion(const char* fctName)
368 {
370 }
372 {
374 }
375#endif
376
379
382
385 {
386 m_imOldDensityCo.set_data (volStabData.valid()? m_imDensityCo.user_data() : SPNULL);
387 m_spVolStabData = volStabData;
388 }
389
392
395
398
401
402//---- Local discretization interface: ----
403protected:
404
406 virtual void prepare_setting
407 (
408 const std::vector<LFEID> & vLfeID,
409 bool bNonRegular
410 );
411
412//---- Assembling functions: ----
413protected:
414
415 virtual void prep_assemble_loop();
416
417 template <typename TElem>
418 void prepare_element_loop(ReferenceObjectID roid, int si);
419
420 template <typename TElem>
421 void prepare_element(const LocalVector& u, GridObject* elem, ReferenceObjectID roid, const position_type vCornerCoords[]);
422
423 template <typename TElem>
424 void finish_element_loop();
425
426 template <typename TElem>
427 void ass_JA_elem(LocalMatrix& J, const LocalVector& u, GridObject* elem, const position_type vCornerCoords[]);
428
429 template <typename TElem>
430 void ass_JM_elem(LocalMatrix& J, const LocalVector& u, GridObject* elem, const position_type vCornerCoords[]);
431
432 template <typename TElem>
433 void ass_dA_elem(LocalVector& d, const LocalVector& u, GridObject* elem, const position_type vCornerCoords[]);
434
435 template <typename TElem>
436 void ass_dM_elem(LocalVector& d, const LocalVector& u, GridObject* elem, const position_type vCornerCoords[]);
437
438 template <typename TElem>
439 void ass_rhs_elem(LocalVector& d, GridObject* elem, const position_type vCornerCoords[]);
440
441 template <typename TElem>
442 void ass_sss_dA_elem(LocalVector& d, const LocalVector& u, TElem* pElem, size_t co, number intensity, number concentration);
443
444 template <typename TElem>
445 void ass_sss_JA_elem(LocalMatrix& J, const LocalVector& u, TElem* pElem, size_t co, number intensity, number concentration);
446
448 {
449 return m_spVolStabData.valid (); // the stabilization requires the old solution
450 }
451
452//---- Assembling functions for bulk medium: ----
453private:
454
455 template <typename TElem>
456 inline void bulk_prepare_element_loop(ReferenceObjectID roid, int si);
457
458 template <typename TElem>
459 inline void bulk_prepare_element(const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
460
461 template <typename TElem>
462 inline void bulk_ass_JA_elem(LocalMatrix& J, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
463
464 template <typename TElem>
465 inline void bulk_ass_JM_elem(LocalMatrix& J, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
466
467 template <typename TElem>
468 inline void bulk_ass_dA_elem(LocalVector& d, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
469
470 template <typename TElem>
471 inline void bulk_ass_dM_elem(LocalVector& d, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
472
473 template <typename TElem>
474 inline void bulk_ass_rhs_elem(LocalVector& d, TElem* elem, const position_type vCornerCoords[]);
475
476//---- Assembling functions for fractures: ----
477private:
478
479 template <typename TElem>
480 inline void fract_prepare_element_loop(ReferenceObjectID roid, int si);
481
482 template <typename TElem>
483 inline void fract_prepare_element(const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
484
485 template <typename TElem>
486 inline void fract_ass_JA_elem(LocalMatrix& J, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
487
488 template <typename TElem>
489 inline void fract_bulk_ass_JA_elem(LocalMatrix& J, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
490
491 template <typename TElem>
492 inline void fract_ass_JM_elem(LocalMatrix& J, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
493
494 template <typename TElem>
495 inline void fract_ass_dA_elem(LocalVector& d, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
496
497 template <typename TElem>
498 inline void fract_bulk_ass_dA_elem(LocalVector& d, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
499
500 template <typename TElem>
501 inline void fract_ass_dM_elem(LocalVector& d, const LocalVector& u, TElem* elem, const position_type vCornerCoords[]);
502
503 template <typename TElem>
504 inline void fract_ass_rhs_elem(LocalVector& d, TElem* elem, const position_type vCornerCoords[]);
505
506//---- Computation of the Darcy velocity: ----
507protected:
508
509 template<typename TFVGeom, typename TConsGravity>
510 inline void compute_ip_Darcy_velocity
511 (
512 MathVector<dim>& Vel,
513 size_t ip,
514 const TFVGeom& bulk_geo,
515 TConsGravity& ConsGravityMethod,
516 MathVector<TFVGeom::dim> vConsGravity[],
517 number vPressure[],
519 );
520
521 template<typename TFVGeom, typename TConsGravity, size_t maxCorners>
523 (
524 MathVector<dim>& Vel,
525 MathVector<dim> Vel_c[],
526 MathVector<dim> Vel_p[],
527 size_t ip,
528 const TFVGeom& geo,
529 TConsGravity& ConsGravityMethod,
530 MathVector<TFVGeom::dim> vConsGravity_c[][maxCorners],
531 number vPressure[],
533 number Viscosity_c[]
534 );
535
536//---- Export parameters: ----
537private:
538 template <typename TElem>
539 void ex_brine
540 (
541 number vValue[],
542 const MathVector<dim> vGlobIP[],
543 number time, int si,
544 const LocalVector& u,
545 GridObject* elem,
546 const MathVector<dim> vCornerCoords[],
547 const MathVector<dim> vLocIP[],
548 const size_t nip,
549 bool bDeriv,
550 std::vector<std::vector<number> > vvvDeriv[]
551 );
552
553 template <typename TElem>
554 void ex_pressure
555 (
556 number vValue[],
557 const MathVector<dim> vGlobIP[],
558 number time, int si,
559 const LocalVector& u,
560 GridObject* elem,
561 const MathVector<dim> vCornerCoords[],
562 const MathVector<dim> vLocIP[],
563 const size_t nip,
564 bool bDeriv,
565 std::vector<std::vector<number> > vvvDeriv[]
566 );
567
568 template <typename TElem>
569 void ex_darcy_fract
570 (
571 MathVector<dim> vValue[],
572 const MathVector<dim> vGlobIP[],
573 number time, int si,
574 const LocalVector& u,
575 GridObject* elem,
576 const MathVector<dim> vCornerCoords[],
577 const MathVector<dim> vLocIP[],
578 const size_t nip,
579 bool bDeriv,
580 std::vector<std::vector<MathVector<dim> > > vvvDeriv[]
581 );
582
583 template <typename TElem>
585 (
586 number vValue[],
587 const MathVector<dim> vGlobIP[],
588 number time, int si,
589 const LocalVector& u,
590 GridObject* elem,
591 const MathVector<dim> vCornerCoords[],
592 const MathVector<dim> vLocIP[],
593 const size_t nip,
594 bool bDeriv,
595 std::vector<std::vector<number> > vvvDeriv[]
596 );
597
598//---- Registration of the template functions: ----
599private:
600
604 template< typename TElem > void operator() (TElem &)
605 {m_pThis->register_loc_discr_func<TElem> ();}
606 };
607
608 template <typename TElem>
610
611private:
612
613// Global parameters (for all subdomains):
620
621// Specific parameters of subdomains:
623
624// Specific parameters for full-dimensional subdomains:
627
628// Specific parameters for low-dimensional subdomains (fractures):
634
637
638// Parameters of the numerical methods of the discretization:
643
646
649
652
655
658
663
665
666// Temporary data used in the assembling
668
682};
683
685
686} // namespace d3f
687} // end namespace ug
688
689#include "fract_ddf_fv1_impl.h"
690
691#endif /* __H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__FRACT_DDF_FV1_ */
692
693/* End of File */
bool valid() const
void set_data(SmartPtr< CplUserData< TData, dim > > spData)
SmartPtr< ICplUserData< dim > > data()
SmartPtr< CplUserData< TData, dim > > user_data()
static const size_t maxLayerSideCorners
grid_dim_traits< dim >::side_type side_type
static const size_t maxNumSCVF
number time() const
TDomain::position_type position_type
static const int dim
Definition d3f_sss.h:317
Definition extravol.h:27
FV-discretization of the density-driven flow in porous media with fractures.
Definition fract_ddf_fv1.h:66
virtual void prep_assemble_loop()
called once bevore assembling
Definition fract_ddf_fv1_impl.h:64
SmartPtr< IConvectionShapes< dim > > m_spUpwind
upwind method
Definition fract_ddf_fv1.h:642
void set_permeability(number val)
Definition fract_ddf_fv1.h:246
void ex_darcy_ortho_fract(number vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< number > > vvvDeriv[])
export parameter for the orthogonal Darcy velocity
Definition fract_ddf_fv1_impl.h:2147
static const size_t _P_
abbreviation for local function: pressure
Definition fract_ddf_fv1.h:105
void set_molecular_diffusion(number val)
Definition fract_ddf_fv1.h:265
void fract_ass_JM_elem(LocalMatrix &J, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the mass matrix of a time-dependent problem on a fracture element
Definition fract_ddf_fv1_impl.h:1840
void bulk_ass_dM_elem(LocalVector &d, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the mass part of the defect of a time-dependent problem on a bulk element
Definition fract_ddf_fv1_impl.h:1653
SmartPtr< CplUserData< number, dim > > OrthoDarcyVel()
returns the export parameter of the orthogonal Darcy velocity in fracture
Definition fract_ddf_fv1.h:400
void ass_JA_elem(LocalMatrix &J, const LocalVector &u, GridObject *elem, const position_type vCornerCoords[])
computes the local stiffness matrix
Definition fract_ddf_fv1_impl.h:890
virtual void prepare_setting(const std::vector< LFEID > &vLfeID, bool bNonRegular)
check type of the grid and the trial space
Definition fract_ddf_fv1_impl.h:39
DataImport< number, dim > m_imPorosity
porosity (constant per element)
Definition fract_ddf_fv1.h:622
void set_viscosity(SmartPtr< CplUserData< number, dim > > user)
Definition fract_ddf_fv1.h:182
void set_fract_manager(SmartPtr< fract_manager_type > fract_manager)
sets the fracture manager
Definition fract_ddf_fv1.h:126
void bulk_ass_dA_elem(LocalVector &d, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the stiffness part of the local defect on a bulk element
Definition fract_ddf_fv1_impl.h:466
DataImport< number, dim > m_imOldDensityCo
old density of the fluid phase (at the corners)
Definition fract_ddf_fv1.h:619
void register_loc_discr_func()
registers the local assembler functions for a given element
Definition fract_ddf_fv1_impl.h:2259
void set_boussinesq(bool bUse)
whether to use boussinesq approximation in both the equations
Definition fract_ddf_fv1.h:138
void ass_dA_elem(LocalVector &d, const LocalVector &u, GridObject *elem, const position_type vCornerCoords[])
computes the stiffness part of the local defect
Definition fract_ddf_fv1_impl.h:441
void fract_bulk_ass_JA_elem(LocalMatrix &J, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the local stiffness matrix of the fracture-bulk interaction terms on a fracture element
Definition fract_ddf_fv1_impl.h:1379
void ex_brine(number vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< number > > vvvDeriv[])
export parameter for the concentration (to compute density and viscosity)
Definition fract_ddf_fv1_impl.h:1920
DataImport< number, dim > m_imDensityCo
density of the fluid phase (at the corners)
Definition fract_ddf_fv1.h:614
MathVector< dim > m_elem_loc_scvf[TFractFVGeom::maxNumSCVF]
local ip's in a fracture element
Definition fract_ddf_fv1.h:681
void bulk_prepare_element(const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
prepares a given bulk element for assembling
Definition fract_ddf_fv1_impl.h:255
void bulk_ass_JA_elem(LocalMatrix &J, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the local stiffness matrix on a bulk element
Definition fract_ddf_fv1_impl.h:913
DataImport< MathVector< dim >, dim > m_imConstGravity
gravity (must be constant)
Definition fract_ddf_fv1.h:618
void set_orthofract_molecular_diffusion(number val)
Definition fract_ddf_fv1.h:362
SmartPtr< DataExport< number, dim > > m_exPressure
Export parameter for the pressure.
Definition fract_ddf_fv1.h:651
SmartPtr< CplUserData< number, dim > > brine()
returns the export parameter of the brine mass fraction
Definition fract_ddf_fv1.h:391
void fract_prepare_element_loop(ReferenceObjectID roid, int si)
prepares the loop over the elements: the 'fracture' version
Definition fract_ddf_fv1_impl.h:183
void bulk_prepare_element_loop(ReferenceObjectID roid, int si)
prepares the loop over the elements: the 'bulk' version
Definition fract_ddf_fv1_impl.h:133
SmartPtr< CplUserData< MathVector< dim >, dim > > DarcyVel()
returns the export parameter of the Darcy velocity in fracture
Definition fract_ddf_fv1.h:397
void set_upwind(SmartPtr< IConvectionShapes< dim > > upwind)
sets the upwind for the transport equation
Definition fract_ddf_fv1.h:141
void bulk_ass_JM_elem(LocalMatrix &J, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the mass matrix of a time-dependent problem on a bulk element
Definition fract_ddf_fv1_impl.h:1772
DataImport< MathMatrix< dim, dim >, dim > m_imDiffusion
molecular diffusion times tortuosity in the fluid phase (constant per element)
Definition fract_ddf_fv1.h:626
size_t m_innerSideCo[maxFractSideCorners]
inner side corner idx -> elem. corner idx
Definition fract_ddf_fv1.h:675
void set_boussinesq_flow(bool bUse)
whether to use boussinesq approximation for flow equation
Definition fract_ddf_fv1.h:135
void compute_ip_Darcy_velocity(MathVector< dim > &Vel, size_t ip, const TFVGeom &bulk_geo, TConsGravity &ConsGravityMethod, MathVector< TFVGeom::dim > vConsGravity[], number vPressure[], number Viscosity)
computes the Darcy velocity (not scaled with the permeability)
Definition fract_ddf_fv1_impl.h:413
SmartPtr< CplUserData< number, dim > > pressure()
returns the export parameter of the pressure
Definition fract_ddf_fv1.h:394
DataImport< MathVector< dim >, dim > m_imFractDarcyVelIP
Data import for Darcy Velocity.
Definition fract_ddf_fv1.h:645
void set_orthofract_molecular_diffusion(SmartPtr< CplUserData< number, dim > > user)
Definition fract_ddf_fv1.h:358
void set_sss_manager(SmartPtr< DDSingularSourcesAndSinks< dim > > sss_mngr)
set singular sources and sinks
Definition fract_ddf_fv1.h:378
static const int dim
world ('full') dimension
Definition fract_ddf_fv1.h:81
void fract_bulk_ass_dA_elem(LocalVector &d, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the stiffness fracture-bulk interaction terms of the local defect on a fracture element
Definition fract_ddf_fv1_impl.h:758
void finish_element_loop()
finalizes the loop over the elements
Definition fract_ddf_fv1_impl.h:227
MathVector< dim > m_elem_loc_coe
local coordinates of the mass center of a fracture element
Definition fract_ddf_fv1.h:680
SmartPtr< DataExport< MathVector< dim >, dim > > m_exFractDarcyVel
Export parameter for the Darcy velocity in the fracture.
Definition fract_ddf_fv1.h:654
DataImport< number, dim > m_imViscosityCo
viscosity of the fluid phase (at the corners)
Definition fract_ddf_fv1.h:616
virtual bool requests_local_time_series()
Definition fract_ddf_fv1.h:447
void set_viscosity(number val)
Definition fract_ddf_fv1.h:207
void set_orthofract_permeability(number val)
Definition fract_ddf_fv1.h:324
bool m_isFracture
if the current subset is registered in the fracture manager
Definition fract_ddf_fv1.h:667
void set_molecular_diffusion(SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > user)
Definition fract_ddf_fv1.h:261
void set_boussinesq_transport(bool bUse)
whether to use boussinesq approximation for transport equation
Definition fract_ddf_fv1.h:132
SmartPtr< DataExport< number, dim > > m_exBrine
Export parameter for the brine mass fraction.
Definition fract_ddf_fv1.h:648
size_t m_outerSideCo[maxFractSideCorners]
outer side corner idx -> elem. corner idx
Definition fract_ddf_fv1.h:676
DataImport< MathMatrix< dim, dim >, dim > m_imPermeability
permeability (constant per element)
Definition fract_ddf_fv1.h:625
size_t m_innerFractSideIdx
index of the inner side in the ref. elem.
Definition fract_ddf_fv1.h:673
side_type * m_innerFractSide
inner side of the fracture element
Definition fract_ddf_fv1.h:671
void fract_ass_JA_elem(LocalMatrix &J, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the local stiffness matrix on a fracture element
Definition fract_ddf_fv1_impl.h:1166
void ass_sss_JA_elem(LocalMatrix &J, const LocalVector &u, TElem *pElem, size_t co, number intensity, number concentration)
assembles a singular source or sink in the jacobian
Definition fract_ddf_fv1_impl.h:1589
void compute_J_ip_Darcy_velocity(MathVector< dim > &Vel, MathVector< dim > Vel_c[], MathVector< dim > Vel_p[], size_t ip, const TFVGeom &geo, TConsGravity &ConsGravityMethod, MathVector< TFVGeom::dim > vConsGravity_c[][maxCorners], number vPressure[], number Viscosity, number Viscosity_c[])
computes the derivatives of the Darcy velocity (not scaled with the permeability)
Definition fract_ddf_fv1_impl.h:852
void set_fract_molecular_diffusion(number val)
Definition fract_ddf_fv1.h:343
void ass_rhs_elem(LocalVector &d, GridObject *elem, const position_type vCornerCoords[])
computes the right-hand side due to the sources
Definition fract_ddf_fv1_impl.h:1903
SmartPtr< DDSingularSourcesAndSinks< dim > > sss_manager()
get singular sources and sinks
Definition fract_ddf_fv1.h:381
void fract_ass_dA_elem(LocalVector &d, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the stiffness part of the local defect on a fracture element
Definition fract_ddf_fv1_impl.h:627
static const int low_dim
manifold ('low') dimension
Definition fract_ddf_fv1.h:84
void set_density(number val)
Definition fract_ddf_fv1.h:178
SmartPtr< DataExport< number, dim > > m_exOrthoFractDarcyVel
Export parameter for the Darcy velocity orthogonal to the fracture.
Definition fract_ddf_fv1.h:657
MathVector< dim > m_unitOuterNormal
unit outer normal to the fracture
Definition fract_ddf_fv1.h:679
DegeneratedLayerManager< dim > fract_manager_type
fracture manager type
Definition fract_ddf_fv1.h:93
void set_gravity(const std::vector< number > &vGravity)
Definition fract_ddf_fv1.h:215
void prepare_element_loop(ReferenceObjectID roid, int si)
prepares the loop over the elements: checks whether the parameters are set, ...
Definition fract_ddf_fv1_impl.h:82
void set_fract_permeability(SmartPtr< CplUserData< number, dim > > user)
Definition fract_ddf_fv1.h:301
base_type::position_type position_type
position type
Definition fract_ddf_fv1.h:78
SmartPtr< fract_manager_type > m_spFractManager
degenerated fracture manager (may be SPNULL)
Definition fract_ddf_fv1.h:639
FractDDF_FV1< TDomain > this_type
own type
Definition fract_ddf_fv1.h:72
fract_manager_type::side_type side_type
type of the sides of elements (als low-dimensional fracture elements)
Definition fract_ddf_fv1.h:96
side_type * m_outerFractSide
outer side of the fracture element
Definition fract_ddf_fv1.h:672
void ass_JM_elem(LocalMatrix &J, const LocalVector &u, GridObject *elem, const position_type vCornerCoords[])
computes the mass matrix of a time-dependent problem
Definition fract_ddf_fv1_impl.h:1752
static const size_t _C_
abbreviation for local function: brine mass fraction
Definition fract_ddf_fv1.h:102
number m_orthGravity
projection of the gravity to the outer normal of the fracture element
Definition fract_ddf_fv1.h:678
size_t m_outerFractSideIdx
index of the outer side in the ref. elem.
Definition fract_ddf_fv1.h:674
DimFV1Geometry< low_dim, dim > TFractFVGeom
FV geometry for the fractures.
Definition fract_ddf_fv1.h:87
domain_traits< dim >::DimElemList AssembleElemList
list of element types for assembling
Definition fract_ddf_fv1.h:90
void ex_darcy_fract(MathVector< dim > vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< MathVector< dim > > > vvvDeriv[])
export parameter for the Darcy velocity in the fracture
Definition fract_ddf_fv1_impl.h:2022
DataImport< number, dim > m_imAperture
the fracture width (constant per element)
Definition fract_ddf_fv1.h:629
void ass_dM_elem(LocalVector &d, const LocalVector &u, GridObject *elem, const position_type vCornerCoords[])
computes the mass part of the defect of a time-dependent problem
Definition fract_ddf_fv1_impl.h:1633
void set_volume_stabilization(SmartPtr< FlowVolStabData< TDomain > > volStabData)
set volume stabilization
Definition fract_ddf_fv1.h:384
SmartPtr< DDSingularSourcesAndSinks< dim > > m_sss_mngr
singular sources and sinks manager
Definition fract_ddf_fv1.h:636
IElemDisc< TDomain > base_type
base class type
Definition fract_ddf_fv1.h:69
void ex_pressure(number vValue[], const MathVector< dim > vGlobIP[], number time, int si, const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< dim > vLocIP[], const size_t nip, bool bDeriv, std::vector< std::vector< number > > vvvDeriv[])
export parameter for the pressure
Definition fract_ddf_fv1_impl.h:1971
bool m_BoussinesqFlow
whether to use the Boussinesq approximation in the flow eq.
Definition fract_ddf_fv1.h:640
MathVector< dim > m_Gravity
the gravity vector
Definition fract_ddf_fv1.h:664
bool m_bVolStabDataActive
Whether the volume stabilization is active (i.e. m_spVolStabData is not SPNULL and active)
Definition fract_ddf_fv1.h:662
void init()
Definition fract_ddf_fv1_impl.h:2307
void fract_ass_rhs_elem(LocalVector &d, TElem *elem, const position_type vCornerCoords[])
void set_orthofract_permeability(SmartPtr< CplUserData< number, dim > > user)
Definition fract_ddf_fv1.h:320
void bulk_ass_rhs_elem(LocalVector &d, TElem *elem, const position_type vCornerCoords[])
bool m_BoussinesqTransport
whether to use the Boussinesq approximation in the transport eq.
Definition fract_ddf_fv1.h:641
base_type::domain_type domain_type
domain type
Definition fract_ddf_fv1.h:75
void fract_prepare_element(const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
prepares a given fracture element for assembling
Definition fract_ddf_fv1_impl.h:294
size_t m_assCo[2 *maxFractSideCorners]
correspondence of the corners of the sides
Definition fract_ddf_fv1.h:677
void fract_ass_dM_elem(LocalVector &d, const LocalVector &u, TElem *elem, const position_type vCornerCoords[])
computes the mass part of the defect of a time-dependent problem on a fracture element
Definition fract_ddf_fv1_impl.h:1705
DataImport< number, dim > m_imDensityIP
density of the fluid phase (at the ip's)
Definition fract_ddf_fv1.h:615
DataImport< number, dim > m_imOrthoDiffusion
molecular diffusion times tortuosity at the fracture-bulk interface (constant per element)
Definition fract_ddf_fv1.h:633
DataImport< number, dim > m_imFractDiffusion
molecular diffusion times tortuosity along the fracture (constant per element)
Definition fract_ddf_fv1.h:632
void prepare_element(const LocalVector &u, GridObject *elem, ReferenceObjectID roid, const position_type vCornerCoords[])
prepares a given element for assembling
Definition fract_ddf_fv1_impl.h:235
DataImport< number, dim > m_imOrthoPermeability
scalar permeability at the fracture-bulk interface (constant per element)
Definition fract_ddf_fv1.h:631
static const size_t maxFractSideCorners
max. number of corners of non-degenerated sides
Definition fract_ddf_fv1.h:99
SmartPtr< FlowVolStabData< TDomain > > m_spVolStabData
Volume stabilization.
Definition fract_ddf_fv1.h:660
void ass_sss_dA_elem(LocalVector &d, const LocalVector &u, TElem *pElem, size_t co, number intensity, number concentration)
assembles a singular source or sink in the defect
Definition fract_ddf_fv1_impl.h:1556
DataImport< number, dim > m_imViscosityIP
viscosity of the fluid phase (at the ip's)
Definition fract_ddf_fv1.h:617
void set_aperture(number val)
Definition fract_ddf_fv1.h:286
void set_porosity(SmartPtr< CplUserData< number, dim > > user)
set Specific parameters of subdomains:
Definition fract_ddf_fv1.h:221
void set_fract_permeability(number val)
Definition fract_ddf_fv1.h:305
void set_gravity(SmartPtr< CplUserData< MathVector< dim >, dim > > user)
Definition fract_ddf_fv1.h:211
void set_fract_molecular_diffusion(SmartPtr< CplUserData< number, dim > > user)
Definition fract_ddf_fv1.h:339
TFractFVGeom * m_pFractGeo
FV geometry object of fracture elements.
Definition fract_ddf_fv1.h:669
void set_density(SmartPtr< CplUserData< number, dim > > data)
set the Global parameters (for all subdomains):
Definition fract_ddf_fv1.h:147
DataImport< number, dim > m_imFractPermeability
scalar permeability along the fracture (constant per element)
Definition fract_ddf_fv1.h:630
void set_porosity(number val)
Definition fract_ddf_fv1.h:225
void set_aperture(SmartPtr< CplUserData< number, dim > > user)
set Specific parameters for low-dimensional subdomains (fractures):
Definition fract_ddf_fv1.h:282
void set_permeability(SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > user)
set Specific parameters for full-dimensional subdomains (bulk medium):
Definition fract_ddf_fv1.h:242
size_t m_numFractCo
number of corners of the fracture side
Definition fract_ddf_fv1.h:670
function util d3f parse Viscosity(ViscosityDesc, w)
const NullSmartPtr SPNULL
double number
ReferenceObjectID
SmartPtr< T, FreePolicy > make_sp(T *inst)
Definition fract_ddf_fv1.h:601
this_type * m_pThis
Definition fract_ddf_fv1.h:603
void operator()(TElem &)
Definition fract_ddf_fv1.h:604
RegisterLocalDiscr(this_type *pThis)
Definition fract_ddf_fv1.h:602