ROMS Kernels - myroms/roms GitHub Wiki
ROMS encompasses various submodel kernels that enhance the physical and discretized governing equations, integrate interdisciplinary processes, and enable coupling frameworks with other geophysical systems. Some of these kernels are described below.
The Estuarine Carbon Biogeochemical (ECB) model was developed by colleagues (Feng et al., 2015, and follow-ups) at the Virginia Institute of Marine Science (VIMS), William & Mary. It is currently operational over the Chesapeake Bay estuary system and is referred to as ChesROMS-ECB.
The ECB model is similar in formulation and structure to the BIO_FENNEL kernel (Fennel et al., 2008). Still, multiple processes have been added by Druon et al. (2010), and Feng et al. (2015); numerous follow-ups are cited in the references section below. It is activated with the ECB and its configuration parameters are set in bio_ECB.in. It includes the following CPP options:
| CPP Option | Description |
|---|---|
| ECB | Activates the Estuarine Carbon Biogeochemical model |
| BIO_SEDIMENT | Restores fallen particulate material to the nutrient pool |
| CARBON | Adds Carbon constituents |
| DENITRIFICATION | Adds denitrification processes |
| DIAGNOSTICS_BIO | Activates writing of 2D and 3D output ECB diagnostics terms |
| NET_SULFATE_REDUCTION | Includes total alkalinity and DIC fluxes from sediment sulfate reduction |
| OCMIP_OXYGEN_SC | Computes O2 Schmidt number from Keeling et al. (1998) |
| OXYGEN | Adds oxygen dynamics |
| PCO2AIR_DATA. | To use pCO2 gas exchange climatology from St-Laurent et al. (2020) |
| PCO2AIR_SECULAR | If alternative pCO2 gas exchange time-depedent evolution |
| PO4 | If using Phosphorus to limit the phytoplankton growth |
| pCO2_RZ_CAIWANG_1998 | To use Cai and Wang dissociation constants when computing pCO2 |
| pCO2_RZ_MILLERO_2010 | To use Millero (2010) dissociation constants when computing pCO2 |
| RW14_CO2_SC | if CO2 Schmidt number from Wanninkhof (2014) |
| RW14_OXYGEN_SC | if O2 Schmidt number from Wanninkhof (2014) |
| SANDS_PROXY_ISS | Use sediment sands as a proxy for Inorganic Suspended Solids in light attenuation |
| TALK_NONCONSERV | If total alkalinity is affected by changes in nitrate or ammonium |
The options BIO_SEDIMENT, CARBON, DENITRIFICATION, and OXYGEN should always be activated.
The ECB model includes a simplified Nitrogen cycle budget with several Carbon variables. Below is the model diagram from Feng et al. (2015):
Currently, the ECB model includes 18 state tracer variables:
| idbio(:) | Tracer Index | I/O Variable | Description |
|---|---|---|---|
| 1 | iNO3_ | NO3 | Nitrate concentration |
| 2 | iNH4_ | NH4 | Ammonium concentration |
| 3 | iChlo | chlorophyll | Chorophyll concentration |
| 4 | iPhyt | phytoplankton | Phytoplankton biomass |
| 5 | iZoop | zooplankton | Zooplankton biomass |
| 6 | iLDeN | LdetritusN | Large Detritus Nitrogen concentration |
| 7 | ISDeN | SdetritusN | Small Detritus Nitrogen concentration |
| 8 | iDON_ | semilabileDON | Semilabile Dissolved Organic Nitrogen concentration |
| 9 | iPO4_ | PO4 | Phosphate concentration |
| 10 | iLDeC | LdetritusC | Large Detritus Carbon concentration |
| 11 | iSDeC | SdetritusC | Small Detritus Carbon concentration |
| 12 | iTIC_ | TIC | Total Inorganic Carbon concentration |
| 13 | TAlk | alkalinity | Total Alkalinity concentration |
| 14 | iDOC | semilabileDOC | Semilabile Dissolved Organic Carbon concentration |
| 15 | iOxyg | oxygen | Dissolved Oxygen concentration |
| 16 | irDON | refractoryDON | Refractory Dissolved Organic Nitrogen concentration |
| 17 | irDOC | refractoryDOC | Refractory Dissolved Organic Carbon concentration |
| 18 | iCalc | calcium | Ca2+ functional concentration |
References:
-
Da, F., Friedrichs, M.A.M., St-Laurent, P., 2018: Impacts of atmospheric nitrogen deposition and coastal nitrogen fluxes on oxygen concentrations in Chesapeake Bay, J. Geophys. Res. Oceans, 123, 5004-5025. doi:10.1029/2018JC014009.
-
Da, F., Friedrichs, M.A.M., St-Laurent, P., Shadwick, E.H., Najjar, R.G., Hinson, K.E., 2021: Mechanisms driving decadal changes in the carbonate system of a coastal plain estuary, J. Geophys. Res. Oceans, 126, e2021JC017239 doi:10.1029/2021jc017239.
-
Da, F., Friedrichs, M.A.M., St-Laurent, P., Najjar, R.G., Shadwick, E.H., Stets, E.G., 2024: Influence of Rivers, Tides, and Tidal Wetlands on Estuarine Carbonate System Dynamics, Estuaries Coast., 47, 2283-2305, doi:10.1007/s12237-024-01421-z.
-
Druon, J.N., Mannino, A., Signorini, S., McClain, Friedrich, M., Wilkin, J., and Fennel, K., 2010: Modeling the dynamics and export of dissolved organic matter in the Northeastern U.S. continental shelf, Estuarine, Coastal, and Shelf Science, 88, 488-507, doi:10.1016/j.ecss.2010.05.010.
-
Feng, Y., Fiedricks, M., Wilkin, J., Tian, H., Yang, Q., Hofmann, A.E., Wiggert, J.D., Hood, R.R., 2015: Chesapeake Bay nitrogen fluxes derived from a land-estuarine ocean biogeochemical modeling system: Model description, evaluation, and nitrogen budgets, J. Geophys. Res. Biogeosci., 120, 1666-1695, doi:10.1002/2015JG002931..
-
Fennel, K., Wilkin, J., Levin, J., Moisan, J., O'Reilly, J., Haidvogel, D., 2006: Nitrogen cycling in the Mid Atlantic Bight and implications for the North Atlantic nitrogen budget: Results from a three-dimensional model, Global Biogeochemical Cycles, 20, GB3007, doi:10.1029/2005GB002456.
-
Fennel, K., Wilkin, J., Previdi, M., Najjar, R., 2008: Denitrification effects on air-sea CO2 flux in the coastal ocean: Simulations for the Northwest North Atlantic, Geophys. Res. Letters, 35, L24608, doi:10.1029/2008GL036147.
-
Fennel, K., Hu, J., Laurent, A., Marta-Almeida, M., Hetland, R., 2013: Sensitivity of Hypoxia Predictions for the Northern Gulf of Mexico to Sediment Oxygen Consumption and Model Nesting, J. Geophys. Res. Ocean, 118 (2), 990-1002, doi:10.1002/jgrc.20077.
-
Laurent, A., Fennel, K., Hu, J., Hetland, R. 2012: Simulating the Effects of Phosphorus Limitation in the Mississippi and Atchafalaya River Plumes, Biogeosciences, 9 (11), 4707-4723, doi:10.5194/bg-9-4707-2012.
-
St-Laurent, P., Friedrichs, M.A.M., Najjar, R.G., Shadwick, E.H., Tian, H., and Yao, Y., 2020: Relative impact of global changes on the inorganic carbon balance of the Chesapeake Bay, Biogeosciences, 17, 3779-3796, doi:10.5194/bg-17-3779-2020.
-
Turner, J.S., St-Laurent, P., Friedrichs, M.A.M., Friedrichs, C.T., 2021: Effects of reduced shoreline erosion on Chesapeake Bay water clarity, J. Sci. T. Env., 769, 145157, doi:10.1016/j.scitotenv.2021.145157.
-
Wanninkhof, R. 2014: Relationship between Wind Speed and Gas Exchange over the Ocean Revisited, Limnol. Oceanogr. Methods, 12 (6), 351-362, doi:10.4319/lom.2014.12.351.
-
Yu, L., Fennel, K., Laurent, A., Murrell, M. C., Lehrter, J. C., 2015: Numerical Analysis of the Primary Processes Controlling Oxygen Dynamics on the Louisiana Shelf, Biogeosciences, 12 (7), 2063-2076, doi:10.5194/bg-12-2063-2015.
The single-layer, sea ice model in ROMS 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). Now, the sea ice kernel 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.
! 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 runoffThe sea ice model is activated with the C-preprocessing option ICE_MODEL, and there are options for its configuration:
| CPP Option | Description |
|---|---|
| ALBEDO_CSIM | if CSIM albedo formulation |
| ALBEDO_CURVE | if seawater albedo from curve |
| ALBEDO_SZO | if zenith angle from Briegleb et al. (1986) |
| ICE_MODEL | To activate ROMS native sea-ice model |
| ICE_THERMO | If thermodynamic component |
| ICE_MK | If Mellor-Kantha thermodynamics (only choice) |
| ICE_ALBEDO | if surface albedo over water, snow, or ice |
| 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 is part of the 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 |
An idealized test case, LAKE_ICE, illustrates how to configure this simple sea ice model in ROMS. For more information and instructions, please check:
https://github.com/myroms/roms_test/blob/main/lake_ice/Forward/Readme.md
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, doi: 10.1029/JC094iC08p10937.
ROMS includes a wave-flow-vegetation kernel to parameterize the drag force and wave energy dissipation due to vegetation (Beudin et al., 2017) and marsh dynamics (Kalra et al., 2021). The main available options are:
| CPP Option | Description |
|---|---|
| ANA_VEGETATION | If analytical vegetation initial conditions |
| MARSH_DYNAMICS | If marsh dynamics: erosion, accretion, or retreat |
| MARSH_SED_EROSION | If marsh sediment export via bedload exchange |
| MARSH_TIDAL_RANGE | If tallying marsh mean tidal range |
| MARSH_VERT_GROWTH | If marsh vertical growth through biomass production |
| MARSH_WAVE_THRUST | If lateral wave thrust effects on marsh cells |
| VEGETATION | If activating the submerged and emergent aquatic vegetation model |
| VEG_DRAG | If activating drag effects due to waves and vegetation |
| WVEG_STREAMING | If currents and wave dissipation due to vegetation |
It includes two idealized Test Cases in the ROMS test repository to evaluate the options for the vegetation model:
-
Marsh Test: Idealized case to evaluate the marsh dynamics available in the new vegetation kernel. Please check Kalra et al. (2021) for more information about this application.https://github.com/myroms/roms_test/blob/main/marsh_test/Readme.md
-
Vegetation Test: Idealized case to evaluate the drag effect of vegetation on currents. Please check Beudin et al. (2017) for detailed information about this case.
https://github.com/myroms/roms_test/blob/main/vegetation_test/Readme.md
References:
-
Beudin, A., Kalra, T.S., Ganju, N.K., Warner, J.C., 2017: Development of a coupled wave-flow-vegetation interaction model, Computers & Geosciences, Vol 100, 76-86, doi: 10.1016/j.cageo.2016.12.010.
-
Kalra, T.S., Ganju, N.K., Aretxabaleta, A.L., Carr, J.A., Zafer, D., Moriarty, J.M., 2021: Modeling Marsh Dynamics Using a 3-D Coupled Wave-Flow-Sediment Model, Front. Mar. Sci., Vol 8, doi: 10.3389/fmars.2021.740921.
The Vortex Force formulation of Uchiyama et al. (2010) has been added to the ROMS nonlinear kernel. It is based on COAWST implementation and improvements (Kumar et al., 2012) and activated with the option WEC_VF. It can be used in shallow coastal applications to allow the effect of waves on currents and vice versa.
| CPP Option | Description |
|---|---|
| BOTTOM_STREAMING | If wave current bottom streaming term |
| ROLLER_SVENDSEN | If wave energy roller based on Svendsen (1984) |
| ROLLER_MONO | if wave energy roller from monochromatic waves |
| ROLLER_RENIERS | If wave energy roller based on Reniers (2004) |
| SURFACE_STREAMERS | If wave current surface streaming term |
| WAVE_MIXING | If enhanced vertical viscosity mixing from waves |
| WDISS_CHURTHOR | If wave dissipation from Church and Thornton (1993) |
| WDISS_GAMMA | If wave dissipation when using the InWave model |
| WDISS_ROELVINK | If wave dissipation from Roelvink when using the InWave model |
| WDISS_THORGUZA | If wave dissipation from Thornton and Guza (1986) |
| WDISS_WAVEMOD | If wave dissipation is acquired from a coupled wave model |
| WEC_VF | If wave-current vortex force from Uchiyma et al. (2010) |
| WEC | ROMS internal option, which is activated in globaldefs.h |
| WET_DRY | If wetting and drying land/sea mask |
-
This algorithm is tested using the Shoreface Test. This idealized coastal domain has a north-south periodic channel with a linear sloping shore on its eastern boundary. It is forced with wave data from the SWAN Model, which is read from an input NetCDF file. The figure below shows the free-surface solution at j=5 and time record 8.
For more information and instructions, please check:
https://github.com/myroms/roms_test/blob/main/shoreface/Readme.md
-
In more realistic scenarios, the WEC algorithm is tested with an idealized coastal domain with north-south periodic lateral boundary conditions and a sloping beach on the western boundary representing the bathymetry XZ-slice at Duck, North Carolina, USA. Please check the ROMS tests repository for more information and instructions:
https://github.com/myroms/roms_test/edit/main/DuckNC/Readme.md
- The figures below show the 2D slices from the history NetCDF file at j=4 and time record 10. It is plotted using plot_ducknc.m Matlab script.
NLM model WEC model 



- The figures below show the 2D slices from the diagnostic NetCDF file at j=4 and time record 10. It plots various right-hand-side terms from the u-momentum governing equation. They are also plotted using the plot_ducknc.m Matlab script.
u-momentum Diagnostics u-momentum Diagnostics 



Note
This algorithm is not supported in the Tangent Linear (TLM), Representer (RPM), and Adjoint (ADM) kernels. However, some terms are added to their time-stepping routines for future work, if the option is needed, but it is unlikely.
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.