File indexing completed on 2018-03-02 18:41:56 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
a9590e7718 Jean*0001 #include "MDSIO_OPTIONS.h"
0002
0003
0004
0005
0006 SUBROUTINE MDS_WRITE_FIELD(
0007 I fName,
0008 I filePrec,
0009 I globalFile,
0010 I useCurrentDir,
0011 I arrType,
c0c8c1b5a1 Jean*0012 I kSize,kLo,kHi,
608f4af3c8 Jean*0013 I fldRL, fldRS,
a9590e7718 Jean*0014 I jrecord,
0015 I myIter,
0016 I myThid )
0017
0018
0019
0020
0021
0022
0023
0024
0025
608f4af3c8 Jean*0026
c0c8c1b5a1 Jean*0027
608f4af3c8 Jean*0028
0029
0030
0031
a9590e7718 Jean*0032
0033
0034
0035
0036
c0c8c1b5a1 Jean*0037
0038
0039
a9590e7718 Jean*0040
c0c8c1b5a1 Jean*0041
0042
db324b9278 Jean*0043
608f4af3c8 Jean*0044
0045
c0c8c1b5a1 Jean*0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
a9590e7718 Jean*0056
2186fe42a7 Jean*0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
a9590e7718 Jean*0067
0068
0069
0070
0071
0072
0073
0074
0075 IMPLICIT NONE
0076
0077 #include "SIZE.h"
0078 #include "EEPARAMS.h"
0079 #include "PARAMS.h"
0080 #ifdef ALLOW_EXCH2
d24daa2c55 Jean*0081 # include "W2_EXCH2_SIZE.h"
0082 # include "W2_EXCH2_TOPOLOGY.h"
0083 # include "W2_EXCH2_PARAMS.h"
a9590e7718 Jean*0084 #endif /* ALLOW_EXCH2 */
f7508ac42d Jean*0085 #include "EEBUFF_SCPU.h"
d24daa2c55 Jean*0086 #ifdef ALLOW_FIZHI
0087 # include "fizhi_SIZE.h"
0088 #endif /* ALLOW_FIZHI */
8decba0243 Jean*0089 #include "MDSIO_BUFF_3D.h"
a9590e7718 Jean*0090
0091
0092 CHARACTER*(*) fName
0093 INTEGER filePrec
0094 LOGICAL globalFile
0095 LOGICAL useCurrentDir
0096 CHARACTER*(2) arrType
c0c8c1b5a1 Jean*0097 INTEGER kSize, kLo, kHi
608f4af3c8 Jean*0098 _RL fldRL(*)
0099 _RS fldRS(*)
a9590e7718 Jean*0100 INTEGER jrecord
0101 INTEGER myIter
0102 INTEGER myThid
0103
0104
0105
0106 INTEGER ILNBLNK
0107 INTEGER MDS_RECLEN
0108 LOGICAL MASTER_CPU_IO
0109 EXTERNAL ILNBLNK
0110 EXTERNAL MDS_RECLEN
0111 EXTERNAL MASTER_CPU_IO
0112
0113
8decba0243 Jean*0114
a9590e7718 Jean*0115 CHARACTER*(MAX_LEN_FNAM) dataFName,metaFName,pfName
0116 CHARACTER*(MAX_LEN_MBUF) msgBuf
0117 LOGICAL fileIsOpen
0118 LOGICAL iAmDoingIO
0119 LOGICAL writeMetaF
f7508ac42d Jean*0120 LOGICAL useExch2ioLayOut
e039218b63 Jean*0121 LOGICAL zeroBuff
0122 INTEGER xSize, ySize
a9590e7718 Jean*0123 INTEGER irecord
8decba0243 Jean*0124 INTEGER iG,jG,bi,bj
0125 INTEGER i1,i2,i,j,k,nNz
c0c8c1b5a1 Jean*0126 INTEGER irec,dUnit,IL,pIL
20b1679b8a Jean*0127 INTEGER dimList(3,3), nDims, map2gl(2)
e546f6387c Oliv*0128 INTEGER length_of_rec
8decba0243 Jean*0129 INTEGER bBij
f7508ac42d Jean*0130 INTEGER tNx, tNy, global_nTx
0131 INTEGER tBx, tBy, iGjLoc, jGjLoc
a9590e7718 Jean*0132 #ifdef ALLOW_EXCH2
f7508ac42d Jean*0133 INTEGER tN
a9590e7718 Jean*0134 #endif /* ALLOW_EXCH2 */
fbc6fb65d0 Jean*0135 _RL dummyRL(1)
0136 CHARACTER*8 blank8c
0137
0138 DATA dummyRL(1) / 0. _d 0 /
0139 DATA blank8c / ' ' /
a9590e7718 Jean*0140
0141
e039218b63 Jean*0142
0143 xSize = Nx
0144 ySize = Ny
f7508ac42d Jean*0145 useExch2ioLayOut = .FALSE.
0146 #ifdef ALLOW_EXCH2
0147 IF ( W2_useE2ioLayOut ) THEN
0148 xSize = exch2_global_Nx
0149 ySize = exch2_global_Ny
0150 useExch2ioLayOut = .TRUE.
0151 ENDIF
0152 #endif /* ALLOW_EXCH2 */
a9590e7718 Jean*0153
20b1679b8a Jean*0154
0155 iGjLoc = 0
0156 jGjLoc = 1
0157
a9590e7718 Jean*0158
0159 fileIsOpen = .FALSE.
0160 IL = ILNBLNK( fName )
0161 pIL = ILNBLNK( mdsioLocalDir )
c0c8c1b5a1 Jean*0162 nNz = 1 + kHi - kLo
a9590e7718 Jean*0163 irecord = ABS(jrecord)
0164 writeMetaF = jrecord.GT.0
0165
0166
0167 iAmDoingIO = MASTER_CPU_IO(myThid)
0168
a0e387243c Jean*0169
0170
0171
0172 IF ( useCurrentDir .AND. (90+IL).GT.MAX_LEN_MBUF ) THEN
0173 WRITE(msgBuf,'(2A,2(I4,A))') 'MDS_WRITE_FIELD: ',
0174 & 'Too long (IL=',IL,') file name:'
0175 CALL PRINT_ERROR( msgBuf, myThid )
0176 WRITE(errorMessageUnit,'(3A)')'file: >',fName(1:IL),'<'
0177 CALL ALL_PROC_DIE( myThid )
0178 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0179 ELSEIF ( (90+IL+pIL).GT.MAX_LEN_MBUF ) THEN
0180 WRITE(msgBuf,'(2A,2(I4,A))') 'MDS_WRITE_FIELD: ',
0181 & 'Too long (pIL=',pIL,', IL=',IL,') pfix + file name:'
0182 CALL PRINT_ERROR( msgBuf, myThid )
0183 WRITE(errorMessageUnit,'(3A)')'pfix: >',mdsioLocalDir(1:pIL),'<'
0184 WRITE(errorMessageUnit,'(3A)')'file: >',fName(1:IL),'<'
0185 CALL ALL_PROC_DIE( myThid )
0186 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0187 ENDIF
a9590e7718 Jean*0188
8decba0243 Jean*0189 IF (irecord .LT. 1) THEN
e5df3a82bd Jean*0190 WRITE(msgBuf,'(3A,I10)')
d24daa2c55 Jean*0191 & ' MDS_WRITE_FIELD: file="', fName(1:IL), '" , iter=', myIter
0192 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
a0e387243c Jean*0193 & SQUEEZE_RIGHT, myThid )
8decba0243 Jean*0194 WRITE(msgBuf,'(A,I9.8)')
0195 & ' MDS_WRITE_FIELD: argument irecord = ',irecord
0196 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
a0e387243c Jean*0197 & SQUEEZE_RIGHT, myThid )
0198 WRITE(msgBuf,'(A)')
8decba0243 Jean*0199 & ' MDS_WRITE_FIELD: invalid value for irecord'
0200 CALL PRINT_ERROR( msgBuf, myThid )
0201 CALL ALL_PROC_DIE( myThid )
0202 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0203 ENDIF
c0c8c1b5a1 Jean*0204
8decba0243 Jean*0205 IF ( kLo.LT.1 .OR. kHi.GT.kSize ) THEN
e5df3a82bd Jean*0206 WRITE(msgBuf,'(3A,I10)')
d24daa2c55 Jean*0207 & ' MDS_WRITE_FIELD: file="', fName(1:IL), '" , iter=', myIter
0208 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
a0e387243c Jean*0209 & SQUEEZE_RIGHT, myThid )
8decba0243 Jean*0210 WRITE(msgBuf,'(3(A,I6))')
0211 & ' MDS_WRITE_FIELD: arguments kSize=', kSize,
0212 & ' , kLo=', kLo, ' , kHi=', kHi
0213 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
a0e387243c Jean*0214 & SQUEEZE_RIGHT, myThid )
8decba0243 Jean*0215 WRITE(msgBuf,'(A)')
0216 & ' MDS_WRITE_FIELD: invalid sub-set of levels'
0217 CALL PRINT_ERROR( msgBuf, myThid )
0218 CALL ALL_PROC_DIE( myThid )
0219 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0220 ENDIF
0221
0222 IF ( .NOT.useSingleCpuIO .AND. nNz.GT.size3dBuf ) THEN
e5df3a82bd Jean*0223 WRITE(msgBuf,'(3A,I10)')
d24daa2c55 Jean*0224 & ' MDS_WRITE_FIELD: file="', fName(1:IL), '" , iter=', myIter
0225 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
a0e387243c Jean*0226 & SQUEEZE_RIGHT, myThid )
8decba0243 Jean*0227 WRITE(msgBuf,'(3(A,I6))')
0228 & ' MDS_WRITE_FIELD: Nb Lev to write =', nNz,
0229 & ' >', size3dBuf, ' = buffer 3rd Dim'
0230 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
a0e387243c Jean*0231 & SQUEEZE_RIGHT, myThid )
8decba0243 Jean*0232 WRITE(msgBuf,'(A)')
0233 & ' MDS_WRITE_FIELD: buffer 3rd Dim. too small'
0234 CALL PRINT_ERROR( msgBuf, myThid )
0235 WRITE(msgBuf,'(A)')
0236 & ' increase "size3dBuf" in "MDSIO_BUFF_3D.h" and recompile'
0237 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
a0e387243c Jean*0238 & SQUEEZE_RIGHT, myThid)
8decba0243 Jean*0239 CALL ALL_PROC_DIE( myThid )
0240 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0241 ENDIF
0242
0243
0244 IF ( iAmDoingIO ) THEN
a9590e7718 Jean*0245
0246
0247 IF ( useCurrentDir .OR. pIL.EQ.0 ) THEN
0248 pfName = fName
0249 ELSE
0250 WRITE(pfName,'(2A)') mdsioLocalDir(1:pIL), fName(1:IL)
0251 ENDIF
0252 pIL=ILNBLNK( pfName )
db324b9278 Jean*0253 IF ( debugLevel .GE. debLevC ) THEN
0254 WRITE(msgBuf,'(A,I8,I6,3I4,2A)')
0255 & ' MDS_WRITE_FIELD: it,rec,kS,kL,kH=', myIter, jrecord,
0256 & kSize, kLo, kHi, ' file=', pfName(1:pIL)
0257 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0258 & SQUEEZE_RIGHT, myThid )
0259 ENDIF
a9590e7718 Jean*0260
0261
0262 CALL MDSFINDUNIT( dUnit, myThid )
0263
0264
0265 ENDIF
0266
0267
0268
0269 IF (useSingleCpuIO) THEN
0270
0271
0272 IF ( iAmDoingIO ) THEN
0273 WRITE(dataFName,'(2a)') fName(1:IL),'.data'
9a33636256 Jean*0274 length_of_rec = MDS_RECLEN( filePrec, xSize*ySize, myThid )
a9590e7718 Jean*0275 IF (irecord .EQ. 1) THEN
0276 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
0277 & access='direct', recl=length_of_rec )
0278 ELSE
0279 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
0280 & access='direct', recl=length_of_rec )
0281 ENDIF
0282 ENDIF
0283
8decba0243 Jean*0284
c0c8c1b5a1 Jean*0285 DO k=kLo,kHi
08e96a842a Jean*0286 zeroBuff = k.EQ.kLo
608f4af3c8 Jean*0287
08e96a842a Jean*0288 IF ( filePrec.EQ.precFloat32 ) THEN
0289 IF ( arrType.EQ.'RS' ) THEN
608f4af3c8 Jean*0290 CALL MDS_PASS_R4toRS( sharedLocBuf_r4, fldRS,
2186fe42a7 Jean*0291 I 0, 0, 1, k, kSize, 0, 0, .FALSE., myThid )
08e96a842a Jean*0292 ELSEIF ( arrType.EQ.'RL' ) THEN
608f4af3c8 Jean*0293 CALL MDS_PASS_R4toRL( sharedLocBuf_r4, fldRL,
2186fe42a7 Jean*0294 I 0, 0, 1, k, kSize, 0, 0, .FALSE., myThid )
08e96a842a Jean*0295 ELSE
d24daa2c55 Jean*0296 WRITE(msgBuf,'(2A)')
0297 & ' MDS_WRITE_FIELD: illegal value for arrType=', arrType
08e96a842a Jean*0298 CALL PRINT_ERROR( msgBuf, myThid )
8decba0243 Jean*0299 CALL ALL_PROC_DIE( myThid )
08e96a842a Jean*0300 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0301 ENDIF
8decba0243 Jean*0302
0303 CALL BAR2( myThid )
08e96a842a Jean*0304 CALL GATHER_2D_R4(
f7508ac42d Jean*0305 O xy_buffer_r4,
0306 I sharedLocBuf_r4,
08e96a842a Jean*0307 I xSize, ySize,
f7508ac42d Jean*0308 I useExch2ioLayOut, zeroBuff, myThid )
08e96a842a Jean*0309 ELSEIF ( filePrec.EQ.precFloat64 ) THEN
0310 IF ( arrType.EQ.'RS' ) THEN
608f4af3c8 Jean*0311 CALL MDS_PASS_R8toRS( sharedLocBuf_r8, fldRS,
2186fe42a7 Jean*0312 I 0, 0, 1, k, kSize, 0, 0, .FALSE., myThid )
08e96a842a Jean*0313 ELSEIF ( arrType.EQ.'RL' ) THEN
608f4af3c8 Jean*0314 CALL MDS_PASS_R8toRL( sharedLocBuf_r8, fldRL,
2186fe42a7 Jean*0315 I 0, 0, 1, k, kSize, 0, 0, .FALSE., myThid )
08e96a842a Jean*0316 ELSE
d24daa2c55 Jean*0317 WRITE(msgBuf,'(2A)')
0318 & ' MDS_WRITE_FIELD: illegal value for arrType=', arrType
08e96a842a Jean*0319 CALL PRINT_ERROR( msgBuf, myThid )
8decba0243 Jean*0320 CALL ALL_PROC_DIE( myThid )
08e96a842a Jean*0321 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0322 ENDIF
8decba0243 Jean*0323
0324 CALL BAR2( myThid )
08e96a842a Jean*0325 CALL GATHER_2D_R8(
f7508ac42d Jean*0326 O xy_buffer_r8,
0327 I sharedLocBuf_r8,
08e96a842a Jean*0328 I xSize, ySize,
f7508ac42d Jean*0329 I useExch2ioLayOut, zeroBuff, myThid )
08e96a842a Jean*0330 ELSE
d24daa2c55 Jean*0331 WRITE(msgBuf,'(A,I6)')
0332 & ' MDS_WRITE_FIELD: illegal value for filePrec=',filePrec
0333 CALL PRINT_ERROR( msgBuf, myThid )
0334 CALL ALL_PROC_DIE( myThid )
0335 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
a9590e7718 Jean*0336 ENDIF
8decba0243 Jean*0337
0338
0339 CALL BAR2( myThid )
a9590e7718 Jean*0340
0341 IF ( iAmDoingIO ) THEN
9a33636256 Jean*0342 irec = 1 + k-kLo + (irecord-1)*nNz
8decba0243 Jean*0343 IF ( filePrec.EQ.precFloat32 ) THEN
20b1679b8a Jean*0344 #ifdef _BYTESWAPIO
e039218b63 Jean*0345 CALL MDS_BYTESWAPR4( xSize*ySize, xy_buffer_r4 )
20b1679b8a Jean*0346 #endif
e039218b63 Jean*0347 WRITE(dUnit,rec=irec) ( xy_buffer_r4(i),i=1,xSize*ySize )
8decba0243 Jean*0348 ELSE
a9590e7718 Jean*0349 #ifdef _BYTESWAPIO
e039218b63 Jean*0350 CALL MDS_BYTESWAPR8( xSize*ySize, xy_buffer_r8 )
a9590e7718 Jean*0351 #endif
e039218b63 Jean*0352 WRITE(dUnit,rec=irec) ( xy_buffer_r8(i),i=1,xSize*ySize )
a9590e7718 Jean*0353 ENDIF
20b1679b8a Jean*0354
a9590e7718 Jean*0355 ENDIF
20b1679b8a Jean*0356
a9590e7718 Jean*0357 ENDDO
0358
0359
0360 IF ( iAmDoingIO ) THEN
0361 CLOSE( dUnit )
0362 ENDIF
0363
0364
0365
0366 ELSE
0367
2186fe42a7 Jean*0368
0369
0370 CALL BAR2( myThid )
0371
608f4af3c8 Jean*0372
8decba0243 Jean*0373 IF ( filePrec.EQ.precFloat32 ) THEN
0374 IF ( arrType.EQ.'RS' ) THEN
608f4af3c8 Jean*0375 CALL MDS_PASS_R4toRS( shared3dBuf_r4, fldRS,
2186fe42a7 Jean*0376 I 0, 0, nNz, kLo, kSize, 0,0, .FALSE., myThid )
8decba0243 Jean*0377 ELSEIF ( arrType.EQ.'RL' ) THEN
608f4af3c8 Jean*0378 CALL MDS_PASS_R4toRL( shared3dBuf_r4, fldRL,
2186fe42a7 Jean*0379 I 0, 0, nNz, kLo, kSize, 0,0, .FALSE., myThid )
8decba0243 Jean*0380 ELSE
d24daa2c55 Jean*0381 WRITE(msgBuf,'(2A)')
0382 & ' MDS_WRITE_FIELD: illegal value for arrType=', arrType
8decba0243 Jean*0383 CALL PRINT_ERROR( msgBuf, myThid )
0384 CALL ALL_PROC_DIE( myThid )
0385 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0386 ENDIF
0387 ELSEIF ( filePrec.EQ.precFloat64 ) THEN
0388 IF ( arrType.EQ.'RS' ) THEN
608f4af3c8 Jean*0389 CALL MDS_PASS_R8toRS( shared3dBuf_r8, fldRS,
2186fe42a7 Jean*0390 I 0, 0, nNz, kLo, kSize, 0,0, .FALSE., myThid )
8decba0243 Jean*0391 ELSEIF ( arrType.EQ.'RL' ) THEN
608f4af3c8 Jean*0392 CALL MDS_PASS_R8toRL( shared3dBuf_r8, fldRL,
2186fe42a7 Jean*0393 I 0, 0, nNz, kLo, kSize, 0,0, .FALSE., myThid )
8decba0243 Jean*0394 ELSE
d24daa2c55 Jean*0395 WRITE(msgBuf,'(2A)')
0396 & ' MDS_WRITE_FIELD: illegal value for arrType=', arrType
8decba0243 Jean*0397 CALL PRINT_ERROR( msgBuf, myThid )
0398 CALL ALL_PROC_DIE( myThid )
0399 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0400 ENDIF
0401 ELSE
d24daa2c55 Jean*0402 WRITE(msgBuf,'(A,I6)')
0403 & ' MDS_WRITE_FIELD: illegal value for filePrec=',filePrec
8decba0243 Jean*0404 CALL PRINT_ERROR( msgBuf, myThid )
0405 CALL ALL_PROC_DIE( myThid )
0406 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
0407 ENDIF
0408
0409
0410 CALL BAR2( myThid )
0411
a9590e7718 Jean*0412
0413 IF ( iAmDoingIO ) THEN
0414
8decba0243 Jean*0415 #ifdef _BYTESWAPIO
0416 IF ( filePrec.EQ.precFloat32 ) THEN
0417 CALL MDS_BYTESWAPR4( sNx*sNy*nNz*nSx*nSy, shared3dBuf_r4 )
0418 ELSE
0419 CALL MDS_BYTESWAPR8( sNx*sNy*nNz*nSx*nSy, shared3dBuf_r8 )
0420 ENDIF
0421 #endif
0422
a9590e7718 Jean*0423
0424 IF (globalFile) THEN
8decba0243 Jean*0425 WRITE(dataFName,'(2a)') fName(1:IL),'.data'
0426 length_of_rec = MDS_RECLEN( filePrec, sNx, myThid )
0427 IF (irecord .EQ. 1) THEN
0428 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
0429 & access='direct', recl=length_of_rec )
0430 ELSE
0431 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
0432 & access='direct', recl=length_of_rec )
0433 ENDIF
0434 fileIsOpen=.TRUE.
a9590e7718 Jean*0435 ENDIF
0436
0437
0438 DO bj=1,nSy
0439 DO bi=1,nSx
8decba0243 Jean*0440 bBij = sNx*sNy*nNz*( bi-1 + (bj-1)*nSx )
20b1679b8a Jean*0441
9a33636256 Jean*0442 tNx = sNx
0443 tNy = sNy
0444 global_nTx = xSize/sNx
0445 tBx = myXGlobalLo-1 + (bi-1)*sNx
0446 tBy = myYGlobalLo-1 + (bj-1)*sNy
a9590e7718 Jean*0447 #ifdef ALLOW_EXCH2
9a33636256 Jean*0448 IF ( useExch2ioLayOut ) THEN
c424ee7cc7 Jean*0449 tN = W2_myTileList(bi,bj)
9a33636256 Jean*0450
0451
0452
0453 tBx = exch2_txGlobalo(tN) - 1
0454 tBy = exch2_tyGlobalo(tN) - 1
0455 IF ( exch2_mydNx(tN) .GT. xSize ) THEN
0456
0457 iGjLoc = 0
0458 jGjLoc = exch2_mydNx(tN) / xSize
0459 ELSEIF ( exch2_tNy(tN) .GT. ySize ) THEN
0460
0461 iGjLoc = exch2_mydNx(tN)
0462 jGjLoc = 0
0463 ELSE
0464
0465 iGjLoc = 0
0466 jGjLoc = 1
0467 ENDIF
0468 ENDIF
a9590e7718 Jean*0469 #endif /* ALLOW_EXCH2 */
9a33636256 Jean*0470
0471 IF (globalFile) THEN
0472
0473
0474 DO k=kLo,kHi
a9590e7718 Jean*0475 DO j=1,tNy
9a33636256 Jean*0476 irec = 1 + ( tBx + (j-1)*iGjLoc )/tNx
0477 & + ( tBy + (j-1)*jGjLoc )*global_nTx
0478 & +( k-kLo + (irecord-1)*nNz )*global_nTx*ySize
8decba0243 Jean*0479 i1 = bBij + 1 + (j-1)*sNx + (k-kLo)*sNx*sNy
0480 i2 = bBij + j*sNx + (k-kLo)*sNx*sNy
0481 IF ( filePrec.EQ.precFloat32 ) THEN
0482 WRITE(dUnit,rec=irec) (shared3dBuf_r4(i),i=i1,i2)
a9590e7718 Jean*0483 ELSE
8decba0243 Jean*0484 WRITE(dUnit,rec=irec) (shared3dBuf_r8(i),i=i1,i2)
a9590e7718 Jean*0485 ENDIF
8decba0243 Jean*0486
a9590e7718 Jean*0487 ENDDO
0488 ENDDO
9a33636256 Jean*0489
a9590e7718 Jean*0490 ELSE
9a33636256 Jean*0491
0492
0493
0494 iG=bi+(myXGlobalLo-1)/sNx
0495 jG=bj+(myYGlobalLo-1)/sNy
0496 WRITE(dataFName,'(2A,I3.3,A,I3.3,A)')
8decba0243 Jean*0497 & pfName(1:pIL),'.',iG,'.',jG,'.data'
0498 length_of_rec = MDS_RECLEN( filePrec, sNx*sNy*nNz, myThid )
9a33636256 Jean*0499 IF (irecord .EQ. 1) THEN
0500 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
0501 & access='direct', recl=length_of_rec )
0502 ELSE
0503 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
0504 & access='direct', recl=length_of_rec )
0505 ENDIF
0506 fileIsOpen=.TRUE.
0507
8decba0243 Jean*0508 irec = irecord
0509 i1 = bBij + 1
0510 i2 = bBij + sNx*sNy*nNz
0511 IF ( filePrec.EQ.precFloat32 ) THEN
0512 WRITE(dUnit,rec=irec) (shared3dBuf_r4(i),i=i1,i2)
0513 ELSE
0514 WRITE(dUnit,rec=irec) (shared3dBuf_r8(i),i=i1,i2)
0515 ENDIF
9a33636256 Jean*0516
0517
0518 IF ( fileIsOpen ) THEN
8decba0243 Jean*0519 CLOSE( dUnit )
0520 fileIsOpen = .FALSE.
9a33636256 Jean*0521 ENDIF
0522
0523
a9590e7718 Jean*0524 ENDIF
9a33636256 Jean*0525
a9590e7718 Jean*0526
0527 IF ( .NOT.globalFile .AND. writeMetaF ) THEN
0528 iG=bi+(myXGlobalLo-1)/sNx
0529 jG=bj+(myYGlobalLo-1)/sNy
0530 WRITE(metaFname,'(2A,I3.3,A,I3.3,A)')
0531 & pfName(1:pIL),'.',iG,'.',jG,'.meta'
e039218b63 Jean*0532 dimList(1,1) = xSize
f7508ac42d Jean*0533 dimList(2,1) = tBx + 1
0534 dimList(3,1) = tBx + tNx
e039218b63 Jean*0535 dimList(1,2) = ySize
f7508ac42d Jean*0536 dimList(2,2) = tBy + 1
0537 dimList(3,2) = tBy + tNy
e039218b63 Jean*0538 dimList(1,3) = nNz
0539 dimList(2,3) = 1
0540 dimList(3,3) = nNz
9a33636256 Jean*0541
0542
0543
e039218b63 Jean*0544 nDims = 3
0545 IF ( nNz.EQ.1 ) nDims = 2
20b1679b8a Jean*0546 map2gl(1) = iGjLoc
0547 map2gl(2) = jGjLoc
a9590e7718 Jean*0548 CALL MDS_WRITE_META(
0549 I metaFName, dataFName, the_run_name, ' ',
fbc6fb65d0 Jean*0550 I filePrec, nDims, dimList, map2gl, 0, blank8c,
a50692f9cd Jean*0551 I 0, dummyRL, oneRL, irecord, myIter, myThid )
a9590e7718 Jean*0552 ENDIF
9a33636256 Jean*0553
a9590e7718 Jean*0554
0555 ENDDO
0556 ENDDO
0557
0558
0559 IF (fileIsOpen .AND. globalFile) THEN
8decba0243 Jean*0560 CLOSE( dUnit )
0561 fileIsOpen = .FALSE.
a9590e7718 Jean*0562 ENDIF
0563
0564
0565 ENDIF
0566
8decba0243 Jean*0567
0568
2186fe42a7 Jean*0569
8decba0243 Jean*0570
a9590e7718 Jean*0571
0572 ENDIF
0573
0574
0575 IF ( writeMetaF .AND. iAmDoingIO .AND.
0576 & (globalFile .OR. useSingleCpuIO) ) THEN
0577 WRITE(metaFName,'(2A)') fName(1:IL),'.meta'
e039218b63 Jean*0578 dimList(1,1) = xSize
0579 dimList(2,1) = 1
0580 dimList(3,1) = xSize
0581 dimList(1,2) = ySize
0582 dimList(2,2) = 1
0583 dimList(3,2) = ySize
0584 dimList(1,3) = nNz
0585 dimList(2,3) = 1
0586 dimList(3,3) = nNz
9a33636256 Jean*0587
0588
0589
e039218b63 Jean*0590 nDims = 3
0591 IF ( nNz.EQ.1 ) nDims = 2
ade0dcb979 Jean*0592 map2gl(1) = 0
0593 map2gl(2) = 1
a9590e7718 Jean*0594 CALL MDS_WRITE_META(
0595 I metaFName, dataFName, the_run_name, ' ',
fbc6fb65d0 Jean*0596 I filePrec, nDims, dimList, map2gl, 0, blank8c,
a50692f9cd Jean*0597 I 0, dummyRL, oneRL, irecord, myIter, myThid )
a9590e7718 Jean*0598
20b1679b8a Jean*0599
a50692f9cd Jean*0600
a9590e7718 Jean*0601 ENDIF
0602
0603
0604 RETURN
0605 END