UPP  V11.0.0
 All Data Structures Files Functions Pages
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