Skip to content

Commit 4b0c9b6

Browse files
authored
Merge pull request #1630 from knutfrode/dev
Removed gls_tke functionality from OceanDrift and reader_ROMS_native,…
2 parents c3f759a + 07e00d8 commit 4b0c9b6

File tree

5 files changed

+47
-77
lines changed

5 files changed

+47
-77
lines changed

opendrift/legacy.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# This is a collection of methods that have been removed from various places in the OpenDrift codebase.
2+
3+
4+
# See earlier version of reader_ROMS_native how the GLS parameters were obtained
5+
def gls_tke(windstress, depth, sea_water_density,
6+
tke, generic_length_scale, gls_parameters=None):
7+
'''From LADIM model, based on ROMS files.'''
8+
9+
g = 9.81
10+
f0 = 0.1 # mean wave frequency
11+
c_w = 4.0 # wave mixing parameter
12+
c_i = 0.2 # coefficient for the interior
13+
if gls_parameters is None:
14+
# GLS parameters from ROMS, k-omega closure (see ocean.in)
15+
p = 0.0
16+
m = 1.0
17+
n = 1.0
18+
cmu0 = 0.5477 # for KANTHA_CLAYSON stability function
19+
else:
20+
p = gls_parameters['gls_p']
21+
m = gls_parameters['gls_m']
22+
n = gls_parameters['gls_n']
23+
cmu0 = gls_parameters['gls_cmu0']
24+
25+
phi = 100. * (windstress/sea_water_density)**(3./2.)
26+
27+
# dissipation and turbulent length scale for interiour of mixed layer
28+
eps = cmu0**(3.+p/n)*tke**(3./2.+m/n)*generic_length_scale**(-1./n)
29+
l_i = c_i * tke**(3./2.) * eps**(-1.)
30+
31+
# diffusivity for interior of mixed layer
32+
# c_i = sqrt(2.) * cmu0**3
33+
ki = c_i * (2.*tke)**0.5 * l_i
34+
35+
# length scale and diffusivity of wave-enhanced layer
36+
l_w = np.sqrt(phi / (g*f0))
37+
kwave = c_w * (2*tke)**0.5 * l_w
38+
kmix = ki + kwave
39+
40+
K, N = np.meshgrid(kmix, depths)
41+
42+
return K
43+

opendrift/models/oceandrift.py

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import logging; logger = logging.getLogger(__name__)
2222
from opendrift.models.basemodel import OpenDriftSimulation
2323
from opendrift.elements import LagrangianArray
24-
from opendrift.models.physics_methods import verticaldiffusivity_Large1994, verticaldiffusivity_Sundby1983, gls_tke
24+
from opendrift.models.physics_methods import verticaldiffusivity_Large1994, verticaldiffusivity_Sundby1983
2525
from opendrift.config import CONFIG_LEVEL_ESSENTIAL, CONFIG_LEVEL_BASIC, CONFIG_LEVEL_ADVANCED
2626

2727
# Defining the oil element properties
@@ -92,10 +92,6 @@ class OceanDrift(OpenDriftSimulation):
9292
'sea_surface_wind_wave_to_direction': {'fallback': 0, 'important': False},
9393
'sea_surface_wind_wave_mean_period': {'fallback': 0, 'important': False},
9494
'sea_surface_wind_wave_significant_height': {'fallback': 0, 'important': False},
95-
'surface_downward_x_stress': {'fallback': 0},
96-
'surface_downward_y_stress': {'fallback': 0},
97-
'turbulent_kinetic_energy': {'fallback': 0},
98-
'turbulent_generic_length_scale': {'fallback': 0},
9995
'ocean_mixed_layer_thickness': {'fallback': 50},
10096
'sea_floor_depth_below_sea_level': {'fallback': 10000},
10197
'land_binary_mask': {'fallback': None},
@@ -142,7 +138,7 @@ def __init__(self, *args, **kwargs):
142138
'Time step used for inner loop of vertical mixing.'},
143139
'vertical_mixing:diffusivitymodel': {'type': 'enum', 'default': 'environment',
144140
'enum': ['environment', 'stepfunction', 'windspeed_Sundby1983',
145-
'windspeed_Large1994', 'gls_tke','constant'], 'level': CONFIG_LEVEL_ADVANCED,
141+
'windspeed_Large1994', 'constant'], 'level': CONFIG_LEVEL_ADVANCED,
146142
'units': 'seconds', 'description': 'Algorithm/source used for profile of vertical diffusivity. Environment means that diffusivity is aquired from readers or environment constants/fallback.'},
147143
'vertical_mixing:background_diffusivity': {'type': 'float', 'min': 0, 'max': 1, 'default': 1.2e-5,
148144
'level': CONFIG_LEVEL_ADVANCED, 'units': 'm2s-1', 'description':
@@ -363,24 +359,6 @@ def get_diffusivity_profile(self, model, depths):
363359
return verticaldiffusivity_Large1994(wind, depth, MLD, background_diffusivity)
364360
elif model == 'windspeed_Sundby1983':
365361
return verticaldiffusivity_Sundby1983(wind, depth, MLD, background_diffusivity)
366-
elif model == 'gls_tke':
367-
if not hasattr(self, 'gls_parameters'):
368-
logger.info('Searching readers for GLS parameters...')
369-
for reader_name, reader in self.readers.items():
370-
if hasattr(reader, 'gls_parameters'):
371-
self.gls_parameters = reader.gls_parameters
372-
logger.info('Found gls-parameters in ' + reader_name)
373-
break # Success
374-
if not hasattr(self, 'gls_parameters'):
375-
logger.info('Did not find gls-parameters in any readers.')
376-
self.gls_parameters = None
377-
windstress = np.sqrt(self.environment.surface_downward_x_stress**2 +
378-
self.environment.surface_downward_y_stress**2)
379-
return gls_tke(windstress, depth, self.sea_water_density(),
380-
self.environment.turbulent_kinetic_energy,
381-
self.environment.turbulent_generic_length_scale,
382-
gls_parameters)
383-
384362
else:
385363
raise ValueError('Unknown diffusivity model: ' + model)
386364

opendrift/models/physics_methods.py

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -215,45 +215,6 @@ def verticaldiffusivity_stepfunction(depth, MLD=20,
215215
K[depth>MLD] = k_below
216216
return K
217217

218-
def gls_tke(windstress, depth, sea_water_density,
219-
tke, generic_length_scale, gls_parameters=None):
220-
'''From LADIM model.'''
221-
222-
g = 9.81
223-
f0 = 0.1 # mean wave frequency
224-
c_w = 4.0 # wave mixing parameter
225-
c_i = 0.2 # coefficient for the interior
226-
if gls_parameters is None:
227-
# GLS parameters from ROMS, k-omega closure (see ocean.in)
228-
p = 0.0
229-
m = 1.0
230-
n = 1.0
231-
cmu0 = 0.5477 # for KANTHA_CLAYSON stability function
232-
else:
233-
p = gls_parameters['gls_p']
234-
m = gls_parameters['gls_m']
235-
n = gls_parameters['gls_n']
236-
cmu0 = gls_parameters['gls_cmu0']
237-
238-
phi = 100. * (windstress/sea_water_density)**(3./2.)
239-
240-
# dissipation and turbulent length scale for interiour of mixed layer
241-
eps = cmu0**(3.+p/n)*tke**(3./2.+m/n)*generic_length_scale**(-1./n)
242-
l_i = c_i * tke**(3./2.) * eps**(-1.)
243-
244-
# diffusivity for interior of mixed layer
245-
# c_i = sqrt(2.) * cmu0**3
246-
ki = c_i * (2.*tke)**0.5 * l_i
247-
248-
# length scale and diffusivity of wave-enhanced layer
249-
l_w = np.sqrt(phi / (g*f0))
250-
kwave = c_w * (2*tke)**0.5 * l_w
251-
kmix = ki + kwave
252-
253-
K, N = np.meshgrid(kmix, depths)
254-
255-
return K
256-
257218
def plot_stokes_profile(profiles, view=['vertical', 'birdseye', 'u', 'v'], filename=None):
258219
'''Plot vertical profile of Stokes drift
259220

opendrift/readers/reader_ROMS_native.py

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,11 @@ def __init__(self, filename=None, name=None, gridfile=None, standard_name_mappin
135135
-2000, -2500, -3000, -3500, -4000, -4500, -5000, -5500, -6000,
136136
-6500, -7000, -7500, -8000])
137137

138-
gls_param = ['gls_cmu0', 'gls_p', 'gls_m', 'gls_n']
139-
140138
self.name = name or 'roms native'
141139

142140
def drop_non_essential_vars_pop(ds):
143141
dropvars = [v for v in ds.variables if v not in
144-
list(self.ROMS_variable_mapping.keys()) + gls_param +
142+
list(self.ROMS_variable_mapping.keys()) +
145143
['ocean_time', 'time', 'bulk_time', 's_rho',
146144
'Cs_r', 'Cs_rho', 'hc', 'angle', 'Vtransform']
147145
and v[0:3] not in ['lon', 'lat', 'mas']]
@@ -232,16 +230,6 @@ def drop_non_essential_vars_pop(ds):
232230
if var not in self.Dataset.variables:
233231
del self.ROMS_variable_mapping[var]
234232

235-
try: # Check for GLS parameters (diffusivity)
236-
self.gls_parameters = {}
237-
for gls_par in gls_param:
238-
self.gls_parameters[gls_par] = \
239-
self.Dataset.variables[gls_par][()]
240-
logger.info('Read GLS parameters from file.')
241-
except Exception as e:
242-
logger.info(e)
243-
logger.info('Did not find complete set of GLS parameters')
244-
245233
# Get time coverage
246234
ocean_time = None
247235
for tv in ['ocean_time', 'time', 'bulk_time']:

tests/models/test_basemodel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
def test_logging(tmpdir, capsys):
1111
# Accepting small variations in log output,
1212
# depending on machine, and from which folder test is run
13-
accepted = (278, 281)
13+
accepted = (262, 265)
1414

1515
# Logging to console
1616
logfile = None

0 commit comments

Comments
 (0)