diff --git a/applications/io_demo/build/project.mk b/applications/io_demo/build/project.mk index 3ea4ab133..2f57b80aa 100644 --- a/applications/io_demo/build/project.mk +++ b/applications/io_demo/build/project.mk @@ -8,3 +8,5 @@ # via the Makefile. $(info io_demo miniapp project specials) +# Enable the use of the sleep() intrinsic for gfortran +export FFLAGS_GNU_OPTIONS = -fall-intrinsics diff --git a/applications/io_demo/example/configuration.nml b/applications/io_demo/example/configuration.nml index db34d0e36..306160dd1 100644 --- a/applications/io_demo/example/configuration.nml +++ b/applications/io_demo/example/configuration.nml @@ -40,14 +40,20 @@ coord_system='native' use_xios_io = .true. write_diag = .true. diagnostic_frequency = 1 - subroutine_timers = .false. + subroutine_timers = .true. timer_output_path = 'timer.txt' subroutine_counters = .false. counter_output_suffix = 'counter.txt' checkpoint_read = .false. checkpoint_write = .false. file_convention = 'UGRID' +/ + +&io_demo multifile_io = .false. + io_benchmark = .true. + n_benchmark_fields = 10 + benchmark_sleep_time = 0 / &logging @@ -57,7 +63,7 @@ coord_system='native' &time calendar = 'timestep' timestep_start = '1' - timestep_end = '90' + timestep_end = '10' calendar_type='gregorian' calendar_start='2016-01-01 15:00:00' calendar_origin='2016-01-01 15:00:00' diff --git a/applications/io_demo/rose-meta/lfric-io_demo/HEAD/rose-meta.conf b/applications/io_demo/rose-meta/lfric-io_demo/HEAD/rose-meta.conf index 953fdde8d..261870f95 100644 --- a/applications/io_demo/rose-meta/lfric-io_demo/HEAD/rose-meta.conf +++ b/applications/io_demo/rose-meta/lfric-io_demo/HEAD/rose-meta.conf @@ -1,6 +1,28 @@ import=lfric-driver/HEAD -[namelist:io=multifile_io] +[namelist:io_demo] +compulsory=true +description=Provides options for configuring the runtime behaviour of the IO_Demo app +ns=namelist/io_demo +sort-key=Section-A02 +title=IO_Demo + +[namelist:io_demo=benchmark_sleep_time] +compulsory=true +description=Number of seconds to sleep for each timestep in I/O benchmark mode +!kind=default +type=integer + +[namelist:io_demo=io_benchmark] +compulsory=true +description=Configure application to run as an I/O benchmarking tool +help=Configure application to run as an I/O benchmarking tool +!kind=default +type=logical +trigger=namelist:io_demo=benchmark_sleep_time: .true. ; + =namelist:io_demo=n_benchmark_fields: .true. ; + +[namelist:io_demo=multifile_io] compulsory=true description=Use multifile_io functionality help=This is used to turn the multifile_io functionality in the io_demo app @@ -8,6 +30,12 @@ help=This is used to turn the multifile_io functionality in the io_demo app !kind=default type=logical +[namelist:io_demo=n_benchmark_fields] +compulsory=true +description=Number of fields created in I/O benchmark +!kind=default +type=integer + [namelist:multifile_io] compulsory=false duplicate=true diff --git a/applications/io_demo/source/algorithm/io_demo_alg_mod.x90 b/applications/io_demo/source/algorithm/io_demo_alg_mod.x90 index e42ccba00..b440cc811 100644 --- a/applications/io_demo/source/algorithm/io_demo_alg_mod.x90 +++ b/applications/io_demo/source/algorithm/io_demo_alg_mod.x90 @@ -35,20 +35,22 @@ contains !> @details Calculates the diffusion increment for a field, and adds it to said field. !> @param[in] modeldb Application state object !> @param[inout] field_in Input Wtheta field - subroutine io_demo_alg( modeldb, field_in ) + !> @param[in] visc_in Optional setting for viscosity value + subroutine io_demo_alg( modeldb, field_in, visc_in ) implicit none type(modeldb_type), intent(in) :: modeldb ! Prognostic fields - type( field_type ), intent( inout ) :: field_in + type( field_type ), intent( inout ) :: field_in + real(r_def), optional, intent( in ) :: visc_in ! Diagnostic fields type( field_type ) :: dfield_in type( field_type ) :: visc - real(r_def), parameter :: visc_val = 100000.0_r_def + real(r_def) :: visc_val integer(kind=i_def), parameter :: stencil_depth = 1_i_def type(mesh_type), pointer :: mesh @@ -56,6 +58,12 @@ contains type(function_space_type), pointer :: fs integer(i_def) :: order_h, order_v + ! Set viscosity to default value if not present + if (present(visc_in)) then + visc_val = visc_in + else + visc_val = 100000.0_r_def + end if call log_event( "io_demo: Running algorithm", LOG_LEVEL_TRACE ) diff --git a/applications/io_demo/source/driver/io_benchmark/io_benchmark_setup_mod.f90 b/applications/io_demo/source/driver/io_benchmark/io_benchmark_setup_mod.f90 new file mode 100644 index 000000000..7da5e45f3 --- /dev/null +++ b/applications/io_demo/source/driver/io_benchmark/io_benchmark_setup_mod.f90 @@ -0,0 +1,105 @@ +!----------------------------------------------------------------------------- +! (C) Crown copyright 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 Setup infrastructure used for I/O benchmark +!> @details Handles the setup of all the fields that will be passed used to +!! benchmark the speed of XIOS reading and writing +module io_benchmark_setup_mod + + use constants_mod, only: i_def, str_def + use driver_modeldb_mod, only: modeldb_type + use field_collection_mod, only: field_collection_type + use field_mod, only: field_type + use field_parent_mod, only: read_interface, write_interface + use file_mod, only: FILE_MODE_WRITE + use fs_continuity_mod, only: Wtheta + use function_space_collection_mod, only: function_space_collection + use lfric_xios_file_mod, only: lfric_xios_file_type, OPERATION_TIMESERIES + use lfric_xios_read_mod, only: read_field_generic + use lfric_xios_write_mod, only: write_field_generic + use linked_list_mod, only: linked_list_type + use mesh_mod, only: mesh_type + use mesh_collection_mod, only: mesh_collection + + implicit none + + public create_io_benchmark_fields, setup_io_benchmark_files + +contains + + !> @details Creates the fields needed for the IO benchmark + !> @param[in,out] modeldb The model database in which to store model data. + subroutine create_io_benchmark_fields(modeldb) + implicit none + + type(modeldb_type), intent(inout) :: modeldb + + type(mesh_type), pointer :: mesh + type(field_collection_type), pointer :: io_benchmark_fields + type(field_type) :: tmp_io_field + procedure(read_interface), pointer :: tmp_read_ptr + procedure(write_interface), pointer :: tmp_write_ptr + + character(str_def) :: prime_mesh_name, tmp_field_name + integer(i_def) :: element_order_h + integer(i_def) :: element_order_v + integer(i_def) :: i + integer(i_def) :: n_benchmark_fields + integer(i_def) :: diagnostic_frequency + + prime_mesh_name = modeldb%config%base_mesh%prime_mesh_name() + element_order_h = modeldb%config%finite_element%element_order_h() + element_order_v = modeldb%config%finite_element%element_order_v() + n_benchmark_fields = modeldb%config%io_demo%n_benchmark_fields() + diagnostic_frequency = modeldb%config%io%diagnostic_frequency() + + mesh => mesh_collection%get_mesh(prime_mesh_name) + + call modeldb%fields%add_empty_field_collection("io_benchmark_fields") + io_benchmark_fields => modeldb%fields%get_field_collection("io_benchmark_fields") + + do i = 1, n_benchmark_fields + write(tmp_field_name, "(A19, I3.3)") 'io_benchmark_field_', i + call tmp_io_field%initialise( vector_space = & + function_space_collection%get_fs(mesh, element_order_h, & + element_order_v, Wtheta), & + name=tmp_field_name ) + tmp_read_ptr => read_field_generic + tmp_write_ptr => write_field_generic + call tmp_io_field%set_read_behaviour(tmp_read_ptr) + call tmp_io_field%set_write_behaviour(tmp_write_ptr) + call io_benchmark_fields%add_field(tmp_io_field) + end do + + end subroutine create_io_benchmark_fields + + subroutine setup_io_benchmark_files(file_list, modeldb) + + implicit none + + type(linked_list_type), intent(out) :: file_list + type(modeldb_type), optional, intent(inout) :: modeldb + + integer(i_def) :: diagnostic_frequency + type(field_collection_type), pointer :: io_benchmark_fields + + diagnostic_frequency = modeldb%config%io%diagnostic_frequency() + + io_benchmark_fields => modeldb%fields%get_field_collection("io_benchmark_fields") + + file_list = linked_list_type() + call file_list%insert_item( lfric_xios_file_type( "lfric_xios_write_benchmark", & + xios_id="lfric_xios_write_benchmark", & + io_mode=FILE_MODE_WRITE, & + operation=OPERATION_TIMESERIES, & + freq=diagnostic_frequency, & + fields_in_file=io_benchmark_fields ) ) + + nullify(io_benchmark_fields) + + end subroutine setup_io_benchmark_files + +end module io_benchmark_setup_mod \ No newline at end of file diff --git a/applications/io_demo/source/driver/io_benchmark/io_benchmark_step_mod.x90 b/applications/io_demo/source/driver/io_benchmark/io_benchmark_step_mod.x90 new file mode 100644 index 000000000..ee6e242d7 --- /dev/null +++ b/applications/io_demo/source/driver/io_benchmark/io_benchmark_step_mod.x90 @@ -0,0 +1,80 @@ +!----------------------------------------------------------------------------- +! (C) Crown copyright Met Office. All rights reserved. +! The file LICENCE, distributed with this code, contains details of the terms +! under which the code may be used. +!----------------------------------------------------------------------------- + +!> Steps the I/O benchmark section of IO_demo +module io_benchmark_step_mod + + use constants_mod, only: i_def, r_def + use driver_modeldb_mod, only: modeldb_type + use field_mod, only: field_type + use field_parent_mod, only: field_parent_type + use field_collection_iterator_mod, & + only: field_collection_iterator_type + use field_collection_mod, only: field_collection_type + use log_mod, only: log_event, & + log_scratch_space, & + LOG_LEVEL_INFO + + implicit none + + private + public :: step_io_benchmark + +contains + + !> A simple timestep algorithm that copies the diffusion field into the + !! various benchmark fields and divides the entire field by the fields number + !! + !> @param[in,out] modeldb The model database + subroutine step_io_benchmark(modeldb) + + implicit none + + type(modeldb_type), optional, intent(inout) :: modeldb + + type(field_collection_type), pointer :: depository + type(field_collection_type), pointer :: io_benchmark_fields + type(field_collection_iterator_type) :: field_iter + class(field_parent_type), pointer :: step_field + type(field_type), pointer :: kernel_field + type(field_type), pointer :: diffusion_field + + integer(i_def) :: i, sleep_duration + real(r_def) :: loop_factor + + sleep_duration = modeldb%config%io_demo%benchmark_sleep_time() + + ! Get field data ready + depository => modeldb%fields%get_field_collection("depository") + io_benchmark_fields => modeldb%fields%get_field_collection("io_benchmark_fields") + call depository%get_field("diffusion_field", diffusion_field) + + call field_iter%initialise(io_benchmark_fields) + do i = 1, io_benchmark_fields%get_length() + if ( .not. field_iter%has_next() ) exit + step_field => field_iter%next() + select type(step_field) + type is (field_type) + ! Copy diffusion field values to new fields and adjust values + kernel_field => step_field + loop_factor = real(i, r_def) + call invoke( setval_X(kernel_field, diffusion_field), & + inc_X_divideby_a(kernel_field, loop_factor) ) + end select + + end do + + write(log_scratch_space,'(A,I0,A)') "io_demo: sleeping for ", sleep_duration, " seconds" + call log_event(log_scratch_space, LOG_LEVEL_INFO) + call sleep(sleep_duration) + + nullify(step_field) + nullify(kernel_field) + nullify(diffusion_field) + + end subroutine step_io_benchmark + +end module io_benchmark_step_mod \ No newline at end of file diff --git a/applications/io_demo/source/driver/io_demo_driver_mod.f90 b/applications/io_demo/source/driver/io_demo_driver_mod.f90 index 73fd63c24..8d179b7ff 100644 --- a/applications/io_demo/source/driver/io_demo_driver_mod.f90 +++ b/applications/io_demo/source/driver/io_demo_driver_mod.f90 @@ -17,7 +17,7 @@ module io_demo_driver_mod use driver_mesh_mod, only : init_mesh use driver_modeldb_mod, only : modeldb_type use driver_fem_mod, only : init_fem, final_fem - use driver_io_mod, only : init_io, final_io + use driver_io_mod, only : init_io, final_io, filelist_populator use extrusion_mod, only : extrusion_type, & uniform_extrusion_type, & TWOD, PRIME_EXTRUSION @@ -36,6 +36,10 @@ module io_demo_driver_mod use model_clock_mod, only : model_clock_type use multifile_field_setup_mod, only : create_multifile_io_fields use multifile_io_mod, only : init_multifile_io, step_multifile_io + use io_benchmark_setup_mod, only : create_io_benchmark_fields, setup_io_benchmark_files + use io_benchmark_step_mod, only : step_io_benchmark + + use io_demo_alg_mod, only : io_demo_alg use io_demo_alg_mod, only : io_demo_alg use sci_field_minmax_alg_mod, only : log_field_minmax @@ -78,6 +82,7 @@ subroutine initialise(program_name, modeldb) class(extrusion_type), allocatable :: extrusion type(uniform_extrusion_type), allocatable :: extrusion_2d + procedure(filelist_populator), pointer :: files_init_ptr => null() character(str_def) :: prime_mesh_name integer(i_def) :: stencil_depth @@ -89,6 +94,7 @@ subroutine initialise(program_name, modeldb) real(r_def) :: scaled_radius logical :: check_partitions logical :: multifile_io + logical :: io_benchmark integer(i_def), parameter :: one_layer = 1_i_def integer(i_def) :: i @@ -106,7 +112,8 @@ subroutine initialise(program_name, modeldb) domain_height = modeldb%config%extrusion%domain_height() number_of_layers = modeldb%config%extrusion%number_of_layers() scaled_radius = modeldb%config%planet%scaled_radius() - multifile_io = modeldb%config%io%multifile_io() + multifile_io = modeldb%config%io_demo%multifile_io() + io_benchmark = modeldb%config%io_demo%io_benchmark() !======================================================================= ! Mesh @@ -177,17 +184,29 @@ subroutine initialise(program_name, modeldb) !======================================================================= ! Setup multifile reading !======================================================================= - if (multifile_io) then + files_init_ptr => null() + if(multifile_io) then call create_multifile_io_fields(modeldb) call init_multifile_io(modeldb) end if + if (io_benchmark) then + call create_io_benchmark_fields(modeldb) + files_init_ptr => setup_io_benchmark_files + end if + !======================================================================= ! Setup general I/O system. !======================================================================= ! Initialise I/O context - call init_io( program_name, prime_mesh_name, modeldb, & - chi_inventory, panel_id_inventory ) + if (associated(files_init_ptr)) then + call init_io( program_name, prime_mesh_name, modeldb, & + chi_inventory, panel_id_inventory, & + populate_filelist=files_init_ptr ) + else + call init_io( program_name, prime_mesh_name, modeldb, & + chi_inventory, panel_id_inventory ) + end if !======================================================================= @@ -219,11 +238,11 @@ subroutine step( program_name, modeldb ) type( field_type ), pointer :: diffusion_field type( field_type ), pointer :: multifile_field - logical :: multifile_io - logical :: write_diag + logical :: write_diag, multifile_io, io_benchmark - multifile_io = modeldb%config%io%multifile_io() write_diag = modeldb%config%io%write_diag() + multifile_io = modeldb%config%io_demo%multifile_io() + io_benchmark = modeldb%config%io_demo%io_benchmark() if (multifile_io) then call step_multifile_io(modeldb, chi_inventory, panel_id_inventory) @@ -237,7 +256,15 @@ subroutine step( program_name, modeldb ) ! Call an algorithm call log_event(program_name//": Calculating diffusion", LOG_LEVEL_INFO) - call io_demo_alg(modeldb, diffusion_field) + + ! Diffusion algorithm unstable with high viscosity values at high + ! resolution, so for io_benchmark mode we lower the viscosity + if (io_benchmark) then + call io_demo_alg(modeldb, diffusion_field, visc_in=1000.0_r_def) + call step_io_benchmark(modeldb) + else + call io_demo_alg(modeldb, diffusion_field) + end if if (write_diag) then ! Write out output file @@ -265,7 +292,7 @@ subroutine finalise( program_name, modeldb ) logical :: multifile_io - multifile_io = modeldb%config%io%multifile_io() + multifile_io = modeldb%config%io_demo%multifile_io() !------------------------------------------------------------------------- ! Checksum output diff --git a/applications/io_demo/source/io_demo.f90 b/applications/io_demo/source/io_demo.f90 index 7f5d7d5db..8c7cd3e94 100644 --- a/applications/io_demo/source/io_demo.f90 +++ b/applications/io_demo/source/io_demo.f90 @@ -3,6 +3,7 @@ ! The file LICENCE, distributed with this code, contains details of the terms ! under which the code may be used. !----------------------------------------------------------------------------- + !> @page Miniapp io_demo program !> @brief Main program used to calculate diffusion of randomly initialised theta field !> @details Calls init, run and finalise routines from io_demo driver module @@ -26,7 +27,6 @@ program io_demo use io_demo_driver_mod, only: initialise, step, finalise use timing_mod, only: init_timing, final_timing use io_config_mod, only: timer_output_path - use namelist_mod, only: namelist_type implicit none @@ -34,7 +34,6 @@ program io_demo type(modeldb_type) :: modeldb character(*), parameter :: program_name = "io_demo" character(:), allocatable :: filename - type(namelist_type), pointer :: io_nml logical :: lsubroutine_timers integer, parameter :: default_seed = 123456789 type(random_number_generator_type), pointer :: rng @@ -59,10 +58,8 @@ program io_demo deallocate( filename ) call init_logger( modeldb%mpi%get_comm(), program_name ) - io_nml => modeldb%configuration%get_namelist('io') - call io_nml%get_value('subroutine_timers', lsubroutine_timers) + lsubroutine_timers = modeldb%config%io%subroutine_timers() call init_timing( modeldb%mpi%get_comm(), lsubroutine_timers, program_name, timer_output_path ) - nullify( io_nml ) call init_collections() call init_time(modeldb) diff --git a/infrastructure/build/fortran/gfortran.mk b/infrastructure/build/fortran/gfortran.mk index 3dabbabb4..77a09287e 100644 --- a/infrastructure/build/fortran/gfortran.mk +++ b/infrastructure/build/fortran/gfortran.mk @@ -44,6 +44,9 @@ FFLAGS_FASTD_RUNTIME = $(FFLAGS_RUNTIME) # Option for checking code meets Fortran standard - currently 2008 FFLAGS_FORTRAN_STANDARD = -std=f2008 +# Add compiler-specific project option +FFLAGS_COMPILER += $(FFLAGS_GNU_OPTIONS) + LDFLAGS_COMPILER = utilities/traceback_mod.o utilities/traceback_mod.mod: private FFLAGS_EXTRA = -fall-intrinsics diff --git a/rose-stem/app/io_demo/opt/rose-app-C224.conf b/rose-stem/app/io_demo/opt/rose-app-C224.conf new file mode 100644 index 000000000..646de608e --- /dev/null +++ b/rose-stem/app/io_demo/opt/rose-app-C224.conf @@ -0,0 +1,10 @@ +[file:mesh_C224.nc] +mode=auto +source=$MESH_DIR/mesh_C224.nc + +[namelist:base_mesh] +file_prefix='mesh_C224' +geometry='spherical' + +[namelist:partitioning] +partitioner='cubedsphere' diff --git a/rose-stem/app/io_demo/opt/rose-app-benchmark-nwp.conf b/rose-stem/app/io_demo/opt/rose-app-benchmark-nwp.conf new file mode 100644 index 000000000..5c82bcd2b --- /dev/null +++ b/rose-stem/app/io_demo/opt/rose-app-benchmark-nwp.conf @@ -0,0 +1,20 @@ +[env] +MPICH_MPIIO_AGGREGATOR_PLACEMENT_DISPLAY=1 +MPICH_MPIIO_HINTS_DISPLAY=1 +MPICH_MPIIO_STATS=1 +VERNIER_OUTPUT_MODE=single + +[namelist:io] +subroutine_timers=.true. +write_diag=.true. + +[namelist:io_demo] +benchmark_sleep_time=4 +io_benchmark=.true. +n_benchmark_fields=200 + +[namelist:time] +timestep_end='24' + +[namelist:timestepping] +dt=3600.0 diff --git a/rose-stem/app/io_demo/opt/rose-app-benchmark.conf b/rose-stem/app/io_demo/opt/rose-app-benchmark.conf new file mode 100644 index 000000000..2896a3729 --- /dev/null +++ b/rose-stem/app/io_demo/opt/rose-app-benchmark.conf @@ -0,0 +1,20 @@ +[env] +MPICH_MPIIO_AGGREGATOR_PLACEMENT_DISPLAY=1 +MPICH_MPIIO_HINTS_DISPLAY=1 +MPICH_MPIIO_STATS=1 +VERNIER_OUTPUT_MODE=single + +[namelist:io] +subroutine_timers=.true. +write_diag=.true. + +[namelist:io_demo] +benchmark_sleep_time=1 +io_benchmark=.true. +n_benchmark_fields=10 + +[namelist:time] +timestep_end='24' + +[namelist:timestepping] +dt=3600.0 diff --git a/rose-stem/app/io_demo/opt/rose-app-multifile.conf b/rose-stem/app/io_demo/opt/rose-app-multifile.conf index 3dda44de2..edd67832f 100644 --- a/rose-stem/app/io_demo/opt/rose-app-multifile.conf +++ b/rose-stem/app/io_demo/opt/rose-app-multifile.conf @@ -6,7 +6,7 @@ source=$MESH_DIR/mesh_C24.nc file_prefix='mesh_C24' geometry='spherical' -[namelist:io] +[namelist:io_demo] multifile_io=.true. [namelist:multifile_io(iau1)] diff --git a/rose-stem/app/io_demo/opt/rose-app-xios_server.conf b/rose-stem/app/io_demo/opt/rose-app-xios_server.conf index 3d1f563b4..a0f6669ed 100644 --- a/rose-stem/app/io_demo/opt/rose-app-xios_server.conf +++ b/rose-stem/app/io_demo/opt/rose-app-xios_server.conf @@ -1,5 +1,2 @@ -[env] -XIOS_SERVER_MODE=False - [namelist:io] !!nodal_output_on_w3=.true. diff --git a/rose-stem/app/io_demo/rose-app.conf b/rose-stem/app/io_demo/rose-app.conf index af4844708..180b48845 100644 --- a/rose-stem/app/io_demo/rose-app.conf +++ b/rose-stem/app/io_demo/rose-app.conf @@ -1,4 +1,4 @@ -meta=lfric-io_demo/vn3.0 +meta=lfric-io_demo/HEAD [command] default=$CORE_ROOT_DIR/bin/tweak_iodef ; \ @@ -20,6 +20,7 @@ source=namelist:base_mesh = namelist:extrusion = namelist:finite_element = namelist:io + = namelist:io_demo = namelist:logging = (namelist:multifile_io(:)) = namelist:planet @@ -61,7 +62,6 @@ counter_output_suffix='counter.txt' diagnostic_frequency=1 !!end_of_run_checkpoint=.true. file_convention='UGRID' -multifile_io=.false. !!nodal_output_on_w3=.false. subroutine_counters=.false. subroutine_timers=.true. @@ -69,6 +69,12 @@ timer_output_path='timer.txt' use_xios_io=.true. write_diag=.false. +[namelist:io_demo] +benchmark_sleep_time=0 +io_benchmark=.false. +multifile_io=.false. +n_benchmark_fields=0 + [namelist:logging] log_to_rank_zero_only=.false. run_log_level='info' diff --git a/rose-stem/app/mesh/opt/rose-app-C224.conf b/rose-stem/app/mesh/opt/rose-app-C224.conf new file mode 100644 index 000000000..ffba5148e --- /dev/null +++ b/rose-stem/app/mesh/opt/rose-app-C224.conf @@ -0,0 +1,6 @@ +[command] +default=mkdir -p $MESH_DIR ; mpiexec -n 1 $BIN_DIR/cubedsphere_mesh_generator mesh_generation.nml +srun=mkdir -p $MESH_DIR ; srun --ntasks=1 $BIN_DIR/cubedsphere_mesh_generator mesh_generation.nml + +[namelist:cubedsphere_mesh] +edge_cells=224 diff --git a/rose-stem/site/common/io_demo/tasks_io_demo.cylc b/rose-stem/site/common/io_demo/tasks_io_demo.cylc index e3d3c069c..56f78cbba 100644 --- a/rose-stem/site/common/io_demo/tasks_io_demo.cylc +++ b/rose-stem/site/common/io_demo/tasks_io_demo.cylc @@ -21,6 +21,29 @@ "tsteps": 90, }) %} +{% elif task_ns.conf_name == "benchmark-C24" %} + + {% do task_dict.update({ + "opt_confs": ["benchmark"], + "resolution": "C24", + "tsteps": 24, + "kgo_checks": [], + }) %} + +{% elif task_ns.conf_name == "benchmark-nwp-C224" %} + + {% do task_dict.update({ + "opt_confs": ["benchmark-nwp"], + "resolution": "C224", + "tsteps": 24, + "kgo_checks": [], + "mpi_parts": 384, + "mpi_parts_xios": 6, + "xios_nodes": 1, + "xios_server_mode": true, + "xios_server_ranks": 6, + }) %} + {% elif task_ns.conf_name == "unit_tests" %} {% do task_dict.update({ diff --git a/rose-stem/site/meto/common/bin/launch-exe b/rose-stem/site/meto/common/bin/launch-exe index 8a3fa68be..c12bffc15 100755 --- a/rose-stem/site/meto/common/bin/launch-exe +++ b/rose-stem/site/meto/common/bin/launch-exe @@ -24,15 +24,19 @@ else LAUNCHER=${RUN_METHOD} fi - # Construct launcher options #=========================================== +SET_CORES_PER_NODE=$((TOTAL_RANKS