Issues with configuring the UM I/O server

Thanks to @cbengel for creating a branch of this suite without netCDF outputs, I got the IO server running.

The relevant parts of the umnsa.fort6.pe0 are

FILE_MANAGER: Assigned : pseudo-file for UNIX operations
FILE_MANAGER:          : id   : io_reserved_unit
FILE_MANAGER:          : Unit :  10 (portio)
....
792 Processors initialised.
I am PE 0 on gadi-cpu-clx-1621.gadi.nci.org.au
[0] I am running with  2 thread(s).
[0] OpenMP Specification: 201611
FILE_MANAGER: Assigned : ATMOSCNTL
FILE_MANAGER:          : id   : atmoscntl
FILE_MANAGER:          : Unit :  11 (fortran)
FILE_MANAGER: Assigned : SHARED
FILE_MANAGER:          : id   : shared
FILE_MANAGER:          : Unit :  12 (fortran)
...
MPPIO_File_Utils: Initialised file utils using unit  10
...
FILE_MANAGER: Assigned : Reserved unit for re-initialised stream (/home/548/pag548/cylc-run/u-dq126/share/cycle/20220226T0000Z/Flags
hip_ERA5to1km/12km/GAL9/um//umnsaa_pb%N)
FILE_MANAGER:          : id   : pp1
FILE_MANAGER:          : Unit :  11 (portio)
FILE_MANAGER: Assigned : Reserved unit for re-initialised stream (/home/548/pag548/cylc-run/u-dq126/share/cycle/20220226T0000Z/Flags
hip_ERA5to1km/12km/GAL9/um//umnsaa_pa%N)
FILE_MANAGER:          : id   : pp0
FILE_MANAGER:          : Unit :  12 (portio)
FILE_MANAGER: Assigned : Reserved unit for re-initialised stream (/home/548/pag548/cylc-run/u-dq126/share/cycle/20220226T0000Z/Flags
hip_ERA5to1km/12km/GAL9/um//umnsaa_cb%N)
FILE_MANAGER:          : id   : ppmbc
FILE_MANAGER:          : Unit :  13 (portio)
FILE_MANAGER: Assigned : Reserved unit for re-initialised stream (/home/548/pag548/cylc-run/u-dq126/share/cycle/20220226T0000Z/Flags
hip_ERA5to1km/12km/GAL9/um//umnsaa_pvera%N)
FILE_MANAGER:          : id   : verpp1
FILE_MANAGER:          : Unit :  14 (portio)
FILE_MANAGER: Assigned : Reserved unit for re-initialised stream (/home/548/pag548/cylc-run/u-dq126/share/cycle/20220226T0000Z/Flags
hip_ERA5to1km/12km/GAL9/um//umnsaa_pverb%N)
FILE_MANAGER:          : id   : verpp2
FILE_MANAGER:          : Unit :  15 (portio)
FILE_MANAGER: Assigned : Reserved unit for re-initialised stream (/home/548/pag548/cylc-run/u-dq126/share/cycle/20220226T0000Z/Flags
hip_ERA5to1km/12km/GAL9/um//umnsaa_pverc%N)
FILE_MANAGER:          : id   : verpp3
FILE_MANAGER:          : Unit :  16 (portio)
FILE_MANAGER: Assigned : Reserved unit for re-initialised stream (/home/548/pag548/cylc-run/u-dq126/share/cycle/20220226T0000Z/Flags
hip_ERA5to1km/12km/GAL9/um//umnsaa_pverd%N)
FILE_MANAGER:          : id   : verpp4
FILE_MANAGER:          : Unit :  17 (portio)

So when using field fields, Unit numbers 11 to 17 are used for outputs.

I’ll now proceed to test a larger I/O server on the larger domains to see what the speed-up is.

RE : Unit number allocations for netCDF outputs.

The file_manager module (https://code.metoffice.gov.uk/trac/um/browser/main/trunk/src/io_services/model_api/file_manager.F90) suggests the units number for file I/O is read from the Fortran derived types

um_file_list % file_unit_min
um_file_list % file_unit_max

There are three types used for fortran, portio and netcdf filetypes:

147	! The instances of the type used as the master list objects by this module,
148	! there are two distinct file lists depending on the type of file
149	!-------------------------------------------------------------------------------
150	TYPE(um_file_list_type), SAVE, TARGET :: um_file_list_fortran
151	TYPE(um_file_list_type), SAVE, TARGET :: um_file_list_portio
152	TYPE(um_file_list_type), SAVE, TARGET :: um_file_list_netcdf

And they are apparently defined here:

160	INTEGER, PARAMETER :: start_unit_fortran = 10
161	INTEGER, PARAMETER :: end_unit_fortran = 300
162	
163	! Portio
164	INTEGER, PARAMETER :: start_unit_portio = 10
165	INTEGER, PARAMETER :: end_unit_portio = 300
166	
167	! NetCDF
168	INTEGER, PARAMETER :: start_unit_netcdf = 10
169	INTEGER, PARAMETER :: end_unit_netcdf = 300

This suggests you can’t, by default, use the I/O server with netCDF outputs as both will want to use Unit number 10.

I can’t see from the source code anyway to override these values via a namelist input.

One fix is to set

168	INTEGER, PARAMETER :: start_unit_netcdf = 11

or to set

! A flag which forces the portio list to use unique unit numbers
155	LOGICAL, PUBLIC :: portio_unique_units = .FALSE.

to .TRUE. (why would this be set to .FALSE. by default? :thinking: ), which suggests you have to recompile the code to use the I/O with netCDF outputs?

I’m very surprised this is the case, but happy to proceed with this if required.

What’s the best way to ask the UKMO about this?
A Trac ticket?
A post to https://cms-helpdesk.ncas.ac.uk ?