Plugins
Loading...
Searching...
No Matches
fract_dimadapt.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: 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 * A tool for the dimension-adaptive fracture representation
14 */
15#ifndef __H__UG__PLUGINS__D3F__FRACT_DIMADAPT__
16#define __H__UG__PLUGINS__D3F__FRACT_DIMADAPT__
17
18#include <map>
19#include <vector>
20
21// ug4 headers
22#include "common/common.h"
28
29namespace ug {
30namespace d3f {
31
32template <typename TDomain,typename TAlgebra>
34{
35public:
37 typedef TDomain domain_type;
38
40 typedef typename domain_type::subset_handler_type subset_handler_type;
41
43 static const int dim = domain_type::dim;
44
46 static const int low_dim = dim - 1;
47
50
54
57
60
63
65 typedef typename domain_type::position_accessor_type position_accessor_type;
66
69
71 static const size_t maxLayerSideCorners = maxElemCorners / 2;
72
75 {
76 F_NONE = -1, //only auxilliary
77 F_OUTER = 0, //only auxilliary
78 F_INNER = 1, //only auxilliary
79 F_MID = 2,
80 F_BND = 3,
81 F_VERT = 4,
82 F_CORNER = 5 //short end of the fracture (triangle end point)
83 };
84
85public:
88 (
90 const char* ss_name,
91 const std::vector<number> normal,
92 number aperture,
93 bool shift
94 );
95
97 virtual ~FractDimadapt ();
98
101 number rho_pw,
102 number rho_pb,
103 const char* density_type
104 ){
105 m_density_type = density_type;
106 m_rho_pw = rho_pw;
107 m_rho_pb = rho_pb;
108 }
109
112 number zero_viscosity,
113 const char* viscosity_type
114 ){
115 m_viscosity_type = viscosity_type;
116 m_zero_viscosity = zero_viscosity;
117 }
118
120 void add_gravity (const std::vector<number> gravity){
121 for (int d=0;d < dim;d++)
122 m_Gravity[d] = gravity[d];
123 }
125 number perm_f,
126 number perm_m
127 ){
128 m_permeability_f = perm_f;
129 m_permeability_m = perm_m;
130 }
131
133 template <typename TGridFunction> void get_ave_val (
134 const std::vector<number> eval_point,
135 TGridFunction& u,
136 number time
137 );
138
140 template <typename TGridFunction> number evaluate_criterion(
141 TGridFunction& u,
143 number omega_theta,
144 number time
145 );
146
148 template <typename TGridFunction> void check_transfer(
149 TGridFunction& u,
151 number omega_theta,
152 number delta,
153 number time
154 );
155
158
161
163 template <typename TGridFunction> void transfer_full_to_low (
164 TGridFunction& u
165 );
167 template <typename TGridFunction> void transfer_low_to_full (
168 TGridFunction& u
169 );
170
174 template <typename TGridFunction> void convert_end_triangles_to_quadris (
175 TGridFunction& u,
177 );
178
182 );
183
184
185protected:
187 void mark_vertices ();
188
191
194
197 double bnd[2][2],
198 double mid[2],
199 MathVector<dim> bndpoint[2],
200 number param[2][3] //return value
201 );
203 void density_func (
204 number c,
205 number &rho,
206 number &d_rho
207 );
208
210 void viscosity_func (
211 number c,
212 number &mu,
213 number &d_mu
214 );
215
217 int vert_mark (Vertex * vrt) {return m_aaVertAuxMarks [vrt];};
218
220 int edge_mark (Edge * edge) {return m_aaEdgeAuxMarks [edge];};
221
224
225
226private:
229
232
234
237
240
242 static const size_t max_number_levels = 100;
243 static const size_t max_number_fracture_midnodes = 10000;
244 static const size_t max_number_fracture_layers = 100;
245
253 int m_FractureIsFullDimensional; //1 for full, 0 for low
254
260 const char* m_density_type;
262 const char* m_viscosity_type;
265
270 //todo: for 3d add FaceMarks
271
274
276 MultiGrid::AttachmentAccessor<Vertex, mark_attachment_type> m_aaVertAuxMarks;
277 MultiGrid::AttachmentAccessor<Edge, mark_attachment_type> m_aaEdgeAuxMarks;
278 MultiGrid::AttachmentAccessor<Vertex, shift_attachment_type> m_aaVertexShift;
279
280
281 // Message hub callback id's for the notifications of the changes of the grid:
282 MessageHub::SPCallbackId m_spGridAdaptionCallbackID;
283 MessageHub::SPCallbackId m_spGridDistributionCallbackID;
284};
285
286} // namespace d3f
287} // end namespace ug
288
289#include "fract_dimadapt_impl.h"
290
291#endif // __H__UG__PLUGINS__D3F__FRACT_DIMADAPT__
292
293/* End of File */
Definition fract_dimadapt.h:34
MultiGrid::AttachmentAccessor< Vertex, shift_attachment_type > m_aaVertexShift
Definition fract_dimadapt.h:278
SmartPtr< domain_type > m_dom
Definition fract_dimadapt.h:233
Attachment< MathVector< dim > > shift_attachment_type
Definition fract_dimadapt.h:53
Attachment< signed char > mark_attachment_type
type of the attachment for the marks and the shift
Definition fract_dimadapt.h:52
void transfer_full_to_low(TGridFunction &u)
transfer of solution
Definition fract_dimadapt_impl.h:1116
void mark_vertices()
Marks the inner fracture vertices.
Definition fract_dimadapt_impl.h:144
MessageHub::SPCallbackId m_spGridDistributionCallbackID
Definition fract_dimadapt.h:283
t_grid_object_mark
Marks for the grid (vertices, edges)
Definition fract_dimadapt.h:75
@ F_NONE
Definition fract_dimadapt.h:76
@ F_INNER
Definition fract_dimadapt.h:78
@ F_BND
Definition fract_dimadapt.h:80
@ F_OUTER
Definition fract_dimadapt.h:77
@ F_MID
Definition fract_dimadapt.h:79
@ F_CORNER
Definition fract_dimadapt.h:82
@ F_VERT
Definition fract_dimadapt.h:81
MultiGrid::AttachmentAccessor< Edge, mark_attachment_type > m_aaEdgeAuxMarks
Definition fract_dimadapt.h:277
DimFV1Geometry< low_dim, dim > TFractFVGeom
FV geometry for the fractures.
Definition fract_dimadapt.h:49
void convert_end_quadris_to_triangles(DegeneratedLayerManager< TDomain::dim > *fractManager)
this function converts degenerated end quadrilaterals to traingles
Definition fract_dimadapt_impl.h:2347
static const size_t maxLayerSideCorners
max. number of corners of non-degenerated sides
Definition fract_dimadapt.h:71
void convert_end_triangles_to_quadris(TGridFunction &u, DegeneratedLayerManager< TDomain::dim > *fractManager)
Definition fract_dimadapt_impl.h:1904
MathVector< dim > vert_shift(Vertex *vrt)
Returs the shift of the fracture bnd vertex.
Definition fract_dimadapt.h:223
static const size_t max_number_levels
Help for decalaration.
Definition fract_dimadapt.h:242
void add_density(number rho_pw, number rho_pb, const char *density_type)
Add specifics for the density function.
Definition fract_dimadapt.h:100
static const int low_dim
manifold ('low') dimension
Definition fract_dimadapt.h:46
number m_rho_pw
Definition fract_dimadapt.h:259
static const size_t max_number_fracture_midnodes
Definition fract_dimadapt.h:243
const char * m_density_type
Definition fract_dimadapt.h:260
number evaluate_criterion(TGridFunction &u, DegeneratedLayerManager< TDomain::dim > *fractManager, number omega_theta, number time)
Computes the criterion (Dissertation Stichel Section 7.2.1)
Definition fract_dimadapt_impl.h:715
MessageHub::SPCallbackId m_spGridAdaptionCallbackID
Definition fract_dimadapt.h:282
element_type * CornerTriangleList[max_number_levels][4]
Definition fract_dimadapt.h:252
void grid_distribution_callback(const GridMessage_Distribution &msg)
Called when a grid has been distributed between different processes.
Definition fract_dimadapt_impl.h:132
int NumberFractVertNodes[max_number_levels][max_number_fracture_midnodes]
Definition fract_dimadapt.h:248
int edge_mark(Edge *edge)
Returs the mark of an edge.
Definition fract_dimadapt.h:220
int m_NumberLevels
Definition fract_dimadapt.h:249
number m_aperture
Definition fract_dimadapt.h:257
void get_ave_val(const std::vector< number > eval_point, TGridFunction &u, number time)
Computes average over fracture width at given point.
Definition fract_dimadapt_impl.h:542
int vert_mark(Vertex *vrt)
Returs the mark of a vertex.
Definition fract_dimadapt.h:217
void transfer_low_to_full(TGridFunction &u)
transfer of solution
Definition fract_dimadapt_impl.h:1309
number m_rho_pb
Definition fract_dimadapt.h:259
TDomain domain_type
domain type
Definition fract_dimadapt.h:37
domain_type::subset_handler_type subset_handler_type
subset handler type
Definition fract_dimadapt.h:40
bool m_shift
Shift nodes (if true: low-dimensional fracture has width 0 - nodes need to be shifted)
Definition fract_dimadapt.h:239
void grid_adaption_callback(const GridMessage_Adaption &msg)
Called when a grid adaption has been performed.
Definition fract_dimadapt_impl.h:119
mark_attachment_type m_aEdgeAuxMarks
Definition fract_dimadapt.h:269
static const int dim
world dimension
Definition fract_dimadapt.h:43
domain_traits< dim >::grid_base_object element_type
base grid element object type
Definition fract_dimadapt.h:56
SmartPtr< position_accessor_type > m_posAcc
PositionAccessor.
Definition fract_dimadapt.h:231
void grid_transfer_full_to_low()
grid transfer
Definition fract_dimadapt_impl.h:1442
SubsetGroup m_fractSsGrp
Subset group of the fractures.
Definition fract_dimadapt.h:236
number m_zero_viscosity
Definition fract_dimadapt.h:261
void add_permeability(number perm_f, number perm_m)
Definition fract_dimadapt.h:124
domain_type::position_accessor_type position_accessor_type
get position accessor
Definition fract_dimadapt.h:65
int NumberFractNodes[max_number_levels]
Fracture Node List.
Definition fract_dimadapt.h:247
void add_gravity(const std::vector< number > gravity)
Add parameters.
Definition fract_dimadapt.h:120
number m_permeability_f
Definition fract_dimadapt.h:263
domain_traits< dim >::side_type side_type
grid element's side base object type
Definition fract_dimadapt.h:59
void viscosity_func(number c, number &mu, number &d_mu)
Calculates the viscosity and its derivative dependent on mass fraction.
Definition fract_dimadapt_impl.h:519
int m_FractureIsFullDimensional
Definition fract_dimadapt.h:253
DegeneratedLayerManager< TDomain::dim > fract_manager_type
fracture manager type
Definition fract_dimadapt.h:62
static const size_t maxElemCorners
max. number of corners of the elements
Definition fract_dimadapt.h:68
SmartPtr< subset_handler_type > m_spSH
Subset handler to use.
Definition fract_dimadapt.h:228
int m_FirstFullLevel
Definition fract_dimadapt.h:250
MultiGrid::AttachmentAccessor< Vertex, mark_attachment_type > m_aaVertAuxMarks
Attachment accessor.
Definition fract_dimadapt.h:276
Vertex * FractNode[max_number_levels][max_number_fracture_midnodes][max_number_fracture_layers]
Definition fract_dimadapt.h:251
MathVector< dim > m_Gravity
Definition fract_dimadapt.h:258
const char * m_viscosity_type
Definition fract_dimadapt.h:262
void calculate_interpolation(double bnd[2][2], double mid[2], MathVector< dim > bndpoint[2], number param[2][3])
Help function for transfer_low_to_full (calculate quadratic behaviour of unknowns in fracture)
Definition fract_dimadapt_impl.h:1197
void density_func(number c, number &rho, number &d_rho)
Calculates the density and its derivative dependent on mass fraction.
Definition fract_dimadapt_impl.h:498
void check_transfer(TGridFunction &u, DegeneratedLayerManager< TDomain::dim > *fractManager, number omega_theta, number delta, number time)
Checks if the criterion suggests the change of the grid.
Definition fract_dimadapt_impl.h:1039
void grid_transfer_low_to_full()
grid transfer
Definition fract_dimadapt_impl.h:1709
MathVector< dim > m_fractNormal
Parameters.
Definition fract_dimadapt.h:256
shift_attachment_type m_aVertexShift
Attachment keeping the fracture width even for low-dim fracture.
Definition fract_dimadapt.h:273
number m_permeability_m
Definition fract_dimadapt.h:264
mark_attachment_type m_aVertexAuxMarks
Definition fract_dimadapt.h:268
static const size_t max_number_fracture_layers
Definition fract_dimadapt.h:244
void add_viscosity(number zero_viscosity, const char *viscosity_type)
Add specifics for the viscosity function.
Definition fract_dimadapt.h:111
virtual ~FractDimadapt()
Destructor.
Definition fract_dimadapt_impl.h:104
double number