29 CHARACTER(15) :: start
31 CHARACTER(1) :: outffile
38 CHARACTER(13) :: water_levels
39 CHARACTER(13) :: currents
40 CHARACTER(13) :: winds
41 CHARACTER(13) :: atm_momentum
42 CHARACTER(13) :: air_density
43 CHARACTER(13) :: ice_conc
44 CHARACTER(13) :: ice_param1
45 CHARACTER(13) :: ice_param2
46 CHARACTER(13) :: ice_param3
47 CHARACTER(13) :: ice_param4
48 CHARACTER(13) :: ice_param5
49 CHARACTER(13) :: mud_density
50 CHARACTER(13) :: mud_thickness
51 CHARACTER(13) :: mud_viscosity
56 CHARACTER(13) :: spec1d
57 CHARACTER(13) :: spec2d
67 CHARACTER(1024) :: list
90 CHARACTER(1024) :: sent
91 CHARACTER(1024) :: received
97 CHARACTER(1024) :: extra
115 CHARACTER(15) :: start
116 CHARACTER(15) :: stride
117 CHARACTER(15) :: stop
118 CHARACTER(15) :: outffile
154 CHARACTER(15) :: name
155 CHARACTER(15) :: date
171 SUBROUTINE w3nmlshel (MPI_COMM, NDSI, INFILE, NML_DOMAIN, &
172 NML_INPUT, NML_OUTPUT_TYPE, NML_OUTPUT_DATE, &
173 NML_HOMOG_COUNT, NML_HOMOG_INPUT, IERR)
260 INTEGER,
INTENT(IN) :: MPI_COMM, NDSI
261 CHARACTER*(*),
INTENT(IN) :: INFILE
268 INTEGER,
INTENT(OUT) :: IERR
275 INTEGER,
SAVE :: IENT = 0
280 CALL strace (ient,
'W3NMLSHEL')
290 IF ( nmplog .EQ. improc )
THEN
292 OPEN (
ndsn,
file=trim(infile)//
'.log', form=
'formatted', iostat=ierr)
294 WRITE (mdse,
'(A)')
'ERROR: open full nml file '//trim(infile)//
'.log failed'
300 open (ndsi,
file=trim(infile), form=
'formatted', status=
'old', iostat=ierr)
302 WRITE (mdse,
'(A)')
'ERROR: open input file '//trim(infile)//
' failed'
328 IF ( nmplog .EQ. improc )
CLOSE (
ndsn)
405 INTEGER,
INTENT(IN) :: NDSI
411 namelist /domain_nml/ domain
413 INTEGER,
SAVE :: IENT = 0
418 CALL strace (ient,
'READ_DOMAIN_NML')
423 domain%START =
'19680606 000000'
424 domain%STOP =
'19680607 000000'
428 READ (ndsi, nml=domain_nml, iostat=ierr, iomsg=
msg)
430 WRITE (
mdse,
'(A,/A)') &
431 'ERROR: READ_DOMAIN_NML: namelist read error', &
437 IF (domain%IOSTYP.LT.0.OR.domain%IOSTYP.GT.3)
THEN
438 WRITE (
mdse,
'(A,I3)')
'ERROR: BAD IOSTYP INPUT: ',domain%IOSTYP
523 INTEGER,
INTENT(IN) :: NDSI
529 namelist /input_nml/ input
531 INTEGER,
SAVE :: IENT = 0
536 CALL strace (ient,
'READ_INPUT_NML')
541 input%FORCING%WATER_LEVELS =
'F'
542 input%FORCING%CURRENTS =
'F'
543 input%FORCING%WINDS =
'F'
544 input%FORCING%ATM_MOMENTUM =
'F'
545 input%FORCING%AIR_DENSITY =
'F'
546 input%FORCING%ICE_CONC =
'F'
547 input%FORCING%ICE_PARAM1 =
'F'
548 input%FORCING%ICE_PARAM2 =
'F'
549 input%FORCING%ICE_PARAM3 =
'F'
550 input%FORCING%ICE_PARAM4 =
'F'
551 input%FORCING%ICE_PARAM5 =
'F'
552 input%FORCING%MUD_DENSITY =
'F'
553 input%FORCING%MUD_THICKNESS =
'F'
554 input%FORCING%MUD_VISCOSITY =
'F'
555 input%ASSIM%MEAN =
'F'
556 input%ASSIM%SPEC1D =
'F'
557 input%ASSIM%SPEC2D =
'F'
561 READ (ndsi, nml=input_nml, iostat=ierr, iomsg=
msg)
563 WRITE (
mdse,
'(A,/A)') &
564 'ERROR: READ_INPUT_NML: namelist read error', &
649 INTEGER,
INTENT(IN) :: NDSI
655 namelist /output_type_nml/
TYPE
657 INTEGER,
SAVE :: IENT = 0
662 CALL strace (ient,
'READ_OUTPUT_TYPE_NML')
666 type%FIELD%LIST =
'unset'
667 type%POINT%FILE =
'points.list'
668 type%TRACK%FORMAT = .true.
669 type%PARTITION%X0 = 0
670 type%PARTITION%XN = 0
671 type%PARTITION%NX = 0
672 type%PARTITION%Y0 = 0
673 type%PARTITION%YN = 0
674 type%PARTITION%NY = 0
675 type%PARTITION%FORMAT = .true.
677 type%COUPLING%SENT =
'unset'
678 type%COUPLING%RECEIVED =
'unset'
679 type%COUPLING%COUPLET0 = .false.
681 type%RESTART%EXTRA =
'unset'
686 READ (ndsi, nml=output_type_nml, iostat=ierr, iomsg=
msg)
688 WRITE (
mdse,
'(A,/A)') &
689 'ERROR: READ_OUTPUT_TYPE_NML: namelist read error', &
695 nml_output_type =
TYPE
774 INTEGER,
INTENT(IN) :: NDSI
780 namelist /output_date_nml/ date
782 INTEGER,
SAVE :: IENT = 0
787 CALL strace (ient,
'READ_OUTPUT_DATE_NML')
791 date%FIELD%START =
'19680606 000000'
792 date%FIELD%STRIDE =
'0'
793 date%FIELD%STOP =
'19680607 000000'
794 date%FIELD%OUTFFILE =
'0'
795 date%POINT%OUTFFILE =
'0'
796 date%POINT%START =
'19680606 000000'
797 date%POINT%STRIDE =
'0'
798 date%POINT%STOP =
'19680607 000000'
799 date%TRACK%START =
'19680606 000000'
800 date%TRACK%STRIDE =
'0'
801 date%TRACK%STOP =
'19680607 000000'
802 date%RESTART%START =
'19680606 000000'
803 date%RESTART%STRIDE =
'0'
804 date%RESTART%STOP =
'19680607 000000'
805 date%RESTART2%START =
'19680606 000000'
806 date%RESTART2%STRIDE =
'0'
807 date%RESTART2%STOP =
'19680607 000000'
808 date%BOUNDARY%START =
'19680606 000000'
809 date%BOUNDARY%STRIDE =
'0'
810 date%BOUNDARY%STOP =
'19680607 000000'
811 date%PARTITION%START =
'19680606 000000'
812 date%PARTITION%STRIDE =
'0'
813 date%PARTITION%STOP =
'19680607 000000'
814 date%COUPLING%START =
'19680606 000000'
815 date%COUPLING%STRIDE =
'0'
816 date%COUPLING%STOP =
'19680607 000000'
821 READ (ndsi, nml=output_date_nml, iostat=ierr, iomsg=
msg)
823 WRITE (
mdse,
'(A,/A)') &
824 'ERROR: READ_OUTPUT_DATE_NML: namelist read error', &
830 nml_output_date = date
910 INTEGER,
INTENT(IN) :: NDSI
917 namelist /homog_count_nml/ homog_count
919 namelist /homog_input_nml/ homog_input
921 INTEGER,
SAVE :: IENT = 0
926 CALL strace (ient,
'READ_HOMOGENEOUS_NML')
930 homog_count%N_IC1 = 0
931 homog_count%N_IC2 = 0
932 homog_count%N_IC3 = 0
933 homog_count%N_IC4 = 0
934 homog_count%N_IC5 = 0
935 homog_count%N_MDN = 0
936 homog_count%N_MTH = 0
937 homog_count%N_MVS = 0
938 homog_count%N_LEV = 0
939 homog_count%N_CUR = 0
940 homog_count%N_WND = 0
941 homog_count%N_ICE = 0
942 homog_count%N_TAU = 0
943 homog_count%N_RHO = 0
944 homog_count%N_MOV = 0
945 homog_count%N_TOT = 0
950 READ (ndsi, nml=homog_count_nml, iostat=ierr, iomsg=
msg)
952 WRITE (
mdse,
'(A,/A)') &
953 'ERROR: READ_HOMOGENEOUS_NML: namelist HOMOG_COUNT read error', &
959 homog_count%N_TOT = homog_count%N_IC1 + homog_count%N_IC2 + homog_count%N_IC3 + homog_count%N_IC4 + homog_count%N_IC5 + &
960 homog_count%N_MDN + homog_count%N_MTH + homog_count%N_MVS + homog_count%N_LEV + homog_count%N_CUR + &
961 homog_count%N_WND + homog_count%N_ICE + homog_count%N_TAU + homog_count%N_RHO + homog_count%N_MOV
962 ALLOCATE(homog_input(homog_count%N_TOT))
963 ALLOCATE(nml_homog_input(homog_count%N_TOT))
966 IF (homog_count%N_TOT .NE. 0 )
THEN
967 DO i=1,homog_count%N_TOT
968 homog_input(i)%NAME =
'unset'
969 homog_input(i)%DATE =
'19680606 000000'
970 homog_input(i)%VALUE1 = 0.
971 homog_input(i)%VALUE2 = 0.
972 homog_input(i)%VALUE3 = 0.
978 READ (ndsi, nml=homog_input_nml, iostat=ierr, iomsg=
msg)
980 WRITE (
mdse,
'(A,/A)') &
981 'ERROR: READ_HOMOGENEOUS_NML: namelist HOMOG_INPUT_NML read error', &
987 nml_homog_count = homog_count
988 nml_homog_input = homog_input
1069 INTEGER,
SAVE :: IENT = 0
1073 CALL strace (ient,
'REPORT_DOMAIN_NML')
1076 WRITE (
msg,
'(A)')
'DOMAIN % '
1078 WRITE (
ndsn,11) trim(
msg),
'IOSTYP = ', nml_domain%IOSTYP
1079 WRITE (
ndsn,10) trim(
msg),
'START = ', trim(nml_domain%START)
1080 WRITE (
ndsn,10) trim(
msg),
'STOP = ', trim(nml_domain%STOP)
1082 10
FORMAT (a,2x,a,a)
1083 11
FORMAT (a,2x,a,i8)
1084 13
FORMAT (a,2x,a,l1)
1164 INTEGER,
SAVE :: IENT = 0
1168 CALL strace (ient,
'REPORT_INPUT_NML')
1171 WRITE (
msg,
'(A)')
'INPUT GRID % :'
1173 WRITE (
ndsn,10) trim(
msg),
'FORCING % WATER_LEVELS = ', nml_input%FORCING%WATER_LEVELS
1174 WRITE (
ndsn,10) trim(
msg),
'FORCING % CURRENTS = ', nml_input%FORCING%CURRENTS
1175 WRITE (
ndsn,10) trim(
msg),
'FORCING % WINDS = ', nml_input%FORCING%WINDS
1176 WRITE (
ndsn,10) trim(
msg),
'FORCING % ATM_MOMENTUM = ', nml_input%FORCING%ATM_MOMENTUM
1177 WRITE (
ndsn,10) trim(
msg),
'FORCING % AIR_DENSITY = ', nml_input%FORCING%AIR_DENSITY
1178 WRITE (
ndsn,10) trim(
msg),
'FORCING % ICE_CONC = ', nml_input%FORCING%ICE_CONC
1179 WRITE (
ndsn,10) trim(
msg),
'FORCING % ICE_PARAM1 = ', nml_input%FORCING%ICE_PARAM1
1180 WRITE (
ndsn,10) trim(
msg),
'FORCING % ICE_PARAM2 = ', nml_input%FORCING%ICE_PARAM2
1181 WRITE (
ndsn,10) trim(
msg),
'FORCING % ICE_PARAM3 = ', nml_input%FORCING%ICE_PARAM3
1182 WRITE (
ndsn,10) trim(
msg),
'FORCING % ICE_PARAM4 = ', nml_input%FORCING%ICE_PARAM4
1183 WRITE (
ndsn,10) trim(
msg),
'FORCING % ICE_PARAM5 = ', nml_input%FORCING%ICE_PARAM5
1184 WRITE (
ndsn,10) trim(
msg),
'FORCING % MUD_DENSITY = ', nml_input%FORCING%MUD_DENSITY
1185 WRITE (
ndsn,10) trim(
msg),
'FORCING % MUD_THICKNESS = ', nml_input%FORCING%MUD_THICKNESS
1186 WRITE (
ndsn,10) trim(
msg),
'FORCING % MUD_VISCOSITY = ', nml_input%FORCING%MUD_VISCOSITY
1187 WRITE (
ndsn,10) trim(
msg),
'ASSIM % MEAN = ', nml_input%ASSIM%MEAN
1188 WRITE (
ndsn,10) trim(
msg),
'ASSIM % SPEC1D = ', nml_input%ASSIM%SPEC1D
1189 WRITE (
ndsn,10) trim(
msg),
'ASSIM % SPEC2D = ', nml_input%ASSIM%SPEC2D
1192 10
FORMAT (a,2x,a,a)
1193 13
FORMAT (a,2x,a,l1)
1273 INTEGER,
SAVE :: IENT = 0
1277 CALL strace (ient,
'REPORT_OUTPUT_TYPE_NML')
1280 WRITE (
msg,
'(A)')
'OUTPUT TYPE % '
1282 WRITE (
ndsn,10) trim(
msg),
'FIELD % LIST = ', trim(nml_output_type%FIELD%LIST)
1283 WRITE (
ndsn,10) trim(
msg),
'POINT % FILE = ', trim(nml_output_type%POINT%FILE)
1284 WRITE (
ndsn,13) trim(
msg),
'TRACK % FORMAT = ', nml_output_type%TRACK%FORMAT
1285 WRITE (
ndsn,11) trim(
msg),
'PARTITION % X0 = ', nml_output_type%PARTITION%X0
1286 WRITE (
ndsn,11) trim(
msg),
'PARTITION % XN = ', nml_output_type%PARTITION%XN
1287 WRITE (
ndsn,11) trim(
msg),
'PARTITION % NX = ', nml_output_type%PARTITION%NX
1288 WRITE (
ndsn,11) trim(
msg),
'PARTITION % Y0 = ', nml_output_type%PARTITION%Y0
1289 WRITE (
ndsn,11) trim(
msg),
'PARTITION % YN = ', nml_output_type%PARTITION%YN
1290 WRITE (
ndsn,11) trim(
msg),
'PARTITION % NY = ', nml_output_type%PARTITION%NY
1291 WRITE (
ndsn,13) trim(
msg),
'PARTITION % FORMAT = ', nml_output_type%PARTITION%FORMAT
1293 WRITE (
ndsn,10) trim(
msg),
'COUPLING % SENT = ', trim(nml_output_type%COUPLING%SENT)
1294 WRITE (
ndsn,10) trim(
msg),
'COUPLING % RECEIVED = ', trim(nml_output_type%COUPLING%RECEIVED)
1295 WRITE (
ndsn,13) trim(
msg),
'COUPLING % COUPLET0 = ', nml_output_type%COUPLING%COUPLET0
1297 WRITE (
ndsn,10) trim(
msg),
'RESTART % EXTRA = ', trim(nml_output_type%RESTART%EXTRA)
1299 10
FORMAT (a,2x,a,a)
1300 11
FORMAT (a,2x,a,i8)
1301 13
FORMAT (a,2x,a,l1)
1381 INTEGER,
SAVE :: IENT = 0
1385 CALL strace (ient,
'REPORT_OUTPUT_DATE_NML')
1388 WRITE (
msg,
'(A)')
'OUTPUT DATE MODEL GRID % '
1390 WRITE (
ndsn,10) trim(
msg),
'FIELD % START = ', trim(nml_output_date%FIELD%START)
1391 WRITE (
ndsn,10) trim(
msg),
'FIELD % STRIDE = ', trim(nml_output_date%FIELD%STRIDE)
1392 WRITE (
ndsn,10) trim(
msg),
'FIELD % STOP = ', trim(nml_output_date%FIELD%STOP)
1393 WRITE (
ndsn,10) trim(
msg),
'POINT % START = ', trim(nml_output_date%POINT%START)
1394 WRITE (
ndsn,10) trim(
msg),
'POINT % STRIDE = ', trim(nml_output_date%POINT%STRIDE)
1395 WRITE (
ndsn,10) trim(
msg),
'POINT % STOP = ', trim(nml_output_date%POINT%STOP)
1396 WRITE (
ndsn,10) trim(
msg),
'TRACK % START = ', trim(nml_output_date%TRACK%START)
1397 WRITE (
ndsn,10) trim(
msg),
'TRACK % STRIDE = ', trim(nml_output_date%TRACK%STRIDE)
1398 WRITE (
ndsn,10) trim(
msg),
'TRACK % STOP = ', trim(nml_output_date%TRACK%STOP)
1399 WRITE (
ndsn,10) trim(
msg),
'RESTART % START = ', trim(nml_output_date%RESTART%START)
1400 WRITE (
ndsn,10) trim(
msg),
'RESTART % STRIDE = ', trim(nml_output_date%RESTART%STRIDE)
1401 WRITE (
ndsn,10) trim(
msg),
'RESTART % STOP = ', trim(nml_output_date%RESTART%STOP)
1402 WRITE (
ndsn,10) trim(
msg),
'RESTART2 % START = ', trim(nml_output_date%RESTART2%START)
1403 WRITE (
ndsn,10) trim(
msg),
'RESTART2 % STRIDE = ', trim(nml_output_date%RESTART2%STRIDE)
1404 WRITE (
ndsn,10) trim(
msg),
'RESTART2 % STOP = ', trim(nml_output_date%RESTART2%STOP)
1405 WRITE (
ndsn,10) trim(
msg),
'BOUNDARY % START = ', trim(nml_output_date%BOUNDARY%START)
1406 WRITE (
ndsn,10) trim(
msg),
'BOUNDARY % STRIDE = ', trim(nml_output_date%BOUNDARY%STRIDE)
1407 WRITE (
ndsn,10) trim(
msg),
'BOUNDARY % STOP = ', trim(nml_output_date%BOUNDARY%STOP)
1408 WRITE (
ndsn,10) trim(
msg),
'PARTITION % START = ', trim(nml_output_date%PARTITION%START)
1409 WRITE (
ndsn,10) trim(
msg),
'PARTITION % STRIDE = ', trim(nml_output_date%PARTITION%STRIDE)
1410 WRITE (
ndsn,10) trim(
msg),
'PARTITION % STOP = ', trim(nml_output_date%PARTITION%STOP)
1412 WRITE (
ndsn,10) trim(
msg),
'COUPLING % START = ', trim(nml_output_date%COUPLING%START)
1413 WRITE (
ndsn,10) trim(
msg),
'COUPLING % STRIDE = ', trim(nml_output_date%COUPLING%STRIDE)
1414 WRITE (
ndsn,10) trim(
msg),
'COUPLING % STOP = ', trim(nml_output_date%COUPLING%STOP)
1418 10
FORMAT (a,2x,a,a)
1501 INTEGER,
SAVE :: IENT = 0
1505 CALL strace (ient,
'REPORT_HOMOGENEOUS_NML')
1508 WRITE (
msg,
'(A)')
'HOMOG_COUNT % '
1510 WRITE (
ndsn,11) trim(
msg),
'N_IC1 = ', nml_homog_count%N_IC1
1511 WRITE (
ndsn,11) trim(
msg),
'N_IC2 = ', nml_homog_count%N_IC2
1512 WRITE (
ndsn,11) trim(
msg),
'N_IC3 = ', nml_homog_count%N_IC3
1513 WRITE (
ndsn,11) trim(
msg),
'N_IC4 = ', nml_homog_count%N_IC4
1514 WRITE (
ndsn,11) trim(
msg),
'N_IC5 = ', nml_homog_count%N_IC5
1515 WRITE (
ndsn,11) trim(
msg),
'N_MDN = ', nml_homog_count%N_MDN
1516 WRITE (
ndsn,11) trim(
msg),
'N_MTH = ', nml_homog_count%N_MTH
1517 WRITE (
ndsn,11) trim(
msg),
'N_MVS = ', nml_homog_count%N_MVS
1518 WRITE (
ndsn,11) trim(
msg),
'N_LEV = ', nml_homog_count%N_LEV
1519 WRITE (
ndsn,11) trim(
msg),
'N_CUR = ', nml_homog_count%N_CUR
1520 WRITE (
ndsn,11) trim(
msg),
'N_WND = ', nml_homog_count%N_WND
1521 WRITE (
ndsn,11) trim(
msg),
'N_ICE = ', nml_homog_count%N_ICE
1522 WRITE (
ndsn,11) trim(
msg),
'N_TAU = ', nml_homog_count%N_TAU
1523 WRITE (
ndsn,11) trim(
msg),
'N_RHO = ', nml_homog_count%N_RHO
1524 WRITE (
ndsn,11) trim(
msg),
'N_MOV = ', nml_homog_count%N_MOV
1526 IF (nml_homog_count%N_TOT .NE. 0)
THEN
1527 DO i=1,nml_homog_count%N_TOT
1528 WRITE (
msg,
'(A,I5,A)')
'HOMOG_INPUT(',i,
') % '
1530 WRITE (
ndsn,10) trim(
msg),
'NAME = ', trim(nml_homog_input(i)%NAME)
1531 WRITE (
ndsn,10) trim(
msg),
'DATE = ', trim(nml_homog_input(i)%DATE)
1532 WRITE (
ndsn,14) trim(
msg),
'VALUE1 = ', nml_homog_input(i)%VALUE1
1533 WRITE (
ndsn,14) trim(
msg),
'VALUE2 = ', nml_homog_input(i)%VALUE2
1534 WRITE (
ndsn,14) trim(
msg),
'VALUE3 = ', nml_homog_input(i)%VALUE3
1540 10
FORMAT (a,2x,a,a)
1541 11
FORMAT (a,2x,a,i8)
1542 14
FORMAT (a,2x,a,f8.2)