Skip to content

Commit 0af42f6

Browse files
authored
do a safer divide when density is zero in consFlux (#297)
1 parent 9063006 commit 0af42f6

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

pyro/compressible/riemann.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,8 +1130,21 @@ def consFlux(idir, coord_type, gamma,
11301130

11311131
F = np.zeros_like(U_state)
11321132

1133-
u = U_state[..., ixmom] / U_state[..., idens]
1134-
v = U_state[..., iymom] / U_state[..., idens]
1133+
if U_state.ndim == 1:
1134+
u = 0.0
1135+
v = 0.0
1136+
if U_state[idens] != 0.0:
1137+
u = U_state[ixmom] / U_state[idens]
1138+
v = U_state[iymom] / U_state[idens]
1139+
1140+
else:
1141+
u = np.zeros_like(U_state[..., ixmom])
1142+
v = np.zeros_like(U_state[..., iymom])
1143+
for i in range(U_state.shape[0]):
1144+
for j in range(U_state.shape[1]):
1145+
if U_state[i, j, idens] != 0.0:
1146+
u[i, j] = U_state[i, j, ixmom] / U_state[i, j, idens]
1147+
v[i, j] = U_state[i, j, iymom] / U_state[i, j, idens]
11351148

11361149
p = (U_state[..., iener] - 0.5 * U_state[..., idens] * (u * u + v * v)) * (gamma - 1.0)
11371150

pyro/compressible/simulation.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,18 @@ def cons_to_prim(U, gamma, ivars, myg):
5252
q = myg.scratch_array(nvar=ivars.nq)
5353

5454
q[:, :, ivars.irho] = U[:, :, ivars.idens]
55-
q[:, :, ivars.iu] = U[:, :, ivars.ixmom]/U[:, :, ivars.idens]
56-
q[:, :, ivars.iv] = U[:, :, ivars.iymom]/U[:, :, ivars.idens]
57-
58-
e = (U[:, :, ivars.iener] -
59-
0.5*q[:, :, ivars.irho]*(q[:, :, ivars.iu]**2 +
60-
q[:, :, ivars.iv]**2))/q[:, :, ivars.irho]
55+
q[:, :, ivars.iu] = np.divide(U[:, :, ivars.ixmom], U[:, :, ivars.idens],
56+
out=np.zeros_like(U[:, :, ivars.ixmom]),
57+
where=(U[:, :, ivars.idens] != 0.0))
58+
q[:, :, ivars.iv] = np.divide(U[:, :, ivars.iymom], U[:, :, ivars.idens],
59+
out=np.zeros_like(U[:, :, ivars.iymom]),
60+
where=(U[:, :, ivars.idens] != 0.0))
61+
62+
e = np.divide(U[:, :, ivars.iener] - 0.5 * q[:, :, ivars.irho] *
63+
(q[:, :, ivars.iu]**2 + q[:, :, ivars.iv]**2),
64+
q[:, :, ivars.irho],
65+
out=np.zeros_like(U[:, :, ivars.iener]),
66+
where=(U[:, :, ivars.idens] != 0.0))
6167

6268
q[:, :, ivars.ip] = eos.pres(gamma, q[:, :, ivars.irho], e)
6369

0 commit comments

Comments
 (0)