From 09238c7ceba0160aae6c18068b6b9088d392e4e5 Mon Sep 17 00:00:00 2001 From: Tony Craig Date: Fri, 11 Feb 2022 11:00:24 -0800 Subject: [PATCH] Add new geometries and tests (#61) * Change averaging for C grid * Fix masking * Use the A averager * Fix halo updates * - Add wall kmt_type - Add blockep4, uniformp5, medblocke, blocke to ice_data_type - Add ability to check if C/CD fields are on restart file and skip - Add new tests to gridsys_suite - Update documentation with new namelist * Rename box2000 to boxwallp5 Co-authored-by: David Bailey --- cicecore/cicedynB/general/ice_init.F90 | 38 +++++- cicecore/cicedynB/infrastructure/ice_grid.F90 | 14 ++- .../infrastructure/ice_restart_driver.F90 | 116 ++++++++++-------- .../io/io_netcdf/ice_restart.F90 | 29 ++++- .../infrastructure/io/io_pio2/ice_restart.F90 | 29 ++++- configuration/scripts/options/set_nml.boxchan | 1 + configuration/scripts/options/set_nml.boxwall | 56 +++++++++ .../scripts/options/set_nml.boxwallblock | 56 +++++++++ .../scripts/options/set_nml.boxwallp5 | 56 +++++++++ configuration/scripts/tests/gridsys_suite.ts | 9 ++ doc/source/user_guide/ug_case_settings.rst | 17 ++- 11 files changed, 359 insertions(+), 62 deletions(-) create mode 100644 configuration/scripts/options/set_nml.boxwall create mode 100644 configuration/scripts/options/set_nml.boxwallblock create mode 100644 configuration/scripts/options/set_nml.boxwallp5 diff --git a/cicecore/cicedynB/general/ice_init.F90 b/cicecore/cicedynB/general/ice_init.F90 index 1e7c16743..c3e8c582f 100644 --- a/cicecore/cicedynB/general/ice_init.F90 +++ b/cicecore/cicedynB/general/ice_init.F90 @@ -2142,6 +2142,7 @@ subroutine input_data if (kmt_type /= 'file' .and. & kmt_type /= 'channel' .and. & + kmt_type /= 'wall' .and. & kmt_type /= 'default' .and. & kmt_type /= 'boxislands') then if (my_task == master_task) write(nu_diag,*) subname//' ERROR: unknown kmt_type=',trim(kmt_type) @@ -2712,6 +2713,8 @@ subroutine set_state_var (nx_block, ny_block, & trim(ice_data_type) == 'smallblock' .or. & trim(ice_data_type) == 'channel' .or. & trim(ice_data_type) == 'bigblock' .or. & + trim(ice_data_type) == 'blockep5' .or. & + trim(ice_data_type) == 'uniformp5' .or. & trim(ice_data_type) == 'gauss') then hbar = c2 ! initial ice thickness @@ -2724,7 +2727,9 @@ subroutine set_state_var (nx_block, ny_block, & endif enddo - elseif (trim(ice_data_type) == 'boxslotcyl') then + elseif (trim(ice_data_type) == 'boxslotcyl' .or. & + trim(ice_data_type) == 'medblocke' .or. & + trim(ice_data_type) == 'blocke') then hbar = c1 ! initial ice thickness (1 m) do n = 1, ncat @@ -2781,7 +2786,8 @@ subroutine set_state_var (nx_block, ny_block, & enddo ! i enddo ! j - elseif (trim(ice_data_type) == 'uniform') then + elseif ((trim(ice_data_type) == 'uniform') .or. & + (trim(ice_data_type) == 'uniformp5')) then ! all cells not land mask are ice icells = 0 do j = jlo, jhi @@ -2807,6 +2813,34 @@ subroutine set_state_var (nx_block, ny_block, & enddo enddo + elseif (trim(ice_data_type) == 'blocke' .or. & + trim(ice_data_type) == 'blockep5') then + ! block on east half of domain + icells = 0 + do j = jlo, jhi + do i = ilo, ihi + if (iglob(i) >= nx_global/2) then + icells = icells + 1 + indxi(icells) = i + indxj(icells) = j + endif + enddo + enddo + + elseif (trim(ice_data_type) == 'medblocke') then + ! block on east half of domain in center of domain + icells = 0 + do j = jlo, jhi + do i = ilo, ihi + if (jglob(j) > ny_global/4 .and. jglob(j) < 3*nx_global/4 .and. & + iglob(i) >= nx_global/2) then + icells = icells + 1 + indxi(icells) = i + indxj(icells) = j + endif + enddo + enddo + elseif (trim(ice_data_type) == 'smallblock') then ! 2x2 ice in center of domain icells = 0 diff --git a/cicecore/cicedynB/infrastructure/ice_grid.F90 b/cicecore/cicedynB/infrastructure/ice_grid.F90 index c5761872d..e43a81b9a 100644 --- a/cicecore/cicedynB/infrastructure/ice_grid.F90 +++ b/cicecore/cicedynB/infrastructure/ice_grid.F90 @@ -1410,9 +1410,17 @@ subroutine rectgrid elseif (trim(kmt_type) == 'channel') then - do j = 3,ny_global-2 ! closed top and bottom - do i = 1,nx_global ! open sides - work_g1(i,j) = c1 ! NOTE nx_global > 5 + do j = 3,ny_global-2 ! closed top and bottom + do i = 1,nx_global ! open sides + work_g1(i,j) = c1 ! NOTE nx_global > 5 + enddo + enddo + + elseif (trim(kmt_type) == 'wall') then + + do j = 1,ny_global ! open except + do i = 1,nx_global-2 ! closed east edge + work_g1(i,j) = c1 enddo enddo diff --git a/cicecore/cicedynB/infrastructure/ice_restart_driver.F90 b/cicecore/cicedynB/infrastructure/ice_restart_driver.F90 index 5595d0bf9..b3cd413a9 100644 --- a/cicecore/cicedynB/infrastructure/ice_restart_driver.F90 +++ b/cicecore/cicedynB/infrastructure/ice_restart_driver.F90 @@ -358,21 +358,27 @@ subroutine restartfile (ice_ic) 'vvel',1,diag,field_loc_NEcorner, field_type_vector) if (grid_ice == 'CD') then - call read_restart_field(nu_restart,0,uvelE,'ruf8', & - 'uvelE',1,diag,field_loc_Eface, field_type_vector) - call read_restart_field(nu_restart,0,vvelE,'ruf8', & - 'vvelE',1,diag,field_loc_Eface, field_type_vector) - call read_restart_field(nu_restart,0,uvelN,'ruf8', & - 'uvelN',1,diag,field_loc_Nface, field_type_vector) - call read_restart_field(nu_restart,0,vvelN,'ruf8', & - 'vvelN',1,diag,field_loc_Nface, field_type_vector) + if (query_field(nu_restart,'uvelE')) & + call read_restart_field(nu_restart,0,uvelE,'ruf8', & + 'uvelE',1,diag,field_loc_Eface, field_type_vector) + if (query_field(nu_restart,'vvelE')) & + call read_restart_field(nu_restart,0,vvelE,'ruf8', & + 'vvelE',1,diag,field_loc_Eface, field_type_vector) + if (query_field(nu_restart,'uvelN')) & + call read_restart_field(nu_restart,0,uvelN,'ruf8', & + 'uvelN',1,diag,field_loc_Nface, field_type_vector) + if (query_field(nu_restart,'vvelN')) & + call read_restart_field(nu_restart,0,vvelN,'ruf8', & + 'vvelN',1,diag,field_loc_Nface, field_type_vector) endif if (grid_ice == 'C') then - call read_restart_field(nu_restart,0,uvelE,'ruf8', & - 'uvelE',1,diag,field_loc_Eface, field_type_vector) - call read_restart_field(nu_restart,0,vvelN,'ruf8', & - 'vvelN',1,diag,field_loc_Nface, field_type_vector) + if (query_field(nu_restart,'uvelE')) & + call read_restart_field(nu_restart,0,uvelE,'ruf8', & + 'uvelE',1,diag,field_loc_Eface, field_type_vector) + if (query_field(nu_restart,'vvelN')) & + call read_restart_field(nu_restart,0,vvelN,'ruf8', & + 'vvelN',1,diag,field_loc_Nface, field_type_vector) endif !----------------------------------------------------------------- @@ -443,18 +449,24 @@ subroutine restartfile (ice_ic) 'stress12_4',1,diag,field_loc_center,field_type_scalar) ! stress12_4 if (grid_ice == 'CD' .or. grid_ice == 'C') then - call read_restart_field(nu_restart,0,stresspT,'ruf8', & - 'stresspT' ,1,diag,field_loc_center,field_type_scalar) ! stresspT - call read_restart_field(nu_restart,0,stressmT,'ruf8', & - 'stressmT' ,1,diag,field_loc_center,field_type_scalar) ! stressmT - call read_restart_field(nu_restart,0,stress12T,'ruf8', & - 'stress12T',1,diag,field_loc_center,field_type_scalar) ! stress12T - call read_restart_field(nu_restart,0,stresspU,'ruf8', & - 'stresspU' ,1,diag,field_loc_NEcorner,field_type_scalar) ! stresspU - call read_restart_field(nu_restart,0,stressmU,'ruf8', & - 'stressmU' ,1,diag,field_loc_NEcorner,field_type_scalar) ! stressmU - call read_restart_field(nu_restart,0,stress12U,'ruf8', & - 'stress12U',1,diag,field_loc_NEcorner,field_type_scalar) ! stress12U + if (query_field(nu_restart,'stresspT')) & + call read_restart_field(nu_restart,0,stresspT,'ruf8', & + 'stresspT' ,1,diag,field_loc_center,field_type_scalar) ! stresspT + if (query_field(nu_restart,'stressmT')) & + call read_restart_field(nu_restart,0,stressmT,'ruf8', & + 'stressmT' ,1,diag,field_loc_center,field_type_scalar) ! stressmT + if (query_field(nu_restart,'stress12T')) & + call read_restart_field(nu_restart,0,stress12T,'ruf8', & + 'stress12T',1,diag,field_loc_center,field_type_scalar) ! stress12T + if (query_field(nu_restart,'stresspU')) & + call read_restart_field(nu_restart,0,stresspU,'ruf8', & + 'stresspU' ,1,diag,field_loc_NEcorner,field_type_scalar) ! stresspU + if (query_field(nu_restart,'stressmU')) & + call read_restart_field(nu_restart,0,stressmU,'ruf8', & + 'stressmU' ,1,diag,field_loc_NEcorner,field_type_scalar) ! stressmU + if (query_field(nu_restart,'stress12U')) & + call read_restart_field(nu_restart,0,stress12U,'ruf8', & + 'stress12U',1,diag,field_loc_NEcorner,field_type_scalar) ! stress12U endif if (trim(grid_type) == 'tripole') then @@ -509,33 +521,37 @@ subroutine restartfile (ice_ic) if (grid_ice == 'CD' .or. grid_ice == 'C') then - call read_restart_field(nu_restart,0,work1,'ruf8', & - 'icenmask',1,diag,field_loc_center, field_type_scalar) - - icenmask(:,:,:) = .false. - !$OMP PARALLEL DO PRIVATE(iblk,i,j) - do iblk = 1, nblocks - do j = 1, ny_block - do i = 1, nx_block - if (work1(i,j,iblk) > p5) icenmask(i,j,iblk) = .true. - enddo - enddo - enddo - !$OMP END PARALLEL DO - - call read_restart_field(nu_restart,0,work1,'ruf8', & - 'iceemask',1,diag,field_loc_center, field_type_scalar) + if (query_field(nu_restart,'icenmask')) then + call read_restart_field(nu_restart,0,work1,'ruf8', & + 'icenmask',1,diag,field_loc_center, field_type_scalar) + + icenmask(:,:,:) = .false. + !$OMP PARALLEL DO PRIVATE(iblk,i,j) + do iblk = 1, nblocks + do j = 1, ny_block + do i = 1, nx_block + if (work1(i,j,iblk) > p5) icenmask(i,j,iblk) = .true. + enddo + enddo + enddo + !$OMP END PARALLEL DO + endif - iceemask(:,:,:) = .false. - !$OMP PARALLEL DO PRIVATE(iblk,i,j) - do iblk = 1, nblocks - do j = 1, ny_block - do i = 1, nx_block - if (work1(i,j,iblk) > p5) iceemask(i,j,iblk) = .true. - enddo - enddo - enddo - !$OMP END PARALLEL DO + if (query_field(nu_restart,'iceemask')) then + call read_restart_field(nu_restart,0,work1,'ruf8', & + 'iceemask',1,diag,field_loc_center, field_type_scalar) + + iceemask(:,:,:) = .false. + !$OMP PARALLEL DO PRIVATE(iblk,i,j) + do iblk = 1, nblocks + do j = 1, ny_block + do i = 1, nx_block + if (work1(i,j,iblk) > p5) iceemask(i,j,iblk) = .true. + enddo + enddo + enddo + !$OMP END PARALLEL DO + endif endif diff --git a/cicecore/cicedynB/infrastructure/io/io_netcdf/ice_restart.F90 b/cicecore/cicedynB/infrastructure/io/io_netcdf/ice_restart.F90 index 949a17cf8..d49764375 100644 --- a/cicecore/cicedynB/infrastructure/io/io_netcdf/ice_restart.F90 +++ b/cicecore/cicedynB/infrastructure/io/io_netcdf/ice_restart.F90 @@ -27,7 +27,8 @@ module ice_restart implicit none private public :: init_restart_write, init_restart_read, & - read_restart_field, write_restart_field, final_restart + read_restart_field, write_restart_field, final_restart, & + query_field integer (kind=int_kind) :: ncid @@ -886,6 +887,32 @@ subroutine define_rest_field(ncid, vname, dims) end subroutine define_rest_field +!======================================================================= + +! Inquire field existance +! author T. Craig + + logical function query_field(nu,vname) + + integer (kind=int_kind), intent(in) :: nu ! unit number + character (len=*) , intent(in) :: vname ! variable name + + ! local variables + + integer (kind=int_kind) :: status, varid + character(len=*), parameter :: subname = '(query_field)' + + query_field = .false. +#ifdef USE_NETCDF + status = nf90_inq_varid(ncid,trim(vname),varid) + if (status == nf90_noerr) query_field = .true. +#else + call abort_ice(subname//'ERROR: USE_NETCDF cpp not defined for '//trim(ice_ic), & + file=__FILE__, line=__LINE__) +#endif + + end function query_field + !======================================================================= end module ice_restart diff --git a/cicecore/cicedynB/infrastructure/io/io_pio2/ice_restart.F90 b/cicecore/cicedynB/infrastructure/io/io_pio2/ice_restart.F90 index 2a7efd65d..68dcd309d 100644 --- a/cicecore/cicedynB/infrastructure/io/io_pio2/ice_restart.F90 +++ b/cicecore/cicedynB/infrastructure/io/io_pio2/ice_restart.F90 @@ -22,7 +22,8 @@ module ice_restart implicit none private public :: init_restart_write, init_restart_read, & - read_restart_field, write_restart_field, final_restart + read_restart_field, write_restart_field, final_restart, & + query_field type(file_desc_t) :: File type(var_desc_t) :: vardesc @@ -929,6 +930,32 @@ subroutine define_rest_field(File, vname, dims) end subroutine define_rest_field +!======================================================================= + +! Inquire field existance +! author T. Craig + + logical function query_field(nu,vname) + + integer (kind=int_kind), intent(in) :: nu ! unit number + character (len=*) , intent(in) :: vname ! variable name + + ! local variables + + integer (kind=int_kind) :: status, varid + character(len=*), parameter :: subname = '(query_field)' + + query_field = .false. +#ifdef USE_NETCDF + status = pio_inq_varid(File,trim(vname),vardesc) + if (status == PIO_noerr) query_field = .true. +#else + call abort_ice(subname//'ERROR: USE_NETCDF cpp not defined for '//trim(ice_ic), & + file=__FILE__, line=__LINE__) +#endif + + end function query_field + !======================================================================= end module ice_restart diff --git a/configuration/scripts/options/set_nml.boxchan b/configuration/scripts/options/set_nml.boxchan index 5a6ddabaf..6005dfc2d 100644 --- a/configuration/scripts/options/set_nml.boxchan +++ b/configuration/scripts/options/set_nml.boxchan @@ -54,3 +54,4 @@ f_tauby = 'd1' f_divu = 'd1' f_sig1 = 'd1' f_sig2 = 'd1' +f_sigP = 'd1' diff --git a/configuration/scripts/options/set_nml.boxwall b/configuration/scripts/options/set_nml.boxwall new file mode 100644 index 000000000..bf61166dc --- /dev/null +++ b/configuration/scripts/options/set_nml.boxwall @@ -0,0 +1,56 @@ +days_per_year = 360 +use_leap_years = .false. +npt = 240 +ice_ic = 'default' +restart_ext = .true. +histfreq = 'd','1','x','x','x' +grid_type = 'rectangular' +kmt_type = 'wall' +dxrect = 16.e5 +dyrect = 16.e5 +close_boundaries = .false. +ew_boundary_type = 'cyclic' +ns_boundary_type = 'cyclic' +tr_iage = .false. +tr_FY = .false. +tr_lvl = .false. +tr_pond_lvl = .false. +ktherm = -1 +kstrength = 0 +kdyn = 1 +kridge = -1 +ktransport = -1 +coriolis = 'zero' +atmbndy = 'constant' +atm_data_type = 'uniform_east' +ocn_data_type = 'calm' +ice_data_type = 'blocke' +calc_strair = .false. +rotate_wind = .false. +restore_ice = .false. +f_aice = 'd1' +f_hi = 'd1' +f_hs = 'd' +f_Tsfc = 'd' +f_uvel = 'd1' +f_vvel = 'd1' +f_uatm = 'd' +f_vatm = 'd' +f_uocn = 'd' +f_vocn = 'd' +f_strairx = 'd1' +f_strairy = 'd1' +f_strtltx = 'd1' +f_strtlty = 'd1' +f_strcorx = 'd1' +f_strcory = 'd1' +f_strocnx = 'd1' +f_strocny = 'd1' +f_strintx = 'd1' +f_strinty = 'd1' +f_taubx = 'd1' +f_tauby = 'd1' +f_divu = 'd1' +f_sig1 = 'd1' +f_sig2 = 'd1' +f_sigP = 'd1' diff --git a/configuration/scripts/options/set_nml.boxwallblock b/configuration/scripts/options/set_nml.boxwallblock new file mode 100644 index 000000000..5b64ff798 --- /dev/null +++ b/configuration/scripts/options/set_nml.boxwallblock @@ -0,0 +1,56 @@ +days_per_year = 360 +use_leap_years = .false. +npt = 240 +ice_ic = 'default' +restart_ext = .true. +histfreq = 'd','1','x','x','x' +grid_type = 'rectangular' +kmt_type = 'wall' +dxrect = 16.e5 +dyrect = 16.e5 +close_boundaries = .false. +ew_boundary_type = 'cyclic' +ns_boundary_type = 'cyclic' +tr_iage = .false. +tr_FY = .false. +tr_lvl = .false. +tr_pond_lvl = .false. +ktherm = -1 +kstrength = 0 +kdyn = 1 +kridge = -1 +ktransport = -1 +coriolis = 'zero' +atmbndy = 'constant' +atm_data_type = 'uniform_east' +ocn_data_type = 'calm' +ice_data_type = 'medblocke' +calc_strair = .false. +rotate_wind = .false. +restore_ice = .false. +f_aice = 'd1' +f_hi = 'd1' +f_hs = 'd' +f_Tsfc = 'd' +f_uvel = 'd1' +f_vvel = 'd1' +f_uatm = 'd' +f_vatm = 'd' +f_uocn = 'd' +f_vocn = 'd' +f_strairx = 'd1' +f_strairy = 'd1' +f_strtltx = 'd1' +f_strtlty = 'd1' +f_strcorx = 'd1' +f_strcory = 'd1' +f_strocnx = 'd1' +f_strocny = 'd1' +f_strintx = 'd1' +f_strinty = 'd1' +f_taubx = 'd1' +f_tauby = 'd1' +f_divu = 'd1' +f_sig1 = 'd1' +f_sig2 = 'd1' +f_sigP = 'd1' diff --git a/configuration/scripts/options/set_nml.boxwallp5 b/configuration/scripts/options/set_nml.boxwallp5 new file mode 100644 index 000000000..6f5d3fa96 --- /dev/null +++ b/configuration/scripts/options/set_nml.boxwallp5 @@ -0,0 +1,56 @@ +days_per_year = 360 +use_leap_years = .false. +npt = 240 +ice_ic = 'default' +restart_ext = .true. +histfreq = 'd','1','x','x','x' +grid_type = 'rectangular' +kmt_type = 'wall' +dxrect = 16.e5 +dyrect = 16.e5 +close_boundaries = .false. +ew_boundary_type = 'cyclic' +ns_boundary_type = 'cyclic' +tr_iage = .false. +tr_FY = .false. +tr_lvl = .false. +tr_pond_lvl = .false. +ktherm = -1 +kstrength = 0 +kdyn = 1 +kridge = -1 +ktransport = -1 +coriolis = 'zero' +atmbndy = 'constant' +atm_data_type = 'uniform_east' +ocn_data_type = 'calm' +ice_data_type = 'blockep5' +calc_strair = .false. +rotate_wind = .false. +restore_ice = .false. +f_aice = 'd1' +f_hi = 'd1' +f_hs = 'd' +f_Tsfc = 'd' +f_uvel = 'd1' +f_vvel = 'd1' +f_uatm = 'd' +f_vatm = 'd' +f_uocn = 'd' +f_vocn = 'd' +f_strairx = 'd1' +f_strairy = 'd1' +f_strtltx = 'd1' +f_strtlty = 'd1' +f_strcorx = 'd1' +f_strcory = 'd1' +f_strocnx = 'd1' +f_strocny = 'd1' +f_strintx = 'd1' +f_strinty = 'd1' +f_taubx = 'd1' +f_tauby = 'd1' +f_divu = 'd1' +f_sig1 = 'd1' +f_sig2 = 'd1' +f_sigP = 'd1' diff --git a/configuration/scripts/tests/gridsys_suite.ts b/configuration/scripts/tests/gridsys_suite.ts index 00f955746..30b9d7183 100644 --- a/configuration/scripts/tests/gridsys_suite.ts +++ b/configuration/scripts/tests/gridsys_suite.ts @@ -3,6 +3,9 @@ smoke gx3 8x2 diag1,run5day restart gx3 4x2 debug,diag1 smoke gbox12 1x1x12x12x1 boxchan smoke gbox80 1x1 box2001 +smoke gbox80 2x2 boxwallp5 +smoke gbox80 3x3 boxwall +smoke gbox80 2x2 boxwallblock smoke gbox80 1x1 boxslotcyl smoke gbox80 2x4 boxnodyn smoke gbox80 2x2 boxsymn @@ -19,6 +22,9 @@ smoke gx3 8x2 diag1,run5day,gridcd restart gx3 4x2 debug,diag1,gridcd smoke gbox12 1x1x12x12x1 boxchan,gridcd smoke gbox80 1x1 box2001,gridcd +smoke gbox80 2x2 boxwallp5,gridcd +smoke gbox80 3x3 boxwall,gridcd +smoke gbox80 2x2 boxwallblock,gridcd smoke gbox80 1x1 boxslotcyl,gridcd smoke gbox80 2x4 boxnodyn,gridcd smoke gbox80 2x2 boxsymn,gridcd @@ -35,6 +41,9 @@ smoke gx3 8x2 diag1,run5day,gridc restart gx3 4x2 debug,diag1,gridc smoke gbox12 1x1x12x12x1 boxchan,gridc smoke gbox80 1x1 box2001,gridc +smoke gbox80 2x2 boxwallp5,gridc +smoke gbox80 3x3 boxwall,gridc +smoke gbox80 2x2 boxwallblock,gridc smoke gbox80 1x1 boxslotcyl,gridc smoke gbox80 2x4 boxnodyn,gridc smoke gbox80 2x2 boxsymn,gridc diff --git a/doc/source/user_guide/ug_case_settings.rst b/doc/source/user_guide/ug_case_settings.rst index 94b24eab0..e31652064 100644 --- a/doc/source/user_guide/ug_case_settings.rst +++ b/doc/source/user_guide/ug_case_settings.rst @@ -260,9 +260,10 @@ grid_nml "", "``3``", "asymptotic scheme", "" "``kmt_file``", "string", "name of land mask file to be read", "``unknown_kmt_file``" "``kmt_type``", "boxislands", "ocean/land mask set internally, complex test geometory", "file" - "", "channel", "ocean/land mask set internally as zonal channel, ", "" + "", "channel", "ocean/land mask set internally as zonal channel", "" "", "default", "ocean/land mask set internally, land in upper left and lower right of domain, ", "" "", "file", "ocean/land mask setup read from file, see kmt_file", "" + "", "wall", "ocean/land mask set at right edge of domain", "" "``nblyr``", "integer", "number of zbgc layers", "0" "``ncat``", "integer", "number of ice thickness categories", "0" "``nfsd``", "integer", "number of floe size categories", "1" @@ -450,8 +451,10 @@ dynamics_nml "``ssh_stress``", "``coupled``", "computed from coupled sea surface height gradient", "``geostrophic``" "", "``geostropic``", "computed from ocean velocity", "" "``threshold_hw``", "real", "Max water depth for grounding (see :cite:`Amundrud04`)", "30." - "``yield_curve``", "``ellipse``", "elliptical yield curve", "``ellipse``" "``use_mean_vrel``", "logical", "Use mean of two previous iterations for vrel in VP", "``.true.``" + "``visc_coeff_method``", "``avg_strength``", "average strength for visc coeff on U grid", "``avg_strength``" + "", "``avg_zeta``", "average zeta for visc coeff on U grid", "" + "``yield_curve``", "``ellipse``", "elliptical yield curve", "``ellipse``" "", "", "", "" shortwave_nml @@ -579,14 +582,18 @@ forcing_nml "``fyear_init``", "integer", "first year of atmospheric forcing data", "1900" "``highfreq``", "logical", "high-frequency atmo coupling", "``.false.``" "``ice_data_type``", "``bigblock``", "uniform ice block covering about 90 percent of the area in center of domain", "``default``" + "", "``blocke``", "initialize ice concentration on right side of domain with aice=1", "" + "", "``blockep5``", "initialize ice concentration on right side of domain with aice=0.5", "" "", "``boxslotcyl``", "initialize ice concentration and velocity for :ref:`boxslotcyl` test (:cite:`Zalesak79`)", "" - "", "``box2001``", "initialize ice concentration for :ref:`box2001` test (:cite:`Hunke01`)", "" + "", "``box2001``", "initialize ice concentration for :ref:`box2001` test (:cite:`Hunke01`) aice 0 to 1 zonally", "" "", "``channel``", "uniform block ice concentration and thickness in i-direction in 50% of domain in j-direction", "" "", "``default``", "ice dependent on latitude and ocean temperature", "" "", "``gauss``", "gauss distributed ice block covering about 90 percent of the area in center of domain", "" - "", "``medblock``", "uniform ice block covering about 50 percent of the area in center of domain", "" + "", "``medblock``", "uniform ice block covering about 25 percent of the area in center of domain", "" + "", "``medblocke``", "uniform ice block covering about 25 percent at right side of domain", "" "", "``smallblock``", "uniform 2x2 block ice concentration and thickness in center of domain", "" - "", "``uniform``", "uniform ice concentration and thickness across domain", "" + "", "``uniform``", "uniform ice concentration and thickness across domain distributed in categories", "" + "", "``uniformp5``", "uniform ice concentration and thickness across domain with aice=0.5 q", "" "``iceruf``", "real", "ice surface roughness at atmosphere interface", "0.0005" "``l_mpond_fresh``", "``.false.``", "release pond water immediately to ocean", "``.false.``" "", "``true``", "retain (topo) pond water until ponds drain", ""