Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / var / convertor / wave2grid_kma / ZE2TVE.inc
blob92f0349504109cdac88e62b176b4acec281b490f
1       SUBROUTINE ZE2TVE( Z, TV, PS,       A, B, IMAX, JMAX, LMAX,
2      1                   VLG, WRK1, WRK2, WRK3, WRK4, WRK5, WRK6 )
4 C     INPUT   Z   (I,J,L) : GEOPOTENTIAL HEIGHT(M)
5 C             PS  (I,J)   : SURFACE PRESSURE(HPA)
6 C     OUTPUT  TV  (I,J,L) : VIRTUAL TEMPERATURE(K)
7 C     CONTROL DLG (L)     : PRESSURE OF  INPUT VARIABLE(Z ) LEVELS
8 C             VLG (L)     : PRESSURE OF OUTPUT VARIABLE(TV) LEVELS
9 C             A(L), B(L)  : A+B*PS DEFINITION OF ETA-HALF LEVEL
11       DIMENSION Z(IMAX*JMAX,LMAX), TV(IMAX*JMAX,LMAX), PS(IMAX*JMAX),
12      \     A(LMAX), B(LMAX),TV2(IMAX*JMAX,LMAX),
13      \     VLG(IMAX*JMAX,LMAX)
14       DIMENSION WRK1(IMAX*JMAX,LMAX), WRK2(IMAX*JMAX,LMAX),
15      1          WRK3(IMAX*JMAX,LMAX), WRK4(IMAX*JMAX,LMAX),
16      2          WRK5(IMAX*JMAX,LMAX), WRK6(IMAX*JMAX,LMAX)
18         DO 90 L = 1, LMAX
19         DO 90 I = 1, IMAX*JMAX
20           WRK1(I,L) = A(L)+B(L)*PS(I)
21           WRK2(I,L) = LOG( WRK1(I,L) )
22    90   CONTINUE
23         DO 100 L = 1, LMAX-1
24         DO 100 I = 1, IMAX*JMAX
25           VLG(I,L) = (WRK1(I,L)*WRK2(I,L)-WRK1(I,L+1)*WRK2(I,L+1))
26      1             / (WRK1(I,L)-WRK1(I,L+1)) - 1.0
27   100   CONTINUE
28         DO 110 I = 1, IMAX*JMAX
29           VLG(I,LMAX) = LOG(0.5*(A(LMAX)+B(LMAX)*PS(I)))
30   110   CONTINUE
31 CORG    CALL SPLDIF3( TV2, VLG, LMAX, Z, VLG, LMAX, IMAX*JMAX,
32 CORG W                WRK1, WRK2, WRK3, WRK4, WRK5, WRK6 )
33         CALL SPLDIF3_H(TV, VLG, LMAX, Z, VLG, LMAX, IMAX*JMAX,
34      W                WRK1, WRK2, WRK3, WRK4, WRK5, WRK6 )
36 C         CALL MONTWO(TV,TV2,'NEW  SPLINE','ORG  SPLINE',IMAX*JMAX,LMAX)
38       RETURN
39       END SUBROUTINE ZE2TVE