Building SOCA in Singularity

This section describes how to configure and compile SOCA inside of a Singularity container. ecbuild (a wrapper of cmake) is used for the configuration of the build and ctest to confirm that the compiled code is working properly. Usage of cmake and ctest are described in the JEDI CMake, CTest, and ecbuild documentation.

While SOCA can be complied on various architectures (HPC, workstations, …), this section only describes how to compile SOCA inside of a Singularity container. Instruction on how to install and run Singularity is provided in the JEDI development Singularity container.

Download and run a shell inside of a Singularity container:

singularity pull library://jcsda/public/jedi-gnu-openmpi-dev  # download the development container
singularity shell -e jedi-gnu-openmpi-dev_latest.sif          # run a shell within a singularity container

Clone the 1.0.0 tag of the SOCA repository

git clone --branch 1.0.0

This will create a SOCA directory that contains the MOM6 interface to JEDI as well as the necessary dependencies provided as an ecbuild bundle in soca/bundle/CMakeLists.txt

Default configuration and build of SOCA

mkdir build
cd build
ecbuild ../soca/bundle  # configure the build
make -j<nthreads>       # compile
ctest                   # test all JEDI components including `soca`

Extra build configurations for SOCA

To enable the use of the Community Radiative Transfer Model (CRTM) set the build option BUILD_CRTM for the ecbuild step above:

ecbuild -DBUILD_CRTM=ON ../soca/bundle

To enable the use of the biogeochemistry model BLING set the build option ENABLE_OCEAN_BGC` for the ``ecbuild step above:

ecbuild -DENABLE_OCEAN_BGC=ON ../soca/bundle

Built executables

After completing the SOCA build, users have access to executables under build/bin, many of which are generated when building the projects on which SOCA is dependent ( OOPS, UFO, SABER).

Most of these executables are model-specific implementations of generic applications that are derived from the oops::Application class, i.e., oops/src/oops/runs/Application.h. Descriptions of the generic applications are located under the OOPS Applications documentation. Here we give short synopses of a few specific SOCA implementations.

  • Generic Applications

    • soca_convertstate.x (oops::ConvertState)

    • soca_dirac.x (oops::Dirac)

    • soca_forecast.x (oops::Forecast): similar to the mom6.x executable, but through the JEDI generic framework via the SOCA interface.

    • soca_enspert.x (oops::GenEnsPertB)

    • soca_ensrecenter.x (oops::EnsRecenter)

    • soca_ensvariance (oops::EnsVariance)

    • soca_hofx.x (oops::HofX4D)

    • soca_hofx3d.x (oops::HofX3D)

    • soca_parameters.x (saber::EstimateParams): used to estimate static background error covariance and localization matrices

    • soca_staticbinit.x (oops::StaticBInit): used to initialize the covariance model

    • soca_var.x (oops::Variational): carries out many different flavors of variational data assimilation (3DVar, 3DEnVar, 3DFGAT, 4DEnVar) with a variety of incremental minimization algorithms

    • soca_letkf.x (oops::LocalEnsembleDA)

    • soca_hybridgain.x (oops::HybridGain)

    • soca_enshofx.x (oops::EnsembleApplication<oops::HofX4D>)

  • SOCA specific Applications

    • soca_checkpoint_model.x (soca::CheckpointModel)

    • soca_gridgen.x (soca::GridGen)

Most of the SOCA executables are exercised in ctests. As users learn how to use SOCA for larger-scale applications, it is useful to consider the ctests as examples and templates.