Skip to content

Commit

Permalink
step works
Browse files Browse the repository at this point in the history
revamp model + unit tests

runs in AMIP driver

clean

step works

ice runs from driver with dss

name switch

delete redundant directory

add ocean params

add to CI pipeline

sea ice animation

format

unit test fixes

test for differentiate_turbulent_fluxes!

add artifacts to buildkite

dss q_sfc, solving tropical instability

shorten t_end for ci

format

fix test

dep fix

new hdf5 paths

step works

revamp model + unit tests

runs in AMIP driver

clean

step works

ice runs from driver with dss

name switch

delete redundant directory

add ocean params

add to CI pipeline

sea ice animation

format

unit test fixes

test for differentiate_turbulent_fluxes!

add artifacts to buildkite

dss q_sfc, solving tropical instability

shorten t_end for ci

format

fix test

dep fix

revs

revs + HPC pipeline fix

rebase

clean up

clean up
  • Loading branch information
LenkaNovak committed Oct 2, 2023
1 parent 9cad2b8 commit bf7d5c2
Show file tree
Hide file tree
Showing 32 changed files with 991 additions and 3,408 deletions.
16 changes: 13 additions & 3 deletions .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,12 @@ steps:
agents:
slurm_mem: 16GB

- label: "Component model tests"
command: "julia --color=yes --project=test/ test/component_model_tests.jl --run_name component_test --job_id component_test"
- label: "Component model tests: Slab sea ice"
command: "julia --color=yes --project=test/ test/component_model_tests/slab_seaice_tests.jl --run_name component_test_slab_seaice --job_id component_test_slab_seaice"
timeout_in_minutes: 5

- label: "Component model tests: Eisenman sea ice"
command: "julia --color=yes --project=test/ test/component_model_tests/eisenman_seaice_tests.jl --run_name component_test_eisenman_seaice --job_id component_test_eisenman_seaice"
timeout_in_minutes: 5

- group: "Integration Tests"
Expand Down Expand Up @@ -144,7 +148,6 @@ steps:
agents:
slurm_mem: 20GB

# Test: non-monotonous remapping for land mask
- label: "Slabplanet: non-monotonous surface remap"
key: "slabplanet_non-monotonous"
command: "julia --color=yes --project=experiments/AMIP/modular/ experiments/AMIP/modular/coupler_driver_modular.jl --config_file $CONFIG_PATH/slabplanet_nonmono.yml"
Expand Down Expand Up @@ -172,6 +175,13 @@ steps:
agents:
slurm_mem: 20GB

- label: "Slabplanet: eisenman sea ice"
key: "slabplanet_eisenman"
command: "julia --color=yes --project=experiments/AMIP/modular/ experiments/AMIP/modular/coupler_driver_modular.jl --config_file $CONFIG_PATH/slabplanet_eisenman.yml"
artifact_paths: "experiments/AMIP/modular/output/slabplanet_eisenman/slabplanet_eisenman_artifacts/*"
agents:
slurm_mem: 20GB

# AMIP

# ...
Expand Down
2 changes: 1 addition & 1 deletion config/model_configs/interactive_debug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ rad: "gray"
energy_check: true
mode_name: "slabplanet"
t_end: "10days"
dt_save_to_sol: "2days"
dt_save_to_sol: "0.5days"
dt_cpl: 400
dt: "400secs"
mono_surface: true
Expand Down
18 changes: 18 additions & 0 deletions config/model_configs/slabplanet_eisenman.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
run_name: "slabplanet_eisenman"
surface_setup: "PrescribedSurface"
moist: "equil"
vert_diff: true
rad: "gray"
energy_check: true
mode_name: "slabplanet_eisenman"
t_end: "10days"
dt_save_to_sol: "9days"
dt_cpl: 200
dt: "200secs"
mono_surface: true
h_elem: 6
precip_model: "0M"
anim: true
apply_limiter: false
job_id: "slabplanet_eisenman"

59 changes: 59 additions & 0 deletions experiments/AMIP/modular/components/ocean/eisenman_seaice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Eisenman-Zhang Model
Thermodynamic 0-layer, based on the Semtner 1979 model and later refined by sea ice model as specified by
Eisenman & Wettlaufer 2009 and Zhang et al 2021.

There are three prognostic variables, the height of ice (`h_i`), the ocean mixed layer depth (`T_ml`) and the
surface air temperature (`T_s`).

## Formulation
$$
L_i \frac{dh_i}{dt} = F_{atm} - F_{base}
$$
with the latent heat of fusion, $L_i=3 \times 10^8$ J m$^{-3}$, and where the (upward-pointing) flux into the atmosphere is
$$
F_{atm} = F_{rad} + F_{SH} + F_{LH}
$$
where $F\_{rad}$ is the net radiative flux, $F_{SH}$ is the sensible heat flux and $F_{LH}$ is the latent heat flux

The basal flux is
$$
F_{base} = F_0(T_{ml} - T_{melt})
$$
where $T_{melt} = 273.16$ K is the freezing temperature, and the basal heat coefficient $F_0 = 120$ W m$^{-2}$ K$^{-1}$.

The surface temperature is solved implicitly using a balance between $F_{atm}(T_s)$ and the conductive heat flux through the ice slab, $F_{ice}$:
$$
F_{atm} = F_{ice} = k_i \frac{T_{melt} - T_s}{h_i}
$$
where $k_i = 2$ W m$^{-2}$ k$^{-1}$ is the thermal conductivity of ice.
Currently the implicit solve is implemented as one Newton iteration (sufficient for the current spatial and temporal resolution - see Semtner 1976):
$$
T_s^{t+1} = T_s + \frac{F}{dF /d T_s} = T_s^{t} + \frac{- F_{atm}^t + F_{ice}^{t+1}}{k_i/h_i^{t+1} + d F_{atm}^t / d T_s^t}
$$
where $h_i^{t+1}$ is the updated $h^i$ from the previous section, and $d F_{atm}^t / d T_s^t$ needs to be supplied from the atmosphere model (or crudely calculated in the coupler, given $T_s$, turbulent diffusivities and transfer coefficients, and atmos state).

### Warm surface
Where $T_s^{t+1} > T_{melt}$, we set $T_s^{t+1} = T_{melt}$.
The oceal temperature $T_{ml}$ uses the standard slab model representation in ice-free conditions:
$$
\rho_w c_w h_{ml}\frac{dT_{ml}}{dt} = - F_{atm}
$$
In this case of no ice $T_s^{t+1} = T_{ml}^{t+1}$, while ice-covered conditions require that:
$$
\rho_w c_w h_{ml}\frac{dT_{ml}}{dt} = - F_{base}
$$
with $T_{ml}^{t+1} = T_{melt}$ in the absence of oceanic lateral flux (Q-flux).

### Transitions between ice-covered and ice-free conditions
- If the updated $T_{ml}^{t+1} < T_{melt}$, set $T_{ml}^{t+1} = T_{melt}$ and grow ice ($h_i^{t+1}$) due to the corresponding energy deficit.
- If the updated $h_i^{t+1} <= 0$ from a non-zero $h_i^t$, adjust $h_i^{t+1} = 0$ and use the surplus energy to warm the mixed layer,
where ice is present the $T_{ml}$ = $T_{melt}$ and $F_{base}$ = 0 during the transition

## Potential extensions
- area `ice_area_fraction` adjustment (e.g., assuming a minimal thickness)
- add a skin temperature equation

# References
- [Semtner 1976](https://journals.ametsoc.org/view/journals/phoc/6/3/1520-0485_1976_006_0379_amfttg_2_0_co_2.xml)
- [Eisenman & Wettlaufer 2009](https://www.pnas.org/doi/full/10.1073/pnas.0806887106)
- [Zhang et al 2021](https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2021MS002671), which can be found on [GitHub](https://github.com/sally-xiyue/fms-idealized/blob/sea_ice_v1.0/exp/sea_ice/srcmods/mixed_layer.f90)
Loading

0 comments on commit bf7d5c2

Please sign in to comment.