﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
938	VERY IMPORTANT: Consolidation and refactoring of ROMS repositories to GitHub	arango		"We started the process of consolidating and refactoring **ROMS** repositories into **!GitHub**. Several research repositories are private for ongoing updates and additions, and we would like to give access to selected superusers and beta testers. It also facilitates the integration of **ROMS** into modern community frameworks based on principles of Object Oriented Programming (**OOP)**.

The new **!GitHub** repository has the following branches:

* [[span(style=color: #FF0000, **master**)]]: Tagged versions and latest stable version of **ROMS**
* [[span(style=color: #FF0000, **develop**)]]: Not for public consumption but passes the internal tests
* [[span(style=color: #FF0000, **feature branches**)]]: Research and new development branches with access to beta testers  
 * [[span(style=color: #0000FF, **feature/kernels**)]]:  Major update to **ROMS** numerical kernels (**omega.F** and **step2d.F**)
 * [[span(style=color: #0000FF, **feature/seaice**)]]: Native **sea-ice model** refactoring and development
 * [[span(style=color: #0000FF, **feature/wec**)]]: Wave Effects on Currents algorithms adopted from COAWST

----

=== __Consolidation Steps:__ ===

We need to consolidate the changes to **ROMS** due to the refactoring and development of the sea-ice model. Originally 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.

{{{
! 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
}}}

The sea-ice model kernel is located in the **ROMS/Nonlinear/SeaIce** subdirectory and can only be found in the [[span(style=color: #0000FF, **feature/seaice**)]] branch. 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."	upgrade	new	major	Release ROMS/TOMS 4.1	Nonlinear	4.0			
