diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index ed1318623..337cde25b 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -7,6 +7,7 @@ | jennyhickson | Jenny Hickson | Met Office | 2025-12-10 | | mike-hobson | Mike Hobson | Met Office | 2025-12-17 | | mo-marqh | mark Hedley | Met Office | 2025-12-11 | +| mo-rickywong | Ricky Wong | Met Office | 2026-02-03 | | yaswant | Yaswant Pradhan | Met Office | 2025-12-16 | | oakleybrunt | Oakley Brunt | Met Office | 2025-12-19 | | harry-shepherd | Harry Shepherd | Met Office | 2026-01-08 | diff --git a/applications/adjoint_tests/source/adjoint_tests.f90 b/applications/adjoint_tests/source/adjoint_tests.f90 index b24cf8800..5a2448a99 100644 --- a/applications/adjoint_tests/source/adjoint_tests.f90 +++ b/applications/adjoint_tests/source/adjoint_tests.f90 @@ -44,6 +44,7 @@ program adjoint_tests modeldb%mpi => global_mpi call modeldb%configuration%initialise( application_name, table_len=10 ) + call modeldb%config%initialise( application_name ) call modeldb%values%initialise('values', 5) @@ -65,7 +66,8 @@ program adjoint_tests call init_comm( application_name, modeldb ) call init_config( filename, gungho_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) call init_logger( modeldb%mpi%get_comm(), application_name ) io_nml => modeldb%configuration%get_namelist('io') diff --git a/applications/gravity_wave/source/driver/gravity_wave_infrastructure_mod.f90 b/applications/gravity_wave/source/driver/gravity_wave_infrastructure_mod.f90 index 46b88ddad..5ecef8fd2 100644 --- a/applications/gravity_wave/source/driver/gravity_wave_infrastructure_mod.f90 +++ b/applications/gravity_wave/source/driver/gravity_wave_infrastructure_mod.f90 @@ -197,11 +197,11 @@ subroutine initialise_infrastructure( program_name, & apply_partition_check = .true. end if - call init_mesh( modeldb%configuration, & - modeldb%mpi%get_comm_rank(), & - modeldb%mpi%get_comm_size(), & - base_mesh_names, & - extrusion, stencil_depth, & + call init_mesh( modeldb%config, & + modeldb%mpi%get_comm_rank(), & + modeldb%mpi%get_comm_size(), & + base_mesh_names, & + extrusion, stencil_depth, & apply_partition_check ) allocate( twod_names, source=base_mesh_names ) diff --git a/applications/gravity_wave/source/gravity_wave.f90 b/applications/gravity_wave/source/gravity_wave.f90 index e7eb7ffe6..596ef3579 100644 --- a/applications/gravity_wave/source/gravity_wave.f90 +++ b/applications/gravity_wave/source/gravity_wave.f90 @@ -39,11 +39,14 @@ program gravity_wave call parse_command_line( filename ) call modeldb%configuration%initialise( program_name, table_len=10 ) + call modeldb%config%initialise( program_name ) modeldb%mpi => global_mpi call init_comm( program_name, modeldb ) call init_config( filename, gravity_wave_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) + deallocate( filename ) call init_logger( modeldb%mpi%get_comm(), program_name ) diff --git a/applications/gungho_model/source/gungho_model.f90 b/applications/gungho_model/source/gungho_model.f90 index ee8699e43..37bf9a6eb 100644 --- a/applications/gungho_model/source/gungho_model.f90 +++ b/applications/gungho_model/source/gungho_model.f90 @@ -52,6 +52,7 @@ program gungho_model call modeldb%configuration%initialise( application_name, & table_len=10 ) + call modeldb%config%initialise( application_name ) call modeldb%values%initialise( 'values', 5 ) ! Create the depository, prognostics and diagnostics field collections @@ -75,7 +76,8 @@ program gungho_model call init_comm( application_name, modeldb ) call init_config( filename, gungho_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) call init_logger( modeldb%mpi%get_comm(), application_name ) io_nml => modeldb%configuration%get_namelist('io') call io_nml%get_value('subroutine_timers', lsubroutine_timers) diff --git a/applications/jedi_lfric_tests/integration-test/algorithm/algorithm_test.f90 b/applications/jedi_lfric_tests/integration-test/algorithm/algorithm_test.f90 index 9748e3f94..0be6d7cd1 100644 --- a/applications/jedi_lfric_tests/integration-test/algorithm/algorithm_test.f90 +++ b/applications/jedi_lfric_tests/integration-test/algorithm/algorithm_test.f90 @@ -15,6 +15,7 @@ program algorithm_test use add_mesh_map_mod, only: assign_mesh_maps use configuration_mod, only: final_configuration, & read_configuration + use config_mod, only: config_type use constants_mod, only: i_def, r_def, str_def, l_def use create_mesh_mod, only: create_extrusion, create_mesh use test_algorithm_mod, only: test_algorithm_finalise, & @@ -52,6 +53,7 @@ program algorithm_test character(:), allocatable :: filename type(namelist_collection_type), save :: configuration + type(config_type), save :: config ! Variables used for parsing command line arguments integer :: length, status, nargs @@ -145,7 +147,10 @@ program algorithm_test ! Setup configuration, mesh, and fem call configuration%initialise( program_name, table_len=10 ) - call read_configuration( filename, configuration ) + call config%initialise( program_name ) + call read_configuration( filename, & + configuration=configuration, & + config=config ) call init_collections() @@ -199,7 +204,7 @@ program algorithm_test !------------------------------------------------------------------------- stencil_depth = 1 apply_partition_check = .false. - call init_mesh( configuration, & + call init_mesh( config, & local_rank, total_ranks, & base_mesh_names, extrusion, & stencil_depth, & diff --git a/applications/jedi_lfric_tests/source/jedi-interface/jedi_geometry_mod.f90 b/applications/jedi_lfric_tests/source/jedi-interface/jedi_geometry_mod.f90 index 4fd1b473b..5e5dc3761 100644 --- a/applications/jedi_lfric_tests/source/jedi-interface/jedi_geometry_mod.f90 +++ b/applications/jedi_lfric_tests/source/jedi-interface/jedi_geometry_mod.f90 @@ -14,6 +14,7 @@ module jedi_geometry_mod use, intrinsic :: iso_fortran_env, only : real64 use calendar_mod, only : calendar_type + use config_mod, only : config_type use constants_mod, only : i_def, l_def, str_def, & r_second, i_timestep use extrusion_mod, only : extrusion_type, TWOD @@ -92,9 +93,8 @@ module jedi_geometry_mod !> @brief Initialiser for jedi_geometry_type !> -subroutine initialise( self, mpi_comm, configuration ) +subroutine initialise( self, mpi_comm, configuration, config ) ! Access config directly until modeldb ready - use driver_mesh_mod, only: init_mesh use driver_config_mod, only: init_config use jedi_lfric_mesh_setup_mod, only: initialise_mesh use jedi_lfric_tests_mod, only: jedi_lfric_tests_required_namelists @@ -104,6 +104,7 @@ subroutine initialise( self, mpi_comm, configuration ) class( jedi_geometry_type ), intent(inout) :: self integer( kind=i_def ), intent(in) :: mpi_comm type(namelist_collection_type), intent(in) :: configuration + type(config_type), intent(in) :: config ! Local type(mesh_type), pointer :: mesh @@ -121,7 +122,7 @@ subroutine initialise( self, mpi_comm, configuration ) ! Setup mesh mpi_obj = self%get_mpi_comm() - call initialise_mesh( self%mesh_name, configuration, mpi_obj ) + call initialise_mesh( self%mesh_name, configuration, config, mpi_obj ) geometry_configuration => configuration%get_namelist('jedi_geometry') ! Setup the IO diff --git a/applications/jedi_lfric_tests/source/jedi-interface/jedi_run_mod.f90 b/applications/jedi_lfric_tests/source/jedi-interface/jedi_run_mod.f90 index b1597fc4a..e5d8177d0 100644 --- a/applications/jedi_lfric_tests/source/jedi-interface/jedi_run_mod.f90 +++ b/applications/jedi_lfric_tests/source/jedi-interface/jedi_run_mod.f90 @@ -10,6 +10,7 @@ ! module jedi_run_mod + use config_mod, only : config_type use constants_mod, only : i_def, l_def, str_def use namelist_collection_mod, only : namelist_collection_type @@ -21,6 +22,7 @@ module jedi_run_mod private character(str_def) :: jedi_run_name type(namelist_collection_type) :: configuration + type(config_type) :: config logical(kind=l_def) :: timers_finalised contains @@ -34,6 +36,9 @@ module jedi_run_mod !> Get a pointer to the stored configuration. procedure, public :: get_configuration + !> Get a pointer to the stored config + procedure, public :: get_config + !> Just finalise subroutine timing; to get useful timing statistics from failed adjoint tests procedure, public :: finalise_timers @@ -109,13 +114,15 @@ subroutine initialise_infrastructure( self, filename, model_communicator ) ! Initialise the configuration call self%configuration%initialise( self%jedi_run_name, table_len=10 ) + call self%config%initialise( self%jedi_run_name ) ! Initialise the model communicator to setup global_mpi call init_internal_comm( model_communicator ) ! Setup the config which is curently global call init_config( filename, jedi_lfric_tests_required_namelists, & - self%configuration ) + configuration=self%configuration, & + config=self%config ) ! Initialise the logger call lfric_comm%set_comm_mpi_val(model_communicator) @@ -144,6 +151,19 @@ function get_configuration(self) result(configuration) end function get_configuration +!> @brief Get pointer to the stored configuration +!> +!> @return config A pointer to the configuration +function get_config(self) result(config) + + class( jedi_run_type ), target, intent(inout) :: self + + type( config_type ), pointer :: config + + config => self%config + +end function get_config + !> @brief Just finalise subroutine timing; to get useful timing statistics from failed adjoint tests !> subroutine finalise_timers(self) diff --git a/applications/jedi_lfric_tests/source/jedi_forecast.f90 b/applications/jedi_lfric_tests/source/jedi_forecast.f90 index 00150b30d..fcf48de84 100644 --- a/applications/jedi_lfric_tests/source/jedi_forecast.f90 +++ b/applications/jedi_lfric_tests/source/jedi_forecast.f90 @@ -20,6 +20,7 @@ program jedi_forecast use cli_mod, only : parse_command_line + use config_mod, only : config_type use constants_mod, only : PRECISION_REAL, i_def, str_def use field_collection_mod, only : field_collection_type use log_mod, only : log_event, log_scratch_space, & @@ -47,6 +48,7 @@ program jedi_forecast ! Local type( namelist_collection_type ), pointer :: configuration + type( config_type ), pointer :: config character(:), allocatable :: filename integer( i_def ) :: model_communicator type( jedi_duration_type ) :: forecast_length @@ -76,6 +78,7 @@ program jedi_forecast ! Get the configuration configuration => jedi_run%get_configuration() + config => jedi_run%get_config() ! Get the forecast length jedi_lfric_settings_config => configuration%get_namelist('jedi_lfric_settings') @@ -83,7 +86,7 @@ program jedi_forecast call forecast_length%init(forecast_length_str) ! Create geometry - call jedi_geometry%initialise( model_communicator, configuration ) + call jedi_geometry%initialise( model_communicator, configuration, config ) ! Create state (requires the configuration file name to setup the modeldb) call jedi_state%initialise( jedi_geometry, configuration, filename ) diff --git a/applications/jedi_lfric_tests/source/jedi_forecast_pseudo.f90 b/applications/jedi_lfric_tests/source/jedi_forecast_pseudo.f90 index cec71e9d4..eb30c92c3 100644 --- a/applications/jedi_lfric_tests/source/jedi_forecast_pseudo.f90 +++ b/applications/jedi_lfric_tests/source/jedi_forecast_pseudo.f90 @@ -20,6 +20,7 @@ program jedi_forecast_pseudo use cli_mod, only : parse_command_line + use config_mod, only : config_type use constants_mod, only : PRECISION_REAL, i_def, str_def use field_collection_mod, only : field_collection_type use log_mod, only : log_event, log_scratch_space, & @@ -47,6 +48,8 @@ program jedi_forecast_pseudo ! Local type( namelist_collection_type ), pointer :: configuration + type( config_type ), pointer :: config + character(:), allocatable :: filename integer(i_def) :: model_communicator type( jedi_duration_type ) :: forecast_length @@ -75,6 +78,7 @@ program jedi_forecast_pseudo ! Get the configuration configuration => jedi_run%get_configuration() + config => jedi_run%get_config() ! Get the forecast length jedi_lfric_settings_config => configuration%get_namelist('jedi_lfric_settings') @@ -82,7 +86,7 @@ program jedi_forecast_pseudo call forecast_length%init(forecast_length_str) ! Create geometry - call jedi_geometry%initialise( model_communicator, configuration ) + call jedi_geometry%initialise( model_communicator, configuration, config ) ! Create state call jedi_state%initialise( jedi_geometry, configuration ) diff --git a/applications/jedi_lfric_tests/source/jedi_id_tlm_tests.f90 b/applications/jedi_lfric_tests/source/jedi_id_tlm_tests.f90 index ed8b0db66..adfa8a2b3 100644 --- a/applications/jedi_lfric_tests/source/jedi_id_tlm_tests.f90 +++ b/applications/jedi_lfric_tests/source/jedi_id_tlm_tests.f90 @@ -47,6 +47,7 @@ program jedi_id_tlm_tests use cli_mod, only : parse_command_line + use config_mod, only : config_type use constants_mod, only : PRECISION_REAL, i_def, str_def, r_def use field_collection_mod, only : field_collection_type use log_mod, only : log_event, log_scratch_space, & @@ -81,6 +82,8 @@ program jedi_id_tlm_tests ! Local type( namelist_collection_type ), pointer :: configuration + type( config_type ), pointer :: config + character(:), allocatable :: filename integer( kind=i_def ) :: model_communicator type( jedi_duration_type ) :: forecast_length @@ -115,6 +118,7 @@ program jedi_id_tlm_tests ! Get the configuration configuration => run%get_configuration() + config => run%get_config() ! Get the forecast length jedi_lfric_settings_config => configuration%get_namelist('jedi_lfric_settings') @@ -122,7 +126,7 @@ program jedi_id_tlm_tests call forecast_length%init(forecast_length_str) ! Create geometry - call geometry%initialise( model_communicator, configuration ) + call geometry%initialise( model_communicator, configuration, config ) ! Create state call state%initialise( geometry, configuration ) diff --git a/applications/jedi_lfric_tests/source/jedi_lfric_tests.f90 b/applications/jedi_lfric_tests/source/jedi_lfric_tests.f90 index 7bef53fbc..2da8faf95 100644 --- a/applications/jedi_lfric_tests/source/jedi_lfric_tests.f90 +++ b/applications/jedi_lfric_tests/source/jedi_lfric_tests.f90 @@ -47,6 +47,7 @@ program jedi_lfric_tests modeldb%mpi => global_mpi call modeldb%configuration%initialise( application_name, table_len=10 ) + call modeldb%config%initialise( application_name ) call modeldb%values%initialise('values', 5) @@ -68,7 +69,9 @@ program jedi_lfric_tests call init_comm( application_name, modeldb ) call init_config( filename, gungho_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) + call init_logger( modeldb%mpi%get_comm(), application_name ) io_nml => modeldb%configuration%get_namelist('io') call io_nml%get_value('subroutine_timers', lsubroutine_timers) diff --git a/applications/jedi_lfric_tests/source/jedi_tlm_forecast_tl.f90 b/applications/jedi_lfric_tests/source/jedi_tlm_forecast_tl.f90 index b3c2aa004..728b3e04f 100644 --- a/applications/jedi_lfric_tests/source/jedi_tlm_forecast_tl.f90 +++ b/applications/jedi_lfric_tests/source/jedi_tlm_forecast_tl.f90 @@ -22,6 +22,7 @@ program jedi_tlm_forecast_tl use cli_mod, only : parse_command_line + use config_mod, only : config_type use constants_mod, only : PRECISION_REAL, i_def, str_def use field_collection_mod, only : field_collection_type use log_mod, only : log_event, log_scratch_space, & @@ -53,6 +54,8 @@ program jedi_tlm_forecast_tl ! Local type( namelist_collection_type ), pointer :: configuration + type( config_type ), pointer :: config + character(:), allocatable :: filename integer( kind=i_def ) :: model_communicator type( jedi_duration_type ) :: forecast_length @@ -81,6 +84,7 @@ program jedi_tlm_forecast_tl ! Get the configuration configuration => jedi_run%get_configuration() + config => jedi_run%get_config() ! Get the forecast length jedi_lfric_settings_config => configuration%get_namelist('jedi_lfric_settings') @@ -88,7 +92,7 @@ program jedi_tlm_forecast_tl call forecast_length%init(forecast_length_str) ! Create geometry - call jedi_geometry%initialise( model_communicator, configuration ) + call jedi_geometry%initialise( model_communicator, configuration, config ) ! Create state call jedi_state%initialise( jedi_geometry, configuration ) diff --git a/applications/jedi_lfric_tests/source/jedi_tlm_tests.f90 b/applications/jedi_lfric_tests/source/jedi_tlm_tests.f90 index da7f0342b..bfff68a72 100644 --- a/applications/jedi_lfric_tests/source/jedi_tlm_tests.f90 +++ b/applications/jedi_lfric_tests/source/jedi_tlm_tests.f90 @@ -35,6 +35,7 @@ program jedi_tlm_tests use cli_mod, only : parse_command_line + use config_mod, only : config_type use constants_mod, only : PRECISION_REAL, i_def, str_def, r_def use field_collection_mod, only : field_collection_type use log_mod, only : log_event, log_scratch_space, & @@ -67,6 +68,7 @@ program jedi_tlm_tests ! Local type( namelist_collection_type ), pointer :: configuration + type( config_type ), pointer :: config character(:), allocatable :: filename integer( kind=i_def ) :: model_communicator type( jedi_duration_type ) :: forecast_length @@ -101,6 +103,7 @@ program jedi_tlm_tests ! Get the configuration configuration => run%get_configuration() + config => run%get_config() ! Get the forecast length jedi_lfric_settings_config => configuration%get_namelist('jedi_lfric_settings') @@ -108,7 +111,7 @@ program jedi_tlm_tests call forecast_length%init(forecast_length_str) ! Create geometry - call geometry%initialise( model_communicator, configuration ) + call geometry%initialise( model_communicator, configuration, config ) ! Create state call state%initialise( geometry, configuration ) diff --git a/applications/jules/source/jules.f90 b/applications/jules/source/jules.f90 index 457e85cc3..339328f54 100644 --- a/applications/jules/source/jules.f90 +++ b/applications/jules/source/jules.f90 @@ -47,6 +47,7 @@ program jules call modeldb%configuration%initialise( application_name, & table_len=10 ) + call modeldb%config%initialise( application_name ) call modeldb%values%initialise( 'values', 5 ) ! Create the depository, prognostics and diagnostics field collections @@ -69,7 +70,9 @@ program jules call init_comm( application_name, modeldb ) call init_config( filename, gungho_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) + call init_logger( modeldb%mpi%get_comm(), application_name ) io_nml => modeldb%configuration%get_namelist('io') call io_nml%get_value('subroutine_timers', lsubroutine_timers) diff --git a/applications/lfric2lfric/source/initialisation/lfric2lfric_infrastructure_mod.X90 b/applications/lfric2lfric/source/initialisation/lfric2lfric_infrastructure_mod.X90 index 108104c11..faf7d2240 100644 --- a/applications/lfric2lfric/source/initialisation/lfric2lfric_infrastructure_mod.X90 +++ b/applications/lfric2lfric/source/initialisation/lfric2lfric_infrastructure_mod.X90 @@ -316,7 +316,8 @@ contains ! Create the required meshes !----------------------------------------------------------------------- stencil_depth = get_required_stencil_depth() - call init_mesh( modeldb%configuration, & + call init_mesh( modeldb%config, & + modeldb%configuration, & modeldb%mpi%get_comm_rank(), & modeldb%mpi%get_comm_size(), & mesh_names, extrusion, & diff --git a/applications/lfric2lfric/source/initialisation/lfric2lfric_init_mesh.f90 b/applications/lfric2lfric/source/initialisation/lfric2lfric_init_mesh.f90 index f1134fce5..b2b544282 100644 --- a/applications/lfric2lfric/source/initialisation/lfric2lfric_init_mesh.f90 +++ b/applications/lfric2lfric/source/initialisation/lfric2lfric_init_mesh.f90 @@ -25,6 +25,7 @@ module lfric2lfric_init_mesh_mod use add_mesh_map_mod, only: assign_mesh_maps + use config_mod, only: config_type use constants_mod, only: i_def, l_def, str_max_filename use check_local_mesh_mod, only: check_local_mesh use create_mesh_mod, only: create_mesh @@ -81,17 +82,21 @@ module lfric2lfric_init_mesh_mod !> regridding method is 'map'. !> (unpartitioned mesh input only) !=============================================================================== -subroutine init_mesh( configuration, & +subroutine init_mesh( config, configuration, & local_rank, total_ranks, & mesh_names, & extrusion, & stencil_depth, & regrid_method ) + use partitioning_nml_iterator_mod, only: partitioning_nml_iterator_type + use partitioning_nml_mod, only: partitioning_nml_type + implicit none ! Arguments - type(namelist_collection_type) :: configuration + type(namelist_collection_type), intent(in) :: configuration + type(config_type), intent(in) :: config integer(kind=i_def), intent(in) :: local_rank integer(kind=i_def), intent(in) :: total_ranks @@ -108,8 +113,10 @@ subroutine init_mesh( configuration, & ! Namelist variables type(namelist_type), pointer :: lfric2lfric_nml => null() - type(namelist_type), pointer :: src_partitioning_nml => null() - type(namelist_type), pointer :: dst_partitioning_nml => null() + + type(partitioning_nml_type), pointer :: partitioning + type(partitioning_nml_type), pointer :: src_partitioning_nml + type(partitioning_nml_type), pointer :: dst_partitioning_nml ! partitioning namelist variables logical(l_def) :: generate_inner_halos(2) @@ -131,23 +138,28 @@ subroutine init_mesh( configuration, & class(panel_decomposition_type), allocatable :: decomposition_src, & decomposition_dst + type(partitioning_nml_iterator_type) :: iter !============================================================================ ! Extract and check configuration variables !============================================================================ - ! Read partitioning namelist for source and destination meshes - src_partitioning_nml => configuration%get_namelist('partitioning', & - 'source') - call src_partitioning_nml%get_value( 'generate_inner_halos', & - generate_inner_halos(src) ) + call iter%initialise(config%partitioning) + do while (iter%has_next()) + + partitioning => iter%next() + + if (trim(partitioning%get_profile_name()) == 'source') then + src_partitioning_nml => partitioning + else if (trim(partitioning%get_profile_name()) == 'destination') then + dst_partitioning_nml => partitioning + end if + end do - dst_partitioning_nml => configuration%get_namelist('partitioning', & - 'destination') - call dst_partitioning_nml%get_value( 'generate_inner_halos', & - generate_inner_halos(dst) ) + generate_inner_halos(src) = src_partitioning_nml%generate_inner_halos() + generate_inner_halos(dst) = dst_partitioning_nml%generate_inner_halos() ! Read lfric2lfric namelist - lfric2lfric_nml => configuration%get_namelist('lfric2lfric') + lfric2lfric_nml => configuration%get_namelist('lfric2lfric') call lfric2lfric_nml%get_value( 'prepartitioned_meshes', & prepartitioned ) @@ -231,7 +243,7 @@ subroutine init_mesh( configuration, & ! meshes are suitable for the supplied application ! configuration. !=========================================================== - call check_local_mesh( configuration, & + call check_local_mesh( config, & stencil_depth, & mesh_names ) diff --git a/applications/lfric2lfric/source/lfric2lfric.F90 b/applications/lfric2lfric/source/lfric2lfric.F90 index c40c5cc3d..6a877c0d3 100644 --- a/applications/lfric2lfric/source/lfric2lfric.F90 +++ b/applications/lfric2lfric/source/lfric2lfric.F90 @@ -49,6 +49,7 @@ program lfric2lfric call parse_command_line( filename ) call modeldb%configuration%initialise( program_name, table_len=10 ) + call modeldb%config%initialise( program_name ) write(log_scratch_space,'(A)') & 'Application built with '// trim(precision_real) // & @@ -68,7 +69,9 @@ program lfric2lfric #endif call init_comm( program_name, modeldb ) call init_config( filename, lfric2lfric_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) + call init_logger( modeldb%mpi%get_comm(), program_name ) call init_collections() call init_time( modeldb ) diff --git a/applications/lfric_atm/source/lfric_atm.f90 b/applications/lfric_atm/source/lfric_atm.f90 index e77c16ddb..41c33aadb 100644 --- a/applications/lfric_atm/source/lfric_atm.f90 +++ b/applications/lfric_atm/source/lfric_atm.f90 @@ -51,6 +51,7 @@ program lfric_atm call modeldb%configuration%initialise( application_name, & table_len=10 ) + call modeldb%config%initialise( application_name ) call modeldb%values%initialise( 'values', 5 ) ! Create the depository, prognostics and diagnostics field collections @@ -74,7 +75,8 @@ program lfric_atm call init_comm( application_name, modeldb ) call init_config( filename, gungho_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) call init_logger( modeldb%mpi%get_comm(), application_name ) io_nml => modeldb%configuration%get_namelist('io') diff --git a/applications/lfric_coupled/source/lfric_coupled.f90 b/applications/lfric_coupled/source/lfric_coupled.f90 index 2f22b8bc0..8043826da 100644 --- a/applications/lfric_coupled/source/lfric_coupled.f90 +++ b/applications/lfric_coupled/source/lfric_coupled.f90 @@ -47,7 +47,7 @@ program lfric_coupled modeldb%mpi => global_mpi call modeldb%configuration%initialise( application_name, table_len=10 ) - + call modeldb%config%initialise( application_name ) call modeldb%values%initialise( 'values', 5 ) ! Create the depository, prognostics and diagnostics field collections @@ -71,7 +71,9 @@ program lfric_coupled call init_comm( application_name, modeldb ) call init_config( filename, gungho_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) + call init_logger( modeldb%mpi%get_comm(), application_name ) io_nml => modeldb%configuration%get_namelist('io') call io_nml%get_value('subroutine_timers', lsubroutine_timers) diff --git a/applications/lfricinputs/source/common/lfricinp_lfric_driver_mod.f90 b/applications/lfricinputs/source/common/lfricinp_lfric_driver_mod.f90 index a0630d7bf..51e577a87 100644 --- a/applications/lfricinputs/source/common/lfricinp_lfric_driver_mod.f90 +++ b/applications/lfricinputs/source/common/lfricinp_lfric_driver_mod.f90 @@ -12,6 +12,7 @@ module lfricinp_lfric_driver_mod ! LFRic Modules use add_mesh_map_mod, only: assign_mesh_maps +use config_mod, only: config_type use create_mesh_mod, only: create_mesh use driver_collections_mod, only: init_collections, final_collections use driver_mesh_mod, only: init_mesh @@ -117,6 +118,7 @@ subroutine lfricinp_initialise_lfric(program_name_arg, & type(namelist_collection_type), save :: configuration +type(config_type), save :: config type(namelist_type), pointer :: base_mesh_nml type(namelist_type), pointer :: planet_nml @@ -164,8 +166,11 @@ subroutine lfricinp_initialise_lfric(program_name_arg, & call initialise_halo_comms( comm ) call configuration%initialise( program_name_arg, table_len=10 ) +call config%initialise( program_name_arg ) + call load_configuration( lfric_nl_fname, required_lfric_namelists, & - configuration ) + configuration=configuration, & + config=config ) ! Initialise logging system call init_logger( comm, program_name ) @@ -234,7 +239,8 @@ subroutine lfricinp_initialise_lfric(program_name_arg, & !------------------------------------------------------------------------- stencil_depth = 2_i_def check_partitions = .false. -call init_mesh( configuration, & + +call init_mesh( config, & local_rank, total_ranks, & base_mesh_names, extrusion, & stencil_depth, check_partitions ) @@ -279,7 +285,7 @@ end subroutine lfricinp_initialise_lfric !------------------------------------------------------------------ subroutine load_configuration( lfric_nl, required_lfric_namelists, & - configuration ) + configuration, config ) ! Description: ! Reads lfric namelists and checks that all required namelists are present @@ -293,6 +299,7 @@ subroutine load_configuration( lfric_nl, required_lfric_namelists, & character(*), intent(in) :: required_lfric_namelists(:) type(namelist_collection_type), intent(INOUT) :: configuration +type(config_type), intent(INOUT) :: config logical :: okay logical, allocatable :: success_map(:) @@ -303,7 +310,9 @@ subroutine load_configuration( lfric_nl, required_lfric_namelists, & call log_event('Loading '//trim(program_name)//' configuration ...', & LOG_LEVEL_ALWAYS) -call read_configuration( lfric_nl, configuration ) +call read_configuration( lfric_nl, & + configuration=configuration, & + config=config ) okay = ensure_configuration(required_lfric_namelists, success_map) if (.not. okay) then diff --git a/applications/linear_model/source/linear_model.f90 b/applications/linear_model/source/linear_model.f90 index 8ba21132b..bfab8a34c 100644 --- a/applications/linear_model/source/linear_model.f90 +++ b/applications/linear_model/source/linear_model.f90 @@ -46,7 +46,7 @@ program linear_model modeldb%mpi => global_mpi call modeldb%configuration%initialise( application_name, table_len=10 ) - + call modeldb%config%initialise( application_name ) call modeldb%values%initialise('values', 5) ! Create the depository, prognostics and diagnostics field collections @@ -67,7 +67,9 @@ program linear_model call init_comm( application_name, modeldb ) call init_config( filename, gungho_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) + call init_logger( modeldb%mpi%get_comm(), application_name ) io_nml => modeldb%configuration%get_namelist('io') call io_nml%get_value('subroutine_timers', lsubroutine_timers) diff --git a/applications/name_transport/source/driver/name_transport_driver_mod.f90 b/applications/name_transport/source/driver/name_transport_driver_mod.f90 index 60d5ae6ce..c63fc8088 100644 --- a/applications/name_transport/source/driver/name_transport_driver_mod.f90 +++ b/applications/name_transport/source/driver/name_transport_driver_mod.f90 @@ -240,11 +240,11 @@ subroutine initialise_name_transport( program_name, modeldb ) stencil_depth = get_required_stencil_depth() apply_partition_check = .false. - call init_mesh( modeldb%configuration, & - modeldb%mpi%get_comm_rank(), & - modeldb%mpi%get_comm_size(), & - base_mesh_names, & - extrusion, stencil_depth, & + call init_mesh( modeldb%config, & + modeldb%mpi%get_comm_rank(), & + modeldb%mpi%get_comm_size(), & + base_mesh_names, & + extrusion, stencil_depth, & apply_partition_check ) call create_mesh( base_mesh_names, extrusion_2d, & diff --git a/applications/name_transport/source/name_transport.f90 b/applications/name_transport/source/name_transport.f90 index c7e5343e4..2f2f4f8b3 100644 --- a/applications/name_transport/source/name_transport.f90 +++ b/applications/name_transport/source/name_transport.f90 @@ -43,10 +43,14 @@ program name_transport call parse_command_line( filename ) call modeldb%configuration%initialise( program_name, table_len=10 ) + call modeldb%config%initialise( program_name ) + modeldb%mpi => global_mpi call init_comm( program_name, modeldb ) call init_config( filename, name_transport_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) + call init_logger( modeldb%mpi%get_comm(), program_name ) call log_event( 'Miniapp will run with default precision set as:', & diff --git a/applications/ngarch/source/ngarch.f90 b/applications/ngarch/source/ngarch.f90 index 29a1c7614..8e0c2fe46 100644 --- a/applications/ngarch/source/ngarch.f90 +++ b/applications/ngarch/source/ngarch.f90 @@ -40,6 +40,8 @@ program ngarch call parse_command_line( filename ) call modeldb%configuration%initialise( application_name, table_len=10 ) + call modeldb%config%initialise( application_name ) + call modeldb%values%initialise( 'values', 5 ) ! Create the field collections in modeldb @@ -63,9 +65,11 @@ program ngarch modeldb%mpi => global_mpi call init_comm( application_name, modeldb ) - call init_config( filename, & - ngarch_required_namelists, & - modeldb%configuration ) + call init_config( filename, & + ngarch_required_namelists, & + configuration=modeldb%configuration, & + config=modeldb%config ) + deallocate( filename ) call init_logger( modeldb%mpi%get_comm(), application_name ) diff --git a/applications/shallow_water/source/driver/shallow_water_model_mod.F90 b/applications/shallow_water/source/driver/shallow_water_model_mod.F90 index f2706ce97..40ac6cf93 100644 --- a/applications/shallow_water/source/driver/shallow_water_model_mod.F90 +++ b/applications/shallow_water/source/driver/shallow_water_model_mod.F90 @@ -181,7 +181,8 @@ subroutine initialise_infrastructure( program_name, modeldb) ! --------------------------------------------------------- check_partitions = .false. stencil_depth = get_required_stencil_depth() - call init_mesh( modeldb%configuration, & + + call init_mesh( modeldb%config, & modeldb%mpi%get_comm_rank(), & modeldb%mpi%get_comm_size(), & base_mesh_names, extrusion, & diff --git a/applications/shallow_water/source/shallow_water.f90 b/applications/shallow_water/source/shallow_water.f90 index 05f686f7a..a58581a5f 100644 --- a/applications/shallow_water/source/shallow_water.f90 +++ b/applications/shallow_water/source/shallow_water.f90 @@ -50,6 +50,7 @@ program shallow_water modeldb%mpi => global_mpi call modeldb%configuration%initialise( program_name, table_len=10 ) + call modeldb%config%initialise( program_name ) ! Create the depository and prognostics field collections call modeldb%fields%add_empty_field_collection("depository", & @@ -64,7 +65,8 @@ program shallow_water call init_comm( program_name, modeldb ) call init_config( filename, shallow_water_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) call init_logger( global_mpi%get_comm(), program_name ) io_nml => modeldb%configuration%get_namelist('io') call io_nml%get_value('subroutine_timers', lsubroutine_timers) diff --git a/applications/solver/source/solver.F90 b/applications/solver/source/solver.F90 index 9c06cb220..65d816094 100644 --- a/applications/solver/source/solver.F90 +++ b/applications/solver/source/solver.F90 @@ -12,6 +12,7 @@ program solver use add_mesh_map_mod, only: assign_mesh_maps + use config_mod, only: config_type use constants_mod, only: i_def, r_def, PRECISION_REAL, str_def use convert_to_upper_mod, only: convert_to_upper use cli_mod, only: parse_command_line @@ -47,7 +48,6 @@ program solver use namelist_mod, only: namelist_type use sci_checksum_alg_mod, only: checksum_alg - !------------------------------------ ! Configuration modules !------------------------------------ @@ -60,6 +60,7 @@ program solver character(:), allocatable :: filename type(namelist_collection_type), SAVE :: configuration + type(config_type), SAVE :: config integer(i_def) :: total_ranks, local_rank type(lfric_comm_type) :: comm @@ -117,9 +118,13 @@ program solver local_rank = global_mpi%get_comm_rank() call configuration%initialise( program_name, table_len=10 ) + call config%initialise( program_name ) + call init_config( filename, solver_required_namelists, & - configuration ) + configuration=configuration, & + config=config ) call init_logger( comm, program_name ) + call init_collections() deallocate( filename ) @@ -185,7 +190,7 @@ program solver !----------------------------------------------------------------------- stencil_depth = 1 check_partitions = .false. - call init_mesh( configuration, & + call init_mesh( config, & local_rank, total_ranks, & base_mesh_names, extrusion, & stencil_depth, check_partitions ) diff --git a/applications/transport/source/driver/transport_driver_mod.f90 b/applications/transport/source/driver/transport_driver_mod.f90 index c21bb94bd..18a4a756b 100644 --- a/applications/transport/source/driver/transport_driver_mod.f90 +++ b/applications/transport/source/driver/transport_driver_mod.f90 @@ -291,7 +291,7 @@ subroutine initialise_transport( program_name, modeldb ) apply_partition_check = .true. end if - call init_mesh( modeldb%configuration, & + call init_mesh( modeldb%config, & modeldb%mpi%get_comm_rank(), & modeldb%mpi%get_comm_size(), & base_mesh_names, & diff --git a/applications/transport/source/transport.f90 b/applications/transport/source/transport.f90 index 54369eee1..5e2bbd560 100644 --- a/applications/transport/source/transport.f90 +++ b/applications/transport/source/transport.f90 @@ -39,11 +39,16 @@ program transport call parse_command_line( filename ) - call modeldb%configuration%initialise( program_name, table_len=10 ) modeldb%mpi => global_mpi + call init_comm( program_name, modeldb ) + + call modeldb%configuration%initialise( program_name, table_len=10 ) + call modeldb%config%initialise( program_name ) + call init_config( filename, transport_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) call init_logger( modeldb%mpi%get_comm(), program_name ) call log_event( 'Miniapp will run with default precision set as:', & diff --git a/dependencies.yaml b/dependencies.yaml index 136ad8637..3f68cf294 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -30,8 +30,8 @@ lfric_apps: ref: lfric_core: - source: git@github.com:MetOffice/lfric_core.git - ref: bbb3d8a69a2671df93859f617bbe336c6715476f + source: git@github.com:mo-rickywong/lfric_core.git + ref: IntermediateApiPurge moci: source: git@github.com:MetOffice/moci.git diff --git a/interfaces/jedi_lfric_interface/integration-test/time/jedi_lfric_time_test.f90 b/interfaces/jedi_lfric_interface/integration-test/time/jedi_lfric_time_test.f90 index 3f75a4c82..75530e3f7 100644 --- a/interfaces/jedi_lfric_interface/integration-test/time/jedi_lfric_time_test.f90 +++ b/interfaces/jedi_lfric_interface/integration-test/time/jedi_lfric_time_test.f90 @@ -10,6 +10,7 @@ !! jedi_lfric_time_test.py. program jedi_lfric_time_test + use config_mod, only : config_type use configuration_mod, only : final_configuration, & read_configuration use constants_mod, only : i_def, r_def, l_def @@ -52,6 +53,7 @@ program jedi_lfric_time_test character(:), allocatable :: filename type(namelist_collection_type), save :: configuration + type(config_type), save :: config ! Variables used for parsing command line arguments integer(i_def) :: length, status, nargs @@ -172,7 +174,12 @@ program jedi_lfric_time_test ! Setup configuration, and initialise tests call configuration%initialise( program_name, table_len=10 ) - call read_configuration( filename, configuration ) + call config%initialise( program_name ) + + call read_configuration( filename, & + configuration=configuration, & + config=config ) + call test_jedi_interface_init() if ( do_test_init_string_err ) then diff --git a/interfaces/jedi_lfric_interface/source/driver/linear/jedi_lfric_linear_modeldb_driver_mod.f90 b/interfaces/jedi_lfric_interface/source/driver/linear/jedi_lfric_linear_modeldb_driver_mod.f90 index c7d2bb148..4530bade2 100644 --- a/interfaces/jedi_lfric_interface/source/driver/linear/jedi_lfric_linear_modeldb_driver_mod.f90 +++ b/interfaces/jedi_lfric_interface/source/driver/linear/jedi_lfric_linear_modeldb_driver_mod.f90 @@ -119,6 +119,7 @@ subroutine initialise_modeldb( modeldb_name, filename, mpi_obj, modeldb, atl_si_ ! 1. Initialise modeldb field collections, configuration and mpi. modeldb%mpi => mpi_obj call modeldb%configuration%initialise( modeldb_name, table_len=10 ) + call modeldb%config%initialise( modeldb_name ) call modeldb%values%initialise('values', 5) @@ -139,7 +140,8 @@ subroutine initialise_modeldb( modeldb_name, filename, mpi_obj, modeldb, atl_si_ call modeldb%io_contexts%initialise(modeldb_name, table_len=100) call init_config( filename, gungho_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) ! 2. Setup some model modeldb%values and initialise infrastructure call modeldb%values%add_key_value( 'temperature_correction_rate', 0.0_r_def ) diff --git a/interfaces/jedi_lfric_interface/source/driver/nl/jedi_lfric_nl_modeldb_driver_mod.f90 b/interfaces/jedi_lfric_interface/source/driver/nl/jedi_lfric_nl_modeldb_driver_mod.f90 index 6d1405ba6..75152c9a4 100644 --- a/interfaces/jedi_lfric_interface/source/driver/nl/jedi_lfric_nl_modeldb_driver_mod.f90 +++ b/interfaces/jedi_lfric_interface/source/driver/nl/jedi_lfric_nl_modeldb_driver_mod.f90 @@ -67,6 +67,7 @@ subroutine initialise_modeldb( modeldb_name, filename, mpi_obj, modeldb ) ! 1. Initialise modeldb field collections, configuration and mpi. modeldb%mpi => mpi_obj call modeldb%configuration%initialise( modeldb_name, table_len=10 ) + call modeldb%config%initialise( modeldb_name ) call modeldb%values%initialise('values', table_len = 5) @@ -89,7 +90,8 @@ subroutine initialise_modeldb( modeldb_name, filename, mpi_obj, modeldb ) call modeldb%io_contexts%initialise(modeldb_name, table_len=100) call init_config( filename, gungho_required_namelists, & - modeldb%configuration ) + configuration=modeldb%configuration, & + config=modeldb%config ) ! 3. Initialise the clock and calendar call init_time( modeldb ) diff --git a/interfaces/jedi_lfric_interface/source/mesh/jedi_lfric_mesh_setup_mod.F90 b/interfaces/jedi_lfric_interface/source/mesh/jedi_lfric_mesh_setup_mod.F90 index 24665d5b9..6857363e6 100644 --- a/interfaces/jedi_lfric_interface/source/mesh/jedi_lfric_mesh_setup_mod.F90 +++ b/interfaces/jedi_lfric_interface/source/mesh/jedi_lfric_mesh_setup_mod.F90 @@ -10,6 +10,7 @@ module jedi_lfric_mesh_setup_mod use add_mesh_map_mod, only: assign_mesh_maps use base_mesh_config_mod, only: GEOMETRY_SPHERICAL, & GEOMETRY_PLANAR + use config_mod, only: config_type use constants_mod, only: str_def, i_def, l_def, r_def use create_mesh_mod, only: create_mesh use driver_mesh_mod, only: init_mesh @@ -36,14 +37,16 @@ module jedi_lfric_mesh_setup_mod !> !> @param [out] mesh_name The name of the mesh being setup !> @param [in] configuration The geometry configuration + !> @param [in] config The geometry configuration !> @param [inout] mpi_obj The mpi communicator !> @param [in] alt_mesh_name The name of an alternative mesh_name to setup - subroutine initialise_mesh( mesh_name, configuration, mpi_obj, alt_mesh_name ) + subroutine initialise_mesh( mesh_name, configuration, config, mpi_obj, alt_mesh_name ) implicit none character(len=*), intent(out) :: mesh_name type(namelist_collection_type), intent(in) :: configuration + type(config_type), intent(in) :: config !> @todo: This should be intent in but when calling the method I get !> a compiler failure class(lfric_mpi_type), intent(inout) :: mpi_obj @@ -124,7 +127,7 @@ subroutine initialise_mesh( mesh_name, configuration, mpi_obj, alt_mesh_name ) !------------------------------------------------------------------------- stencil_depth = 2 apply_partition_check = .false. - call init_mesh( configuration, & + call init_mesh( config, & mpi_obj%get_comm_rank(), & mpi_obj%get_comm_size(), & base_mesh_names, & diff --git a/science/gungho/integration-test/cma_test/cma_test.f90 b/science/gungho/integration-test/cma_test/cma_test.f90 index 2797865da..6509e025e 100644 --- a/science/gungho/integration-test/cma_test/cma_test.f90 +++ b/science/gungho/integration-test/cma_test/cma_test.f90 @@ -29,6 +29,7 @@ program cma_test test_cma_add, & test_cma_apply_inv, & test_cma_diag_DhMDhT + use config_mod, only : config_type use constants_mod, only : i_def, r_def, i_def, l_def, & r_solver, pi, str_def use derived_config_mod, only : set_derived_config @@ -125,6 +126,7 @@ program cma_test ! Namelist and configuration variables type(namelist_collection_type), save :: configuration + type(config_type), save :: config type(namelist_type), pointer :: extrusion_nml type(namelist_type), pointer :: base_mesh_nml @@ -232,6 +234,7 @@ program cma_test end select call configuration%initialise( program_name, table_len=10 ) + call config%initialise( program_name ) deallocate(program_name) deallocate(test_flag) @@ -243,7 +246,9 @@ program cma_test call log_event( log_scratch_space, LOG_LEVEL_INFO ) allocate( success_map(size(required_configuration)) ) - call read_configuration( filename, configuration ) + call read_configuration( filename, & + configuration=configuration, & + config=config ) okay = ensure_configuration( required_configuration, success_map ) if (.not. okay) then @@ -291,7 +296,8 @@ program cma_test stencil_depth = get_required_stencil_depth() check_partitions = .false. - call init_mesh( configuration, & + + call init_mesh( config, & local_rank, total_ranks, & base_mesh_names, extrusion, & stencil_depth, check_partitions ) diff --git a/science/gungho/source/driver/gungho_model_mod.F90 b/science/gungho/source/driver/gungho_model_mod.F90 index e91f0fbd6..ee30f64fd 100644 --- a/science/gungho/source/driver/gungho_model_mod.F90 +++ b/science/gungho/source/driver/gungho_model_mod.F90 @@ -673,7 +673,8 @@ subroutine initialise_infrastructure( io_context_name, modeldb ) end if stencil_depth = get_required_stencil_depth() - call init_mesh( modeldb%configuration, & + + call init_mesh( modeldb%config, & modeldb%mpi%get_comm_rank(), & modeldb%mpi%get_comm_size(), & base_mesh_names, & diff --git a/science/linear/integration-test/runge_kutta/runge_kutta.f90 b/science/linear/integration-test/runge_kutta/runge_kutta.f90 index f460201ac..ac4fae76d 100644 --- a/science/linear/integration-test/runge_kutta/runge_kutta.f90 +++ b/science/linear/integration-test/runge_kutta/runge_kutta.f90 @@ -146,7 +146,12 @@ program runge_kutta end select call modeldb%configuration%initialise( program_name, table_len=10 ) - call read_configuration( filename, modeldb%configuration ) + call modeldb%config%initialise( program_name ) + + call read_configuration( filename, & + configuration=modeldb%configuration, & + config=modeldb%config ) + deallocate( filename ) call init_collections() diff --git a/science/linear/integration-test/semi_implicit/semi_implicit.f90 b/science/linear/integration-test/semi_implicit/semi_implicit.f90 index af625729c..572475e7f 100644 --- a/science/linear/integration-test/semi_implicit/semi_implicit.f90 +++ b/science/linear/integration-test/semi_implicit/semi_implicit.f90 @@ -133,7 +133,12 @@ program semi_implicit end select call modeldb%configuration%initialise( program_name, table_len=10 ) - call read_configuration( filename, modeldb%configuration ) + call modeldb%config%initialise( program_name) + + call read_configuration( filename, & + configuration=modeldb%configuration, & + config=modeldb%config ) + deallocate( filename ) call init_collections()