MOM6
mom_get_input Module Reference

Detailed Description

Reads the only Fortran name list needed to boot-strap the model.

The name list parameters indicate which directories to use for certain types of input and output, and which files to look in for the full parsable input parameter file(s).

Data Types

type  directories
 Container for paths and parameter file names. More...
 

Functions/Subroutines

subroutine, public get_mom_input (param_file, dirs, check_params, default_input_filename, ensemble_num)
 Get the names of the I/O directories and initialization file. Also calls the subroutine that opens run-time parameter files. More...
 

Function/Subroutine Documentation

◆ get_mom_input()

subroutine, public mom_get_input::get_mom_input ( type(param_file_type), intent(out), optional  param_file,
type(directories), intent(out), optional  dirs,
logical, intent(in), optional  check_params,
character(len=*), intent(in), optional  default_input_filename,
integer, intent(in), optional  ensemble_num 
)

Get the names of the I/O directories and initialization file. Also calls the subroutine that opens run-time parameter files.

Parameters
[out]param_fileA structure to parse for run-time parameters.
[out]dirsContainer for paths and parameter file names.
[in]check_paramsIf present and False will stop error checking for run-time parameters.
[in]default_input_filenameIf present, is the value assumed for input_filename if input_filename is not listed in the namelist MOM_input_nml.
[in]ensemble_numThe ensemble id of the current member

Definition at line 34 of file MOM_get_input.F90.

34  type(param_file_type), optional, intent(out) :: param_file !< A structure to parse for run-time parameters.
35  type(directories), optional, intent(out) :: dirs !< Container for paths and parameter file names.
36  logical, optional, intent(in) :: check_params !< If present and False will stop error checking for
37  !! run-time parameters.
38  character(len=*), optional, intent(in) :: default_input_filename !< If present, is the value assumed for
39  !! input_filename if input_filename is not listed
40  !! in the namelist MOM_input_nml.
41  integer, optional, intent(in) :: ensemble_num !< The ensemble id of the current member
42  ! Local variables
43  integer, parameter :: npf = 5 ! Maximum number of parameter files
44 
45  character(len=240) :: &
46  parameter_filename(npf), & ! List of files containing parameters.
47  output_directory, & ! Directory to use to write the model output.
48  restart_input_dir, & ! Directory for reading restart and input files.
49  restart_output_dir, & ! Directory into which to write restart files.
50  input_filename ! A string that indicates the input files or how
51  ! the run segment should be started.
52  character(len=240) :: output_dir
53  integer :: unit, io, ierr, valid_param_files
54 
55  namelist /mom_input_nml/ output_directory, input_filename, parameter_filename, &
56  restart_input_dir, restart_output_dir
57 
58  ! Default values in case parameter is not set in file input.nml
59  parameter_filename(:) = ' '
60  output_directory = ' '
61  restart_input_dir = ' '
62  restart_output_dir = ' '
63  input_filename = ' '
64  if (present(default_input_filename)) input_filename = trim(default_input_filename)
65 
66  ! Open namelist
67  if (file_exists('input.nml')) then
68  unit = open_namelist_file(file='input.nml')
69  else
70  call mom_error(fatal,'Required namelist file input.nml does not exist.')
71  endif
72 
73  ! Read namelist parameters
74  ierr=1 ; do while (ierr /= 0)
75  read(unit, nml=mom_input_nml, iostat=io, end=10)
76  ierr = check_nml_error(io, 'MOM_input_nml')
77  enddo
78 10 call close_file(unit)
79 
80  ! Store parameters in container
81  if (present(dirs)) then
82  if (present(ensemble_num)) then
83  dirs%output_directory = slasher(ensembler(output_directory,ensemble_num))
84  dirs%restart_output_dir = slasher(ensembler(restart_output_dir,ensemble_num))
85  dirs%restart_input_dir = slasher(ensembler(restart_input_dir,ensemble_num))
86  dirs%input_filename = ensembler(input_filename,ensemble_num)
87  else
88  dirs%output_directory = slasher(ensembler(output_directory))
89  dirs%restart_output_dir = slasher(ensembler(restart_output_dir))
90  dirs%restart_input_dir = slasher(ensembler(restart_input_dir))
91  dirs%input_filename = ensembler(input_filename)
92  endif
93  endif
94 
95  ! Open run-time parameter file(s)
96  if (present(param_file)) then
97  output_dir = slasher(ensembler(output_directory))
98  valid_param_files = 0
99  do io = 1, npf
100  if (len_trim(trim(parameter_filename(io))) > 0) then
101  if (present(ensemble_num)) then
102  call open_param_file(ensembler(parameter_filename(io),ensemble_num), param_file, &
103  check_params, doc_file_dir=output_dir)
104  else
105  call open_param_file(ensembler(parameter_filename(io)), param_file, &
106  check_params, doc_file_dir=output_dir)
107  endif
108  valid_param_files = valid_param_files + 1
109  endif
110  enddo
111  if (valid_param_files == 0) call mom_error(fatal, "There must be at "//&
112  "least 1 valid entry in input_filename in MOM_input_nml in input.nml.")
113  endif
114 

References mom_error_handler::mom_error(), and mom_file_parser::open_param_file().

Referenced by mom_tracer_flow_control::call_tracer_flux_init(), mom_oda_driver_mod::init_oda(), mom_ice_shelf::initialize_ice_shelf(), mom::initialize_mom(), ocn_comp_mct::ocn_init_mct(), mom_surface_forcing_nuopc::surface_forcing_init(), mom_surface_forcing_mct::surface_forcing_init(), and mom_surface_forcing::surface_forcing_init().

Here is the call graph for this function:
Here is the caller graph for this function: