Skip to content

ROMS Branches

Hernan G. Arango edited this page Aug 2, 2023 · 8 revisions

main

This branch includes the tagged versions and the latest stable release of ROMS. It contains the entire history of ROMS development and evolution.

How to use/download this branch:

git clone https://github.com/myroms/roms.git
git tag
git checkout feature/main

or

 git checkout roms-4.1

or

build_roms.sh -j 10 -b feature/main
cbuild_roms.sh -j 10 -b feature/main

develop

This is the main developing branch (default) of ROMS. It contains the latest stable version of ROMS development and is updated via the feature branches. It serves as an integration branch for new features or bug fixes. Notice that the feature branches use develop as the parent branch. Once we are satisfied, it is tagged and merged to the main branch.

git clone https://github.com/myroms/roms.git

or

build_roms.sh -j 10 -b develop
cbuild_roms.sh -j 10 -b develop

feature/kernel

This branch includes significant updates to ROMS numerical kernels:

1. The ROMS barotropic kernel (step2d) includes the Generalized Forward-Backward 3rd-order Adams-Bashforth /4th-order Adams-Moulton (FB AB3-AM4) time stepping algorithm (Shchepetkin and McWilliams, 2005; 2009). Use the STEP2D_FB_AB3_AM4 option to activate this time-stepping algorithm. Notice that step2d.F module has the following logic:

  #ifdef NONLINEAR
  # if defined STEP2D_FB_AB3_AM4
  #  include "step2d_FB.h"
  # elif defined STEP2D_FB_LF_AM3
  #  include "step2d_FB_LF_AM3.h"
  # else
  #  include "step2d_LF_AM3.h"
  # endif
  #else
        MODULE step2d_mod
        END MODULE step2d_mod
  #endif

The new routine step2d_FB.h is more efficient, accurate, and compact. No predictor and corrector blocks exist in main2d or main3d. In 3D configurations (SOLVE3D), it suppresses the computation of momentum advection, Coriolis, and lateral viscosity terms because these terms are already included in the baroclinic-to-barotropic forcing arrays rufrc and rvfrc. It does not mean we are entirely omitting them, but it is a choice between recomputing them at every barotropic step or keeping them frozen during the fast-time stepping. However, in some coarse grid applications with larger baroclinic timestep (say, DT around 20 minutes or larger), adding the Coriolis term in the barotropic equations is useful since f*DT is no longer small. In such a case, we recommend activating STEP2D_CORIOLIS.

Currently, the FB AB3-AM4 only works for the nonlinear kernel. Although the TLM, RPM, and ADM versions are coded, we must determine the correct cycling logic for updating the time-stepping indices in the adjoint model.

How to use/download this branch:

git clone https://github.com/myroms/roms.git
git checkout feature/kernel

or

build_roms.sh -j 10 -b feature/kernel
cbuild_roms.sh -j 10 -b feature/kernel

2. Implemented the adaptive, Courant-number-dependent implicit scheme for vertical advection (Shchepetkin, 2015). The vertical velocity is split into explicit (W) and implicit (Wi) parts that adjust automatically to the local flow conditions based on the Courant number for stability, allowing a larger timestep (DT). It is activated with the OMEGA_IMPLICIT option. We are still working on the TLM, RPM, and ADM versions of omega.F.

Thus, we cannot yet run variational data assimilation (4D-Var) with the new kernels. It is only possible in the multiple executables split 4D-Var to run the nonlinear trajectory used to linearize the TLM and ADM kernels.

Associated Options:

Option Description
STEP2D_FB_AB3_AM4 FB AB3-AM4 2D kernel time-stepping algorithm
STEP2D_CORIOLIS To include Coriolis term for DT > 20 minutes

References:

Shchepetkin, A.F. and J.C. McWilliams, 2005: The regional oceanic modeling system (ROMS): a split-explicit, free-surface, topography-following-coordinate oceanic model, Ocean Modelling, 9, 347-404, doi:10.1016/j.ocemod.2004.08.002.

Shchepetkin, A.F., and J.C. McWilliams, 2009: Computational kernel algorithms for fine-scale, multiprocess, longtime oceanic simulations, pp 121-183. In Handbook of Numerical Analysis: Computational Methods for the Atmosphere and Oceans, R.M. Teman and J.J. Tribbia, eds, Elsevier Science.

Shchepetkin, A.F., 2015: An adaptive, Courant-number-dependent implicit scheme for vertical advection in oceanic modeling, Ocean Modelling, 91, 38-69, doi:10.1016/j.ocemod.2015.03.006.

feature/seaice

This branch includes a native sea-ice model to ROMS. It was initially written by Paul Budgell (2005), maintained by Kate Hedstrom, and updated by Scott Durski (Durski and Kurapov, 2019, 2020). It is primarily based on Mellor and Kantha (1989) and Parkinson and Washington (1979).

The sea-ice model has been cleaned, documented, and redesigned to facilitate adjoint-based applications in the future. It has only two state variables, Fi and Si, that can be expanded. The original code has at least 39 arrays. It can be activated with the **ICE_MODEL** option.

! Define derived-type structure ice model state and internal arrays.
 
     TYPE T_ICE
        real(r8), pointer :: Fi(:,:,:)               ! [i,j,1:nIceF]
        real(r8), pointer :: Si(:,:,:,:)             ! [i,j,1:2,1:nIceS]
      END TYPE T_ICENgrids
      TYPE (T_ICE), allocatable :: ICE(:)            ! [Ngrids]

! Ice model state prognostic variables indices.

      integer, parameter :: nIceS = 15  ! number of ice state variables
      integer :: iSice(nIceS)           ! state I/O indices
      integer, parameter :: isAice =  1 ! ice concentration
      integer, parameter :: isHice =  2 ! ice thickness
      integer, parameter :: isHmel =  3 ! melt water thickness on ice
      integer, parameter :: isHsno =  4 ! snow thickness
      integer, parameter :: isIage =  5 ! ice age
      integer, parameter :: isISxx =  6 ! internal ice xx-stress
      integer, parameter :: isISxy =  7 ! internal ice xy-stress
      integer, parameter :: isISyy =  8 ! internal ice yy-stress
      integer, parameter :: isTice =  9 ! ice interior temperature
      integer, parameter :: isUice = 10 ! ice U-velocity
      integer, parameter :: isVice = 11 ! ice V-velocity
      integer, parameter :: isEnth = 12 ! ice/brine enthalpy
      integer, parameter :: isHage = 13 ! thickness linked with ice age
      integer, parameter :: isUevp = 14 ! EVP ice U-velocity
      integer, parameter :: isVevp = 15 ! EVP ice V-velocity

! Ice model internal variables indices.

      integer, parameter :: nIceF = 24  ! number of ice field variables
      integer :: iFice(nIceF)           ! internal fields I/O indices
      integer, parameter :: icAIus =  1 ! surface Air-Ice U-stress
      integer, parameter :: icAIvs =  2 ! surface Air-Ice V-stress
      integer, parameter :: icBvis =  3 ! ice bulk viscosity
      integer, parameter :: icHsse =  4 ! sea surface elevation
      integer, parameter :: icIOfv =  5 ! Ice-Ocean friction velocity
      integer, parameter :: icIOmf =  6 ! Ice-Ocean mass flux
      integer, parameter :: icIOmt =  7 ! Ice-Ocean momentum transfer
      integer, parameter :: icIOvs =  8 ! Ice-Ocean velocity shear
      integer, parameter :: icIsst =  9 ! ice/snow surface temperature
      integer, parameter :: icPgrd = 10 ! gridded ice strength
      integer, parameter :: icPice = 11 ! ice pressure or strength
      integer, parameter :: icQcon = 12 ! ice/snow heat conductivity
      integer, parameter :: icQrhs = 13 ! RHS heat flux over ice/snow
      integer, parameter :: icSvis = 14 ! ice shear viscosity
      integer, parameter :: icS0mk = 15 ! molecular sublayer salinity
      integer, parameter :: icT0mk = 16 ! molecular sublayer temperature
      integer, parameter :: icUavg = 17 ! average mixed-layer U-velocity
      integer, parameter :: icVavg = 18 ! average mixed-layer V-velocity
      integer, parameter :: icWdiv = 19 ! ice divergence rate
      integer, parameter :: icW_ai = 20 ! melt/freeze rate at Air/Ice
      integer, parameter :: icW_ao = 21 ! melt/freeze rate at Air/Ocean
      integer, parameter :: icW_fr = 22 ! ice accretion rate by Frazil
      integer, parameter :: icW_io = 23 ! melt/freeze rate at Ice/Ocean
      integer, parameter :: icW_ro = 24 ! melt/freeze rate runoff

Warning:

It needs testing. We hope the beta testers with some expertise in sea-ice modeling help us with testing and further development.

The data input data management is still missing but can easily be added in get_data.F and set_data.F. It was postponed until we worked on the required atmospheric fields for coupling using the ESMF/NUOPC infrastructure.

How to use/download this branch:

git clone https://github.com/myroms/roms.git
git checkout feature/seaice

or

build_roms.sh -j 10 -b feature/seaice
cbuild_roms.sh -j 10 -b feature/seaice

Associated Options:

Option Description
ICE_MODEL To activate ROMS native sea-ice model
ICE_THERMO If thermodynamic component
ICE_MK If Mellor-Kantha thermodynamics (only choice)
ICE_ALB_EC92 If albedo computation from Ebert and Curry
ICE_MOMENTUM If momentum component
ICE_MOM_BULK If alternate ice-water stress computation
ICE_EVP If elastic-viscous-plastic rheology
ICE_ADVECT If advection of ice tracers
ICE_SMOLAR If MPDATA advection scheme
ICE_UPWIND If upwind advection scheme
ICE_BULK_FLUXES If ice part of bulk flux computation
ICE_CONVSNOW If the conversion of flooded snow to ice
ICE_STRENGTH_QUAD If quadratic ice strength, a function of thickness
NO_SCORRECTION_ICE If no salinity correction under the ice
OUTFLOW_MASK If Hibler-style outflow cells

References:

Durski, S.M., and A.L. Kurapov, 2019: A high-resolution coupled ice-ocean model of winter circulation on the Bering sea shelf. Part I: Ice model refinements and skill assessments, Ocean Modelling, 133, 145-161, doi:10.1016/j.ocemod.2018.11.004.

Durski, S.M., and A.L. Kurapov, 2020: A high-resolution coupled ice-ocean model of winter circulation on the Bering Sea Shelf. Part II: Polynyas and the shelf salinity distribution, Ocean Modelling, 156, 101696, doi:/10.1016/j.ocemod.2020.101696.

Mellor, G.L. and L. Kantha, 1989: An Ice-Ocean Coupled Model, J. Geophys. Res., 94, 10937-10954.

feature/wec

This branch includes the Vortex Force formulation of Uchiyama et al. (2010) that has been added to the ROMS nonlinear kernel, and it is based on COAWST implementation and improvements (Kumar et al., 2012). It can be used in nearshore or shallow coastal applications to allow the effect of waves on current and vice versa. It is activated with the option WEC_VF and requires wave-forcing data via an input NetCDF file or coupling to a wave model.

How to use/download this branch:

git clone https://github.com/myroms/roms.git
git checkout feature/wec

or

build_roms.sh -j 10 -b feature/wec
cbuild_roms.sh -j 10 -b feature/wec

Associated Options:

Option Description
BOTTOM_STREAMING To activate wave-enhanced bottom streaming
ROLLER_SVENDSEN To activate wave roller based on Svendsen
ROLLER_MONO To activate wave roller for monochromatic waves
ROLLER_RENIERS To activate wave roller based on Reniers
SURFACE_STREAMING To activate wave-enhanced surface streaming
WAVE_MIXING To activate enhanced vertical viscosity mixing from waves
WDISS_CHURTHOR To activate wave dissipation from Church/Thorton
WDISS_GAMMA To activate wave dissipation when using InWave model
WDISS_ROELVINK To activate wave dissipation Roelvink when using InWave model
WDISS_THORGUZA To activate wave dissipation from Thorton/Guza
WDISS_WAVEMOD To activate wave dissipation from a wave model
WEC Internal ROMS algorithm
WEC_VF To activate wave-current stresses from Uchiyama et al. (2020)
WET_DRY To activate wetting and drying

References:

Kumar, N., G. Voulgaris, J.C. Warner, J.C., and M., Olabarrieta, 2012: Implementation of a vortex force formalism in the coupled ocean-atmosphere-wave-sediment transport (COAWST) modeling system for inner-shelf and surf-zone applications, Ocean Modeling, 47, 65-95, doi:10.1016/j.ocemod.2012.01.003

Uchiyama, Y., J.C. McWilliams, and A.F. Shchepetkin, 2010: Wave current interaction in an oceanic circulation model with a vortex-force formalism: Applications to surf zone, Ocean Modeling, 34, 16-35, doi: 10.1016/j.ocemod.2010.04.002.

Clone this wiki locally