44import numpy as np
55
66
7- def sod (g , v , U , params ): # pylint: disable=W0613
7+ def sod (euler ):
88 """Initial conditions for the classic Sod shock tube problem
99
1010 Parameters
1111 ----------
12- grid : FVGrid
13- the grid object
14- v : FluidVars
15- the fluid variables object
16- U : ndarray
17- the conserved state array
18- params : dict
19- a dictionary of parameters.
20- We expect gamma to be provided here
12+ euler : Euler
13+ the Euler simulation object
2114
2215 Returns
2316 -------
2417 None
2518 """
2619
27- gamma = params ["gamma" ]
20+ gamma = euler .params ["gamma" ]
21+ g = euler .grid
2822
2923 # setup initial conditions -- this is Sod's problem
3024 rho_l = 1.0
@@ -37,82 +31,72 @@ def sod(g, v, U, params): # pylint: disable=W0613
3731 idx_l = g .x < 0.5
3832 idx_r = g .x >= 0.5
3933
40- U [idx_l , v .urho ] = rho_l
41- U [idx_l , v .umx ] = rho_l * u_l
42- U [idx_l , v .uener ] = p_l / (gamma - 1.0 ) + 0.5 * rho_l * u_l ** 2
34+ euler . U [idx_l , euler . v .urho ] = rho_l
35+ euler . U [idx_l , euler . v .umx ] = rho_l * u_l
36+ euler . U [idx_l , euler . v .uener ] = p_l / (gamma - 1.0 ) + 0.5 * rho_l * u_l ** 2
4337
44- U [idx_r , v .urho ] = rho_r
45- U [idx_r , v .umx ] = rho_r * u_r
46- U [idx_r , v .uener ] = p_r / (gamma - 1.0 ) + 0.5 * rho_r * u_r ** 2
38+ euler . U [idx_r , euler . v .urho ] = rho_r
39+ euler . U [idx_r , euler . v .umx ] = rho_r * u_r
40+ euler . U [idx_r , euler . v .uener ] = p_r / (gamma - 1.0 ) + 0.5 * rho_r * u_r ** 2
4741
4842
49- def acoustic_pulse (g , v , U , params ): # pylint: disable=W0613
43+ def acoustic_pulse (euler ):
5044 """The acoustic pulse problem from McCorquodale & Colella 2011
5145
5246 Parameters
5347 ----------
54- grid : FVGrid
55- the grid object
56- v : FluidVars
57- the fluid variables object
58- U : ndarray
59- the conserved state array
60- params : dict
61- a dictionary of parameters (not used)
62- We expect gamma to be provided here
48+ euler : Euler
49+ the Euler simulation object
6350
6451 Returns
6552 -------
6653 None
6754 """
6855
69- gamma = params ["gamma" ]
56+ gamma = euler . params ["gamma" ]
7057
71- xcenter = 0.5 * (g . xmin + g .xmax )
58+ xcenter = 0.5 * (euler . grid . xmin + euler . grid .xmax )
7259
7360 rho0 = 1.4
7461 delta_rho = 0.14
7562
76- r = np .abs (g .x - xcenter )
63+ r = np .abs (euler . grid .x - xcenter )
7764
7865 rho = np .where (r <= 0.5 , rho0 + delta_rho * np .exp (- 16.0 * r ** 2 ) * np .cos (np .pi * r )** 6 , rho0 )
7966 p = (rho / rho0 )** gamma
8067 u = 0.0
8168
82- U [:, v .urho ] = rho
83- U [:, v .umx ] = rho * u
84- U [:, v .uener ] = p / (gamma - 1.0 ) + 0.5 * rho * u ** 2
69+ euler . U [:, euler . v .urho ] = rho
70+ euler . U [:, euler . v .umx ] = rho * u
71+ euler . U [:, euler . v .uener ] = p / (gamma - 1.0 ) + 0.5 * rho * u ** 2
8572
8673
87- def hse (grid , v , U , params ):
74+ def hse (euler ):
8875 """An isothermal hydrostatic atmosphere.
76+
77+ The following parameters should be set in the Euler initialization:
78+
79+ * `base_density` : the density at the lower boundary
80+ * `base_pressure` : the pressure at the lower boundary
81+ * `g_const` : the gravitational acceleration
82+ * `verbose` : output the HSE error
83+
8984 Parameters
9085 ----------
91- grid : FVGrid
92- the grid object
93- v : FluidVars
94- the fluid variables object
95- U : ndarray
96- the conserved state array
97- params : dict
98- a dictionary of parameters
99-
100- * `base_density` : the density at the lower boundary
101- * `base_pressure` : the pressure at the lower boundary
102- * `g_const` : the gravitational acceleration
103- * `gamma` : the ratio of specific heats
86+ euler : Euler
87+ the Euler simulation object
10488
10589 Returns
10690 -------
10791 None
10892 """
10993
110- rho_base = params ["base_density" ]
111- pres_base = params ["base_pressure" ]
112- g = params ["g_const" ]
113- gamma = params ["gamma" ]
94+ rho_base = euler . params ["base_density" ]
95+ pres_base = euler . params ["base_pressure" ]
96+ g = euler . params ["g_const" ]
97+ gamma = euler . params ["gamma" ]
11498
115- verbose = params .get ("verbose" , False )
99+ verbose = euler . params .get ("verbose" , False )
116100
117101 # we will assume we are isothermal and constant composition. In that case,
118102 # p/rho = constant
@@ -122,34 +106,34 @@ def hse(grid, v, U, params):
122106 # p_{i+1} = p_i + dx / 2 (rho_i + rho_{i+1} g
123107 # but we can write p_{i+1} = A rho_{i+1} and solve for rho_{i+1}
124108
125- p = grid .scratch_array ()
126- rho = grid .scratch_array ()
109+ p = euler . grid .scratch_array ()
110+ rho = euler . grid .scratch_array ()
127111
128112 # we want the base conditions to be at the lower boundary. We will
129113 # set the conditions in the first zone center from the analytic expression:
130114 # P = P_base e^{-z/H}
131115
132116 H = pres_base / rho_base / np .abs (g )
133117
134- p [grid .lo ] = pres_base * np .exp (- grid .x [grid .lo ] / H )
135- rho [grid .lo ] = rho_base * np .exp (- grid .x [grid .lo ] / H )
118+ p [euler . grid .lo ] = pres_base * np .exp (- euler . grid .x [euler . grid .lo ] / H )
119+ rho [euler . grid .lo ] = rho_base * np .exp (- euler . grid .x [euler . grid .lo ] / H )
136120
137- for i in range (grid .lo + 1 , grid .hi + 1 ):
138- rho [i ] = (p [i - 1 ] + 0.5 * grid .dx * rho [i - 1 ] * g ) / (A - 0.5 * grid .dx * g )
121+ for i in range (euler . grid .lo + 1 , euler . grid .hi + 1 ):
122+ rho [i ] = (p [i - 1 ] + 0.5 * euler . grid .dx * rho [i - 1 ] * g ) / (A - 0.5 * euler . grid .dx * g )
139123 p [i ] = A * rho [i ]
140124
141125 # now check HSE
142126 if verbose :
143127 max_err = 0.0
144- for i in range (grid .lo + 1 , grid .hi + 1 ):
145- dpdr = (p [i ] - p [i - 1 ])/ grid .dx
128+ for i in range (euler . grid .lo + 1 , euler . grid .hi + 1 ):
129+ dpdr = (p [i ] - p [i - 1 ]) / euler . grid .dx
146130 rhog = 0.5 * (rho [i ] + rho [i - 1 ]) * g
147131 err = np .abs (dpdr - rhog ) / np .abs (rhog )
148132 max_err = max (max_err , err )
149133
150134 print (f"max err = { max_err } " )
151135
152136 # now fill the conserved variables
153- U [:, v .urho ] = rho [:]
154- U [:, v .umx ] = 0.0
155- U [:, v .uener ] = p [:] / (gamma - 1.0 )
137+ euler . U [:, euler . v .urho ] = rho [:]
138+ euler . U [:, euler . v .umx ] = 0.0
139+ euler . U [:, euler . v .uener ] = p [:] / (gamma - 1.0 )
0 commit comments