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 ---------- .. [1] Danilov, S., Kivman, G., and Schröter, J.: A finite-element ocean model: principles and evaluation, Ocean Modell., 6, 125–150, 2004. .. [2] Wang, Q., Danilov, S., and Schröter, J.: Finite element ocean circulation model based on triangular prismatic elements, with application in studying the effect of topography representation, J. Geophys. Res.-Oceans (1978–2012), 113, C05015, `doi:10.1029/2007JC004482 `__, 2008. .. [3] Aydoğdu, A., Hoar, T. J., Vukicevic, T., Anderson, J. L., Pinardi, N., Karspeck, A., Hendricks, J., Collins, N., Macchia, F., and Özsoy, E.: OSSE for a sustainable marine observing network in the Sea of Marmara, Nonlin. Processes Geophys., 25, 537-551, `doi:10.5194/npg-25-537-2018 `__, 2018a. .. [4] Gürses, Ö., Aydoğdu, A., Pinardi, N., and Özsoy, E.: A finite element modeling study of the Turkish Straits System, in: The Sea of Marmara – Marine Biodiversity, Fisheries, Conservations and Governance, edited by: Özsoy E., Çaǧatay, M. N., Balkis, N., and Öztürk, B., TUDAV Publication, 169–184, 2016. .. [5] Aydoğdu, A., Pinardi, N., Özsoy, E., Danabasoglu, G., Gürses, Ö., and Karspeck, A.: Circulation of the Turkish Straits System under interannual atmospheric forcing, Ocean Sci., 14, 999-1019, `doi:10.5194/os-14-999-2018 `__, 2018b. .. [6] Danilov, S., Sidorenko, D., Wang, Q., and Jung, T.: The Finite-volumE Sea ice–Ocean Model (FESOM2), Geosci. Model Dev., 10, 765-789, `doi:10.5194/gmd-10-765-2017 `__, 2017. .. [7] Androsov, A., Fofonova, V., Kuznetsov, I., Danilov, S., Rakowsky, N., Harig, S., Brix, H., and Wiltshire, K. H.: FESOM-C v.2: coastal dynamics on hybrid unstructured meshes, Geosci. Model Dev., 12, 1009-1028, `doi:10.5194/gmd-12-1009-2019 `__, 2019.