UPP v11.0.0
Loading...
Searching...
No Matches
CALRCH.f
Go to the documentation of this file.
1
24 SUBROUTINE calrch(EL,RICHNO)
25
26!
27 use vrbls3d, only: pmid, q, t, uh, vh, zmid, q2
28 use masks, only: vtm
29 use params_mod, only: h10e5, capa, d608,h1, epsq2, g, beta
30 use ctlblk_mod, only: jsta, jend, spval, lm1, jsta_m, jend_m, im, &
31 jsta_2l, jend_2u, lm, &
32 ista, iend, ista_m, iend_m, ista_2l, iend_2u
33 use gridspec_mod, only: gridtype
34!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
35 implicit none
36!
37! DECLARE VARIABLES.
38!
39 REAL,intent(in) :: EL(ista_2l:iend_2u,jsta_2l:jend_2u,LM)
40 REAL,intent(inout) :: RICHNO(ista_2l:iend_2u,jsta_2l:jend_2u,LM)
41!
42 REAL, ALLOCATABLE :: THV(:,:,:)
43 integer I,J,L,IW,IE
44 real APE,UHKL,ULKL,VHKL,VLKL,WNDSL,WNDSLP,RDZKL, &
45 dthvkl,dukl,dvkl,ri,ct,cs
46! real APE,UHKL,ULKL,VHKL,VLKL,WNDSL,WNDSLP,DZKL,RDZKL,Q2KL,QROOT,ELKL, &
47! ELKLSQ,DTHVKL,DUKL,DVKL,RI,CT,CS
48!
49!
50!*************************************************************************
51! START CALRCH HERE.
52!
53 ALLOCATE ( thv(ista_2l:iend_2u,jsta_2l:jend_2u,lm) )
54! INITIALIZE ARRAYS.
55!
56!$omp parallel do
57 DO l = 1,lm
58 DO j=jsta,jend
59 DO i=ista,iend
60 richno(i,j,l)=spval
61 ENDDO
62 ENDDO
63 ENDDO
64!
65! COMPUTE VIRTUAL POTENTIAL TEMPERATURE.
66!
67!$omp parallel do private(i,j,ape)
68 DO l=lm,1,-1
69 DO j=jsta,jend
70 DO i=ista,iend
71 ape = (h10e5/pmid(i,j,l))**capa
72 thv(i,j,l) = (q(i,j,l)*d608+h1)*t(i,j,l)*ape
73 ENDDO
74 ENDDO
75 ENDDO
76!
77! COMPUTE GRADIENT RICHARDSON NUMBER AS CODED IN ETA MODEL
78! SUBROUTINE PROFQ2.F. OUTER LOOP OVER THE VERTICAL.
79! INTTER LOOP OVER THE HORIZONTAL.
80!
81!!$omp parallel do private(i,j,l,ie,iw,cs,ct,dthvkl,dukl,dvkl, &
82!!$omp& rdzkl,ri,uhkl,ulkl,vhkl,vlkl,wndsl,wndslp)
83 DO l = 1,lm1
84!
85 if(gridtype /= 'A')THEN
86 call exch(vtm(1,jsta_2l,l))
87 call exch(uh(1,jsta_2l,l))
88 call exch(vh(1,jsta_2l,l))
89 call exch(vtm(1,jsta_2l,l+1))
90 call exch(uh(1,jsta_2l,l+1))
91 call exch(vh(1,jsta_2l,l+1))
92 end if
93
94 DO j=jsta_m,jend_m
95 DO i=ista_m,iend_m
96!
97 IF(gridtype == 'A')THEN
98 uhkl = uh(i,j,l)
99 ulkl = uh(i,j,l+1)
100 vhkl = vh(i,j,l)
101 vlkl = vh(i,j,l+1)
102 ELSE IF(gridtype == 'E')THEN
103 ie = i+mod(j+1,2)
104 iw = i+mod(j+1,2)-1
105!
106! WE NEED (U,V) WINDS AT A MASS POINT. FOUR POINT
107! AVERAGE (U,V) WINDS TO MASS POINT. NORMALIZE FOUR
108! POINT AVERAGE BY THE ACTUAL NUMBER OF (U,V) WINDS
109! USED IN THE AVERAGING. VTM=1 IF WIND POINT IS
110! ABOVE GROUND. VTM=0 IF BELOW GROUND.
111!
112 wndsl = vtm(i,j-1,l)+vtm(iw,j,l)+vtm(ie,j,l)+vtm(i,j+1,l)
113 wndslp = vtm(i,j-1,l+1) + vtm(iw,j,l+1)+ &
114 vtm(ie,j,l+1) + vtm(i,j+1,l+1)
115 IF(wndsl == 0. .OR. wndslp == 0.) cycle
116 uhkl = (uh(i,j-1,l)+uh(iw,j,l)+uh(ie,j,l)+uh(i,j+1,l))/wndsl
117 ulkl = (uh(i,j-1,l+1)+uh(iw,j,l+1)+uh(ie,j,l+1)+ &
118 uh(i,j+1,l+1))/wndslp
119 vhkl = (vh(i,j-1,l)+vh(iw,j,l)+vh(ie,j,l)+vh(i,j+1,l))/wndsl
120 vlkl = (vh(i,j-1,l+1)+vh(iw,j,l+1)+vh(ie,j,l+1)+ &
121 vh(i,j+1,l+1))/wndslp
122 ELSE IF(gridtype == 'B')THEN
123 ie = i
124 iw = i-1
125 uhkl = (uh(iw,j-1,l)+uh(iw,j,l)+uh(ie,j-1,l)+uh(i,j,l))/4.0
126 ulkl = (uh(iw,j-1,l+1)+uh(iw,j,l+1)+uh(ie,j-1,l+1)+ &
127 uh(i,j,l+1))/4.0
128 vhkl = (vh(iw,j-1,l)+vh(iw,j,l)+vh(ie,j-1,l)+vh(i,j,l))/4.0
129 vlkl = (vh(iw,j-1,l+1)+vh(iw,j,l+1)+vh(ie,j-1,l+1)+ &
130 vh(i,j,l+1))/4.0
131 END IF
132
133 rdzkl = 1.0 / (zmid(i,j,l)-zmid(i,j,l+1))
134
135! Q2KL = MAX(Q2(I,J,L),0.00001)
136! QROOT = SQRT(Q2KL)
137! ELKL = EL(I,J,L)
138! ELKL = MAX(ELKL,EPSQ2)
139! ELKLSQ = ELKL*ELKL
140
141 dthvkl = thv(i,j,l)-thv(i,j,l+1)
142 dukl = (uhkl-ulkl) * rdzkl
143 dvkl = (vhkl-vlkl) * rdzkl
144 cs = dukl*dukl + dvkl*dvkl
145!
146! COMPUTE GRADIENT RICHARDSON NUMBER.
147!
148 IF(cs <= 1.e-8) THEN
149!
150! WIND SHEAR IS VANISHINGLY SMALL - SO SET RICHARDSON
151! NUMBER TO POST PROCESSOR SPECIAL VALUE.
152!
153 richno(i,j,l) = spval
154!
155 ELSE
156!
157! WIND SHEAR LARGE ENOUGH TO USE RICHARDSON NUMBER.
158!
159 ct = -1.*g*beta*dthvkl*rdzkl
160 ri = -ct/cs
161 richno(i,j,l) = ri
162 ENDIF
163!
164 ENDDO
165 ENDDO
166 ENDDO ! end of l loop
167!
168 DEALLOCATE (thv)
169! END OF ROUTINE.
170!
171 RETURN
172 END
173