GCC Code Coverage Report


Directory: ./
File: rad/srtm_srtm_224gp.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 96 0.0%
Branches: 0 46 0.0%

Line Branch Exec Source
1 !
2 ! $Id: srtm_srtm_224gp.F90 2027 2014-04-29 13:38:53Z fairhead $
3 !
4 SUBROUTINE SRTM_SRTM_224GP &
5 & ( KIDIA , KFDIA , KLON , KLEV , KSW , KOVLP ,&
6 & PAER , PALBD , PALBP , PAPH , PAP ,&
7 & PTS , PTH , PT ,&
8 & PQ , PCCO2 , POZN , PRMU0 ,&
9 & PFRCL , PTAUC , PASYC , POMGC ,&
10 & PALBT , PFSUX , PFSUC &
11 & )
12
13 !-- interface to RRTM_SW
14 ! JJMorcrette 030225
15
16 USE PARKIND1 ,ONLY : JPIM ,JPRB
17 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
18
19 USE PARSRTM , ONLY : JPLAY
20 !USE YOERDI , ONLY : RCH4 , RN2O
21 USE YOERAD , ONLY : NAER
22 USE YOESRTAER, ONLY : RSRTAUA, RSRPIZA, RSRASYA
23 USE YOMPHY3 , ONLY : RII0
24 USE YOMCST , ONLY : RI0
25
26
27
28 IMPLICIT NONE
29
30 ! $Id: clesphys.h 3435 2019-01-22 15:21:59Z fairhead $
31 !
32 ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
33 ! veillez \`a n'utiliser que des ! pour les commentaires
34 ! et \`a bien positionner les & des lignes de continuation
35 ! (les placer en colonne 6 et en colonne 73)
36 !
37 !..include cles_phys.h
38 !
39 INTEGER iflag_cycle_diurne
40 LOGICAL soil_model,new_oliq,ok_orodr,ok_orolf
41 LOGICAL ok_limitvrai
42 LOGICAL ok_all_xml
43 LOGICAL ok_lwoff
44 INTEGER nbapp_rad, iflag_con, nbapp_cv, nbapp_wk, iflag_ener_conserv
45 REAL co2_ppm, co2_ppm0, solaire
46 !FC
47 REAL Cd_frein
48 LOGICAL ok_suntime_rrtm
49 REAL(kind=8) RCO2, RCH4, RN2O, RCFC11, RCFC12
50 REAL(kind=8) RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act
51 REAL(kind=8) CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt
52 !IM ajout CFMIP2/CMIP5
53 REAL(kind=8) RCO2_per,RCH4_per,RN2O_per,RCFC11_per,RCFC12_per
54 REAL(kind=8) CH4_ppb_per,N2O_ppb_per,CFC11_ppt_per,CFC12_ppt_per
55
56 !OM ---> correction du bilan d'eau global
57 !OM Correction sur precip KE
58 REAL cvl_corr
59 !OM Fonte calotte dans bilan eau
60 LOGICAL ok_lic_melt
61 !OB Depot de vapeur d eau sur la calotte pour le bilan eau
62 LOGICAL ok_lic_cond
63
64 !IM simulateur ISCCP
65 INTEGER top_height, overlap
66 !IM seuils cdrm, cdrh
67 REAL cdmmax, cdhmax
68 !IM param. stabilite s/ terres et en dehors
69 REAL ksta, ksta_ter, f_ri_cd_min
70 !IM ok_kzmin : clef calcul Kzmin dans la CL de surface cf FH
71 LOGICAL ok_kzmin
72 !IM, MAFo fmagic, pmagic : parametres - additionnel et multiplicatif -
73 ! pour regler l albedo sur ocean
74 REAL pbl_lmixmin_alpha
75 REAL fmagic, pmagic
76 ! Hauteur (imposee) du contenu en eau du sol
77 REAL qsol0,albsno0,evap0
78 ! Frottement au sol (Cdrag)
79 Real f_cdrag_ter,f_cdrag_oce
80 REAL min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce,f_z0qh_oce
81 REAL z0m_seaice,z0h_seaice
82 INTEGER iflag_gusts,iflag_z0_oce
83
84 ! Rugoro
85 Real f_rugoro,z0min
86
87 ! tau_gl : constante de rappel de la temperature a la surface de la glace
88 REAL tau_gl
89
90 !IM lev_histhf : niveau sorties 6h
91 !IM lev_histday : niveau sorties journalieres
92 !IM lev_histmth : niveau sorties mensuelles
93 !IM lev_histdayNMC : on peut sortir soit sur 8 (comme AR5) ou bien
94 ! sur 17 niveaux de pression
95 INTEGER lev_histhf, lev_histday, lev_histmth
96 INTEGER lev_histdayNMC
97 Integer lev_histins, lev_histLES
98 !IM ok_histNMC : sortie fichiers niveaux de pression (histmthNMC, histdayNMC, histhfNMC)
99 !IM freq_outNMC : frequences de sortie fichiers niveaux de pression (histmthNMC, histdayNMC, histhfNMC)
100 !IM freq_calNMC : frequences de calcul fis. hist*NMC.nc
101 LOGICAL ok_histNMC(3)
102 INTEGER levout_histNMC(3)
103 REAL freq_outNMC(3) , freq_calNMC(3)
104 CHARACTER(len=4) type_run
105 ! aer_type: pour utiliser un fichier constant dans readaerosol
106 CHARACTER(len=8) :: aer_type
107 LOGICAL ok_regdyn
108 REAL lonmin_ins, lonmax_ins, latmin_ins, latmax_ins
109 REAL ecrit_ins, ecrit_hf, ecrit_day
110 REAL ecrit_mth, ecrit_tra, ecrit_reg
111 REAL ecrit_LES
112 REAL freq_ISCCP, ecrit_ISCCP
113 REAL freq_COSP, freq_AIRS
114 LOGICAL :: ok_cosp,ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP
115 LOGICAL :: ok_airs
116 INTEGER :: ip_ebil_phy, iflag_rrtm, iflag_ice_thermo, NSW, iflag_albedo
117 LOGICAL :: ok_chlorophyll
118 LOGICAL :: ok_strato
119 LOGICAL :: ok_hines, ok_gwd_rando
120 LOGICAL :: ok_qch4
121 LOGICAL :: ok_conserv_q
122 LOGICAL :: adjust_tropopause
123 LOGICAL :: ok_daily_climoz
124 ! flag to bypass or not the phytrac module
125 INTEGER :: iflag_phytrac
126
127 COMMON/clesphys/ &
128 ! REAL FIRST
129 & co2_ppm, solaire &
130 & , RCO2, RCH4, RN2O, RCFC11, RCFC12 &
131 & , RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act &
132 & , RCO2_per, RCH4_per, RN2O_per, RCFC11_per, RCFC12_per &
133 & , CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt &
134 & , CH4_ppb_per, N2O_ppb_per, CFC11_ppt_per, CFC12_ppt_per &
135 & , cdmmax,cdhmax,ksta,ksta_ter,f_ri_cd_min,pbl_lmixmin_alpha &
136 & , fmagic, pmagic &
137 & , f_cdrag_ter,f_cdrag_oce,f_rugoro,z0min,tau_gl &
138 & , min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce,f_z0qh_oce &
139 & , z0m_seaice,z0h_seaice &
140 & , freq_outNMC, freq_calNMC &
141 & , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins &
142 & , freq_ISCCP, ecrit_ISCCP, freq_COSP, freq_AIRS &
143 & , cvl_corr &
144 & , qsol0,albsno0,evap0 &
145 & , co2_ppm0 &
146 !FC
147 & , Cd_frein &
148 & , ecrit_LES &
149 & , ecrit_ins, ecrit_hf, ecrit_day &
150 & , ecrit_mth, ecrit_tra, ecrit_reg &
151 ! THEN INTEGER AND LOGICALS
152 & , top_height &
153 & , iflag_cycle_diurne, soil_model, new_oliq &
154 & , ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad &
155 & , iflag_con, nbapp_cv, nbapp_wk &
156 & , iflag_ener_conserv &
157 & , ok_suntime_rrtm &
158 & , overlap &
159 & , ok_kzmin &
160 & , lev_histhf, lev_histday, lev_histmth &
161 & , lev_histins, lev_histLES, lev_histdayNMC, levout_histNMC &
162 & , ok_histNMC &
163 & , type_run, ok_regdyn, ok_cosp, ok_airs &
164 & , ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP &
165 & , ip_ebil_phy &
166 & , iflag_gusts ,iflag_z0_oce &
167 & , ok_lic_melt, ok_lic_cond, aer_type &
168 & , iflag_rrtm, ok_strato,ok_hines, ok_qch4 &
169 & , iflag_ice_thermo, ok_gwd_rando, NSW, iflag_albedo &
170 & , ok_chlorophyll,ok_conserv_q, adjust_tropopause &
171 & , ok_daily_climoz, ok_all_xml, ok_lwoff &
172 & , iflag_phytrac
173
174 save /clesphys/
175 !$OMP THREADPRIVATE(/clesphys/)
176
177 !-- Input arguments
178
179 INTEGER(KIND=JPIM),INTENT(IN) :: KLON
180 INTEGER(KIND=JPIM) :: KLEV! UNDETERMINED INTENT
181 INTEGER(KIND=JPIM) :: KSW! UNDETERMINED INTENT
182 INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA
183 INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA
184 INTEGER(KIND=JPIM),INTENT(IN) :: KOVLP
185 REAL(KIND=JPRB) ,INTENT(IN) :: PAER(KLON,6,KLEV) ! top to bottom
186 REAL(KIND=JPRB) ,INTENT(IN) :: PALBD(KLON,KSW)
187 REAL(KIND=JPRB) ,INTENT(IN) :: PALBP(KLON,KSW)
188 REAL(KIND=JPRB) ,INTENT(IN) :: PAPH(KLON,KLEV+1)
189 REAL(KIND=JPRB) ,INTENT(IN) :: PAP(KLON,KLEV)
190 REAL(KIND=JPRB) ,INTENT(IN) :: PTS(KLON)
191 REAL(KIND=JPRB) ,INTENT(IN) :: PTH(KLON,KLEV+1)
192 REAL(KIND=JPRB) ,INTENT(IN) :: PT(KLON,KLEV)
193 REAL(KIND=JPRB) ,INTENT(IN) :: PQ(KLON,KLEV)
194 REAL(KIND=JPRB) ,INTENT(IN) :: PCCO2
195 REAL(KIND=JPRB) ,INTENT(IN) :: POZN(KLON,KLEV)
196 REAL(KIND=JPRB) ,INTENT(IN) :: PRMU0(KLON)
197 REAL(KIND=JPRB) ,INTENT(IN) :: PFRCL(KLON,KLEV) ! bottom to top
198 REAL(KIND=JPRB) ,INTENT(IN) :: PTAUC(KLON,KSW,KLEV) ! bottom to top
199 REAL(KIND=JPRB) ,INTENT(IN) :: PASYC(KLON,KSW,KLEV) ! bottom to top
200 REAL(KIND=JPRB) ,INTENT(IN) :: POMGC(KLON,KSW,KLEV) ! bottom to top
201 REAL(KIND=JPRB) :: PALBT(KLON,KSW) ! Argument NOT used
202 REAL(KIND=JPRB) ,INTENT(OUT) :: PFSUX(KLON,2,KLEV+1)
203 REAL(KIND=JPRB) ,INTENT(OUT) :: PFSUC(KLON,2,KLEV+1)
204 !INTEGER_M :: KMOL, KCLDATM, KNFLAG, KCEFLAG, KIQFLAG, KSTR
205
206 !-- Output arguments
207
208 !-----------------------------------------------------------------------
209
210 !-- dummy integers
211
212 INTEGER(KIND=JPIM) :: ICLDATM, INFLAG, ICEFLAG, I_LIQFLAG, I_NMOL, I_NSTR
213
214 INTEGER(KIND=JPIM) :: IK, IMOL, J1, J2, JAE, JL, JK, JSW
215
216 !-- dummy reals
217
218 REAL(KIND=JPRB) :: Z_PZ(0:JPLAY) , Z_TZ(0:JPLAY) , Z_PAVEL(JPLAY) , Z_TAVEL(JPLAY)
219 REAL(KIND=JPRB) :: Z_COLDRY(JPLAY) , Z_COLMOL(JPLAY) , Z_WKL(35,JPLAY)
220 REAL(KIND=JPRB) :: Z_CO2MULT(JPLAY), Z_COLCH4(JPLAY) , Z_COLCO2(JPLAY) , Z_COLH2O(JPLAY)
221 REAL(KIND=JPRB) :: Z_COLN2O(JPLAY) , Z_COLO2(JPLAY) , Z_COLO3(JPLAY)
222 REAL(KIND=JPRB) :: Z_FORFAC(JPLAY) , Z_FORFRAC(JPLAY), Z_SELFFAC(JPLAY), Z_SELFFRAC(JPLAY)
223 REAL(KIND=JPRB) :: Z_FAC00(JPLAY) , Z_FAC01(JPLAY) , Z_FAC10(JPLAY) , Z_FAC11(JPLAY)
224 REAL(KIND=JPRB) :: Z_TBOUND , Z_ONEMINUS , ZRMU0 , ZADJI0
225 REAL(KIND=JPRB) :: ZALBD(KSW) , ZALBP(KSW) , ZFRCL(JPLAY)
226 REAL(KIND=JPRB) :: ZTAUC(JPLAY,KSW), ZASYC(JPLAY,KSW), ZOMGC(JPLAY,KSW)
227 REAL(KIND=JPRB) :: ZTAUA(JPLAY,KSW), ZASYA(JPLAY,KSW), ZOMGA(JPLAY,KSW)
228
229 REAL(KIND=JPRB) :: ZBBCD(JPLAY+1), ZBBCU(JPLAY+1), ZBBFD(JPLAY+1), ZBBFU(JPLAY+1)
230 REAL(KIND=JPRB) :: ZUVCD(JPLAY+1), ZUVCU(JPLAY+1), ZUVFD(JPLAY+1), ZUVFU(JPLAY+1)
231 REAL(KIND=JPRB) :: ZVSCD(JPLAY+1), ZVSCU(JPLAY+1), ZVSFD(JPLAY+1), ZVSFU(JPLAY+1)
232 REAL(KIND=JPRB) :: ZNICD(JPLAY+1), ZNICU(JPLAY+1), ZNIFD(JPLAY+1), ZNIFU(JPLAY+1)
233
234 INTEGER(KIND=JPIM) :: I_LAYTROP, I_LAYSWTCH, I_LAYLOW
235 INTEGER(KIND=JPIM) :: INDFOR(JPLAY), INDSELF(JPLAY)
236 INTEGER(KIND=JPIM) :: JP(JPLAY), JT(JPLAY), JT1(JPLAY)
237
238 REAL(KIND=JPRB) :: Z_AMD ! Effective molecular weight of dry air (g/mol)
239 REAL(KIND=JPRB) :: Z_AMW ! Molecular weight of water vapor (g/mol)
240 REAL(KIND=JPRB) :: Z_AMCO2 ! Molecular weight of carbon dioxide (g/mol)
241 REAL(KIND=JPRB) :: Z_AMO ! Molecular weight of ozone (g/mol)
242 REAL(KIND=JPRB) :: Z_AMCH4 ! Molecular weight of methane (g/mol)
243 REAL(KIND=JPRB) :: Z_AMN2O ! Molecular weight of nitrous oxide (g/mol)
244 REAL(KIND=JPRB) :: Z_AMC11 ! Molecular weight of CFC11 (g/mol) - CFCL3
245 REAL(KIND=JPRB) :: Z_AMC12 ! Molecular weight of CFC12 (g/mol) - CF2CL2
246 REAL(KIND=JPRB) :: Z_AVGDRO ! Avogadro's number (molecules/mole)
247 REAL(KIND=JPRB) :: Z_GRAVIT ! Gravitational acceleration (cm/sec2)
248 REAL(KIND=JPRB) :: Z_AMM
249
250 ! Atomic weights for conversion from mass to volume mixing ratios; these
251 ! are the same values used in ECRT to assure accurate conversion to vmr
252 data Z_AMD / 28.970_JPRB /
253 data Z_AMW / 18.0154_JPRB /
254 data Z_AMCO2 / 44.011_JPRB /
255 data Z_AMO / 47.9982_JPRB /
256 data Z_AMCH4 / 16.043_JPRB /
257 data Z_AMN2O / 44.013_JPRB /
258 data Z_AMC11 / 137.3686_JPRB /
259 data Z_AMC12 / 120.9140_JPRB /
260 data Z_AVGDRO/ 6.02214E23_JPRB /
261 data Z_GRAVIT/ 9.80665E02_JPRB /
262
263 REAL(KIND=JPRB) :: ZCLEAR, ZCLOUD, ZEPSEC, ZTOTCC
264
265 INTEGER(KIND=JPIM) :: IOVLP
266 REAL(KIND=JPRB) :: ZHOOK_HANDLE
267
268
269 INTERFACE
270 SUBROUTINE SRTM_SETCOEF&
271 & ( KLEV , KNMOL ,&
272 & PAVEL , PTAVEL , PZ , PTZ , PTBOUND ,&
273 & PCOLDRY , PWKL ,&
274 & KLAYTROP, KLAYSWTCH, KLAYLOW ,&
275 & PCO2MULT, PCOLCH4 , PCOLCO2 , PCOLH2O , PCOLMOL , PCOLN2O , PCOLO2 , PCOLO3 ,&
276 & PFORFAC , PFORFRAC , KINDFOR , PSELFFAC, PSELFFRAC, KINDSELF ,&
277 & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,&
278 & KJP , KJT , KJT1&
279 & )
280 USE PARKIND1 ,ONLY : JPIM ,JPRB
281 USE PARSRTM , ONLY : JPLAY
282 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
283 INTEGER(KIND=JPIM) :: KNMOL
284 REAL(KIND=JPRB) ,INTENT(IN) :: PAVEL(JPLAY)
285 REAL(KIND=JPRB) ,INTENT(IN) :: PTAVEL(JPLAY)
286 REAL(KIND=JPRB) :: PZ(0:JPLAY)
287 REAL(KIND=JPRB) ,INTENT(IN) :: PTZ(0:JPLAY)
288 REAL(KIND=JPRB) ,INTENT(IN) :: PTBOUND
289 REAL(KIND=JPRB) ,INTENT(IN) :: PCOLDRY(JPLAY)
290 REAL(KIND=JPRB) ,INTENT(IN) :: PWKL(35,JPLAY)
291 INTEGER(KIND=JPIM),INTENT(OUT) :: KLAYTROP
292 INTEGER(KIND=JPIM),INTENT(OUT) :: KLAYSWTCH
293 INTEGER(KIND=JPIM),INTENT(OUT) :: KLAYLOW
294 REAL(KIND=JPRB) ,INTENT(OUT) :: PCO2MULT(JPLAY)
295 REAL(KIND=JPRB) ,INTENT(OUT) :: PCOLCH4(JPLAY)
296 REAL(KIND=JPRB) ,INTENT(OUT) :: PCOLCO2(JPLAY)
297 REAL(KIND=JPRB) ,INTENT(OUT) :: PCOLH2O(JPLAY)
298 REAL(KIND=JPRB) ,INTENT(OUT) :: PCOLMOL(JPLAY)
299 REAL(KIND=JPRB) ,INTENT(OUT) :: PCOLN2O(JPLAY)
300 REAL(KIND=JPRB) ,INTENT(OUT) :: PCOLO2(JPLAY)
301 REAL(KIND=JPRB) ,INTENT(OUT) :: PCOLO3(JPLAY)
302 REAL(KIND=JPRB) ,INTENT(OUT) :: PFORFAC(JPLAY)
303 REAL(KIND=JPRB) ,INTENT(OUT) :: PFORFRAC(JPLAY)
304 INTEGER(KIND=JPIM),INTENT(OUT) :: KINDFOR(JPLAY)
305 REAL(KIND=JPRB) ,INTENT(OUT) :: PSELFFAC(JPLAY)
306 REAL(KIND=JPRB) ,INTENT(OUT) :: PSELFFRAC(JPLAY)
307 INTEGER(KIND=JPIM),INTENT(OUT) :: KINDSELF(JPLAY)
308 REAL(KIND=JPRB) ,INTENT(OUT) :: PFAC00(JPLAY)
309 REAL(KIND=JPRB) ,INTENT(OUT) :: PFAC01(JPLAY)
310 REAL(KIND=JPRB) ,INTENT(OUT) :: PFAC10(JPLAY)
311 REAL(KIND=JPRB) ,INTENT(OUT) :: PFAC11(JPLAY)
312 INTEGER(KIND=JPIM),INTENT(OUT) :: KJP(JPLAY)
313 INTEGER(KIND=JPIM),INTENT(OUT) :: KJT(JPLAY)
314 INTEGER(KIND=JPIM),INTENT(OUT) :: KJT1(JPLAY)
315 END SUBROUTINE SRTM_SETCOEF
316 END INTERFACE
317 INTERFACE
318 SUBROUTINE SRTM_SPCVRT&
319 & ( KLEV , KMOL , KSW , PONEMINUS,&
320 & PAVEL , PTAVEL , PZ , PTZ , PTBOUND , PALBD , PALBP,&
321 & PFRCL , PTAUC , PASYC , POMGC , PTAUA , PASYA , POMGA , PRMU0,&
322 & PCOLDRY , PWKL,&
323 & KLAYTROP, KLAYSWTCH, KLAYLOW ,&
324 & PCO2MULT, PCOLCH4 , PCOLCO2 , PCOLH2O , PCOLMOL , PCOLN2O , PCOLO2 , PCOLO3 ,&
325 & PFORFAC , PFORFRAC , KINDFOR , PSELFFAC, PSELFFRAC, KINDSELF ,&
326 & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,&
327 & KJP , KJT , KJT1 ,&
328 & PBBFD, PBBFU, PUVFD, PUVFU, PVSFD, PVSFU , PNIFD , PNIFU ,&
329 & PBBCD, PBBCU, PUVCD, PUVCU, PVSCD, PVSCU , PNICD , PNICU&
330 & )
331 USE PARKIND1 ,ONLY : JPIM ,JPRB
332 USE PARSRTM , ONLY : JPLAY, JPB1, JPB2, JPGPT
333 INTEGER(KIND=JPIM),INTENT(IN) :: KSW
334 INTEGER(KIND=JPIM) :: KLEV
335 INTEGER(KIND=JPIM) :: KMOL
336 REAL(KIND=JPRB) :: PONEMINUS
337 REAL(KIND=JPRB) :: PAVEL(JPLAY)
338 REAL(KIND=JPRB) :: PTAVEL(JPLAY)
339 REAL(KIND=JPRB) :: PZ(0:JPLAY)
340 REAL(KIND=JPRB) :: PTZ(0:JPLAY)
341 REAL(KIND=JPRB) :: PTBOUND
342 REAL(KIND=JPRB) ,INTENT(IN) :: PALBD(KSW)
343 REAL(KIND=JPRB) ,INTENT(IN) :: PALBP(KSW)
344 REAL(KIND=JPRB) ,INTENT(IN) :: PFRCL(JPLAY)
345 REAL(KIND=JPRB) ,INTENT(IN) :: PTAUC(JPLAY,KSW)
346 REAL(KIND=JPRB) ,INTENT(IN) :: PASYC(JPLAY,KSW)
347 REAL(KIND=JPRB) ,INTENT(IN) :: POMGC(JPLAY,KSW)
348 REAL(KIND=JPRB) ,INTENT(IN) :: PTAUA(JPLAY,KSW)
349 REAL(KIND=JPRB) ,INTENT(IN) :: PASYA(JPLAY,KSW)
350 REAL(KIND=JPRB) ,INTENT(IN) :: POMGA(JPLAY,KSW)
351 REAL(KIND=JPRB) :: PRMU0
352 REAL(KIND=JPRB) :: PCOLDRY(JPLAY)
353 REAL(KIND=JPRB) :: PWKL(35,JPLAY)
354 INTEGER(KIND=JPIM) :: KLAYTROP
355 INTEGER(KIND=JPIM) :: KLAYSWTCH
356 INTEGER(KIND=JPIM) :: KLAYLOW
357 REAL(KIND=JPRB) :: PCO2MULT(JPLAY)
358 REAL(KIND=JPRB) :: PCOLCH4(JPLAY)
359 REAL(KIND=JPRB) :: PCOLCO2(JPLAY)
360 REAL(KIND=JPRB) :: PCOLH2O(JPLAY)
361 REAL(KIND=JPRB) :: PCOLMOL(JPLAY)
362 REAL(KIND=JPRB) :: PCOLN2O(JPLAY)
363 REAL(KIND=JPRB) :: PCOLO2(JPLAY)
364 REAL(KIND=JPRB) :: PCOLO3(JPLAY)
365 REAL(KIND=JPRB) :: PFORFAC(JPLAY)
366 REAL(KIND=JPRB) :: PFORFRAC(JPLAY)
367 INTEGER(KIND=JPIM) :: KINDFOR(JPLAY)
368 REAL(KIND=JPRB) :: PSELFFAC(JPLAY)
369 REAL(KIND=JPRB) :: PSELFFRAC(JPLAY)
370 INTEGER(KIND=JPIM) :: KINDSELF(JPLAY)
371 REAL(KIND=JPRB) :: PFAC00(JPLAY)
372 REAL(KIND=JPRB) :: PFAC01(JPLAY)
373 REAL(KIND=JPRB) :: PFAC10(JPLAY)
374 REAL(KIND=JPRB) :: PFAC11(JPLAY)
375 INTEGER(KIND=JPIM) :: KJP(JPLAY)
376 INTEGER(KIND=JPIM) :: KJT(JPLAY)
377 INTEGER(KIND=JPIM) :: KJT1(JPLAY)
378 REAL(KIND=JPRB) ,INTENT(INOUT) :: PBBFD(JPLAY+1)
379 REAL(KIND=JPRB) ,INTENT(INOUT) :: PBBFU(JPLAY+1)
380 REAL(KIND=JPRB) :: PUVFD(JPLAY+1)
381 REAL(KIND=JPRB) :: PUVFU(JPLAY+1)
382 REAL(KIND=JPRB) :: PVSFD(JPLAY+1)
383 REAL(KIND=JPRB) :: PVSFU(JPLAY+1)
384 REAL(KIND=JPRB) :: PNIFD(JPLAY+1)
385 REAL(KIND=JPRB) :: PNIFU(JPLAY+1)
386 REAL(KIND=JPRB) ,INTENT(INOUT) :: PBBCD(JPLAY+1)
387 REAL(KIND=JPRB) ,INTENT(INOUT) :: PBBCU(JPLAY+1)
388 REAL(KIND=JPRB) :: PUVCD(JPLAY+1)
389 REAL(KIND=JPRB) :: PUVCU(JPLAY+1)
390 REAL(KIND=JPRB) :: PVSCD(JPLAY+1)
391 REAL(KIND=JPRB) :: PVSCU(JPLAY+1)
392 REAL(KIND=JPRB) :: PNICD(JPLAY+1)
393 REAL(KIND=JPRB) :: PNICU(JPLAY+1)
394 END SUBROUTINE SRTM_SPCVRT
395 END INTERFACE
396
397
398 !-----------------------------------------------------------------------
399 !-- calculate information needed ny the radiative transfer routine
400
401 IF (LHOOK) CALL DR_HOOK('SRTM_SRTM_224GP',0,ZHOOK_HANDLE)
402 ZEPSEC = 1.E-06_JPRB
403 Z_ONEMINUS=1.0_JPRB - ZEPSEC
404 ZADJI0 = RII0 / RI0
405 !-- overlap: 1=max-ran, 2=maximum, 3=random
406 IOVLP=3
407
408 !print *,'Entering srtm_srtm_224gp'
409
410 ICLDATM = 1
411 INFLAG = 2
412 ICEFLAG = 3
413 I_LIQFLAG = 1
414 I_NMOL = 6
415 I_NSTR = 2
416
417 DO JL = KIDIA, KFDIA
418 ZRMU0=PRMU0(JL)
419 IF (ZRMU0 > 0.0_JPRB) THEN
420
421 !- coefficients related to the cloud optical properties (original RRTM_SW)
422
423 ! print *,'just before SRTM_CLDPROP'
424
425 ! DO JK=1,KLEV
426 ! CLDFRAC(JK) = PFRCL (JL,JK)
427 ! CLDDAT1(JK) = PSCLA1(JL,JK)
428 ! CLDDAT2(JK) = PSCLA2(JL,JK)
429 ! CLDDAT3(JK) = PSCLA3(JL,JK)
430 ! CLDDAT4(JK) = PSCLA4(JL,JK)
431 ! DO JMOM=0,16
432 ! CLDDATMOM(JMOM,JK)=PSCLMOM(JL,JMOM,JK)
433 ! ENDDO
434 ! print 9101,JK,CLDFRAC(JK),CLDDAT1(JK),CLDDAT2(JK),CLDDAT3(JK)&
435 ! &,CLDDAT4(JK),(CLDDATMOM(JMOM,JK),JMOM=0,NSTR)
436 9101 format(1x,'srtm_srtm_224gp Cld :',I3,f7.4,7E12.5)
437 ! ENDDO
438
439 ! CALL SRTM_CLDPROP &
440 ! &( KLEV, ICLDATM, INFLAG, ICEFLAG, LIQFLAG, NSTR &
441 ! &, CLDFRAC, CLDDAT1, CLDDAT2, CLDDAT3, CLDDAT4, CLDDATMOM &
442 ! &, TAUCLDORIG, TAUCLOUD, SSACLOUD, XMOM &
443 ! &)
444
445 !- coefficients for the temperature and pressure dependence of the
446 ! molecular absorption coefficients
447
448 DO J1=1,35
449 DO J2=1,KLEV
450 Z_WKL(J1,J2)=0.0_JPRB
451 ENDDO
452 ENDDO
453
454 Z_TBOUND=PTS(JL)
455 Z_PZ(0) = paph(JL,klev+1)/100._JPRB
456 Z_TZ(0) = pth (JL,klev+1)
457
458 ZCLEAR=1.0_JPRB
459 ZCLOUD=0.0_JPRB
460 ZTOTCC=0.0_JPRB
461 DO JK = 1, KLEV
462 Z_PAVEL(JK) = pap(JL,KLEV-JK+1) /100._JPRB
463 Z_TAVEL(JK) = pt (JL,KLEV-JK+1)
464 Z_PZ(JK) = paph(JL,KLEV-JK+1)/100._JPRB
465 Z_TZ(JK) = pth (JL,KLEV-JK+1)
466 Z_WKL(1,JK) = pq(JL,KLEV-JK+1) *Z_AMD/Z_AMW
467 Z_WKL(2,JK) = pcco2 *Z_AMD/Z_AMCO2
468 Z_WKL(3,JK) = pozn(JL,KLEV-JK+1)*Z_AMD/Z_AMO
469 Z_WKL(4,JK) = rn2o *Z_AMD/Z_AMN2O
470 Z_WKL(6,JK) = rch4 *Z_AMD/Z_AMCH4
471 Z_AMM = (1-Z_WKL(1,JK))*Z_AMD + Z_WKL(1,JK)*Z_AMW
472 Z_COLDRY(JK) = (Z_PZ(JK-1)-Z_PZ(JK))*1.E3_JPRB*Z_AVGDRO/(Z_GRAVIT*Z_AMM*(1+Z_WKL(1,JK)))
473 ! print 9200,JK,PAVEL(JK),TAVEL(JK),(WKL(JA,JK),JA=1,4),WKL(6,JK),COLDRY(JK)
474 9200 format(1x,'SRTM ',I3,2F7.1,6E13.5)
475
476 IF (KOVLP == 1) THEN
477 ZCLEAR=ZCLEAR*(1.0_JPRB-MAX(PFRCL(JL,JK),ZCLOUD)) &
478 & /(1.0_JPRB-MIN(ZCLOUD,1.0_JPRB-ZEPSEC))
479 ZCLOUD=PFRCL(JL,JK)
480 ZTOTCC=1.0_JPRB-ZCLEAR
481 ELSEIF (KOVLP == 2) THEN
482 ZCLOUD=MAX(ZCLOUD,PFRCL(JL,JK))
483 ZCLEAR=1.0_JPRB-ZCLOUD
484 ZTOTCC=ZCLOUD
485 ELSEIF (KOVLP == 3) THEN
486 ZCLEAR=ZCLEAR*(1.0_JPRB-PFRCL(JL,JK))
487 ZCLOUD=1.0_JPRB-ZCLEAR
488 ZTOTCC=ZCLOUD
489 ENDIF
490
491 ENDDO
492
493 ! print *,'ZTOTCC ZCLEAR : ',ZTOTCC,' ',ZCLEAR
494
495 DO IMOL=1,I_NMOL
496 DO JK=1,KLEV
497 Z_WKL(IMOL,JK)=Z_COLDRY(JK)* Z_WKL(IMOL,JK)
498 ENDDO
499 ENDDO
500
501 ! IF (ZTOTCC == 0.0_JPRB) THEN
502 ! DO JK=1,KLEV
503 ! ZFRCL(JK)=0.0_JPRB
504 ! ENDDO
505 ! ELSE
506 ! DO JK=1,KLEV
507 ! ZFRCL(JK)=PFRCL(JL,JK)/ZTOTCC
508 ! ENDDO
509 ! ENDIF
510
511 ! print *,'just before SRTM_SETCOEF'
512
513 ZFRCL(1:KLEV)=PFRCL(JL,1:KLEV)
514 ZCLEAR=0._JPRB
515 ZCLOUD=1._JPRB
516
517 CALL SRTM_SETCOEF &
518 & ( KLEV , I_NMOL,&
519 & Z_PAVEL , Z_TAVEL , Z_PZ , Z_TZ , Z_TBOUND,&
520 & Z_COLDRY , Z_WKL,&
521 & I_LAYTROP, I_LAYSWTCH, I_LAYLOW,&
522 & Z_CO2MULT, Z_COLCH4 , Z_COLCO2 , Z_COLH2O , Z_COLMOL , Z_COLN2O , Z_COLO2 , Z_COLO3,&
523 & Z_FORFAC , Z_FORFRAC , INDFOR , Z_SELFFAC, Z_SELFFRAC, INDSELF,&
524 & Z_FAC00 , Z_FAC01 , Z_FAC10 , Z_FAC11,&
525 & JP , JT , JT1 &
526 & )
527
528 ! print *,'just after SRTM_SETCOEF'
529
530 !- call the radiation transfer routine
531
532 DO JSW=1,KSW
533 ZALBD(JSW)=PALBD(JL,JSW)
534 ZALBP(JSW)=PALBP(JL,JSW)
535 DO JK=1,KLEV
536 ZTAUC(JK,JSW) = PTAUC(JL,JSW,JK)
537 ZASYC(JK,JSW) = PASYC(JL,JSW,JK)
538 ZOMGC(JK,JSW) = POMGC(JL,JSW,JK)
539 ! print 9002,JSW,JK,ZFRCL(JK),ZTAUC(JK,JSW),ZASYC(JK,JSW),ZOMGC(JK,JSW)
540 9002 format(1x,'srtm_224gp ClOPropECmodel ',2I3,f8.4,3E12.5)
541 ENDDO
542 ENDDO
543
544 !- mixing of aerosols
545
546 ! print *,'Aerosol optical properties computations'
547 ! DO JSW=1,KSW
548 ! print 9012,JSW,(JAE,RSRTAUA(JSW,JAE),RSRPIZA(JSW,JAE),RSRASYA(JSW,JAE),JAE=1,6)
549 9012 format(I3,(/,I3,3E13.5))
550 ! ENDDO
551
552 ! DO JK=1,KLEV
553 ! print 9013,JK,(PAER(JL,JAE,JK),JAE=1,6)
554 9013 format(1x,I3,6E12.5)
555 ! ENDDO
556
557 IF (NAER == 0) THEN
558 DO JSW=1,KSW
559 DO JK=1,KLEV
560 ZTAUA(JK,JSW)= 0.0_JPRB
561 ZASYA(JK,JSW)= 0.0_JPRB
562 ZOMGA(JK,JSW)= 1.0_JPRB
563 ENDDO
564 ENDDO
565 ELSE
566 DO JSW=1,KSW
567 DO JK=1,KLEV
568 IK=KLEV+1-JK
569 ZTAUA(JK,JSW)=0.0_JPRB
570 ZASYA(JK,JSW)=0.0_JPRB
571 ZOMGA(JK,JSW)=0.0_JPRB
572 DO JAE=1,6
573 ZTAUA(JK,JSW)=ZTAUA(JK,JSW)+RSRTAUA(JSW,JAE)*PAER(JL,JAE,IK)
574 ZOMGA(JK,JSW)=ZOMGA(JK,JSW)+RSRTAUA(JSW,JAE)*PAER(JL,JAE,IK) &
575 & *RSRPIZA(JSW,JAE)
576 ZASYA(JK,JSW)=ZASYA(JK,JSW)+RSRTAUA(JSW,JAE)*PAER(JL,JAE,IK) &
577 & *RSRPIZA(JSW,JAE)*RSRASYA(JSW,JAE)
578 ENDDO
579 IF (ZOMGA(JK,JSW) /= 0.0_JPRB) THEN
580 ZASYA(JK,JSW)=ZASYA(JK,JSW)/ZOMGA(JK,JSW)
581 ENDIF
582 IF (ZTAUA(JK,JSW) /= 0.0_JPRB) THEN
583 ZOMGA(JK,JSW)=ZOMGA(JK,JSW)/ZTAUA(JK,JSW)
584 ENDIF
585 ! print 9003,JSW,JK,ZTAUA(JK,JSW),ZOMGA(JK,JSW),ZASYA(JK,JSW)
586 9003 format(1x,'Aerosols ',2I3,3F10.4)
587 ENDDO
588 ENDDO
589 ENDIF
590
591 DO JK=1,KLEV+1
592 ZBBCU(JK)=0.0_JPRB
593 ZBBCD(JK)=0.0_JPRB
594 ZBBFU(JK)=0.0_JPRB
595 ZBBFD(JK)=0.0_JPRB
596 ZUVCU(JK)=0.0_JPRB
597 ZUVCD(JK)=0.0_JPRB
598 ZUVFU(JK)=0.0_JPRB
599 ZUVFD(JK)=0.0_JPRB
600 ZVSCU(JK)=0.0_JPRB
601 ZVSCD(JK)=0.0_JPRB
602 ZVSFU(JK)=0.0_JPRB
603 ZVSFD(JK)=0.0_JPRB
604 ZNICU(JK)=0.0_JPRB
605 ZNICD(JK)=0.0_JPRB
606 ZNIFU(JK)=0.0_JPRB
607 ZNIFD(JK)=0.0_JPRB
608 ENDDO
609
610 ! print *,'just before calling STRM_SPCVRT for JL=',JL,' and ZRMU0=',ZRMU0
611
612 CALL SRTM_SPCVRT &
613 & ( KLEV , I_NMOL , KSW , Z_ONEMINUS,&
614 & Z_PAVEL , Z_TAVEL , Z_PZ , Z_TZ , Z_TBOUND , ZALBD , ZALBP,&
615 & ZFRCL , ZTAUC , ZASYC , ZOMGC , ZTAUA , ZASYA , ZOMGA , ZRMU0,&
616 & Z_COLDRY , Z_WKL,&
617 & I_LAYTROP, I_LAYSWTCH, I_LAYLOW,&
618 & Z_CO2MULT, Z_COLCH4 , Z_COLCO2 , Z_COLH2O , Z_COLMOL , Z_COLN2O , Z_COLO2 , Z_COLO3,&
619 & Z_FORFAC , Z_FORFRAC , INDFOR , Z_SELFFAC, Z_SELFFRAC, INDSELF,&
620 & Z_FAC00 , Z_FAC01 , Z_FAC10 , Z_FAC11,&
621 & JP , JT , JT1,&
622 & ZBBFD , ZBBFU , ZUVFD , ZUVFU , ZVSFD , ZVSFU , ZNIFD , ZNIFU,&
623 & ZBBCD , ZBBCU , ZUVCD , ZUVCU , ZVSCD , ZVSCU , ZNICD , ZNICU &
624 & )
625
626 ! print *,'SRTM_SRTM_224GP before potential scaling'
627 ! IF (IOVLP == 3) THEN
628 ! DO JK=1,KLEV+1
629 !! print 9004,JK,ZBBCU(JK),ZBBCD(JK),ZBBFU(JK),ZBBFD(JK)
630 9004 format(1x,'Clear-sky and total fluxes U & D ',I3,4F10.3)
631 ! PFSUC(JL,1,JK)=ZBBCU(JK)
632 ! PFSUC(JL,2,JK)=ZBBCD(JK)
633 ! PFSUX(JL,1,JK)=ZBBFU(JK)
634 ! PFSUX(JL,2,JK)=ZBBFD(JK)
635 ! ENDDO
636 ! ELSE
637 ! print *,'SRTM_SRTM_224GP after potential scaling'
638 DO JK=1,KLEV+1
639 PFSUC(JL,1,JK)=ZADJI0 * ZBBCU(JK)
640 PFSUC(JL,2,JK)=ZADJI0 * ZBBCD(JK)
641 PFSUX(JL,1,JK)=ZADJI0 * ( (1.0_JPRB-ZCLEAR)*ZBBFU(JK)+ZCLEAR*ZBBCU(JK) )
642 PFSUX(JL,2,JK)=ZADJI0 * ( (1.0_JPRB-ZCLEAR)*ZBBFD(JK)+ZCLEAR*ZBBCD(JK) )
643 ENDDO
644 ! ENDIF
645
646 ! DO JK=1,KLEV+1
647 ! print 9005,JK,PFSUC(JL,1,JK),PFSUC(JL,2,JK),PFSUX(JL,1,JK),PFSUX(JL,2,JK)
648 9005 format(1x,'Clear-sky and total fluxes U & D ',I3,4F10.3)
649 ! ENDDO
650
651 ELSE
652 DO JK=1,KLEV+1
653 PFSUC(JL,1,JK)=0.0_JPRB
654 PFSUC(JL,2,JK)=0.0_JPRB
655 PFSUX(JL,1,JK)=0.0_JPRB
656 PFSUX(JL,2,JK)=0.0_JPRB
657 ENDDO
658 ENDIF
659 ENDDO
660
661 !PRINT *,'OUT OF SRTM_224GP'
662
663 !-----------------------------------------------------------------------
664 IF (LHOOK) CALL DR_HOOK('SRTM_SRTM_224GP',1,ZHOOK_HANDLE)
665 END SUBROUTINE SRTM_SRTM_224GP
666
667