Skip to content
77 changes: 77 additions & 0 deletions rose-meta/jules-shared/jules-sea-seaice/HEAD/rose-meta.conf
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,43 @@ sort-key=Panel-C14
trigger=namelist:jules_sea_seaice=hcap_sea: .true.;
type=logical

[namelist:jules_sea_seaice=l_zenith_albedo]
compulsory=true
description=Use zenith angles in the calculation of sea ice
= (and snow on sea ice) albedos
help=With this set to true then the sea ice albedo is adjusted in the same
=way as bare soil in order to adjust the albedo to take into account
=zenith angle.
=The snow on sea ice will also use the same code as snow on land in
=order to calculate the snow albedo which also takes into account
=the zenith angle.
!kind=default
ns=namelist/Science/JULES Surface/Sea and sea-ice
sort-key=Panel-C15
type=logical

[namelist:jules_sea_seaice=meltpond_alb_vn]
compulsory=true
description=Melt pond albedo scheme
!enumeration=true
help=The scheme used to calculate the albedo of melt ponds
=none: Use this if no melt ponds are used in the model which
= instead adds a temperature dependence on albedo to
= represent how melt ponds would have made the surface
= darker if they existed.
=cice: Use the CICE melt pond albedo scheme which uses a fixed value
= (from albpondv_cice and albpondi_cice) which is linearly
= ramped to with melt pond depth. No zenith angle dependence is
= included.
=malinka: Use the Malinka et al melt pond albedo scheme which uses

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add 2018 to the reference for completeness.

= Fresnel equations for reflection off the surface and multiple
= scattering within the pond. This has inbuilt zenith angle
= dependence and more realistic depth dependence.
ns=namelist/Science/JULES Surface/Sea and sea-ice
sort-key=Panel-C15d
value-titles="none","cice","malinka"
values='none','cice','malinka'

[namelist:jules_sea_seaice=nice]
compulsory=true
description=Number of sea ice categories
Expand All @@ -209,6 +246,46 @@ range=1:99
sort-key=Panel-C00a
type=integer

[namelist:jules_sea_seaice=snow_grain_size_max]
compulsory=true
description=Maximum snow grain size
help=The snow albedo scheme includes a snow grain size temperature
=dependence. For snow on sea ice this goes from a minimum snow
=grain size at -30oC to a maximum snow grain size at melting point.
=The maximum snow grain size is set here. The larger the snow grain
=size the lower the albedo in the NIR part of the spectrum. The
=recommended value is 200 um.
!kind=default
ns=namelist/Science/JULES Surface/Sea and sea-ice
sort-key=Panel-C15b
type=real

[namelist:jules_sea_seaice=snow_grain_size_min]
compulsory=true
description=Minimum snow grain size
help=The snow albedo scheme includes a snow grain size temperature
=dependence. For snow on sea ice this goes from a minimum snow
=grain size at -30oC to a maximum snow grain size at melting point.
=The minimum snow grain size is set here. The larger the snow grain
=size the lower the albedo in the NIR part of the spectrum. The
=recommended value is 50 um.
!kind=default
ns=namelist/Science/JULES Surface/Sea and sea-ice
sort-key=Panel-C15a
type=real

[namelist:jules_sea_seaice=snowpatch]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to be clear, this adds missing metadata for the existing code.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are correct. snowpatch was previously missing its meta data. This was needed to add snowpatch as a tuneable parameter into LFRic (to pass down to JULES).

compulsory=true
description=snowpatch length scale (m)
help=Length scale for parameterizing non uniform snow coverage (m).
=This is the depth of snow at which half of the sea ice is
=covered in snow. The smaller this number the more the sea ice
=is covered by snow.
!kind=default
ns=namelist/Science/JULES Surface/Sea and sea-ice
sort-key=Panel-C15c
type=real

[namelist:jules_sea_seaice=u_cdn_hw]
compulsory=true
description=Neutral wind speed where the drag attains the high wind value.
Expand Down
58 changes: 46 additions & 12 deletions src/control/shared/jules_sea_seaice_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,17 @@ MODULE jules_sea_seaice_mod
ip_hwdrag_reduced_v1 = 2
! The drag at high winds is reduced over a range of speeds.
!
! Options for meltpond_alb_vn
INTEGER, PARAMETER :: &
ip_meltpond_alb_vn_none = 0
! No melt ponds used. Basic albedo adjustment using temperature only.
INTEGER, PARAMETER :: &
ip_meltpond_alb_vn_cice = 1
! Original CICE sea ice albedo scheme
INTEGER, PARAMETER :: &
ip_meltpond_alb_vn_malinka = 2
! Malinka et al sea ice albedo scheme
!
!----------------------------------------------------------------------------
! Switches
!-----------------------------------------------------------------------------
Expand All @@ -87,8 +98,8 @@ MODULE jules_sea_seaice_mod
! Switch for penetration of SW radiation into sea ice
l_sice_meltponds = .FALSE., &
! Sea-ice albedo affected by meltponds (simple parameterisation)
l_sice_meltponds_cice = .FALSE., &
! Sea-ice albedo affected by meltponds (from CICE meltponds scheme)
l_zenith_albedo = .FALSE., &
! Sea ice and snow on sea ice albedos affected by zenith angle
l_sice_multilayers = .FALSE., &
! True if coupled to sea ice multilayer model
l_cice_alb = .FALSE., &
Expand Down Expand Up @@ -116,9 +127,11 @@ MODULE jules_sea_seaice_mod
buddy_sea = 0, &
! Switch to use the wind speed from adjacent sea points for the sea
! part of coastal grid points
i_high_wind_drag = ip_hwdrag_null
i_high_wind_drag = ip_hwdrag_null, &
! Option to impose a special treatment of drag at high wind speeds.
! Set to the null option by default.
i_meltpond_alb_vn = 0
! Melt pond albedo scheme version

! The following setting is needed for setting up (UM-JULES) pseudo level IDs
! for water tracer fields on multiple sea ice categories. It is not used
Expand Down Expand Up @@ -252,8 +265,10 @@ MODULE jules_sea_seaice_mod
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hcap_sea = 0.0, &
! Value for open sea heat capacity if required to be non-zero
beta_evap = 1.0
beta_evap = 1.0, &
! availability of surface moisture - 0.0 = none, 1.0 = open sea
snow_grain_size_min = 50.0, &
snow_grain_size_max = 200.0

!-----------------------------------------------------------------------------
! Parameters for the COARE algorithm
Expand Down Expand Up @@ -313,7 +328,7 @@ MODULE jules_sea_seaice_mod
NAMELIST / jules_sea_seaice/ &
! Switches
nice, nice_use, l_tstar_sice_new, l_ssice_albedo, l_sice_scattering, &
l_sice_swpen, l_sice_meltponds, l_sice_meltponds_cice, &
l_sice_swpen, l_sice_meltponds, i_meltpond_alb_vn, l_zenith_albedo, &
l_sice_multilayers, l_cice_alb, l_sice_heatflux, l_saldep_freeze, &
l_icerough_prognostic, &
l_ctile, l_iceformdrag_lupkes, l_stability_lupkes, iseasurfalg, &
Expand All @@ -330,7 +345,8 @@ MODULE jules_sea_seaice_mod
ahmax, dalb_mlt_cice, dalb_mlts_v_cice, dalb_mlts_i_cice, dt_bare_cice, &
dt_snow_cice, pen_rad_frac_cice, sw_beta_cice, snowpatch, &
h_freeboard_min, h_freeboard_max, beta_floe, d_floe_min, d_floe_max, &
ss_floe, ce_floe, hcap_sea, beta_evap
ss_floe, ce_floe, hcap_sea, beta_evap, &
snow_grain_size_min, snow_grain_size_max



Expand Down Expand Up @@ -428,7 +444,10 @@ SUBROUTINE print_nlist_jules_sea_seaice()
WRITE(lineBuffer, *) ' l_sice_meltponds = ', l_sice_meltponds
CALL jules_print('jules_sea_seaice', lineBuffer)

WRITE(lineBuffer, *) ' l_sice_meltponds_cice = ', l_sice_meltponds_cice
WRITE(lineBuffer, *) ' i_meltpond_alb_vn = ', i_meltpond_alb_vn
CALL jules_print('jules_sea_seaice', lineBuffer)

WRITE(lineBuffer, *) ' l_zenith_albedo = ', l_zenith_albedo
CALL jules_print('jules_sea_seaice', lineBuffer)

WRITE(lineBuffer, *) ' l_sice_multilayers = ', l_sice_multilayers
Expand Down Expand Up @@ -635,6 +654,12 @@ SUBROUTINE print_nlist_jules_sea_seaice()
WRITE(lineBuffer, "(A, G11.4E2)") ' beta_evap = ', beta_evap
CALL jules_print('jules_sea_seaice', lineBuffer)

WRITE(lineBuffer, "(A, G11.4E2)") ' snow_grain_size_min = ', snow_grain_size_min
CALL jules_print('jules_sea_seaice', lineBuffer)

WRITE(lineBuffer, "(A, G11.4E2)") ' snow_grain_size_max = ', snow_grain_size_max
CALL jules_print('jules_sea_seaice', lineBuffer)

CALL jules_print('jules_sea_seaice', &
'- - - - - - end of namelist - - - - - -')

Expand Down Expand Up @@ -675,8 +700,8 @@ SUBROUTINE read_nml_jules_sea_seaice (unitnumber)

! set number of each type of variable in my_namelist type
INTEGER, PARAMETER :: no_of_types = 3
INTEGER, PARAMETER :: n_int = 5
INTEGER, PARAMETER :: n_real = 55
INTEGER, PARAMETER :: n_int = 6
INTEGER, PARAMETER :: n_real = 57
INTEGER, PARAMETER :: n_log = 16

TYPE :: my_namelist
Expand All @@ -686,6 +711,7 @@ SUBROUTINE read_nml_jules_sea_seaice (unitnumber)
INTEGER :: iseasurfalg
INTEGER :: buddy_sea
INTEGER :: i_high_wind_drag
INTEGER :: i_meltpond_alb_vn
REAL(KIND=real_jlslsm) :: z0miz
REAL(KIND=real_jlslsm) :: z0sice
REAL(KIND=real_jlslsm) :: z0h_z0m_miz
Expand Down Expand Up @@ -741,12 +767,14 @@ SUBROUTINE read_nml_jules_sea_seaice (unitnumber)
REAL(KIND=real_jlslsm) :: ce_floe
REAL(KIND=real_jlslsm) :: hcap_sea
REAL(KIND=real_jlslsm) :: beta_evap
REAL(KIND=real_jlslsm) :: snow_grain_size_min
REAL(KIND=real_jlslsm) :: snow_grain_size_max
LOGICAL :: l_tstar_sice_new
LOGICAL :: l_ssice_albedo
LOGICAL :: l_zenith_albedo
LOGICAL :: l_sice_scattering
LOGICAL :: l_sice_swpen
LOGICAL :: l_sice_meltponds
LOGICAL :: l_sice_meltponds_cice
LOGICAL :: l_sice_multilayers
LOGICAL :: l_cice_alb
LOGICAL :: l_saldep_freeze
Expand Down Expand Up @@ -779,6 +807,7 @@ SUBROUTINE read_nml_jules_sea_seaice (unitnumber)
my_nml % iseasurfalg = iseasurfalg
my_nml % buddy_sea = buddy_sea
my_nml % i_high_wind_drag = i_high_wind_drag
my_nml % i_meltpond_alb_vn = i_meltpond_alb_vn
my_nml % z0miz = z0miz
my_nml % z0sice = z0sice
my_nml % z0h_z0m_miz = z0h_z0m_miz
Expand Down Expand Up @@ -834,12 +863,14 @@ SUBROUTINE read_nml_jules_sea_seaice (unitnumber)
my_nml % ce_floe = ce_floe
my_nml % hcap_sea = hcap_sea
my_nml % beta_evap = beta_evap
my_nml % snow_grain_size_min = snow_grain_size_min
my_nml % snow_grain_size_max = snow_grain_size_max
my_nml % l_tstar_sice_new = l_tstar_sice_new
my_nml % l_ssice_albedo = l_ssice_albedo
my_nml % l_zenith_albedo = l_zenith_albedo
my_nml % l_sice_scattering = l_sice_scattering
my_nml % l_sice_swpen = l_sice_swpen
my_nml % l_sice_meltponds = l_sice_meltponds
my_nml % l_sice_meltponds_cice = l_sice_meltponds_cice
my_nml % l_sice_multilayers = l_sice_multilayers
my_nml % l_cice_alb = l_cice_alb
my_nml % l_saldep_freeze = l_saldep_freeze
Expand All @@ -861,6 +892,7 @@ SUBROUTINE read_nml_jules_sea_seaice (unitnumber)
iseasurfalg = my_nml % iseasurfalg
buddy_sea = my_nml % buddy_sea
i_high_wind_drag = my_nml % i_high_wind_drag
i_meltpond_alb_vn = my_nml % i_meltpond_alb_vn
z0miz = my_nml % z0miz
z0sice = my_nml % z0sice
z0h_z0m_miz = my_nml % z0h_z0m_miz
Expand Down Expand Up @@ -916,12 +948,14 @@ SUBROUTINE read_nml_jules_sea_seaice (unitnumber)
ce_floe = my_nml % ce_floe
hcap_sea = my_nml % hcap_sea
beta_evap = my_nml % beta_evap
snow_grain_size_min = my_nml % snow_grain_size_min
snow_grain_size_max = my_nml % snow_grain_size_max
l_tstar_sice_new = my_nml % l_tstar_sice_new
l_ssice_albedo = my_nml % l_ssice_albedo
l_zenith_albedo = my_nml % l_zenith_albedo
l_sice_scattering = my_nml % l_sice_scattering
l_sice_swpen = my_nml % l_sice_swpen
l_sice_meltponds = my_nml % l_sice_meltponds
l_sice_meltponds_cice = my_nml % l_sice_meltponds_cice
l_sice_multilayers = my_nml % l_sice_multilayers
l_cice_alb = my_nml % l_cice_alb
l_saldep_freeze = my_nml % l_saldep_freeze
Expand Down
Loading
Loading