Skip to content

Commit 49b1905

Browse files
ldfowler58mgduda
authored andcommitted
Adjust the initialization of xice for "cold" sea-surface temperatures
Setting xice to 1.0 for sea-surface temperatures colder than 271 K has proved to produce too much sea ice at high latitudes. Furthermore, many datasets provide a sea ice fraction field. Determination of using actual sea ice fraction input or setting xice to 1.0 for sea-surface temperatures colder than a pre-defined value in the case where fractional sea ice is not provided in the input is now moved to the subroutine physics_init_seaice in module mpas_atmphys_initialize_real.F. -> In mpas_init_atm_cases.F, remove the lines that set the variable xice equals to 1.0 when sea-surface temperatures are colder than 271K. This proves to lead too much seaice at high latitudes. -> In Registry.xml, added the parameter config_tsk_seaice_threshold that has a default value equals 100. This parameter is in a new &physics namelist group that is hidden by default. -> In mpas_atmphys_initialize_real.F, replaces the threshold 271K with the parameter config_tsk_seaice_threshold. This leads to a decrease in values of xice equals to 1 at high latitude. It follows the correction made in the WRF release v3.5.1.
1 parent 578f2af commit 49b1905

3 files changed

Lines changed: 15 additions & 7 deletions

File tree

src/core_atmosphere/physics/mpas_atmphys_initialize_real.F

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ module mpas_atmphys_initialize_real
5555
! * In subroutine physics_init_seaice, added the initialization of the annual maximum snow albedo over seaice
5656
! points to 0.75.
5757
! * Laura D. Fowler (laura@ucar.edu) / 2022-03-15).
58+
! * In subroutine physics_init_seaice, corrected the initialization of seaice points when the surface
59+
! temperature was originally colder than 271K. We now use the seaice threshold config_tsk_seaice_threshold
60+
! that has a default value set to 100K. This leads to decreased seaice at high latitudes.
61+
! Laura D. Fowler (laura@ucar.edu) / 2022-03-25.
5862

5963

6064
contains
@@ -599,6 +603,7 @@ subroutine physics_init_seaice(mesh, input, dims, configs)
599603

600604
real(kind=RKIND):: xice_threshold
601605
real(kind=RKIND):: mid_point_depth
606+
real(kind=RKIND),pointer:: tsk_seaice_threshold
602607
real(kind=RKIND),dimension(:),pointer :: vegfra
603608
real(kind=RKIND),dimension(:),pointer :: seaice,snoalb,xice
604609
real(kind=RKIND),dimension(:),pointer :: skintemp,tmn,xland
@@ -611,15 +616,15 @@ subroutine physics_init_seaice(mesh, input, dims, configs)
611616
!note that this threshold is also defined in module_physics_vars.F.It is defined here to avoid
612617
!adding "use module_physics_vars" since this subroutine is only used for the initialization of
613618
!a "real" forecast with $CORE = init_nhyd_atmos.
614-
real(kind=RKIND),parameter:: xice_tsk_threshold = 271.
615619
real(kind=RKIND),parameter:: total_depth = 3. ! 3-meter soil depth.
616620

617621
!-----------------------------------------------------------------------------------------------------------------
618622
!call mpas_log_write('')
619623
!call mpas_log_write('--- enter physics_init_seaice:')
620624

621-
call mpas_pool_get_config(configs, 'config_frac_seaice', config_frac_seaice)
622-
call mpas_pool_get_config(configs, 'config_landuse_data', config_landuse_data)
625+
call mpas_pool_get_config(configs, 'config_frac_seaice' , config_frac_seaice)
626+
call mpas_pool_get_config(configs, 'config_tsk_seaice_threshold', tsk_seaice_threshold)
627+
call mpas_pool_get_config(configs, 'config_landuse_data' , config_landuse_data)
623628

624629
call mpas_pool_get_dimension(dims, 'nCellsSolve', nCellsSolve)
625630
call mpas_pool_get_dimension(dims, 'nSoilLevels', nSoilLevels)
@@ -660,13 +665,14 @@ subroutine physics_init_seaice(mesh, input, dims, configs)
660665
endif
661666
call mpas_log_write('--- config_frac_seaice : $l', logicArgs=(/config_frac_seaice/))
662667
call mpas_log_write('--- xice_threshold : $r', realArgs=(/xice_threshold/))
668+
call mpas_log_write('--- tsk_seaice_threshold : $r', realArgs=(/tsk_seaice_threshold/))
663669

664670
!convert seaice points to land points when the sea-ice fraction is greater than the
665671
!prescribed threshold:
666672
num_seaice_changes = 0
667673
do iCell = 1, nCellsSolve
668674
if(xice(iCell) .ge. xice_threshold .or. &
669-
(landmask(iCell).eq.0 .and. skintemp(iCell).lt.xice_tsk_threshold)) then
675+
(landmask(iCell).eq.0 .and. skintemp(iCell).lt.tsk_seaice_threshold)) then
670676

671677
num_seaice_changes = num_seaice_changes + 1
672678
!... sea-ice points are converted to land points:

src/core_init_atmosphere/Registry.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,12 @@
278278
units="-"
279279
description="Whether to switch sea-ice threshold from 0.5 to 0.02"
280280
possible_values="true or false"/>
281+
</nml_record>
281282

283+
<nml_record name="physics" in_defaults="false">
284+
<nml_option name="config_tsk_seaice_threshold" type="real" default_value="100." units="K"
285+
description="surface temperature threshold below which water points are set to seaice points"
286+
possible_values="Positive real values"/>
282287
</nml_record>
283288

284289
<nml_record name="io" in_defaults="true">

src/core_init_atmosphere/mpas_init_atm_cases.F

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4559,9 +4559,6 @@ subroutine init_atm_case_gfs(block, mesh, nCells, nEdges, nVertLevels, fg, state
45594559

45604560
if (allocated(maskslab)) deallocate(maskslab)
45614561

4562-
! Freeze really cold ocean
4563-
where (sst < 271.0 .and. landmask == 0) xice = 1.0
4564-
45654562
! Limit XICE to values between 0 and 1. Although the input meteorological field is between 0.
45664563
! and 1., interpolation to the MPAS grid can yield values of XiCE less than 0. and greater
45674564
! than 1.:

0 commit comments

Comments
 (0)