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 =
' '
25 character(len=2048) :: &
34 subroutine get_mom_input(param_file, dirs, check_params, default_input_filename, ensemble_num)
37 logical,
optional,
intent(in) :: check_params
39 character(len=*),
optional,
intent(in) :: default_input_filename
42 integer,
optional,
intent(in) :: ensemble_num
44 integer,
parameter :: npf = 5
46 character(len=240) :: &
47 parameter_filename(npf), &
51 character(len=2048) :: &
54 character(len=240) :: output_dir
55 integer :: unit, io, ierr, valid_param_files
57 namelist /mom_input_nml/ output_directory, input_filename, parameter_filename, &
58 restart_input_dir, restart_output_dir
61 parameter_filename(:) =
' '
62 output_directory =
' '
63 restart_input_dir =
' '
64 restart_output_dir =
' '
66 if (
present(default_input_filename)) input_filename = trim(default_input_filename)
70 unit = open_namelist_file(file=
'input.nml')
72 call mom_error(fatal,
'Required namelist file input.nml does not exist.')
76 ierr=1 ;
do while (ierr /= 0)
77 read(unit, nml=mom_input_nml, iostat=io,
end=10)
78 ierr = check_nml_error(io,
'MOM_input_nml')
80 10
call close_file(unit)
83 if (
present(dirs))
then
84 if (
present(ensemble_num))
then
85 dirs%output_directory = slasher(ensembler(output_directory,ensemble_num))
86 dirs%restart_output_dir = slasher(ensembler(restart_output_dir,ensemble_num))
87 dirs%restart_input_dir = slasher(ensembler(restart_input_dir,ensemble_num))
88 dirs%input_filename = ensembler(input_filename,ensemble_num)
90 dirs%output_directory = slasher(ensembler(output_directory))
91 dirs%restart_output_dir = slasher(ensembler(restart_output_dir))
92 dirs%restart_input_dir = slasher(ensembler(restart_input_dir))
93 dirs%input_filename = ensembler(input_filename)
98 if (
present(param_file))
then
99 output_dir = slasher(ensembler(output_directory))
100 valid_param_files = 0
102 if (len_trim(trim(parameter_filename(io))) > 0)
then
103 if (
present(ensemble_num))
then
104 call open_param_file(ensembler(parameter_filename(io),ensemble_num), param_file, &
105 check_params, doc_file_dir=output_dir)
107 call open_param_file(ensembler(parameter_filename(io)), param_file, &
108 check_params, doc_file_dir=output_dir)
110 valid_param_files = valid_param_files + 1
113 if (valid_param_files == 0)
call mom_error(fatal,
"There must be at "//&
114 "least 1 valid entry in input_filename in MOM_input_nml in input.nml.")
117 end subroutine get_mom_input