UPP v11.0.0
Loading...
Searching...
No Matches
DEWPOINT.f
Go to the documentation of this file.
1
44 SUBROUTINE dewpoint( VP, TD)
45
46 use ctlblk_mod, only: jsta, jend, im, spval, ista, iend
47!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
48 implicit none
49!
50! NT IS THE TABLE SIZE
51 integer,PARAMETER :: NT=2000
52!...TRANSLATED BY FPP 3.00Z36 11/09/90 14:48:53
53!...SWITCHES: OPTON=I47,OPTOFF=VAE0
54 real,intent(out) :: TD(ista:iend,jsta:jend)
55 real,intent(in) :: VP(ista:iend,jsta:jend)
56 real TDP(NT)
57!jw
58 integer NN,I,J,JNT
59 real rvp1,rvp2,rt3,rvp3,rlog3,ra,rb,rapb,rtest,rnt,rdvp
60 real rgs,rvp,rlvp,rn,rd,rch,rt,w1,w2
61 real A,B,DNTM1
62
63 logical :: jcontinue=.true.
64
65! PREPARE THE TABLE (TDP=DEWPT AS FCN OF VAPOR PRESS).
66! RANGE IN CENTIBARS IS FROM RVP1 THRU RVP2
67 rvp1 = 0.0001e0
68 rvp2 = 10.e0
69! THE TRIPLE POINT
70 rt3 = 273.16e0
71! VAPOR PRESS AT THE TRIPLE POINT
72 rvp3 = 0.611e0
73 rlog3 = log(rvp3)
74! (SPEC HT OF WATER -CSUBP OF VAPOR)/GAS CONST OF VAPOR.
75 ra = 5.0065e0
76! LATENT HEAT AT T3/(GAS CONST OF VAPOR * TRIPLE PT TEMP).
77 rb = 19.83923e0
78 rapb = ra + rb
79! CRITERION FOR CONVERGENCE OF NEWTON ITERATION
80 rtest = 1.e-6
81!MEB RTEST=1.E-8 ! PROBABLY WON'T CONVERGE WITH 32-BIT AT THIS CRITERION
82!
83 rnt = float(nt)
84! TABLE INCREMENT IN VAPOR PRESS
85 rdvp = (rvp2-rvp1)/(rnt-1.e0)
86! RGS WILL BE THE GUESSED VALUE OF (T3 / DEWPOINT)
87 rgs = 1.e0
88 rvp = rvp1-rdvp
89!
90 DO 20 nn=1,nt
91 rvp=rvp+rdvp
92 rlvp=log(rvp)-rlog3-rapb
93! ***** ENTER NEWTON ITERATION LOOP
94 jcontinue=.true.
95 do while (jcontinue)
96 10 rn=ra*log(rgs)-rapb*rgs-rlvp
97! THAT WAS VALUE OF FUNCTION
98! NOW GET ITS DERIVATIVE
99 rd=(ra/rgs)-rapb
100! THE DESIRED CHANGE IN THE GUESS
101 rch=rn/rd
102 IF( abs(rch) < rtest ) jcontinue=.false.
103! NEED MORE ITERATIONS
104 DO WHILE (abs(rch) >= rtest)
105 rgs=rgs-rch
106 EXIT
107 ENDDO
108 ENDDO
109! *****
110! HAVE ACCURATE ENUF VALUE OF RGS=T3/DEWPOINT.
111 15 rt=rt3/rgs
112 tdp(nn)=rt
113!
114 20 CONTINUE
115! PRINT 25,RVP1,RVP2,TDP(1),TDP(NT)
116! 25 FORMAT(/'0', 'IN SUBROUTINE DEWPOINT, THE DEWPT TABLE ',
117! 1 'HAS RVP1=', 1PE13.6, ', RVP2=', 1PE13.6,
118! 2 ', TDP(1)=', 1PE13.6, ', AND TDP(NT)=',
119! 3 1PE13.6, '.'/)
120! CONSTANTS FOR USING THE TABLE
121 a = 1./rdvp
122 b = 1. - a*rvp1
123 dntm1 = float(nt) -.01
124!
125!X END IF
126!
127! *********** ENTER TO USE THE TABLE. ************
128!
129!$omp parallel do private(i,j,w1,w2,jnt)
130 DO j=jsta,jend
131 DO i=ista,iend
132 IF(vp(i,j)<spval)THEN
133 w1 = min(max((a*vp(i,j)+b),1.0),dntm1)
134 w2 = aint(w1)
135 jnt = int(w2)
136 td(i,j) = tdp(jnt) + (w1-w2)*(tdp(jnt+1)-tdp(jnt))
137 ELSE
138 td(i,j) = spval
139 ENDIF
140 ENDDO
141 ENDDO
142!
143!
144 RETURN
145 END