Directory: | ./ |
---|---|
File: | phys/ener_conserv.f90 |
Date: | 2022-01-11 19:19:34 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 75 | 134 | 56.0% |
Branches: | 131 | 350 | 37.4% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | 2880 | subroutine ener_conserv(klon,klev,pdtphys, & | |
2 | & puo,pvo,pto,pqo,pql0,pqs0, & | ||
3 | 480 | & pun,pvn,ptn,pqn,pqln,pqsn,dtke,masse,exner,d_t_ec) | |
4 | |||
5 | !============================================================= | ||
6 | ! Energy conservation | ||
7 | ! Based on the TKE equation | ||
8 | ! The M2 and N2 terms at the origin of TKE production are | ||
9 | ! concerted into heating in the d_t_ec term | ||
10 | ! Option 1 is the standard | ||
11 | ! 101 is for M2 term only | ||
12 | ! 101 for N2 term only | ||
13 | ! -1 is a previours treatment for kinetic energy only | ||
14 | ! FH (hourdin@lmd.jussieu.fr), 2013/04/25 | ||
15 | !============================================================= | ||
16 | |||
17 | !============================================================= | ||
18 | ! Declarations | ||
19 | !============================================================= | ||
20 | |||
21 | ! From module | ||
22 | USE phys_local_var_mod, ONLY : d_u_vdf,d_v_vdf,d_t_vdf,d_u_ajs,d_v_ajs,d_t_ajs, & | ||
23 | & d_u_con,d_v_con,d_t_con,d_t_diss | ||
24 | USE phys_local_var_mod, ONLY : d_t_eva,d_t_lsc,d_q_eva,d_q_lsc | ||
25 | USE phys_local_var_mod, ONLY : d_u_oro,d_v_oro,d_u_lif,d_v_lif | ||
26 | USE phys_local_var_mod, ONLY : du_gwd_hines,dv_gwd_hines,dv_gwd_front,dv_gwd_rando | ||
27 | USE phys_state_var_mod, ONLY : du_gwd_front,du_gwd_rando | ||
28 | USE phys_output_var_mod, ONLY : bils_ec,bils_ech,bils_tke,bils_kinetic,bils_enthalp,bils_latent,bils_diss | ||
29 | USE add_phys_tend_mod, ONLY : fl_cor_ebil | ||
30 | |||
31 | |||
32 | IMPLICIT none | ||
33 | ! | ||
34 | ! $Header$ | ||
35 | ! | ||
36 | ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre | ||
37 | ! veillez � n'utiliser que des ! pour les commentaires | ||
38 | ! et � bien positionner les & des lignes de continuation | ||
39 | ! (les placer en colonne 6 et en colonne 73) | ||
40 | ! | ||
41 | ! | ||
42 | ! A1.0 Fundamental constants | ||
43 | REAL RPI,RCLUM,RHPLA,RKBOL,RNAVO | ||
44 | ! A1.1 Astronomical constants | ||
45 | REAL RDAY,REA,REPSM,RSIYEA,RSIDAY,ROMEGA | ||
46 | ! A1.1.bis Constantes concernant l'orbite de la Terre: | ||
47 | REAL R_ecc, R_peri, R_incl | ||
48 | ! A1.2 Geoide | ||
49 | REAL RA,RG,R1SA | ||
50 | ! A1.3 Radiation | ||
51 | ! REAL RSIGMA,RI0 | ||
52 | REAL RSIGMA | ||
53 | ! A1.4 Thermodynamic gas phase | ||
54 | REAL RMO3,RMCO2,RMC,RMCH4,RMN2O,RMCFC11,RMCFC12 | ||
55 | REAL R,RMD,RMV,RD,RV,RCPD,RCPV,RCVD,RCVV | ||
56 | REAL RKAPPA,RETV, eps_w | ||
57 | ! A1.5,6 Thermodynamic liquid,solid phases | ||
58 | REAL RCW,RCS | ||
59 | ! A1.7 Thermodynamic transition of phase | ||
60 | REAL RLVTT,RLSTT,RLMLT,RTT,RATM | ||
61 | ! A1.8 Curve of saturation | ||
62 | REAL RESTT,RALPW,RBETW,RGAMW,RALPS,RBETS,RGAMS | ||
63 | REAL RALPD,RBETD,RGAMD | ||
64 | ! | ||
65 | COMMON/YOMCST/RPI ,RCLUM ,RHPLA ,RKBOL ,RNAVO & | ||
66 | & ,RDAY ,REA ,REPSM ,RSIYEA,RSIDAY,ROMEGA & | ||
67 | & ,R_ecc, R_peri, R_incl & | ||
68 | & ,RA ,RG ,R1SA & | ||
69 | & ,RSIGMA & | ||
70 | & ,R ,RMD ,RMV ,RD ,RV ,RCPD & | ||
71 | & ,RMO3 ,RMCO2 ,RMC ,RMCH4 ,RMN2O ,RMCFC11 ,RMCFC12 & | ||
72 | & ,RCPV ,RCVD ,RCVV ,RKAPPA,RETV, eps_w & | ||
73 | & ,RCW ,RCS & | ||
74 | & ,RLVTT ,RLSTT ,RLMLT ,RTT ,RATM & | ||
75 | & ,RESTT ,RALPW ,RBETW ,RGAMW ,RALPS ,RBETS ,RGAMS & | ||
76 | & ,RALPD ,RBETD ,RGAMD | ||
77 | ! ------------------------------------------------------------------ | ||
78 | !$OMP THREADPRIVATE(/YOMCST/) | ||
79 | ! | ||
80 | ! $Id: YOETHF.h 2799 2017-02-24 18:50:33Z jyg $ | ||
81 | ! | ||
82 | ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre | ||
83 | ! veillez n'utiliser que des ! pour les commentaires | ||
84 | ! et bien positionner les & des lignes de continuation | ||
85 | ! (les placer en colonne 6 et en colonne 73) | ||
86 | ! | ||
87 | !* COMMON *YOETHF* DERIVED CONSTANTS SPECIFIC TO ECMWF THERMODYNAMICS | ||
88 | ! | ||
89 | ! *R__ES* *CONSTANTS USED FOR COMPUTATION OF SATURATION | ||
90 | ! MIXING RATIO OVER LIQUID WATER(*R_LES*) OR | ||
91 | ! ICE(*R_IES*). | ||
92 | ! *RVTMP2* *RVTMP2=RCPV/RCPD-1. | ||
93 | ! *RHOH2O* *DENSITY OF LIQUID WATER. (RATM/100.) | ||
94 | ! | ||
95 | REAL R2ES, R3LES, R3IES, R4LES, R4IES, R5LES, R5IES | ||
96 | REAL RVTMP2, RHOH2O | ||
97 | REAL R5ALVCP,R5ALSCP,RALVDCP,RALSDCP,RALFDCP,RTWAT,RTBER,RTBERCU | ||
98 | REAL RTICE,RTICECU,RTWAT_RTICE_R,RTWAT_RTICECU_R,RKOOP1,RKOOP2 | ||
99 | LOGICAL OK_BAD_ECMWF_THERMO ! If TRUE, then variables set by rrtm/suphec.F90 | ||
100 | ! If FALSE, then variables set by suphel.F90 | ||
101 | COMMON /YOETHF/R2ES, R3LES, R3IES, R4LES, R4IES, R5LES, R5IES, & | ||
102 | & RVTMP2, RHOH2O, & | ||
103 | & R5ALVCP,R5ALSCP,RALVDCP,RALSDCP, & | ||
104 | & RALFDCP,RTWAT,RTBER,RTBERCU, & | ||
105 | & RTICE,RTICECU,RTWAT_RTICE_R,RTWAT_RTICECU_R,RKOOP1,& | ||
106 | & RKOOP2, & | ||
107 | & OK_BAD_ECMWF_THERMO | ||
108 | |||
109 | !$OMP THREADPRIVATE(/YOETHF/) | ||
110 | ! $Id: clesphys.h 3435 2019-01-22 15:21:59Z fairhead $ | ||
111 | ! | ||
112 | ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre | ||
113 | ! veillez \`a n'utiliser que des ! pour les commentaires | ||
114 | ! et \`a bien positionner les & des lignes de continuation | ||
115 | ! (les placer en colonne 6 et en colonne 73) | ||
116 | ! | ||
117 | !..include cles_phys.h | ||
118 | ! | ||
119 | INTEGER iflag_cycle_diurne | ||
120 | LOGICAL soil_model,new_oliq,ok_orodr,ok_orolf | ||
121 | LOGICAL ok_limitvrai | ||
122 | LOGICAL ok_all_xml | ||
123 | LOGICAL ok_lwoff | ||
124 | INTEGER nbapp_rad, iflag_con, nbapp_cv, nbapp_wk, iflag_ener_conserv | ||
125 | REAL co2_ppm, co2_ppm0, solaire | ||
126 | !FC | ||
127 | REAL Cd_frein | ||
128 | LOGICAL ok_suntime_rrtm | ||
129 | REAL(kind=8) RCO2, RCH4, RN2O, RCFC11, RCFC12 | ||
130 | REAL(kind=8) RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act | ||
131 | REAL(kind=8) CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt | ||
132 | !IM ajout CFMIP2/CMIP5 | ||
133 | REAL(kind=8) RCO2_per,RCH4_per,RN2O_per,RCFC11_per,RCFC12_per | ||
134 | REAL(kind=8) CH4_ppb_per,N2O_ppb_per,CFC11_ppt_per,CFC12_ppt_per | ||
135 | |||
136 | !OM ---> correction du bilan d'eau global | ||
137 | !OM Correction sur precip KE | ||
138 | REAL cvl_corr | ||
139 | !OM Fonte calotte dans bilan eau | ||
140 | LOGICAL ok_lic_melt | ||
141 | !OB Depot de vapeur d eau sur la calotte pour le bilan eau | ||
142 | LOGICAL ok_lic_cond | ||
143 | |||
144 | !IM simulateur ISCCP | ||
145 | INTEGER top_height, overlap | ||
146 | !IM seuils cdrm, cdrh | ||
147 | REAL cdmmax, cdhmax | ||
148 | !IM param. stabilite s/ terres et en dehors | ||
149 | REAL ksta, ksta_ter, f_ri_cd_min | ||
150 | !IM ok_kzmin : clef calcul Kzmin dans la CL de surface cf FH | ||
151 | LOGICAL ok_kzmin | ||
152 | !IM, MAFo fmagic, pmagic : parametres - additionnel et multiplicatif - | ||
153 | ! pour regler l albedo sur ocean | ||
154 | REAL pbl_lmixmin_alpha | ||
155 | REAL fmagic, pmagic | ||
156 | ! Hauteur (imposee) du contenu en eau du sol | ||
157 | REAL qsol0,albsno0,evap0 | ||
158 | ! Frottement au sol (Cdrag) | ||
159 | Real f_cdrag_ter,f_cdrag_oce | ||
160 | REAL min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce,f_z0qh_oce | ||
161 | REAL z0m_seaice,z0h_seaice | ||
162 | INTEGER iflag_gusts,iflag_z0_oce | ||
163 | |||
164 | ! Rugoro | ||
165 | Real f_rugoro,z0min | ||
166 | |||
167 | ! tau_gl : constante de rappel de la temperature a la surface de la glace | ||
168 | REAL tau_gl | ||
169 | |||
170 | !IM lev_histhf : niveau sorties 6h | ||
171 | !IM lev_histday : niveau sorties journalieres | ||
172 | !IM lev_histmth : niveau sorties mensuelles | ||
173 | !IM lev_histdayNMC : on peut sortir soit sur 8 (comme AR5) ou bien | ||
174 | ! sur 17 niveaux de pression | ||
175 | INTEGER lev_histhf, lev_histday, lev_histmth | ||
176 | INTEGER lev_histdayNMC | ||
177 | Integer lev_histins, lev_histLES | ||
178 | !IM ok_histNMC : sortie fichiers niveaux de pression (histmthNMC, histdayNMC, histhfNMC) | ||
179 | !IM freq_outNMC : frequences de sortie fichiers niveaux de pression (histmthNMC, histdayNMC, histhfNMC) | ||
180 | !IM freq_calNMC : frequences de calcul fis. hist*NMC.nc | ||
181 | LOGICAL ok_histNMC(3) | ||
182 | INTEGER levout_histNMC(3) | ||
183 | REAL freq_outNMC(3) , freq_calNMC(3) | ||
184 | CHARACTER(len=4) type_run | ||
185 | ! aer_type: pour utiliser un fichier constant dans readaerosol | ||
186 | CHARACTER(len=8) :: aer_type | ||
187 | LOGICAL ok_regdyn | ||
188 | REAL lonmin_ins, lonmax_ins, latmin_ins, latmax_ins | ||
189 | REAL ecrit_ins, ecrit_hf, ecrit_day | ||
190 | REAL ecrit_mth, ecrit_tra, ecrit_reg | ||
191 | REAL ecrit_LES | ||
192 | REAL freq_ISCCP, ecrit_ISCCP | ||
193 | REAL freq_COSP, freq_AIRS | ||
194 | LOGICAL :: ok_cosp,ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP | ||
195 | LOGICAL :: ok_airs | ||
196 | INTEGER :: ip_ebil_phy, iflag_rrtm, iflag_ice_thermo, NSW, iflag_albedo | ||
197 | LOGICAL :: ok_chlorophyll | ||
198 | LOGICAL :: ok_strato | ||
199 | LOGICAL :: ok_hines, ok_gwd_rando | ||
200 | LOGICAL :: ok_qch4 | ||
201 | LOGICAL :: ok_conserv_q | ||
202 | LOGICAL :: adjust_tropopause | ||
203 | LOGICAL :: ok_daily_climoz | ||
204 | ! flag to bypass or not the phytrac module | ||
205 | INTEGER :: iflag_phytrac | ||
206 | |||
207 | COMMON/clesphys/ & | ||
208 | ! REAL FIRST | ||
209 | & co2_ppm, solaire & | ||
210 | & , RCO2, RCH4, RN2O, RCFC11, RCFC12 & | ||
211 | & , RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act & | ||
212 | & , RCO2_per, RCH4_per, RN2O_per, RCFC11_per, RCFC12_per & | ||
213 | & , CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt & | ||
214 | & , CH4_ppb_per, N2O_ppb_per, CFC11_ppt_per, CFC12_ppt_per & | ||
215 | & , cdmmax,cdhmax,ksta,ksta_ter,f_ri_cd_min,pbl_lmixmin_alpha & | ||
216 | & , fmagic, pmagic & | ||
217 | & , f_cdrag_ter,f_cdrag_oce,f_rugoro,z0min,tau_gl & | ||
218 | & , min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce,f_z0qh_oce & | ||
219 | & , z0m_seaice,z0h_seaice & | ||
220 | & , freq_outNMC, freq_calNMC & | ||
221 | & , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins & | ||
222 | & , freq_ISCCP, ecrit_ISCCP, freq_COSP, freq_AIRS & | ||
223 | & , cvl_corr & | ||
224 | & , qsol0,albsno0,evap0 & | ||
225 | & , co2_ppm0 & | ||
226 | !FC | ||
227 | & , Cd_frein & | ||
228 | & , ecrit_LES & | ||
229 | & , ecrit_ins, ecrit_hf, ecrit_day & | ||
230 | & , ecrit_mth, ecrit_tra, ecrit_reg & | ||
231 | ! THEN INTEGER AND LOGICALS | ||
232 | & , top_height & | ||
233 | & , iflag_cycle_diurne, soil_model, new_oliq & | ||
234 | & , ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad & | ||
235 | & , iflag_con, nbapp_cv, nbapp_wk & | ||
236 | & , iflag_ener_conserv & | ||
237 | & , ok_suntime_rrtm & | ||
238 | & , overlap & | ||
239 | & , ok_kzmin & | ||
240 | & , lev_histhf, lev_histday, lev_histmth & | ||
241 | & , lev_histins, lev_histLES, lev_histdayNMC, levout_histNMC & | ||
242 | & , ok_histNMC & | ||
243 | & , type_run, ok_regdyn, ok_cosp, ok_airs & | ||
244 | & , ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP & | ||
245 | & , ip_ebil_phy & | ||
246 | & , iflag_gusts ,iflag_z0_oce & | ||
247 | & , ok_lic_melt, ok_lic_cond, aer_type & | ||
248 | & , iflag_rrtm, ok_strato,ok_hines, ok_qch4 & | ||
249 | & , iflag_ice_thermo, ok_gwd_rando, NSW, iflag_albedo & | ||
250 | & , ok_chlorophyll,ok_conserv_q, adjust_tropopause & | ||
251 | & , ok_daily_climoz, ok_all_xml, ok_lwoff & | ||
252 | & , iflag_phytrac | ||
253 | |||
254 | save /clesphys/ | ||
255 | !$OMP THREADPRIVATE(/clesphys/) | ||
256 | ! | ||
257 | ! $Header$ | ||
258 | ! | ||
259 | !jyg+al1< | ||
260 | !! integer iflag_pbl,iflag_pbl_split | ||
261 | !! common/compbl/iflag_pbl,iflag_pbl_split | ||
262 | !!FC integer iflag_pbl, iflag_pbl_split, iflag_order2_sollw | ||
263 | !FC common/compbl/iflag_pbl, iflag_pbl_split, iflag_order2_sollw | ||
264 | integer iflag_pbl, iflag_pbl_split, iflag_order2_sollw, ifl_pbltree | ||
265 | common/compbl/iflag_pbl, iflag_pbl_split, iflag_order2_sollw, ifl_pbltree | ||
266 | !>jyg+al1 | ||
267 | !$OMP THREADPRIVATE(/compbl/) | ||
268 | |||
269 | ! Arguments | ||
270 | INTEGER, INTENT(IN) :: klon,klev | ||
271 | REAL, INTENT(IN) :: pdtphys | ||
272 | REAL, DIMENSION(klon,klev), INTENT(IN) :: puo,pvo,pto,pqo,pql0,pqs0 | ||
273 | REAL, DIMENSION(klon,klev), INTENT(IN) :: pun,pvn,ptn,pqn,pqln,pqsn | ||
274 | REAL, DIMENSION(klon,klev), INTENT(IN) :: masse,exner | ||
275 | REAL, DIMENSION(klon,klev+1), INTENT(IN) :: dtke | ||
276 | ! | ||
277 | REAL, DIMENSION(klon,klev), INTENT(OUT) :: d_t_ec | ||
278 | |||
279 | ! Local | ||
280 | integer k,i | ||
281 | 960 | REAL, DIMENSION(klon,klev+1) :: fluxu,fluxv,fluxt | |
282 | 960 | REAL, DIMENSION(klon,klev+1) :: dddu,dddv,dddt | |
283 | 960 | REAL, DIMENSION(klon,klev) :: d_u,d_v,d_t,zv,zu,d_t_ech | |
284 | REAL ZRCPD | ||
285 | |||
286 | character*80 abort_message | ||
287 | character*20 :: modname | ||
288 | |||
289 | |||
290 | 480 | modname='ener_conser' | |
291 |
4/4✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
|
18626880 | d_t_ec(:,:)=0. |
292 | |||
293 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | IF (iflag_ener_conserv==-1) THEN |
294 | !+jld ec_conser | ||
295 | ✗ | DO k = 1, klev | |
296 | ✗ | DO i = 1, klon | |
297 | ✗ | IF (fl_cor_ebil .GT. 0) then | |
298 | ✗ | ZRCPD = RCPD*(1.0+RVTMP2*(pqn(i,k)+pqln(i,k)+pqsn(i,k))) | |
299 | ELSE | ||
300 | ✗ | ZRCPD = RCPD*(1.0+RVTMP2*pqn(i,k)) | |
301 | ENDIF | ||
302 | d_t_ec(i,k)=0.5/ZRCPD & | ||
303 | ✗ | & *(puo(i,k)**2+pvo(i,k)**2-pun(i,k)**2-pvn(i,k)**2) | |
304 | ENDDO | ||
305 | ENDDO | ||
306 | !-jld ec_conser | ||
307 | |||
308 | |||
309 | |||
310 |
1/2✓ Branch 0 taken 480 times.
✗ Branch 1 not taken.
|
480 | ELSEIF (iflag_ener_conserv>=1) THEN |
311 | |||
312 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | IF (iflag_ener_conserv<=2) THEN |
313 | ! print*,'ener_conserv pbl=',iflag_pbl | ||
314 | ✗ | IF (iflag_pbl>=20 .AND. iflag_pbl<=27) THEN !d_t_diss accounts for conserv | |
315 | ✗ | d_t(:,:)=d_t_ajs(:,:) ! d_t_ajs = adjust + thermals | |
316 | ✗ | d_u(:,:)=d_u_ajs(:,:)+d_u_con(:,:) | |
317 | ✗ | d_v(:,:)=d_v_ajs(:,:)+d_v_con(:,:) | |
318 | ELSE | ||
319 | ✗ | d_t(:,:)=d_t_vdf(:,:)+d_t_ajs(:,:) ! d_t_ajs = adjust + thermals | |
320 | ✗ | d_u(:,:)=d_u_vdf(:,:)+d_u_ajs(:,:)+d_u_con(:,:) | |
321 | ✗ | d_v(:,:)=d_v_vdf(:,:)+d_v_ajs(:,:)+d_v_con(:,:) | |
322 | ENDIF | ||
323 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | ELSEIF (iflag_ener_conserv==101) THEN |
324 | ✗ | d_t(:,:)=0. | |
325 | ✗ | d_u(:,:)=d_u_vdf(:,:)+d_u_ajs(:,:)+d_u_con(:,:) | |
326 | ✗ | d_v(:,:)=d_v_vdf(:,:)+d_v_ajs(:,:)+d_v_con(:,:) | |
327 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | ELSEIF (iflag_ener_conserv==110) THEN |
328 | ✗ | d_t(:,:)=d_t_vdf(:,:)+d_t_ajs(:,:) | |
329 | ✗ | d_u(:,:)=0. | |
330 | ✗ | d_v(:,:)=0. | |
331 | |||
332 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | ELSEIF (iflag_ener_conserv==3) THEN |
333 | ✗ | d_t(:,:)=0. | |
334 | ✗ | d_u(:,:)=0. | |
335 | ✗ | d_v(:,:)=0. | |
336 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | ELSEIF (iflag_ener_conserv==4) THEN |
337 | ✗ | d_t(:,:)=0. | |
338 | ✗ | d_u(:,:)=d_u_vdf(:,:) | |
339 | ✗ | d_v(:,:)=d_v_vdf(:,:) | |
340 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | ELSEIF (iflag_ener_conserv==5) THEN |
341 | ✗ | d_t(:,:)=d_t_vdf(:,:) | |
342 | ✗ | d_u(:,:)=d_u_vdf(:,:) | |
343 | ✗ | d_v(:,:)=d_v_vdf(:,:) | |
344 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | ELSEIF (iflag_ener_conserv==6) THEN |
345 | ✗ | d_t(:,:)=d_t_vdf(:,:) | |
346 | ✗ | d_u(:,:)=d_u_vdf(:,:)+d_u_ajs(:,:) | |
347 | ✗ | d_v(:,:)=d_v_vdf(:,:)+d_v_ajs(:,:) | |
348 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | ELSEIF (iflag_ener_conserv==7) THEN |
349 | ✗ | d_t(:,:)=d_t_vdf(:,:)+d_t_ajs(:,:) | |
350 | ✗ | d_u(:,:)=d_u_vdf(:,:)+d_u_ajs(:,:) | |
351 | ✗ | d_v(:,:)=d_v_vdf(:,:)+d_v_ajs(:,:) | |
352 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | ELSEIF (iflag_ener_conserv==8) THEN |
353 | ✗ | d_t(:,:)=d_t_vdf(:,:) | |
354 | ✗ | d_u(:,:)=d_u_vdf(:,:)+d_u_ajs(:,:)+d_u_con(:,:) | |
355 | ✗ | d_v(:,:)=d_v_vdf(:,:)+d_v_ajs(:,:)+d_v_con(:,:) | |
356 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | ELSEIF (iflag_ener_conserv==9) THEN |
357 | ✗ | d_t(:,:)=d_t_vdf(:,:) | |
358 | ✗ | d_u(:,:)=d_u_vdf(:,:)+d_u_ajs(:,:)+d_u_con(:,:)+d_u_oro(:,:) | |
359 | ✗ | d_v(:,:)=d_v_vdf(:,:)+d_v_ajs(:,:)+d_v_con(:,:)+d_v_oro(:,:) | |
360 |
1/2✓ Branch 0 taken 480 times.
✗ Branch 1 not taken.
|
480 | ELSEIF (iflag_ener_conserv==10) THEN |
361 |
4/4✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
|
18626880 | d_t(:,:)=d_t_vdf(:,:) |
362 |
4/4✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
|
18626880 | d_u(:,:)=d_u_vdf(:,:)+d_u_ajs(:,:)+d_u_con(:,:)+d_u_oro(:,:)+d_u_lif(:,:) |
363 |
4/4✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
|
18626880 | d_v(:,:)=d_v_vdf(:,:)+d_v_ajs(:,:)+d_v_con(:,:)+d_v_oro(:,:)+d_v_lif(:,:) |
364 | ✗ | ELSEIF (iflag_ener_conserv==11) THEN | |
365 | ✗ | d_t(:,:)=d_t_vdf(:,:) | |
366 | ✗ | d_u(:,:)=d_u_vdf(:,:)+d_u_ajs(:,:)+d_u_con(:,:)+d_u_oro(:,:)+d_u_lif(:,:) | |
367 | ✗ | d_v(:,:)=d_v_vdf(:,:)+d_v_ajs(:,:)+d_v_con(:,:)+d_v_oro(:,:)+d_v_lif(:,:) | |
368 | ✗ | IF (ok_hines) THEN | |
369 | ✗ | d_u_vdf(:,:)=d_u_vdf(:,:)+du_gwd_hines(:,:) | |
370 | ✗ | d_v_vdf(:,:)=d_v_vdf(:,:)+dv_gwd_hines(:,:) | |
371 | ENDIF | ||
372 | ✗ | IF (.not. ok_hines .and. ok_gwd_rando) THEN | |
373 | ✗ | d_u_vdf(:,:)=d_u_vdf(:,:)+du_gwd_front(:,:) | |
374 | ✗ | d_v_vdf(:,:)=d_v_vdf(:,:)+dv_gwd_front(:,:) | |
375 | ENDIF | ||
376 | ✗ | IF (ok_gwd_rando) THEN | |
377 | ✗ | d_u_vdf(:,:)=d_u_vdf(:,:)+du_gwd_rando(:,:) | |
378 | ✗ | d_v_vdf(:,:)=d_v_vdf(:,:)+dv_gwd_rando(:,:) | |
379 | ENDIF | ||
380 | ELSE | ||
381 | ✗ | abort_message = 'iflag_ener_conserv non prevu' | |
382 | ✗ | CALL abort_physic (modname,abort_message,1) | |
383 | ENDIF | ||
384 | |||
385 | !---------------------------------------------------------------------------- | ||
386 | ! Two options wether we consider time integration in the energy conservation | ||
387 | !---------------------------------------------------------------------------- | ||
388 | |||
389 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | if (iflag_ener_conserv==2) then |
390 | ✗ | zu(:,:)=puo(:,:) | |
391 | ✗ | zv(:,:)=pvo(:,:) | |
392 | else | ||
393 |
1/2✓ Branch 0 taken 480 times.
✗ Branch 1 not taken.
|
480 | IF (iflag_pbl>=20 .AND. iflag_pbl<=27) THEN |
394 | ✗ | zu(:,:)=puo(:,:)+d_u_vdf(:,:)+0.5*d_u(:,:) | |
395 | ✗ | zv(:,:)=pvo(:,:)+d_v_vdf(:,:)+0.5*d_v(:,:) | |
396 | ELSE | ||
397 |
4/4✓ Branch 0 taken 480 times.
✓ Branch 1 taken 18720 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
|
18626880 | zu(:,:)=puo(:,:)+0.5*d_u(:,:) |
398 |
4/4✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
|
18626880 | zv(:,:)=pvo(:,:)+0.5*d_v(:,:) |
399 | ENDIF | ||
400 | endif | ||
401 | |||
402 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | fluxu(:,klev+1)=0. |
403 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | fluxv(:,klev+1)=0. |
404 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | fluxt(:,klev+1)=0. |
405 | |||
406 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 18720 times.
|
19200 | do k=klev,1,-1 |
407 |
2/2✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 18607680 times.
|
18626400 | fluxu(:,k)=fluxu(:,k+1)+masse(:,k)*d_u(:,k) |
408 |
2/2✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 18607680 times.
|
18626400 | fluxv(:,k)=fluxv(:,k+1)+masse(:,k)*d_v(:,k) |
409 |
2/2✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
|
18626880 | fluxt(:,k)=fluxt(:,k+1)+masse(:,k)*d_t(:,k)/exner(:,k) |
410 | enddo | ||
411 | |||
412 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | dddu(:,1)=2*zu(:,1)*fluxu(:,1) |
413 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | dddv(:,1)=2*zv(:,1)*fluxv(:,1) |
414 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | dddt(:,1)=(exner(:,1)-1.)*fluxt(:,1) |
415 | |||
416 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 18240 times.
|
18720 | do k=2,klev |
417 |
2/2✓ Branch 0 taken 18240 times.
✓ Branch 1 taken 18130560 times.
|
18148800 | dddu(:,k)=(zu(:,k)-zu(:,k-1))*fluxu(:,k) |
418 |
2/2✓ Branch 0 taken 18240 times.
✓ Branch 1 taken 18130560 times.
|
18148800 | dddv(:,k)=(zv(:,k)-zv(:,k-1))*fluxv(:,k) |
419 |
2/2✓ Branch 0 taken 18130560 times.
✓ Branch 1 taken 18240 times.
|
18149280 | dddt(:,k)=(exner(:,k)-exner(:,k-1))*fluxt(:,k) |
420 | enddo | ||
421 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | dddu(:,klev+1)=0. |
422 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | dddv(:,klev+1)=0. |
423 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | dddt(:,klev+1)=0. |
424 | |||
425 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 18720 times.
|
19200 | do k=1,klev |
426 |
2/2✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 18607680 times.
|
18626400 | d_t_ech(:,k)=-(rcpd*(dddt(:,k)+dddt(:,k+1)))/(2.*rcpd*masse(:,k)) |
427 |
2/2✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 18607680 times.
|
18626880 | d_t_ec(:,k)=-(dddu(:,k)+dddu(:,k+1)+dddv(:,k)+dddv(:,k+1))/(2.*rcpd*masse(:,k))+d_t_ech(:,k) |
428 | enddo | ||
429 | |||
430 | ENDIF | ||
431 | |||
432 | !================================================================ | ||
433 | ! Computation of integrated enthalpie and kinetic energy variation | ||
434 | ! FH (hourdin@lmd.jussieu.fr), 2013/04/25 | ||
435 | ! bils_ec : energie conservation term | ||
436 | ! bils_ech : part of this term linked to temperature | ||
437 | ! bils_tke : change of TKE | ||
438 | ! bils_diss : dissipation of TKE (when activated) | ||
439 | ! bils_kinetic : change of kinetic energie of the column | ||
440 | ! bils_enthalp : change of enthalpie | ||
441 | ! bils_latent : change of latent heat. Computed between | ||
442 | ! after reevaporation (at the beginning of the physics) | ||
443 | ! and before large scale condensation (fisrtilp) | ||
444 | !================================================================ | ||
445 | |||
446 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_ec(:)=0. |
447 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_ech(:)=0. |
448 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_tke(:)=0. |
449 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_diss(:)=0. |
450 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_kinetic(:)=0. |
451 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_enthalp(:)=0. |
452 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | bils_latent(:)=0. |
453 |
2/2✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
|
19200 | DO k=1,klev |
454 |
2/2✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
|
18626400 | bils_ec(:)=bils_ec(:)-d_t_ec(:,k)*masse(:,k) |
455 |
2/2✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
|
18626400 | bils_diss(:)=bils_diss(:)-d_t_diss(:,k)*masse(:,k) |
456 | bils_kinetic(:)=bils_kinetic(:)+masse(:,k)* & | ||
457 | & (pun(:,k)*pun(:,k)+pvn(:,k)*pvn(:,k) & | ||
458 |
2/2✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
|
18626400 | & -puo(:,k)*puo(:,k)-pvo(:,k)*pvo(:,k)) |
459 | bils_enthalp(:)= & | ||
460 |
2/2✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
|
18626400 | & bils_enthalp(:)+masse(:,k)*(ptn(:,k)-pto(:,k)+d_t_ec(:,k)-d_t_eva(:,k)-d_t_lsc(:,k)) |
461 | ! & bils_enthalp(:)+masse(:,k)*(ptn(:,k)-pto(:,k)+d_t_ec(:,k)) | ||
462 | bils_latent(:)=bils_latent(:)+masse(:,k)* & | ||
463 | ! & (pqn(:,k)-pqo(:,k)) | ||
464 |
2/2✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
|
18626880 | & (pqn(:,k)-pqo(:,k)-d_q_eva(:,k)-d_q_lsc(:,k)) |
465 | ENDDO | ||
466 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | bils_ec(:)=rcpd*bils_ec(:)/pdtphys |
467 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | bils_diss(:)=rcpd*bils_diss(:)/pdtphys |
468 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | bils_kinetic(:)= 0.5*bils_kinetic(:)/pdtphys |
469 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_enthalp(:)=rcpd*bils_enthalp(:)/pdtphys |
470 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_latent(:)=rlvtt*bils_latent(:)/pdtphys |
471 | !jyg< | ||
472 |
1/2✓ Branch 0 taken 480 times.
✗ Branch 1 not taken.
|
480 | IF (iflag_pbl > 1) THEN |
473 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 18720 times.
|
19200 | DO k=1,klev |
474 |
2/2✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 18607680 times.
|
18626880 | bils_tke(:)=bils_tke(:)+0.5*(dtke(:,k)+dtke(:,k+1))*masse(:,k) |
475 | ENDDO | ||
476 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_tke(:)=bils_tke(:)/pdtphys |
477 | ENDIF ! (iflag_pbl > 1) | ||
478 | !>jyg | ||
479 | |||
480 |
1/2✓ Branch 0 taken 480 times.
✗ Branch 1 not taken.
|
480 | IF (iflag_ener_conserv>=1) THEN |
481 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | bils_ech(:)=0. |
482 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 18720 times.
|
19200 | DO k=1,klev |
483 |
2/2✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
|
18626880 | bils_ech(:)=bils_ech(:)-d_t_ech(:,k)*masse(:,k) |
484 | ENDDO | ||
485 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | bils_ech(:)=rcpd*bils_ech(:)/pdtphys |
486 | ENDIF | ||
487 | |||
488 | 480 | RETURN | |
489 | |||
490 | END | ||
491 |