Skip to content

Commit 8e6acd6

Browse files
authored
refactor the problem setup to allow init via function (#262)
this will allow us to define a problem setup completely in Jupyter an example was added to the docs demonstrating this
1 parent e4dffa7 commit 8e6acd6

File tree

24 files changed

+553
-121
lines changed

24 files changed

+553
-121
lines changed

docs/source/adding_a_problem_jupyter.ipynb

Lines changed: 444 additions & 0 deletions
Large diffs are not rendered by default.

docs/source/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ new ideas.
7272
:hidden:
7373

7474
compressible-rt-compare.ipynb
75+
adding_a_problem_jupyter.ipynb
7576
advection-error.ipynb
7677
compressible-convergence.ipynb
7778

pyro/advection/simulation.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import importlib
2-
31
import matplotlib.pyplot as plt
42
import numpy as np
53

@@ -35,8 +33,7 @@ def initialize(self):
3533
self.particles = particles.Particles(self.cc_data, bc, n_particles, particle_generator)
3634

3735
# now set the initial conditions for the problem
38-
problem = importlib.import_module(f"pyro.advection.problems.{self.problem_name}")
39-
problem.init_data(self.cc_data, self.rp)
36+
self.problem_func(self.cc_data, self.rp)
4037

4138
def method_compute_timestep(self):
4239
"""

pyro/advection/tests/test_advection.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import pyro.advection.simulation as sn
1+
import pyro.advection.simulation as sim
2+
from pyro.advection.problems import test
23
from pyro.util import runparams
34

45

@@ -19,7 +20,7 @@ def setup_method(self):
1920
self.rp.params["mesh.ny"] = 8
2021
self.rp.params["particles.do_particles"] = 0
2122

22-
self.sim = sn.Simulation("advection", "test", self.rp)
23+
self.sim = sim.Simulation("advection", "test", test.init_data, self.rp)
2324
self.sim.initialize()
2425

2526
def teardown_method(self):

pyro/advection_fv4/simulation.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import importlib
2-
31
import pyro.advection_fv4.fluxes as flx
42
import pyro.mesh.array_indexer as ai
53
from pyro import advection_rk
@@ -32,8 +30,7 @@ def initialize(self):
3230
self.particles = particles.Particles(self.cc_data, bc, n_particles, particle_generator)
3331

3432
# now set the initial conditions for the problem
35-
problem = importlib.import_module(f"pyro.advection_fv4.problems.{self.problem_name}")
36-
problem.init_data(self.cc_data, self.rp)
33+
self.problem_func(self.cc_data, self.rp)
3734

3835
def substep(self, myd):
3936
"""

pyro/advection_nonuniform/simulation.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import importlib
2-
31
import matplotlib.pyplot as plt
42
import numpy as np
53

@@ -55,8 +53,7 @@ def shift(velocity):
5553
self.particles = particles.Particles(self.cc_data, bc, n_particles, particle_generator)
5654

5755
# now set the initial conditions for the problem
58-
problem = importlib.import_module(f"pyro.advection_nonuniform.problems.{self.problem_name}")
59-
problem.init_data(self.cc_data, self.rp)
56+
self.problem_func(self.cc_data, self.rp)
6057

6158
# compute the required shift for each node using corresponding velocity at the node
6259
shx = self.cc_data.get_var("x-shift")

pyro/advection_nonuniform/tests/test_advection_nonuniform.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import pyro.advection_nonuniform.simulation as sn
1+
import pyro.advection_nonuniform.simulation as sim
2+
from pyro.advection_nonuniform.problems import test
23
from pyro.util import runparams
34

45

@@ -19,7 +20,7 @@ def setup_method(self):
1920
self.rp.params["mesh.ny"] = 8
2021
self.rp.params["particles.do_particles"] = 0
2122

22-
self.sim = sn.Simulation("advection_nonuniform", "test", self.rp)
23+
self.sim = sim.Simulation("advection_nonuniform", "test", test.init_data, self.rp)
2324
self.sim.initialize()
2425

2526
def teardown_method(self):

pyro/burgers/simulation.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import importlib
2-
31
import matplotlib.pyplot as plt
42
import numpy as np
53

@@ -43,8 +41,7 @@ def initialize(self):
4341
self.particles = particles.Particles(self.cc_data, bc, n_particles, particle_generator)
4442

4543
# now set the initial conditions for the problem
46-
problem = importlib.import_module(f"pyro.burgers.problems.{self.problem_name}")
47-
problem.init_data(self.cc_data, self.rp)
44+
self.problem_func(self.cc_data, self.rp)
4845

4946
def method_compute_timestep(self):
5047
"""

pyro/compressible/simulation.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import importlib
2-
31
import matplotlib.pyplot as plt
42
import numpy as np
53

@@ -167,8 +165,7 @@ def initialize(self, *, extra_vars=None, ng=4):
167165
self.cc_data.add_derived(derives.derive_primitives)
168166

169167
# initial conditions for the problem
170-
problem = importlib.import_module(f"pyro.{self.solver_name}.problems.{self.problem_name}")
171-
problem.init_data(self.cc_data, self.rp)
168+
self.problem_func(self.cc_data, self.rp)
172169

173170
if self.verbose > 0:
174171
print(my_data)

pyro/compressible/tests/test_compressible.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
import pytest
33
from numpy.testing import assert_array_equal
44

5-
import pyro.compressible.simulation as sn
5+
import pyro.compressible.simulation as sim
6+
from pyro.compressible.problems import test
67
from pyro.util import runparams
78

89

@@ -26,7 +27,7 @@ def setup_method(self):
2627
self.rp.params["eos.gamma"] = 1.4
2728
self.rp.params["compressible.grav"] = 1.0
2829

29-
self.sim = sn.Simulation("compressible", "test", self.rp)
30+
self.sim = sim.Simulation("compressible", "test", test.init_data, self.rp)
3031
self.sim.initialize()
3132

3233
def teardown_method(self):
@@ -45,13 +46,13 @@ def test_prim(self):
4546

4647
# U -> q
4748
gamma = self.sim.cc_data.get_aux("gamma")
48-
q = sn.cons_to_prim(self.sim.cc_data.data, gamma, self.sim.ivars, self.sim.cc_data.grid)
49+
q = sim.cons_to_prim(self.sim.cc_data.data, gamma, self.sim.ivars, self.sim.cc_data.grid)
4950

5051
assert q[:, :, self.sim.ivars.ip].min() == pytest.approx(1.0) and \
5152
q[:, :, self.sim.ivars.ip].max() == pytest.approx(1.0)
5253

5354
# q -> U
54-
U = sn.prim_to_cons(q, gamma, self.sim.ivars, self.sim.cc_data.grid)
55+
U = sim.prim_to_cons(q, gamma, self.sim.ivars, self.sim.cc_data.grid)
5556
assert_array_equal(U, self.sim.cc_data.data)
5657

5758
def test_derives(self):

0 commit comments

Comments
 (0)