36use fms_mod,
only: fatal, stdout
38use platform_mod,
only: r4_kind, r8_kind, fms_path_len
79character(len=128),
public :: fm_util_default_caller =
' '
85character(len=48),
parameter :: mod_name =
'fm_util_mod'
91character(len=128) :: save_default_caller =
' '
92character(len=128) :: default_good_name_list =
' '
93character(len=128) :: save_default_good_name_list =
' '
94logical :: default_no_overwrite = .false.
95logical :: save_default_no_overwrite = .false.
96character(len=FMS_PATH_LEN) :: save_current_list
97character(len=FMS_PATH_LEN) :: save_path
98character(len=FMS_PATH_LEN) :: save_name
100#include<file_version.h>
120 module procedure fm_util_set_value_real_r4
121 module procedure fm_util_set_value_real_r8
125 module procedure fm_util_set_value_real_array_r4
126 module procedure fm_util_set_value_real_array_r8
132 module procedure fm_util_set_value_real_array_r4
133 module procedure fm_util_set_value_real_array_r8
136 module procedure fm_util_set_value_real_r4
137 module procedure fm_util_set_value_real_r8
164character(len=*),
intent(in) :: caller
174save_default_caller = fm_util_default_caller
180if (caller .eq.
' ')
then
181 fm_util_default_caller =
' '
183 fm_util_default_caller =
'[' // trim(caller) //
']'
210fm_util_default_caller = save_default_caller
211save_default_caller =
' '
229character(len=*),
intent(in) :: good_name_list
239save_default_good_name_list = default_good_name_list
245default_good_name_list = good_name_list
271default_good_name_list = save_default_good_name_list
272save_default_good_name_list =
' '
290logical,
intent(in) :: no_overwrite
300save_default_no_overwrite = default_no_overwrite
306default_no_overwrite = no_overwrite
332default_no_overwrite = save_default_no_overwrite
333save_default_no_overwrite = .false.
350character(len=*),
intent(in) :: list
351character(len=*),
intent(in),
dimension(:) :: good_fields
352character(len=*),
intent(in),
optional :: caller
358character(len=48),
parameter :: sub_name =
'fm_util_check_for_bad_fields'
367integer :: list_length
368integer :: good_length
369character(len=fm_type_name_len) :: typ
370character(len=fm_field_name_len) :: name
372character(len=256) :: error_header
373character(len=256) :: warn_header
374character(len=256) :: note_header
375character(len=128) :: caller_str
384if (
present(caller))
then
385 caller_str =
'[' // trim(caller) //
']'
387 caller_str = fm_util_default_caller
390error_header =
'==>Error from ' // trim(mod_name) // &
391 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
392warn_header =
'==>Warning from ' // trim(mod_name) // &
393 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
394note_header =
'==>Note from ' // trim(mod_name) // &
395 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
401if (list .eq.
' ')
then
402 write (out_unit,*) trim(error_header) //
' Empty list given'
403 call mpp_error(fatal, trim(error_header) //
' Empty list given')
411 write (out_unit,*) trim(error_header) //
' Not given a list: ' // trim(list)
412 call mpp_error(fatal, trim(error_header) //
' Not given a list: ' // trim(list))
420if (list_length .lt. 0)
then
421 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(list))
428good_length =
size(good_fields)
430if (list_length .lt. good_length)
then
438 write (out_unit,*) trim(error_header),
' List length < number of good fields (', &
439 list_length,
' < ', good_length,
') in list ', trim(list)
442 write (out_unit,*)
'The list contains the following fields:'
445 write (out_unit,*)
'The supposed list of good fields is:'
446 do i = 1, good_length
447 if (
fm_exists(trim(list) //
'/' // good_fields(i)))
then
448 write (out_unit,*)
'List field: "', trim(good_fields(i)),
'"'
450 write (out_unit,*)
'EXTRA good field: "', trim(good_fields(i)),
'"'
455 call mpp_error(fatal, trim(error_header) // &
456 ' List length < number of good fields for list: ' // trim(list))
458elseif (list_length .gt. good_length)
then
466 write (out_unit,*) trim(warn_header),
'List length > number of good fields (', &
467 list_length,
' > ', good_length,
') in list ', trim(list)
469 write (out_unit,*) trim(error_header),
' Start of list of fields'
472 do i = 1, good_length
473 found = found .or. (name .eq. good_fields(i))
476 write (out_unit,*)
'Good list field: "', trim(name),
'"'
478 write (out_unit,*)
'EXTRA list field: "', trim(name),
'"'
481 write (out_unit,*) trim(error_header),
' End of list of fields'
483 call mpp_error(fatal, trim(error_header) // &
484 ' List length > number of good fields for list: ' // trim(list))
508integer :: field_length
514character(len=*),
intent(in) :: name
515character(len=*),
intent(in),
optional :: caller
521character(len=48),
parameter :: sub_name =
'fm_util_get_length'
527character(len=256) :: error_header
528character(len=256) :: warn_header
529character(len=256) :: note_header
530character(len=128) :: caller_str
536if (
present(caller))
then
537 caller_str =
'[' // trim(caller) //
']'
539 caller_str = fm_util_default_caller
542error_header =
'==>Error from ' // trim(mod_name) // &
543 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
544warn_header =
'==>Warning from ' // trim(mod_name) // &
545 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
546note_header =
'==>Note from ' // trim(mod_name) // &
547 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
553if (name .eq.
' ')
then
554 call mpp_error(fatal, trim(error_header) //
' Empty name given')
562if (field_length .lt. 0)
then
563 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
588character(len=*),
intent(in) :: name
589character(len=*),
intent(in) :: string
590character(len=*),
intent(in),
optional :: caller
596character(len=48),
parameter :: sub_name =
'fm_util_get_index_string'
602character(len=256) :: error_header
603character(len=256) :: warn_header
604character(len=256) :: note_header
605character(len=128) :: caller_str
606character(len=32) :: index_str
607character(len=fm_type_name_len) :: fm_type
608character(len=fm_string_len) :: fm_string
616if (
present(caller))
then
617 caller_str =
'[' // trim(caller) //
']'
619 caller_str = fm_util_default_caller
622error_header =
'==>Error from ' // trim(mod_name) // &
623 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
624warn_header =
'==>Warning from ' // trim(mod_name) // &
625 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
626note_header =
'==>Note from ' // trim(mod_name) // &
627 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
633if (name .eq.
' ')
then
634 call mpp_error(fatal, trim(error_header) //
' Empty name given')
643if (fm_type .eq.
'string')
then
645 if (length .lt. 0)
then
646 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
648 if (length .gt. 0)
then
650 if (.not.
fm_get_value(name, fm_string, index = i))
then
651 write (index_str,*)
'(', i,
')'
652 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name) // trim(index_str))
654 if (fm_string .eq. string)
then
660elseif (fm_type .eq.
' ')
then
661 call mpp_error(fatal, trim(error_header) //
' Array does not exist: ' // trim(name))
663 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
692character(len=*),
intent(in) :: name
693character(len=*),
intent(in),
optional :: caller
699character(len=48),
parameter :: sub_name =
'fm_util_get_index_list'
705character(len=256) :: error_header
706character(len=256) :: warn_header
707character(len=256) :: note_header
708character(len=128) :: caller_str
709character(len=fm_type_name_len) :: fm_type
715if (
present(caller))
then
716 caller_str =
'[' // trim(caller) //
']'
718 caller_str = fm_util_default_caller
721error_header =
'==>Error from ' // trim(mod_name) // &
722 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
723warn_header =
'==>Warning from ' // trim(mod_name) // &
724 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
725note_header =
'==>Note from ' // trim(mod_name) // &
726 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
732if (name .eq.
' ')
then
733 call mpp_error(fatal, trim(error_header) //
' Empty name given')
742if (fm_type .eq.
'list')
then
744 if (fm_index .le. 0)
then
745 call mpp_error(fatal, trim(error_header) //
' List does not exist: ' // trim(name))
747elseif (fm_type .eq.
' ')
then
748 call mpp_error(fatal, trim(error_header) //
' List does not exist: ' // trim(name))
750 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
771integer,
pointer,
dimension(:) :: array
777character(len=*),
intent(in) :: name
778character(len=*),
intent(in),
optional :: caller
784character(len=48),
parameter :: sub_name =
'fm_util_get_integer_array'
790character(len=256) :: error_header
791character(len=256) :: warn_header
792character(len=256) :: note_header
793character(len=128) :: caller_str
794character(len=32) :: index_str
795character(len=fm_type_name_len) :: fm_type
805if (
present(caller))
then
806 caller_str =
'[' // trim(caller) //
']'
808 caller_str = fm_util_default_caller
811error_header =
'==>Error from ' // trim(mod_name) // &
812 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
813warn_header =
'==>Warning from ' // trim(mod_name) // &
814 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
815note_header =
'==>Note from ' // trim(mod_name) // &
816 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
822if (name .eq.
' ')
then
823 call mpp_error(fatal, trim(error_header) //
' Empty name given')
827if (fm_type .eq.
'integer')
then
829 if (length .lt. 0)
then
830 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
832 if (length .gt. 0)
then
833 allocate(array(length))
836 write (index_str,*)
'(', i,
')'
837 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name) // trim(index_str))
841elseif (fm_type .eq.
' ')
then
842 call mpp_error(fatal, trim(error_header) //
' Array does not exist: ' // trim(name))
844 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
863logical,
pointer,
dimension(:) :: array
869character(len=*),
intent(in) :: name
870character(len=*),
intent(in),
optional :: caller
876character(len=48),
parameter :: sub_name =
'fm_util_get_logical_array'
882character(len=256) :: error_header
883character(len=256) :: warn_header
884character(len=256) :: note_header
885character(len=128) :: caller_str
886character(len=32) :: index_str
887character(len=fm_type_name_len) :: fm_type
897if (
present(caller))
then
898 caller_str =
'[' // trim(caller) //
']'
900 caller_str = fm_util_default_caller
903error_header =
'==>Error from ' // trim(mod_name) // &
904 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
905warn_header =
'==>Warning from ' // trim(mod_name) // &
906 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
907note_header =
'==>Note from ' // trim(mod_name) // &
908 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
914if (name .eq.
' ')
then
915 call mpp_error(fatal, trim(error_header) //
' Empty name given')
919if (fm_type .eq.
'logical')
then
921 if (length .lt. 0)
then
922 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
924 if (length .gt. 0)
then
925 allocate(array(length))
928 write (index_str,*)
'(', i,
')'
929 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name) // trim(index_str))
933elseif (fm_type .eq.
' ')
then
934 call mpp_error(fatal, trim(error_header) //
' Array does not exist: ' // trim(name))
936 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
955real(r8_kind),
pointer,
dimension(:) :: array
961character(len=*),
intent(in) :: name
962character(len=*),
intent(in),
optional :: caller
968character(len=48),
parameter :: sub_name =
'fm_util_get_real_array'
974character(len=256) :: error_header
975character(len=256) :: warn_header
976character(len=256) :: note_header
977character(len=128) :: caller_str
978character(len=32) :: index_str
979character(len=fm_type_name_len) :: fm_type
989if (
present(caller))
then
990 caller_str =
'[' // trim(caller) //
']'
992 caller_str = fm_util_default_caller
995error_header =
'==>Error from ' // trim(mod_name) // &
996 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
997warn_header =
'==>Warning from ' // trim(mod_name) // &
998 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
999note_header =
'==>Note from ' // trim(mod_name) // &
1000 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1006if (name .eq.
' ')
then
1007 call mpp_error(fatal, trim(error_header) //
' Empty name given')
1011if (fm_type .eq.
'real')
then
1013 if (length .lt. 0)
then
1014 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
1016 if (length .gt. 0)
then
1017 allocate(array(length))
1019 if (.not.
fm_get_value(name, array(i), index = i))
then
1020 write (index_str,*)
'(', i,
')'
1021 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name) // trim(index_str))
1025elseif (fm_type .eq.
' ')
then
1026 call mpp_error(fatal, trim(error_header) //
' Array does not exist: ' // trim(name))
1028 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
1048character(len=fm_string_len),
pointer,
dimension(:) :: array
1054character(len=*),
intent(in) :: name
1055character(len=*),
intent(in),
optional :: caller
1061character(len=48),
parameter :: sub_name =
'fm_util_get_string_array'
1067character(len=256) :: error_header
1068character(len=256) :: warn_header
1069character(len=256) :: note_header
1070character(len=128) :: caller_str
1071character(len=32) :: index_str
1072character(len=fm_type_name_len) :: fm_type
1082if (
present(caller))
then
1083 caller_str =
'[' // trim(caller) //
']'
1085 caller_str = fm_util_default_caller
1088error_header =
'==>Error from ' // trim(mod_name) // &
1089 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1090warn_header =
'==>Warning from ' // trim(mod_name) // &
1091 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1092note_header =
'==>Note from ' // trim(mod_name) // &
1093 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1099if (name .eq.
' ')
then
1100 call mpp_error(fatal, trim(error_header) //
' Empty name given')
1104if (fm_type .eq.
'string')
then
1106 if (length .lt. 0)
then
1107 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
1109 if (length .gt. 0)
then
1110 allocate(array(length))
1112 if (.not.
fm_get_value(name, array(i), index = i))
then
1113 write (index_str,*)
'(', i,
')'
1114 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name) // trim(index_str))
1118elseif (fm_type .eq.
' ')
then
1119 call mpp_error(fatal, trim(error_header) //
' Array does not exist: ' // trim(name))
1121 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
1146character(len=*),
intent(in) :: name
1147character(len=*),
intent(in),
optional :: caller
1148integer,
intent(in),
optional :: index
1149integer,
intent(in),
optional :: default_value
1150logical,
intent(in),
optional :: scalar
1156character(len=48),
parameter :: sub_name =
'fm_util_get_integer'
1162character(len=256) :: error_header
1163character(len=256) :: warn_header
1164character(len=256) :: note_header
1165character(len=128) :: caller_str
1167character(len=fm_type_name_len) :: fm_type
1168integer :: field_length
1174if (
present(caller))
then
1175 caller_str =
'[' // trim(caller) //
']'
1177 caller_str = fm_util_default_caller
1180error_header =
'==>Error from ' // trim(mod_name) // &
1181 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1182warn_header =
'==>Warning from ' // trim(mod_name) // &
1183 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1184note_header =
'==>Note from ' // trim(mod_name) // &
1185 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1191if (name .eq.
' ')
then
1192 call mpp_error(fatal, trim(error_header) //
' Empty name given')
1200if (
present(scalar))
then
1203 if (field_length .lt. 0)
then
1204 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
1205 elseif (field_length .gt. 1)
then
1206 call mpp_error(fatal, trim(error_header) // trim(name) //
' not scalar')
1215if (
present(index))
then
1217 if (index .le. 0)
then
1218 call mpp_error(fatal, trim(error_header) //
' Index not positive')
1225if (fm_type .eq.
'integer')
then
1226 if (.not.
fm_get_value(name, ival, index = index_t))
then
1227 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name))
1229elseif (fm_type .eq.
' ' .and.
present(default_value))
then
1230 ival = default_value
1231elseif (fm_type .eq.
' ')
then
1232 call mpp_error(fatal, trim(error_header) //
' Field does not exist: ' // trim(name))
1234 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
1259character(len=*),
intent(in) :: name
1260character(len=*),
intent(in),
optional :: caller
1261integer,
intent(in),
optional :: index
1262logical,
intent(in),
optional :: default_value
1263logical,
intent(in),
optional :: scalar
1269character(len=48),
parameter :: sub_name =
'fm_util_get_logical'
1275character(len=256) :: error_header
1276character(len=256) :: warn_header
1277character(len=256) :: note_header
1278character(len=128) :: caller_str
1280character(len=fm_type_name_len) :: fm_type
1281integer :: field_length
1287if (
present(caller))
then
1288 caller_str =
'[' // trim(caller) //
']'
1290 caller_str = fm_util_default_caller
1293error_header =
'==>Error from ' // trim(mod_name) // &
1294 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1295warn_header =
'==>Warning from ' // trim(mod_name) // &
1296 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1297note_header =
'==>Note from ' // trim(mod_name) // &
1298 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1304if (name .eq.
' ')
then
1305 call mpp_error(fatal, trim(error_header) //
' Empty name given')
1313if (
present(scalar))
then
1316 if (field_length .lt. 0)
then
1317 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
1318 elseif (field_length .gt. 1)
then
1319 call mpp_error(fatal, trim(error_header) // trim(name) //
' not scalar')
1328if (
present(index))
then
1330 if (index .le. 0)
then
1331 call mpp_error(fatal, trim(error_header) //
' Index not positive')
1338if (fm_type .eq.
'logical')
then
1339 if (.not.
fm_get_value(name, lval, index = index_t))
then
1340 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name))
1342elseif (fm_type .eq.
' ' .and.
present(default_value))
then
1343 lval = default_value
1344elseif (fm_type .eq.
' ')
then
1345 call mpp_error(fatal, trim(error_header) //
' Field does not exist: ' // trim(name))
1347 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
1367real(r8_kind) :: rval
1373character(len=*),
intent(in) :: name
1374character(len=*),
intent(in),
optional :: caller
1375integer,
intent(in),
optional :: index
1376real(r8_kind),
intent(in),
optional :: default_value
1377logical,
intent(in),
optional :: scalar
1383character(len=48),
parameter :: sub_name =
'fm_util_get_real'
1389character(len=256) :: error_header
1390character(len=256) :: warn_header
1391character(len=256) :: note_header
1392character(len=128) :: caller_str
1394character(len=fm_type_name_len) :: fm_type
1395integer :: field_length
1402if (
present(caller))
then
1403 caller_str =
'[' // trim(caller) //
']'
1405 caller_str = fm_util_default_caller
1408error_header =
'==>Error from ' // trim(mod_name) // &
1409 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1410warn_header =
'==>Warning from ' // trim(mod_name) // &
1411 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1412note_header =
'==>Note from ' // trim(mod_name) // &
1413 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1419if (name .eq.
' ')
then
1420 call mpp_error(fatal, trim(error_header) //
' Empty name given')
1428if (
present(scalar))
then
1431 if (field_length .lt. 0)
then
1432 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
1433 elseif (field_length .gt. 1)
then
1434 call mpp_error(fatal, trim(error_header) // trim(name) //
' not scalar')
1443if (
present(index))
then
1445 if (index .le. 0)
then
1446 call mpp_error(fatal, trim(error_header) //
' Index not positive')
1453if (fm_type .eq.
'real')
then
1454 if (.not.
fm_get_value(name, rval, index = index_t))
then
1455 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name))
1457else if (fm_type .eq.
'integer')
then
1458 if (.not.
fm_get_value(name, ivalue, index = index_t))
then
1459 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name))
1461 rval = real(ivalue,r8_kind)
1462elseif (fm_type .eq.
' ' .and.
present(default_value))
then
1463 rval = default_value
1464elseif (fm_type .eq.
' ')
then
1465 call mpp_error(fatal, trim(error_header) //
' Field does not exist: ' // trim(name))
1467 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
1488character(len=fm_string_len) :: sval
1494character(len=*),
intent(in) :: name
1495character(len=*),
intent(in),
optional :: caller
1496integer,
intent(in),
optional :: index
1497character(len=*),
intent(in),
optional :: default_value
1498logical,
intent(in),
optional :: scalar
1504character(len=48),
parameter :: sub_name =
'fm_util_get_string'
1510character(len=256) :: error_header
1511character(len=256) :: warn_header
1512character(len=256) :: note_header
1513character(len=128) :: caller_str
1515character(len=fm_type_name_len) :: fm_type
1516integer :: field_length
1522if (
present(caller))
then
1523 caller_str =
'[' // trim(caller) //
']'
1525 caller_str = fm_util_default_caller
1528error_header =
'==>Error from ' // trim(mod_name) // &
1529 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1530warn_header =
'==>Warning from ' // trim(mod_name) // &
1531 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1532note_header =
'==>Note from ' // trim(mod_name) // &
1533 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1539if (name .eq.
' ')
then
1540 call mpp_error(fatal, trim(error_header) //
' Empty name given')
1548if (
present(scalar))
then
1551 if (field_length .lt. 0)
then
1552 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
1553 elseif (field_length .gt. 1)
then
1554 call mpp_error(fatal, trim(error_header) // trim(name) //
' not scalar')
1563if (
present(index))
then
1565 if (index .le. 0)
then
1566 call mpp_error(fatal, trim(error_header) //
' Index not positive')
1573if (fm_type .eq.
'string')
then
1574 if (.not.
fm_get_value(name, sval, index = index_t))
then
1575 call mpp_error(fatal, trim(error_header) //
' Problem getting ' // trim(name))
1577elseif (fm_type .eq.
' ' .and.
present(default_value))
then
1578 sval = default_value
1579elseif (fm_type .eq.
' ')
then
1580 call mpp_error(fatal, trim(error_header) //
' Field does not exist: ' // trim(name))
1582 call mpp_error(fatal, trim(error_header) //
' Wrong type for ' // trim(name) //
', found (' // trim(fm_type) //
')')
1600character(len=*),
intent(in) :: name
1601integer,
intent(in) :: length
1602integer,
intent(in) :: ival(length)
1603character(len=*),
intent(in),
optional :: caller
1604logical,
intent(in),
optional :: no_overwrite
1605character(len=*),
intent(in),
optional :: good_name_list
1611character(len=48),
parameter :: sub_name =
'fm_util_set_value_integer_array'
1617character(len=256) :: error_header
1618character(len=256) :: warn_header
1619character(len=256) :: note_header
1620character(len=128) :: caller_str
1621character(len=32) :: str_error
1622integer :: field_index
1623integer :: field_length
1625logical :: no_overwrite_use
1626character(len=FMS_PATH_LEN) :: good_name_list_use
1633if (
present(caller))
then
1634 caller_str =
'[' // trim(caller) //
']'
1636 caller_str = fm_util_default_caller
1639error_header =
'==>Error from ' // trim(mod_name) // &
1640 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1641warn_header =
'==>Warning from ' // trim(mod_name) // &
1642 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1643note_header =
'==>Note from ' // trim(mod_name) // &
1644 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1650if (name .eq.
' ')
then
1651 call mpp_error(fatal, trim(error_header) //
' Empty name given')
1658if (length .lt. 0)
then
1659 call mpp_error(fatal, trim(error_header) //
' Negative array length')
1666if (
present(no_overwrite))
then
1667 no_overwrite_use = no_overwrite
1669 no_overwrite_use = default_no_overwrite
1676if (
present(good_name_list))
then
1677 good_name_list_use = good_name_list
1679 good_name_list_use = default_good_name_list
1686if (length .eq. 0)
then
1687 if (.not. (no_overwrite_use .and.
fm_exists(name)))
then
1689 if (field_index .le. 0)
then
1690 write (str_error,*)
' with length = ', length
1691 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
1695 if (no_overwrite_use .and.
fm_exists(name))
then
1697 if (field_length .lt. 0)
then
1698 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
1700 do n = field_length + 1, length
1702 if (field_index .le. 0)
then
1703 write (str_error,*)
' with index = ', n
1704 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
1709 if (field_index .le. 0)
then
1710 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name))
1714 if (field_index .le. 0)
then
1715 write (str_error,*)
' with index = ', n
1716 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
1727if (good_name_list_use .ne.
' ')
then
1730 caller = caller_str) .le. 0
1734 if (add_name .and.
fm_exists(name))
then
1735 if (
fm_new_value(good_name_list_use, name, append = .true., create = .true.) .le. 0)
then
1736 call mpp_error(fatal, trim(error_header) // &
1737 ' Could not add ' // trim(name) //
' to "' // trim(good_name_list_use) //
'" list')
1757character(len=*),
intent(in) :: name
1758integer,
intent(in) :: length
1759logical,
intent(in) :: lval(length)
1760character(len=*),
intent(in),
optional :: caller
1761logical,
intent(in),
optional :: no_overwrite
1762character(len=*),
intent(in),
optional :: good_name_list
1768character(len=48),
parameter :: sub_name =
'fm_util_set_value_logical_array'
1774character(len=256) :: error_header
1775character(len=256) :: warn_header
1776character(len=256) :: note_header
1777character(len=128) :: caller_str
1778character(len=32) :: str_error
1779integer :: field_index
1780integer :: field_length
1782logical :: no_overwrite_use
1783character(len=FMS_PATH_LEN) :: good_name_list_use
1790if (
present(caller))
then
1791 caller_str =
'[' // trim(caller) //
']'
1793 caller_str = fm_util_default_caller
1796error_header =
'==>Error from ' // trim(mod_name) // &
1797 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1798warn_header =
'==>Warning from ' // trim(mod_name) // &
1799 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1800note_header =
'==>Note from ' // trim(mod_name) // &
1801 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1807if (name .eq.
' ')
then
1808 call mpp_error(fatal, trim(error_header) //
' Empty name given')
1815if (length .lt. 0)
then
1816 call mpp_error(fatal, trim(error_header) //
' Negative array length')
1823if (
present(no_overwrite))
then
1824 no_overwrite_use = no_overwrite
1826 no_overwrite_use = default_no_overwrite
1833if (
present(good_name_list))
then
1834 good_name_list_use = good_name_list
1836 good_name_list_use = default_good_name_list
1843if (length .eq. 0)
then
1844 if (.not. (no_overwrite_use .and.
fm_exists(name)))
then
1846 if (field_index .le. 0)
then
1847 write (str_error,*)
' with length = ', length
1848 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
1852 if (no_overwrite_use .and.
fm_exists(name))
then
1854 if (field_length .lt. 0)
then
1855 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
1857 do n = field_length + 1, length
1859 if (field_index .le. 0)
then
1860 write (str_error,*)
' with index = ', n
1861 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
1866 if (field_index .le. 0)
then
1867 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name))
1871 if (field_index .le. 0)
then
1872 write (str_error,*)
' with index = ', n
1873 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
1884if (good_name_list_use .ne.
' ')
then
1887 caller = caller_str) .le. 0
1891 if (add_name .and.
fm_exists(name))
then
1892 if (
fm_new_value(good_name_list_use, name, append = .true., create = .true.) .le. 0)
then
1893 call mpp_error(fatal, trim(error_header) // &
1894 ' Could not add ' // trim(name) //
' to "' // trim(good_name_list_use) //
'" list')
1914character(len=*),
intent(in) :: name
1915integer,
intent(in) :: length
1916character(len=*),
intent(in) :: sval(length)
1917character(len=*),
intent(in),
optional :: caller
1918logical,
intent(in),
optional :: no_overwrite
1919character(len=*),
intent(in),
optional :: good_name_list
1925character(len=48),
parameter :: sub_name =
'fm_util_set_value_string_array'
1931character(len=256) :: error_header
1932character(len=256) :: warn_header
1933character(len=256) :: note_header
1934character(len=128) :: caller_str
1935character(len=32) :: str_error
1936integer :: field_index
1937integer :: field_length
1939logical :: no_overwrite_use
1940character(len=FMS_PATH_LEN) :: good_name_list_use
1947if (
present(caller))
then
1948 caller_str =
'[' // trim(caller) //
']'
1950 caller_str = fm_util_default_caller
1953error_header =
'==>Error from ' // trim(mod_name) // &
1954 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1955warn_header =
'==>Warning from ' // trim(mod_name) // &
1956 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1957note_header =
'==>Note from ' // trim(mod_name) // &
1958 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
1964if (name .eq.
' ')
then
1965 call mpp_error(fatal, trim(error_header) //
' Empty name given')
1972if (length .lt. 0)
then
1973 call mpp_error(fatal, trim(error_header) //
' Negative array length')
1980if (
present(no_overwrite))
then
1981 no_overwrite_use = no_overwrite
1983 no_overwrite_use = default_no_overwrite
1990if (
present(good_name_list))
then
1991 good_name_list_use = good_name_list
1993 good_name_list_use = default_good_name_list
2000if (length .eq. 0)
then
2001 if (.not. (no_overwrite_use .and.
fm_exists(name)))
then
2003 if (field_index .le. 0)
then
2004 write (str_error,*)
' with length = ', length
2005 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
2009 if (no_overwrite_use .and.
fm_exists(name))
then
2011 if (field_length .lt. 0)
then
2012 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
2014 do n = field_length + 1, length
2016 if (field_index .le. 0)
then
2017 write (str_error,*)
' with index = ', n
2018 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
2023 if (field_index .le. 0)
then
2024 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name))
2028 if (field_index .le. 0)
then
2029 write (str_error,*)
' with index = ', n
2030 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
2041if (good_name_list_use .ne.
' ')
then
2044 caller = caller_str) .le. 0
2048 if (add_name .and.
fm_exists(name))
then
2049 if (
fm_new_value(good_name_list_use, name, append = .true., create = .true.) .le. 0)
then
2050 call mpp_error(fatal, trim(error_header) // &
2051 ' Could not add ' // trim(name) //
' to "' // trim(good_name_list_use) //
'" list')
2064 no_overwrite, good_name_list)
2072character(len=*),
intent(in) :: name
2073integer,
intent(in) :: ival
2074character(len=*),
intent(in),
optional :: caller
2075integer,
intent(in),
optional :: index
2076logical,
intent(in),
optional :: append
2077logical,
intent(in),
optional :: no_create
2078logical,
intent(in),
optional :: no_overwrite
2079character(len=*),
intent(in),
optional :: good_name_list
2085character(len=48),
parameter :: sub_name =
'fm_util_set_value_integer'
2091character(len=256) :: error_header
2092character(len=256) :: warn_header
2093character(len=256) :: note_header
2094character(len=128) :: caller_str
2095character(len=32) :: str_error
2096integer :: field_index
2097logical :: no_overwrite_use
2098integer :: field_length
2099character(len=FMS_PATH_LEN) :: good_name_list_use
2107if (
present(caller))
then
2108 caller_str =
'[' // trim(caller) //
']'
2110 caller_str = fm_util_default_caller
2113error_header =
'==>Error from ' // trim(mod_name) // &
2114 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2115warn_header =
'==>Warning from ' // trim(mod_name) // &
2116 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2117note_header =
'==>Note from ' // trim(mod_name) // &
2118 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2124if (name .eq.
' ')
then
2125 call mpp_error(fatal, trim(error_header) //
' Empty name given')
2132if (
present(index) .and.
present(append))
then
2133 call mpp_error(fatal, trim(error_header) //
' Append and index both given as arguments')
2140if (
present(no_overwrite))
then
2141 no_overwrite_use = no_overwrite
2143 no_overwrite_use = default_no_overwrite
2150if (
present(good_name_list))
then
2151 good_name_list_use = good_name_list
2153 good_name_list_use = default_good_name_list
2156if (
present(no_create))
then
2157 create = .not. no_create
2158 if (no_create .and. (
present(append) .or.
present(index)))
then
2159 call mpp_error(fatal, trim(error_header) // &
2160 &
' append or index are present when no_create is true for ' // trim(name))
2166if (
present(index))
then
2169 if (field_length .lt. 0)
then
2170 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
2172 if (.not. (no_overwrite_use .and. field_length .ge. index))
then
2174 if (field_index .le. 0)
then
2175 write (str_error,*)
' with index = ', index
2176 call mpp_error(fatal, trim(error_header) //
' Problem overwriting ' // trim(name) // trim(str_error))
2181 if (field_index .le. 0)
then
2182 write (str_error,*)
' with index = ', index
2183 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
2186elseif (
present(append))
then
2187 field_index =
fm_new_value(name, ival, append = append)
2188 if (field_index .le. 0)
then
2189 write (str_error,*)
' with append = ', append
2190 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
2194 if (.not. no_overwrite_use)
then
2196 if (field_index .le. 0)
then
2197 call mpp_error(fatal, trim(error_header) //
' Problem overwriting ' // trim(name))
2200 elseif (create)
then
2202 if (field_index .le. 0)
then
2203 call mpp_error(fatal, trim(error_header) //
' Problem creating ' // trim(name))
2213if (good_name_list_use .ne.
' ')
then
2216 caller = caller_str) .le. 0
2220 if (add_name .and.
fm_exists(name))
then
2221 if (
fm_new_value(good_name_list_use, name, append = .true., create = .true.) .le. 0)
then
2222 call mpp_error(fatal, trim(error_header) // &
2223 ' Could not add ' // trim(name) //
' to "' // trim(good_name_list_use) //
'" list')
2236 no_overwrite, good_name_list)
2244character(len=*),
intent(in) :: name
2245logical,
intent(in) :: lval
2246character(len=*),
intent(in),
optional :: caller
2247integer,
intent(in),
optional :: index
2248logical,
intent(in),
optional :: append
2249logical,
intent(in),
optional :: no_create
2250logical,
intent(in),
optional :: no_overwrite
2251character(len=*),
intent(in),
optional :: good_name_list
2257character(len=48),
parameter :: sub_name =
'fm_util_set_value_logical'
2263character(len=256) :: error_header
2264character(len=256) :: warn_header
2265character(len=256) :: note_header
2266character(len=128) :: caller_str
2267character(len=32) :: str_error
2268integer :: field_index
2269logical :: no_overwrite_use
2270integer :: field_length
2271character(len=FMS_PATH_LEN) :: good_name_list_use
2279if (
present(caller))
then
2280 caller_str =
'[' // trim(caller) //
']'
2282 caller_str = fm_util_default_caller
2285error_header =
'==>Error from ' // trim(mod_name) // &
2286 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2287warn_header =
'==>Warning from ' // trim(mod_name) // &
2288 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2289note_header =
'==>Note from ' // trim(mod_name) // &
2290 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2296if (name .eq.
' ')
then
2297 call mpp_error(fatal, trim(error_header) //
' Empty name given')
2304if (
present(index) .and.
present(append))
then
2305 call mpp_error(fatal, trim(error_header) //
' Append and index both given as arguments')
2312if (
present(no_overwrite))
then
2313 no_overwrite_use = no_overwrite
2315 no_overwrite_use = default_no_overwrite
2322if (
present(good_name_list))
then
2323 good_name_list_use = good_name_list
2325 good_name_list_use = default_good_name_list
2328if (
present(no_create))
then
2329 create = .not. no_create
2330 if (no_create .and. (
present(append) .or.
present(index)))
then
2331 call mpp_error(fatal, trim(error_header) // &
2332 &
' append or index are present when no_create is true for ' // trim(name))
2338if (
present(index))
then
2341 if (field_length .lt. 0)
then
2342 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
2344 if (.not. (no_overwrite_use .and. field_length .ge. index))
then
2346 if (field_index .le. 0)
then
2347 write (str_error,*)
' with index = ', index
2348 call mpp_error(fatal, trim(error_header) //
' Problem overwriting ' // trim(name) // trim(str_error))
2353 if (field_index .le. 0)
then
2354 write (str_error,*)
' with index = ', index
2355 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
2358elseif (
present(append))
then
2359 field_index =
fm_new_value(name, lval, append = append)
2360 if (field_index .le. 0)
then
2361 write (str_error,*)
' with append = ', append
2362 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
2366 if (.not. no_overwrite_use)
then
2368 if (field_index .le. 0)
then
2369 call mpp_error(fatal, trim(error_header) //
' Problem overwriting ' // trim(name))
2372 elseif (create)
then
2374 if (field_index .le. 0)
then
2375 call mpp_error(fatal, trim(error_header) //
' Problem creating ' // trim(name))
2385if (good_name_list_use .ne.
' ')
then
2388 caller = caller_str) .le. 0
2392 if (add_name .and.
fm_exists(name))
then
2393 if (
fm_new_value(good_name_list_use, name, append = .true., create = .true.) .le. 0)
then
2394 call mpp_error(fatal, trim(error_header) // &
2395 ' Could not add ' // trim(name) //
' to "' // trim(good_name_list_use) //
'" list')
2407 no_overwrite, good_name_list)
2415character(len=*),
intent(in) :: name
2416character(len=*),
intent(in) :: sval
2417character(len=*),
intent(in),
optional :: caller
2418integer,
intent(in),
optional :: index
2419logical,
intent(in),
optional :: append
2420logical,
intent(in),
optional :: no_create
2421logical,
intent(in),
optional :: no_overwrite
2422character(len=*),
intent(in),
optional :: good_name_list
2428character(len=48),
parameter :: sub_name =
'fm_util_set_value_string'
2434character(len=256) :: error_header
2435character(len=256) :: warn_header
2436character(len=256) :: note_header
2437character(len=128) :: caller_str
2438character(len=32) :: str_error
2439integer :: field_index
2440logical :: no_overwrite_use
2441integer :: field_length
2442character(len=FMS_PATH_LEN) :: good_name_list_use
2450if (
present(caller))
then
2451 caller_str =
'[' // trim(caller) //
']'
2453 caller_str = fm_util_default_caller
2456error_header =
'==>Error from ' // trim(mod_name) // &
2457 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2458warn_header =
'==>Warning from ' // trim(mod_name) // &
2459 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2460note_header =
'==>Note from ' // trim(mod_name) // &
2461 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2467if (name .eq.
' ')
then
2468 call mpp_error(fatal, trim(error_header) //
' Empty name given')
2475if (
present(index) .and.
present(append))
then
2476 call mpp_error(fatal, trim(error_header) //
' Append and index both given as arguments')
2483if (
present(no_overwrite))
then
2484 no_overwrite_use = no_overwrite
2486 no_overwrite_use = default_no_overwrite
2493if (
present(good_name_list))
then
2494 good_name_list_use = good_name_list
2496 good_name_list_use = default_good_name_list
2499if (
present(no_create))
then
2500 create = .not. no_create
2501 if (no_create .and. (
present(append) .or.
present(index)))
then
2502 call mpp_error(fatal, trim(error_header) // &
2503 &
' append or index are present when no_create is true for ' // trim(name))
2509if (
present(index))
then
2512 if (field_length .lt. 0)
then
2513 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
2515 if (.not. (no_overwrite_use .and. field_length .ge. index))
then
2517 if (field_index .le. 0)
then
2518 write (str_error,*)
' with index = ', index
2519 call mpp_error(fatal, trim(error_header) //
' Problem overwriting ' // trim(name) // trim(str_error))
2524 if (field_index .le. 0)
then
2525 write (str_error,*)
' with index = ', index
2526 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
2529elseif (
present(append))
then
2530 field_index =
fm_new_value(name, sval, append = append)
2531 if (field_index .le. 0)
then
2532 write (str_error,*)
' with append = ', append
2533 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
2537 if (.not. no_overwrite_use)
then
2539 if (field_index .le. 0)
then
2540 call mpp_error(fatal, trim(error_header) //
' Problem overwriting ' // trim(name))
2543 elseif (create)
then
2545 if (field_index .le. 0)
then
2546 call mpp_error(fatal, trim(error_header) //
' Problem creating ' // trim(name))
2556if (good_name_list_use .ne.
' ')
then
2559 caller = caller_str) .le. 0
2563 if (add_name .and.
fm_exists(name))
then
2564 if (
fm_new_value(good_name_list_use, name, append = .true., create = .true.) .le. 0)
then
2565 call mpp_error(fatal, trim(error_header) // &
2566 ' Could not add ' // trim(name) //
' to "' // trim(good_name_list_use) //
'" list')
2586character(len=*),
intent(in) :: path
2587character(len=*),
intent(in) :: name
2588character(len=*),
intent(in),
optional :: caller
2589logical,
intent(in),
optional :: no_overwrite
2590logical,
intent(in),
optional :: check
2596character(len=48),
parameter :: sub_name =
'fm_util_start_namelist'
2602integer :: namelist_index
2603character(len=FMS_PATH_LEN) :: path_name
2604character(len=256) :: error_header
2605character(len=256) :: warn_header
2606character(len=256) :: note_header
2607character(len=128) :: caller_str
2616if (
present(caller))
then
2617 caller_str =
'[' // trim(caller) //
']'
2619 caller_str = fm_util_default_caller
2622error_header =
'==>Error from ' // trim(mod_name) // &
2623 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2624warn_header =
'==>Warning from ' // trim(mod_name) // &
2625 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2626note_header =
'==>Note from ' // trim(mod_name) // &
2627 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2633if (name .eq.
' ')
then
2634 call mpp_error(fatal, trim(error_header) //
' Empty name given')
2641if (path .eq.
' ')
then
2644 path_name = trim(path) //
'/' // name
2653if (
present(caller))
then
2663if (
present(no_overwrite))
then
2673if (
present(check))
then
2688write (out_unit,*) trim(note_header),
' Processing namelist ', trim(path_name)
2694namelist_index =
fm_get_index(
'/ocean_mod/namelists/' // trim(path_name))
2695if (namelist_index .gt. 0)
then
2705 namelist_index =
fm_new_list(
'/ocean_mod/namelists/' // trim(path_name), create = .true.)
2706 if (namelist_index .le. 0)
then
2707 call mpp_error(fatal, trim(error_header) //
' Could not set namelist ' // trim(path_name))
2717if (
fm_new_value(
'/ocean_mod/GOOD/namelists/' // trim(path) //
'/good_values', &
2718 name, append = .true., create = .true.) .le. 0)
then
2719 call mpp_error(fatal, trim(error_header) // &
2720 ' Could not add ' // trim(name) //
' to "' // trim(path) //
'/good_values" list')
2728if (save_current_list .eq.
' ')
then
2729 call mpp_error(fatal, trim(error_header) //
' Could not get the current list')
2732if (.not.
fm_change_list(
'/ocean_mod/namelists/' // trim(path_name)))
then
2733 call mpp_error(fatal, trim(error_header) //
' Could not change to the namelist ' // trim(path_name))
2751character(len=*),
intent(in) :: path
2752character(len=*),
intent(in) :: name
2753character(len=*),
intent(in),
optional :: caller
2754logical,
intent(in),
optional :: check
2760character(len=48),
parameter :: sub_name =
'fm_util_end_namelist'
2766character(len=fm_string_len),
pointer,
dimension(:) :: good_list => null()
2767character(len=FMS_PATH_LEN) :: path_name
2768character(len=256) :: error_header
2769character(len=256) :: warn_header
2770character(len=256) :: note_header
2771character(len=128) :: caller_str
2777if (
present(caller))
then
2778 caller_str =
'[' // trim(caller) //
']'
2780 caller_str = fm_util_default_caller
2783error_header =
'==>Error from ' // trim(mod_name) // &
2784 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2785warn_header =
'==>Warning from ' // trim(mod_name) // &
2786 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2787note_header =
'==>Note from ' // trim(mod_name) // &
2788 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
2794if (name .eq.
' ')
then
2795 call mpp_error(fatal, trim(error_header) //
' Empty name given')
2803if (path .ne. save_path)
then
2804 call mpp_error(fatal, trim(error_header) // &
2805 &
' Path "' // trim(path) //
'" does not match saved path "' // trim(save_path) //
'"')
2806elseif (name .ne. save_name)
then
2807 call mpp_error(fatal, trim(error_header) // &
2808 &
' Name "' // trim(name) //
'" does not match saved name "' // trim(save_name) //
'"')
2815if (path .eq.
' ')
then
2818 path_name = trim(path) //
'/' // name
2827if (
present(check))
then
2829 if (caller_str .eq.
' ')
then
2830 caller_str = trim(mod_name) //
'(' // trim(sub_name) //
')'
2833 caller = trim(mod_name) //
'(' // trim(sub_name) //
')')
2834 if (
associated(good_list))
then
2836 deallocate(good_list)
2838 call mpp_error(fatal, trim(error_header) //
' Empty "' // trim(path_name) //
'" list')
2847if (save_current_list .ne.
' ')
then
2849 call mpp_error(fatal, trim(error_header) //
' Could not change to the saved list: ' // trim(save_current_list))
2852save_current_list =
' '
2876#include "fm_util_r4.fh"
2877#include "fm_util_r8.fh"
2879end module fm_util_mod
character(len=fms_path_len) function, public fm_get_current_list()
A function to return the full path of the current list.
integer function, public fm_get_index(name)
A function to return the index of a named field.
character(len=8) function, public fm_get_type(name)
A function to return the type of the named field.
integer, parameter, public fm_string_len
The length of a character string representing character values for the field.
logical function, public fm_dump_list(name, recursive, unit)
A function to list properties associated with a field.
logical function, public fm_change_list(name)
Change the current list. Return true on success, false otherwise.
integer, parameter, public fm_field_name_len
The length of a character string representing the field name.
integer, parameter, public fm_type_name_len
The length of a character string representing the various types that the values of the field can take...
integer function, public fm_new_list(name, create, keep)
A function to create a new list.
logical function, public fm_exists(name)
A function to test whether a named field exists.
integer function, public fm_get_length(name)
A function to return how many elements are contained within the named list or entry.
An overloaded function to find and extract a value for a named field.
A function for looping over a list.
An overloaded function to assign a value to a field.
integer function, public fm_util_get_index_string(name, string, caller)
Get the index of an element of a string in the Field Manager tree.
subroutine, public fm_util_set_value_integer_array(name, ival, length, caller, no_overwrite, good_name_list)
Set an integer array in the Field Manager tree.
integer function, public fm_util_get_length(name, caller)
Get the length of an element of the Field Manager tree.
subroutine, public fm_util_set_good_name_list(good_name_list)
Set the default value for the optional "good_name_list" variable used in many of these subroutines.
integer function, public fm_util_get_index_list(name, caller)
Get the length of an element of the Field Manager tree.
real(r8_kind) function, dimension(:), pointer, public fm_util_get_real_array(name, caller)
Get a real value from the Field Manager tree.
subroutine, public fm_util_set_value_integer(name, ival, caller, index, append, no_create, no_overwrite, good_name_list)
Set an integer value in the Field Manager tree.
subroutine, public fm_util_reset_good_name_list
Reset the default value for the optional "good_name_list" variable used in many of these subroutines ...
character(len=fm_string_len) function, public fm_util_get_string(name, caller, index, default_value, scalar)
Get a string value from the Field Manager tree.
subroutine, public fm_util_start_namelist(path, name, caller, no_overwrite, check)
Start processing a namelist.
subroutine, public fm_util_set_value_logical_array(name, lval, length, caller, no_overwrite, good_name_list)
Set a logical array in the Field Manager tree.
subroutine, public fm_util_set_value_string_array(name, sval, length, caller, no_overwrite, good_name_list)
Set a string array in the Field Manager tree.
subroutine, public fm_util_check_for_bad_fields(list, good_fields, caller)
Check for unrecognized fields in a list.
logical function, dimension(:), pointer, public fm_util_get_logical_array(name, caller)
Get a logical value from the Field Manager tree.
subroutine, public fm_util_set_caller(caller)
Set the default value for the optional "caller" variable used in many of these subroutines....
subroutine, public fm_util_end_namelist(path, name, caller, check)
Finish up processing a namelist.
real(r8_kind) function, public fm_util_get_real(name, caller, index, default_value, scalar)
Get a real value from the Field Manager tree.
subroutine, public fm_util_set_value_logical(name, lval, caller, index, append, no_create, no_overwrite, good_name_list)
Set a logical value in the Field Manager tree.
integer function, public fm_util_get_integer(name, caller, index, default_value, scalar)
Get an integer value from the Field Manager tree.
subroutine, public fm_util_reset_caller
Reset the default value for the optional "caller" variable used in many of these subroutines to blank...
integer function, dimension(:), pointer, public fm_util_get_integer_array(name, caller)
Get an integer value from the Field Manager tree.
logical function, public fm_util_get_logical(name, caller, index, default_value, scalar)
Get a logical value from the Field Manager tree.
subroutine, public fm_util_reset_no_overwrite
Reset the default value for the optional "no_overwrite" variable used in some of these subroutines to...
subroutine, public fm_util_set_value_string(name, sval, caller, index, append, no_create, no_overwrite, good_name_list)
Set a string value in the Field Manager tree.
character(len=fm_string_len) function, dimension(:), pointer, public fm_util_get_string_array(name, caller)
Get a string value from the Field Manager tree.
subroutine, public fm_util_set_no_overwrite(no_overwrite)
Set the default value for the optional "no_overwrite" variable used in some of these subroutines.