Skip to content

Commit 9bae71c

Browse files
authored
add the ability to plot the characteristic wave domain of dependence (#41)
1 parent 425d037 commit 9bae71c

File tree

2 files changed

+76
-7
lines changed

2 files changed

+76
-7
lines changed

examples/euler.ipynb

+36-5
Large diffs are not rendered by default.

ppmpy/euler.py

+40-2
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,44 @@ def draw_prim(self, gp, ivar):
468468
if not isinstance(self.q_parabola[ivar], HSEPPMInterpolant):
469469
self.q_parabola[ivar].mark_cubic(gp)
470470

471+
def draw_waves(self, gp):
472+
"""Draw the domains seen by each of the 3 characteristic waves
473+
and the interface they interact with
474+
475+
Parameters
476+
----------
477+
gp : GridPlot
478+
the grid plot object for the figure
479+
"""
480+
481+
ilo = max(gp.lo_index, self.grid.lo-1)
482+
ihi = min(gp.hi_index, self.grid.hi+1)
483+
484+
q = self.cons_to_prim()
485+
cs = np.sqrt(self.gamma * q[:, self.v.qp] / q[:, self.v.qrho])
486+
487+
for n in range(ilo, ihi+1):
488+
u = q[n, self.v.qu]
489+
evals = np.array([u - cs[n], u, u + cs[n]])
490+
colors = ["C4", "C9", "C8"]
491+
for iwave, ev in enumerate(evals):
492+
if ev > 0:
493+
# reaches the right side of the zone
494+
gp.ax.fill([self.grid.xr[n] - ev * self.dt,
495+
self.grid.xr[n],
496+
self.grid.xr[n],
497+
self.grid.xr[n] - ev * self.dt],
498+
[0.0, 1.0, 0.0, 0.0],
499+
color=colors[iwave], alpha=0.33)
500+
elif ev < 0:
501+
# reaches the left side of the zone
502+
gp.ax.fill([self.grid.xl[n],
503+
self.grid.xl[n] + np.abs(ev) * self.dt,
504+
self.grid.xl[n],
505+
self.grid.xl[n]],
506+
[1.0, 0.0, 0.0, 1.0],
507+
color=colors[iwave], alpha=0.25)
508+
471509
def plot_prim(self, *, ivar=None):
472510
"""Plot the primitive variable(s) for the current solution.
473511
@@ -489,7 +527,7 @@ def plot_prim(self, *, ivar=None):
489527
fig = plt.figure()
490528
ax = fig.add_subplot()
491529
ax.plot(self.grid.x[self.grid.lo:self.grid.hi+1],
492-
q[self.grid.lo:self.grid.hi+1, ivar])
530+
q[self.grid.lo:self.grid.hi+1, ivar], lw=2)
493531
ax.grid(color="0.5", linestyle=":")
494532
ax.set_xlabel("x")
495533
ax.set_ylabel(self.v.prim_names[ivar])
@@ -498,7 +536,7 @@ def plot_prim(self, *, ivar=None):
498536
fig, ax = plt.subplots(self.v.nvar, 1, sharex=True)
499537
for idx in range(self.v.nvar):
500538
ax[idx].plot(self.grid.x[self.grid.lo:self.grid.hi+1],
501-
q[self.grid.lo:self.grid.hi+1, idx])
539+
q[self.grid.lo:self.grid.hi+1, idx], lw=2)
502540
ax[idx].grid(color="0.5", linestyle=":")
503541
if idx == self.v.nvar-1:
504542
ax[idx].set_xlabel("x")

0 commit comments

Comments
 (0)