File indexing completed on 2026-04-25 05:08:45 UTC
view on githubraw file Latest commit 24222836 on 2026-04-24 16:05:12 UTC
e62a71baf9 Jean*0001 #include "MDSIO_OPTIONS.h"
0002
0003
0004
0005
0006 SUBROUTINE MDS_WRITE_META(
0007 I mFileName,
0008 I dFileName,
0009 I simulName,
0010 I titleLine,
0011 I filePrec,
20b1679b8a Jean*0012 I nDims, dimList, map2gl,
e62a71baf9 Jean*0013 I nFlds, fldList,
4774f70820 Jean*0014 I nTimRec, timList, misVal,
e62a71baf9 Jean*0015 I nrecords, myIter, myThid )
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 IMPLICIT NONE
0026
0027
0028 #include "SIZE.h"
0029 #include "EEPARAMS.h"
242228367a Mart*0030 #ifdef ALLOW_CAL
0031 # include "PARAMS.h"
0032 #endif
e62a71baf9 Jean*0033
0034
0035
0036
0037
20b1679b8a Jean*0038
e62a71baf9 Jean*0039
0040
0041
20b1679b8a Jean*0042
e62a71baf9 Jean*0043
0044
0045
0046
4774f70820 Jean*0047
e62a71baf9 Jean*0048
0049
0050
0051
0052
0053
0054 CHARACTER*(*) mFileName
0055 CHARACTER*(*) dFileName
0056 CHARACTER*(*) simulName
0057 CHARACTER*(*) titleLine
0058 INTEGER filePrec
0059 INTEGER nDims
0060 INTEGER dimList(3,nDims)
20b1679b8a Jean*0061 INTEGER map2gl(2)
e62a71baf9 Jean*0062 INTEGER nFlds
0063 CHARACTER*(8) fldList(*)
0064 INTEGER nTimRec
0065 _RL timList(*)
4774f70820 Jean*0066 _RL misVal
e62a71baf9 Jean*0067 INTEGER nrecords
0068 INTEGER myIter
0069 INTEGER myThid
0070
0071
0072
0073 INTEGER ILNBLNK
0074 EXTERNAL ILNBLNK
0075
0076
079512f56f Jean*0077 INTEGER i,j,ii,iL
e62a71baf9 Jean*0078 INTEGER mUnit
0079
0080 CHARACTER*(MAX_LEN_MBUF) msgBuf
242228367a Mart*0081 #ifdef ALLOW_CAL
0082 _RL myTime
0083 INTEGER myDate(4)
0084 INTEGER year, month, day, hour, minute, second
0085 #endif
e62a71baf9 Jean*0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099 CALL MDSFINDUNIT( mUnit, myThid )
0100
0101
0102 OPEN( mUnit, file=mFileName, status='unknown',
0103 & form='formatted' )
0104
0105
0106 iL = ILNBLNK(simulName)
0107 IF ( iL.GT.0 ) THEN
0108 WRITE(mUnit,'(3A)') " simulation = { '",simulName(1:iL),"' };"
0109 ENDIF
0110
0111
0112 WRITE(mUnit,'(1X,A,I3,A)') 'nDims = [ ',nDims,' ];'
0113
0114
0115
0116
0117
0118
079512f56f Jean*0119 ii = 0
0120 DO j=1,nDims
0121 ii = MAX(dimList(1,j),ii)
e62a71baf9 Jean*0122 ENDDO
079512f56f Jean*0123 WRITE(mUnit,'(1X,A)') 'dimList = ['
0124 IF ( ii.LT.10000 ) THEN
0125
0126 DO j=1,nDims
0127 IF (j.LT.nDims) THEN
0128 WRITE(mUnit,'(1X,3(I5,","))') (dimList(i,j),i=1,3)
0129 ELSE
0130 WRITE(mUnit,'(1X,2(I5,","),I5)') (dimList(i,j),i=1,3)
0131 ENDIF
0132 ENDDO
0133 ELSE
0134
0135 DO j=1,nDims
0136 IF (j.LT.nDims) THEN
0137 WRITE(mUnit,'(1X,3(I10,","))') (dimList(i,j),i=1,3)
0138 ELSE
0139 WRITE(mUnit,'(1X,2(I10,","),I10)') (dimList(i,j),i=1,3)
0140 ENDIF
0141 ENDDO
0142 ENDIF
e62a71baf9 Jean*0143 WRITE(mUnit,'(1X,A)') '];'
20b1679b8a Jean*0144
0145 IF ( map2gl(1).NE.0 .OR. map2gl(2).NE.1 ) THEN
0146 WRITE(mUnit,'(1X,2(A,I5),A)') 'map2glob = [ ',
0147 & map2gl(1),',',map2gl(2),' ];'
0148 ENDIF
e62a71baf9 Jean*0149
0150
0151 IF (filePrec .EQ. precFloat32) THEN
0152 WRITE(mUnit,'(1X,A)') "dataprec = [ 'float32' ];"
0153 ELSEIF (filePrec .EQ. precFloat64) THEN
0154 WRITE(mUnit,'(1X,A)') "dataprec = [ 'float64' ];"
0155 ELSE
0156 WRITE(msgBuf,'(A)')
0157 & ' MDSWRITEMETA: invalid filePrec'
0158 CALL PRINT_ERROR( msgBuf, myThid )
0159 STOP 'ABNORMAL END: S/R MDSWRITEMETA'
0160 ENDIF
0161
0162
0163
0164
66046ae6a1 Brun*0165 WRITE(mUnit,'(1X,A,I10,A)') 'nrecords = [ ',nrecords,' ];'
e62a71baf9 Jean*0166
0167
0168
0169
0170
0171
0172
0173
0174 IF ( myIter.GE.0 )
0175 & WRITE(mUnit,'(1X,A,I10,A)') 'timeStepNumber = [ ',myIter,' ];'
0176
242228367a Mart*0177 #ifdef ALLOW_CAL
0178 IF ( useCal .AND. myIter.GE.0 ) THEN
0179
0180
0181
0182 myTime = baseTime + myIter*deltaTClock
0183 CALL CAL_GETDATE( myIter, myTime, myDate, myThid )
0184
0185
0186
0187
0188
0189 day = MOD(myDate(1),100)
0190 month = MOD(myDate(1)/100,100)
0191 year = myDate(1)/10000
0192 second = MOD(myDate(2),100)
0193 minute = MOD(myDate(2)/100,100)
0194 hour = myDate(2)/10000
0195 WRITE(mUnit,'(1X,A,I4.4,A,5(I2.2,A))')
0196 & "timeStepDate = [ '",
0197 & year,"-",month,"-",day,"T",hour,":",minute,":",second,
0198 & "Z' ];"
0199 ENDIf
0200 #endif
0201
e62a71baf9 Jean*0202
0203
20b1679b8a Jean*0204
e62a71baf9 Jean*0205 IF ( nTimRec.GT.0 ) THEN
0206 ii = MIN(nTimRec,20)
0207 WRITE(msgBuf,'(1P20E20.12)') (timList(i),i=1,ii)
47d9634d91 Jean*0208 WRITE(mUnit,'(1X,3A)') 'timeInterval = [', msgBuf(1:20*ii),' ];'
e62a71baf9 Jean*0209 ENDIF
0210
4774f70820 Jean*0211
0212 IF ( misVal.NE.oneRL ) THEN
0213 WRITE(mUnit,'(1X,A,1PE21.14,A)')
0214 & 'missingValue = [ ',misVal,' ];'
0215 ENDIF
0216
e62a71baf9 Jean*0217
0218 IF ( nFlds.GT.0 ) THEN
0219 WRITE(mUnit,'(1X,A,I4,A)') 'nFlds = [ ', nFlds, ' ];'
0220 WRITE(mUnit,'(1X,A)') 'fldList = {'
0221 WRITE(mUnit,'(20(A2,A8,A1))')
0222 & (" '",fldList(i),"'",i=1,nFlds)
0223 WRITE(mUnit,'(1X,A)') '};'
0224 ENDIF
0225
0226
0227 iL = ILNBLNK(titleLine)
0228 IF ( iL.GT.0 ) THEN
0229 WRITE(mUnit,'(3A)')' /* ', titleLine(1:iL), ' */'
0230 ENDIF
0231
0232
0233 CLOSE(mUnit)
0234
0235
0236
0237 RETURN
0238 END