/[lmdze]/trunk/Sources/phylmd/physiq.f
ViewVC logotype

Annotation of /trunk/Sources/phylmd/physiq.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 203 - (hide annotations)
Wed Jun 8 15:10:12 2016 UTC (7 years, 11 months ago) by guez
File size: 48454 byte(s)
if_ebil in physiq can be modified by reading physiq_nml so tests on
if_ebil should be after reading physiq_nml.

1 guez 3 module physiq_m
2    
3     IMPLICIT none
4    
5     contains
6    
7 guez 154 SUBROUTINE physiq(lafin, dayvrai, time, paprs, play, pphi, pphis, u, v, t, &
8     qx, omega, d_u, d_v, d_t, d_qx)
9 guez 3
10 guez 72 ! From phylmd/physiq.F, version 1.22 2006/02/20 09:38:28
11     ! (subversion revision 678)
12    
13 guez 154 ! Author: Z. X. Li (LMD/CNRS) 1993
14 guez 3
15 guez 49 ! This is the main procedure for the "physics" part of the program.
16 guez 3
17 guez 56 use aaam_bud_m, only: aaam_bud
18 guez 51 USE abort_gcm_m, ONLY: abort_gcm
19 guez 53 use ajsec_m, only: ajsec
20 guez 52 use calltherm_m, only: calltherm
21 guez 202 USE clesphys, ONLY: cdhmax, cdmmax, ecrit_ins, ksta, ksta_ter, ok_kzmin, &
22     ok_instan
23 guez 182 USE clesphys2, ONLY: cycle_diurne, conv_emanuel, nbapp_rad, new_oliq, &
24 guez 101 ok_orodr, ok_orolf
25 guez 51 USE clmain_m, ONLY: clmain
26 guez 72 use clouds_gno_m, only: clouds_gno
27 guez 154 use comconst, only: dtphys
28 guez 137 USE comgeomphy, ONLY: airephy
29 guez 51 USE concvl_m, ONLY: concvl
30 guez 202 USE conf_gcm_m, ONLY: offline, day_step, iphysiq, lmt_pas
31 guez 51 USE conf_phys_m, ONLY: conf_phys
32 guez 62 use conflx_m, only: conflx
33 guez 51 USE ctherm, ONLY: iflag_thermals, nsplit_thermals
34 guez 52 use diagcld2_m, only: diagcld2
35 guez 51 use diagetpq_m, only: diagetpq
36 guez 62 use diagphy_m, only: diagphy
37 guez 90 USE dimens_m, ONLY: llm, nqmx
38 guez 98 USE dimphy, ONLY: klon
39 guez 51 USE dimsoil, ONLY: nsoilmx
40 guez 52 use drag_noro_m, only: drag_noro
41 guez 129 use dynetat0_m, only: day_ref, annee_ref
42 guez 51 USE fcttre, ONLY: foeew, qsatl, qsats, thermcep
43 guez 68 use fisrtilp_m, only: fisrtilp
44 guez 51 USE hgardfou_m, ONLY: hgardfou
45 guez 191 USE histsync_m, ONLY: histsync
46     USE histwrite_phy_m, ONLY: histwrite_phy
47 guez 51 USE indicesol, ONLY: clnsurf, epsfra, is_lic, is_oce, is_sic, is_ter, &
48     nbsrf
49 guez 191 USE ini_histins_m, ONLY: ini_histins, nid_ins
50 guez 157 use netcdf95, only: NF95_CLOSE
51 guez 68 use newmicro_m, only: newmicro
52 guez 191 use nr_util, only: assert
53 guez 175 use nuage_m, only: nuage
54 guez 98 USE orbite_m, ONLY: orbite
55 guez 51 USE ozonecm_m, ONLY: ozonecm
56     USE phyetat0_m, ONLY: phyetat0, rlat, rlon
57     USE phyredem_m, ONLY: phyredem
58 guez 157 USE phyredem0_m, ONLY: phyredem0
59 guez 51 USE phystokenc_m, ONLY: phystokenc
60     USE phytrac_m, ONLY: phytrac
61     USE qcheck_m, ONLY: qcheck
62 guez 53 use radlwsw_m, only: radlwsw
63 guez 158 use yoegwd, only: sugwd
64 guez 171 USE suphec_m, ONLY: rcpd, retv, rg, rlvtt, romega, rsigma, rtt
65 guez 191 use time_phylmdz, only: itap, increment_itap
66 guez 169 use transp_m, only: transp
67 guez 178 use transp_lay_m, only: transp_lay
68 guez 68 use unit_nml_m, only: unit_nml
69 guez 92 USE ymds2ju_m, ONLY: ymds2ju
70 guez 51 USE yoethf_m, ONLY: r2es, rvtmp2
71 guez 98 use zenang_m, only: zenang
72 guez 3
73 guez 91 logical, intent(in):: lafin ! dernier passage
74 guez 3
75 guez 130 integer, intent(in):: dayvrai
76     ! current day number, based at value 1 on January 1st of annee_ref
77 guez 15
78 guez 90 REAL, intent(in):: time ! heure de la journ\'ee en fraction de jour
79 guez 3
80 guez 98 REAL, intent(in):: paprs(:, :) ! (klon, llm + 1)
81     ! pression pour chaque inter-couche, en Pa
82 guez 15
83 guez 98 REAL, intent(in):: play(:, :) ! (klon, llm)
84     ! pression pour le mileu de chaque couche (en Pa)
85 guez 3
86 guez 190 REAL, intent(in):: pphi(:, :) ! (klon, llm)
87 guez 97 ! géopotentiel de chaque couche (référence sol)
88 guez 3
89 guez 98 REAL, intent(in):: pphis(:) ! (klon) géopotentiel du sol
90 guez 3
91 guez 98 REAL, intent(in):: u(:, :) ! (klon, llm)
92 guez 202 ! vitesse dans la direction X (de O a E) en m / s
93 guez 51
94 guez 202 REAL, intent(in):: v(:, :) ! (klon, llm) vitesse Y (de S a N) en m / s
95 guez 98 REAL, intent(in):: t(:, :) ! (klon, llm) temperature (K)
96 guez 3
97 guez 98 REAL, intent(in):: qx(:, :, :) ! (klon, llm, nqmx)
98 guez 90 ! (humidit\'e sp\'ecifique et fractions massiques des autres traceurs)
99 guez 3
100 guez 202 REAL, intent(in):: omega(:, :) ! (klon, llm) vitesse verticale en Pa / s
101 guez 98 REAL, intent(out):: d_u(:, :) ! (klon, llm) tendance physique de "u" (m s-2)
102     REAL, intent(out):: d_v(:, :) ! (klon, llm) tendance physique de "v" (m s-2)
103 guez 202 REAL, intent(out):: d_t(:, :) ! (klon, llm) tendance physique de "t" (K / s)
104 guez 3
105 guez 98 REAL, intent(out):: d_qx(:, :, :) ! (klon, llm, nqmx)
106     ! tendance physique de "qx" (s-1)
107    
108 guez 91 ! Local:
109    
110 guez 35 LOGICAL:: firstcal = .true.
111    
112 guez 190 LOGICAL, PARAMETER:: check = .FALSE.
113 guez 98 ! Verifier la conservation du modele en eau
114 guez 3
115 guez 51 LOGICAL, PARAMETER:: ok_stratus = .FALSE.
116 guez 49 ! Ajouter artificiellement les stratus
117    
118 guez 200 ! pour phystoke avec thermiques
119 guez 51 REAL fm_therm(klon, llm + 1)
120 guez 3 REAL entr_therm(klon, llm)
121 guez 51 real, save:: q2(klon, llm + 1, nbsrf)
122 guez 3
123 guez 98 INTEGER, PARAMETER:: ivap = 1 ! indice de traceur pour vapeur d'eau
124     INTEGER, PARAMETER:: iliq = 2 ! indice de traceur pour eau liquide
125 guez 3
126 guez 49 REAL, save:: t_ancien(klon, llm), q_ancien(klon, llm)
127     LOGICAL, save:: ancien_ok
128 guez 3
129 guez 202 REAL d_t_dyn(klon, llm) ! tendance dynamique pour "t" (K / s)
130     REAL d_q_dyn(klon, llm) ! tendance dynamique pour "q" (kg / kg / s)
131 guez 3
132     real da(klon, llm), phi(klon, llm, llm), mp(klon, llm)
133    
134 guez 70 REAL swdn0(klon, llm + 1), swdn(klon, llm + 1)
135     REAL swup0(klon, llm + 1), swup(klon, llm + 1)
136 guez 3 SAVE swdn0, swdn, swup0, swup
137    
138 guez 70 REAL lwdn0(klon, llm + 1), lwdn(klon, llm + 1)
139     REAL lwup0(klon, llm + 1), lwup(klon, llm + 1)
140 guez 190 SAVE lwdn0, lwdn, lwup0, lwup
141 guez 3
142     ! prw: precipitable water
143     real prw(klon)
144    
145 guez 202 ! flwp, fiwp = Liquid Water Path & Ice Water Path (kg / m2)
146     ! flwc, fiwc = Liquid Water Content & Ice Water Content (kg / kg)
147 guez 3 REAL flwp(klon), fiwp(klon)
148     REAL flwc(klon, llm), fiwc(klon, llm)
149    
150     ! Variables propres a la physique
151    
152     INTEGER, save:: radpas
153 guez 125 ! Radiative transfer computations are made every "radpas" call to
154     ! "physiq".
155 guez 3
156     REAL radsol(klon)
157 guez 47 SAVE radsol ! bilan radiatif au sol calcule par code radiatif
158 guez 3
159 guez 49 REAL, save:: ftsol(klon, nbsrf) ! skin temperature of surface fraction
160 guez 3
161 guez 49 REAL, save:: ftsoil(klon, nsoilmx, nbsrf)
162     ! soil temperature of surface fraction
163 guez 3
164 guez 71 REAL, save:: fevap(klon, nbsrf) ! evaporation
165 guez 3 REAL fluxlat(klon, nbsrf)
166     SAVE fluxlat
167    
168 guez 98 REAL, save:: fqsurf(klon, nbsrf)
169     ! humidite de l'air au contact de la surface
170 guez 3
171 guez 101 REAL, save:: qsol(klon)
172     ! column-density of water in soil, in kg m-2
173    
174 guez 98 REAL, save:: fsnow(klon, nbsrf) ! epaisseur neigeuse
175 guez 155 REAL, save:: falbe(klon, nbsrf) ! albedo visible par type de surface
176 guez 3
177 guez 90 ! Param\`etres de l'orographie \`a l'\'echelle sous-maille (OESM) :
178 guez 13 REAL, save:: zmea(klon) ! orographie moyenne
179     REAL, save:: zstd(klon) ! deviation standard de l'OESM
180     REAL, save:: zsig(klon) ! pente de l'OESM
181     REAL, save:: zgam(klon) ! anisotropie de l'OESM
182     REAL, save:: zthe(klon) ! orientation de l'OESM
183     REAL, save:: zpic(klon) ! Maximum de l'OESM
184     REAL, save:: zval(klon) ! Minimum de l'OESM
185     REAL, save:: rugoro(klon) ! longueur de rugosite de l'OESM
186 guez 3 REAL zulow(klon), zvlow(klon)
187 guez 178 INTEGER igwd, itest(klon)
188 guez 3
189 guez 189 REAL, save:: agesno(klon, nbsrf) ! age de la neige
190     REAL, save:: run_off_lic_0(klon)
191 guez 3
192 guez 189 ! Variables li\'ees \`a la convection d'Emanuel :
193     REAL, save:: Ma(klon, llm) ! undilute upward mass flux
194     REAL, save:: qcondc(klon, llm) ! in-cld water content from convect
195 guez 72 REAL, save:: sig1(klon, llm), w01(klon, llm)
196 guez 3
197 guez 189 ! Variables pour la couche limite (Alain Lahellec) :
198 guez 3 REAL cdragh(klon) ! drag coefficient pour T and Q
199     REAL cdragm(klon) ! drag coefficient pour vent
200    
201 guez 69 ! Pour phytrac :
202 guez 47 REAL ycoefh(klon, llm) ! coef d'echange pour phytrac
203     REAL yu1(klon) ! vents dans la premiere couche U
204     REAL yv1(klon) ! vents dans la premiere couche V
205 guez 191 REAL ffonte(klon, nbsrf) ! flux thermique utilise pour fondre la neige
206    
207     REAL fqcalving(klon, nbsrf)
208     ! flux d'eau "perdue" par la surface et necessaire pour limiter la
209 guez 202 ! hauteur de neige, en kg / m2 / s
210 guez 191
211 guez 3 REAL zxffonte(klon), zxfqcalving(klon)
212    
213     REAL pfrac_impa(klon, llm)! Produits des coefs lessivage impaction
214     save pfrac_impa
215     REAL pfrac_nucl(klon, llm)! Produits des coefs lessivage nucleation
216     save pfrac_nucl
217     REAL pfrac_1nucl(klon, llm)! Produits des coefs lessi nucl (alpha = 1)
218     save pfrac_1nucl
219     REAL frac_impa(klon, llm) ! fractions d'aerosols lessivees (impaction)
220     REAL frac_nucl(klon, llm) ! idem (nucleation)
221    
222 guez 101 REAL, save:: rain_fall(klon)
223 guez 202 ! liquid water mass flux (kg / m2 / s), positive down
224 guez 62
225 guez 101 REAL, save:: snow_fall(klon)
226 guez 202 ! solid water mass flux (kg / m2 / s), positive down
227 guez 101
228 guez 3 REAL rain_tiedtke(klon), snow_tiedtke(klon)
229    
230 guez 71 REAL evap(klon), devap(klon) ! evaporation and its derivative
231 guez 3 REAL sens(klon), dsens(klon) ! chaleur sensible et sa derivee
232 guez 47 REAL dlw(klon) ! derivee infra rouge
233 guez 3 SAVE dlw
234     REAL bils(klon) ! bilan de chaleur au sol
235 guez 190 REAL, save:: fder(klon) ! Derive de flux (sensible et latente)
236 guez 3 REAL ve(klon) ! integr. verticale du transport meri. de l'energie
237     REAL vq(klon) ! integr. verticale du transport meri. de l'eau
238     REAL ue(klon) ! integr. verticale du transport zonal de l'energie
239     REAL uq(klon) ! integr. verticale du transport zonal de l'eau
240    
241 guez 98 REAL, save:: frugs(klon, nbsrf) ! longueur de rugosite
242 guez 3 REAL zxrugs(klon) ! longueur de rugosite
243    
244     ! Conditions aux limites
245    
246     INTEGER julien
247 guez 70 REAL, save:: pctsrf(klon, nbsrf) ! percentage of surface
248 guez 155 REAL, save:: albsol(klon) ! albedo du sol total visible
249 guez 17 REAL, SAVE:: wo(klon, llm) ! column density of ozone in a cell, in kDU
250 guez 3
251 guez 72 real, save:: clwcon(klon, llm), rnebcon(klon, llm)
252     real, save:: clwcon0(klon, llm), rnebcon0(klon, llm)
253 guez 3
254 guez 47 REAL rhcl(klon, llm) ! humiditi relative ciel clair
255     REAL dialiq(klon, llm) ! eau liquide nuageuse
256     REAL diafra(klon, llm) ! fraction nuageuse
257     REAL cldliq(klon, llm) ! eau liquide nuageuse
258     REAL cldfra(klon, llm) ! fraction nuageuse
259     REAL cldtau(klon, llm) ! epaisseur optique
260     REAL cldemi(klon, llm) ! emissivite infrarouge
261 guez 3
262 guez 47 REAL fluxq(klon, llm, nbsrf) ! flux turbulent d'humidite
263     REAL fluxt(klon, llm, nbsrf) ! flux turbulent de chaleur
264     REAL fluxu(klon, llm, nbsrf) ! flux turbulent de vitesse u
265     REAL fluxv(klon, llm, nbsrf) ! flux turbulent de vitesse v
266 guez 3
267     REAL zxfluxt(klon, llm)
268     REAL zxfluxq(klon, llm)
269     REAL zxfluxu(klon, llm)
270     REAL zxfluxv(klon, llm)
271    
272 guez 90 ! Le rayonnement n'est pas calcul\'e tous les pas, il faut donc que
273     ! les variables soient r\'emanentes.
274 guez 53 REAL, save:: heat(klon, llm) ! chauffage solaire
275 guez 154 REAL, save:: heat0(klon, llm) ! chauffage solaire ciel clair
276 guez 62 REAL, save:: cool(klon, llm) ! refroidissement infrarouge
277 guez 154 REAL, save:: cool0(klon, llm) ! refroidissement infrarouge ciel clair
278 guez 72 REAL, save:: topsw(klon), toplw(klon), solsw(klon)
279 guez 90 REAL, save:: sollw(klon) ! rayonnement infrarouge montant \`a la surface
280 guez 72 real, save:: sollwdown(klon) ! downward LW flux at surface
281 guez 62 REAL, save:: topsw0(klon), toplw0(klon), solsw0(klon), sollw0(klon)
282 guez 154 REAL, save:: albpla(klon)
283 guez 191 REAL fsollw(klon, nbsrf) ! bilan flux IR pour chaque sous-surface
284     REAL fsolsw(klon, nbsrf) ! flux solaire absorb\'e pour chaque sous-surface
285 guez 3
286 guez 202 REAL conv_q(klon, llm) ! convergence de l'humidite (kg / kg / s)
287     REAL conv_t(klon, llm) ! convergence of temperature (K / s)
288 guez 3
289 guez 191 REAL cldl(klon), cldm(klon), cldh(klon) ! nuages bas, moyen et haut
290     REAL cldt(klon), cldq(klon) ! nuage total, eau liquide integree
291 guez 3
292     REAL zxtsol(klon), zxqsurf(klon), zxsnow(klon), zxfluxlat(klon)
293    
294 guez 118 REAL dist, mu0(klon), fract(klon)
295     real longi
296 guez 3 REAL z_avant(klon), z_apres(klon), z_factor(klon)
297     REAL za, zb
298 guez 103 REAL zx_t, zx_qs, zcor
299 guez 3 real zqsat(klon, llm)
300     INTEGER i, k, iq, nsrf
301 guez 69 REAL, PARAMETER:: t_coup = 234.
302 guez 3 REAL zphi(klon, llm)
303    
304 guez 200 ! cf. Anne Mathieu, variables pour la couche limite atmosphérique (hbtm)
305 guez 3
306 guez 49 REAL, SAVE:: pblh(klon, nbsrf) ! Hauteur de couche limite
307     REAL, SAVE:: plcl(klon, nbsrf) ! Niveau de condensation de la CLA
308     REAL, SAVE:: capCL(klon, nbsrf) ! CAPE de couche limite
309     REAL, SAVE:: oliqCL(klon, nbsrf) ! eau_liqu integree de couche limite
310     REAL, SAVE:: cteiCL(klon, nbsrf) ! cloud top instab. crit. couche limite
311     REAL, SAVE:: pblt(klon, nbsrf) ! T a la Hauteur de couche limite
312     REAL, SAVE:: therm(klon, nbsrf)
313     REAL, SAVE:: trmb1(klon, nbsrf) ! deep_cape
314 guez 190 REAL, SAVE:: trmb2(klon, nbsrf) ! inhibition
315 guez 49 REAL, SAVE:: trmb3(klon, nbsrf) ! Point Omega
316 guez 186 ! Grandeurs de sorties
317 guez 3 REAL s_pblh(klon), s_lcl(klon), s_capCL(klon)
318     REAL s_oliqCL(klon), s_cteiCL(klon), s_pblt(klon)
319     REAL s_therm(klon), s_trmb1(klon), s_trmb2(klon)
320     REAL s_trmb3(klon)
321    
322 guez 175 ! Variables pour la convection de K. Emanuel :
323 guez 3
324 guez 47 REAL upwd(klon, llm) ! saturated updraft mass flux
325     REAL dnwd(klon, llm) ! saturated downdraft mass flux
326     REAL dnwd0(klon, llm) ! unsaturated downdraft mass flux
327     REAL cape(klon) ! CAPE
328 guez 3 SAVE cape
329    
330 guez 47 INTEGER iflagctrl(klon) ! flag fonctionnement de convect
331 guez 3
332     ! Variables du changement
333    
334     ! con: convection
335 guez 51 ! lsc: large scale condensation
336 guez 3 ! ajs: ajustement sec
337 guez 90 ! eva: \'evaporation de l'eau liquide nuageuse
338 guez 51 ! vdf: vertical diffusion in boundary layer
339 guez 3 REAL d_t_con(klon, llm), d_q_con(klon, llm)
340     REAL d_u_con(klon, llm), d_v_con(klon, llm)
341     REAL d_t_lsc(klon, llm), d_q_lsc(klon, llm), d_ql_lsc(klon, llm)
342     REAL d_t_ajs(klon, llm), d_q_ajs(klon, llm)
343     REAL d_u_ajs(klon, llm), d_v_ajs(klon, llm)
344     REAL rneb(klon, llm)
345    
346 guez 71 REAL mfu(klon, llm), mfd(klon, llm)
347 guez 3 REAL pen_u(klon, llm), pen_d(klon, llm)
348     REAL pde_u(klon, llm), pde_d(klon, llm)
349     INTEGER kcbot(klon), kctop(klon), kdtop(klon)
350 guez 51 REAL pmflxr(klon, llm + 1), pmflxs(klon, llm + 1)
351     REAL prfl(klon, llm + 1), psfl(klon, llm + 1)
352 guez 3
353 guez 62 INTEGER, save:: ibas_con(klon), itop_con(klon)
354 guez 183 real ema_pct(klon) ! Emanuel pressure at cloud top, in Pa
355 guez 3
356     REAL rain_con(klon), rain_lsc(klon)
357 guez 183 REAL, save:: snow_con(klon) ! neige (mm / s)
358 guez 180 real snow_lsc(klon)
359 guez 3 REAL d_ts(klon, nbsrf)
360    
361     REAL d_u_vdf(klon, llm), d_v_vdf(klon, llm)
362     REAL d_t_vdf(klon, llm), d_q_vdf(klon, llm)
363    
364     REAL d_u_oro(klon, llm), d_v_oro(klon, llm)
365     REAL d_t_oro(klon, llm)
366     REAL d_u_lif(klon, llm), d_v_lif(klon, llm)
367     REAL d_t_lif(klon, llm)
368    
369 guez 68 REAL, save:: ratqs(klon, llm)
370     real ratqss(klon, llm), ratqsc(klon, llm)
371     real:: ratqsbas = 0.01, ratqshaut = 0.3
372 guez 3
373     ! Parametres lies au nouveau schema de nuages (SB, PDF)
374 guez 68 real:: fact_cldcon = 0.375
375     real:: facttemps = 1.e-4
376     logical:: ok_newmicro = .true.
377 guez 3 real facteur
378    
379 guez 68 integer:: iflag_cldcon = 1
380 guez 3 logical ptconv(klon, llm)
381    
382 guez 175 ! Variables pour effectuer les appels en s\'erie :
383 guez 3
384     REAL t_seri(klon, llm), q_seri(klon, llm)
385 guez 98 REAL ql_seri(klon, llm)
386 guez 3 REAL u_seri(klon, llm), v_seri(klon, llm)
387 guez 98 REAL tr_seri(klon, llm, nqmx - 2)
388 guez 3
389     REAL zx_rh(klon, llm)
390    
391     REAL zustrdr(klon), zvstrdr(klon)
392     REAL zustrli(klon), zvstrli(klon)
393     REAL zustrph(klon), zvstrph(klon)
394     REAL aam, torsfc
395    
396     REAL ve_lay(klon, llm) ! transport meri. de l'energie a chaque niveau vert.
397     REAL vq_lay(klon, llm) ! transport meri. de l'eau a chaque niveau vert.
398     REAL ue_lay(klon, llm) ! transport zonal de l'energie a chaque niveau vert.
399     REAL uq_lay(klon, llm) ! transport zonal de l'eau a chaque niveau vert.
400    
401     real date0
402    
403 guez 90 ! Variables li\'ees au bilan d'\'energie et d'enthalpie :
404 guez 3 REAL ztsol(klon)
405 guez 98 REAL d_h_vcol, d_qt, d_ec
406 guez 51 REAL, SAVE:: d_h_vcol_phy
407 guez 47 REAL zero_v(klon)
408 guez 97 CHARACTER(LEN = 20) tit
409 guez 51 INTEGER:: ip_ebil = 0 ! print level for energy conservation diagnostics
410 guez 190 INTEGER:: if_ebil = 0 ! verbosity for diagnostics of energy conservation
411 guez 51
412 guez 202 REAL d_t_ec(klon, llm)
413 guez 200 ! tendance due \`a la conversion Ec en énergie thermique
414    
415 guez 3 REAL ZRCPD
416 guez 51
417 guez 49 REAL t2m(klon, nbsrf), q2m(klon, nbsrf) ! temperature and humidity at 2 m
418 guez 69 REAL u10m(klon, nbsrf), v10m(klon, nbsrf) ! vents a 10 m
419     REAL zt2m(klon), zq2m(klon) ! temp., hum. 2 m moyenne s/ 1 maille
420     REAL zu10m(klon), zv10m(klon) ! vents a 10 m moyennes s/1 maille
421 guez 3
422 guez 69 ! Aerosol effects:
423    
424 guez 202 REAL sulfate(klon, llm) ! SO4 aerosol concentration (micro g / m3)
425 guez 69
426 guez 49 REAL, save:: sulfate_pi(klon, llm)
427 guez 202 ! SO4 aerosol concentration, in \mu g / m3, pre-industrial value
428 guez 3
429     REAL cldtaupi(klon, llm)
430 guez 191 ! cloud optical thickness for pre-industrial aerosols
431 guez 3
432 guez 47 REAL re(klon, llm) ! Cloud droplet effective radius
433     REAL fl(klon, llm) ! denominator of re
434 guez 3
435     ! Aerosol optical properties
436 guez 68 REAL, save:: tau_ae(klon, llm, 2), piz_ae(klon, llm, 2)
437     REAL, save:: cg_ae(klon, llm, 2)
438 guez 3
439 guez 68 REAL topswad(klon), solswad(klon) ! aerosol direct effect
440 guez 62 REAL topswai(klon), solswai(klon) ! aerosol indirect effect
441 guez 3
442 guez 68 LOGICAL:: ok_ade = .false. ! apply aerosol direct effect
443     LOGICAL:: ok_aie = .false. ! apply aerosol indirect effect
444 guez 3
445 guez 68 REAL:: bl95_b0 = 2., bl95_b1 = 0.2
446 guez 69 ! Parameters in equation (D) of Boucher and Lohmann (1995, Tellus
447     ! B). They link cloud droplet number concentration to aerosol mass
448     ! concentration.
449 guez 68
450 guez 3 SAVE u10m
451     SAVE v10m
452     SAVE t2m
453     SAVE q2m
454     SAVE ffonte
455     SAVE fqcalving
456     SAVE rain_con
457     SAVE topswai
458     SAVE topswad
459     SAVE solswai
460     SAVE solswad
461     SAVE d_u_con
462     SAVE d_v_con
463    
464 guez 190 real zmasse(klon, llm)
465 guez 17 ! (column-density of mass of air in a cell, in kg m-2)
466    
467 guez 191 integer, save:: ncid_startphy
468 guez 17
469 guez 191 namelist /physiq_nml/ fact_cldcon, facttemps, ok_newmicro, &
470     iflag_cldcon, ratqsbas, ratqshaut, if_ebil, ok_ade, ok_aie, bl95_b0, &
471     bl95_b1, iflag_thermals, nsplit_thermals
472 guez 68
473 guez 3 !----------------------------------------------------------------
474    
475 guez 69 IF (nqmx < 2) CALL abort_gcm('physiq', &
476 guez 171 'eaux vapeur et liquide sont indispensables')
477 guez 3
478 guez 7 test_firstcal: IF (firstcal) THEN
479 guez 47 ! initialiser
480 guez 51 u10m = 0.
481     v10m = 0.
482     t2m = 0.
483     q2m = 0.
484     ffonte = 0.
485     fqcalving = 0.
486     piz_ae = 0.
487     tau_ae = 0.
488     cg_ae = 0.
489 guez 98 rain_con = 0.
490     snow_con = 0.
491     topswai = 0.
492     topswad = 0.
493     solswai = 0.
494     solswad = 0.
495 guez 3
496 guez 72 d_u_con = 0.
497     d_v_con = 0.
498     rnebcon0 = 0.
499     clwcon0 = 0.
500     rnebcon = 0.
501     clwcon = 0.
502 guez 3
503 guez 47 pblh =0. ! Hauteur de couche limite
504     plcl =0. ! Niveau de condensation de la CLA
505     capCL =0. ! CAPE de couche limite
506     oliqCL =0. ! eau_liqu integree de couche limite
507     cteiCL =0. ! cloud top instab. crit. couche limite
508     pblt =0. ! T a la Hauteur de couche limite
509     therm =0.
510     trmb1 =0. ! deep_cape
511 guez 190 trmb2 =0. ! inhibition
512 guez 47 trmb3 =0. ! Point Omega
513 guez 3
514 guez 68 iflag_thermals = 0
515     nsplit_thermals = 1
516     print *, "Enter namelist 'physiq_nml'."
517     read(unit=*, nml=physiq_nml)
518     write(unit_nml, nml=physiq_nml)
519    
520 guez 203 IF (if_ebil >= 1) d_h_vcol_phy = 0.
521 guez 68 call conf_phys
522 guez 3
523     ! Initialiser les compteurs:
524    
525     frugs = 0.
526 guez 191 CALL phyetat0(pctsrf, ftsol, ftsoil, fqsurf, qsol, fsnow, falbe, &
527     fevap, rain_fall, snow_fall, solsw, sollw, dlw, radsol, frugs, &
528     agesno, zmea, zstd, zsig, zgam, zthe, zpic, zval, t_ancien, &
529     q_ancien, ancien_ok, rnebcon, ratqs, clwcon, run_off_lic_0, sig1, &
530     w01, ncid_startphy)
531 guez 3
532 guez 47 ! ATTENTION : il faudra a terme relire q2 dans l'etat initial
533 guez 69 q2 = 1e-8
534 guez 3
535 guez 154 radpas = lmt_pas / nbapp_rad
536 guez 191 print *, "radpas = ", radpas
537 guez 154
538 guez 90 ! Initialisation pour le sch\'ema de convection d'Emanuel :
539 guez 182 IF (conv_emanuel) THEN
540 guez 69 ibas_con = 1
541     itop_con = 1
542 guez 3 ENDIF
543    
544     IF (ok_orodr) THEN
545 guez 13 rugoro = MAX(1e-5, zstd * zsig / 2)
546 guez 54 CALL SUGWD(paprs, play)
547 guez 13 else
548     rugoro = 0.
549 guez 3 ENDIF
550    
551 guez 202 ecrit_ins = NINT(ecrit_ins / dtphys)
552 guez 3
553 guez 47 ! Initialisation des sorties
554 guez 3
555 guez 191 call ini_histins(dtphys)
556 guez 129 CALL ymds2ju(annee_ref, 1, day_ref, 0., date0)
557 guez 69 ! Positionner date0 pour initialisation de ORCHIDEE
558     print *, 'physiq date0: ', date0
559 guez 202 CALL phyredem0
560 guez 7 ENDIF test_firstcal
561 guez 3
562 guez 203 IF (if_ebil >= 1) zero_v = 0.
563    
564 guez 91 ! We will modify variables *_seri and we will not touch variables
565 guez 98 ! u, v, t, qx:
566     t_seri = t
567     u_seri = u
568     v_seri = v
569     q_seri = qx(:, :, ivap)
570     ql_seri = qx(:, :, iliq)
571 guez 157 tr_seri = qx(:, :, 3:nqmx)
572 guez 3
573 guez 98 ztsol = sum(ftsol * pctsrf, dim = 2)
574 guez 3
575 guez 190 IF (if_ebil >= 1) THEN
576 guez 62 tit = 'after dynamics'
577     CALL diagetpq(airephy, tit, ip_ebil, 1, 1, dtphys, t_seri, q_seri, &
578 guez 98 ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)
579 guez 90 ! Comme les tendances de la physique sont ajout\'es dans la
580 guez 190 ! dynamique, la variation d'enthalpie par la dynamique devrait
581     ! \^etre \'egale \`a la variation de la physique au pas de temps
582     ! pr\'ec\'edent. Donc la somme de ces 2 variations devrait \^etre
583     ! nulle.
584 guez 62 call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
585 guez 51 zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol + d_h_vcol_phy, &
586 guez 98 d_qt, 0.)
587 guez 3 END IF
588    
589 guez 51 ! Diagnostic de la tendance dynamique :
590 guez 3 IF (ancien_ok) THEN
591     DO k = 1, llm
592     DO i = 1, klon
593 guez 49 d_t_dyn(i, k) = (t_seri(i, k) - t_ancien(i, k)) / dtphys
594     d_q_dyn(i, k) = (q_seri(i, k) - q_ancien(i, k)) / dtphys
595 guez 3 ENDDO
596     ENDDO
597     ELSE
598     DO k = 1, llm
599     DO i = 1, klon
600 guez 72 d_t_dyn(i, k) = 0.
601     d_q_dyn(i, k) = 0.
602 guez 3 ENDDO
603     ENDDO
604     ancien_ok = .TRUE.
605     ENDIF
606    
607     ! Ajouter le geopotentiel du sol:
608     DO k = 1, llm
609     DO i = 1, klon
610     zphi(i, k) = pphi(i, k) + pphis(i)
611     ENDDO
612     ENDDO
613    
614 guez 49 ! Check temperatures:
615 guez 3 CALL hgardfou(t_seri, ftsol)
616    
617 guez 191 call increment_itap
618 guez 130 julien = MOD(dayvrai, 360)
619 guez 3 if (julien == 0) julien = 360
620    
621 guez 103 forall (k = 1: llm) zmasse(:, k) = (paprs(:, k) - paprs(:, k + 1)) / rg
622 guez 17
623 guez 98 ! Prescrire l'ozone :
624 guez 57 wo = ozonecm(REAL(julien), paprs)
625 guez 3
626 guez 90 ! \'Evaporation de l'eau liquide nuageuse :
627 guez 51 DO k = 1, llm
628 guez 3 DO i = 1, klon
629 guez 51 zb = MAX(0., ql_seri(i, k))
630     t_seri(i, k) = t_seri(i, k) &
631     - zb * RLVTT / RCPD / (1. + RVTMP2 * q_seri(i, k))
632 guez 3 q_seri(i, k) = q_seri(i, k) + zb
633     ENDDO
634     ENDDO
635 guez 51 ql_seri = 0.
636 guez 3
637 guez 190 IF (if_ebil >= 2) THEN
638 guez 62 tit = 'after reevap'
639     CALL diagetpq(airephy, tit, ip_ebil, 2, 1, dtphys, t_seri, q_seri, &
640 guez 98 ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)
641 guez 62 call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
642 guez 98 zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec)
643 guez 3 END IF
644    
645 guez 98 frugs = MAX(frugs, 0.000015)
646     zxrugs = sum(frugs * pctsrf, dim = 2)
647 guez 3
648 guez 191 ! Calculs n\'ecessaires au calcul de l'albedo dans l'interface avec
649 guez 118 ! la surface.
650 guez 3
651 guez 118 CALL orbite(REAL(julien), longi, dist)
652 guez 3 IF (cycle_diurne) THEN
653 guez 125 CALL zenang(longi, time, dtphys * radpas, mu0, fract)
654 guez 3 ELSE
655 guez 174 mu0 = - 999.999
656 guez 3 ENDIF
657    
658 guez 47 ! Calcul de l'abedo moyen par maille
659 guez 98 albsol = sum(falbe * pctsrf, dim = 2)
660 guez 3
661 guez 90 ! R\'epartition sous maille des flux longwave et shortwave
662     ! R\'epartition du longwave par sous-surface lin\'earis\'ee
663 guez 3
664 guez 98 forall (nsrf = 1: nbsrf)
665     fsollw(:, nsrf) = sollw + 4. * RSIGMA * ztsol**3 &
666     * (ztsol - ftsol(:, nsrf))
667     fsolsw(:, nsrf) = solsw * (1. - falbe(:, nsrf)) / (1. - albsol)
668     END forall
669 guez 3
670     fder = dlw
671    
672 guez 38 ! Couche limite:
673 guez 3
674 guez 202 CALL clmain(dtphys, pctsrf, t_seri, q_seri, u_seri, v_seri, julien, mu0, &
675     ftsol, cdmmax, cdhmax, ksta, ksta_ter, ok_kzmin, ftsoil, qsol, &
676     paprs, play, fsnow, fqsurf, fevap, falbe, fluxlat, rain_fall, &
677     snow_fall, fsolsw, fsollw, fder, rlat, frugs, agesno, rugoro, &
678     d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_ts, fluxt, fluxq, fluxu, &
679     fluxv, cdragh, cdragm, q2, dsens, devap, ycoefh, yu1, yv1, t2m, q2m, &
680     u10m, v10m, pblh, capCL, oliqCL, cteiCL, pblT, therm, trmb1, trmb2, &
681     trmb3, plcl, fqcalving, ffonte, run_off_lic_0)
682 guez 3
683 guez 90 ! Incr\'ementation des flux
684 guez 40
685 guez 51 zxfluxt = 0.
686     zxfluxq = 0.
687     zxfluxu = 0.
688     zxfluxv = 0.
689 guez 3 DO nsrf = 1, nbsrf
690     DO k = 1, llm
691     DO i = 1, klon
692 guez 70 zxfluxt(i, k) = zxfluxt(i, k) + fluxt(i, k, nsrf) * pctsrf(i, nsrf)
693     zxfluxq(i, k) = zxfluxq(i, k) + fluxq(i, k, nsrf) * pctsrf(i, nsrf)
694     zxfluxu(i, k) = zxfluxu(i, k) + fluxu(i, k, nsrf) * pctsrf(i, nsrf)
695     zxfluxv(i, k) = zxfluxv(i, k) + fluxv(i, k, nsrf) * pctsrf(i, nsrf)
696 guez 3 END DO
697     END DO
698     END DO
699     DO i = 1, klon
700     sens(i) = - zxfluxt(i, 1) ! flux de chaleur sensible au sol
701 guez 90 evap(i) = - zxfluxq(i, 1) ! flux d'\'evaporation au sol
702 guez 3 fder(i) = dlw(i) + dsens(i) + devap(i)
703     ENDDO
704    
705     DO k = 1, llm
706     DO i = 1, klon
707     t_seri(i, k) = t_seri(i, k) + d_t_vdf(i, k)
708     q_seri(i, k) = q_seri(i, k) + d_q_vdf(i, k)
709     u_seri(i, k) = u_seri(i, k) + d_u_vdf(i, k)
710     v_seri(i, k) = v_seri(i, k) + d_v_vdf(i, k)
711     ENDDO
712     ENDDO
713    
714 guez 190 IF (if_ebil >= 2) THEN
715 guez 62 tit = 'after clmain'
716     CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &
717 guez 98 ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)
718 guez 62 call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
719 guez 98 sens, evap, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec)
720 guez 3 END IF
721    
722 guez 49 ! Update surface temperature:
723 guez 3
724     DO i = 1, klon
725 guez 72 zxfluxlat(i) = 0.
726 guez 3
727 guez 72 zt2m(i) = 0.
728     zq2m(i) = 0.
729     zu10m(i) = 0.
730     zv10m(i) = 0.
731     zxffonte(i) = 0.
732     zxfqcalving(i) = 0.
733 guez 3
734 guez 190 s_pblh(i) = 0.
735     s_lcl(i) = 0.
736 guez 72 s_capCL(i) = 0.
737     s_oliqCL(i) = 0.
738     s_cteiCL(i) = 0.
739     s_pblT(i) = 0.
740     s_therm(i) = 0.
741     s_trmb1(i) = 0.
742     s_trmb2(i) = 0.
743     s_trmb3(i) = 0.
744 guez 191 ENDDO
745 guez 3
746 guez 191 call assert(abs(sum(pctsrf, dim = 2) - 1.) <= EPSFRA, 'physiq: pctsrf')
747    
748 guez 202 ftsol = ftsol + d_ts
749     zxtsol = sum(ftsol * pctsrf, dim = 2)
750 guez 3 DO nsrf = 1, nbsrf
751     DO i = 1, klon
752 guez 202 zxfluxlat(i) = zxfluxlat(i) + fluxlat(i, nsrf) * pctsrf(i, nsrf)
753 guez 3
754 guez 202 zt2m(i) = zt2m(i) + t2m(i, nsrf) * pctsrf(i, nsrf)
755     zq2m(i) = zq2m(i) + q2m(i, nsrf) * pctsrf(i, nsrf)
756     zu10m(i) = zu10m(i) + u10m(i, nsrf) * pctsrf(i, nsrf)
757     zv10m(i) = zv10m(i) + v10m(i, nsrf) * pctsrf(i, nsrf)
758     zxffonte(i) = zxffonte(i) + ffonte(i, nsrf) * pctsrf(i, nsrf)
759 guez 47 zxfqcalving(i) = zxfqcalving(i) + &
760 guez 202 fqcalving(i, nsrf) * pctsrf(i, nsrf)
761     s_pblh(i) = s_pblh(i) + pblh(i, nsrf) * pctsrf(i, nsrf)
762     s_lcl(i) = s_lcl(i) + plcl(i, nsrf) * pctsrf(i, nsrf)
763     s_capCL(i) = s_capCL(i) + capCL(i, nsrf) * pctsrf(i, nsrf)
764     s_oliqCL(i) = s_oliqCL(i) + oliqCL(i, nsrf) * pctsrf(i, nsrf)
765     s_cteiCL(i) = s_cteiCL(i) + cteiCL(i, nsrf) * pctsrf(i, nsrf)
766     s_pblT(i) = s_pblT(i) + pblT(i, nsrf) * pctsrf(i, nsrf)
767     s_therm(i) = s_therm(i) + therm(i, nsrf) * pctsrf(i, nsrf)
768     s_trmb1(i) = s_trmb1(i) + trmb1(i, nsrf) * pctsrf(i, nsrf)
769     s_trmb2(i) = s_trmb2(i) + trmb2(i, nsrf) * pctsrf(i, nsrf)
770     s_trmb3(i) = s_trmb3(i) + trmb3(i, nsrf) * pctsrf(i, nsrf)
771 guez 3 ENDDO
772     ENDDO
773    
774 guez 97 ! Si une sous-fraction n'existe pas, elle prend la température moyenne :
775 guez 3 DO nsrf = 1, nbsrf
776     DO i = 1, klon
777 guez 47 IF (pctsrf(i, nsrf) < epsfra) ftsol(i, nsrf) = zxtsol(i)
778 guez 3
779 guez 47 IF (pctsrf(i, nsrf) < epsfra) t2m(i, nsrf) = zt2m(i)
780     IF (pctsrf(i, nsrf) < epsfra) q2m(i, nsrf) = zq2m(i)
781     IF (pctsrf(i, nsrf) < epsfra) u10m(i, nsrf) = zu10m(i)
782     IF (pctsrf(i, nsrf) < epsfra) v10m(i, nsrf) = zv10m(i)
783     IF (pctsrf(i, nsrf) < epsfra) ffonte(i, nsrf) = zxffonte(i)
784     IF (pctsrf(i, nsrf) < epsfra) &
785 guez 3 fqcalving(i, nsrf) = zxfqcalving(i)
786 guez 51 IF (pctsrf(i, nsrf) < epsfra) pblh(i, nsrf) = s_pblh(i)
787     IF (pctsrf(i, nsrf) < epsfra) plcl(i, nsrf) = s_lcl(i)
788     IF (pctsrf(i, nsrf) < epsfra) capCL(i, nsrf) = s_capCL(i)
789     IF (pctsrf(i, nsrf) < epsfra) oliqCL(i, nsrf) = s_oliqCL(i)
790     IF (pctsrf(i, nsrf) < epsfra) cteiCL(i, nsrf) = s_cteiCL(i)
791     IF (pctsrf(i, nsrf) < epsfra) pblT(i, nsrf) = s_pblT(i)
792     IF (pctsrf(i, nsrf) < epsfra) therm(i, nsrf) = s_therm(i)
793     IF (pctsrf(i, nsrf) < epsfra) trmb1(i, nsrf) = s_trmb1(i)
794     IF (pctsrf(i, nsrf) < epsfra) trmb2(i, nsrf) = s_trmb2(i)
795     IF (pctsrf(i, nsrf) < epsfra) trmb3(i, nsrf) = s_trmb3(i)
796 guez 3 ENDDO
797     ENDDO
798    
799 guez 98 ! Calculer la dérive du flux infrarouge
800 guez 3
801     DO i = 1, klon
802 guez 190 dlw(i) = - 4. * RSIGMA * zxtsol(i)**3
803 guez 3 ENDDO
804    
805 guez 103 IF (check) print *, "avantcon = ", qcheck(paprs, q_seri, ql_seri)
806    
807 guez 190 ! Appeler la convection
808 guez 3
809 guez 182 if (conv_emanuel) then
810 guez 99 da = 0.
811     mp = 0.
812     phi = 0.
813 guez 195 CALL concvl(paprs, play, t_seri, q_seri, u_seri, v_seri, sig1, w01, &
814     d_t_con, d_q_con, d_u_con, d_v_con, rain_con, ibas_con, itop_con, &
815     upwd, dnwd, dnwd0, Ma, cape, iflagctrl, qcondc, pmflxr, da, phi, mp)
816 guez 183 snow_con = 0.
817 guez 62 clwcon0 = qcondc
818 guez 71 mfu = upwd + dnwd
819 guez 3
820 guez 103 IF (thermcep) THEN
821     zqsat = MIN(0.5, r2es * FOEEW(t_seri, rtt >= t_seri) / play)
822     zqsat = zqsat / (1. - retv * zqsat)
823     ELSE
824     zqsat = merge(qsats(t_seri), qsatl(t_seri), t_seri < t_coup) / play
825     ENDIF
826 guez 3
827 guez 103 ! Properties of convective clouds
828 guez 71 clwcon0 = fact_cldcon * clwcon0
829 guez 62 call clouds_gno(klon, llm, q_seri, zqsat, clwcon0, ptconv, ratqsc, &
830     rnebcon0)
831 guez 72
832 guez 190 forall (i = 1:klon) ema_pct(i) = paprs(i, itop_con(i) + 1)
833 guez 72 mfd = 0.
834     pen_u = 0.
835     pen_d = 0.
836     pde_d = 0.
837     pde_u = 0.
838 guez 182 else
839     conv_q = d_q_dyn + d_q_vdf / dtphys
840     conv_t = d_t_dyn + d_t_vdf / dtphys
841     z_avant = sum((q_seri + ql_seri) * zmasse, dim=2)
842     CALL conflx(dtphys, paprs, play, t_seri(:, llm:1:- 1), &
843     q_seri(:, llm:1:- 1), conv_t, conv_q, zxfluxq(:, 1), omega, &
844     d_t_con, d_q_con, rain_con, snow_con, mfu(:, llm:1:- 1), &
845     mfd(:, llm:1:- 1), pen_u, pde_u, pen_d, pde_d, kcbot, kctop, &
846     kdtop, pmflxr, pmflxs)
847     WHERE (rain_con < 0.) rain_con = 0.
848     WHERE (snow_con < 0.) snow_con = 0.
849     ibas_con = llm + 1 - kcbot
850     itop_con = llm + 1 - kctop
851 guez 69 END if
852 guez 3
853     DO k = 1, llm
854     DO i = 1, klon
855     t_seri(i, k) = t_seri(i, k) + d_t_con(i, k)
856     q_seri(i, k) = q_seri(i, k) + d_q_con(i, k)
857     u_seri(i, k) = u_seri(i, k) + d_u_con(i, k)
858     v_seri(i, k) = v_seri(i, k) + d_v_con(i, k)
859     ENDDO
860     ENDDO
861    
862 guez 190 IF (if_ebil >= 2) THEN
863 guez 62 tit = 'after convect'
864     CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &
865 guez 98 ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)
866 guez 62 call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
867 guez 98 zero_v, zero_v, rain_con, snow_con, ztsol, d_h_vcol, d_qt, d_ec)
868 guez 3 END IF
869    
870     IF (check) THEN
871 guez 98 za = qcheck(paprs, q_seri, ql_seri)
872 guez 62 print *, "aprescon = ", za
873 guez 72 zx_t = 0.
874     za = 0.
875 guez 3 DO i = 1, klon
876 guez 202 za = za + airephy(i) / REAL(klon)
877 guez 3 zx_t = zx_t + (rain_con(i)+ &
878 guez 202 snow_con(i)) * airephy(i) / REAL(klon)
879 guez 3 ENDDO
880 guez 202 zx_t = zx_t / za * dtphys
881 guez 62 print *, "Precip = ", zx_t
882 guez 3 ENDIF
883 guez 69
884 guez 182 IF (.not. conv_emanuel) THEN
885 guez 69 z_apres = sum((q_seri + ql_seri) * zmasse, dim=2)
886     z_factor = (z_avant - (rain_con + snow_con) * dtphys) / z_apres
887 guez 3 DO k = 1, llm
888     DO i = 1, klon
889 guez 52 IF (z_factor(i) > 1. + 1E-8 .OR. z_factor(i) < 1. - 1E-8) THEN
890 guez 3 q_seri(i, k) = q_seri(i, k) * z_factor(i)
891     ENDIF
892     ENDDO
893     ENDDO
894     ENDIF
895    
896 guez 90 ! Convection s\`eche (thermiques ou ajustement)
897 guez 3
898 guez 51 d_t_ajs = 0.
899     d_u_ajs = 0.
900     d_v_ajs = 0.
901     d_q_ajs = 0.
902     fm_therm = 0.
903     entr_therm = 0.
904 guez 3
905 guez 47 if (iflag_thermals == 0) then
906     ! Ajustement sec
907     CALL ajsec(paprs, play, t_seri, q_seri, d_t_ajs, d_q_ajs)
908 guez 13 t_seri = t_seri + d_t_ajs
909     q_seri = q_seri + d_q_ajs
910 guez 3 else
911 guez 47 call calltherm(dtphys, play, paprs, pphi, u_seri, v_seri, t_seri, &
912     q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm)
913 guez 3 endif
914    
915 guez 190 IF (if_ebil >= 2) THEN
916 guez 62 tit = 'after dry_adjust'
917     CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &
918 guez 98 ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)
919 guez 3 END IF
920    
921 guez 47 ! Caclul des ratqs
922 guez 3
923 guez 90 ! ratqs convectifs \`a l'ancienne en fonction de (q(z = 0) - q) / q
924     ! on \'ecrase le tableau ratqsc calcul\'e par clouds_gno
925 guez 3 if (iflag_cldcon == 1) then
926 guez 51 do k = 1, llm
927     do i = 1, klon
928 guez 3 if(ptconv(i, k)) then
929 guez 70 ratqsc(i, k) = ratqsbas + fact_cldcon &
930     * (q_seri(i, 1) - q_seri(i, k)) / q_seri(i, k)
931 guez 3 else
932 guez 51 ratqsc(i, k) = 0.
933 guez 3 endif
934     enddo
935     enddo
936     endif
937    
938 guez 47 ! ratqs stables
939 guez 51 do k = 1, llm
940     do i = 1, klon
941 guez 70 ratqss(i, k) = ratqsbas + (ratqshaut - ratqsbas) &
942 guez 190 * min((paprs(i, 1) - play(i, k)) / (paprs(i, 1) - 3e4), 1.)
943 guez 3 enddo
944     enddo
945    
946 guez 47 ! ratqs final
947 guez 69 if (iflag_cldcon == 1 .or. iflag_cldcon == 2) then
948 guez 47 ! les ratqs sont une conbinaison de ratqss et ratqsc
949     ! ratqs final
950     ! 1e4 (en gros 3 heures), en dur pour le moment, est le temps de
951     ! relaxation des ratqs
952 guez 70 ratqs = max(ratqs * exp(- dtphys * facttemps), ratqss)
953 guez 51 ratqs = max(ratqs, ratqsc)
954 guez 3 else
955 guez 47 ! on ne prend que le ratqs stable pour fisrtilp
956 guez 51 ratqs = ratqss
957 guez 3 endif
958    
959 guez 51 CALL fisrtilp(dtphys, paprs, play, t_seri, q_seri, ptconv, ratqs, &
960     d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq, rain_lsc, snow_lsc, &
961     pfrac_impa, pfrac_nucl, pfrac_1nucl, frac_impa, frac_nucl, prfl, &
962     psfl, rhcl)
963 guez 3
964     WHERE (rain_lsc < 0) rain_lsc = 0.
965     WHERE (snow_lsc < 0) snow_lsc = 0.
966     DO k = 1, llm
967     DO i = 1, klon
968     t_seri(i, k) = t_seri(i, k) + d_t_lsc(i, k)
969     q_seri(i, k) = q_seri(i, k) + d_q_lsc(i, k)
970     ql_seri(i, k) = ql_seri(i, k) + d_ql_lsc(i, k)
971     cldfra(i, k) = rneb(i, k)
972     IF (.NOT.new_oliq) cldliq(i, k) = ql_seri(i, k)
973     ENDDO
974     ENDDO
975     IF (check) THEN
976 guez 98 za = qcheck(paprs, q_seri, ql_seri)
977 guez 62 print *, "apresilp = ", za
978 guez 72 zx_t = 0.
979     za = 0.
980 guez 3 DO i = 1, klon
981 guez 202 za = za + airephy(i) / REAL(klon)
982 guez 3 zx_t = zx_t + (rain_lsc(i) &
983 guez 202 + snow_lsc(i)) * airephy(i) / REAL(klon)
984 guez 3 ENDDO
985 guez 202 zx_t = zx_t / za * dtphys
986 guez 62 print *, "Precip = ", zx_t
987 guez 3 ENDIF
988    
989 guez 190 IF (if_ebil >= 2) THEN
990 guez 62 tit = 'after fisrt'
991     CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &
992 guez 98 ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)
993 guez 62 call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
994 guez 98 zero_v, zero_v, rain_lsc, snow_lsc, ztsol, d_h_vcol, d_qt, d_ec)
995 guez 3 END IF
996    
997 guez 47 ! PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT
998 guez 3
999     ! 1. NUAGES CONVECTIFS
1000    
1001 guez 174 IF (iflag_cldcon <= - 1) THEN
1002 guez 62 ! seulement pour Tiedtke
1003 guez 51 snow_tiedtke = 0.
1004 guez 174 if (iflag_cldcon == - 1) then
1005 guez 51 rain_tiedtke = rain_con
1006 guez 3 else
1007 guez 51 rain_tiedtke = 0.
1008     do k = 1, llm
1009     do i = 1, klon
1010 guez 7 if (d_q_con(i, k) < 0.) then
1011 guez 202 rain_tiedtke(i) = rain_tiedtke(i) - d_q_con(i, k) / dtphys &
1012     * zmasse(i, k)
1013 guez 3 endif
1014     enddo
1015     enddo
1016     endif
1017    
1018     ! Nuages diagnostiques pour Tiedtke
1019 guez 69 CALL diagcld1(paprs, play, rain_tiedtke, snow_tiedtke, ibas_con, &
1020     itop_con, diafra, dialiq)
1021 guez 3 DO k = 1, llm
1022     DO i = 1, klon
1023 guez 51 IF (diafra(i, k) > cldfra(i, k)) THEN
1024 guez 3 cldliq(i, k) = dialiq(i, k)
1025     cldfra(i, k) = diafra(i, k)
1026     ENDIF
1027     ENDDO
1028     ENDDO
1029     ELSE IF (iflag_cldcon == 3) THEN
1030 guez 72 ! On prend pour les nuages convectifs le maximum du calcul de
1031 guez 90 ! la convection et du calcul du pas de temps pr\'ec\'edent diminu\'e
1032 guez 72 ! d'un facteur facttemps.
1033     facteur = dtphys * facttemps
1034 guez 51 do k = 1, llm
1035     do i = 1, klon
1036 guez 70 rnebcon(i, k) = rnebcon(i, k) * facteur
1037 guez 72 if (rnebcon0(i, k) * clwcon0(i, k) &
1038     > rnebcon(i, k) * clwcon(i, k)) then
1039 guez 51 rnebcon(i, k) = rnebcon0(i, k)
1040     clwcon(i, k) = clwcon0(i, k)
1041 guez 3 endif
1042     enddo
1043     enddo
1044    
1045 guez 47 ! On prend la somme des fractions nuageuses et des contenus en eau
1046 guez 51 cldfra = min(max(cldfra, rnebcon), 1.)
1047 guez 202 cldliq = cldliq + rnebcon * clwcon
1048 guez 3 ENDIF
1049    
1050 guez 51 ! 2. Nuages stratiformes
1051 guez 3
1052     IF (ok_stratus) THEN
1053 guez 47 CALL diagcld2(paprs, play, t_seri, q_seri, diafra, dialiq)
1054 guez 3 DO k = 1, llm
1055     DO i = 1, klon
1056 guez 51 IF (diafra(i, k) > cldfra(i, k)) THEN
1057 guez 3 cldliq(i, k) = dialiq(i, k)
1058     cldfra(i, k) = diafra(i, k)
1059     ENDIF
1060     ENDDO
1061     ENDDO
1062     ENDIF
1063    
1064     ! Precipitation totale
1065     DO i = 1, klon
1066     rain_fall(i) = rain_con(i) + rain_lsc(i)
1067     snow_fall(i) = snow_con(i) + snow_lsc(i)
1068     ENDDO
1069    
1070 guez 62 IF (if_ebil >= 2) CALL diagetpq(airephy, "after diagcld", ip_ebil, 2, 2, &
1071 guez 98 dtphys, t_seri, q_seri, ql_seri, u_seri, v_seri, paprs, d_h_vcol, &
1072     d_qt, d_ec)
1073 guez 3
1074 guez 90 ! Humidit\'e relative pour diagnostic :
1075 guez 3 DO k = 1, llm
1076     DO i = 1, klon
1077     zx_t = t_seri(i, k)
1078     IF (thermcep) THEN
1079 guez 202 zx_qs = r2es * FOEEW(zx_t, rtt >= zx_t) / play(i, k)
1080 guez 47 zx_qs = MIN(0.5, zx_qs)
1081 guez 202 zcor = 1. / (1. - retv * zx_qs)
1082     zx_qs = zx_qs * zcor
1083 guez 3 ELSE
1084 guez 7 IF (zx_t < t_coup) THEN
1085 guez 202 zx_qs = qsats(zx_t) / play(i, k)
1086 guez 3 ELSE
1087 guez 202 zx_qs = qsatl(zx_t) / play(i, k)
1088 guez 3 ENDIF
1089     ENDIF
1090 guez 202 zx_rh(i, k) = q_seri(i, k) / zx_qs
1091 guez 51 zqsat(i, k) = zx_qs
1092 guez 3 ENDDO
1093     ENDDO
1094 guez 52
1095     ! Introduce the aerosol direct and first indirect radiative forcings:
1096 guez 192 tau_ae = 0.
1097     piz_ae = 0.
1098     cg_ae = 0.
1099 guez 3
1100 guez 97 ! Param\`etres optiques des nuages et quelques param\`etres pour
1101     ! diagnostics :
1102 guez 3 if (ok_newmicro) then
1103 guez 69 CALL newmicro(paprs, play, t_seri, cldliq, cldfra, cldtau, cldemi, &
1104     cldh, cldl, cldm, cldt, cldq, flwp, fiwp, flwc, fiwc, ok_aie, &
1105     sulfate, sulfate_pi, bl95_b0, bl95_b1, cldtaupi, re, fl)
1106 guez 3 else
1107 guez 52 CALL nuage(paprs, play, t_seri, cldliq, cldfra, cldtau, cldemi, cldh, &
1108     cldl, cldm, cldt, cldq, ok_aie, sulfate, sulfate_pi, bl95_b0, &
1109     bl95_b1, cldtaupi, re, fl)
1110 guez 3 endif
1111    
1112 guez 154 IF (MOD(itap - 1, radpas) == 0) THEN
1113 guez 118 ! Appeler le rayonnement mais calculer tout d'abord l'albedo du sol.
1114 guez 155 ! Calcul de l'abedo moyen par maille
1115     albsol = sum(falbe * pctsrf, dim = 2)
1116    
1117 guez 62 ! Rayonnement (compatible Arpege-IFS) :
1118 guez 155 CALL radlwsw(dist, mu0, fract, paprs, play, zxtsol, albsol, t_seri, &
1119     q_seri, wo, cldfra, cldemi, cldtau, heat, heat0, cool, cool0, &
1120     radsol, albpla, topsw, toplw, solsw, sollw, sollwdown, topsw0, &
1121     toplw0, solsw0, sollw0, lwdn0, lwdn, lwup0, lwup, swdn0, swdn, &
1122     swup0, swup, ok_ade, ok_aie, tau_ae, piz_ae, cg_ae, topswad, &
1123     solswad, cldtaupi, topswai, solswai)
1124 guez 3 ENDIF
1125 guez 118
1126 guez 3 ! Ajouter la tendance des rayonnements (tous les pas)
1127    
1128     DO k = 1, llm
1129     DO i = 1, klon
1130 guez 202 t_seri(i, k) = t_seri(i, k) + (heat(i, k) - cool(i, k)) * dtphys &
1131     / 86400.
1132 guez 3 ENDDO
1133     ENDDO
1134    
1135 guez 190 IF (if_ebil >= 2) THEN
1136 guez 62 tit = 'after rad'
1137     CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &
1138 guez 98 ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)
1139 guez 62 call diagphy(airephy, tit, ip_ebil, topsw, toplw, solsw, sollw, &
1140 guez 98 zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec)
1141 guez 3 END IF
1142    
1143     ! Calculer l'hydrologie de la surface
1144     DO i = 1, klon
1145 guez 72 zxqsurf(i) = 0.
1146     zxsnow(i) = 0.
1147 guez 3 ENDDO
1148     DO nsrf = 1, nbsrf
1149     DO i = 1, klon
1150 guez 202 zxqsurf(i) = zxqsurf(i) + fqsurf(i, nsrf) * pctsrf(i, nsrf)
1151     zxsnow(i) = zxsnow(i) + fsnow(i, nsrf) * pctsrf(i, nsrf)
1152 guez 3 ENDDO
1153     ENDDO
1154    
1155 guez 90 ! Calculer le bilan du sol et la d\'erive de temp\'erature (couplage)
1156 guez 3
1157     DO i = 1, klon
1158     bils(i) = radsol(i) - sens(i) + zxfluxlat(i)
1159     ENDDO
1160    
1161 guez 90 ! Param\'etrisation de l'orographie \`a l'\'echelle sous-maille :
1162 guez 3
1163     IF (ok_orodr) THEN
1164 guez 174 ! S\'election des points pour lesquels le sch\'ema est actif :
1165 guez 51 igwd = 0
1166     DO i = 1, klon
1167     itest(i) = 0
1168 guez 174 IF (zpic(i) - zmea(i) > 100. .AND. zstd(i) > 10.) THEN
1169 guez 51 itest(i) = 1
1170     igwd = igwd + 1
1171 guez 3 ENDIF
1172     ENDDO
1173    
1174 guez 51 CALL drag_noro(klon, llm, dtphys, paprs, play, zmea, zstd, zsig, zgam, &
1175 guez 150 zthe, zpic, zval, itest, t_seri, u_seri, v_seri, zulow, zvlow, &
1176     zustrdr, zvstrdr, d_t_oro, d_u_oro, d_v_oro)
1177 guez 3
1178 guez 47 ! ajout des tendances
1179 guez 3 DO k = 1, llm
1180     DO i = 1, klon
1181     t_seri(i, k) = t_seri(i, k) + d_t_oro(i, k)
1182     u_seri(i, k) = u_seri(i, k) + d_u_oro(i, k)
1183     v_seri(i, k) = v_seri(i, k) + d_v_oro(i, k)
1184     ENDDO
1185     ENDDO
1186 guez 13 ENDIF
1187 guez 3
1188     IF (ok_orolf) THEN
1189 guez 90 ! S\'election des points pour lesquels le sch\'ema est actif :
1190 guez 51 igwd = 0
1191     DO i = 1, klon
1192     itest(i) = 0
1193 guez 174 IF (zpic(i) - zmea(i) > 100.) THEN
1194 guez 51 itest(i) = 1
1195     igwd = igwd + 1
1196 guez 3 ENDIF
1197     ENDDO
1198    
1199 guez 47 CALL lift_noro(klon, llm, dtphys, paprs, play, rlat, zmea, zstd, zpic, &
1200     itest, t_seri, u_seri, v_seri, zulow, zvlow, zustrli, zvstrli, &
1201 guez 3 d_t_lif, d_u_lif, d_v_lif)
1202    
1203 guez 51 ! Ajout des tendances :
1204 guez 3 DO k = 1, llm
1205     DO i = 1, klon
1206     t_seri(i, k) = t_seri(i, k) + d_t_lif(i, k)
1207     u_seri(i, k) = u_seri(i, k) + d_u_lif(i, k)
1208     v_seri(i, k) = v_seri(i, k) + d_v_lif(i, k)
1209     ENDDO
1210     ENDDO
1211 guez 49 ENDIF
1212 guez 3
1213 guez 90 ! Stress n\'ecessaires : toute la physique
1214 guez 3
1215     DO i = 1, klon
1216 guez 51 zustrph(i) = 0.
1217     zvstrph(i) = 0.
1218 guez 3 ENDDO
1219     DO k = 1, llm
1220     DO i = 1, klon
1221 guez 62 zustrph(i) = zustrph(i) + (u_seri(i, k) - u(i, k)) / dtphys &
1222     * zmasse(i, k)
1223     zvstrph(i) = zvstrph(i) + (v_seri(i, k) - v(i, k)) / dtphys &
1224     * zmasse(i, k)
1225 guez 3 ENDDO
1226     ENDDO
1227    
1228 guez 171 CALL aaam_bud(rg, romega, rlat, rlon, pphis, zustrdr, zustrli, zustrph, &
1229     zvstrdr, zvstrli, zvstrph, paprs, u, v, aam, torsfc)
1230 guez 3
1231 guez 62 IF (if_ebil >= 2) CALL diagetpq(airephy, 'after orography', ip_ebil, 2, &
1232 guez 98 2, dtphys, t_seri, q_seri, ql_seri, u_seri, v_seri, paprs, d_h_vcol, &
1233     d_qt, d_ec)
1234 guez 3
1235 guez 47 ! Calcul des tendances traceurs
1236 guez 202 call phytrac(julien, time, firstcal, lafin, dtphys, t, paprs, play, mfu, &
1237     mfd, pde_u, pen_d, ycoefh, fm_therm, entr_therm, yu1, yv1, ftsol, &
1238     pctsrf, frac_impa, frac_nucl, da, phi, mp, upwd, dnwd, tr_seri, &
1239     zmasse, ncid_startphy)
1240 guez 3
1241 guez 190 IF (offline) call phystokenc(dtphys, t, mfu, mfd, pen_u, pde_u, pen_d, &
1242     pde_d, fm_therm, entr_therm, ycoefh, yu1, yv1, ftsol, pctsrf, &
1243 guez 191 frac_impa, frac_nucl, pphis, airephy, dtphys)
1244 guez 3
1245     ! Calculer le transport de l'eau et de l'energie (diagnostique)
1246 guez 171 CALL transp(paprs, t_seri, q_seri, u_seri, v_seri, zphi, ve, vq, ue, uq)
1247 guez 3
1248 guez 31 ! diag. bilKP
1249 guez 3
1250 guez 178 CALL transp_lay(paprs, t_seri, q_seri, u_seri, v_seri, zphi, &
1251 guez 3 ve_lay, vq_lay, ue_lay, uq_lay)
1252    
1253     ! Accumuler les variables a stocker dans les fichiers histoire:
1254    
1255 guez 200 ! conversion Ec en énergie thermique
1256 guez 3 DO k = 1, llm
1257     DO i = 1, klon
1258 guez 51 ZRCPD = RCPD * (1. + RVTMP2 * q_seri(i, k))
1259     d_t_ec(i, k) = 0.5 / ZRCPD &
1260     * (u(i, k)**2 + v(i, k)**2 - u_seri(i, k)**2 - v_seri(i, k)**2)
1261     t_seri(i, k) = t_seri(i, k) + d_t_ec(i, k)
1262     d_t_ec(i, k) = d_t_ec(i, k) / dtphys
1263 guez 3 END DO
1264     END DO
1265 guez 51
1266 guez 190 IF (if_ebil >= 1) THEN
1267 guez 62 tit = 'after physic'
1268     CALL diagetpq(airephy, tit, ip_ebil, 1, 1, dtphys, t_seri, q_seri, &
1269 guez 98 ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)
1270 guez 190 ! Comme les tendances de la physique sont ajoute dans la dynamique,
1271 guez 47 ! on devrait avoir que la variation d'entalpie par la dynamique
1272     ! est egale a la variation de la physique au pas de temps precedent.
1273     ! Donc la somme de ces 2 variations devrait etre nulle.
1274 guez 62 call diagphy(airephy, tit, ip_ebil, topsw, toplw, solsw, sollw, sens, &
1275 guez 98 evap, rain_fall, snow_fall, ztsol, d_h_vcol, d_qt, d_ec)
1276 guez 51 d_h_vcol_phy = d_h_vcol
1277 guez 3 END IF
1278    
1279 guez 47 ! SORTIES
1280 guez 3
1281 guez 69 ! prw = eau precipitable
1282 guez 3 DO i = 1, klon
1283     prw(i) = 0.
1284     DO k = 1, llm
1285 guez 202 prw(i) = prw(i) + q_seri(i, k) * zmasse(i, k)
1286 guez 3 ENDDO
1287     ENDDO
1288    
1289     ! Convertir les incrementations en tendances
1290    
1291     DO k = 1, llm
1292     DO i = 1, klon
1293 guez 49 d_u(i, k) = (u_seri(i, k) - u(i, k)) / dtphys
1294     d_v(i, k) = (v_seri(i, k) - v(i, k)) / dtphys
1295     d_t(i, k) = (t_seri(i, k) - t(i, k)) / dtphys
1296     d_qx(i, k, ivap) = (q_seri(i, k) - qx(i, k, ivap)) / dtphys
1297     d_qx(i, k, iliq) = (ql_seri(i, k) - qx(i, k, iliq)) / dtphys
1298 guez 3 ENDDO
1299     ENDDO
1300    
1301 guez 98 DO iq = 3, nqmx
1302     DO k = 1, llm
1303     DO i = 1, klon
1304 guez 174 d_qx(i, k, iq) = (tr_seri(i, k, iq - 2) - qx(i, k, iq)) / dtphys
1305 guez 3 ENDDO
1306     ENDDO
1307 guez 98 ENDDO
1308 guez 3
1309     ! Sauvegarder les valeurs de t et q a la fin de la physique:
1310     DO k = 1, llm
1311     DO i = 1, klon
1312     t_ancien(i, k) = t_seri(i, k)
1313     q_ancien(i, k) = q_seri(i, k)
1314     ENDDO
1315     ENDDO
1316    
1317 guez 191 CALL histwrite_phy("phis", pphis)
1318     CALL histwrite_phy("aire", airephy)
1319     CALL histwrite_phy("psol", paprs(:, 1))
1320     CALL histwrite_phy("precip", rain_fall + snow_fall)
1321     CALL histwrite_phy("plul", rain_lsc + snow_lsc)
1322     CALL histwrite_phy("pluc", rain_con + snow_con)
1323     CALL histwrite_phy("tsol", zxtsol)
1324     CALL histwrite_phy("t2m", zt2m)
1325     CALL histwrite_phy("q2m", zq2m)
1326     CALL histwrite_phy("u10m", zu10m)
1327     CALL histwrite_phy("v10m", zv10m)
1328     CALL histwrite_phy("snow", snow_fall)
1329     CALL histwrite_phy("cdrm", cdragm)
1330     CALL histwrite_phy("cdrh", cdragh)
1331     CALL histwrite_phy("topl", toplw)
1332     CALL histwrite_phy("evap", evap)
1333     CALL histwrite_phy("sols", solsw)
1334     CALL histwrite_phy("soll", sollw)
1335     CALL histwrite_phy("solldown", sollwdown)
1336     CALL histwrite_phy("bils", bils)
1337     CALL histwrite_phy("sens", - sens)
1338     CALL histwrite_phy("fder", fder)
1339     CALL histwrite_phy("dtsvdfo", d_ts(:, is_oce))
1340     CALL histwrite_phy("dtsvdft", d_ts(:, is_ter))
1341     CALL histwrite_phy("dtsvdfg", d_ts(:, is_lic))
1342     CALL histwrite_phy("dtsvdfi", d_ts(:, is_sic))
1343 guez 3
1344 guez 191 DO nsrf = 1, nbsrf
1345 guez 202 CALL histwrite_phy("pourc_"//clnsurf(nsrf), pctsrf(:, nsrf) * 100.)
1346 guez 191 CALL histwrite_phy("fract_"//clnsurf(nsrf), pctsrf(:, nsrf))
1347     CALL histwrite_phy("sens_"//clnsurf(nsrf), fluxt(:, 1, nsrf))
1348     CALL histwrite_phy("lat_"//clnsurf(nsrf), fluxlat(:, nsrf))
1349     CALL histwrite_phy("tsol_"//clnsurf(nsrf), ftsol(:, nsrf))
1350     CALL histwrite_phy("taux_"//clnsurf(nsrf), fluxu(:, 1, nsrf))
1351     CALL histwrite_phy("tauy_"//clnsurf(nsrf), fluxv(:, 1, nsrf))
1352     CALL histwrite_phy("rugs_"//clnsurf(nsrf), frugs(:, nsrf))
1353     CALL histwrite_phy("albe_"//clnsurf(nsrf), falbe(:, nsrf))
1354     END DO
1355    
1356     CALL histwrite_phy("albs", albsol)
1357     CALL histwrite_phy("rugs", zxrugs)
1358     CALL histwrite_phy("s_pblh", s_pblh)
1359     CALL histwrite_phy("s_pblt", s_pblt)
1360     CALL histwrite_phy("s_lcl", s_lcl)
1361     CALL histwrite_phy("s_capCL", s_capCL)
1362     CALL histwrite_phy("s_oliqCL", s_oliqCL)
1363     CALL histwrite_phy("s_cteiCL", s_cteiCL)
1364     CALL histwrite_phy("s_therm", s_therm)
1365     CALL histwrite_phy("s_trmb1", s_trmb1)
1366     CALL histwrite_phy("s_trmb2", s_trmb2)
1367     CALL histwrite_phy("s_trmb3", s_trmb3)
1368     if (conv_emanuel) CALL histwrite_phy("ptop", ema_pct)
1369     CALL histwrite_phy("temp", t_seri)
1370     CALL histwrite_phy("vitu", u_seri)
1371     CALL histwrite_phy("vitv", v_seri)
1372     CALL histwrite_phy("geop", zphi)
1373     CALL histwrite_phy("pres", play)
1374     CALL histwrite_phy("dtvdf", d_t_vdf)
1375     CALL histwrite_phy("dqvdf", d_q_vdf)
1376     CALL histwrite_phy("rhum", zx_rh)
1377    
1378     if (ok_instan) call histsync(nid_ins)
1379    
1380 guez 157 IF (lafin) then
1381     call NF95_CLOSE(ncid_startphy)
1382 guez 175 CALL phyredem(pctsrf, ftsol, ftsoil, fqsurf, qsol, &
1383 guez 157 fsnow, falbe, fevap, rain_fall, snow_fall, solsw, sollw, dlw, &
1384     radsol, frugs, agesno, zmea, zstd, zsig, zgam, zthe, zpic, zval, &
1385     t_ancien, q_ancien, rnebcon, ratqs, clwcon, run_off_lic_0, sig1, &
1386     w01)
1387     end IF
1388 guez 3
1389 guez 35 firstcal = .FALSE.
1390    
1391 guez 3 END SUBROUTINE physiq
1392    
1393     end module physiq_m

  ViewVC Help
Powered by ViewVC 1.1.21