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