File indexing completed on 2022-04-14 05:09:27 UTC
view on githubraw file Latest commit 3d93c0a0 on 2022-04-13 15:21:38 UTC
6a2139a6bc Jean*0001 #include "MDSIO_OPTIONS.h"
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 SUBROUTINE MDS_FACEF_READ_RS(
0014 I fName, fPrec, irec,
0015 U array,
0016 I bi,bj, myThid )
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 IMPLICIT NONE
0028
0029 #include "SIZE.h"
0030 #include "EEPARAMS.h"
0031 #ifdef ALLOW_EXCH2
f9f661930b Jean*0032 #include "W2_EXCH2_SIZE.h"
6a2139a6bc Jean*0033 #include "W2_EXCH2_TOPOLOGY.h"
0034 #endif /* ALLOW_EXCH2 */
0035
0036
0037
0038 CHARACTER*(*) fName
0039 INTEGER fPrec
0040 INTEGER irec
0041 _RS array(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
0042 INTEGER bi,bj, myThid
0043
0044
0045
0046 INTEGER MDS_RECLEN
0047 EXTERNAL MDS_RECLEN
0048 INTEGER ILNBLNK
0049 EXTERNAL ILNBLNK
0050
0051
0052
0053 INTEGER i,j, dUnit, iLen
0054 INTEGER length_of_rec
0055 CHARACTER*(MAX_LEN_MBUF) msgBuf
0056 #ifdef ALLOW_EXCH2
0057 INTEGER tN, dNx, dNy, tBx, tBy, tNx, tNY, jj, jBase
0058 Real*4 ioBuf4(1:sNx*nSx*nPx+1)
0059 Real*8 ioBuf8(1:sNx*nSx*nPx+1)
0060 #else
0061 Real*4 ioBuf4(1:sNx+1,1:sNy+1)
0062 Real*8 ioBuf8(1:sNx+1,1:sNy+1)
0063 #endif /* ALLOW_EXCH2 */
0064
0065 iLen = ILNBLNK(fName)
0066 #ifdef ALLOW_EXCH2
0067
c424ee7cc7 Jean*0068 tN = W2_myTileList(bi,bj)
6a2139a6bc Jean*0069 dNx = exch2_mydnx(tN)
0070 dNy = exch2_mydny(tN)
0071 tBx = exch2_tbasex(tN)
0072 tBy = exch2_tbasey(tN)
0073 tNx = exch2_tnx(tN)
0074 tNy = exch2_tny(tN)
0075
0076 CALL MDSFINDUNIT( dUnit, myThid )
0077 length_of_rec = MDS_RECLEN( fPrec, (dNx+1), myThid )
3d93c0a01e Ou W*0078 OPEN( dUnit, file=fName(1:iLen), status='old', _READONLY_ACTION
6a2139a6bc Jean*0079 & access='direct', recl=length_of_rec )
0080 j = 0
0081 jBase=(irec-1)*(dNy+1)
0082 IF ( fPrec.EQ.precFloat32 ) THEN
0083 DO jj=1+tBy,sNy+1+tBy
0084 READ(dUnit,rec=jj+jBase) (ioBuf4(i),i=1,dNx+1)
0085 #ifdef _BYTESWAPIO
0086 CALL MDS_BYTESWAPR4( (dNx+1), ioBuf4 )
0087 #endif
0088 j = j+1
0089 DO i=1,sNx+1
0090 array(i,j,bi,bj) = ioBuf4(i+tBx)
0091 ENDDO
0092 ENDDO
0093 ELSEIF ( fPrec.EQ.precFloat64 ) THEN
0094 DO jj=1+tBy,sNy+1+tBy
0095 READ(dUnit,rec=jj+jBase) (ioBuf8(i),i=1,dNx+1)
0096 #ifdef _BYTESWAPIO
0097 CALL MDS_BYTESWAPR8( (dNx+1), ioBuf8 )
0098 #endif
0099 j = j+1
0100 DO i=1,sNx+1
0101 array(i,j,bi,bj) = ioBuf8(i+tBx)
0102 ENDDO
0103 ENDDO
0104 ELSE
0105 WRITE(msgBuf,'(A,I8,A)') ' MDS_FACEF_READ_RS:',
0106 & fPrec, ' = illegal value for fPrec'
0107 CALL PRINT_ERROR( msgBuf, myThid )
0108 STOP 'ABNORMAL END: S/R MDS_FACEF_READ_RS'
0109 ENDIF
0110 CLOSE( dUnit )
0111
0112 #else /* ALLOW_EXCH2 */
0113
0114 CALL MDSFINDUNIT( dUnit, myThid )
0115 length_of_rec = MDS_RECLEN( fPrec, (sNx+1)*(sNy+1), myThid )
3d93c0a01e Ou W*0116 OPEN( dUnit, file=fName(1:iLen), status='old', _READONLY_ACTION
6a2139a6bc Jean*0117 & access='direct', recl=length_of_rec )
0118 IF ( fPrec.EQ.precFloat32 ) THEN
0119 READ(dUnit, rec=irec) ioBuf4
0120 #ifdef _BYTESWAPIO
0121 CALL MDS_BYTESWAPR4( (sNx+1)*(sNy+1), ioBuf4 )
0122 #endif
0123 DO j=1,sNy+1
0124 DO i=1,sNx+1
0125 array(i,j,bi,bj) = ioBuf4(i,j)
0126 ENDDO
0127 ENDDO
0128 ELSEIF ( fPrec.EQ.precFloat64 ) THEN
0129 READ(dUnit, rec=irec) ioBuf8
0130 #ifdef _BYTESWAPIO
0131 CALL MDS_BYTESWAPR8( (sNx+1)*(sNy+1), ioBuf8 )
0132 #endif
0133 DO j=1,sNy+1
0134 DO i=1,sNx+1
0135 array(i,j,bi,bj) = ioBuf8(i,j)
0136 ENDDO
0137 ENDDO
0138 ELSE
0139 WRITE(msgBuf,'(A,I8,A)') ' MDS_FACEF_READ_RS:',
0140 & fPrec, ' = illegal value for fPrec'
0141 CALL PRINT_ERROR( msgBuf, myThid )
0142 STOP 'ABNORMAL END: S/R MDS_FACEF_READ_RS'
0143 ENDIF
0144 CLOSE( dUnit )
0145
0146 #endif /* ALLOW_EXCH2 */
0147
0148
0149
0150 RETURN
0151 END