Skip to content

Commit 8029fd8

Browse files
committed
Added passives support to InjectionProductionPhysics
Closes #31847
1 parent dece2b3 commit 8029fd8

6 files changed

Lines changed: 49 additions & 3 deletions

File tree

modules/porous_flow/doc/content/source/physics/CoupledInjectionProductionPhysics.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
# CoupledInjectionProduction
22

3-
This [Physics](syntax/Physics/index.md) object adds dirac kernels for mass and energy
3+
This [Physics](syntax/Physics/index.md) object adds dirac kernels for mass, energy, and passive concentration
44
sources at injection and production points within a porous matrix, where the sources
55
are provided by post-processor values transferred from another application.
66

77
This object creates the following post-processors:
88

99
- `p_inj1`, ..., `p_inj<n_inj>`: Pressure at each injection point, via [PointValue.md].
1010
- `T_inj1`, ..., `T_inj<n_inj>`: Temperature at each injection point, via [PointValue.md].
11+
- `<passive>_inj1`, ..., `<passive>_inj<n_inj>`: Passive concentration `<passive>` at each injection point, via [PointValue.md].
1112
- `p_pro1`, ..., `p_pro<n_pro>`: Pressure at each production point, via [PointValue.md].
1213
- `T_pro1`, ..., `T_pro<n_pro>`: Temperature at each production point, via [PointValue.md].
14+
- `<passive>_pro1`, ..., `<passive>_pro<n_pro>`: Passive concentration `<passive>` at each production point, via [PointValue.md].
1315
- `mass_rate_inj1`, ..., `mass_rate_inj<n_inj>`: Mass source rate at each injection point, to be transferred from the other application using [Receiver.md].
1416
- `energy_rate_inj1`, ..., `energy_rate_inj<n_inj>`: Energy source rate at each injection point, to be transferred from the other application using [Receiver.md].
17+
- `<passive>_rate_inj1`, ..., `<passive>_rate_inj<n_inj>`: Passive concentration `<passive>` source rate at each injection point, to be transferred from the other application using [Receiver.md].
1518
- `mass_rate_pro1`, ..., `mass_rate_pro<n_pro>`: Mass source rate at each production point, to be transferred from the other application using [Receiver.md].
1619
- `energy_rate_pro1`, ..., `energy_rate_pro<n_pro>`: Energy source rate at each production point, to be transferred from the other application using [Receiver.md].
20+
- `<passive>_rate_pro1`, ..., `<passive>_rate_pro<n_pro>`: Passive concentration `<passive>` source rate at each production point, to be transferred from the other application using [Receiver.md].
1721

1822
`n_inj` is the size of the [!param](/Physics/CoupledInjectionProduction/CoupledInjectionProductionPhysics/injection_points) parameter, and
1923
`n_pro` is the size of the [!param](/Physics/CoupledInjectionProduction/CoupledInjectionProductionPhysics/production_points) parameter.
@@ -24,7 +28,7 @@ objects are created by this object to transfer the post-processors listed above
2428
if the parameter is not provided, then the other application is responsible for creating the transfers.
2529

2630
[PorousFlowPointSourceFromPostprocessor.md] dirac kernels are added for each injection and production point,
27-
using the `mass_rate_*` and `energy_rate_*` post-processors listed above.
31+
using the `mass_rate_*`, `energy_rate_*`, and `<passive>_rate_*` post-processors listed above.
2832

2933
!syntax parameters /Physics/CoupledInjectionProduction/CoupledInjectionProductionPhysics
3034

modules/porous_flow/include/physics/CoupledInjectionProductionPhysics.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ class CoupledInjectionProductionPhysics : public PhysicsBase
4040
/// Production points
4141
const std::vector<Point> & _production_points;
4242

43+
/// Mass fraction variable names, if any
44+
const std::vector<VariableName> & _mass_fraction_vars;
45+
4346
/// Injection and production points
4447
std::vector<Point> _points;
4548
/// Label for each point

modules/porous_flow/src/physics/CoupledInjectionProductionPhysics.C

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ CoupledInjectionProductionPhysics::validParams()
2121

2222
params.addRequiredParam<std::vector<Point>>("injection_points", "List of injection points [m]");
2323
params.addRequiredParam<std::vector<Point>>("production_points", "List of production points [m]");
24+
params.addRequiredParam<std::vector<VariableName>>("mass_fraction_vars",
25+
"List of mass fraction variables");
2426
params.addParam<MultiAppName>("multi_app", "MultiApp to transfer to and from");
2527

2628
params.addClassDescription(
@@ -33,7 +35,8 @@ CoupledInjectionProductionPhysics::CoupledInjectionProductionPhysics(
3335
const InputParameters & parameters)
3436
: PhysicsBase(parameters),
3537
_injection_points(getParam<std::vector<Point>>("injection_points")),
36-
_production_points(getParam<std::vector<Point>>("production_points"))
38+
_production_points(getParam<std::vector<Point>>("production_points")),
39+
_mass_fraction_vars(getParam<std::vector<VariableName>>("mass_fraction_vars"))
3740
{
3841
_points = _injection_points;
3942
_points.insert(_points.end(), _production_points.begin(), _production_points.end());
@@ -51,6 +54,8 @@ CoupledInjectionProductionPhysics::addDiracKernels()
5154
{
5255
addPPSourceDiracKernel(_points[i], "porepressure", "mass_rate_" + _labels[i]);
5356
addPPSourceDiracKernel(_points[i], "temperature", "energy_rate_" + _labels[i]);
57+
for (const auto & var : _mass_fraction_vars)
58+
addPPSourceDiracKernel(_points[i], var, var + "_rate_" + _labels[i]);
5459
}
5560
}
5661

@@ -63,6 +68,11 @@ CoupledInjectionProductionPhysics::addPostprocessors()
6368
addPointValuePostprocessor("temperature", _points[i], "T_" + _labels[i]);
6469
addReceiverPostprocessor("mass_rate_" + _labels[i]);
6570
addReceiverPostprocessor("energy_rate_" + _labels[i]);
71+
for (const auto & var : _mass_fraction_vars)
72+
{
73+
addPointValuePostprocessor(var, _points[i], var + "_" + _labels[i]);
74+
addReceiverPostprocessor(var + "_rate_" + _labels[i]);
75+
}
6676
}
6777
}
6878

@@ -76,6 +86,11 @@ CoupledInjectionProductionPhysics::addTransfers()
7686
addPostprocessorTransfer("T_" + _labels[i], false);
7787
addPostprocessorTransfer("mass_rate_" + _labels[i], true);
7888
addPostprocessorTransfer("energy_rate_" + _labels[i], true);
89+
for (const auto & var : _mass_fraction_vars)
90+
{
91+
addPostprocessorTransfer(var + "_" + _labels[i], false);
92+
addPostprocessorTransfer(var + "_rate_" + _labels[i], true);
93+
}
7994
}
8095
}
8196

Binary file not shown.

modules/porous_flow/test/tests/physics/coupled_injection_production_physics/main.i

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
gravity_vector = '0 0 0'
22
initial_p = 1e5
33
initial_T = 300
4+
initial_C1 = 1e-3
45

56
porosity = 0.8
67
perm = 1e-8 # permeability
@@ -34,6 +35,7 @@ pro_point1 = '3.5 1.5 1.5'
3435
fp = fp
3536
pressure_unit = Pa
3637
stabilization = full
38+
mass_fraction_vars = 'C1'
3739
[]
3840

3941
[FluidProperties]
@@ -50,6 +52,9 @@ pro_point1 = '3.5 1.5 1.5'
5052
initial_condition = ${initial_T}
5153
scaling = 1e-6
5254
[]
55+
[C1]
56+
initial_condition = ${initial_C1}
57+
[]
5358
[]
5459

5560
[Materials]
@@ -104,11 +109,13 @@ pro_point1 = '3.5 1.5 1.5'
104109
[inj_prod]
105110
injection_points = '${inj_point1}'
106111
production_points = '${pro_point1}'
112+
mass_fraction_vars = 'C1'
107113
multi_app = sub
108114
[]
109115
[]
110116
[]
111117

112118
[Outputs]
113119
exodus = true
120+
show = 'porepressure temperature C1'
114121
[]

modules/porous_flow/test/tests/physics/coupled_injection_production_physics/sub.i

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
e_source = 1e5
22
mass_rate_inj1 = 0.5
3+
C1_source = 2e-3
34
energy_rate_inj1 = ${fparse mass_rate_inj1 * e_source}
5+
C1_rate_inj1 = ${fparse mass_rate_inj1 * C1_source}
46
mass_rate_pro1 = -0.5
57
energy_rate_pro1 = ${fparse mass_rate_pro1 * e_source}
8+
C1_rate_pro1 = ${fparse mass_rate_pro1 * C1_source}
69

710
[Mesh]
811
type = GeneratedMesh
@@ -19,12 +22,19 @@ energy_rate_pro1 = ${fparse mass_rate_pro1 * e_source}
1922
type = ConstantPostprocessor
2023
value = ${energy_rate_inj1}
2124
[]
25+
[C1_rate_inj1]
26+
type = ConstantPostprocessor
27+
value = ${C1_rate_inj1}
28+
[]
2229
[p_inj1]
2330
type = Receiver
2431
[]
2532
[T_inj1]
2633
type = Receiver
2734
[]
35+
[C1_inj1]
36+
type = Receiver
37+
[]
2838

2939
[mass_rate_pro1]
3040
type = ConstantPostprocessor
@@ -34,12 +44,19 @@ energy_rate_pro1 = ${fparse mass_rate_pro1 * e_source}
3444
type = ConstantPostprocessor
3545
value = ${energy_rate_pro1}
3646
[]
47+
[C1_rate_pro1]
48+
type = ConstantPostprocessor
49+
value = ${C1_rate_pro1}
50+
[]
3751
[p_pro1]
3852
type = Receiver
3953
[]
4054
[T_pro1]
4155
type = Receiver
4256
[]
57+
[C1_pro1]
58+
type = Receiver
59+
[]
4360
[]
4461

4562
[Problem]

0 commit comments

Comments
 (0)