Skip to content

Commit 921d95e

Browse files
committed
can specify profile for source term
1 parent ba31a4e commit 921d95e

2 files changed

Lines changed: 36 additions & 11 deletions

File tree

example2.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
SimulationInput,
1111
)
1212
import logging
13+
from typing import TYPE_CHECKING
14+
15+
if TYPE_CHECKING:
16+
import pint
1317

1418
logger = logging.getLogger(__name__)
1519
logging.basicConfig(level=logging.WARNING)
@@ -45,11 +49,20 @@
4549
)
4650
logger.info(my_input)
4751

52+
53+
def profile_source_T(z: pint.Quantity):
54+
import numpy as np
55+
56+
# return np.sin(np.pi / (1 * ureg.m) * z)
57+
return 0.5 * (1 + np.cos(0.5 * np.pi / (1 * ureg.m) * z))
58+
59+
4860
my_simulation = Simulation(
4961
my_input,
5062
t_final=3 * ureg.days,
5163
signal_irr=lambda t: 1 if t < 12 * ureg.hour else 0,
5264
signal_sparging=lambda t: 1,
65+
profile_source_T=profile_source_T,
5366
)
5467
output = my_simulation.solve()
5568

src/sparging/model.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,13 @@ def profiles_to_csv(self, output_path: Path):
136136
class Simulation:
137137
sim_input: SimulationInput
138138
t_final: pint.Quantity
139-
signal_irr: callable
140-
signal_sparging: callable
139+
signal_irr: callable[pint.Quantity]
140+
signal_sparging: callable[pint.Quantity]
141+
profile_source_T: callable[pint.Quantity] | None = None
142+
143+
def __post_init__(self):
144+
if self.profile_source_T is None:
145+
self.profile_source_T = lambda x: 1
141146

142147
def solve(self, dt: pint.Quantity | None = None, dx: pint.Quantity | None = None):
143148
# unpack pint.Quantities
@@ -166,8 +171,10 @@ def solve(self, dt: pint.Quantity | None = None, dx: pint.Quantity | None = None
166171
)
167172
fdim = mesh.topology.dim - 1
168173
cg_el = basix.ufl.element("Lagrange", mesh.basix_cell(), degree=1, shape=(2,))
174+
profile_el = basix.ufl.element("Lagrange", mesh.basix_cell(), degree=1)
169175

170176
V = dolfinx.fem.functionspace(mesh, cg_el)
177+
V_profile = dolfinx.fem.functionspace(mesh, profile_el)
171178

172179
u = dolfinx.fem.Function(V)
173180
u_n = dolfinx.fem.Function(V)
@@ -179,14 +186,12 @@ def solve(self, dt: pint.Quantity | None = None, dx: pint.Quantity | None = None
179186
vel_x = u_g0 # TODO velocity should vary with hydrostatic pressure
180187
vel = dolfinx.fem.Constant(mesh, PETSc.ScalarType([vel_x]))
181188

182-
""" vel = fem_func(U)
183-
v,interpolate(lambda x: v0 + 2*x[0])"""
184-
185189
h_l_const = dolfinx.fem.Constant(mesh, PETSc.ScalarType(h_l))
186190

187-
gen_T2 = dolfinx.fem.Constant(
188-
mesh, PETSc.ScalarType(source_T2)
189-
) # generation term [mol T2 /m3/s]
191+
# gen_T2 = dolfinx.fem.Constant(
192+
# mesh, PETSc.ScalarType(source_T2)
193+
# ) # generation term [mol T2 /m3/s]
194+
gen_T2 = dolfinx.fem.Function(V_profile)
190195

191196
# VARIATIONAL FORMULATION
192197

@@ -277,7 +282,14 @@ def solve(self, dt: pint.Quantity | None = None, dx: pint.Quantity | None = None
277282
# SOLVE
278283
t = 0
279284
while t < t_final:
280-
gen_T2.value = source_T2 * self.signal_irr(t * ureg.s)
285+
gen_T2.interpolate(
286+
lambda x: (
287+
x[0] * 0 # why do I need to put x[0] at all cost???
288+
+ self.profile_source_T(x[0] * ureg.m)
289+
* source_T2
290+
* self.signal_irr(t * ureg.s)
291+
)
292+
)
281293
h_l_const.value = h_l * self.signal_sparging(t * ureg.s)
282294
""" utiliser ufl.conditional TODO"""
283295

@@ -298,8 +310,8 @@ def solve(self, dt: pint.Quantity | None = None, dx: pint.Quantity | None = None
298310
c_T2_solutions.append(c_T2_vals.copy())
299311
y_T2_solutions.append(y_T2_vals.copy())
300312
sources_T2.append(
301-
gen_T2.value.copy() * tank_volume
302-
) # total T generation rate in the tank [mol/s]
313+
source_T2 * self.signal_irr(t * ureg.s) * tank_volume
314+
) # total T generation rate in the tank [mol/s] TODO useless: signal_irr is already given
303315

304316
flux_T2 = dolfinx.fem.assemble_scalar(
305317
dolfinx.fem.form(

0 commit comments

Comments
 (0)