Skip to content

Commit 30db6af

Browse files
oyvindbreivikgauteh
authored andcommitted
Corrected division by zero in Stokes drift computations
1 parent 4c4ef7b commit 30db6af

1 file changed

Lines changed: 22 additions & 10 deletions

File tree

opendrift/models/physics_methods.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -301,11 +301,15 @@ def stokes_drift_profile_monochromatic(stokes_u_surface, stokes_v_surface,
301301
km = stokes_surface_speed / (
302302
2*stokes_transport_monochromatic(mean_wave_period, significant_wave_height))
303303

304-
stokes_speed = stokes_surface_speed*np.exp(2*km*z)
304+
#stokes_speed = stokes_surface_speed*np.exp(2*km*z)
305+
unitprofile = np.exp(2*km*z)
306+
stokes_speed = stokes_surface_speed*unitprofile
305307

306308
zeromask = stokes_surface_speed == 0
307-
stokes_u = stokes_speed*stokes_u_surface/stokes_surface_speed
308-
stokes_v = stokes_speed*stokes_v_surface/stokes_surface_speed
309+
#stokes_u = stokes_speed*stokes_u_surface/stokes_surface_speed
310+
stokes_u = stokes_u_surface*unitprofile
311+
#stokes_v = stokes_speed*stokes_v_surface/stokes_surface_speed
312+
stokes_v = stokes_v_surface*unitprofile
309313
stokes_u[zeromask] = 0
310314
stokes_v[zeromask] = 0
311315

@@ -326,11 +330,15 @@ def stokes_drift_profile_exponential(stokes_u_surface, stokes_v_surface,
326330
2*stokes_transport_monochromatic(mean_wave_period, significant_wave_height))
327331
ke = km/3
328332

329-
stokes_speed = stokes_surface_speed*np.exp(2*ke*z)/(1-8*ke*z)
333+
#stokes_speed = stokes_surface_speed*np.exp(2*ke*z)/(1-8*ke*z)
334+
unitprofile = np.exp(2.0*ke*z)/(1.0-8.0*ke*z)
335+
stokes_speed = stokes_surface_speed*unitprofile
330336

331337
zeromask = stokes_surface_speed == 0
332-
stokes_u = stokes_speed*stokes_u_surface/stokes_surface_speed
333-
stokes_v = stokes_speed*stokes_v_surface/stokes_surface_speed
338+
#stokes_u = stokes_speed*stokes_u_surface/stokes_surface_speed
339+
stokes_u = stokes_u_surface*unitprofile
340+
#stokes_v = stokes_speed*stokes_v_surface/stokes_surface_speed
341+
stokes_v = stokes_v_surface*unitprofile
334342
stokes_u[zeromask] = 0
335343
stokes_v[zeromask] = 0
336344

@@ -351,12 +359,16 @@ def stokes_drift_profile_phillips(stokes_u_surface, stokes_v_surface,
351359
km = stokes_surface_speed * (1-2*beta/3)/ (
352360
2*stokes_transport_monochromatic(mean_wave_period, significant_wave_height))
353361

354-
stokes_speed = stokes_surface_speed*(np.exp(2*km*z) -
355-
beta*np.sqrt(2*np.pi*km*np.abs(z))*sp.special.erfc(np.sqrt(2*km*np.abs(z))))
362+
#stokes_speed = stokes_surface_speed*(np.exp(2*km*z) -
363+
# beta*np.sqrt(2*np.pi*km*np.abs(z))*sp.special.erfc(np.sqrt(2*km*np.abs(z))))
364+
unitprofile = (np.exp(2*km*z) - beta*np.sqrt(2*np.pi*km*np.abs(z))*sp.special.erfc(np.sqrt(2*km*np.abs(z))))
365+
stokes_speed = stokes_surface_speed*unitprofile
356366

357367
zeromask = stokes_surface_speed == 0
358-
stokes_u = stokes_speed*stokes_u_surface/stokes_surface_speed
359-
stokes_v = stokes_speed*stokes_v_surface/stokes_surface_speed
368+
#stokes_u = stokes_speed*stokes_u_surface/stokes_surface_speed
369+
stokes_u = stokes_u_surface*unitprofile
370+
#stokes_v = stokes_speed*stokes_v_surface/stokes_surface_speed
371+
stokes_v = stokes_v_surface*unitprofile
360372
stokes_u[zeromask] = 0
361373
stokes_v[zeromask] = 0
362374

0 commit comments

Comments
 (0)