File indexing completed on 2025-11-07 06:08:40 UTC
view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
780798f6bd Ed H*0001 #include "MNC_OPTIONS.h"
0002
fd25642e39 Jean*0003
0004
0005
0006
0007
780798f6bd Ed H*0008
e6bb5b2cc3 Ed H*0009
1b5fb69d21 Ed H*0010
780798f6bd Ed H*0011
1b5fb69d21 Ed H*0012
780798f6bd Ed H*0013 SUBROUTINE MNC_READPARMS( myThid )
0014
fd25642e39 Jean*0015
e6bb5b2cc3 Ed H*0016
0017
0018
0019
fd25642e39 Jean*0020
1b5fb69d21 Ed H*0021
680bb8c7cd Jean*0022 IMPLICIT NONE
780798f6bd Ed H*0023 #include "SIZE.h"
07155994b8 Mart*0024 #include "MNC_COMMON.h"
780798f6bd Ed H*0025 #include "EEPARAMS.h"
0026 #include "PARAMS.h"
a30418b6b9 Ed H*0027 #include "MNC_PARAMS.h"
780798f6bd Ed H*0028
1b5fb69d21 Ed H*0029
ae4c29e0db Jean*0030 INTEGER myThid
e6bb5b2cc3 Ed H*0031
780798f6bd Ed H*0032
ae4c29e0db Jean*0033
0034 INTEGER ILNBLNK
0035
1b5fb69d21 Ed H*0036
ae4c29e0db Jean*0037 INTEGER i, nl, ku
0038 CHARACTER*(MAX_LEN_MBUF) data_file
0039 CHARACTER*(MAX_LEN_MBUF) msgBuf
b7411f1a84 Jean*0040
0041 LOGICAL timeave_mnc
ae4c29e0db Jean*0042
85c5caf7c2 Ed H*0043 NAMELIST /MNC_01/
a30418b6b9 Ed H*0044 & mnc_use_indir, mnc_use_outdir, mnc_outdir_date,
0bd3fd8d5f Ed H*0045 & mnc_outdir_num, mnc_use_name_ni0, mnc_echo_gvtypes,
a30418b6b9 Ed H*0046 & pickup_write_mnc, pickup_read_mnc,
fd25642e39 Jean*0047 & timeave_mnc, snapshot_mnc, monitor_mnc, autodiff_mnc,
d1e82389db Jean*0048 & writegrid_mnc, readgrid_mnc,
e6cc87a596 Ed H*0049 & mnc_outdir_str, mnc_indir_str, mnc_max_fsize,
5f4df5533c Ed H*0050 & mnc_filefreq,
0051 & mnc_read_bathy, mnc_read_salt, mnc_read_theta
e6bb5b2cc3 Ed H*0052
ae4c29e0db Jean*0053
0054
0055 IF ( .NOT.useMNC ) THEN
0056
0057 _BEGIN_MASTER(myThid)
0058
0059
0060 CALL PACKAGES_UNUSED_MSG( 'useMNC', ' ', ' ' )
0061 _END_MASTER(myThid)
0062 RETURN
0063 ENDIF
780798f6bd Ed H*0064
fd25642e39 Jean*0065
9d5f109346 Jean*0066
3daafce20b Jean*0067
9d5f109346 Jean*0068 IF ( nThreads.GT.1 ) THEN
eb27f69c85 Jean*0069 _BARRIER
9d5f109346 Jean*0070 _BEGIN_MASTER( myThid )
680bb8c7cd Jean*0071 WRITE(msgBuf,'(2A)') '** WARNING ** MNC_READPARMS: ',
9d5f109346 Jean*0072 & 'useMNC unsafe with multi-threads'
0073 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0074 & SQUEEZE_RIGHT , myThid )
680bb8c7cd Jean*0075 WRITE(msgBuf,'(2A)') '** WARNING ** MNC_READPARMS: ',
9d5f109346 Jean*0076 & 'for now, switch useMNC to FALSE'
0077 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0078 & SQUEEZE_RIGHT , myThid )
0079 useMNC = .FALSE.
0080 _END_MASTER( myThid )
fd25642e39 Jean*0081 _BARRIER
9d5f109346 Jean*0082 RETURN
0083 ENDIF
0084
0085
1a7eca6776 Ed H*0086
0087 DO i = 1,MAX_LEN_FNAM
0088 mnc_outdir_str(i:i) = ' '
0089 mnc_indir_str(i:i) = ' '
0090 ENDDO
0091 mnc_echo_gvtypes = .FALSE.
0092 mnc_use_outdir = .FALSE.
0093 mnc_outdir_str(1:4) = 'mnc_'
0094 mnc_outdir_date = .FALSE.
41ce3f2380 Ed H*0095 mnc_outdir_num = .TRUE.
0bd3fd8d5f Ed H*0096 mnc_use_name_ni0 = .FALSE.
48d40b8916 Jean*0097 pickup_write_mnc = .FALSE.
0098 pickup_read_mnc = .FALSE.
1a7eca6776 Ed H*0099 mnc_use_indir = .FALSE.
0100 mnc_indir_str(1:4) = ' '
4d852c90c8 Jean*0101 monitor_mnc = .TRUE.
0102 timeave_mnc = .TRUE.
0103 snapshot_mnc = .TRUE.
0104 autodiff_mnc = .TRUE.
d1e82389db Jean*0105 writegrid_mnc = .TRUE.
ab11ba1276 Ed H*0106
0107 mnc_max_fsize = 2.1 _d 9
e808c5b132 Ed H*0108 readgrid_mnc = .FALSE.
5f4df5533c Ed H*0109
0110
0111 mnc_read_bathy = .FALSE.
0112 mnc_read_salt = .FALSE.
0113 mnc_read_theta = .FALSE.
1a7eca6776 Ed H*0114
e6cc87a596 Ed H*0115
0116 mnc_filefreq = -1
0117
85c5caf7c2 Ed H*0118
0119 DO i=1,MAX_LEN_MBUF
0120 data_file(i:i) = ' '
0121 ENDDO
0122 WRITE(data_file,'(a)') 'data.mnc'
0123 nl = ILNBLNK(data_file)
0124
7dbabac8cf Ed H*0125 WRITE(msgbuf,'(3a)') ' MNC_READPARMS: opening file ''',
85c5caf7c2 Ed H*0126 & data_file(1:nl), ''''
7dbabac8cf Ed H*0127 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,
ae4c29e0db Jean*0128 & SQUEEZE_RIGHT,myThid)
85c5caf7c2 Ed H*0129
7dbabac8cf Ed H*0130 CALL OPEN_COPY_DATA_FILE(data_file(1:nl),'MNC_READPARMS',
0131 & ku, myThid )
0132 READ(ku,NML=MNC_01)
7a77863887 Mart*0133 #ifdef SINGLE_DISK_IO
7dbabac8cf Ed H*0134 CLOSE(ku)
7a77863887 Mart*0135 #else
0136 CLOSE(ku,STATUS='DELETE')
0137 #endif /* SINGLE_DISK_IO */
fd25642e39 Jean*0138
85c5caf7c2 Ed H*0139 WRITE(msgBuf,'(a)') ' MNC_READPARMS: finished reading data.mnc'
7dbabac8cf Ed H*0140 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,
ae4c29e0db Jean*0141 & SQUEEZE_RIGHT,myThid)
780798f6bd Ed H*0142
b7411f1a84 Jean*0143
0144 IF ( .NOT.timeave_mnc ) THEN
0145 WRITE(msgBuf,'(2A)') 'MNC_READPARMS: "timeave_mnc"',
0146 & ' is no longer allowed in file "data.mnc"'
0147 CALL PRINT_ERROR( msgBuf, myThid )
0148 WRITE(msgBuf,'(2A)') 'MNC_READPARMS: ',
0149 & ' since "pkg/timeave" has been removed.'
0150 CALL PRINT_ERROR( msgBuf, myThid )
0151
0152 STOP 'ABNORMAL END: S/R MNC_READPARMS'
0153 ENDIF
0154
ea44145497 Ed H*0155
0156 IF (pickup_read_mnc) pickup_read_mdsio = .FALSE.
0157
cdf6d093b9 Ed H*0158
ff63a227b0 Ed H*0159
7dbabac8cf Ed H*0160
ff63a227b0 Ed H*0161
7dbabac8cf Ed H*0162
fd25642e39 Jean*0163
ff63a227b0 Ed H*0164
0165
0166
fd25642e39 Jean*0167 IF ( (.NOT. outputTypesInclusive)
cdf6d093b9 Ed H*0168 & .AND. pickup_write_mnc ) pickup_write_mdsio = .FALSE.
fd25642e39 Jean*0169 IF ( (.NOT. outputTypesInclusive)
cdf6d093b9 Ed H*0170 & .AND. snapshot_mnc ) snapshot_mdsio = .FALSE.
fd25642e39 Jean*0171 IF ( (.NOT. outputTypesInclusive)
cdf6d093b9 Ed H*0172 & .AND. monitor_mnc ) monitor_stdio = .FALSE.
0173
8731fc9ef5 Ed H*0174
0175 IF (pickup_read_mnc) pickup_read_mdsio = .FALSE.
0176
41ce3f2380 Ed H*0177
1a7eca6776 Ed H*0178 IF (mnc_use_outdir) THEN
41ce3f2380 Ed H*0179 IF ( mnc_outdir_num .OR. mnc_outdir_date ) THEN
0180 CALL MNC_SET_OUTDIR(myThid)
0181 ELSE
0182 DO i = 1,MNC_MAX_CHAR
0183 mnc_out_path(i:i) = ' '
0184 ENDDO
fd25642e39 Jean*0185 write(mnc_out_path,'(2A)')
41ce3f2380 Ed H*0186 & mnc_outdir_str(1:ILNBLNK(mnc_outdir_str)), '/'
0187 ENDIF
1a7eca6776 Ed H*0188 ENDIF
cba009f524 Ed H*0189
680bb8c7cd Jean*0190
0191
0192
0193 IF ( pickup_write_mnc .OR. pickup_read_mnc ) THEN
0194 WRITE(msgBuf,'(2A)') '** WARNING ** MNC_READPARMS: ',
0195 & 'incomplete MNC pickup files implementation'
0196 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0197 & SQUEEZE_RIGHT, myThid )
0198 ENDIF
0199 IF ( pickup_write_mnc ) THEN
0200 WRITE(msgBuf,'(2A)') '** WARNING ** MNC_READPARMS: ',
0201 & '=> pickup_write_mnc=T not recommanded'
0202 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0203 & SQUEEZE_RIGHT, myThid )
0204 ENDIF
0205 IF ( pickup_read_mnc ) THEN
0206 WRITE(msgBuf,'(2A)') '** WARNING ** MNC_READPARMS: ',
0207 & '=> pickup_read_mnc=T not working for some set-up'
0208 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0209 & SQUEEZE_RIGHT, myThid )
0210 ENDIF
0211
cba009f524 Ed H*0212 RETURN
0213 END
0214
0215
e6bb5b2cc3 Ed H*0216
1b5fb69d21 Ed H*0217
cba009f524 Ed H*0218
1b5fb69d21 Ed H*0219
cba009f524 Ed H*0220 SUBROUTINE MNC_SET_OUTDIR( myThid )
0221
1b5fb69d21 Ed H*0222
e6bb5b2cc3 Ed H*0223
fd25642e39 Jean*0224
1b5fb69d21 Ed H*0225
b7411f1a84 Jean*0226 IMPLICIT NONE
07155994b8 Mart*0227 #include "MNC_COMMON.h"
1a7eca6776 Ed H*0228 #include "SIZE.h"
cba009f524 Ed H*0229 #include "EEPARAMS.h"
0230 #include "PARAMS.h"
a30418b6b9 Ed H*0231 #include "MNC_PARAMS.h"
cba009f524 Ed H*0232
1b5fb69d21 Ed H*0233
cba009f524 Ed H*0234 integer myThid
e6bb5b2cc3 Ed H*0235
cba009f524 Ed H*0236
1b5fb69d21 Ed H*0237
1a7eca6776 Ed H*0238 integer i,j,k, ntot, npathd, idate
b7411f1a84 Jean*0239 CHARACTER*(MNC_MAX_PATH) pathd
0240 CHARACTER*(100) cenc
9705a0d5c6 Ed H*0241 integer ienc(MNC_MAX_PATH)
1a7eca6776 Ed H*0242 integer ncenc
e6bb5b2cc3 Ed H*0243
1b5fb69d21 Ed H*0244
0245 integer ILNBLNK
1a7eca6776 Ed H*0246
0247 cenc(1:26) = 'abcdefghijklmnopqrstuvwxyz'
0248 cenc(27:52) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
0249 cenc(53:70) = '0123456789_.,+-=/~'
0250 ncenc = 70
0251 npathd = 100
0252 IF (mnc_outdir_date) THEN
0253 idate = 1
0254 ELSE
0255 idate = 0
0256 ENDIF
9705a0d5c6 Ed H*0257 DO i = 1,MNC_MAX_PATH
1a7eca6776 Ed H*0258 pathd(i:i) = ' '
0259 ENDDO
0260 k = ILNBLNK(mnc_outdir_str)
9705a0d5c6 Ed H*0261 IF (k .GT. MNC_MAX_PATH) k = MNC_MAX_PATH
1a7eca6776 Ed H*0262 pathd(1:k) = mnc_outdir_str(1:k)
0263 ntot = 0
0264 DO i = 1,k
0265 DO j = 1,ncenc
0266 IF (pathd(i:i) .EQ. cenc(j:j)) THEN
0267 ntot = ntot + 1
0268 ienc(ntot) = j
0269 GOTO 20
0270 ENDIF
0271 ENDDO
0272 20 CONTINUE
0273 ENDDO
cba009f524 Ed H*0274
1a7eca6776 Ed H*0275 CALL mnccdir(ntot, ienc, idate)
cba009f524 Ed H*0276
9705a0d5c6 Ed H*0277 DO i = 1,MNC_MAX_PATH
cba009f524 Ed H*0278 mnc_out_path(i:i) = ' '
0279 ENDDO
1a7eca6776 Ed H*0280 IF (ntot .GT. 0) THEN
9705a0d5c6 Ed H*0281 IF (ntot .GT. (MNC_MAX_PATH-40)) THEN
0282 ntot = MNC_MAX_PATH - 40
1a7eca6776 Ed H*0283 ENDIF
0284 DO i = 1,ntot
0285 j = ienc(i)
0286 mnc_out_path(i:i) = cenc(j:j)
0287 ENDDO
0288 mnc_out_path((ntot+1):(ntot+1)) = '/'
0289 ENDIF
0290
780798f6bd Ed H*0291 RETURN
0292 END