FESOM

The Finite Element Sea-ice Ocean Model (FESOM) is an unstructured mesh global ocean model using finite element methods to solve the hydro-static primitive equations with the Boussinesq approximation (Danilov et al., 2004 [1]; Wang et al., 2008 [2]). FESOM v1.4 is interfaced with DART by Aydoğdu et al. (2018a) [3] using a regional implementation in Turkish Straits System (Gürses et al. 2016 [4], Aydoğdu et al. 2018b [5]).

There is a recent version of the model called the Finite-volumE Sea ice–Ocean Model (FESOM2, Danilov et al. 2017 [6]). A version for coastal applications FESOM-C v.2 (Androsov et al., 2019 [7]) has also been published.

The FESOM V1.4 source code can be downloaded from https://fesom.de/models/fesom14

The FESOM/DART interfaces, diagnostics and support scripting were contributed by Ali Aydoğdu. Thanks Ali!

Overview

model_mod.f90

A module called fesom_modules is provided to pass the information from FESOM to DART. fesom_modules.f90 includes fortran routines adopted from FESOM v1.4 to read the mesh, set the variables and dimensions of the arrays. fesom_modules should have access to nod2d.out, nod3d.out, elem2d.out, elem3d.out, aux3d.out, depth.out and m3d.ini mesh files.

Forward operators use an interpolation using the closest model node in the horizontal, given that the application in Aydoğdu et al. (2018a) uses a very high-resolution mesh. In the vertical, a linear interpolation is performed between two enclosing model layers. Interpolation in model_interpolate routine can be improved, if needed.

Note that because the FESOM-native code explicitly types reals, the DART mechanism of being able to run in reduced precision by defining real(r8) to be the same as real(r4) via ‘types_mod.f90’ is not supported.

Workflow

  1. environment.load Must be modified to contain the specifics of an experiment. This file is sourced by every other script below.

  2. experiment.launch Takes the information from environment.load and creates runnable scripts from the template script files. This also initiates the first cycle of the experiment.

    2.1. ensemble.sh

    2.1.1. initialize.template (first cycle only)

    2.1.2. advance_model.template (job array to advance the ensemble)

    2.1.3. check_ensemble.sh (if all goes well, assimilate)

    2.1.3.1. filter.template (assimilate)

    2.1.3.2. finalize.sh if all goes well and experiment is not finished …

    continue to 2.1

Shell Scripts

Shell scripts are written in bash for LSF queuing system. They should be modified to work with others such as SLURM. FESOM executables are called externally detached from DART therefore no need for an advance model.

Script

Queue

Definition

environment.load

serial

Includes environment variables, relevant directories, experiment specifications. This file is sourced by every other script below.

experiment.launch

serial

Main script which modifies ensemble.sh and calls ensemble.${EXPINFO}.sh. An experiment-specific summary which should be modified before launching the scripts.

ensemble.sh

serial

Calls and submits initialize.template, advance_model.template check_ensemble.sh one after the other.

initialize.template

serial

Called only once at the beginning of the experiment. Sets the experiment directory, copies initial ensemble, namelists.

advance_model.template

parallel

Submits a job array for all ensemble members.

check_ensemble.sh

serial

Checks if the forwarding for all members is finished. If so, first calls filter.template and then calls finalize.sh to conclude current assimilation cycle.

filter.template

parallel

Runs the filter to perform the assimilation.

finalize.sh

serial

Checks if the whole experiment is finished. If so, stops. Otherwise, resubmits ensemble.${EXPINFO}.sh for the next assimilation cycle.

Diagnostics

A toolbox for diagnostics is provided. Some are written for a specific regional application using Ferrybox observations of temperature and salinity. However, it shouldn’t be difficult to add new tools following the present ones. A fortran toolbox post-processes the FESOM outputs and visualization is done using Generic Mapping Tools (GMT). DART post-processed netCDF outputs are visualized using FERRET. Please see the expanded description inside each source file.

Directory

code file

description

src/

fesom_post_main.F90

main fortran routine calling each tool selected in the namelist

fesom_ocean_mod.F90

ocean diagnostic routines

fesom_dart_mod.F90

DART diagnostic output routines

fesom_forcing_mod.F90

forcing diagnostic routines

fesom_observation_mod.F90

observation diagnostic routines

gen_input.F90

routines for I/O (adapted from FESOM)

gen_modules_clock.F90

routines for timing (adapted from FESOM)

gen_modules_config.F90

routines for configuration (adapted from FESOM)

mesh_read.F90

routines for reading the mesh (adapted from FESOM)

Makefile

Makefile (adapted from FESOM) but reads DART environment

oce_dens_press.F90

routines to compute density and pressure (adapted from FESOM)

oce_mesh_setup.F90

routines for mesh setup (adapted from FESOM)

oce_modules.F90

routines for ocean modules (adapted from FESOM)

random_perturbation.F90

random perturbation to observation sampling

utilities.F90

various utilities

script/

compute_ensemble_mean

computes ensemble mean and extracts a transect or level

compute_increment

computes increment using DART diagnostic output

compute_NR_diff

computes the difference between a nature run and the ensemble prior mean

dart_obs_seq_diag

DART observation-space statistics from obs_epoch.nc and obs_diag.nc

dart.postproc.env

DART environment variables

fesom.postproc.env

FESOM environment variables

observe_nature_run

creates synthetic observations from a nature run

transect_daily_mean

extracts and plots a transect of an individual ensemble member

zlevel_daily_mean

extracts and plots a level of an individual ensemble member

gmt/

plot_ensemble_mean.gmt

plots ensemble mean created by compute_ensemble_mean

plot_increment.gmt

plots increment created by compute_increment

plot_NR_diff.gmt

plots difference created by compute_NR_diff

transect_daily_mean.gmt

plots transects created by transect_daily_mean

zlevel_yearly_mean.gmt

plots levels created by zlevel_daily_mean

ferret/

frt.obs_diag_TeMPLaTe.jnl

plot DART diags created by dart_obs_seq_diag

frt.obs_epoch_TeMPLaTe.jnl

plot DART diags created by dart_obs_seq_diag

References