File indexing completed on 2024-12-17 18:32:17 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
7f9e3ec2e7 Jean*0001 #include "AIM_OPTIONS.h"
0002
0003
0004
0005
0006 SUBROUTINE AIM_WRITE_PHYS(
0007 I pref, suff, nNr, field,
0008 I kLev, bi, bj, iRec, myIter, myThid )
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 IMPLICIT NONE
0019
0020
0021 #include "AIM_SIZE.h"
0022
0023 #include "EEPARAMS.h"
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
ed4109f4a2 Jean*0036
7f9e3ec2e7 Jean*0037 CHARACTER*(*) pref, suff
0038 INTEGER nNr
0039 _RL field(sNx,sNy,nNr,MAX_NO_THREADS)
0040 INTEGER kLev, bi, bj, iRec, myIter, myThid
0041
0042 #ifdef ALLOW_AIM
0043
0044
0045 INTEGER ILNBLNK
0046 EXTERNAL ILNBLNK
0047
0048
0049 CHARACTER*(MAX_LEN_MBUF) msgBuf
0050 _RL tmpFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0051 INTEGER iL
0052 INTEGER i, j, k, Katm, nLoc
0053 INTEGER ith, biLoc, bjLoc
0054
0055
0056
0057
0058 #ifdef LOCBIN_IO_THREAD_SAFE
0059
0060 ith = myThid
0061 biLoc = bi
0062 bjLoc = bj
0063 #else /* LOCBIN_IO_THREAD_SAFE */
0064
0065 _BARRIER
0066 _BEGIN_MASTER( myThid )
0067 DO ith=1,nThreads
0068 biLoc = bi + myBxLo(ith) - 1
0069 bjLoc = bj + myByLo(ith) - 1
0070 #endif /* LOCBIN_IO_THREAD_SAFE */
0071
0072
0073
0074
0075 IF ( nNr.LT.1 .OR. nNr.GT.Nr ) THEN
0076 iL = ILNBLNK( pref )
0077 WRITE(msgBuf,'(A,I10,A,2I5,A,I4,2A)')
0078 & 'AIM_WRITE_PHYS (it=', myIter, ' bi,bj=', bi,bj,
0079 & ' iRec=', iRec, ' ): try to write: ', pref(1:iL)
0080 CALL PRINT_ERROR( msgBuf, myThid )
0081 WRITE(msgBuf,'(A,I4,A,I4)')
0082 & 'AIM_WRITE_PHYS: 3rd dim.(field)=',nNr,' has to be <',Nr
0083 CALL PRINT_ERROR( msgBuf , myThid)
0084 STOP 'ABNORMAL END: S/R AIM_WRITE_PHYS'
0085 ELSEIF ( kLev.NE.0 .AND. kLev.GT.nNr ) THEN
0086 iL = ILNBLNK( pref )
0087 WRITE(msgBuf,'(A,I10,A,2I5,A,I4,2A)')
0088 & 'AIM_WRITE_PHYS (it=', myIter, ' bi,bj=', bi,bj,
0089 & ' iRec=', iRec, ' ): try to write: ', pref(1:iL)
0090 CALL PRINT_ERROR( msgBuf, myThid )
0091 WRITE(msgBuf,'(A,I4,A,I4)')
0092 & 'AIM_WRITE_PHYS: kLev=', kLev,
0093 & ' out of bounds (dim=', nNr,' )'
0094 CALL PRINT_ERROR( msgBuf , myThid)
0095 STOP 'ABNORMAL END: S/R AIM_WRITE_PHYS'
0096 ENDIF
0097
0098
0099 nLoc = nNr
0100 IF ( kLev.GE.1 .AND. kLev.LE.nNr ) THEN
0101 nLoc = 1
0102 DO j=1,sNy
0103 DO i=1,sNx
0104 tmpFld(i,j,1) = field(i,j,kLev,ith)
0105 ENDDO
0106 ENDDO
0107 ELSEIF (nNr.EQ.Nr) THEN
0108
0109 DO k=1,Nr
0110 Katm = _KD2KA( k )
0111 DO j=1,sNy
0112 DO i=1,sNx
0113 tmpFld(i,j,k) = field(i,j,Katm,ith)
0114 ENDDO
0115 ENDDO
0116 ENDDO
0117 ELSE
0118
0119 DO k=1,nNr
0120 DO j=1,sNy
0121 DO i=1,sNx
0122 tmpFld(i,j,k) = field(i,j,k,ith)
0123 ENDDO
0124 ENDDO
0125 ENDDO
0126 ENDIF
0127
ed4109f4a2 Jean*0128
7f9e3ec2e7 Jean*0129 CALL WRITE_LOCAL_RL( pref, suff, nLoc, tmpFld,
ed4109f4a2 Jean*0130 & biLoc, bjLoc, iRec, myIter, 0 )
7f9e3ec2e7 Jean*0131
0132
0133
0134 #ifndef LOCBIN_IO_THREAD_SAFE
0135 ENDDO
0136 _END_MASTER( myThid )
0137 _BARRIER
0138 #endif /* ndef LOCBIN_IO_THREAD_SAFE */
0139
0140 #endif /* ALLOW_AIM */
0141 RETURN
0142 END