UPP v11.0.0
Loading...
Searching...
No Matches
CALTHTE.f
Go to the documentation of this file.
1
23
24 SUBROUTINE calthte(P1D,T1D,Q1D,THTE)
25
26!
27!
28 use params_mod, only: d00, eps, oneps, d01, h1m12, p1000, h1
29 use ctlblk_mod, only: jsta, jend, im, spval, ista, iend
30!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
31 implicit none
32!
33 real,PARAMETER :: KG2G=1.e3
34 real,PARAMETER :: D35=3.5,d4805=4.805,h2840=2840.,h55=55.
35 real,PARAMETER :: D2845=0.2845,d00028=0.00028,d3376=3.376
36 real,PARAMETER :: D00254=0.00254,d00081=0.00081,d81=0.81
37 real,PARAMETER :: D28=0.28,h2675=2675.
38!
39! DECLARE VARIABLES.
40!
41 REAL,dimension(ista:iend,jsta:jend),intent(in) :: P1D,T1D,Q1D
42 REAL,dimension(ista:iend,jsta:jend),intent(inout) :: THTE
43
44 integer I,J
45 real P,T,Q,EVP,RMX,CKAPA,RKAPA,ARG,DENOM,TLCL,PLCL,FAC, &
46 eterm,thetae
47!
48!***************************************************************
49! START CALTHTE.
50!
51! ZERO THETA-E ARRAY
52!$omp parallel do private(i,j)
53 DO j=jsta,jend
54 DO i=ista,iend
55 thte(i,j) = d00
56 ENDDO
57 ENDDO
58!
59! COMPUTE THETA-E.
60!
61! DO J=JSTA_M,JEND_M
62! DO I=ISTA_M,IEND_M
63!$omp parallel do private(i,j,p,t,q,evp,rmx,ckapa,rkapa,arg,denom,tlcl,plcl,fac,eterm,thetae)
64 DO j=jsta,jend
65 DO i=ista,iend
66 IF(p1d(i,j)<spval.and.t1d(i,j)<spval.and.q1d(i,j)<spval)THEN
67 p = p1d(i,j)
68 t = t1d(i,j)
69 q = q1d(i,j)
70 evp = p*q/(eps+oneps*q)
71 rmx = eps*evp/(p-evp)
72 ckapa = d2845*(1.-d28*rmx)
73 rkapa = 1./ckapa
74 arg = max(h1m12, evp*d01)
75 denom = d35*log(t) - log(evp*d01) - d4805
76 tlcl = h2840/denom + h55
77 plcl = p*(tlcl/t)**rkapa
78 fac = (p1000/p)**ckapa
79 eterm = (d3376/tlcl-d00254)*(rmx*kg2g*(h1+d81*rmx))
80 thetae = t*fac*exp(eterm)
81 thte(i,j)= thetae
82 ENDIF
83 ENDDO
84 ENDDO
85!
86! END OF ROUTINE.
87!
88 RETURN
89 END