Opened 4 years ago

Closed 4 years ago

#875 closed upgrade (Done)

IMPORTANT: Compiling ROMS with CMake — at Version 1

Reported by: arango Owned by:
Priority: major Milestone: Release ROMS/TOMS 3.9
Component: Nonlinear Version: 3.9
Keywords: Cc:

Description (last modified by arango)

Added the capability to compile ROMS with CMake and ecbuild. We are currently working on the interface to connect ROMS with the Joint Effort for Data Assimilation Integration ​(JEDI) project that is being developed by the Joint Center for Satellite Data Assimilation (JCSDA).

The JEDI layer is model agnostic and includes OOPS (Object-Oriented Prediction System), UFO (Unified Forward Operator), IODA (Interface for Observation Data Access), and other packages for generic applications of data assimilation.

We started working on the roms-jedi repository inside JCSDA GitHub project. To facilitate interactions with all the JEDI packages, we need to have an option to compile ROMS with CMake and ecbuild.

CMake is not as friendly, advanced, and flexible as compiling ROMS with GNU make (gmake). It took David Robertson several weeks to develop a robust and generic strategy to compile and link the various algorithms available in ROMS. The Fortran dependencies were a nightmare because of all the C-preprocessing options in ROMS.


What Is New:

  • Now, there is a CMakeLists.txt in every ROMS source code sub-directory. The top-level CMakeLists.txt in the root directory (same place where GNU makefile is located) contains all the CMake definitions. Also, the Compilers sub-directory includes several .cmake extension configurations files.
  • Two additional build scripts cbuild_roms.csh and cbuild_roms.sh were added to ROMS/Bin.
  • A Perl script FixDependInfo.pl was added to ROMS/Bin to remove .F files the compiler dependency information when using CMake. The dependency generator is easily confused by CPP if-directives. Only the preprocesed .f90 files are used to determine the dependencies.
  • WARNING: this version of CMake uses ecbuild developed at ECMWF, which consists of a set of macros as well as a wrapper around CMake. It can be downloaded from GitHub. For tutorial and usage check its documentation.

Many thanks to David Robertson for his persistence and making CMake work in ROMS.

Change History (1)

comment:1 by arango, 4 years ago

Description: modified (diff)
Resolution: Done
Status: newclosed
Note: See TracTickets for help on using tickets.