File indexing completed on 2018-03-02 18:38:59 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
afb8c08a8f Jean*0001 #include "DIAG_OPTIONS.h"
0002
0003
0004
0005
0006
0007
ab01bc8ab2 Jean*0008 SUBROUTINE DIAGNOSTICS_INTERP_VERT(
861a196fd3 Jean*0009 I listId, md, ndId, ip, im, lm,
0010 U qtmp1,
21170727e9 Jean*0011 O qtmp2,
0012 I undefRL,
861a196fd3 Jean*0013 I myTime, myIter, myThid )
afb8c08a8f Jean*0014
0015
0016
861a196fd3 Jean*0017
afb8c08a8f Jean*0018
861a196fd3 Jean*0019
afb8c08a8f Jean*0020
0021
0022 IMPLICIT NONE
0023 #include "SIZE.h"
0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
0026 #include "GRID.h"
0027 #include "DIAGNOSTICS_SIZE.h"
0028 #include "DIAGNOSTICS.h"
0029
861a196fd3 Jean*0030 INTEGER NrMax
49f3c51920 Jean*0031 PARAMETER( NrMax = numLevels )
afb8c08a8f Jean*0032
0033
0034
0035
0036
0037
0038
0039
861a196fd3 Jean*0040
afb8c08a8f Jean*0041
21170727e9 Jean*0042
0043
afb8c08a8f Jean*0044
0045
0046
861a196fd3 Jean*0047 INTEGER listId, md, ndId, ip, im, lm
0048 _RL qtmp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy)
21170727e9 Jean*0049 _RL qtmp2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy)
0050 _RL undefRL
afb8c08a8f Jean*0051 _RL myTime
0052 INTEGER myIter, myThid
0053
0054
f8e6aa21ed Jean*0055
0056 #ifdef ALLOW_FIZHI
0057 _RL getcon
0058 EXTERNAL getcon
0059 #endif
0060
afb8c08a8f Jean*0061
0062
0063 INTEGER i, j, k
0064 INTEGER bi, bj
861a196fd3 Jean*0065 _RL qtmpsrf(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0066 INTEGER kLev
0067 _RL qprs (sNx,sNy)
0068 _RL qinp (sNx,sNy,NrMax)
0069 _RL pkz (sNx,sNy,NrMax)
0070 _RL pksrf(sNx,sNy)
21170727e9 Jean*0071 _RL pk, pkTop
861a196fd3 Jean*0072 _RL kappa
21170727e9 Jean*0073 INTEGER jpoint1, ipoint1
0074 INTEGER jpoint2, ipoint2
861a196fd3 Jean*0075 LOGICAL pInc
afb8c08a8f Jean*0076 CHARACTER*(MAX_LEN_MBUF) msgBuf
0077
0078
0079
861a196fd3 Jean*0080 IF (fflags(listId)(2:2).EQ.'P') THEN
0081 pkTop = 0. _d 0
f8e6aa21ed Jean*0082 kappa = atm_kappa
0083 #ifdef ALLOW_FIZHI
0084 IF ( useFIZHI ) kappa = getcon('KAPPA')
0085 #endif
861a196fd3 Jean*0086
0087
0088 IF (select_rStar.GT.0) THEN
0089 CALL DIAGNOSTICS_GET_POINTERS( 'RSURF ', listId,
0090 & jpoint1, ipoint1, myThid )
0091
0092 IF ( useFIZHI .AND.
0093 & gdiag(ndId)(10:10) .EQ. 'L') THEN
0094 CALL DIAGNOSTICS_GET_POINTERS('FIZPRES ', listId,
0095 & jpoint2, ipoint2, myThid )
0096 ELSE
0097 CALL DIAGNOSTICS_GET_POINTERS('RCENTER ', listId,
0098 & jpoint2, ipoint2, myThid )
0099 ENDIF
0100 IF ( ipoint1.EQ.0 .OR. ipoint2.EQ.0 ) THEN
e129400813 Jean*0101 WRITE(msgBuf,'(2A,I6,2A)') 'DIAGNOSTICS_INTERP_VERT: ',
861a196fd3 Jean*0102 & 'fails to interpolate diag.(#', ndId,'): ',flds(md,listId)
afb8c08a8f Jean*0103 CALL PRINT_ERROR( msgBuf , myThid )
0104 STOP 'ABNORMAL END: S/R DIAGNOSTICS_INTERP_VERT'
861a196fd3 Jean*0105 ENDIF
0106
0107 ipoint1 = ipoint1 + kdiag(jpoint1)*(lm-1)
0108 ipoint2 = ipoint2 + kdiag(jpoint2)*(lm-1)
afb8c08a8f Jean*0109
861a196fd3 Jean*0110 DO bj = myByLo(myThid), myByHi(myThid)
0111 DO bi = myBxLo(myThid), myBxHi(myThid)
21170727e9 Jean*0112 CALL DIAGNOSTICS_GET_DIAG( 1, undefRL,
861a196fd3 Jean*0113 O qtmpsrf(1-OLx,1-OLy,bi,bj),
0114 I jpoint1,0,ipoint1,0, bi,bj,myThid )
0115
21170727e9 Jean*0116 CALL DIAGNOSTICS_GET_DIAG( 0, undefRL,
0117 O qtmp2(1-OLx,1-OLy,1,bi,bj),
861a196fd3 Jean*0118 I jpoint2,0,ipoint2,0, bi,bj,myThid )
afb8c08a8f Jean*0119 ENDDO
861a196fd3 Jean*0120 ENDDO
0121
0122 ELSE
0123
0124
afb8c08a8f Jean*0125 DO bj = myByLo(myThid), myByHi(myThid)
0126 DO bi = myBxLo(myThid), myBxHi(myThid)
0127 DO j = 1-OLy,sNy+OLy
0128 DO i = 1-OLx,sNx+OLx
861a196fd3 Jean*0129 qtmpsrf(i,j,bi,bj) = Ro_surf(i,j,bi,bj)
afb8c08a8f Jean*0130 ENDDO
0131 ENDDO
861a196fd3 Jean*0132 DO k = 1,kdiag(ndId)
0133 DO j = 1-OLy,sNy+OLy
0134 DO i = 1-OLx,sNx+OLx
afb8c08a8f Jean*0135 qtmp2(i,j,k,bi,bj) = rC(k)
0136 ENDDO
0137 ENDDO
0138 ENDDO
0139 ENDDO
0140 ENDDO
861a196fd3 Jean*0141
0142
0143 ENDIF
0144
0145
0146 DO bj = myByLo(myThid), myByHi(myThid)
0147 DO bi = myBxLo(myThid), myBxHi(myThid)
0148
0149 DO j = 1,sNy
0150 DO i = 1,sNx
0151 pksrf(i,j) = qtmpsrf(i,j,bi,bj)**kappa
0152 ENDDO
0153 ENDDO
0154 IF ( useFIZHI.AND.gdiag(ndId)(10:10).EQ.'L') THEN
0155 pInc = .TRUE.
0156 DO k = 1,kdiag(ndId)
0157 DO j = 1,sNy
0158 DO i = 1,sNx
0159 qinp(i,j,k) = qtmp1(i,j,k,bi,bj)
0160 pkz(i,j,k) = qtmp2(i,j,k,bi,bj)**kappa
afb8c08a8f Jean*0161 ENDDO
0162 ENDDO
0163 ENDDO
861a196fd3 Jean*0164 ELSE
0165 DO k = 1,kdiag(ndId)
0166 pInc = .TRUE.
0167 kLev = kdiag(ndId)-k+1
0168
0169
0170 DO j = 1,sNy
0171 DO i = 1,sNx
0172 IF (maskC(i,j,kLev,bi,bj).NE.0.) THEN
0173 qinp(i,j,k)= qtmp1(i,j,kLev,bi,bj)
0174 ELSE
21170727e9 Jean*0175 qinp(i,j,k)= undefRL
861a196fd3 Jean*0176 ENDIF
0177 pkz(i,j,k) = qtmp2(i,j,kLev,bi,bj)**kappa
afb8c08a8f Jean*0178 ENDDO
0179 ENDDO
0180 ENDDO
861a196fd3 Jean*0181 ENDIF
0182
0183
0184 DO k = 1,nlevels(listId)
0185 pk = levs(k,listId)**kappa
0186 CALL DIAGNOSTICS_INTERP_P2P(
0187 O qprs,
0188 I qinp,pkz,pksrf,pkTop,pk,
21170727e9 Jean*0189 I undefRL,pInc,sNx*sNy,kdiag(ndId),myThid )
861a196fd3 Jean*0190
0191 DO j = 1,sNy
0192 DO i = 1,sNx
21170727e9 Jean*0193 IF (qprs(i,j).EQ.undefRL) THEN
861a196fd3 Jean*0194 qtmp1(i,j,k,bi,bj) = 0.
0195 ELSE
0196 qtmp1(i,j,k,bi,bj) = qprs(i,j)
0197 ENDIF
0198 ENDDO
0199 ENDDO
afb8c08a8f Jean*0200 ENDDO
0201
861a196fd3 Jean*0202
0203 ENDDO
0204 ENDDO
0205
0206 ENDIF
afb8c08a8f Jean*0207
0208 RETURN
0209 END