13 use mom_io,
only : open_namelist_file, check_nml_error
15 implicit none ;
private
21 character(len=240) :: &
22 restart_input_dir =
' ',& !< The directory to read restart and input files.
23 restart_output_dir =
' ',&
24 output_directory =
' ', &
33 subroutine get_mom_input(param_file, dirs, check_params, default_input_filename, ensemble_num)
36 logical,
optional,
intent(in) :: check_params
38 character(len=*),
optional,
intent(in) :: default_input_filename
41 integer,
optional,
intent(in) :: ensemble_num
43 integer,
parameter :: npf = 5
44 character(len=240) :: &
45 parameter_filename(npf), &
51 character(len=240) :: output_dir
52 integer :: unit, io, ierr, valid_param_files
54 namelist /mom_input_nml/ output_directory, input_filename, parameter_filename, &
55 restart_input_dir, restart_output_dir
58 parameter_filename(:) =
' '
59 output_directory =
' '
60 restart_input_dir =
' '
61 restart_output_dir =
' '
63 if (
present(default_input_filename)) input_filename = trim(default_input_filename)
67 unit = open_namelist_file(file=
'input.nml')
69 call mom_error(fatal,
'Required namelist file input.nml does not exist.')
73 ierr=1 ;
do while (ierr /= 0)
74 read(unit, nml=mom_input_nml, iostat=io,
end=10)
75 ierr = check_nml_error(io,
'MOM_input_nml')
77 10
call close_file(unit)
80 if (
present(dirs))
then
81 if (
present(ensemble_num))
then
82 dirs%output_directory = slasher(ensembler(output_directory,ensemble_num))
83 dirs%restart_output_dir = slasher(ensembler(restart_output_dir,ensemble_num))
84 dirs%restart_input_dir = slasher(ensembler(restart_input_dir,ensemble_num))
85 dirs%input_filename = ensembler(input_filename,ensemble_num)
87 dirs%output_directory = slasher(ensembler(output_directory))
88 dirs%restart_output_dir = slasher(ensembler(restart_output_dir))
89 dirs%restart_input_dir = slasher(ensembler(restart_input_dir))
90 dirs%input_filename = ensembler(input_filename)
95 if (
present(param_file))
then
96 output_dir = slasher(ensembler(output_directory))
99 if (len_trim(trim(parameter_filename(io))) > 0)
then
100 if (
present(ensemble_num))
then
101 call open_param_file(ensembler(parameter_filename(io),ensemble_num), param_file, &
102 check_params, doc_file_dir=output_dir)
104 call open_param_file(ensembler(parameter_filename(io)), param_file, &
105 check_params, doc_file_dir=output_dir)
107 valid_param_files = valid_param_files + 1
110 if (valid_param_files == 0)
call mom_error(fatal,
"There must be at "//&
111 "least 1 valid entry in input_filename in MOM_input_nml in input.nml.")
114 end subroutine get_mom_input