Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4c1d072

Browse files
committed
Merge pull request #1189 from tonysyu/streamplot-fix-zero-velocity
BUG: Fix streamplot when velocity component is exactly zero.
2 parents cadd152 + 1d4682c commit 4c1d072

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

lib/matplotlib/streamplot.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ def get_integrator(u, v, dmap, minlength):
325325
# speed (path length) will be in axes-coordinates
326326
u_ax = u / dmap.grid.nx
327327
v_ax = v / dmap.grid.ny
328-
speed = np.sqrt(u_ax**2 + v_ax**2)
328+
speed = np.ma.sqrt(u_ax**2 + v_ax**2)
329329

330330
def forward_time(xi, yi):
331331
ds_dt = interpgrid(speed, xi, yi)
@@ -450,25 +450,32 @@ def _integrate_rk12(x0, y0, dmap, f):
450450
stotal += ds
451451

452452
# recalculate stepsize based on step error
453-
ds = min(maxds, 0.85 * ds * (maxerror/error)**0.5)
453+
if error == 0:
454+
ds = maxds
455+
else:
456+
ds = min(maxds, 0.85 * ds * (maxerror/error)**0.5)
454457

455458
return stotal, xf_traj, yf_traj
456459

457460

458461
def _euler_step(xf_traj, yf_traj, dmap, f):
459-
"""Simple Euler integration step."""
462+
"""Simple Euler integration step that extends streamline to boundary."""
460463
ny, nx = dmap.grid.shape
461464
xi = xf_traj[-1]
462465
yi = yf_traj[-1]
463466
cx, cy = f(xi, yi)
464-
if cx > 0:
465-
dsx = (nx - 1 - xi) / cx
466-
else:
467+
if cx == 0:
468+
dsx = np.inf
469+
elif cx < 0:
467470
dsx = xi / -cx
468-
if cy > 0:
469-
dsy = (ny - 1 - yi) / cy
470471
else:
472+
dsx = (nx - 1 - xi) / cx
473+
if cy == 0:
474+
dsy = np.inf
475+
elif cy < 0:
471476
dsy = yi / -cy
477+
else:
478+
dsy = (ny - 1 - yi) / cy
472479
ds = min(dsx, dsy)
473480
xf_traj.append(xi + cx*ds)
474481
yf_traj.append(yi + cy*ds)

0 commit comments

Comments
 (0)