Goal: Try to successfully run a coupled Meteorology-SnowDegreeDay
simulation, with Meteorology
as the driver, and with Grid inputs for SnowDegreeDay
.
Import the Babel-wrapped Meteorology
and SnowDegreeDay
components and create instances:
In [1]:
from cmt.components import Meteorology, SnowDegreeDay
met, sno = Meteorology(), SnowDegreeDay()
Initialize the components with cfg files that, for simplicity, use the same time step and run duration:
In [2]:
met.initialize('./input/meteorology-2.cfg')
sno.initialize('./input/snow_degree_day-2.cfg')
Store initial values of time, snow depth, and air temperature:
In [3]:
time = [met.get_current_time()]
snow_depth = [sno.get_value('snowpack__depth').max()]
air_temp = [met.get_value('atmosphere_bottom_air__temperature').max()]
Run the coupled models to completion. In each time step, perform the following actions:
Meteorology
; set into SnowDegreeDay
SnowDegreeDay
SnowDegreeDay
; set into Meteorology
Meteorology
In [4]:
count = 1
while met.get_current_time() < met.get_end_time():
T_air = met.get_value('atmosphere_bottom_air__temperature')
P_snow = met.get_value('atmosphere_water__snowfall_leq-volume_flux')
T_surf = met.get_value('land_surface__temperature')
rho_H2O = met.get_value('water-liquid__mass-per-volume_density')
sno.set_value('atmosphere_bottom_air__temperature', T_air)
sno.set_value('atmosphere_water__snowfall_leq-volume_flux', P_snow)
sno.set_value('land_surface__temperature', T_surf)
sno.set_value('water-liquid__mass-per-volume_density', rho_H2O)
sno.update(sno.get_time_step()*count)
rho_snow = sno.get_value('snowpack__z_mean_of_mass-per-volume_density')
h_snow = sno.get_value('snowpack__depth')
h_swe = sno.get_value('snowpack__liquid-equivalent_depth')
SM = sno.get_value('snowpack__melt_volume_flux')
met.set_value('snowpack__z_mean_of_mass-per-volume_density', rho_snow)
met.set_value('snowpack__depth', h_snow)
met.set_value('snowpack__liquid-equivalent_depth', h_swe)
met.set_value('snowpack__melt_volume_flux', SM)
met.update(met.get_time_step()*count)
time.append(met.get_current_time())
snow_depth.append(sno.get_value('snowpack__depth').max())
air_temp.append(met.get_value('atmosphere_bottom_air__temperature').max())
count += 1
In [5]:
print time
In [6]:
print snow_depth
In [7]:
print air_temp
Finalize the components:
In [8]:
met.finalize(), sno.finalize()
Out[8]:
Plot snow depth versus time.
In [9]:
%matplotlib inline
from matplotlib import pyplot as plt
In [10]:
plt.plot(time[1:], snow_depth[1:])
plt.title('Snow depth versus time')
plt.xlabel('Time [s]')
plt.ylabel('Snow depth [m]')
Out[10]:
Result: Works!