Opened 22 months ago
Closed 22 months ago
#942 closed upgrade (Done)
IMPORTANT: Condolidation and refactoring due to the sea-ice model
Reported by: | arango | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | Release ROMS/TOMS 4.2 |
Component: | Nonlinear | Version: | 4.2 |
Keywords: | Cc: |
Description
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 will be found soon in the GitHub repository 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.
Notice that the sub-directory SeaIce containing the sea-ice model is not released yet. I am only releasing the modifications needed in the ROMS infrastructure. Our strategy is to isolate model kernels for flexibility, as we have done with Biology, Sediment, and WEC in the Nonlinear kernel sub-directory.