-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathd3f_plugin_fract.cpp
More file actions
360 lines (334 loc) · 25.2 KB
/
Copy pathd3f_plugin_fract.cpp
File metadata and controls
360 lines (334 loc) · 25.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
/*
* SPDX-FileCopyrightText: 2025 Gesellschaft fuer Anlagen- und Reaktorsicherheit gGmbH
* SPDX-License-Identifier: EUPL-1.2
* SPDX-FileContributor: Andreas Vogel
* SPDX-FileContributor: Goethe Universität Frankfurt
* SPDX-FileType: SOURCE
*
* This file is part of d3f++.
* d3f++ is an extension for UG4. Licensing information and citation requirements of UG4 are provided in LICENSES/UG4-LGPL_2.1
*/
/**
* File for registration of d3f routines.
*/
#include "bridge/util.h"
#include "bridge/util_domain_dependent.h"
#include "bridge/util_domain_algebra_dependent.h"
#include "density_driven_flow/fractfv1/fract_ddf_fv1.h"
#include "pressure_flow/fractfv1/fract_pf_fv1.h"
#include "thermohaline_flow/fract_thf_fv1.h"
#include "preconditioner/df_transform.h"
#include "preconditioner/df_transforming.h"
#include "fract_lexorder.h"
#include "fract_eval.h"
#include "fract_dimadapt.h"
using namespace std;
using namespace ug::bridge;
namespace ug{
namespace d3f{
/**
* Class exporting the functionality of the plugin: Only for 2d and 3d. All
* functionality that is to be used in scripts or visualization must be registered here.
*/
struct FracturedFunctionality
{
/**
* Function called for the registration of the classes working with low-dimensional
* fractures: 1d domains must be excluded as they have no 'low-dimensional objects.
*/
template <typename TDomain>
static void Domain(Registry& reg, string grp)
{
static const int dim = TDomain::dim;
string suffix = GetDomainSuffix<TDomain>();
string tag = GetDomainTag<TDomain>();
// Ordering facility for domains with degenerated fractures
{
typedef ApproximationSpace<TDomain> approx_space_type;
typedef DegeneratedLayerManager<dim> fract_manager_type;
reg.add_function ("FractOrderLex",
static_cast<void (*) (approx_space_type&, fract_manager_type*, number)> (&FractOrderLex<TDomain>), grp);
}
// Pressure Driven Flow in fractured porous media (FV1)
{
typedef FractPF_FV1<TDomain> T;
typedef IElemDisc<TDomain> TBase;
string name = string("FractPF_FV1").append(suffix);
reg.add_class_<T, TBase >(name, grp)
.template add_constructor<void (*)(const char*,const char*,bool)>("Function(s)#Subset(s)#Condensed")
.template add_constructor<void (*)(const char*,const char*)>("Function(s)#Subset(s)")
.add_method("set_fract_manager", static_cast<void (T::*)(SmartPtr<DegeneratedLayerManager<dim> >)>(&T::set_fract_manager), "Sets the fracture manager", "Deg. fracture manager")
.add_method("set_density", &T::set_density, "", "Density")
.add_method("set_viscosity", &T::set_viscosity, "", "Viscosity")
.add_method("set_gravity", static_cast<void (T::*)(SmartPtr<CplUserData<MathVector<dim>, dim> >)>(&T::set_gravity), "", "Gravity")
.add_method("set_gravity", static_cast<void (T::*)(const std::vector<number>&)>(&T::set_gravity), "", "Gravity")
.add_method("set_permeability", static_cast<void (T::*)(SmartPtr<CplUserData<MathMatrix<dim, dim>, dim> >)>(&T::set_permeability), "", "Permeability")
.add_method("set_permeability", static_cast<void (T::*)(number)>(&T::set_permeability), "", "Permeability")
#ifdef UG_FOR_LUA
.add_method("set_permeability", static_cast<void (T::*)(const char*)>(&T::set_permeability), "", "Permeability")
.add_method("set_permeability", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_permeability), "", "Permeability")
#endif
.add_method("set_aperture", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_aperture), "", "Fract. aperture")
.add_method("set_aperture", static_cast<void (T::*)(number)>(&T::set_aperture), "", "Fract. aperture")
#ifdef UG_FOR_LUA
.add_method("set_aperture", static_cast<void (T::*)(const char*)>(&T::set_aperture), "", "Fract. aperture")
.add_method("set_aperture", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_aperture), "", "Fract. aperture")
#endif
.add_method("set_fract_permeability", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_fract_permeability), "", "Fract. permeability")
.add_method("set_fract_permeability", static_cast<void (T::*)(number)>(&T::set_fract_permeability), "", "Fract. permeability")
#ifdef UG_FOR_LUA
.add_method("set_fract_permeability", static_cast<void (T::*)(const char*)>(&T::set_fract_permeability), "", "Fract. permeability")
.add_method("set_fract_permeability", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_fract_permeability), "", "Fract. permeability")
#endif
.add_method("set_ortho_permeability", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_orthofract_permeability), "", "Fract.-bulk permeability")
.add_method("set_ortho_permeability", static_cast<void (T::*)(number)>(&T::set_orthofract_permeability), "", "Fract.-bulk permeability")
#ifdef UG_FOR_LUA
.add_method("set_ortho_permeability", static_cast<void (T::*)(const char*)>(&T::set_orthofract_permeability), "", "Fract.-bulk permeability")
.add_method("set_ortho_permeability", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_orthofract_permeability), "", "Fract.-bulk permeability")
#endif
.add_method("condensed_FV", static_cast<bool (T::*) ()>(&T::condensed_FV), "", "If the condensed scvf ip FV used")
.set_construct_as_smart_pointer(true);
reg.add_class_to_group(name, "FractPF_FV1", tag);
}
// Density Driven Flow in fractured porous media (FV1)
{
typedef FractDDF_FV1<TDomain> T;
typedef IElemDisc<TDomain> TBase;
string name = string("FractDDF_FV1").append(suffix);
reg.add_class_<T, TBase >(name, grp)
.template add_constructor<void (*)(const char*,const char*)>("Function(s)#Subset(s)")
.template add_constructor<void (*)(const std::vector<std::string>&,const std::vector<std::string>&)>("Function(s)#Subset(s)")
.add_method("set_fract_manager", static_cast<void (T::*)(SmartPtr<DegeneratedLayerManager<dim> >)>(&T::set_fract_manager), "Sets the fracture manager", "Deg. fracture manager")
.add_method("set_boussinesq_transport", &T::set_boussinesq_transport, "", "Boussinesq Transport")
.add_method("set_boussinesq_flow", &T::set_boussinesq_flow, "", "Boussinesq Flow")
.add_method("set_boussinesq", &T::set_boussinesq, "", "Boussinesq Flow and Transport")
.add_method("set_density", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_density), "", "Density")
.add_method("set_density", static_cast<void (T::*)(number)>(&T::set_density), "", "Density")
.add_method("set_viscosity", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_viscosity), "", "Viscosity")
.add_method("set_viscosity", static_cast<void (T::*)(number)>(&T::set_viscosity), "", "Viscosity")
.add_method("set_gravity", static_cast<void (T::*)(SmartPtr<CplUserData<MathVector<dim>, dim> >)>(&T::set_gravity), "", "Gravity")
.add_method("set_gravity", static_cast<void (T::*)(const std::vector<number>&)>(&T::set_gravity), "", "Gravity")
.add_method("set_porosity", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_porosity), "", "Porosity")
.add_method("set_porosity", static_cast<void (T::*)(number)>(&T::set_porosity), "", "Porosity")
#ifdef UG_FOR_LUA
.add_method("set_porosity", static_cast<void (T::*)(const char*)>(&T::set_porosity), "", "Porosity")
.add_method("set_porosity", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_porosity), "", "Porosity")
#endif
.add_method("set_permeability", static_cast<void (T::*)(SmartPtr<CplUserData<MathMatrix<dim, dim>, dim> >)>(&T::set_permeability), "", "Permeability")
.add_method("set_permeability", static_cast<void (T::*)(number)>(&T::set_permeability), "", "Permeability")
#ifdef UG_FOR_LUA
.add_method("set_permeability", static_cast<void (T::*)(const char*)>(&T::set_permeability), "", "Permeability")
.add_method("set_permeability", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_permeability), "", "Permeability")
#endif
.add_method("set_molecular_diffusion", static_cast<void (T::*)(SmartPtr<CplUserData<MathMatrix<dim, dim>, dim> >)>(&T::set_molecular_diffusion), "", "MolecularDiffusion")
.add_method("set_molecular_diffusion", static_cast<void (T::*)(number)>(&T::set_molecular_diffusion), "", "MolecularDiffusion")
#ifdef UG_FOR_LUA
.add_method("set_molecular_diffusion", static_cast<void (T::*)(const char*)>(&T::set_molecular_diffusion), "", "MolecularDiffusion")
.add_method("set_molecular_diffusion", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_molecular_diffusion), "", "MolecularDiffusion")
#endif
.add_method("set_aperture", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_aperture), "", "Fract. aperture")
.add_method("set_aperture", static_cast<void (T::*)(number)>(&T::set_aperture), "", "Fract. aperture")
#ifdef UG_FOR_LUA
.add_method("set_aperture", static_cast<void (T::*)(const char*)>(&T::set_aperture), "", "Fract. aperture")
.add_method("set_aperture", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_aperture), "", "Fract. aperture")
#endif
.add_method("set_fract_permeability", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_fract_permeability), "", "Fract. permeability")
.add_method("set_fract_permeability", static_cast<void (T::*)(number)>(&T::set_fract_permeability), "", "Fract. permeability")
#ifdef UG_FOR_LUA
.add_method("set_fract_permeability", static_cast<void (T::*)(const char*)>(&T::set_fract_permeability), "", "Fract. permeability")
.add_method("set_fract_permeability", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_fract_permeability), "", "Fract. permeability")
#endif
.add_method("set_ortho_permeability", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_orthofract_permeability), "", "Fract.-bulk permeability")
.add_method("set_ortho_permeability", static_cast<void (T::*)(number)>(&T::set_orthofract_permeability), "", "Fract.-bulk permeability")
#ifdef UG_FOR_LUA
.add_method("set_ortho_permeability", static_cast<void (T::*)(const char*)>(&T::set_orthofract_permeability), "", "Fract.-bulk permeability")
.add_method("set_ortho_permeability", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_orthofract_permeability), "", "Fract.-bulk permeability")
#endif
.add_method("set_fract_molecular_diffusion", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_fract_molecular_diffusion), "", "Fract. molecular diffusion")
.add_method("set_fract_molecular_diffusion", static_cast<void (T::*)(number)>(&T::set_fract_molecular_diffusion), "", "Fract. molecular diffusion")
#ifdef UG_FOR_LUA
.add_method("set_fract_molecular_diffusion", static_cast<void (T::*)(const char*)>(&T::set_fract_molecular_diffusion), "", "Fract. molecular diffusion")
.add_method("set_fract_molecular_diffusion", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_fract_molecular_diffusion), "", "Fract. molecular diffusion")
#endif
.add_method("set_ortho_molecular_diffusion", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_orthofract_molecular_diffusion), "", "Fract.-bulk molecular diffusion")
.add_method("set_ortho_molecular_diffusion", static_cast<void (T::*)(number)>(&T::set_orthofract_molecular_diffusion), "", "Fract.-bulk molecular diffusion")
#ifdef UG_FOR_LUA
.add_method("set_ortho_molecular_diffusion", static_cast<void (T::*)(const char*)>(&T::set_orthofract_molecular_diffusion), "", "Fract.-bulk molecular diffusion")
.add_method("set_ortho_molecular_diffusion", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_orthofract_molecular_diffusion), "", "Fract.-bulk molecular diffusion")
#endif
.add_method("set_singular_sources_and_sinks", &T::set_sss_manager, "Manager", "Sets a singular sources and sinks manager")
.add_method("singular_sources_and_sinks", &T::sss_manager, "", "Returns the singular sources and sinks manager")
.add_method("set_volume_stabilization", &T::set_volume_stabilization, "", "Volume Stabilization")
.add_method("set_upwind", static_cast<void (T::*)(SmartPtr<IConvectionShapes<dim> >)>(&T::set_upwind), "Upwind method", "Upwind (no, full)")
.add_method("brine", &T::brine, "", "Returns the export parameter of the mass fraction")
.add_method("pressure", &T::pressure, "", "Returns the export parameter of the pressure")
.add_method("darcy", &T::DarcyVel, "", "Returns the darcy fracture velocity")
.add_method("ortho_darcy", &T::OrthoDarcyVel, "", "Returns the darcy fracture velocity")
.set_construct_as_smart_pointer(true);
reg.add_class_to_group(name, "FractDDF_FV1", tag);
}
// Thermohaline Flow in fractured porous media (FV1)
{
typedef FractTHF_FV1<TDomain> T;
typedef IElemDisc<TDomain> TBase;
string name = string("FractTHF_FV1").append(suffix);
reg.add_class_<T, TBase >(name, grp)
.template add_constructor<void (*)(const char*,const char*)>("Function(s)#Subset(s)")
.template add_constructor<void (*)(const std::vector<std::string>&,const std::vector<std::string>&)>("Function(s)#Subset(s)")
.add_method("set_fract_manager", static_cast<void (T::*)(SmartPtr<DegeneratedLayerManager<dim> >)>(&T::set_fract_manager), "Sets the fracture manager", "Deg. fracture manager")
.add_method("set_boussinesq_transport", &T::set_boussinesq_transport, "", "Boussinesq Transport")
.add_method("set_boussinesq_flow", &T::set_boussinesq_flow, "", "Boussinesq Flow")
.add_method("set_boussinesq_energy", &T::set_boussinesq_energy, "", "Boussinesq Temperature")
.add_method("set_boussinesq", &T::set_boussinesq, "", "Boussinesq Flow and Transport")
.add_method("set_density", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_density), "", "Density")
.add_method("set_density", static_cast<void (T::*)(number)>(&T::set_density), "", "Density")
.add_method("set_viscosity", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_viscosity), "", "Viscosity")
.add_method("set_viscosity", static_cast<void (T::*)(number)>(&T::set_viscosity), "", "Viscosity")
.add_method("set_gravity", static_cast<void (T::*)(SmartPtr<CplUserData<MathVector<dim>, dim> >)>(&T::set_gravity), "", "Gravity")
.add_method("set_gravity", static_cast<void (T::*)(const std::vector<number>&)>(&T::set_gravity), "", "Gravity")
.add_method("set_porosity", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_porosity), "", "Porosity")
.add_method("set_porosity", static_cast<void (T::*)(number)>(&T::set_porosity), "", "Porosity")
#ifdef UG_FOR_LUA
.add_method("set_porosity", static_cast<void (T::*)(const char*)>(&T::set_porosity), "", "Porosity")
#endif
.add_method("set_permeability", static_cast<void (T::*)(SmartPtr<CplUserData<MathMatrix<dim, dim>, dim> >)>(&T::set_permeability), "", "Permeability")
.add_method("set_permeability", static_cast<void (T::*)(number)>(&T::set_permeability), "", "Permeability")
#ifdef UG_FOR_LUA
.add_method("set_permeability", static_cast<void (T::*)(const char*)>(&T::set_permeability), "", "Permeability")
.add_method("set_permeability", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_permeability), "", "Permeability")
#endif
.add_method("set_molecular_diffusion", static_cast<void (T::*)(SmartPtr<CplUserData<MathMatrix<dim, dim>, dim> >)>(&T::set_molecular_diffusion), "", "MolecularDiffusion")
.add_method("set_molecular_diffusion", static_cast<void (T::*)(number)>(&T::set_molecular_diffusion), "", "MolecularDiffusion")
#ifdef UG_FOR_LUA
.add_method("set_molecular_diffusion", static_cast<void (T::*)(const char*)>(&T::set_molecular_diffusion), "", "MolecularDiffusion")
#endif
.add_method("set_thermal_conductivity", static_cast<void (T::*)(SmartPtr<CplUserData<MathMatrix<dim, dim>, dim> >)>(&T::set_thermal_conductivity), "", "ThermalConductivity")
.add_method("set_thermal_conductivity", static_cast<void (T::*)(number)>(&T::set_thermal_conductivity), "", "ThermalConductivity")
#ifdef UG_FOR_LUA
.add_method("set_thermal_conductivity", static_cast<void (T::*)(const char*)>(&T::set_thermal_conductivity), "", "ThermalConductivity")
#endif
.add_method("set_heat_capacity_fluid", &T::set_heat_capacity_fluid)
.add_method("set_heat_capacity_solid", &T::set_heat_capacity_solid)
.add_method("set_mass_density_solid", &T::set_mass_density_solid)
.add_method("set_boussinesq_density", &T::set_boussinesq_density,"", "BoussinesqDensity")
.add_method("set_aperture", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_aperture), "", "Fract. aperture")
.add_method("set_aperture", static_cast<void (T::*)(number)>(&T::set_aperture), "", "Fract. aperture")
#ifdef UG_FOR_LUA
.add_method("set_aperture", static_cast<void (T::*)(const char*)>(&T::set_aperture), "", "Fract. aperture")
#endif
.add_method("set_fract_permeability", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_fract_permeability), "", "Fract. permeability")
.add_method("set_fract_permeability", static_cast<void (T::*)(number)>(&T::set_fract_permeability), "", "Fract. permeability")
#ifdef UG_FOR_LUA
.add_method("set_fract_permeability", static_cast<void (T::*)(const char*)>(&T::set_fract_permeability), "", "Fract. permeability")
#endif
.add_method("set_orth_permeability", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_orth_permeability), "", "Fract.-bulk permeability")
.add_method("set_orth_permeability", static_cast<void (T::*)(number)>(&T::set_orth_permeability), "", "Fract.-bulk permeability")
#ifdef UG_FOR_LUA
.add_method("set_orth_permeability", static_cast<void (T::*)(const char*)>(&T::set_orth_permeability), "", "Fract.-bulk permeability")
#endif
.add_method("set_fract_molecular_diffusion", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_fract_molecular_diffusion), "", "Fract. molecular diffusion")
.add_method("set_fract_molecular_diffusion", static_cast<void (T::*)(number)>(&T::set_fract_molecular_diffusion), "", "Fract. molecular diffusion")
#ifdef UG_FOR_LUA
.add_method("set_fract_molecular_diffusion", static_cast<void (T::*)(const char*)>(&T::set_fract_molecular_diffusion), "", "Fract. molecular diffusion")
#endif
.add_method("set_orth_molecular_diffusion", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_orth_molecular_diffusion), "", "Fract.-bulk molecular diffusion")
.add_method("set_orth_molecular_diffusion", static_cast<void (T::*)(number)>(&T::set_orth_molecular_diffusion), "", "Fract.-bulk molecular diffusion")
#ifdef UG_FOR_LUA
.add_method("set_orth_molecular_diffusion", static_cast<void (T::*)(const char*)>(&T::set_orth_molecular_diffusion), "", "Fract.-bulk molecular diffusion")
#endif
.add_method("set_fract_thermal_conductivity", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_fract_thermal_conductivity), "", "Fract. ThermalConductivity")
.add_method("set_fract_thermal_conductivity", static_cast<void (T::*)(number)>(&T::set_fract_thermal_conductivity), "", "Fract. ThermalConductivity")
#ifdef UG_FOR_LUA
.add_method("set_fract_thermal_conductivity", static_cast<void (T::*)(const char*)>(&T::set_fract_thermal_conductivity), "", "Fract. ThermalConductivity")
#endif
.add_method("set_orth_thermal_conductivity", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_orth_thermal_conductivity), "", "Fract.-bulk ThermalConductivity")
.add_method("set_orth_thermal_conductivity", static_cast<void (T::*)(number)>(&T::set_orth_thermal_conductivity), "", "Fract.-bulk ThermalConductivity")
#ifdef UG_FOR_LUA
.add_method("set_orth_thermal_conductivity", static_cast<void (T::*)(const char*)>(&T::set_orth_thermal_conductivity), "", "Fract.-bulk ThermalConductivity")
#endif
.add_method("set_singular_sources_and_sinks", &T::set_sss_manager, "Manager", "Sets a singular sources and sinks manager")
.add_method("singular_sources_and_sinks", &T::sss_manager, "", "Returns the singular sources and sinks manager")
.add_method("set_volume_stabilization", &T::set_volume_stabilization, "", "Volume Stabilization")
.add_method("brine", &T::brine, "", "Returns the export parameter of the mass fraction")
.add_method("pressure", &T::pressure, "", "Returns the export parameter of the pressure")
.add_method("temperature", &T::temperature, "", "Returns the export parameter of the temperature")
.add_method("darcy", &T::DarcyVel, "", "Returns the darcy fracture velocity")
.add_method("ortho_darcy", &T::OrthoDarcyVel, "", "Returns the darcy fracture velocity")
.add_method("set_upwind", static_cast<void (T::*)(SmartPtr<IConvectionShapes<dim> >)>(&T::set_upwind), "Upwind method", "Upwind (no, full)")
.add_method("set_upwind_energy", static_cast<void (T::*)(SmartPtr<IConvectionShapes<dim> >)>(&T::set_upwind_energy), "Upwind method", "Upwind (no, full)")
.set_construct_as_smart_pointer(true);
reg.add_class_to_group(name, "FractTHF_FV1", tag);
}
}
/**
* Function called for the registration of the classes working with low-dimensional
* fractures: 1d domains must be excluded as they have no 'low-dimensional objects.
* Note: This part is currently implemented only for 2d!
*/
template <typename TDomain, typename TAlgebra>
static void DomainAlgebra(Registry& reg, string grp)
{
string suffix = GetDomainAlgebraSuffix<TDomain,TAlgebra>();
string tag = GetDomainAlgebraTag<TDomain,TAlgebra>();
static const int dim = TDomain::dim;
typedef GridFunction<TDomain, TAlgebra> TFct;
// Tool for dimension-adaptive fracture representation
{
typedef FractDimadapt<TDomain,TAlgebra> T;
typedef DegeneratedLayerManager<dim> fract_manager_type;
string name = string("FractDimadapt").append(suffix);
reg.add_class_<T>(name, grp)
.template add_constructor<void (*) (SmartPtr<TDomain>,const char*, const std::vector<number>,number,bool)>("Domain,subset,normal,aperture,shift")
.add_method("add_density", static_cast<void (T::*) (number,number,const char*)>(&T::add_density), "Density specifics", "rho_pw,rho_pb,type")
.add_method("add_viscosity", static_cast<void (T::*) (number,const char*)>(&T::add_viscosity), "Viscosity specifics", "zero_visc,type")
.add_method("add_gravity", static_cast<void (T::*) (const std::vector<number>)>(&T::add_gravity), "Gravity", "gravity")
.add_method("add_permeability", static_cast<void (T::*) (number,number)>(&T::add_permeability), "Permeability", "perm_f,perm_m")
.add_method("get_ave_val", static_cast<void (T::*) (const std::vector<number>,TFct&,number)>(&T::get_ave_val), "Computes average over fracture width at given point", "point,gridfct,time")
.add_method("get_criterion", static_cast<number (T::*) (TFct&,fract_manager_type*,number,number)>(&T::evaluate_criterion), "Computes the criterion", "gridfct,fractmanager,omega_theta,time")
.add_method("check_transfer", static_cast<void (T::*) (TFct&,fract_manager_type*,number,number,number)>(&T::check_transfer), "Checks if transfer is necessary", "gridfct,fractmanager,omega_theta,delta,time")
.add_method("grid_transfer_full_to_low", &T::grid_transfer_full_to_low, "grid transfer", "")
.add_method("grid_transfer_low_to_full", &T::grid_transfer_low_to_full, "grid transfer", "")
.add_method("transfer_full_to_low", static_cast<void (T::*) (TFct&)>(&T::transfer_full_to_low), "Transfer of solution", "GridFunc")
.add_method("transfer_low_to_full", static_cast<void (T::*) (TFct&)>(&T::transfer_low_to_full), "Transfer of solution", "GridFunc")
.add_method("convert_end_triangles_to_quadris", static_cast<void (T::*) (TFct&,fract_manager_type*)>(&T::convert_end_triangles_to_quadris), "convert_end_triangles_to_quadris", "gridfct,fractmanager")
.add_method("convert_end_quadris_to_triangles", static_cast<void (T::*) (fract_manager_type*)>(&T::convert_end_quadris_to_triangles), "convert_end_quadris_to_triangles", "fractmanager")
.set_construct_as_smart_pointer(true);
reg.add_class_to_group(name, "FractDimadapt", tag);
}
// A tool to get the values in a fracture
{
typedef FractGFEval<TFct> T;
typedef typename FractGFEval<TFct>::position_type t_position;
string name = string("FractGFEval").append(suffix);
reg.add_class_<T>(name, grp)
.template add_constructor<void (*) (SmartPtr<TFct>,const char*,SmartPtr<DegeneratedLayerManager<dim> >,const MathVector<dim>&,const MathVector<dim>&)> ("GridFunc#cmp#DegLayerMngr#point1#point2")
#ifdef UG_FOR_LUA
.template add_constructor<void (*) (SmartPtr<TFct>,const char*,SmartPtr<DegeneratedLayerManager<dim> >,const std::vector<number>&,const std::vector<number>&)> ("GridFunc#cmp#DegLayerMngr#point1#point2")
#endif
.add_method("get_all_values", &T::get_all_values, "get the values at all the intersection", "")
.add_method("num_intersections", &T::num_intersections, "number of the intersections", "")
.add_method("fract_value", &T::fract_value, "value in the fracture", "no. of the intersection")
.add_method("side_value_1", &T::side_value_1, "value at one side", "no. of the intersection")
.add_method("side_value_2", &T::side_value_2, "value at the other side", "no. of the intersection")
.add_method("get_as_string", &T::get_as_string, "compose a string containing the values", "innerSep#outerSep")
.set_construct_as_smart_pointer(true);
reg.add_class_to_group(name, "FractGFEval", tag);
}
}
}; // FracturedFunctionality
} // end namespace d3f
/**
* This function is called when the plugin is loaded.
*/
void
InitUGPlugin_d3f_fract(Registry* reg, string grp)
{
grp.append("/SpatialDisc/d3f");
typedef d3f::FracturedFunctionality FracturedFunctionality;
try{
RegisterDomain2d3dDependent<FracturedFunctionality>(*reg,grp);
RegisterDomain2d3dAlgebraDependent<FracturedFunctionality>(*reg,grp);
}
UG_REGISTRY_CATCH_THROW(grp);
}
}// namespace ug