LMDZ
srtm_vrtqdr.F90
Go to the documentation of this file.
1 #ifdef RS6K
2 @process hot nostrict
3 #endif
4 SUBROUTINE srtm_vrtqdr &
5  & ( klev , kw,&
6  & pref , prefd, ptra , ptrad,&
7  & pdbt , prdnd, prup , prupd , ptdbt,&
8  & pfd , pfu &
9  & )
10 
11 !**** *SRTM_VRTQDR* - VERTICAL QUADRATURE
12 
13 ! PURPOSE.
14 ! --------
15 
16 ! THIS ROUTINE PERFORMS THE VERTICAL INTEGRATION
17 
18 !** INTERFACE.
19 ! ----------
20 
21 ! *SRTM_VRTQDR* IS CALLED FROM *SRTM_SPCVRT*
22 
23 ! IMPLICIT ARGUMENTS :
24 ! --------------------
25 
26 ! ==== INPUTS ===
27 ! ==== OUTPUTS ===
28 
29 ! METHOD.
30 ! -------
31 
32 ! EXTERNALS.
33 ! ----------
34 ! NONE
35 
36 ! REFERENCE.
37 ! ----------
38 
39 ! SEE RADIATION'S PART OF THE ECMWF RESEARCH DEPARTMENT
40 ! DOCUMENTATION, AND FOUQUART AND BONNEL (1980)
41 
42 ! AUTHOR.
43 ! -------
44 ! from Howard Barker
45 ! JEAN-JACQUES MORCRETTE *ECMWF*
46 
47 ! MODIFICATIONS.
48 ! --------------
49 ! ORIGINAL : 02-10-04
50 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
51 ! ------------------------------------------------------------------
52 
53 USE parkind1 ,ONLY : jpim ,jprb
54 USE yomhook ,ONLY : lhook, dr_hook
55 
56 USE parsrtm , ONLY : jplay, jpgpt
57 
58 !USE YOESWN , ONLY : NDBUG
59 
60 IMPLICIT NONE
61 
62 ! ------------------------------------------------------------------
63 
64 !* 0.1 ARGUMENTS
65 ! ---------
66 
67 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
68 INTEGER(KIND=JPIM),INTENT(IN) :: KW
69 REAL(KIND=JPRB) ,INTENT(IN) :: PREF(jplay+1)
70 REAL(KIND=JPRB) ,INTENT(IN) :: PREFD(jplay+1)
71 REAL(KIND=JPRB) ,INTENT(IN) :: PTRA(jplay+1)
72 REAL(KIND=JPRB) ,INTENT(IN) :: PTRAD(jplay+1)
73 REAL(KIND=JPRB) ,INTENT(IN) :: PDBT(jplay+1)
74 REAL(KIND=JPRB) ,INTENT(OUT) :: PRDND(jplay+1)
75 REAL(KIND=JPRB) ,INTENT(INOUT) :: PRUP(jplay+1)
76 REAL(KIND=JPRB) ,INTENT(INOUT) :: PRUPD(jplay+1)
77 REAL(KIND=JPRB) ,INTENT(IN) :: PTDBT(jplay+1)
78 REAL(KIND=JPRB) ,INTENT(INOUT) :: PFD(jplay+1,jpgpt)
79 REAL(KIND=JPRB) ,INTENT(INOUT) :: PFU(jplay+1,jpgpt)
80 ! ------------------------------------------------------------------
81 
82 ! ------------
83 
84 REAL(KIND=JPRB) :: ZTDN(jplay+1)
85 
86 INTEGER(KIND=JPIM) :: IKP, IKX, JK, I_NDBUG
87 
88 REAL(KIND=JPRB) :: ZREFLECT
89 REAL(KIND=JPRB) :: ZHOOK_HANDLE
90 
91 ! ------------------------------------------------------------------
92 
93 ! PREF(JK) direct reflectance
94 ! PREFD(JK) diffuse reflectance
95 ! PTRA(JK) direct transmittance
96 ! PTRAD(JK) diffuse transmittance
97 
98 ! PDBT(JK) layer mean direct beam transmittance
99 ! PTDBT(JK) total direct beam transmittance at levels
100 
101 IF (lhook) CALL dr_hook('SRTM_VRTQDR',0,zhook_handle)
102 i_ndbug=3
103 
104 !-- link lowest layer with surface
105 
106 zreflect=1.0_jprb / (1.0_jprb -prefd(klev+1)*prefd(klev))
107 prup(klev)=pref(klev)+(ptrad(klev)* &
108  & ((ptra(klev)-pdbt(klev))*prefd(klev+1)+ &
109  & pdbt(klev)*pref(klev+1)))*zreflect
110 prupd(klev)=prefd(klev)+ptrad(klev)* &
111  & ptrad(klev)*prefd(klev+1)*zreflect
112 
113 !IF (NDBUG.LE.1) THEN
114 ! print 9201,PRUP(KLEV),PRUPD(KLEV)
115 9201 format(1x,'link surf:',6e13.6)
116 ! print *,'SRTM_VRTQDR after linking with surface layer'
117 !END IF
118 
119 !-- pass from bottom to top
120 
121 DO jk=1,klev-1
122  ikp=klev+1-jk
123  ikx=ikp-1
124 ! print 9202,JK,IKP,IKX
125  9202 format(1x,'Pass from bottom to top:',3i3)
126  zreflect=1.0_jprb / (1.0_jprb -prupd(ikp)*prefd(ikx))
127  prup(ikx)=pref(ikx)+(ptrad(ikx)* &
128  & ((ptra(ikx)-pdbt(ikx))*prupd(ikp)+ &
129  & pdbt(ikx)*prup(ikp)))*zreflect
130  prupd(ikx)=prefd(ikx)+ptrad(ikx)* &
131  & ptrad(ikx)*prupd(ikp)*zreflect
132 
133 ! print 9203,PRUP(IKX),PRUPD(IKX)
134  9203 format(1x,'bot2top:',6e13.6)
135 ENDDO
136 !print *,'SRTM_VRTQDR after passing from bottom to top'
137 
138 !-- upper boundary conditions
139 
140 ztdn(1)=1.0_jprb
141 prdnd(1)=0.0_jprb
142 ztdn(2)=ptra(1)
143 prdnd(2)=prefd(1)
144 
145 !IF (NDBUG.LE.1) THEN
146 ! print 9204,ZTDN(1),PRDND(1),ZTDN(2),PRDND(2)
147 9204 format(1x,'link upper bound:',6e13.6)
148 ! print *,'SRTM_VRTQDR after upper boundary conditions'
149 !END IF
150 
151 !-- pass from top to bottom
152 
153 DO jk=2,klev
154  ikp=jk+1
155  zreflect=1.0_jprb / (1.0_jprb -prefd(jk)*prdnd(jk))
156  ztdn(ikp)=ptdbt(jk)*ptra(jk)+ &
157  & (ptrad(jk)*((ztdn(jk)-ptdbt(jk))+ &
158  & ptdbt(jk)*pref(jk)*prdnd(jk))) * zreflect
159  prdnd(ikp)=prefd(jk)+ptrad(jk)*ptrad(jk) &
160  & *prdnd(jk)*zreflect
161 
162 ! IF (NDBUG.LE.1) THEN
163 ! print 9205,ZTDN(IKP),PRDND(IKP)
164  9205 format(1x,'top2bot2:',6e13.6)
165 ! END IF
166 
167 ENDDO
168 !print *,'SRTM_VRTQDR after passing from top to bottom'
169 
170 !-- up and down-welling fluxes at levels
171 
172 DO jk=1,klev+1
173 ! IF (NDBUG.LE.1) THEN
174 ! print 9207,JK,PRDND(JK),PRUPD(JK)
175 ! print 9208,JK,PTDBT(JK),PRUP(JK),ZTDN(JK)
176  9207 format(1x,'A',i3,4e13.6)
177  9208 format(1x,'B',i3,4e13.6)
178 ! END IF
179 
180  zreflect=1.0_jprb / (1.0_jprb - prdnd(jk)*prupd(jk))
181  pfu(jk,kw)=(ptdbt(jk)*prup(jk) + &
182  & (ztdn(jk)-ptdbt(jk))*prupd(jk))*zreflect
183  pfd(jk,kw)=ptdbt(jk) + (ztdn(jk)-ptdbt(jk)+ &
184  & ptdbt(jk)*prup(jk)*prdnd(jk))*zreflect
185 
186 ! IF (NDBUG.LE.2) THEN
187 ! print 9206,JK,PFU(JK,KW),PFD(JK,KW)
188  9206 format(1x,'fluxes:',i3,6e13.6)
189 ! END IF
190 
191 ENDDO
192 !print *,'SRTM_VRTQDR after up and down flux'
193 
194 !print *,'SRTM_VRTQDR about to come out'
195 ! ------------------------------------------------------------------
196 
197 IF (lhook) CALL dr_hook('SRTM_VRTQDR',1,zhook_handle)
198 END SUBROUTINE srtm_vrtqdr
199 
integer(kind=jpim), parameter jplay
Definition: parsrtm.F90:19
integer, save klev
Definition: dimphy.F90:7
integer, parameter jprb
Definition: parkind1.F90:31
integer(kind=jpim), parameter jpgpt
Definition: parsrtm.F90:27
!$Header!c c INCLUDE fxyprim h c c c Fonctions in line c c REAL fyprim REAL rj c c il faut la calculer avant d appeler ces fonctions c c c Fonctions a changer selon x(x) et y(y) choisis.c-----------------------------------------------------------------c c.....ici
logical lhook
Definition: yomhook.F90:12
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
integer, parameter jpim
Definition: parkind1.F90:13
subroutine srtm_vrtqdr(KLEV, KW, PREF, PREFD, PTRA, PTRAD, PDBT, PRDND, PRUP, PRUPD, PTDBT, PFD, PFU)
Definition: srtm_vrtqdr.F90:10