diff --git a/applications/lfric_atm/metadata/grid_def_main.xml b/applications/lfric_atm/metadata/grid_def_main.xml
index bf68a5bcf..82be6b892 100644
--- a/applications/lfric_atm/metadata/grid_def_main.xml
+++ b/applications/lfric_atm/metadata/grid_def_main.xml
@@ -101,6 +101,11 @@
+
+
+
+
+
diff --git a/interfaces/jules_interface/source/algorithm/init_surface_fields_alg_mod.x90 b/interfaces/jules_interface/source/algorithm/init_surface_fields_alg_mod.x90
index aa8b0e98c..1f5c984ec 100644
--- a/interfaces/jules_interface/source/algorithm/init_surface_fields_alg_mod.x90
+++ b/interfaces/jules_interface/source/algorithm/init_surface_fields_alg_mod.x90
@@ -154,7 +154,7 @@ contains
canopy_height, tile_temperature, &
tile_lw_grey_albedo ), &
! Sea ice conductivity will use either this fixed value or
- ! it will get overwritten by the coupler
+ ! it will get overwritten by the coupler or process_inputs
setval_c(sea_ice_conductivity, default_conductivity ), &
! Initialise melt ponds to zero
setval_c(melt_pond_fraction, 0.0_r_def ), &
diff --git a/interfaces/jules_interface/source/algorithm/process_inputs_alg_mod.x90 b/interfaces/jules_interface/source/algorithm/process_inputs_alg_mod.x90
index 3c14f2e81..81f89675f 100644
--- a/interfaces/jules_interface/source/algorithm/process_inputs_alg_mod.x90
+++ b/interfaces/jules_interface/source/algorithm/process_inputs_alg_mod.x90
@@ -15,7 +15,10 @@ module process_inputs_alg_mod
use initialization_config_mod, only: sst_source, sst_source_start_dump, &
init_option, init_option_fd_start_dump, &
- snow_source, snow_source_surf
+ snow_source, snow_source_surf, &
+ sea_ice_source, &
+ sea_ice_source_start_dump, &
+ sea_ice_source_surf
use io_config_mod, only: checkpoint_read
use section_choice_config_mod, only: surface, surface_jules, &
radiation, radiation_socrates
@@ -26,6 +29,8 @@ module process_inputs_alg_mod
use process_ssi_kernel_mod, only: process_ssi_kernel_type
use process_soil_kernel_mod, only: process_soil_kernel_type
use process_snow_kernel_mod, only: process_snow_kernel_type
+ use initial_ice_conductivity_kernel_mod, &
+ only: initial_ice_conductivity_kernel_type
use jules_snow_mod, only: nsmax
use jules_control_init_mod, only: n_land_tile, &
first_sea_tile, n_sea_tile, &
@@ -37,6 +42,8 @@ module process_inputs_alg_mod
use set_topography_kernel_mod, only: set_topography_kernel_type
use sci_geometric_constants_mod, &
only: get_latitude_fv
+ use log_mod, only : log_event, log_scratch_space, &
+ LOG_LEVEL_ERROR
implicit none
@@ -70,6 +77,7 @@ contains
type( field_type ), pointer :: land_tile_fraction => null()
type( field_type ), pointer :: sea_ice_fraction => null()
type( field_type ), pointer :: sea_ice_thickness => null()
+ type( field_type ), pointer :: sea_ice_conductivity => null()
type( field_type ), pointer :: tile_fraction => null()
type( field_type ), pointer :: tstar_sea => null()
@@ -126,11 +134,19 @@ contains
integer( i_def ) :: n_horizon_angle, n_horizon_layer
+ if (checkpoint_read) then
+ ! This algorithm should only be called on a new run
+ ! i.e. checkpoint_read==.false.)
+ ! Add a check here in case anyone adds code that breaks this
+ write(log_scratch_space,'(A)') &
+ 'process_input_args: should not be called if checkpoint_read==.true.'
+ call log_event(log_scratch_space, LOG_LEVEL_ERROR)
+ end if
+
if (surface == surface_jules) then
! Only needed on cold start from UM
- if (init_option == init_option_fd_start_dump .and. &
- .not. checkpoint_read) then
+ if (init_option == init_option_fd_start_dump) then
call ancil_fields%get_field('land_area_fraction', land_area_fraction)
call ancil_fields%get_field('land_tile_fraction', land_tile_fraction)
call fd_fields%get_field('land_tile_temp', land_tile_temp)
@@ -139,10 +155,11 @@ contains
call surface_fields%get_field('canopy_water', canopy_water)
end if
- ! For coupled models the sea ice fraction comes from the input
- ! dump but for atmosphere only models they are provided by an
- ! ancillary file
- if (l_couple_sea_ice) then
+ ! For coupled models the sea ice fraction usually comes from the input
+ ! dump.
+ ! For atmosphere only models or coupled models with inland lakes it is
+ ! provided by an ancillary file
+ if (sea_ice_source == sea_ice_source_start_dump) then
call fd_fields%get_field('sea_ice_fraction', sea_ice_fraction)
else
call ancil_fields%get_field('sea_ice_fraction', sea_ice_fraction)
@@ -157,8 +174,7 @@ contains
end if
call surface_fields%get_field('tile_temperature', tile_temperature)
- if (init_option == init_option_fd_start_dump .and. &
- .not. checkpoint_read) then
+ if (init_option == init_option_fd_start_dump) then
call soil_fields%get_field('soil_moist_sat', soil_moist_sat)
call soil_fields%get_field('soil_moist_wilt', soil_moist_wilt)
call soil_fields%get_field('mean_topog_index', mean_topog_index)
@@ -176,8 +192,8 @@ contains
call soil_fields%get_field('frozen_soil_moisture', frozen_soil_moisture)
end if
- if ( (init_option == init_option_fd_start_dump .and. &
- .not. checkpoint_read) .or. (snow_source == snow_source_surf)) then
+ if ( (init_option == init_option_fd_start_dump) .or. &
+ (snow_source == snow_source_surf)) then
! need to add .or. use_surf_analysis here
call snow_fields%get_field('tile_snow_mass', tile_snow_mass)
call snow_fields%get_field('tile_snow_rgrain', tile_snow_rgrain)
@@ -213,8 +229,7 @@ contains
latitude => get_latitude_fv( W3, twod_mesh%get_id() )
! Surface fields
- if (init_option == init_option_fd_start_dump .and. &
- .not. checkpoint_read) then
+ if (init_option == init_option_fd_start_dump) then
! These only need processing when cold-starting from the UM
call invoke(process_land_kernel_type( land_area_fraction, &
land_tile_fraction, &
@@ -235,9 +250,20 @@ contains
multi_insert_kernel_type(tile_temperature, tstar_sea, &
first_sea_tile, n_sea_tile ))
+ ! In a coupled model with inland lakes we need to initialise the sea-ice
+ ! conductivity. This will be overwritten by values from SI3 except at
+ ! lake points.
+ if ((sea_ice_source == sea_ice_source_surf ) .and. &
+ (l_couple_sea_ice)) then
+ call surface_fields%get_field('sea_ice_conductivity', &
+ sea_ice_conductivity)
+ call invoke(initial_ice_conductivity_kernel_type(sea_ice_fraction, &
+ sea_ice_thickness, &
+ sea_ice_conductivity))
+ endif
+
! Soil fields
- if (init_option == init_option_fd_start_dump .and. &
- .not. checkpoint_read) then
+ if (init_option == init_option_fd_start_dump) then
! These only need processing when cold-starting from the UM
call invoke(process_soil_kernel_type( soil_moist_sat, &
soil_moist_wilt, &
@@ -256,8 +282,8 @@ contains
end if
! Snow fields
- if ((init_option == init_option_fd_start_dump .and. &
- .not. checkpoint_read) .or. snow_source == snow_source_surf) then
+ if ((init_option == init_option_fd_start_dump) .or. &
+ (snow_source == snow_source_surf)) then
! These only need processing when cold-starting from the UM
call invoke(multi_insert_kernel_type(tile_snow_mass, tile_snow_mass_in,&
1, n_land_tile), &
@@ -284,8 +310,7 @@ contains
if (radiation == radiation_socrates .and. &
topography /= topography_flat .and. &
- init_option == init_option_fd_start_dump .and. &
- .not. checkpoint_read) then
+ init_option == init_option_fd_start_dump) then
call ancil_fields%get_field('grad_x_orog', grad_x_orog)
call ancil_fields%get_field('grad_y_orog', grad_y_orog)
diff --git a/interfaces/jules_interface/source/kernel/initial_ice_conductivity_kernel_mod.F90 b/interfaces/jules_interface/source/kernel/initial_ice_conductivity_kernel_mod.F90
new file mode 100644
index 000000000..6fd780e6a
--- /dev/null
+++ b/interfaces/jules_interface/source/kernel/initial_ice_conductivity_kernel_mod.F90
@@ -0,0 +1,73 @@
+!-------------------------------------------------------------------------------
+! (c) Crown copyright 2020 Met Office. All rights reserved.
+! The file LICENCE, distributed with this code, contains details of the terms
+! under which the code may be used.
+!-------------------------------------------------------------------------------
+!> @brief Initialise Jules surface fields on tiles
+!> @details Non-standard Surface fields (pseudo-levels) aren't as yet not
+!> implemented in LFRic. As an interim measure Higher-order W3 fields have
+!> been used to mimic psuedo-level field behaviour. This code is written
+!> based on this interim measure and will need to be updated when
+!> suitable infrastructure is available (Ticket #2081)
+module initial_ice_conductivity_kernel_mod
+ use argument_mod, only: arg_type, &
+ GH_FIELD, GH_REAL, GH_INTEGER, &
+ GH_WRITE, CELL_COLUMN, &
+ ANY_DISCONTINUOUS_SPACE_1, &
+ ANY_DISCONTINUOUS_SPACE_2
+ use constants_mod, only: r_def, i_def
+ use kernel_mod, only: kernel_type
+ use jules_control_init_mod, only: n_sea_ice_tile, first_sea_ice_tile
+ use jules_sea_seaice_config_mod, only: therm_cond_sice => kappai
+ implicit none
+ private
+ !> Kernel metadata for Psyclone
+ type, public, extends(kernel_type) :: initial_ice_conductivity_kernel_type
+ private
+ type(arg_type) :: meta_args(3) = (/ &
+ arg_type(GH_FIELD, GH_REAL, GH_WRITE, ANY_DISCONTINUOUS_SPACE_1), &
+ arg_type(GH_FIELD, GH_REAL, GH_WRITE, ANY_DISCONTINUOUS_SPACE_1), &
+ arg_type(GH_FIELD, GH_REAL, GH_WRITE, ANY_DISCONTINUOUS_SPACE_1) &
+ /)
+ integer :: operates_on = CELL_COLUMN
+ contains
+ procedure, nopass :: initial_ice_conductivity_code
+ end type initial_ice_conductivity_kernel_type
+ public :: initial_ice_conductivity_code
+contains
+ !> @param[in] nlayers The number of layers
+ !> @param[in,out] sea_ice_fraction Sea Ice Fractions on categories
+ !> @param[in,out] sea_ice_thickness Sea Ice Thickness on categories
+ !> @param[in,out] sea_ice_conductivity Sea Ice Conductivity on categories
+ !> @param[in] ndf_ice Number of DOFs per cell for tiles
+ !> @param[in] undf_ice Number of total DOFs for tiles
+ !> @param[in] map_ice Dofmap for cell for surface tiles
+ subroutine initial_ice_conductivity_code(nlayers, &
+ sea_ice_fraction, &
+ sea_ice_thickness, &
+ sea_ice_conductivity, &
+ ndf_ice, undf_ice, map_ice)
+ implicit none
+ ! Arguments
+ integer(kind=i_def), intent(in) :: nlayers
+ integer(kind=i_def), intent(in) :: ndf_ice, undf_ice
+ integer(kind=i_def), intent(in) :: map_ice(ndf_ice)
+ real(kind=r_def), intent(inout) :: sea_ice_fraction(undf_ice)
+ real(kind=r_def), intent(inout) :: sea_ice_thickness(undf_ice)
+ real(kind=r_def), intent(inout) :: sea_ice_conductivity(undf_ice)
+ ! Internal variables
+ integer(kind=i_def) :: i
+ real(kind=r_def) :: min_ice_thick, max_ice_cond
+ !Taken from UM recon value
+ max_ice_cond = 25.0_r_def
+ min_ice_thick = 8.0_r_def * therm_cond_sice/max_ice_cond
+ do i=0,n_sea_ice_tile-1
+ if (sea_ice_thickness(map_ice(1)+i) >= min_ice_thick) then
+ sea_ice_conductivity(map_ice(1)+i) = (8.0_r_def * therm_cond_sice) &
+ / sea_ice_thickness(map_ice(1)+i)
+ else
+ sea_ice_conductivity(map_ice(1)+i) = max_ice_cond
+ endif
+ end do
+ end subroutine initial_ice_conductivity_code
+end module initial_ice_conductivity_kernel_mod
diff --git a/interfaces/jules_interface/source/support/jules_physics_init_mod.f90 b/interfaces/jules_interface/source/support/jules_physics_init_mod.f90
index 03322e49d..3dd4bef99 100644
--- a/interfaces/jules_interface/source/support/jules_physics_init_mod.f90
+++ b/interfaces/jules_interface/source/support/jules_physics_init_mod.f90
@@ -355,6 +355,9 @@ subroutine jules_physics_init()
! l_ctile is implicitly true by design of LFRic and should not be changed
l_ctile = .true.
l_iceformdrag_lupkes = l_iceformdrag_lupkes_in
+ ! l_saldep_freeze should always be set to false as it no longer affects
+ ! the coupled model except at lake points (which aren't coupled).
+ l_saldep_freeze = .false.
l_stability_lupkes = l_stability_lupkes_in
l_sice_heatflux = l_sice_heatflux_in
! Code has not been included to support this being false as configurations
@@ -376,7 +379,6 @@ subroutine jules_physics_init()
l_sice_meltponds_cice = .true.
l_tstar_sice_new = .false.
l_cice_alb = .true.
- l_saldep_freeze = .true.
l_sice_multilayers = .true.
l_sice_scattering = .true.
l_ssice_albedo = .true.
@@ -388,7 +390,6 @@ subroutine jules_physics_init()
l_sice_meltponds_cice = .false.
l_tstar_sice_new = .true.
l_cice_alb = .false.
- l_saldep_freeze = .false.
l_sice_multilayers = .false.
l_sice_scattering = .false.
l_ssice_albedo = .false.
diff --git a/rose-stem/app/lfric_atm/file/file_def_ancil_surf.xml b/rose-stem/app/lfric_atm/file/file_def_ancil_surf.xml
index ef4833322..7553e3709 100644
--- a/rose-stem/app/lfric_atm/file/file_def_ancil_surf.xml
+++ b/rose-stem/app/lfric_atm/file/file_def_ancil_surf.xml
@@ -8,8 +8,8 @@
-
-
+
+
diff --git a/rose-stem/app/lfric_atm/opt/rose-app-da.conf b/rose-stem/app/lfric_atm/opt/rose-app-da.conf
index bdd892382..4cd96ae7e 100644
--- a/rose-stem/app/lfric_atm/opt/rose-app-da.conf
+++ b/rose-stem/app/lfric_atm/opt/rose-app-da.conf
@@ -3,7 +3,7 @@ source=$ROSE_SUITE_DIR/app/lfric_atm/file/iodef_gal_nwp_cycling.xml
[namelist:files]
iau_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/20210324T0600Z_um2lfric_iau_000001'
-sea_ice_ancil_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/seaice_ugrid_postqa_fixed'
+sea_ice_ancil_path='/data/users/tim.graham/LFRIC_SEA_ICE_ANCIL/glu_ice'
snow_analysis_ancil_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/20210324T0600Z_glu_snow_um2lfric_fixed'
sst_ancil_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/sst_ugrid_postqa_fixed'
start_dump_directory='$BIG_DATA_DIR/start_dumps/basic-gal/yak/PR202'
diff --git a/rose-stem/app/lfric_atm/opt/rose-app-eda.conf b/rose-stem/app/lfric_atm/opt/rose-app-eda.conf
index ea7f076b4..553c38a85 100644
--- a/rose-stem/app/lfric_atm/opt/rose-app-eda.conf
+++ b/rose-stem/app/lfric_atm/opt/rose-app-eda.conf
@@ -8,7 +8,7 @@ iau_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/20210324T0600Z_um2lfric_iau_00
iau_pert_path='$BIG_DATA_DIR/IAU/Global/iau_pertinc_start'
iau_sst_path='$BIG_DATA_DIR/IAU/Global/um2lfric_sstpert'
iau_surf_path='$BIG_DATA_DIR/IAU/Global/um2lfric_landda'
-sea_ice_ancil_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/seaice_ugrid_postqa_fixed'
+sea_ice_ancil_path='/data/users/tim.graham/LFRIC_SEA_ICE_ANCIL/glu_ice'
snow_analysis_ancil_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/20210324T0600Z_glu_snow_um2lfric_fixed'
sst_ancil_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/sst_ugrid_postqa_fixed'
start_dump_directory='$BIG_DATA_DIR/start_dumps/basic-gal/yak/PR202'
diff --git a/rose-stem/app/lfric_atm/opt/rose-app-eda_jada.conf b/rose-stem/app/lfric_atm/opt/rose-app-eda_jada.conf
index b0162aeba..fc081a00d 100644
--- a/rose-stem/app/lfric_atm/opt/rose-app-eda_jada.conf
+++ b/rose-stem/app/lfric_atm/opt/rose-app-eda_jada.conf
@@ -4,7 +4,7 @@ source=$ROSE_SUITE_DIR/app/lfric_atm/file/iodef_gal_nwp_cycling.xml
[namelist:files]
iau_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/20210324T0600Z_um2lfric_iau_000001'
iau_pert_path='$BIG_DATA_DIR/IAU/Global/iau_pertinc_start'
-sea_ice_ancil_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/seaice_ugrid_postqa_fixed'
+sea_ice_ancil_path='/data/users/tim.graham/LFRIC_SEA_ICE_ANCIL/glu_ice'
snow_analysis_ancil_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/20210324T0600Z_glu_snow_um2lfric_fixed'
sst_ancil_path='$BIG_DATA_DIR/start_dumps/basic-gal/yak/sst_ugrid_postqa_fixed'
start_dump_directory='$BIG_DATA_DIR/start_dumps/basic-gal/yak/PR202'
diff --git a/rose-stem/app/lfric_coupled_atmosphere/rose-app.conf b/rose-stem/app/lfric_coupled_atmosphere/rose-app.conf
index 8edd951c1..20e926634 100644
--- a/rose-stem/app/lfric_coupled_atmosphere/rose-app.conf
+++ b/rose-stem/app/lfric_coupled_atmosphere/rose-app.conf
@@ -577,7 +577,7 @@ ls_option='none'
model_eos_height=100
n_orog_smooth=0
read_w2h_wind=.false.
-sea_ice_source='ancillary'
+sea_ice_source='start_dump'
snow_source='start_dump'
sst_source='ancillary'
w0_orography_mapping=.false.
diff --git a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_da-C12_azspice_gnu_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_da-C12_azspice_gnu_fast-debug-32bit.txt
index 25b45d188..6851aeb31 100644
--- a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_da-C12_azspice_gnu_fast-debug-32bit.txt
+++ b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_da-C12_azspice_gnu_fast-debug-32bit.txt
@@ -1,9 +1,9 @@
-Inner product checksum rho = 46D810F2
-Inner product checksum theta = 518BD787
-Inner product checksum u = 6A870CCA
-Inner product checksum mr1 = 3FD3E308
-Inner product checksum mr2 = 37D7D9E5
-Inner product checksum mr3 = 35AB546E
-Inner product checksum mr4 = 37136F66
+Inner product checksum rho = 46D811BA
+Inner product checksum theta = 518BD908
+Inner product checksum u = 6A86AF35
+Inner product checksum mr1 = 3FD3B849
+Inner product checksum mr2 = 37E1C6F7
+Inner product checksum mr3 = 35ABCBA2
+Inner product checksum mr4 = 36E44B98
Inner product checksum mr5 = 0
Inner product checksum mr6 = 0
diff --git a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_eda-C12_azspice_gnu_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_eda-C12_azspice_gnu_fast-debug-32bit.txt
index a5abd0438..7571805ee 100644
--- a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_eda-C12_azspice_gnu_fast-debug-32bit.txt
+++ b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_eda-C12_azspice_gnu_fast-debug-32bit.txt
@@ -1,9 +1,9 @@
-Inner product checksum rho = 46D816FB
-Inner product checksum theta = 518BAF59
-Inner product checksum u = 6A8CCA26
-Inner product checksum mr1 = 3FD122BA
-Inner product checksum mr2 = 37E8B3E1
-Inner product checksum mr3 = 359BE18A
-Inner product checksum mr4 = 371DAE72
+Inner product checksum rho = 46D81882
+Inner product checksum theta = 518BAFFA
+Inner product checksum u = 6A8CE26C
+Inner product checksum mr1 = 3FD106F9
+Inner product checksum mr2 = 37DD3850
+Inner product checksum mr3 = 35AECD96
+Inner product checksum mr4 = 37050DF9
Inner product checksum mr5 = 0
Inner product checksum mr6 = 0
diff --git a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_eda_jada-C12_azspice_gnu_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_eda_jada-C12_azspice_gnu_fast-debug-32bit.txt
index 32f13b74b..1835daa63 100644
--- a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_eda_jada-C12_azspice_gnu_fast-debug-32bit.txt
+++ b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_nwp_gal9_eda_jada-C12_azspice_gnu_fast-debug-32bit.txt
@@ -1,9 +1,9 @@
-Inner product checksum rho = 46D812AA
-Inner product checksum theta = 518BD0F5
-Inner product checksum u = 6A8874B8
-Inner product checksum mr1 = 3FD3FA54
-Inner product checksum mr2 = 37D26B2E
-Inner product checksum mr3 = 35B08090
-Inner product checksum mr4 = 36E4921A
+Inner product checksum rho = 46D810F0
+Inner product checksum theta = 518BD113
+Inner product checksum u = 6A87E0F2
+Inner product checksum mr1 = 3FD3C0E7
+Inner product checksum mr2 = 37E14382
+Inner product checksum mr3 = 359E2E4E
+Inner product checksum mr4 = 3715C111
Inner product checksum mr5 = 0
Inner product checksum mr6 = 0
diff --git a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_da-C12_ex1a_cce_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_da-C12_ex1a_cce_fast-debug-32bit.txt
index 5d417bd6e..107124210 100644
--- a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_da-C12_ex1a_cce_fast-debug-32bit.txt
+++ b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_da-C12_ex1a_cce_fast-debug-32bit.txt
@@ -1,9 +1,9 @@
-Inner product checksum rho = 46D811E6
-Inner product checksum theta = 518BD447
-Inner product checksum u = 6A87A2E8
-Inner product checksum mr1 = 3FD3913E
-Inner product checksum mr2 = 37E61B45
-Inner product checksum mr3 = 35ACED96
-Inner product checksum mr4 = 36D2174C
+Inner product checksum rho = 46D813C6
+Inner product checksum theta = 518BD50F
+Inner product checksum u = 6A87148C
+Inner product checksum mr1 = 3FD3FF5C
+Inner product checksum mr2 = 37DC1CFA
+Inner product checksum mr3 = 35B33205
+Inner product checksum mr4 = 36CEAFF5
Inner product checksum mr5 = 0
Inner product checksum mr6 = 0
diff --git a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_eda-C12_ex1a_cce_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_eda-C12_ex1a_cce_fast-debug-32bit.txt
index e9e034f57..dcefafb13 100644
--- a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_eda-C12_ex1a_cce_fast-debug-32bit.txt
+++ b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_eda-C12_ex1a_cce_fast-debug-32bit.txt
@@ -1,9 +1,9 @@
-Inner product checksum rho = 46D818D4
-Inner product checksum theta = 518BB0C1
-Inner product checksum u = 6A8E0A9E
-Inner product checksum mr1 = 3FD13B1E
-Inner product checksum mr2 = 37E74576
-Inner product checksum mr3 = 35B75D54
-Inner product checksum mr4 = 37219FDA
+Inner product checksum rho = 46D817F3
+Inner product checksum theta = 518BB038
+Inner product checksum u = 6A8DBB62
+Inner product checksum mr1 = 3FD131D2
+Inner product checksum mr2 = 37EAD26F
+Inner product checksum mr3 = 35B41554
+Inner product checksum mr4 = 36FEC4DC
Inner product checksum mr5 = 0
Inner product checksum mr6 = 0
diff --git a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_eda_jada-C12_ex1a_cce_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_eda_jada-C12_ex1a_cce_fast-debug-32bit.txt
index 3c14128af..dd6a5cd4c 100644
--- a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_eda_jada-C12_ex1a_cce_fast-debug-32bit.txt
+++ b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_nwp_gal9_eda_jada-C12_ex1a_cce_fast-debug-32bit.txt
@@ -1,9 +1,9 @@
-Inner product checksum rho = 46D81238
-Inner product checksum theta = 518BCF9B
-Inner product checksum u = 6A87E639
-Inner product checksum mr1 = 3FD39F04
-Inner product checksum mr2 = 37DF42B2
-Inner product checksum mr3 = 3597E244
-Inner product checksum mr4 = 36E1E4E8
+Inner product checksum rho = 46D813AC
+Inner product checksum theta = 518BD084
+Inner product checksum u = 6A88783E
+Inner product checksum mr1 = 3FD3BA05
+Inner product checksum mr2 = 37D8364E
+Inner product checksum mr3 = 35A6F18A
+Inner product checksum mr4 = 36E2F11C
Inner product checksum mr5 = 0
Inner product checksum mr6 = 0
diff --git a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf
index 4380951b7..f04b34259 100644
--- a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf
+++ b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf
@@ -3224,14 +3224,19 @@ type=logical
compulsory=true
description=Where to read the sea ice fields from
!enumeration=true
-help=The sea ice fraction (and thickness if amip_ice_thick is false) can either be read from an static ancillary file
- = (typical in climate runs or NWP forecasts using an analysis file), or from a SURF derived ancillary file
- = To use a SURF produced ancillary-style file, select `surf` else just `ancillary`
+help=The sea ice fraction (and thickness if amip_ice_thick is false) can be read from
+ = an ancillary file (typical in atmosphere only climate runs),
+ = an FD startdump generated by UM2LFRic (typical in coupled climate runs)
+ = or from a SURF derived ancillary file (typical in both coupled and atmosphere only NWP)
+ = To use an FD start_dump specify "start_dump",
+ = To use a SURF produced ancillary-style file, select `surf`
+ = else just specify `ancillary`
=
=The iodef file must be consistent with this setting, specifying
- = seaice from either a static ancillary file or a SURF-derived ancillary file.
+ = seaice from either a static ancillary file or a SURF-derived ancillary file
+ = or from the FD start dump.
sort-key=01a
-values='ancillary', 'surf'
+values='ancillary','start_dump','surf'
[namelist:initialization=snow_source]
compulsory=true
diff --git a/science/gungho/source/driver/create_fd_prognostics_mod.f90 b/science/gungho/source/driver/create_fd_prognostics_mod.f90
index a6cb31880..18292f829 100644
--- a/science/gungho/source/driver/create_fd_prognostics_mod.f90
+++ b/science/gungho/source/driver/create_fd_prognostics_mod.f90
@@ -29,7 +29,9 @@ module create_fd_prognostics_mod
ancil_option_updating, &
read_w2h_wind, &
sst_source, &
- sst_source_start_dump
+ sst_source_start_dump, &
+ sea_ice_source, &
+ sea_ice_source_start_dump
use nlsizes_namelist_mod, only : sm_levels
use jules_control_init_mod, only : n_land_tile, n_sea_ice_tile
use jules_physics_init_mod, only : snow_lev_tile
@@ -261,7 +263,7 @@ subroutine create_fd_prognostics( mesh, twod_mesh, fd_field_collection, &
! For coupled models get the sea ice fraction and thickness from the
! dump
- if (l_couple_sea_ice) then
+ if (l_couple_sea_ice .and. (sea_ice_source == sea_ice_source_start_dump)) then
call setup_ancil_field("sea_ice_fraction", depository, &
fd_field_collection, mesh, twod_mesh, &
twod=.true., ndata=n_sea_ice_tile)
diff --git a/science/gungho/source/driver/gungho_init_fields_mod.X90 b/science/gungho/source/driver/gungho_init_fields_mod.X90
index db9e0d3db..7baa8bd08 100644
--- a/science/gungho/source/driver/gungho_init_fields_mod.X90
+++ b/science/gungho/source/driver/gungho_init_fields_mod.X90
@@ -917,11 +917,11 @@ subroutine create_model_data( modeldb, &
call depository%remove_field("grad_y_orog")
end if
if (ancil_option == ancil_option_fixed) then
- if (sst_source /= sst_source_start_dump) then
- call ancil_fields%remove_field("tstar_sea")
- call depository%remove_field("tstar_sea")
- end if
if (.not. l_esm_couple) then
+ if (sst_source /= sst_source_start_dump) then
+ call ancil_fields%remove_field("tstar_sea")
+ call depository%remove_field("tstar_sea")
+ end if
call ancil_fields%remove_field("sea_ice_fraction")
call depository%remove_field("sea_ice_fraction")
end if
diff --git a/science/gungho/source/driver/gungho_setup_io_mod.F90 b/science/gungho/source/driver/gungho_setup_io_mod.F90
index c169f4323..0ca0c2c16 100644
--- a/science/gungho/source/driver/gungho_setup_io_mod.F90
+++ b/science/gungho/source/driver/gungho_setup_io_mod.F90
@@ -116,6 +116,8 @@ module gungho_setup_io_mod
ls_option_file, &
sst_source, &
sst_source_start_dump, &
+ sea_ice_source, &
+ sea_ice_source_start_dump, &
coarse_aerosol_ancil, &
coarse_orography_ancil, &
coarse_ozone_ancil, &
@@ -358,6 +360,7 @@ subroutine init_gungho_files( files_list, modeldb )
end if
! Set sea surface temperature ancil filename from namelist
+ ! This can still be needed for coupled models for inland lakes
if (sst_source /= sst_source_start_dump) then
if (sst_ancil_path(1:1) == '/') then
write(ancil_fname,'(A)') trim(sst_ancil_path)
@@ -371,7 +374,8 @@ subroutine init_gungho_files( files_list, modeldb )
end if
! Set sea ice ancil filename from namelist
- if (.not. l_couple_sea_ice) then
+ ! This can still be needed for coupled models for inland lakes
+ if (sea_ice_source /= sea_ice_source_start_dump) then
if (sea_ice_ancil_path(1:1) == '/') then
write(ancil_fname,'(A)') trim(sea_ice_ancil_path)
else
diff --git a/science/gungho/source/driver/init_ancils_mod.f90 b/science/gungho/source/driver/init_ancils_mod.f90
index 9d0eb0487..bff44337e 100644
--- a/science/gungho/source/driver/init_ancils_mod.f90
+++ b/science/gungho/source/driver/init_ancils_mod.f90
@@ -26,7 +26,7 @@ module init_ancils_mod
use fs_continuity_mod, only : W3, WTheta
use pure_abstract_field_mod, only : pure_abstract_field_type
use lfric_xios_time_axis_mod, only : time_axis_type
- use jules_control_init_mod, only : n_land_tile
+ use jules_control_init_mod, only : n_land_tile, n_sea_ice_tile
use jules_physics_init_mod, only : snow_lev_tile
use jules_surface_types_mod, only : npft
use dust_parameters_mod, only : ndiv
@@ -40,7 +40,8 @@ module init_ancils_mod
init_option_fd_start_dump, &
snow_source, &
snow_source_surf, &
- sea_ice_source, &
+ sea_ice_source, &
+ sea_ice_source_start_dump, &
sea_ice_source_surf
use aerosol_config_mod, only : glomap_mode, &
glomap_mode_climatology, &
@@ -239,7 +240,7 @@ subroutine create_fd_ancils( depository, ancil_fields, mesh, &
end if
!===== SEA ICE ANCILS =====
- if (.not. l_couple_sea_ice) then
+ if (sea_ice_source /= sea_ice_source_start_dump) then
if (sea_ice_source == sea_ice_source_surf) then
call sea_ice_time_axis%initialise("sea_ice_time", file_id="sea_ice_ancil", &
interp_flag=.false., pop_freq="daily", &
@@ -250,10 +251,12 @@ subroutine create_fd_ancils( depository, ancil_fields, mesh, &
end if
if (.not. amip_ice_thick) then
call setup_ancil_field("sea_ice_thickness", depository, ancil_fields, &
- mesh, twod_mesh, twod=.true., time_axis=sea_ice_time_axis)
+ mesh, twod_mesh, twod=.true., ndata=n_sea_ice_tile, &
+ time_axis=sea_ice_time_axis)
end if
call setup_ancil_field("sea_ice_fraction", depository, ancil_fields, &
- mesh, twod_mesh, twod=.true., time_axis=sea_ice_time_axis)
+ mesh, twod_mesh, twod=.true., ndata=n_sea_ice_tile, &
+ time_axis=sea_ice_time_axis)
call ancil_times_list%insert_item(sea_ice_time_axis)
endif