Opened 2 years ago
Last modified 2 years ago
#938 closed bug
VERY IMPORTANT: Consolidation and refactoring of ROMS repositories to GitHub — at Initial Version
| Reported by: | arango | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | Release ROMS/TOMS 4.1 |
| Component: | Nonlinear | Version: | 4.0 |
| Keywords: | Cc: |
Description
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:
- master: Tagged versions and latest stable version of ROMS
- develop: Not for public consumption but passes the internal tests
- feature branches: Research and new development branches with access to beta testers
- feature/kernels: Major update to ROMS numerical kernels (omega.F and step2d.F)
- feature/seaice: Native sea-ice model refactoring and development
- 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 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.
