Skip to content

Commit 3f789d7

Browse files
authored
Merge pull request #1764 from knutfrode/dev
Making wave_drag_coef an element property, so that it can be set and …
2 parents e6b65e2 + c0070da commit 3f789d7

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

opendrift/models/openberg.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
g = 9.81 # Acceleration due to gravity in m/s²
4141
omega = 7.2921e-5 # Angular frequency (rad/s)
4242
csi = 1 # Sea ice coefficient of resistance
43-
wave_drag_coef = 0.3 # Wave drag coefficient
44-
4543

4644

4745
class IcebergObj(LagrangianArray):
@@ -90,6 +88,9 @@ class IcebergObj(LagrangianArray):
9088
('wind_skin_drag_coef', {'dtype': np.float32, #Wind/Air skin drag coef. (Cda, IK)
9189
'units': '1',
9290
'default': 0.0022}),
91+
('wave_drag_coef', {'dtype': np.float32, #Wave drag coef.
92+
'units': '1',
93+
'default': 0.3}),
9394
("iceb_x_velocity", {'dtype': np.float32, #Iceberg velocity in the x-direction
9495
'units': "m/s",
9596
'default': 0.0}),
@@ -145,12 +146,13 @@ def wind_force(iceb_vel, wind_vel, Ava, Aha, wind_form_drag_coef, wind_skin_drag
145146
return np.array([F_wind_x, F_wind_y])
146147

147148

148-
def wave_radiation_force(rho_water, wave_height, wave_direction, iceb_length):
149+
def wave_radiation_force(rho_water, wave_height, wave_direction, wave_drag_coef, iceb_length):
149150
""" Wave radiation force
150151
Args:
151152
rho_water : Water density
152153
wave_height : Wave significant height
153154
wave_direction : Wave direction
155+
wave_drag_coef : Wave drag coefficient
154156
iceb_length : Iceberg's length
155157
"""
156158
F_wave_x = (0.25 * rho_water * wave_drag_coef * g * iceb_length * (wave_height / 2) ** 2 * np.sin(np.deg2rad(wave_direction)))
@@ -434,6 +436,7 @@ def advect_iceberg(self):
434436
water_skin_drag_coef = self.elements.water_skin_drag_coef
435437
wind_form_drag_coef = self.elements.wind_form_drag_coef
436438
wind_skin_drag_coef = self.elements.wind_skin_drag_coef
439+
wave_drag_coef = self.elements.wave_drag_coef
437440

438441
T = self.environment.sea_water_temperature
439442
S = self.environment.sea_water_salinity
@@ -487,13 +490,15 @@ def advect_iceberg(self):
487490

488491

489492
def dynamic(t,iceb_vel, water_vel, wind_vel, wave_height, wave_direction, Avo, Aho,
490-
Ava, Aha, rho_water, water_form_drag_coef, water_skin_drag_coef, wind_form_drag_coef, wind_skin_drag_coef, iceb_length, mass,lat, sea_slope_x, sea_slope_y):
493+
Ava, Aha, rho_water, water_form_drag_coef, water_skin_drag_coef,
494+
wind_form_drag_coef, wind_skin_drag_coef, wave_drag_coef, iceb_length, mass,
495+
lat, sea_slope_x, sea_slope_y):
491496
""" Function required by solve_ivp. The t and iceb_vel parameters are required by solve_ivp, shouldn't be deleted """
492497
iceb_vel = iceb_vel.reshape((2, -1))
493498
# Individual forces
494499
ocean_force_val = ocean_force(iceb_vel, water_vel, Avo, Aho, rho_water, water_form_drag_coef, water_skin_drag_coef)
495500
wind_force_val = wind_force(iceb_vel, wind_vel, Ava, Aha, wind_form_drag_coef, wind_skin_drag_coef)
496-
wave_radiation_force_val = int(wave_rad) * wave_radiation_force(rho_water, wave_height, wave_direction, iceb_length)
501+
wave_radiation_force_val = int(wave_rad) * wave_radiation_force(rho_water, wave_height, wave_direction, wave_drag_coef, iceb_length)
497502
coriolis_force_val = int(coriolis) * coriolis_force(iceb_vel, mass, lat)
498503
sea_surface_slope_val = int(sea_surface_slope) * sea_surface_slope_force(sea_slope_x, sea_slope_y, mass)
499504

@@ -533,8 +538,11 @@ def dynamic(t,iceb_vel, water_vel, wind_vel, wave_height, wave_direction, Avo, A
533538
logger.debug("Grounding process disabled in configuration")
534539

535540
sol = solve_ivp(dynamic, [0, self.time_step.total_seconds()], V0,
536-
args=(water_vel, wind_vel, wave_height, wave_direction, Avo, Aho, Ava, Aha, rho_water,
537-
water_form_drag_coef, water_skin_drag_coef, wind_form_drag_coef, wind_skin_drag_coef,length, mass, lat, sea_slope_x, sea_slope_y),
541+
args=(water_vel, wind_vel, wave_height, wave_direction,
542+
Avo, Aho, Ava, Aha, rho_water,
543+
water_form_drag_coef, water_skin_drag_coef, wind_form_drag_coef,
544+
wind_skin_drag_coef, wave_drag_coef, length, mass, lat,
545+
sea_slope_x, sea_slope_y),
538546
vectorized=True,
539547
t_eval=np.array([self.time_step.total_seconds()]))
540548
V = sol.y.reshape((2, -1))

0 commit comments

Comments
 (0)