Skip to content

Commit 57ff35b

Browse files
committed
added postprocessing.py + implemented pint in SimulationResults
1 parent ff32a89 commit 57ff35b

4 files changed

Lines changed: 86 additions & 34 deletions

File tree

src/sparging/animation.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,21 @@ def __init__(
3636
hspace : float, optional
3737
Vertical spacing between subplots
3838
"""
39-
self.times_hr = np.array(results.times) * sec_to_hour
40-
self.c_T2_solutions = np.array(results.c_T2_solutions)
41-
self.y_T2_solutions = np.array(results.y_T2_solutions)
42-
self.x_ct = results.x_ct
43-
self.x_y = results.x_y
44-
self.inventories_T2_salt = results.inventories_T2_salt
39+
self.times_hr = results.times.to("hour").magnitude
40+
self.c_T2_solutions = results.c_T2_solutions.to("molT2/m^3").magnitude
41+
self.y_T2_solutions = results.y_T2_solutions.to("dimensionless").magnitude
42+
self.x_ct = results.x_ct.to("m").magnitude
43+
self.x_y = results.x_y.to("m").magnitude
44+
self.inventories_T2_salt = results.inventories_T2_salt.to("molT2").magnitude
4545
self.source_T2 = (
46-
None if results.sources_T2 is None else np.array(results.sources_T2)
46+
None
47+
if results.sources_T2 is None
48+
else results.sources_T2.to("molT2/s").magnitude
4749
)
4850
self.fluxes_T2 = (
49-
None if results.fluxes_T2 is None else np.array(results.fluxes_T2)
51+
None
52+
if results.fluxes_T2 is None
53+
else results.fluxes_T2.to("molT2/s").magnitude
5054
)
5155
self.show_activity = show_activity
5256
self.figsize = figsize

src/sparging/inputs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ def get_sim_input_standard() -> SimulationInput:
385385
"height": 1 * ureg.m,
386386
"nozzle_diameter": 1.4 * ureg.mm,
387387
"nb_nozzle": 5 * ureg.dimensionless,
388-
"temperature": 500 * ureg.celsius,
388+
"temperature": 600 * ureg.celsius,
389389
"P_top": 1 * ureg.atm,
390390
"flow_g_mol": 100 * ureg.sccm,
391391
"tbr": 0.1 * ureg("triton / neutron"),

src/sparging/model.py

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,19 @@
3939

4040

4141
@dataclass
42-
class SimulationResults: # TODO implement pint in this class # TODO change list to np.array
43-
times: list
44-
c_T2_solutions: list
45-
y_T2_solutions: list
46-
J_T2_solutions: list
47-
x_ct: np.ndarray
48-
x_y: np.ndarray
49-
inventories_T2_salt: np.ndarray
50-
sources_T2: list
51-
fluxes_T2: list
42+
class SimulationResults:
43+
times: np.ndarray[pint.Quantity]
44+
c_T2_solutions: np.ndarray[pint.Quantity]
45+
y_T2_solutions: np.ndarray[pint.Quantity]
46+
J_T2_solutions: np.ndarray[pint.Quantity]
47+
x_ct: np.ndarray[pint.Quantity]
48+
x_y: np.ndarray[pint.Quantity]
49+
inventories_T2_salt: np.ndarray[pint.Quantity]
50+
sources_T2: np.ndarray[pint.Quantity]
51+
fluxes_T2: np.ndarray[pint.Quantity]
5252
sim_input: SimulationInput
53-
dt: int | None = None
54-
dx: int | None = None
53+
dt: pint.Quantity
54+
dx: pint.Quantity
5555

5656
keys_to_ignore_results = [ # TODO do it the other way: keys_to_include_results
5757
"c_T2_solutions",
@@ -428,22 +428,20 @@ def post_process(t):
428428
# advance time
429429
t += dt
430430

431-
inventories_T2_salt = np.array(inventories_T2_salt)
432-
433431
# TODO reattach units using wrapping
434432
# https://pint.readthedocs.io/en/stable/advanced/performance.html#a-safer-method-wrapping
435433
results = SimulationResults(
436-
times=times,
437-
c_T2_solutions=c_T2_solutions,
438-
y_T2_solutions=y_T2_solutions,
439-
J_T2_solutions=J_T2_solutions,
440-
x_ct=x_ct,
441-
x_y=x_y,
442-
inventories_T2_salt=inventories_T2_salt,
443-
sources_T2=sources_T2,
444-
fluxes_T2=fluxes_T2,
434+
times=np.array(times) * ureg("s"),
435+
c_T2_solutions=np.array(c_T2_solutions) * ureg("molT2/m^3"),
436+
y_T2_solutions=np.array(y_T2_solutions) * ureg("dimensionless"),
437+
J_T2_solutions=np.array(J_T2_solutions) * ureg("molT2/m^3/s"),
438+
x_ct=x_ct * ureg("m"),
439+
x_y=x_y * ureg("m"),
440+
inventories_T2_salt=np.array(inventories_T2_salt) * ureg("molT2"),
441+
sources_T2=np.array(sources_T2) * ureg("molT2/s"),
442+
fluxes_T2=np.array(fluxes_T2) * ureg("molT2/s"),
445443
sim_input=self.sim_input,
446-
dt=dt,
447-
dx=dx,
444+
dt=dt * ureg("s"),
445+
dx=dx * ureg("m"),
448446
)
449447
return results

src/sparging/postprocess.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from __future__ import annotations
2+
from sparging.config import ureg
3+
from typing import TYPE_CHECKING
4+
import numpy as np
5+
6+
if TYPE_CHECKING:
7+
import pint
8+
from sparging.model import SimulationResults
9+
import matplotlib.pyplot as plt
10+
11+
12+
def indices_from_times(sim_output: SimulationResults, times_ref: list[pint.Quantity]):
13+
i_matching = [np.argmin(np.abs(sim_output.times - t)) for t in times_ref]
14+
times_matching = [sim_output.times[i] for i in i_matching]
15+
return i_matching, times_matching
16+
17+
18+
def plot_profile(
19+
sim_output: SimulationResults,
20+
ax: plt.Axes,
21+
var_name: str,
22+
times: list[pint.Quantity],
23+
):
24+
i_to_plot, _ = indices_from_times(sim_output, times)
25+
y_to_plot = getattr(sim_output, var_name)
26+
for i in i_to_plot:
27+
ax.plot(
28+
sim_output.x_ct,
29+
y_to_plot[i],
30+
label=f"t = {sim_output.times[i] / 3600:.2f} h",
31+
)
32+
ax.legend()
33+
ax.set_xlabel(r"z [m]")
34+
ax.set_ylabel(var_name) # TODO leverage pint for units
35+
ax.set_title(var_name + " profile")
36+
ax.grid()
37+
38+
39+
def plot_signal(sim_output: SimulationResults, ax: plt.Axes, var_name: str):
40+
y_to_plot = getattr(sim_output, var_name)
41+
ax.plot(
42+
sim_output.times,
43+
y_to_plot,
44+
label=var_name,
45+
)
46+
ax.legend()
47+
ax.set_xlabel(r"t [s]")
48+
ax.set_ylabel(var_name) # TODO leverage pint for units
49+
ax.set_title(var_name + " profile")
50+
ax.grid()

0 commit comments

Comments
 (0)