source: LMDZ.3.3/branches/rel-LF/libf/phylmd/physiq.F @ 287

Last change on this file since 287 was 287, checked in by lmdzadmin, 23 years ago

Pb de definition de variable
LF

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 119.3 KB
Line 
1c
2c $Header$
3c
4      SUBROUTINE physiq (nlon,nlev,nqmax  ,
5     .            debut,lafin,rjourvrai,rjour_ecri,gmtime,pdtphys,
6     .            paprs,pplay,pphi,pphis,paire,presnivs,clesphy0,
7     .            u,v,t,qx,
8     .            omega, cufi, cvfi,
9     .            d_u, d_v, d_t, d_qx, d_ps)
10      USE ioipsl
11      USE histcom
12      USE writephys
13
14      IMPLICIT none
15c======================================================================
16c
17c Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
18c
19c Objet: Moniteur general de la physique du modele
20cAA      Modifications quant aux traceurs :
21cAA                  -  uniformisation des parametrisations ds phytrac
22cAA                  -  stockage des moyennes des champs necessaires
23cAA                     en mode traceur off-line
24c======================================================================
25c    modif   ( P. Le Van ,  12/10/98 )
26c
27c  Arguments:
28c
29c nlon----input-I-nombre de points horizontaux
30c nlev----input-I-nombre de couches verticales
31c nqmax---input-I-nombre de traceurs (y compris vapeur d'eau) = 1
32c debut---input-L-variable logique indiquant le premier passage
33c lafin---input-L-variable logique indiquant le dernier passage
34c rjour---input-R-numero du jour de l'experience
35c gmtime--input-R-temps universel dans la journee (0 a 86400 s)
36c pdtphys-input-R-pas d'integration pour la physique (seconde)
37c paprs---input-R-pression pour chaque inter-couche (en Pa)
38c pplay---input-R-pression pour le mileu de chaque couche (en Pa)
39c pphi----input-R-geopotentiel de chaque couche (g z) (reference sol)
40c pphis---input-R-geopotentiel du sol
41c paire---input-R-aire de chaque maille
42c presnivs-input_R_pressions approximat. des milieux couches ( en PA)
43c u-------input-R-vitesse dans la direction X (de O a E) en m/s
44c v-------input-R-vitesse Y (de S a N) en m/s
45c t-------input-R-temperature (K)
46c qx------input-R-humidite specifique (kg/kg) et d'autres traceurs
47c d_t_dyn-input-R-tendance dynamique pour "t" (K/s)
48c d_q_dyn-input-R-tendance dynamique pour "q" (kg/kg/s)
49c omega---input-R-vitesse verticale en Pa/s
50c cufi----input-R-resolution des mailles en x (m)
51c cvfi----input-R-resolution des mailles en y (m)
52c
53c d_u-----output-R-tendance physique de "u" (m/s/s)
54c d_v-----output-R-tendance physique de "v" (m/s/s)
55c d_t-----output-R-tendance physique de "t" (K/s)
56c d_qx----output-R-tendance physique de "qx" (kg/kg/s)
57c d_ps----output-R-tendance physique de la pression au sol
58c======================================================================
59#include "dimensions.h"
60      integer jjmp1
61      parameter (jjmp1=jjm+1-1/jjm)
62#include "dimphy.h"
63#include "regdim.h"
64#include "indicesol.h"
65#include "dimsoil.h"
66#include "clesphys.h"
67#include "control.h"
68#include "temps.h"
69c======================================================================
70      LOGICAL check ! Verifier la conservation du modele en eau
71      PARAMETER (check=.FALSE.)
72      LOGICAL ok_stratus ! Ajouter artificiellement les stratus
73      PARAMETER (ok_stratus=.FALSE.)
74c======================================================================
75c Parametres lies au coupleur OASIS:
76#include "oasis.h"
77      INTEGER,SAVE :: npas, nexca
78      logical rnpb
79      parameter(rnpb=.true.)
80c      PARAMETER (npas=1440)
81c      PARAMETER (nexca=48)
82      EXTERNAL fromcpl, intocpl, inicma
83c      ocean = type de modele ocean a utiliser: force, slab, couple
84      character*6 ocean
85      SAVE ocean
86
87c      parameter (ocean = 'force ')
88c     parameter (ocean = 'couple')
89      logical ok_ocean
90c======================================================================
91c Clef controlant l'activation du cycle diurne:
92ccc      LOGICAL cycle_diurne
93ccc      PARAMETER (cycle_diurne=.FALSE.)
94c======================================================================
95c Modele thermique du sol, a activer pour le cycle diurne:
96ccc      LOGICAL soil_model
97ccc      PARAMETER (soil_model=.FALSE.)
98      logical ok_veget
99      save ok_veget
100c     parameter (ok_veget = .true.)
101c      parameter (ok_veget = .false.)
102c======================================================================
103c Dans les versions precedentes, l'eau liquide nuageuse utilisee dans
104c le calcul du rayonnement est celle apres la precipitation des nuages.
105c Si cette cle new_oliq est activee, ce sera une valeur moyenne entre
106c la condensation et la precipitation. Cette cle augmente les impacts
107c radiatifs des nuages.
108ccc      LOGICAL new_oliq
109ccc      PARAMETER (new_oliq=.FALSE.)
110c======================================================================
111c Clefs controlant deux parametrisations de l'orographie:
112cc      LOGICAL ok_orodr
113ccc      PARAMETER (ok_orodr=.FALSE.)
114ccc      LOGICAL ok_orolf
115ccc      PARAMETER (ok_orolf=.FALSE.)
116c======================================================================
117      LOGICAL ok_journe ! sortir le fichier journalier
118      save ok_journe
119c      PARAMETER (ok_journe=.true.)
120c
121      LOGICAL ok_mensuel ! sortir le fichier mensuel
122      save ok_mensuel
123c      PARAMETER (ok_mensuel=.true.)
124c
125      LOGICAL ok_instan ! sortir le fichier instantane
126      save ok_instan
127c      PARAMETER (ok_instan=.true.)
128c
129      LOGICAL ok_region ! sortir le fichier regional
130      PARAMETER (ok_region=.FALSE.)
131c======================================================================
132c
133      INTEGER ivap          ! indice de traceurs pour vapeur d'eau
134      PARAMETER (ivap=1)
135      INTEGER iliq          ! indice de traceurs pour eau liquide
136      PARAMETER (iliq=2)
137
138      INTEGER nvm           ! nombre de vegetations
139      PARAMETER (nvm=8)
140      REAL veget(klon,nvm)  ! couverture vegetale
141      SAVE veget
142
143c
144c
145c Variables argument:
146c
147      INTEGER nlon
148      INTEGER nlev
149      INTEGER nqmax
150      REAL rjourvrai, rjour_ecri
151      REAL gmtime
152      REAL pdtphys
153      LOGICAL debut, lafin
154      REAL paprs(klon,klev+1)
155      REAL pplay(klon,klev)
156      REAL pphi(klon,klev)
157      REAL pphis(klon)
158      REAL paire(klon)
159      REAL presnivs(klev)
160      REAL znivsig(klev)
161      REAL zsurf(nbsrf)
162      real cufi(klon), cvfi(klon)
163
164      REAL u(klon,klev)
165      REAL v(klon,klev)
166      REAL t(klon,klev)
167      REAL qx(klon,klev,nqmax)
168
169      REAL t_ancien(klon,klev), q_ancien(klon,klev)
170      SAVE t_ancien, q_ancien
171      LOGICAL ancien_ok
172      SAVE ancien_ok
173
174      REAL d_t_dyn(klon,klev)
175      REAL d_q_dyn(klon,klev)
176
177      REAL omega(klon,klev)
178
179      REAL d_u(klon,klev)
180      REAL d_v(klon,klev)
181      REAL d_t(klon,klev)
182      REAL d_qx(klon,klev,nqmax)
183      REAL d_ps(klon)
184
185      INTEGER        longcles
186      PARAMETER    ( longcles = 20 )
187      REAL clesphy0( longcles      )
188c
189c Variables quasi-arguments
190c
191      REAL xjour
192      SAVE xjour
193c
194c
195c Variables propres a la physique
196c
197      REAL dtime
198      SAVE dtime                  ! pas temporel de la physique
199c
200      INTEGER radpas
201      SAVE radpas                 ! frequence d'appel rayonnement
202c
203      REAL radsol(klon)
204      SAVE radsol                 ! bilan radiatif au sol
205c
206      REAL rlat(klon)
207      SAVE rlat                   ! latitude pour chaque point
208c
209      REAL rlon(klon)
210      SAVE rlon                   ! longitude pour chaque point
211c
212cc      INTEGER iflag_con
213cc      SAVE iflag_con              ! indicateur de la convection
214c
215      INTEGER itap
216      SAVE itap                   ! compteur pour la physique
217c
218      REAL co2_ppm
219      SAVE co2_ppm                ! concentration du CO2
220c
221      REAL solaire
222      SAVE solaire                ! constante solaire
223c
224      REAL ftsol(klon,nbsrf)
225      SAVE ftsol                  ! temperature du sol
226c
227      REAL ftsoil(klon,nsoilmx,nbsrf)
228      SAVE ftsoil                 ! temperature dans le sol
229c
230      REAL fevap(klon,nbsrf)
231      SAVE fevap                 ! evaporation
232      REAL fluxlat(klon,nbsrf)
233      SAVE fluxlat
234c
235      REAL deltat(klon)
236      SAVE deltat                 ! ecart avec la SST de reference
237c
238      REAL fqsol(klon,nbsrf)
239      SAVE fqsol                  ! humidite du sol
240c
241      REAL fsnow(klon,nbsrf)
242      SAVE fsnow                  ! epaisseur neigeuse
243c
244      REAL falbe(klon,nbsrf)
245      SAVE falbe                  ! albedo par type de surface
246      REAL falblw(klon,nbsrf)
247      SAVE falblw                 ! albedo par type de surface
248
249c
250c
251c  Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
252c
253      REAL zmea(klon)
254      SAVE zmea                   ! orographie moyenne
255c
256      REAL zstd(klon)
257      SAVE zstd                   ! deviation standard de l'OESM
258c
259      REAL zsig(klon)
260      SAVE zsig                   ! pente de l'OESM
261c
262      REAL zgam(klon)
263      save zgam                   ! anisotropie de l'OESM
264c
265      REAL zthe(klon)
266      SAVE zthe                   ! orientation de l'OESM
267c
268      REAL zpic(klon)
269      SAVE zpic                   ! Maximum de l'OESM
270c
271      REAL zval(klon)
272      SAVE zval                   ! Minimum de l'OESM
273c
274      REAL rugoro(klon)
275      SAVE rugoro                 ! longueur de rugosite de l'OESM
276c
277      REAL zulow(klon),zvlow(klon),zustr(klon), zvstr(klon)
278c
279      REAL zuthe(klon),zvthe(klon)
280      SAVE zuthe
281      SAVE zvthe
282      INTEGER igwd,idx(klon),itest(klon)
283c
284      REAL agesno(klon,nbsrf)
285      SAVE agesno                 ! age de la neige
286c
287      REAL alb_neig(klon)
288      SAVE alb_neig               ! albedo de la neige
289cKE43
290c Variables liees a la convection de K. Emanuel (sb):
291c
292      REAL ema_workcbmf(klon)   ! cloud base mass flux
293      SAVE ema_workcbmf
294
295      REAL ema_cbmf(klon)       ! cloud base mass flux
296      SAVE ema_cbmf
297
298      REAL ema_pcb(klon)        ! cloud base pressure
299      SAVE ema_pcb
300
301      REAL ema_pct(klon)        ! cloud top pressure
302      SAVE ema_pct
303
304      REAL bas, top             ! cloud base and top levels
305      SAVE bas
306      SAVE top
307
308      REAL Ma(klon,klev)        ! undilute upward mass flux
309      SAVE Ma
310      REAL ema_work1(klon, klev), ema_work2(klon, klev)
311      SAVE ema_work1, ema_work2
312      REAL wdn(klon), tdn(klon), qdn(klon)
313c Variables locales pour la couche limite (al1):
314c
315cAl1      REAL pblh(klon)           ! Hauteur de couche limite
316cAl1      SAVE pblh
317c34EK
318c
319c Variables locales:
320c
321      REAL cdragh(klon) ! drag coefficient pour T and Q
322      REAL cdragm(klon) ! drag coefficient pour vent
323cAA
324cAA  Pour phytrac
325cAA
326      REAL ycoefh(klon,klev)    ! coef d'echange pour phytrac
327      REAL yu1(klon)            ! vents dans la premiere couche U
328      REAL yv1(klon)            ! vents dans la premiere couche V
329      LOGICAL offline           ! Controle du stockage ds "physique"
330      PARAMETER (offline=.false.)
331      INTEGER physid
332      REAL pfrac_impa(klon,klev)! Produits des coefs lessivage impaction
333      save pfrac_impa
334      REAL pfrac_nucl(klon,klev)! Produits des coefs lessivage nucleation
335      save pfrac_nucl
336      REAL pfrac_1nucl(klon,klev)! Produits des coefs lessi nucl (alpha = 1)
337      save pfrac_1nucl
338      REAL frac_impa(klon,klev) ! fractions d'aerosols lessivees (impaction)
339      REAL frac_nucl(klon,klev) ! idem (nucleation)
340cAA
341      REAL rain_fall(klon) ! pluie
342      REAL snow_fall(klon) ! neige
343      save snow_fall, rain_fall
344      REAL evap(klon), devap(klon) ! evaporation et sa derivee
345      REAL sens(klon), dsens(klon) ! chaleur sensible et sa derivee
346      REAL dlw(klon)    ! derivee infra rouge
347      REAL bils(klon) ! bilan de chaleur au sol
348      REAL fder(klon) ! Derive de flux (sensible et latente)
349      save fder
350      REAL ve(klon) ! integr. verticale du transport meri. de l'energie
351      REAL vq(klon) ! integr. verticale du transport meri. de l'eau
352      REAL ue(klon) ! integr. verticale du transport zonal de l'energie
353      REAL uq(klon) ! integr. verticale du transport zonal de l'eau
354c
355      REAL frugs(klon,nbsrf) ! longueur de rugosite
356      save frugs
357      REAL zxrugs(klon) ! longueur de rugosite
358c
359c Conditions aux limites
360c
361      INTEGER julien
362      INTEGER idayvrai
363      SAVE idayvrai
364c
365      INTEGER lmt_pas
366      SAVE lmt_pas                ! frequence de mise a jour
367      REAL pctsrf(klon,nbsrf)
368      SAVE pctsrf                 ! sous-fraction du sol
369      REAL albsol(klon)
370      SAVE albsol                 ! albedo du sol total
371      REAL albsollw(klon)
372      SAVE albsollw                 ! albedo du sol total
373
374      REAL wo(klon,klev)
375      SAVE wo                     ! ozone
376c======================================================================
377c
378c Declaration des procedures appelees
379c
380      EXTERNAL angle     ! calculer angle zenithal du soleil
381      EXTERNAL alboc     ! calculer l'albedo sur ocean
382      EXTERNAL albsno    ! calculer albedo sur neige
383      EXTERNAL ajsec     ! ajustement sec
384      EXTERNAL clmain    ! couche limite
385      EXTERNAL condsurf  ! lire les conditions aux limites
386      EXTERNAL conlmd    ! convection (schema LMD)
387cKE43
388      EXTERNAL conema  ! convect4.3
389      EXTERNAL fisrtilp  ! schema de condensation a grande echelle (pluie)
390cAA
391      EXTERNAL fisrtilp_tr ! schema de condensation a grande echelle (pluie)
392c                          ! stockage des coefficients necessaires au
393c                          ! lessivage OFF-LINE et ON-LINE
394cAA
395      EXTERNAL hgardfou  ! verifier les temperatures
396      EXTERNAL nuage     ! calculer les proprietes radiatives
397      EXTERNAL o3cm      ! initialiser l'ozone
398      EXTERNAL orbite    ! calculer l'orbite terrestre
399      EXTERNAL ozonecm   ! prescrire l'ozone
400      EXTERNAL phyetat0  ! lire l'etat initial de la physique
401      EXTERNAL phyredem  ! ecrire l'etat de redemarrage de la physique
402      EXTERNAL radlwsw   ! rayonnements solaire et infrarouge
403      EXTERNAL suphec    ! initialiser certaines constantes
404      EXTERNAL transp    ! transport total de l'eau et de l'energie
405      EXTERNAL ecribina  ! ecrire le fichier binaire global
406      EXTERNAL ecribins  ! ecrire le fichier binaire global
407      EXTERNAL ecrirega  ! ecrire le fichier binaire regional
408      EXTERNAL ecriregs  ! ecrire le fichier binaire regional
409c
410c Variables locales
411c
412      REAL dialiq(klon,klev)  ! eau liquide nuageuse
413      REAL diafra(klon,klev)  ! fraction nuageuse
414      REAL cldliq(klon,klev)  ! eau liquide nuageuse
415      REAL cldfra(klon,klev)  ! fraction nuageuse
416      REAL cldtau(klon,klev)  ! epaisseur optique
417      REAL cldemi(klon,klev)  ! emissivite infrarouge
418c
419C§§§ PB
420      REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
421      REAL fluxt(klon,klev, nbsrf)   ! flux turbulent de chaleur
422      REAL fluxu(klon,klev, nbsrf)   ! flux turbulent de vitesse u
423      REAL fluxv(klon,klev, nbsrf)   ! flux turbulent de vitesse v
424c
425      REAL zxfluxt(klon, klev)
426      REAL zxfluxq(klon, klev)
427      REAL zxfluxu(klon, klev)
428      REAL zxfluxv(klon, klev)
429C§§§
430      REAL heat(klon,klev)    ! chauffage solaire
431      REAL heat0(klon,klev)   ! chauffage solaire ciel clair
432      REAL cool(klon,klev)    ! refroidissement infrarouge
433      REAL cool0(klon,klev)   ! refroidissement infrarouge ciel clair
434      REAL topsw(klon), toplw(klon), solsw(klon), sollw(klon)
435      real sollwdown(klon)    ! downward LW flux at surface
436      REAL topsw0(klon), toplw0(klon), solsw0(klon), sollw0(klon)
437      REAL albpla(klon)
438c Le rayonnement n'est pas calcule tous les pas, il faut donc
439c                      sauvegarder les sorties du rayonnement
440      SAVE  heat,cool,albpla,topsw,toplw,solsw,sollw,sollwdown
441      SAVE  topsw0,toplw0,solsw0,sollw0, heat0, cool0
442      INTEGER itaprad
443      SAVE itaprad
444c
445      REAL conv_q(klon,klev) ! convergence de l'humidite (kg/kg/s)
446      REAL conv_t(klon,klev) ! convergence de la temperature(K/s)
447c
448      REAL cldl(klon),cldm(klon),cldh(klon) !nuages bas, moyen et haut
449      REAL cldt(klon),cldq(klon) !nuage total, eau liquide integree
450c
451      REAL zxtsol(klon), zxqsol(klon), zxsnow(klon)
452c
453      REAL dist, rmu0(klon), fract(klon)
454      REAL zdtime, zlongi
455c
456      CHARACTER*2 str2
457      CHARACTER*2 iqn
458c
459      REAL qcheck
460      REAL z_avant(klon), z_apres(klon), z_factor(klon)
461      LOGICAL zx_ajustq
462c
463      REAL za, zb
464      REAL zx_t, zx_qs, zdelta, zcor, zlvdcp, zlsdcp
465      INTEGER i, k, iq, nsrf, ll
466      REAL t_coup
467      PARAMETER (t_coup=234.0)
468c
469      REAL zphi(klon,klev)
470      REAL zx_tmp_x(iim), zx_tmp_yjjmp1
471      REAL zx_relief(iim,jjmp1)
472      REAL zx_aire(iim,jjmp1)
473cKE43
474c Variables locales pour la convection de K. Emanuel (sb):
475c
476      REAL upwd(klon,klev)      ! saturated updraft mass flux
477      REAL dnwd(klon,klev)      ! saturated downdraft mass flux
478      REAL dnwd0(klon,klev)     ! unsaturated downdraft mass flux
479      REAL tvp(klon,klev)       ! virtual temp of lifted parcel
480      REAL cape(klon)           ! CAPE
481      SAVE cape
482      REAL pbase(klon)          ! cloud base pressure
483      SAVE pbase
484      REAL bbase(klon)          ! cloud base buoyancy
485      SAVE bbase
486      REAL rflag(klon)          ! flag fonctionnement de convect
487      INTEGER iflagctrl(klon)          ! flag fonctionnement de convect
488c -- convect43:
489      INTEGER ntra              ! nb traceurs pour convect4.3
490      REAL pori_con(klon)    ! pressure at the origin level of lifted parcel
491      REAL plcl_con(klon),dtma_con(klon),dtlcl_con(klon)
492      REAL dtvpdt1(klon,klev), dtvpdq1(klon,klev)
493      REAL dplcldt(klon), dplcldr(klon)
494c?     .     condm_con(klon,klev),conda_con(klon,klev),
495c?     .     mr_con(klon,klev),ep_con(klon,klev)
496c?     .    ,sadiab(klon,klev),wadiab(klon,klev)
497c --
498c34EK
499c
500c Variables du changement
501c
502c con: convection
503c lsc: condensation a grande echelle (Large-Scale-Condensation)
504c ajs: ajustement sec
505c eva: evaporation de l'eau liquide nuageuse
506c vdf: couche limite (Vertical DiFfusion)
507      REAL d_t_con(klon,klev),d_q_con(klon,klev)
508      REAL d_u_con(klon,klev),d_v_con(klon,klev)
509      REAL d_t_lsc(klon,klev),d_q_lsc(klon,klev),d_ql_lsc(klon,klev)
510      REAL d_t_ajs(klon,klev), d_q_ajs(klon,klev)
511      REAL d_t_eva(klon,klev),d_q_eva(klon,klev)
512      REAL rneb(klon,klev)
513c
514      REAL pmfu(klon,klev), pmfd(klon,klev)
515      REAL pen_u(klon,klev), pen_d(klon,klev)
516      REAL pde_u(klon,klev), pde_d(klon,klev)
517      INTEGER kcbot(klon), kctop(klon), kdtop(klon)
518      REAL pmflxr(klon,klev+1), pmflxs(klon,klev+1)
519      REAL prfl(klon,klev+1), psfl(klon,klev+1)
520c
521      INTEGER ibas_con(klon), itop_con(klon)
522      REAL rain_con(klon), rain_lsc(klon)
523      REAL snow_con(klon), snow_lsc(klon)
524      REAL d_ts(klon,nbsrf)
525c
526      REAL d_u_vdf(klon,klev), d_v_vdf(klon,klev)
527      REAL d_t_vdf(klon,klev), d_q_vdf(klon,klev)
528c
529      REAL d_u_oro(klon,klev), d_v_oro(klon,klev)
530      REAL d_t_oro(klon,klev)
531      REAL d_u_lif(klon,klev), d_v_lif(klon,klev)
532      REAL d_t_lif(klon,klev)
533
534      REAL ratqs(klon,klev)
535      real zpt_conv(klon,klev)
536
537c
538c Variables liees a l'ecriture de la bande histoire physique
539c
540      INTEGER ecrit_mth
541      SAVE ecrit_mth   ! frequence d'ecriture (fichier mensuel)
542c
543      INTEGER ecrit_day
544      SAVE ecrit_day   ! frequence d'ecriture (fichier journalier)
545c
546      INTEGER ecrit_ins
547      SAVE ecrit_ins   ! frequence d'ecriture (fichier instantane)
548c
549      INTEGER ecrit_reg
550      SAVE ecrit_reg   ! frequence d'ecriture
551c
552c
553c
554c Variables locales pour effectuer les appels en serie
555c
556      REAL t_seri(klon,klev), q_seri(klon,klev)
557      REAL ql_seri(klon,klev)
558      REAL u_seri(klon,klev), v_seri(klon,klev)
559c
560      REAL tr_seri(klon,klev,nbtr)
561      REAL d_tr(klon,klev,nbtr)
562
563      REAL zx_rh(klon,klev)
564
565      INTEGER        length
566      PARAMETER    ( length = 100 )
567      REAL tabcntr0( length       )
568c
569      INTEGER ndex2d(iim*jjmp1),ndex3d(iim*jjmp1*klev)
570      REAL zx_tmp_fi2d(klon)
571      REAL zx_tmp_2d(iim,jjmp1), zx_tmp_3d(iim,jjmp1,klev)
572      REAL zx_lon(iim,jjmp1), zx_lat(iim,jjmp1)
573c
574      INTEGER nid_day, nid_mth, nid_ins
575      SAVE nid_day, nid_mth, nid_ins
576c
577      INTEGER nhori, nvert
578      REAL zsto, zout, zjulian
579
580      character*20 modname
581      character*80 abort_message
582      logical ok_sync
583      real date0
584
585C essai writephys
586      integer fid_day, fid_mth, fid_ins
587      parameter (fid_ins = 1, fid_day = 2, fid_mth = 3)
588      integer prof2d_on, prof3d_on, prof2d_av, prof3d_av
589      parameter (prof2d_on = 1, prof3d_on = 2,
590     .           prof2d_av = 3, prof3d_av = 4)
591      character*30 nom_fichier
592      character*10 varname
593      character*40 vartitle
594      character*20 varunits
595c
596c Declaration des constantes et des fonctions thermodynamiques
597c
598#include "YOMCST.h"
599#include "YOETHF.h"
600#include "FCTTRE.h"
601c======================================================================
602      modname = 'physiq'
603      ok_sync=.TRUE.
604      IF (nqmax .LT. 2) THEN
605         PRINT*, 'eaux vapeur et liquide sont indispensables'
606         CALL ABORT
607      ENDIF
608      IF (debut) THEN
609         CALL suphec ! initialiser constantes et parametres phys.
610      ENDIF
611
612
613c======================================================================
614      xjour = rjourvrai
615c
616c Si c'est le debut, il faut initialiser plusieurs choses
617c          ********
618c
619       IF (debut) THEN
620
621c
622c appel a la lecture du run.def physique
623c
624         call conf_phys(ocean, ok_veget, ok_journe, ok_mensuel,
625     .                  ok_instan)
626
627         DO k = 2, nvm          ! pas de vegetation
628            DO i = 1, klon
629               veget(i,k) = 0.0
630            ENDDO
631         ENDDO
632         DO i = 1, klon
633            veget(i,1) = 1.0    ! il n'y a que du desert
634         ENDDO
635         PRINT*, 'Pas de vegetation; desert partout'
636c
637c
638c Initialiser les compteurs:
639c
640
641         frugs = 0.
642         itap    = 0
643         itaprad = 0
644c
645         CALL phyetat0 ("startphy.nc",dtime,co2_ppm,solaire,
646     .       rlat,rlon,pctsrf, ftsol,ftsoil,deltat,fqsol,fsnow,
647     .       falbe, fevap, rain_fall,snow_fall,solsw, sollwdown,
648     .       dlw,radsol,frugs,agesno,clesphy0,
649     .       zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro,tabcntr0,
650     .       t_ancien, q_ancien, ancien_ok )
651
652c
653         radpas = NINT( 86400./dtime/nbapp_rad)
654
655c
656         CALL printflag( tabcntr0,radpas,ok_ocean,ok_oasis ,ok_journe,
657     ,                    ok_instan, ok_region )
658c
659         IF (ABS(dtime-pdtphys).GT.0.001) THEN
660            PRINT*, 'Pas physique n est pas correcte',dtime,pdtphys
661            abort_message=' See above '
662            call abort_gcm(modname,abort_message,1)
663         ENDIF
664         IF (nlon .NE. klon) THEN
665            PRINT*, 'nlon et klon ne sont pas coherents', nlon, klon
666            abort_message=' See above '
667            call abort_gcm(modname,abort_message,1)
668         ENDIF
669         IF (nlev .NE. klev) THEN
670            PRINT*, 'nlev et klev ne sont pas coherents', nlev, klev
671            abort_message=' See above '
672            call abort_gcm(modname,abort_message,1)
673         ENDIF
674c
675         IF (dtime*FLOAT(radpas).GT.21600..AND.cycle_diurne) THEN
676           PRINT*, 'Nbre d appels au rayonnement insuffisant'
677           PRINT*, "Au minimum 4 appels par jour si cycle diurne"
678           abort_message=' See above '
679           call abort_gcm(modname,abort_message,1)
680         ENDIF
681         PRINT*, "Clef pour la convection, iflag_con=", iflag_con
682c
683cKE43
684c Initialisation pour la convection de K.E. (sb):
685         IF (iflag_con.EQ.4) THEN
686
687         PRINT*, "*** Convection de Kerry Emanuel 4.3  "
688         PRINT*, "On va utiliser le melange convectif des traceurs qui"
689         PRINT*, "est calcule dans convect4.3"
690         PRINT*, " !!! penser aux logical flags de phytrac"
691
692          DO i = 1, klon
693           ema_cbmf(i) = 0.
694           ema_pcb(i)  = 0.
695           ema_pct(i)  = 0.
696           ema_workcbmf(i) = 0.
697          ENDDO
698         ENDIF
699c34EK
700         IF (ok_orodr) THEN
701         DO i=1,klon
702         rugoro(i) = MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
703         ENDDO
704         CALL SUGWD(klon,klev,paprs,pplay)
705         DO i=1,klon
706         zuthe(i)=0.
707         zvthe(i)=0.
708         if(zstd(i).gt.10.)then
709           zuthe(i)=(1.-zgam(i))*cos(zthe(i))
710           zvthe(i)=(1.-zgam(i))*sin(zthe(i))
711         endif
712         ENDDO
713         ENDIF
714c
715c
716         lmt_pas = NINT(86400./dtime * 1.0)   ! tous les jours
717         PRINT*,'La frequence de lecture surface est de ', lmt_pas
718c
719         ecrit_mth = NINT(86400./dtime *ecritphy)  ! tous les ecritphy jours
720         IF (ok_mensuel) THEN
721         PRINT*, 'La frequence de sortie mensuelle est de ', ecrit_mth
722         ENDIF
723         ecrit_day = NINT(86400./dtime *1.0)  ! tous les jours
724         IF (ok_journe) THEN
725         PRINT*, 'La frequence de sortie journaliere est de ',ecrit_day
726         ENDIF
727ccc         ecrit_ins = NINT(86400./dtime *0.5)  ! 2 fois par jour
728ccc         ecrit_ins = NINT(86400./dtime *0.25)  ! 4 fois par jour
729         ecrit_ins = NINT(86400./dtime/48.)  ! a chaque pas de temps
730         IF (ok_instan) THEN
731         PRINT*, 'La frequence de sortie instant. est de ', ecrit_ins
732         ENDIF
733         ecrit_reg = NINT(86400./dtime *0.25)  ! 4 fois par jour
734         IF (ok_region) THEN
735         PRINT*, 'La frequence de sortie region est de ', ecrit_reg
736         ENDIF
737
738c
739c Initialiser le couplage si necessaire
740c
741      npas = 0
742      nexca = 0
743      if (ocean == 'couple') then
744        npas = itaufin/ iphysiq
745        nexca = 86400 / dtime
746        write(*,*)' ##### Ocean couple #####'
747        write(*,*)' Valeurs des pas de temps'
748        write(*,*)' npas = ', npas
749        write(*,*)' nexca = ', nexca
750      endif       
751c
752c
753      IF (ok_journe) THEN
754c
755         CALL ymds2ju(anne_ini, 1, 1, 0.0, zjulian)
756         zjulian = zjulian + day_ini
757c
758         CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlon,zx_lon)
759         DO i = 1, iim
760            zx_lon(i,1) = rlon(i+1)
761            zx_lon(i,jjmp1) = rlon(i+1)
762         ENDDO
763         DO ll=1,klev
764            znivsig(ll)=float(ll)
765         ENDDO
766         CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlat,zx_lat)
767         CALL histbeg("histday", iim,zx_lon, jjmp1,zx_lat,
768     .                 1,iim,1,jjmp1, 0, zjulian, dtime,
769     .                 nhori, nid_day)
770         CALL histvert(nid_day, "presnivs", "Vertical levels", "mb",
771     .                 klev, presnivs, nvert)
772c        call histvert(nid_day, 'sig_s', 'Niveaux sigma','-',
773c    .              klev, znivsig, nvert)
774c
775         zsto = dtime
776         zout = dtime * FLOAT(ecrit_day)
777C Essai writephys
778c        nom_fichier = 'histday1'
779c        call writephy_ini(fid_day,nom_fichier,klon,iim,jjmp1,klev,
780c    .                     rlon,rlat, presnivs,
781c    .                     zjulian, dtime)
782c        call writephy_def(prof2d_on, fid_day, "once", zsto, zout, 0)
783c        call writephy_def(prof3d_on, fid_day, "once", zsto, zout,
784c    .                                                         klev)
785c        call writephy_def(prof2d_av, fid_day, "ave(X)", zsto, zout, 0)
786c        call writephy_def(prof3d_av, fid_day, "ave(X)", zsto, zout,
787c    .                                                         klev)
788 
789c
790         CALL histdef(nid_day, "phis", "Surface geop. height", "-",
791     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
792     .                "once", zsto,zout)
793c
794         CALL histdef(nid_day, "aire", "Grid area", "-",
795     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
796     .                "once", zsto,zout)
797c
798c Champs 2D:
799c
800         CALL histdef(nid_day, "tsol", "Surface Temperature", "K",
801     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
802     .                "ave(X)", zsto,zout)
803c
804         CALL histdef(nid_day, "tter", "Surface Temperature", "K",
805     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
806     .                "ave(X)", zsto,zout)
807c
808         CALL histdef(nid_day, "tlic", "Surface Temperature", "K",
809     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
810     .                "ave(X)", zsto,zout)
811c
812         CALL histdef(nid_day, "toce", "Surface Temperature", "K",
813     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
814     .                "ave(X)", zsto,zout)
815c
816         CALL histdef(nid_day, "tsic", "Surface Temperature", "K",
817     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
818     .                "ave(X)", zsto,zout)
819c
820         CALL histdef(nid_day, "psol", "Surface Pressure", "Pa",
821     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
822     .                "ave(X)", zsto,zout)
823c
824         CALL histdef(nid_day, "rain", "Precipitation", "mm/day",
825     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
826     .                "ave(X)", zsto,zout)
827c
828         CALL histdef(nid_day, "snow", "Snow fall", "mm/day",
829     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
830     .                "ave(X)", zsto,zout)
831c
832         CALL histdef(nid_day, "snow_cov", "Snow cover", "mm",
833     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
834     .                "ave(X)", zsto,zout)
835c
836         CALL histdef(nid_day, "evap", "Evaporation", "mm/day",
837     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
838     .                "ave(X)", zsto,zout)
839c
840         CALL histdef(nid_day, "tops", "Solar rad. at TOA", "W/m2",
841     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
842     .                "ave(X)", zsto,zout)
843c
844         CALL histdef(nid_day, "topl", "IR rad. at TOA", "W/m2",
845     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
846     .                "ave(X)", zsto,zout)
847c
848         CALL histdef(nid_day, "sols", "Solar rad. at surf.", "W/m2",
849     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
850     .                "ave(X)", zsto,zout)
851c
852         CALL histdef(nid_day, "soll", "IR rad. at surface", "W/m2",
853     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
854     .                "ave(X)", zsto,zout)
855c
856         CALL histdef(nid_day, "solldown", "Down. IR rad. at surface",
857     .                "W/m2", iim,jjmp1,nhori, 1,1,1, -99, 32,
858     .                "ave(X)", zsto,zout)
859c
860         CALL histdef(nid_day, "bils", "Surf. total heat flux", "W/m2",
861     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
862     .                "ave(X)", zsto,zout)
863c
864         CALL histdef(nid_day, "sens", "Sensible heat flux", "W/m2",
865     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
866     .                "ave(X)", zsto,zout)
867c
868         CALL histdef(nid_day, "fder", "Heat flux derivation", "W/m2",
869     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
870     .                "ave(X)", zsto,zout)
871c
872         CALL histdef(nid_day, "frtu", "Zonal wind stress", "Pa",
873     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
874     .                "ave(X)", zsto,zout)
875c
876         CALL histdef(nid_day, "frtv", "Meridional wind stress", "Pa",
877     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
878     .                "ave(X)", zsto,zout)
879c
880C §§§ PB flux pour chauqe sous surface
881C
882         DO nsrf = 1, nbsrf
883C
884           call histdef(nid_day, "pourc_"//clnsurf(nsrf),
885     $         "Fraction"//clnsurf(nsrf), "W/m2", 
886     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
887     $         "ave(X)", zsto,zout)
888C
889           call histdef(nid_day, "tsol_"//clnsurf(nsrf),
890     $         "Fraction"//clnsurf(nsrf), "W/m2", 
891     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
892     $         "ave(X)", zsto,zout)
893C
894           call histdef(nid_day, "sens_"//clnsurf(nsrf),
895     $         "Sensible heat flux "//clnsurf(nsrf), "W/m2", 
896     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
897     $         "ave(X)", zsto,zout)
898c
899           call histdef(nid_day, "lat_"//clnsurf(nsrf),
900     $         "Latent heat flux "//clnsurf(nsrf), "W/m2", 
901     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
902     $         "ave(X)", zsto,zout)
903C
904           call histdef(nid_day, "taux_"//clnsurf(nsrf),
905     $         "Zonal wind stress"//clnsurf(nsrf),"Pa",
906     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
907     $         "ave(X)", zsto,zout)
908
909           call histdef(nid_day, "tauy_"//clnsurf(nsrf),
910     $         "Meridional xind stress "//clnsurf(nsrf), "Pa", 
911     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
912     $         "ave(X)", zsto,zout)
913C
914           call histdef(nid_day, "albe_"//clnsurf(nsrf),
915     $         "Albedo surf. "//clnsurf(nsrf), "W/m2", 
916     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
917     $         "ave(X)", zsto,zout)
918C
919           call histdef(nid_day, "rugs_"//clnsurf(nsrf),
920     $         "Latent heat flux "//clnsurf(nsrf), "W/m2", 
921     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
922     $         "ave(X)", zsto,zout)
923
924C§§§
925         END DO
926           
927         CALL histdef(nid_day, "sicf", "Sea-ice fraction", "-",
928     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
929     .                "ave(X)", zsto,zout)
930c
931         CALL histdef(nid_day, "cldl", "Low-level cloudiness", "-",
932     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
933     .                "ave(X)", zsto,zout)
934c
935         CALL histdef(nid_day, "cldm", "Mid-level cloudiness", "-",
936     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
937     .                "ave(X)", zsto,zout)
938c
939         CALL histdef(nid_day, "cldh", "High-level cloudiness", "-",
940     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
941     .                "ave(X)", zsto,zout)
942c
943         CALL histdef(nid_day, "cldt", "Total cloudiness", "-",
944     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
945     .                "ave(X)", zsto,zout)
946c
947         CALL histdef(nid_day, "cldq", "Cloud liquid water path", "-",
948     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
949     .                "ave(X)", zsto,zout)
950c
951c Champs 3D:
952c
953         CALL histdef(nid_day, "temp", "Air temperature", "K",
954     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
955     .                "ave(X)", zsto,zout)
956c
957         CALL histdef(nid_day, "ovap", "Specific humidity", "Kg/Kg",
958     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
959     .                "ave(X)", zsto,zout)
960c
961         CALL histdef(nid_day, "geop", "Geopotential height", "m",
962     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
963     .                "ave(X)", zsto,zout)
964c
965         CALL histdef(nid_day, "vitu", "Zonal wind", "m/s",
966     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
967     .                "ave(X)", zsto,zout)
968c
969         CALL histdef(nid_day, "vitv", "Meridional wind", "m/s",
970     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
971     .                "ave(X)", zsto,zout)
972c
973         CALL histdef(nid_day, "vitw", "Vertical wind", "m/s",
974     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
975     .                "ave(X)", zsto,zout)
976c
977         CALL histdef(nid_day, "pres", "Air pressure", "Pa",
978     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
979     .                "ave(X)", zsto,zout)
980c
981         CALL histend(nid_day)
982c
983         ndex2d = 0
984         ndex3d = 0
985c
986      ENDIF ! fin de test sur ok_journe
987c
988      IF (ok_mensuel) THEN
989c
990         CALL ymds2ju(anne_ini, 1, 1, 0.0, zjulian)
991         zjulian = zjulian + day_ini
992c
993         CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlon,zx_lon)
994         DO i = 1, iim
995            zx_lon(i,1) = rlon(i+1)
996            zx_lon(i,jjmp1) = rlon(i+1)
997         ENDDO
998         DO ll=1,klev
999            znivsig(ll)=float(ll)
1000         ENDDO
1001         CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlat,zx_lat)
1002         CALL histbeg("histmth", iim,zx_lon, jjmp1,zx_lat,
1003     .                 1,iim,1,jjmp1, 0, zjulian, dtime,
1004     .                 nhori, nid_mth)
1005         CALL histvert(nid_mth, "presnivs", "Vertical levels", "mb",
1006     .                 klev, presnivs, nvert)
1007c        call histvert(nid_mth, 'sig_s', 'Niveaux sigma','-',
1008c    .              klev, znivsig, nvert)
1009c
1010         zsto = dtime
1011         zout = dtime * ecrit_mth
1012c
1013         CALL histdef(nid_mth, "phis", "Surface geop. height", "-",
1014     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1015     .                "once",  zsto,zout)
1016c
1017         CALL histdef(nid_mth, "aire", "Grid area", "-",
1018     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1019     .                "once",  zsto,zout)
1020c
1021c Champs 2D:
1022c
1023         CALL histdef(nid_mth, "tsol", "Surface Temperature", "K",
1024     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1025     .                "ave(X)", zsto,zout)
1026c
1027         CALL histdef(nid_mth, "psol", "Surface Pressure", "Pa",
1028     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1029     .                "ave(X)", zsto,zout)
1030c
1031         CALL histdef(nid_mth, "qsol", "Surface humidity", "mm",
1032     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1033     .                "ave(X)", zsto,zout)
1034c
1035         CALL histdef(nid_mth, "rain", "Precipitation", "mm/day",
1036     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1037     .                "ave(X)", zsto,zout)
1038c
1039         CALL histdef(nid_mth, "plul", "Large-scale Precip.", "mm/day",
1040     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1041     .                "ave(X)", zsto,zout)
1042c
1043         CALL histdef(nid_mth, "pluc", "Convective Precip.", "mm/day",
1044     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1045     .                "ave(X)", zsto,zout)
1046c
1047         CALL histdef(nid_mth, "snow", "Snow fall", "mm/day",
1048     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1049     .                "ave(X)", zsto,zout)
1050c
1051         CALL histdef(nid_mth, "snow_cov", "Snow cover", "mm",
1052     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1053     .                "ave(X)", zsto,zout)
1054c
1055         CALL histdef(nid_mth, "evap", "Evaporation", "mm/day",
1056     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1057     .                "ave(X)", zsto,zout)
1058c
1059         CALL histdef(nid_mth, "tops", "Solar rad. at TOA", "W/m2",
1060     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1061     .                "ave(X)", zsto,zout)
1062c
1063         CALL histdef(nid_mth, "topl", "IR rad. at TOA", "W/m2",
1064     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1065     .                "ave(X)", zsto,zout)
1066c
1067         CALL histdef(nid_mth, "sols", "Solar rad. at surf.", "W/m2",
1068     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1069     .                "ave(X)", zsto,zout)
1070c
1071         CALL histdef(nid_mth, "soll", "IR rad. at surface", "W/m2",
1072     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1073     .                "ave(X)", zsto,zout)
1074c
1075         CALL histdef(nid_mth, "solldown", "Down. IR rad. at surface",
1076     .                "W/m2", iim,jjmp1,nhori, 1,1,1, -99, 32,
1077     .                "ave(X)", zsto,zout)
1078c
1079         CALL histdef(nid_mth, "tops0", "Solar rad. at TOA", "W/m2",
1080     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1081     .                "ave(X)", zsto,zout)
1082c
1083         CALL histdef(nid_mth, "topl0", "IR rad. at TOA", "W/m2",
1084     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1085     .                "ave(X)", zsto,zout)
1086c
1087         CALL histdef(nid_mth, "sols0", "Solar rad. at surf.", "W/m2",
1088     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1089     .                "ave(X)", zsto,zout)
1090c
1091         CALL histdef(nid_mth, "soll0", "IR rad. at surface", "W/m2",
1092     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1093     .                "ave(X)", zsto,zout)
1094c
1095         CALL histdef(nid_mth, "bils", "Surf. total heat flux", "W/m2",
1096     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1097     .                "ave(X)", zsto,zout)
1098c
1099         CALL histdef(nid_mth, "sens", "Sensible heat flux", "W/m2",
1100     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1101     .                "ave(X)", zsto,zout)
1102c
1103         CALL histdef(nid_mth, "fder", "Heat flux derivation", "W/m2",
1104     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1105     .                "ave(X)", zsto,zout)
1106c
1107         CALL histdef(nid_mth, "frtu", "Zonal wind stress", "Pa",
1108     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1109     .                "ave(X)", zsto,zout)
1110c
1111         CALL histdef(nid_mth, "frtv", "Meridional wind stress", "Pa",
1112     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1113     .                "ave(X)", zsto,zout)
1114c
1115         DO nsrf = 1, nbsrf
1116C
1117           call histdef(nid_mth, "pourc_"//clnsurf(nsrf),
1118     $         "Fraction "//clnsurf(nsrf), "W/m2", 
1119     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1120     $         "ave(X)", zsto,zout)
1121C
1122           call histdef(nid_mth, "tsol_"//clnsurf(nsrf),
1123     $         "Fraction "//clnsurf(nsrf), "W/m2", 
1124     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1125     $         "ave(X)", zsto,zout)
1126C
1127           call histdef(nid_mth, "sens_"//clnsurf(nsrf),
1128     $         "Sensible heat flux "//clnsurf(nsrf), "W/m2", 
1129     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1130     $         "ave(X)", zsto,zout)
1131c
1132           call histdef(nid_mth, "lat_"//clnsurf(nsrf),
1133     $         "Latent heat flux "//clnsurf(nsrf), "W/m2", 
1134     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1135     $         "ave(X)", zsto,zout)
1136C
1137           call histdef(nid_mth, "taux_"//clnsurf(nsrf),
1138     $         "Zonal wind stress"//clnsurf(nsrf), "Pa", 
1139     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1140     $         "ave(X)", zsto,zout)
1141
1142           call histdef(nid_mth, "tauy_"//clnsurf(nsrf),
1143     $         "Meridional xind stress "//clnsurf(nsrf), "Pa", 
1144     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1145     $         "ave(X)", zsto,zout)
1146c
1147           call histdef(nid_mth, "albe_"//clnsurf(nsrf),
1148     $         "Albedo surf. "//clnsurf(nsrf), "W/m2", 
1149     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1150     $         "ave(X)", zsto,zout)
1151c
1152           call histdef(nid_mth, "rugs_"//clnsurf(nsrf),
1153     $         "Latent heat flux "//clnsurf(nsrf), "W/m2", 
1154     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1155     $         "ave(X)", zsto,zout)
1156c
1157         CALL histdef(nid_mth, "ages_"//clnsurf(nsrf), "Snow age","day",
1158     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1159     .                "ave(X)", zsto,zout)
1160
1161         END DO
1162C
1163         CALL histdef(nid_mth, "sicf", "Sea-ice fraction", "-",
1164     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1165     .                "ave(X)", zsto,zout)
1166c
1167         CALL histdef(nid_mth, "albs", "Surface albedo", "-",
1168     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1169     .                "ave(X)", zsto,zout)
1170         CALL histdef(nid_mth, "albslw", "Surface albedo LW", "-",
1171     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1172     .                "ave(X)", zsto,zout)
1173c
1174         CALL histdef(nid_mth, "cdrm", "Momentum drag coef.", "-",
1175     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1176     .                "ave(X)", zsto,zout)
1177c
1178         CALL histdef(nid_mth, "cdrh", "Heat drag coef.", "-",
1179     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1180     .                "ave(X)", zsto,zout)
1181c
1182         CALL histdef(nid_mth, "cldl", "Low-level cloudiness", "-",
1183     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1184     .                "ave(X)", zsto,zout)
1185c
1186         CALL histdef(nid_mth, "cldm", "Mid-level cloudiness", "-",
1187     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1188     .                "ave(X)", zsto,zout)
1189c
1190         CALL histdef(nid_mth, "cldh", "High-level cloudiness", "-",
1191     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1192     .                "ave(X)", zsto,zout)
1193c
1194         CALL histdef(nid_mth, "cldt", "Total cloudiness", "-",
1195     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1196     .                "ave(X)", zsto,zout)
1197c
1198         CALL histdef(nid_mth, "cldq", "Cloud liquid water path", "-",
1199     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1200     .                "ave(X)", zsto,zout)
1201c
1202         CALL histdef(nid_mth, "ue", "Zonal energy transport", "-",
1203     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1204     .                "ave(X)", zsto,zout)
1205c
1206         CALL histdef(nid_mth, "ve", "Merid energy transport", "-",
1207     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1208     .                "ave(X)", zsto,zout)
1209c
1210         CALL histdef(nid_mth, "uq", "Zonal humidity transport", "-",
1211     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1212     .                "ave(X)", zsto,zout)
1213c
1214         CALL histdef(nid_mth, "vq", "Merid humidity transport", "-",
1215     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1216     .                "ave(X)", zsto,zout)
1217c
1218cKE43
1219      IF (iflag_con .EQ. 4) THEN ! sb
1220c
1221         CALL histdef(nid_mth, "cape", "Conv avlbl pot ener", "J/Kg",
1222     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1223     .                "ave(X)", zsto,zout)
1224c
1225         CALL histdef(nid_mth, "pbase", "Cld base pressure", "hPa",
1226     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1227     .                "ave(X)", zsto,zout)
1228c
1229         CALL histdef(nid_mth, "ptop", "Cld top pressure", "hPa",
1230     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1231     .                "ave(X)", zsto,zout)
1232c
1233         CALL histdef(nid_mth, "fbase", "Cld base mass flux", "Kg/m2/s",
1234     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1235     .                "ave(X)", zsto,zout)
1236c
1237c
1238      ENDIF
1239c34EK
1240c
1241c Champs 3D:
1242c
1243         CALL histdef(nid_mth, "temp", "Air temperature", "K",
1244     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1245     .                "ave(X)", zsto,zout)
1246c
1247         CALL histdef(nid_mth, "ovap", "Specific humidity", "Kg/Kg",
1248     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1249     .                "ave(X)", zsto,zout)
1250c
1251         CALL histdef(nid_mth, "geop", "Geopotential height", "m",
1252     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1253     .                "ave(X)", zsto,zout)
1254c
1255         CALL histdef(nid_mth, "vitu", "Zonal wind", "m/s",
1256     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1257     .                "ave(X)", zsto,zout)
1258c
1259         CALL histdef(nid_mth, "vitv", "Meridional wind", "m/s",
1260     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1261     .                "ave(X)", zsto,zout)
1262c
1263         CALL histdef(nid_mth, "vitw", "Vertical wind", "m/s",
1264     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1265     .                "ave(X)", zsto,zout)
1266c
1267         CALL histdef(nid_mth, "pres", "Air pressure", "Pa",
1268     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1269     .                "ave(X)", zsto,zout)
1270c
1271         CALL histdef(nid_mth, "rneb", "Cloud fraction", "-",
1272     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1273     .                "ave(X)", zsto,zout)
1274c
1275         CALL histdef(nid_mth, "rhum", "Relative humidity", "-",
1276     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1277     .                "ave(X)", zsto,zout)
1278c
1279         CALL histdef(nid_mth, "oliq", "Liquid water content", "kg/kg",
1280     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1281     .                "ave(X)", zsto,zout)
1282c
1283         CALL histdef(nid_mth, "dtdyn", "Dynamics dT", "K/s",
1284     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1285     .                "ave(X)", zsto,zout)
1286c
1287         CALL histdef(nid_mth, "dqdyn", "Dynamics dQ", "Kg/Kg/s",
1288     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1289     .                "ave(X)", zsto,zout)
1290c
1291         CALL histdef(nid_mth, "dtcon", "Convection dT", "K/s",
1292     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1293     .                "ave(X)", zsto,zout)
1294c
1295         CALL histdef(nid_mth, "dqcon", "Convection dQ", "Kg/Kg/s",
1296     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1297     .                "ave(X)", zsto,zout)
1298c
1299         CALL histdef(nid_mth, "dtlsc", "Condensation dT", "K/s",
1300     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1301     .                "ave(X)", zsto,zout)
1302c
1303         CALL histdef(nid_mth, "dqlsc", "Condensation dQ", "Kg/Kg/s",
1304     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1305     .                "ave(X)", zsto,zout)
1306c
1307         CALL histdef(nid_mth, "dtvdf", "Boundary-layer dT", "K/s",
1308     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1309     .                "ave(X)", zsto,zout)
1310c
1311         CALL histdef(nid_mth, "dqvdf", "Boundary-layer dQ", "Kg/Kg/s",
1312     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1313     .                "ave(X)", zsto,zout)
1314c
1315         CALL histdef(nid_mth, "dteva", "Reevaporation dT", "K/s",
1316     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1317     .                "ave(X)", zsto,zout)
1318c
1319         CALL histdef(nid_mth, "dqeva", "Reevaporation dQ", "Kg/Kg/s",
1320     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1321     .                "ave(X)", zsto,zout)
1322
1323         CALL histdef(nid_mth, "ptconv", "POINTS CONVECTIFS"," ",
1324     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
1325     .                "ave(X)", zsto,zout)
1326
1327         CALL histdef(nid_mth, "ratqs", "RATQS"," ",
1328     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
1329     .                "ave(X)", zsto,zout)
1330
1331c
1332         CALL histdef(nid_mth, "dtajs", "Dry adjust. dT", "K/s",
1333     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1334     .                "ave(X)", zsto,zout)
1335
1336         CALL histdef(nid_mth, "dqajs", "Dry adjust. dQ", "Kg/Kg/s",
1337     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1338     .                "ave(X)", zsto,zout)
1339c
1340         CALL histdef(nid_mth, "dtswr", "SW radiation dT", "K/s",
1341     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1342     .                "ave(X)", zsto,zout)
1343c
1344         CALL histdef(nid_mth, "dtsw0", "SW radiation dT", "K/s",
1345     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1346     .                "ave(X)", zsto,zout)
1347c
1348         CALL histdef(nid_mth, "dtlwr", "LW radiation dT", "K/s",
1349     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1350     .                "ave(X)", zsto,zout)
1351c
1352         CALL histdef(nid_mth, "dtlw0", "LW radiation dT", "K/s",
1353     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1354     .                "ave(X)", zsto,zout)
1355c
1356         CALL histdef(nid_mth, "duvdf", "Boundary-layer dU", "m/s2",
1357     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1358     .                "ave(X)", zsto,zout)
1359c
1360         CALL histdef(nid_mth, "dvvdf", "Boundary-layer dV", "m/s2",
1361     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1362     .                "ave(X)", zsto,zout)
1363c
1364         IF (ok_orodr) THEN
1365         CALL histdef(nid_mth, "duoro", "Orography dU", "m/s2",
1366     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1367     .                "ave(X)", zsto,zout)
1368c
1369         CALL histdef(nid_mth, "dvoro", "Orography dV", "m/s2",
1370     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1371     .                "ave(X)", zsto,zout)
1372c
1373         ENDIF
1374C
1375         IF (ok_orolf) THEN
1376         CALL histdef(nid_mth, "dulif", "Orography dU", "m/s2",
1377     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1378     .                "ave(X)", zsto,zout)
1379c
1380         CALL histdef(nid_mth, "dvlif", "Orography dV", "m/s2",
1381     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1382     .                "ave(X)", zsto,zout)
1383         ENDIF
1384C
1385         CALL histdef(nid_mth, "ozone", "Ozone concentration", "-",
1386     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1387     .                "ave(X)", zsto,zout)
1388c
1389         if (nqmax.GE.3) THEN
1390         DO iq=1,nqmax-2
1391         IF (iq.LE.99) THEN
1392         WRITE(str2,'(i2.2)') iq
1393         CALL histdef(nid_mth, "trac"//str2, "Tracer No."//str2, "-",
1394     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1395     .                "ave(X)", zsto,zout)
1396         ELSE
1397         PRINT*, "Trop de traceurs"
1398         CALL abort
1399         ENDIF
1400         ENDDO
1401         ENDIF
1402c
1403cKE43
1404      IF (iflag_con.EQ.4) THEN ! (sb)
1405c
1406         CALL histdef(nid_mth, "upwd", "saturated updraft", "Kg/m2/s",
1407     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1408     .                "ave(X)", zsto,zout)
1409c
1410         CALL histdef(nid_mth, "dnwd", "saturated downdraft","Kg/m2/s",
1411     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1412     .                "ave(X)", zsto,zout)
1413c
1414         CALL histdef(nid_mth, "dnwd0", "unsat. downdraft", "Kg/m2/s",
1415     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1416     .                "ave(X)", zsto,zout)
1417c
1418         CALL histdef(nid_mth,"Ma","undilute adiab updraft","Kg/m2/s",
1419     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1420     .                "ave(X)", zsto,zout)
1421c
1422c
1423      ENDIF
1424c34EK
1425         CALL histend(nid_mth)
1426c
1427         ndex2d = 0
1428         ndex3d = 0
1429c
1430      ENDIF ! fin de test sur ok_mensuel
1431c
1432c
1433      IF (ok_instan) THEN
1434c
1435         CALL ymds2ju(anne_ini, 1, 1, 0.0, zjulian)
1436         zjulian = zjulian + day_ini
1437c
1438         CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlon,zx_lon)
1439         DO i = 1, iim
1440            zx_lon(i,1) = rlon(i+1)
1441            zx_lon(i,jjmp1) = rlon(i+1)
1442         ENDDO
1443         DO ll=1,klev
1444            znivsig(ll)=float(ll)
1445         ENDDO
1446         CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlat,zx_lat)
1447         CALL histbeg("histins", iim,zx_lon, jjmp1,zx_lat,
1448     .                 1,iim,1,jjmp1, 0, zjulian, dtime,
1449     .                 nhori, nid_ins)
1450         CALL histvert(nid_ins, "presnivs", "Vertical levels", "mb",
1451     .                 klev, presnivs, nvert)
1452c        call histvert(nid_ins, 'sig_s', 'Niveaux sigma','-',
1453c    .              klev, znivsig, nvert)
1454c
1455c
1456         zsto = dtime * ecrit_ins
1457         zout = dtime * ecrit_ins
1458C
1459         CALL histdef(nid_ins, "phis", "Surface geop. height", "-",
1460     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1461     .                "once", zsto,zout)
1462c
1463         CALL histdef(nid_ins, "aire", "Grid area", "-",
1464     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1465     .                "once", zsto,zout)
1466c
1467c Champs 2D:
1468c
1469        CALL histdef(nid_ins, "tsol", "Surface Temperature", "K",
1470     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1471     .                "inst(X)", zsto,zout)
1472c
1473        CALL histdef(nid_ins, "psol", "Surface Pressure", "Pa",
1474     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1475     .                "inst(X)", zsto,zout)
1476c
1477         CALL histdef(nid_ins, "plul", "Large-scale Precip.", "mm/day",
1478     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1479     .                "inst(X)", zsto,zout)
1480c
1481         CALL histdef(nid_ins, "pluc", "Convective Precip.", "mm/day",
1482     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1483     .                "inst(X)", zsto,zout)
1484
1485        CALL histdef(nid_ins, "qsol", "Surface humidity", "mm",
1486     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1487     .                "inst(X)", zsto,zout)
1488c
1489         CALL histdef(nid_ins, "rain", "Precipitation", "mm/day",
1490     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1491     .                "inst(X)", zsto,zout)
1492c
1493         CALL histdef(nid_ins, "snow", "Snow fall", "mm/day",
1494     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1495     .                "inst(X)", zsto,zout)
1496c
1497         CALL histdef(nid_ins, "snow_cov", "Snow cover", "mm",
1498     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1499     .                "inst(X)", zsto,zout)
1500c
1501         CALL histdef(nid_ins, "topl", "OLR", "W/m2",
1502     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1503     .                "inst(X)", zsto,zout)
1504c
1505         CALL histdef(nid_ins, "evap", "Evaporation", "mm/day",
1506     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1507     .                "inst(X)", zsto,zout)
1508c
1509         CALL histdef(nid_ins, "sols", "Solar rad. at surf.", "W/m2",
1510     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1511     .                "inst(X)", zsto,zout)
1512c
1513         CALL histdef(nid_ins, "soll", "IR rad. at surface", "W/m2",
1514     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1515     .                "inst(X)", zsto,zout)
1516c
1517         CALL histdef(nid_ins, "solldown", "Down. IR rad. at surface",
1518     .                "W/m2", iim,jjmp1,nhori, 1,1,1, -99, 32,
1519     .                "inst(X)", zsto,zout)
1520c
1521         CALL histdef(nid_ins, "bils", "Surf. total heat flux", "W/m2",
1522     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1523     .                "inst(X)", zsto,zout)
1524c
1525         CALL histdef(nid_ins, "sens", "Sensible heat flux", "W/m2",
1526     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1527     .                "inst(X)", zsto,zout)
1528c
1529         CALL histdef(nid_ins, "fder", "Heat flux derivation", "W/m2",
1530     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1531     .                "inst(X)", zsto,zout)
1532c
1533      CALL histdef(nid_ins, "dtsvdfo", "Boundary-layer dTs(o)", "K/s",
1534     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1535     .                "inst(X)", zsto,zout)
1536c
1537      CALL histdef(nid_ins, "dtsvdft", "Boundary-layer dTs(t)", "K/s",
1538     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1539     .                "inst(X)", zsto,zout)
1540c
1541      CALL histdef(nid_ins, "dtsvdfg", "Boundary-layer dTs(g)", "K/s",
1542     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1543     .                "inst(X)", zsto,zout)
1544c
1545      CALL histdef(nid_ins, "dtsvdfi", "Boundary-layer dTs(g)", "K/s",
1546     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1547     .                "inst(X)", zsto,zout)
1548
1549         DO nsrf = 1, nbsrf
1550C
1551           call histdef(nid_ins, "pourc_"//clnsurf(nsrf),
1552     $         "Fraction"//clnsurf(nsrf), "W/m2", 
1553     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1554     $         "inst(X)", zsto,zout)
1555
1556           call histdef(nid_ins, "sens_"//clnsurf(nsrf),
1557     $         "Sensible heat flux "//clnsurf(nsrf), "W/m2", 
1558     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1559     $         "inst(X)", zsto,zout)
1560c
1561           call histdef(nid_ins, "tsol_"//clnsurf(nsrf),
1562     $         "Surface Temperature"//clnsurf(nsrf), "W/m2", 
1563     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1564     $         "inst(X)", zsto,zout)
1565c
1566           call histdef(nid_ins, "lat_"//clnsurf(nsrf),
1567     $         "Latent heat flux "//clnsurf(nsrf), "W/m2", 
1568     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1569     $         "inst(X)", zsto,zout)
1570C
1571           call histdef(nid_ins, "taux_"//clnsurf(nsrf),
1572     $         "Zonal wind stress"//clnsurf(nsrf),"Pa",
1573     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1574     $         "inst(X)", zsto,zout)
1575
1576           call histdef(nid_ins, "tauy_"//clnsurf(nsrf),
1577     $         "Meridional xind stress "//clnsurf(nsrf), "Pa", 
1578     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1579     $         "inst(X)", zsto,zout)
1580c
1581           call histdef(nid_ins, "albe_"//clnsurf(nsrf),
1582     $         "Albedo "//clnsurf(nsrf), "-", 
1583     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1584     $         "inst(X)", zsto,zout)
1585c
1586           call histdef(nid_ins, "rugs_"//clnsurf(nsrf),
1587     $         "rugosite "//clnsurf(nsrf), "-", 
1588     $         iim,jjmp1,nhori, 1,1,1, -99, 32,
1589     $         "inst(X)", zsto,zout)
1590C§§§
1591         END DO
1592         CALL histdef(nid_ins, "rugs", "rugosity", "-",
1593     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1594     .                "inst(X)", zsto,zout)
1595
1596c
1597         CALL histdef(nid_ins, "albs", "Surface albedo", "-",
1598     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1599     .                "inst(X)", zsto,zout)
1600         CALL histdef(nid_ins, "albslw", "Surface albedo LW", "-",
1601     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
1602     .                "inst(X)", zsto,zout)
1603c
1604c
1605c Champs 3D:
1606c
1607         CALL histdef(nid_ins, "temp", "Temperature", "K",
1608     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1609     .                "inst(X)", zsto,zout)
1610c
1611         CALL histdef(nid_ins, "vitu", "Zonal wind", "m/s",
1612     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1613     .                "inst(X)", zsto,zout)
1614c
1615         CALL histdef(nid_ins, "vitv", "Merid wind", "m/s",
1616     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1617     .                "inst(X)", zsto,zout)
1618c
1619         CALL histdef(nid_ins, "geop", "Geopotential height", "m",
1620     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1621     .                "inst(X)", zsto,zout)
1622c
1623         CALL histdef(nid_ins, "pres", "Air pressure", "Pa",
1624     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1625     .                "inst(X)", zsto,zout)
1626c
1627         CALL histdef(nid_ins, "dtvdf", "Boundary-layer dT", "K/s",
1628     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1629     .                "inst(X)", zsto,zout)
1630c
1631         CALL histdef(nid_ins, "dqvdf", "Boundary-layer dQ", "Kg/Kg/s",
1632     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
1633     .                "inst(X)", zsto,zout)
1634c
1635
1636         CALL histend(nid_ins)
1637c
1638         ndex2d = 0
1639         ndex3d = 0
1640c
1641      ENDIF
1642c
1643c
1644c
1645c Prescrire l'ozone dans l'atmosphere
1646c
1647c
1648cc         DO i = 1, klon
1649cc         DO k = 1, klev
1650cc            CALL o3cm (paprs(i,k)/100.,paprs(i,k+1)/100., wo(i,k),20)
1651cc         ENDDO
1652cc         ENDDO
1653c
1654c
1655      ENDIF
1656c
1657c   ****************     Fin  de   IF ( debut  )   ***************
1658c
1659c
1660c Mettre a zero des variables de sortie (pour securite)
1661c
1662      DO i = 1, klon
1663         d_ps(i) = 0.0
1664      ENDDO
1665      DO k = 1, klev
1666      DO i = 1, klon
1667         d_t(i,k) = 0.0
1668         d_u(i,k) = 0.0
1669         d_v(i,k) = 0.0
1670      ENDDO
1671      ENDDO
1672      DO iq = 1, nqmax
1673      DO k = 1, klev
1674      DO i = 1, klon
1675         d_qx(i,k,iq) = 0.0
1676      ENDDO
1677      ENDDO
1678      ENDDO
1679c
1680c Ne pas affecter les valeurs entrees de u, v, h, et q
1681c
1682      DO k = 1, klev
1683      DO i = 1, klon
1684         t_seri(i,k)  = t(i,k)
1685         u_seri(i,k)  = u(i,k)
1686         v_seri(i,k)  = v(i,k)
1687         q_seri(i,k)  = qx(i,k,ivap)
1688         ql_seri(i,k) = qx(i,k,iliq)
1689      ENDDO
1690      ENDDO
1691      IF (nqmax.GE.3) THEN
1692      DO iq = 3, nqmax
1693      DO  k = 1, klev
1694      DO  i = 1, klon
1695         tr_seri(i,k,iq-2) = qx(i,k,iq)
1696      ENDDO
1697      ENDDO
1698      ENDDO
1699      ELSE
1700      DO k = 1, klev
1701      DO i = 1, klon
1702         tr_seri(i,k,1) = 0.0
1703      ENDDO
1704      ENDDO
1705      ENDIF
1706c
1707c Diagnostiquer la tendance dynamique
1708c
1709      IF (ancien_ok) THEN
1710         DO k = 1, klev
1711         DO i = 1, klon
1712            d_t_dyn(i,k) = (t_seri(i,k)-t_ancien(i,k))/dtime
1713            d_q_dyn(i,k) = (q_seri(i,k)-q_ancien(i,k))/dtime
1714         ENDDO
1715         ENDDO
1716      ELSE
1717         DO k = 1, klev
1718         DO i = 1, klon
1719            d_t_dyn(i,k) = 0.0
1720            d_q_dyn(i,k) = 0.0
1721         ENDDO
1722         ENDDO
1723         ancien_ok = .TRUE.
1724      ENDIF
1725c
1726c Ajouter le geopotentiel du sol:
1727c
1728      DO k = 1, klev
1729      DO i = 1, klon
1730         zphi(i,k) = pphi(i,k) + pphis(i)
1731      ENDDO
1732      ENDDO
1733c
1734c Verifier les temperatures
1735c
1736      CALL hgardfou(t_seri,ftsol,'debutphy')
1737c
1738c Incrementer le compteur de la physique
1739c
1740      itap   = itap + 1
1741      julien = MOD(NINT(xjour),360)
1742c
1743c Mettre en action les conditions aux limites (albedo, sst, etc.).
1744c Prescrire l'ozone et calculer l'albedo sur l'ocean.
1745c
1746      IF (MOD(itap-1,lmt_pas) .EQ. 0) THEN
1747         idayvrai = NINT(xjour)
1748         PRINT *,' PHYS cond  julien ',julien,idayvrai
1749         CALL ozonecm( FLOAT(julien), rlat, paprs, wo)
1750      ENDIF
1751c
1752c Re-evaporer l'eau liquide nuageuse
1753c
1754      DO k = 1, klev  ! re-evaporation de l'eau liquide nuageuse
1755      DO i = 1, klon
1756         zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
1757         zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
1758         zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k)))
1759         zb = MAX(0.0,ql_seri(i,k))
1760         za = - MAX(0.0,ql_seri(i,k))
1761     .                  * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
1762         t_seri(i,k) = t_seri(i,k) + za
1763         q_seri(i,k) = q_seri(i,k) + zb
1764         ql_seri(i,k) = 0.0
1765         d_t_eva(i,k) = za
1766         d_q_eva(i,k) = zb
1767      ENDDO
1768      ENDDO
1769c
1770c Appeler la diffusion verticale (programme de couche limite)
1771c
1772      DO i = 1, klon
1773c       if (.not. ok_veget) then
1774c          frugs(i,is_ter) = SQRT(frugs(i,is_ter)**2+rugoro(i)**2)
1775c       endif
1776c         frugs(i,is_lic) = rugoro(i)
1777c         frugs(i,is_oce) = rugmer(i)
1778c         frugs(i,is_sic) = 0.001
1779         zxrugs(i) = 0.0
1780      ENDDO
1781      DO nsrf = 1, nbsrf
1782      DO i = 1, klon
1783         frugs(i,nsrf) = MAX(frugs(i,nsrf),0.001)
1784      ENDDO
1785      ENDDO
1786      DO nsrf = 1, nbsrf
1787      DO i = 1, klon
1788            zxrugs(i) = zxrugs(i) + frugs(i,nsrf)*pctsrf(i,nsrf)
1789      ENDDO
1790      ENDDO
1791c
1792C calculs necessaires au calcul de l'albedo dans l'interface
1793c
1794      CALL orbite(FLOAT(julien),zlongi,dist)
1795      IF (cycle_diurne) THEN
1796        zdtime=dtime*FLOAT(radpas) ! pas de temps du rayonnement (s)
1797        CALL zenang(zlongi,gmtime,zdtime,rlat,rlon,rmu0,fract)
1798      ELSE
1799        rmu0 = -999.999
1800      ENDIF
1801
1802      fder = dlw
1803
1804      CALL clmain(dtime,itap,date0,pctsrf,
1805     e            t_seri,q_seri,u_seri,v_seri,
1806     e            julien, rmu0,
1807     e            ok_veget, ocean, npas, nexca, ftsol,
1808     $            soil_model,ftsoil,
1809     $            paprs,pplay,radsol, fsnow,fqsol,fevap,falbe,falblw,
1810     $            fluxlat,
1811     e            rain_fall, snow_fall, solsw, sollw, sollwdown, fder,
1812     e            rlon, rlat, cufi, cvfi, frugs,
1813     e            debut, lafin, agesno,rugoro ,
1814     s            d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_ts,
1815     s            fluxt,fluxq,fluxu,fluxv,cdragh,cdragm,
1816     s            dsens, devap,
1817     s            ycoefh,yu1,yv1)
1818
1819c
1820C§§§ PB
1821C§§§ Incrementation des flux
1822C§§
1823      zxfluxt=0.
1824      zxfluxq=0.
1825      zxfluxu=0.
1826      zxfluxv=0.
1827      DO nsrf = 1, nbsrf
1828        DO k = 1, klev
1829          DO i = 1, klon
1830            zxfluxt(i,k) = zxfluxt(i,k) +
1831     $          fluxt(i,k,nsrf) * pctsrf( i, nsrf)
1832            zxfluxq(i,k) = zxfluxq(i,k) +
1833     $          fluxq(i,k,nsrf) * pctsrf( i, nsrf)
1834            zxfluxu(i,k) = zxfluxu(i,k) +
1835     $          fluxu(i,k,nsrf) * pctsrf( i, nsrf)
1836            zxfluxv(i,k) = zxfluxv(i,k) +
1837     $          fluxv(i,k,nsrf) * pctsrf( i, nsrf)
1838          END DO
1839        END DO
1840      END DO
1841      DO i = 1, klon
1842         sens(i) = - zxfluxt(i,1) ! flux de chaleur sensible au sol
1843c         evap(i) = - fluxq(i,1) ! flux d'evaporation au sol
1844         evap(i) = - zxfluxq(i,1) ! flux d'evaporation au sol
1845         fder(i) = dlw(i) + dsens(i) + devap(i)
1846      ENDDO
1847
1848
1849      DO k = 1, klev
1850      DO i = 1, klon
1851         t_seri(i,k) = t_seri(i,k) + d_t_vdf(i,k)
1852         q_seri(i,k) = q_seri(i,k) + d_q_vdf(i,k)
1853         u_seri(i,k) = u_seri(i,k) + d_u_vdf(i,k)
1854         v_seri(i,k) = v_seri(i,k) + d_v_vdf(i,k)
1855      ENDDO
1856      ENDDO
1857c
1858c Incrementer la temperature du sol
1859c
1860      DO i = 1, klon
1861         zxtsol(i) = 0.0
1862         IF ( abs( pctsrf(i, is_ter) + pctsrf(i, is_lic) +
1863     $       pctsrf(i, is_oce) + pctsrf(i, is_sic)  - 1.) .GT. EPSFRA)
1864     $       THEN
1865             WRITE(*,*) 'physiq : pb sous surface au point ', i,
1866     $           pctsrf(i, 1 : nbsrf)
1867         ENDIF
1868      ENDDO
1869      DO nsrf = 1, nbsrf
1870      DO i = 1, klon
1871c$$$        IF (pctsrf(i,nsrf) .GE. EPSFRA) THEN
1872            ftsol(i,nsrf) = ftsol(i,nsrf) + d_ts(i,nsrf)
1873            zxtsol(i) = zxtsol(i) + ftsol(i,nsrf)*pctsrf(i,nsrf)
1874c$$$        ENDIF
1875      ENDDO
1876      ENDDO
1877
1878c
1879c Si une sous-fraction n'existe pas, elle prend la temp. moyenne
1880c
1881      DO nsrf = 1, nbsrf
1882        DO i = 1, klon
1883          IF (pctsrf(i,nsrf) .LT. epsfra) ftsol(i,nsrf) = zxtsol(i)
1884        ENDDO
1885      ENDDO
1886
1887c
1888c Calculer la derive du flux infrarouge
1889c
1890c$$$      DO nsrf = 1, nbsrf
1891      DO i = 1, klon
1892c$$$        IF (pctsrf(i,nsrf) .GE. EPSFRA) THEN
1893            dlw(i) = - 4.0*RSIGMA*zxtsol(i)**3
1894c$$$     .          *(ftsol(i,nsrf)-zxtsol(i))
1895c$$$     .          *pctsrf(i,nsrf)
1896c$$$        ENDIF
1897c$$$      ENDDO
1898      ENDDO
1899c
1900c Appeler la convection (au choix)
1901c
1902      DO k = 1, klev
1903      DO i = 1, klon
1904         conv_q(i,k) = d_q_dyn(i,k)
1905     .               + d_q_vdf(i,k)/dtime
1906         conv_t(i,k) = d_t_dyn(i,k)
1907     .               + d_t_vdf(i,k)/dtime
1908      ENDDO
1909      ENDDO
1910      IF (check) THEN
1911         za = qcheck(klon,klev,paprs,q_seri,ql_seri,paire)
1912         PRINT*, "avantcon=", za
1913      ENDIF
1914      zx_ajustq = .FALSE.
1915      IF (iflag_con.EQ.2) zx_ajustq=.TRUE.
1916      IF (zx_ajustq) THEN
1917         DO i = 1, klon
1918            z_avant(i) = 0.0
1919         ENDDO
1920         DO k = 1, klev
1921         DO i = 1, klon
1922            z_avant(i) = z_avant(i) + (q_seri(i,k)+ql_seri(i,k))
1923     .                        *(paprs(i,k)-paprs(i,k+1))/RG
1924         ENDDO
1925         ENDDO
1926      ENDIF
1927      IF (iflag_con.EQ.1) THEN
1928          stop'reactiver le call conlmd dans physiq.F'
1929c     CALL conlmd (dtime, paprs, pplay, t_seri, q_seri, conv_q,
1930c    .             d_t_con, d_q_con,
1931c    .             rain_con, snow_con, ibas_con, itop_con)
1932      ELSE IF (iflag_con.EQ.2) THEN
1933      CALL conflx(dtime, paprs, pplay, t_seri, q_seri,
1934     e            conv_t, conv_q, zxfluxq(1,1), omega,
1935     s            d_t_con, d_q_con, rain_con, snow_con,
1936     s            pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
1937     s            kcbot, kctop, kdtop, pmflxr, pmflxs)
1938      WHERE (rain_con < 0.) rain_con = 0.
1939      WHERE (snow_con < 0.) snow_con = 0.
1940      DO i = 1, klon
1941         ibas_con(i) = klev+1 - kcbot(i)
1942         itop_con(i) = klev+1 - kctop(i)
1943      ENDDO
1944      ELSE IF (iflag_con.EQ.3) THEN
1945          stop'reactiver le call conlmd dans physiq.F'
1946c     CALL conccm (dtime,paprs,pplay,t_seri,q_seri,conv_q,
1947c    s             d_t_con, d_q_con,
1948c    s             rain_con, snow_con, ibas_con, itop_con)
1949cKE43
1950      ELSE IF (iflag_con.EQ.4) THEN
1951c nb of tracers for the KE convection:
1952          if (nqmax .GE. 4) then
1953              ntra = nbtr
1954          else
1955              ntra = 1
1956          endif
1957cke43 (arguments inutiles enleves => des SAVE dans conema43?)
1958c$$$          CALL conema43(dtime,paprs,pplay,t_seri,q_seri,
1959c$$$     $        u_seri,v_seri,tr_seri,nbtr,
1960c$$$     .        ema_workcbmf,
1961c$$$     .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
1962c$$$     .        wdn, tdn, qdn,
1963c$$$     .        rain_con, snow_con, ibas_con, itop_con,
1964c$$$     .        upwd,dnwd,dnwd0,bas,top,Ma,cape,tvp,rflag,
1965c$$$     .        pbase
1966c$$$     .        ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,
1967c$$$     .        pori_con,plcl_con,dtma_con,dtlcl_con)
1968          if (1.eq.1) then ! vectorise
1969          CALL conemav (dtime,paprs,pplay,t_seri,q_seri,
1970     .        u_seri,v_seri,tr_seri,nbtr,
1971     .        ema_work1,ema_work2,
1972     .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
1973     .        rain_con, snow_con, ibas_con, itop_con,
1974     .        upwd,dnwd,dnwd0,
1975c    .        Ma,cape,tvp,(/(nint(rflag(i)),i=1,size(rflag))/),
1976     .        Ma,cape,tvp,iflagctrl,
1977     .       pbase
1978     .        ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr)
1979
1980          else
1981
1982          CALL conema (dtime,paprs,pplay,t_seri,q_seri,
1983     $        u_seri,v_seri,tr_seri,nbtr,
1984     .        ema_work1,ema_work2,
1985     .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
1986c$$$     .        wdn, tdn, qdn,
1987     .        rain_con, snow_con, ibas_con, itop_con,
1988     .        upwd,dnwd,dnwd0,bas,top,Ma,cape,tvp,rflag,
1989     .        pbase
1990     .        ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr)
1991c$$$     .        pori_con,plcl_con,dtma_con,dtlcl_con)
1992          endif
1993          DO i = 1, klon
1994            ema_pcb(i)  = pbase(i)
1995          ENDDO
1996          DO i = 1, klon
1997            ema_pct(i)  = paprs(i,itop_con(i))
1998          ENDDO
1999          DO i = 1, klon
2000            ema_cbmf(i) = ema_workcbmf(i)
2001          ENDDO     
2002      ELSE
2003          PRINT*, "iflag_con non-prevu", iflag_con
2004          CALL abort
2005      ENDIF
2006
2007      CALL homogene(paprs, q_seri, d_q_con, u_seri,v_seri,
2008     .              d_u_con, d_v_con)
2009      DO k = 1, klev
2010        DO i = 1, klon
2011         t_seri(i,k) = t_seri(i,k) + d_t_con(i,k)
2012         q_seri(i,k) = q_seri(i,k) + d_q_con(i,k)
2013         u_seri(i,k) = u_seri(i,k) + d_u_con(i,k)
2014         v_seri(i,k) = v_seri(i,k) + d_v_con(i,k)
2015        ENDDO
2016      ENDDO
2017      IF (check) THEN
2018          za = qcheck(klon,klev,paprs,q_seri,ql_seri,paire)
2019          PRINT*, "aprescon=", za
2020          zx_t = 0.0
2021          za = 0.0
2022          DO i = 1, klon
2023            za = za + paire(i)/FLOAT(klon)
2024            zx_t = zx_t + (rain_con(i)+snow_con(i))*paire(i)/FLOAT(klon)
2025          ENDDO
2026          zx_t = zx_t/za*dtime
2027          PRINT*, "Precip=", zx_t
2028      ENDIF
2029      IF (zx_ajustq) THEN
2030          DO i = 1, klon
2031            z_apres(i) = 0.0
2032          ENDDO
2033          DO k = 1, klev
2034            DO i = 1, klon
2035              z_apres(i) = z_apres(i) + (q_seri(i,k)+ql_seri(i,k))
2036     .            *(paprs(i,k)-paprs(i,k+1))/RG
2037            ENDDO
2038          ENDDO
2039          DO i = 1, klon
2040            z_factor(i) = (z_avant(i)-(rain_con(i)+snow_con(i))*dtime)
2041     .          /z_apres(i)
2042          ENDDO
2043          DO k = 1, klev
2044            DO i = 1, klon
2045              IF (z_factor(i).GT.(1.0+1.0E-08) .OR.
2046     .            z_factor(i).LT.(1.0-1.0E-08)) THEN
2047                  q_seri(i,k) = q_seri(i,k) * z_factor(i)
2048              ENDIF
2049            ENDDO
2050          ENDDO
2051      ENDIF
2052      zx_ajustq=.FALSE.
2053c
2054      IF (nqmax.GT.2) THEN !--melange convectif de traceurs
2055c
2056          IF (iflag_con .NE. 2 .AND.  iflag_con .NE. 4 ) THEN
2057              PRINT*, 'Pour l instant, seul conflx fonctionne ',
2058     $            'avec traceurs', iflag_con
2059              PRINT*,' Mettre iflag_con',
2060     $            ' = 2  ou 4 dans run.def et repasser'
2061              CALL abort
2062              ENDIF
2063c
2064      ENDIF !--nqmax.GT.2
2065c
2066c Appeler l'ajustement sec
2067c
2068      CALL ajsec(paprs, pplay, t_seri, q_seri, d_t_ajs, d_q_ajs)
2069      DO k = 1, klev
2070      DO i = 1, klon
2071         t_seri(i,k) = t_seri(i,k) + d_t_ajs(i,k)
2072         q_seri(i,k) = q_seri(i,k) + d_q_ajs(i,k)
2073      ENDDO
2074      ENDDO
2075
2076c   RATQS
2077      call calcratqs (
2078     I            paprs,pplay,q_seri,d_t_con,d_t_ajs
2079     O           ,ratqs,zpt_conv)
2080c
2081c Appeler le processus de condensation a grande echelle
2082c et le processus de precipitation
2083c
2084      CALL fisrtilp_tr(dtime,paprs,pplay,
2085     .           t_seri, q_seri,ratqs,
2086     .           d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq,
2087     .           rain_lsc, snow_lsc,
2088     .           pfrac_impa, pfrac_nucl, pfrac_1nucl,
2089     .           frac_impa, frac_nucl,
2090     .           prfl, psfl)
2091      WHERE (rain_lsc < 0) rain_lsc = 0.
2092      WHERE (snow_lsc < 0) snow_lsc = 0.
2093      DO k = 1, klev
2094      DO i = 1, klon
2095         t_seri(i,k) = t_seri(i,k) + d_t_lsc(i,k)
2096         q_seri(i,k) = q_seri(i,k) + d_q_lsc(i,k)
2097         ql_seri(i,k) = ql_seri(i,k) + d_ql_lsc(i,k)
2098         cldfra(i,k) = rneb(i,k)
2099         IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k)
2100      ENDDO
2101      ENDDO
2102      IF (check) THEN
2103         za = qcheck(klon,klev,paprs,q_seri,ql_seri,paire)
2104         PRINT*, "apresilp=", za
2105         zx_t = 0.0
2106         za = 0.0
2107         DO i = 1, klon
2108            za = za + paire(i)/FLOAT(klon)
2109            zx_t = zx_t + (rain_lsc(i)+snow_lsc(i))*paire(i)/FLOAT(klon)
2110        ENDDO
2111         zx_t = zx_t/za*dtime
2112         PRINT*, "Precip=", zx_t
2113      ENDIF
2114c
2115c Nuages diagnostiques:
2116c
2117      IF (iflag_con.EQ.2) THEN ! seulement pour Tiedtke
2118      CALL diagcld1(paprs,pplay,
2119     .             rain_con,snow_con,ibas_con,itop_con,
2120     .             diafra,dialiq)
2121      DO k = 1, klev
2122      DO i = 1, klon
2123      IF (diafra(i,k).GT.cldfra(i,k)) THEN
2124         cldliq(i,k) = dialiq(i,k)
2125         cldfra(i,k) = diafra(i,k)
2126      ENDIF
2127      ENDDO
2128      ENDDO
2129      ENDIF
2130c
2131c Nuages stratus artificiels:
2132c
2133      IF (ok_stratus) THEN
2134      CALL diagcld2(paprs,pplay,t_seri,q_seri, diafra,dialiq)
2135      DO k = 1, klev
2136      DO i = 1, klon
2137      IF (diafra(i,k).GT.cldfra(i,k)) THEN
2138         cldliq(i,k) = dialiq(i,k)
2139         cldfra(i,k) = diafra(i,k)
2140      ENDIF
2141      ENDDO
2142      ENDDO
2143      ENDIF
2144c
2145c Precipitation totale
2146c
2147      DO i = 1, klon
2148         rain_fall(i) = rain_con(i) + rain_lsc(i)
2149         snow_fall(i) = snow_con(i) + snow_lsc(i)
2150      ENDDO
2151c
2152c Calculer l'humidite relative pour diagnostique
2153c
2154      DO k = 1, klev
2155      DO i = 1, klon
2156         zx_t = t_seri(i,k)
2157         IF (thermcep) THEN
2158            zdelta = MAX(0.,SIGN(1.,rtt-zx_t))
2159            zx_qs  = r2es * FOEEW(zx_t,zdelta)/pplay(i,k)
2160            zx_qs  = MIN(0.5,zx_qs)
2161            zcor   = 1./(1.-retv*zx_qs)
2162            zx_qs  = zx_qs*zcor
2163         ELSE
2164           IF (zx_t.LT.t_coup) THEN
2165              zx_qs = qsats(zx_t)/pplay(i,k)
2166           ELSE
2167              zx_qs = qsatl(zx_t)/pplay(i,k)
2168           ENDIF
2169         ENDIF
2170         zx_rh(i,k) = q_seri(i,k)/zx_qs
2171      ENDDO
2172      ENDDO
2173c
2174c Calculer les parametres optiques des nuages et quelques
2175c parametres pour diagnostiques:
2176c
2177      CALL nuage (paprs, pplay,
2178     .            t_seri, cldliq, cldfra, cldtau, cldemi,
2179     .            cldh, cldl, cldm, cldt, cldq)
2180c
2181c Appeler le rayonnement mais calculer tout d'abord l'albedo du sol.
2182c
2183      IF (MOD(itaprad,radpas).EQ.0) THEN
2184      DO i = 1, klon
2185         albsol(i) = falbe(i,is_oce) * pctsrf(i,is_oce)
2186     .             + falbe(i,is_lic) * pctsrf(i,is_lic)
2187     .             + falbe(i,is_ter) * pctsrf(i,is_ter)
2188     .             + falbe(i,is_sic) * pctsrf(i,is_sic)
2189         albsollw(i) = falblw(i,is_oce) * pctsrf(i,is_oce)
2190     .               + falblw(i,is_lic) * pctsrf(i,is_lic)
2191     .               + falblw(i,is_ter) * pctsrf(i,is_ter)
2192     .               + falblw(i,is_sic) * pctsrf(i,is_sic)
2193      ENDDO
2194      CALL radlwsw ! nouveau rayonnement (compatible Arpege-IFS)
2195     e            (dist, rmu0, fract, co2_ppm, solaire,
2196     e             paprs, pplay,zxtsol,albsol, albsollw, t_seri,q_seri,
2197     e             wo,
2198     e             cldfra, cldemi, cldtau,
2199     s             heat,heat0,cool,cool0,radsol,albpla,
2200     s             topsw,toplw,solsw,sollw,
2201     s             sollwdown,
2202     s             topsw0,toplw0,solsw0,sollw0)
2203      itaprad = 0
2204      ENDIF
2205      itaprad = itaprad + 1
2206c
2207c Ajouter la tendance des rayonnements (tous les pas)
2208c
2209      DO k = 1, klev
2210      DO i = 1, klon
2211         t_seri(i,k) = t_seri(i,k)
2212     .               + (heat(i,k)-cool(i,k)) * dtime/86400.
2213      ENDDO
2214      ENDDO
2215c
2216c Calculer l'hydrologie de la surface
2217c
2218c      CALL hydrol(dtime,pctsrf,rain_fall, snow_fall, zxevap,
2219c     .            agesno, ftsol,fqsol,fsnow, ruis)
2220c
2221      DO i = 1, klon
2222         zxqsol(i) = 0.0
2223         zxsnow(i) = 0.0
2224      ENDDO
2225      DO nsrf = 1, nbsrf
2226      DO i = 1, klon
2227         zxqsol(i) = zxqsol(i) + fqsol(i,nsrf)*pctsrf(i,nsrf)
2228         zxsnow(i) = zxsnow(i) + fsnow(i,nsrf)*pctsrf(i,nsrf)
2229      ENDDO
2230      ENDDO
2231c
2232c Si une sous-fraction n'existe pas, elle prend la valeur moyenne
2233c
2234c$$$      DO nsrf = 1, nbsrf
2235c$$$      DO i = 1, klon
2236c$$$         IF (pctsrf(i,nsrf).LT.epsfra) THEN
2237c$$$            fqsol(i,nsrf) = zxqsol(i)
2238c$$$            fsnow(i,nsrf) = zxsnow(i)
2239c$$$         ENDIF
2240c$$$      ENDDO
2241c$$$      ENDDO
2242c
2243c Calculer le bilan du sol et la derive de temperature (couplage)
2244c
2245      DO i = 1, klon
2246         bils(i) = radsol(i) - sens(i) - evap(i)*RLVTT
2247      ENDDO
2248c
2249cmoddeblott(jan95)
2250c Appeler le programme de parametrisation de l'orographie
2251c a l'echelle sous-maille:
2252c
2253      IF (ok_orodr) THEN
2254c
2255c  selection des points pour lesquels le shema est actif:
2256        igwd=0
2257        DO i=1,klon
2258        itest(i)=0
2259c        IF ((zstd(i).gt.10.0)) THEN
2260        IF (((zpic(i)-zmea(i)).GT.100.).AND.(zstd(i).GT.10.0)) THEN
2261          itest(i)=1
2262          igwd=igwd+1
2263          idx(igwd)=i
2264        ENDIF
2265        ENDDO
2266c        igwdim=MAX(1,igwd)
2267c
2268        CALL drag_noro(klon,klev,dtime,paprs,pplay,
2269     e                   zmea,zstd, zsig, zgam, zthe,zpic,zval,
2270     e                   igwd,idx,itest,
2271     e                   t_seri, u_seri, v_seri,
2272     s                   zulow, zvlow, zustr, zvstr,
2273     s                   d_t_oro, d_u_oro, d_v_oro)
2274c
2275c  ajout des tendances
2276        DO k = 1, klev
2277        DO i = 1, klon
2278           t_seri(i,k) = t_seri(i,k) + d_t_oro(i,k)
2279           u_seri(i,k) = u_seri(i,k) + d_u_oro(i,k)
2280           v_seri(i,k) = v_seri(i,k) + d_v_oro(i,k)
2281        ENDDO
2282        ENDDO
2283c
2284      ENDIF ! fin de test sur ok_orodr
2285c
2286      IF (ok_orolf) THEN
2287c
2288c  selection des points pour lesquels le shema est actif:
2289        igwd=0
2290        DO i=1,klon
2291        itest(i)=0
2292        IF ((zpic(i)-zmea(i)).GT.100.) THEN
2293          itest(i)=1
2294          igwd=igwd+1
2295          idx(igwd)=i
2296        ENDIF
2297        ENDDO
2298c        igwdim=MAX(1,igwd)
2299c
2300        CALL lift_noro(klon,klev,dtime,paprs,pplay,
2301     e                   rlat,zmea,zstd,zpic,
2302     e                   itest,
2303     e                   t_seri, u_seri, v_seri,
2304     s                   zulow, zvlow, zustr, zvstr,
2305     s                   d_t_lif, d_u_lif, d_v_lif)
2306c
2307c  ajout des tendances
2308        DO k = 1, klev
2309        DO i = 1, klon
2310           t_seri(i,k) = t_seri(i,k) + d_t_lif(i,k)
2311           u_seri(i,k) = u_seri(i,k) + d_u_lif(i,k)
2312           v_seri(i,k) = v_seri(i,k) + d_v_lif(i,k)
2313        ENDDO
2314        ENDDO
2315c
2316      ENDIF ! fin de test sur ok_orolf
2317c
2318cAA
2319cAA Installation de l'interface online-offline pour traceurs
2320cAA
2321c====================================================================
2322c   Calcul  des tendances traceurs
2323c====================================================================
2324C Pascale : il faut quand meme apeller phytrac car il gere les sorties
2325cKE43       des traceurs => il faut donc mettre des flags a .false.
2326      IF (iflag_con.EQ.4) THEN
2327c           on ajoute les tendances calculees par KE43
2328        DO iq=1, nqmax-2 ! Sandrine a -3 ???
2329        DO k = 1, nlev
2330        DO i = 1, klon
2331          tr_seri(i,k,iq) = tr_seri(i,k,iq) + d_tr(i,k,iq)
2332        ENDDO
2333        ENDDO
2334        WRITE(iqn,'(i2.2)') iq
2335        CALL minmaxqfi(tr_seri(1,1,iq),0.,1.e33,'couche lim iq='//iqn)
2336        ENDDO
2337CMAF modif pour garder info du nombre de traceurs auxquels
2338C la physique s'applique
2339      ELSE
2340CMAF modif pour garder info du nombre de traceurs auxquels
2341C la physique s'applique
2342C
2343      call phytrac (rnpb,
2344     I                   debut,lafin,
2345     I                   nqmax-2,
2346     I                   nlon,nlev,dtime,
2347     I                   t,paprs,pplay,
2348     I                   pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
2349     I                   ycoefh,yu1,yv1,ftsol,pctsrf,rlat,
2350     I                   frac_impa, frac_nucl,
2351     I                   rlon,presnivs,paire,pphis,
2352     O                   tr_seri)
2353      ENDIF
2354
2355      IF (offline) THEN
2356
2357         call phystokenc (
2358     I                   nlon,nlev,pdtphys,rlon,rlat,
2359     I                   t,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
2360     I                   ycoefh,yu1,yv1,ftsol,pctsrf,
2361     I                   frac_impa, frac_nucl,
2362     I                   pphis,paire,dtime,itap)
2363
2364
2365      ENDIF
2366
2367c
2368c Calculer le transport de l'eau et de l'energie (diagnostique)
2369c
2370      CALL transp (paprs,zxtsol,
2371     e                   t_seri, q_seri, u_seri, v_seri, zphi,
2372     s                   ve, vq, ue, uq)
2373c
2374c Accumuler les variables a stocker dans les fichiers histoire:
2375c
2376c
2377c
2378
2379      IF (ok_journe) THEN
2380c
2381      ndex2d = 0
2382      ndex3d = 0
2383c
2384c Champs 2D:
2385c
2386         zsto = dtime
2387         zout = dtime * FLOAT(ecrit_day)
2388
2389         i = NINT(zout/zsto)
2390         CALL gr_fi_ecrit(1,klon,iim,jjmp1,pphis,zx_tmp_2d)
2391         CALL histwrite(nid_day,"phis",i,zx_tmp_2d,iim*jjmp1,ndex2d)
2392         varname = 'phis'
2393         vartitle= 'Surface geop. height'
2394         varunits= '-'
2395c        call writephy(fid_day,prof2d_on,varname,pphis,vartitle,
2396c    .                                                    varunits)
2397c
2398         i = NINT(zout/zsto)
2399         CALL gr_fi_ecrit(1,klon,iim,jjmp1,paire,zx_tmp_2d)
2400         CALL histwrite(nid_day,"aire",i,zx_tmp_2d,iim*jjmp1,ndex2d)
2401         varname = 'aire'
2402         vartitle= 'Grid area'
2403         varunits= '-'
2404c        call writephy(fid_day,prof2d_on,varname,paire,vartitle,
2405c    .                                                    varunits)
2406C
2407      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxtsol,zx_tmp_2d)
2408      CALL histwrite(nid_day,"tsol",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2409c     call writephy(fid_day,prof2d_av,'tsol',zxtsol,
2410c    .              'Surface Temperature','K')
2411c
2412C
2413      zx_tmp_fi2d(1 : klon) = ftsol(1 : klon, is_ter)
2414      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d ,zx_tmp_2d)
2415      CALL histwrite(nid_day,"tter",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2416c     call writephy(fid_day,prof2d_av,'tter',ftsol(1 : klon, is_ter),
2417c    .              'Surface Temperature','K')
2418C
2419      zx_tmp_fi2d(1 : klon) = ftsol(1 : klon, is_lic)
2420      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxtsol,zx_tmp_2d)
2421      CALL histwrite(nid_day,"tlic",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2422c     call writephy(fid_day,prof2d_av,'tlic',ftsol(1 : klon, is_lic),
2423c    .              'Surface Temperature','K')
2424C
2425      zx_tmp_fi2d(1 : klon) = ftsol(1 : klon, is_oce)
2426      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxtsol,zx_tmp_2d)
2427      CALL histwrite(nid_day,"toce",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2428c     call writephy(fid_day,prof2d_av,'toce',ftsol(1 : klon, is_oce),
2429c    .              'Surface Temperature','K')
2430C
2431      zx_tmp_fi2d(1 : klon) = ftsol(1 : klon, is_sic)
2432      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxtsol,zx_tmp_2d)
2433      CALL histwrite(nid_day,"tsic",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2434c     call writephy(fid_day,prof2d_av,'tsic',ftsol(1 : klon, is_sic),
2435c    .              'Surface Temperature','K')
2436C
2437      DO i = 1, klon
2438         zx_tmp_fi2d(i) = paprs(i,1)
2439      ENDDO
2440      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2441      CALL histwrite(nid_day,"psol",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2442c Essai writephys
2443      varname = 'psol'
2444      vartitle= 'pression au sol'
2445      varunits= 'hPa'
2446c     call writephy(fid_day,prof2d_av,varname,zx_tmp_fi2d,vartitle,
2447c    .                                                    varunits)
2448c
2449      DO i = 1, klon
2450         zx_tmp_fi2d(i) = (rain_fall(i) + snow_fall(i))* 86400.
2451      ENDDO
2452      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2453      CALL histwrite(nid_day,"rain",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2454c     call writephy(fid_day,prof2d_av,'rain',zx_tmp_fi2d,
2455c    .              'Precipitation','mm/day')
2456
2457
2458c
2459      CALL gr_fi_ecrit(1, klon,iim,jjmp1, snow_fall,zx_tmp_2d)
2460      CALL histwrite(nid_day,"snow",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2461c     call writephy(fid_day,prof2d_av,'snow',snow_fall,
2462c    .              'Snow','mm/day')
2463c
2464      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxsnow,zx_tmp_2d)
2465      CALL histwrite(nid_day,"snow_cov",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2466c     call writephy(fid_day,prof2d_av,'snow_cov',zxsnow,
2467c    .              'Snow cover','mm')
2468c
2469      CALL gr_fi_ecrit(1, klon,iim,jjmp1, evap,zx_tmp_2d)
2470      CALL histwrite(nid_day,"evap",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2471c     call writephy(fid_day,prof2d_av,'evap',evap,
2472c    .              'Evaporation','mm/day')
2473c
2474      CALL gr_fi_ecrit(1, klon,iim,jjmp1, topsw,zx_tmp_2d)
2475      CALL histwrite(nid_day,"tops",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2476c     call writephy(fid_day,prof2d_av,'tops',topsw,
2477c    .              'Solar rad. at TOA','W/m2')
2478c
2479      CALL gr_fi_ecrit(1, klon,iim,jjmp1, toplw,zx_tmp_2d)
2480      CALL histwrite(nid_day,"topl",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2481c     call writephy(fid_day,prof2d_av,'topl',toplw,
2482c    .              'IR rad. at TOA','W/m2')
2483c
2484      CALL gr_fi_ecrit(1, klon,iim,jjmp1, solsw,zx_tmp_2d)
2485      CALL histwrite(nid_day,"sols",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2486c     call writephy(fid_day,prof2d_av,'sols',solsw,
2487c    .              'Solar rad. at surf.','W/m2')
2488c
2489      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sollw,zx_tmp_2d)
2490      CALL histwrite(nid_day,"soll",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2491c     call writephy(fid_day,prof2d_av,'soll',sollw,
2492c    .              'IR rad. at surface','W/m2')
2493c
2494      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sollwdown,zx_tmp_2d)
2495      CALL histwrite(nid_day,"solldown",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2496c     call writephy(fid_day,prof2d_av,'solldown',sollwdown,
2497c    .              'Down. IR rad. at surface','W/m2')
2498c
2499      CALL gr_fi_ecrit(1, klon,iim,jjmp1, bils,zx_tmp_2d)
2500      CALL histwrite(nid_day,"bils",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2501c     call writephy(fid_day,prof2d_av,'bils',bils,
2502c    .              'Surf. total heat flux','W/m2')
2503c
2504      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sens,zx_tmp_2d)
2505      CALL histwrite(nid_day,"sens",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2506c     call writephy(fid_day,prof2d_av,'sens',sens,
2507c    .              'Sensible heat flux','W/m2')
2508c
2509      CALL gr_fi_ecrit(1, klon,iim,jjmp1, fder,zx_tmp_2d)
2510      CALL histwrite(nid_day,"fder",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2511c     call writephy(fid_day,prof2d_av,'fder',fder,
2512c    .              'Heat flux derivation','W/m2')
2513c
2514c
2515      DO nsrf = 1, nbsrf
2516C§§§
2517        zx_tmp_fi2d(1 : klon) = pctsrf( 1 : klon, nsrf)
2518        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2519        CALL histwrite(nid_day,"pourc_"//clnsurf(nsrf),itap,
2520     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2521c       call writephy(fid_day,prof2d_av,'pourc_'//clnsurf(nsrf),
2522c    .                pctsrf( 1 : klon, nsrf),
2523c    .                'Fraction'//clnsurf(nsrf),'-')
2524C
2525        zx_tmp_fi2d(1 : klon) = ftsol( 1 : klon, nsrf)
2526        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2527        CALL histwrite(nid_day,"tsol_"//clnsurf(nsrf),itap,
2528     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2529c       call writephy(fid_day,prof2d_av,'tsol_'//clnsurf(nsrf),
2530c    .                ftsol( 1 : klon, nsrf),
2531c    .                'Surf. Temp'//clnsurf(nsrf),'K')
2532C
2533        zx_tmp_fi2d(1 : klon) = fluxt( 1 : klon, 1, nsrf)
2534        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2535        CALL histwrite(nid_day,"sens_"//clnsurf(nsrf),itap,
2536     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2537c       call writephy(fid_day,prof2d_av,'sens_'//clnsurf(nsrf),
2538c    .                fluxt( 1 : klon, 1, nsrf),
2539c    .                'Sensible heat flux '//clnsurf(nsrf),'W/m2')
2540
2541        zx_tmp_fi2d(1 : klon) = fluxlat( 1 : klon, nsrf)
2542        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2543        CALL histwrite(nid_day,"lat_"//clnsurf(nsrf),itap,
2544     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2545c       call writephy(fid_day,prof2d_av,'lat_'//clnsurf(nsrf),
2546c    .                fluxlat( 1 : klon, nsrf),
2547c    .                'Latent heat flux '//clnsurf(nsrf),'W/m2')
2548C
2549        zx_tmp_fi2d(1 : klon) = fluxu( 1 : klon, 1, nsrf)
2550        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2551        CALL histwrite(nid_day,"taux_"//clnsurf(nsrf),itap,
2552     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2553c       call writephy(fid_day,prof2d_av,'taux_'//clnsurf(nsrf),
2554c    .                fluxu( 1 : klon, 1, nsrf),
2555c    .                'Zonal wind stress '//clnsurf(nsrf),'Pa')
2556C     
2557        zx_tmp_fi2d(1 : klon) = fluxv( 1 : klon, 1, nsrf)
2558        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2559        CALL histwrite(nid_day,"tauy_"//clnsurf(nsrf),itap,
2560     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2561c       call writephy(fid_day,prof2d_av,'tauy_'//clnsurf(nsrf),
2562c    .                fluxv( 1 : klon, 1, nsrf),
2563c    .                'Meridional wind stress '//clnsurf(nsrf),'Pa')
2564C
2565        zx_tmp_fi2d(1 : klon) = falbe( 1 : klon, nsrf)
2566        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2567        CALL histwrite(nid_day,"albe_"//clnsurf(nsrf),itap,
2568     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2569c       call writephy(fid_day,prof2d_av,'albe_'//clnsurf(nsrf),
2570c    .                falbe( 1 : klon, nsrf),
2571c    .                'Albedo surf. SW'//clnsurf(nsrf),'-')
2572c       call writephy(fid_day,prof2d_av,'alblw_'//clnsurf(nsrf),
2573c    .                falblw( 1 : klon, nsrf),
2574c    .                'Albedo surf. LW'//clnsurf(nsrf),'-')
2575C
2576        zx_tmp_fi2d(1 : klon) = frugs( 1 : klon, nsrf)
2577        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2578        CALL histwrite(nid_day,"rugs_"//clnsurf(nsrf),itap,
2579     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2580c       call writephy(fid_day,prof2d_av,'rugs_'//clnsurf(nsrf),
2581c    .                frugs( 1 : klon, nsrf),
2582c    .                'Rugosity '//clnsurf(nsrf),' - ')
2583C
2584      END DO 
2585C
2586c$$$      DO i = 1, klon
2587c$$$         zx_tmp_fi2d(i) = pctsrf(i,is_sic)
2588c$$$      ENDDO
2589c$$$      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2590c$$$      CALL histwrite(nid_day,"sicf",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2591c
2592      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldl,zx_tmp_2d)
2593      CALL histwrite(nid_day,"cldl",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2594c     call writephy(fid_day,prof2d_av,'cldl',cldl,
2595c    .              'Low-level cloudiness','-')
2596c
2597      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldm,zx_tmp_2d)
2598      CALL histwrite(nid_day,"cldm",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2599c     call writephy(fid_day,prof2d_av,'cldm',cldm,
2600c    .              'Mid-level cloudiness','-')
2601c
2602      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldh,zx_tmp_2d)
2603      CALL histwrite(nid_day,"cldh",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2604c     call writephy(fid_day,prof2d_av,'cldh',cldh,
2605c    .              'High-level cloudiness','-')
2606c
2607      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldt,zx_tmp_2d)
2608      CALL histwrite(nid_day,"cldt",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2609c     call writephy(fid_day,prof2d_av,'cldt',cldt,
2610c    .              'Total cloudiness','-')
2611c
2612      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldq,zx_tmp_2d)
2613      CALL histwrite(nid_day,"cldq",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2614c     call writephy(fid_day,prof2d_av,'cldq',cldq,
2615c    .              'Cloud liquid water path','-')
2616c
2617c Champs 3D:
2618c
2619      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, t_seri, zx_tmp_3d)
2620      CALL histwrite(nid_day,"temp",itap,zx_tmp_3d,
2621     .                                   iim*jjmp1*klev,ndex3d)
2622c Essai writephys
2623      varname = 'temp'
2624      vartitle= 'temperature 3D'
2625      varunits= 'K'
2626c     call writephy(fid_day,prof3d_av,varname,t_seri,vartitle,varunits)
2627c
2628      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, qx(1,1,ivap), zx_tmp_3d)
2629      CALL histwrite(nid_day,"ovap",itap,zx_tmp_3d,
2630     .                                   iim*jjmp1*klev,ndex3d)
2631c     call writephy(fid_day,prof3d_av,'ovap',qx(1,1,ivap),
2632c    .              'Specific humidity','Kg/Kg')
2633c
2634      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, zphi, zx_tmp_3d)
2635      CALL histwrite(nid_day,"geop",itap,zx_tmp_3d,
2636     .                                   iim*jjmp1*klev,ndex3d)
2637c     call writephy(fid_day,prof3d_av,'geop',zphi,
2638c    .              'Geopotential height','m')
2639c
2640      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, u_seri, zx_tmp_3d)
2641      CALL histwrite(nid_day,"vitu",itap,zx_tmp_3d,
2642     .                                   iim*jjmp1*klev,ndex3d)
2643c     call writephy(fid_day,prof3d_av,'vitu',u_seri,
2644c    .              'Zonal wind','m/s')
2645c
2646      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, v_seri, zx_tmp_3d)
2647      CALL histwrite(nid_day,"vitv",itap,zx_tmp_3d,
2648     .                                   iim*jjmp1*klev,ndex3d)
2649c     call writephy(fid_day,prof3d_av,'vitv',v_seri,
2650c    .              'Meridional wind','m/s')
2651c
2652      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, omega, zx_tmp_3d)
2653      CALL histwrite(nid_day,"vitw",itap,zx_tmp_3d,
2654     .                                   iim*jjmp1*klev,ndex3d)
2655c     call writephy(fid_day,prof3d_av,'vitw',omega,
2656c    .              'Vertical wind','m/s')
2657c
2658      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, pplay, zx_tmp_3d)
2659      CALL histwrite(nid_day,"pres",itap,zx_tmp_3d,
2660     .                                   iim*jjmp1*klev,ndex3d)
2661c     call writephy(fid_day,prof3d_av,'pres',pplay,
2662c    .              'Air pressure','Pa')
2663
2664c
2665      if (ok_sync) then
2666c       call writephy_sync(fid_day)
2667        call histsync(nid_day)
2668      endif
2669      ENDIF
2670C
2671      IF (ok_mensuel) THEN
2672c
2673      ndex2d = 0
2674      ndex3d = 0
2675c
2676c Champs 2D:
2677c
2678         zsto = dtime
2679         zout = dtime * ecrit_mth
2680
2681         i = NINT(zout/zsto)
2682         CALL gr_fi_ecrit(1,klon,iim,jjmp1,pphis,zx_tmp_2d)
2683         CALL histwrite(nid_mth,"phis",i,zx_tmp_2d,iim*jjmp1,ndex2d)
2684C
2685         i = NINT(zout/zsto)
2686         CALL gr_fi_ecrit(1,klon,iim,jjmp1,paire,zx_tmp_2d)
2687         CALL histwrite(nid_mth,"aire",i,zx_tmp_2d,iim*jjmp1,ndex2d)
2688
2689      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxtsol,zx_tmp_2d)
2690      CALL histwrite(nid_mth,"tsol",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2691c
2692      DO i = 1, klon
2693         zx_tmp_fi2d(i) = paprs(i,1)
2694      ENDDO
2695      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2696      CALL histwrite(nid_mth,"psol",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2697c
2698      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxqsol,zx_tmp_2d)
2699      CALL histwrite(nid_mth,"qsol",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2700c
2701      DO i = 1, klon
2702         zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i)
2703      ENDDO
2704      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2705      CALL histwrite(nid_mth,"rain",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2706c
2707      DO i = 1, klon
2708         zx_tmp_fi2d(i) = rain_lsc(i) + snow_lsc(i)
2709      ENDDO
2710      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2711      CALL histwrite(nid_mth,"plul",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2712c
2713      DO i = 1, klon
2714         zx_tmp_fi2d(i) = rain_con(i) + snow_con(i)
2715      ENDDO
2716      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2717      CALL histwrite(nid_mth,"pluc",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2718c
2719      CALL gr_fi_ecrit(1, klon,iim,jjmp1, snow_fall,zx_tmp_2d)
2720      CALL histwrite(nid_mth,"snow",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2721c
2722      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxsnow,zx_tmp_2d)
2723      CALL histwrite(nid_mth,"snow_cov",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2724c
2725      CALL gr_fi_ecrit(1, klon,iim,jjmp1, evap,zx_tmp_2d)
2726      CALL histwrite(nid_mth,"evap",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2727c
2728      CALL gr_fi_ecrit(1, klon,iim,jjmp1, topsw,zx_tmp_2d)
2729      CALL histwrite(nid_mth,"tops",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2730c
2731      CALL gr_fi_ecrit(1, klon,iim,jjmp1, toplw,zx_tmp_2d)
2732      CALL histwrite(nid_mth,"topl",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2733c
2734      CALL gr_fi_ecrit(1, klon,iim,jjmp1, solsw,zx_tmp_2d)
2735      CALL histwrite(nid_mth,"sols",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2736c
2737      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sollw,zx_tmp_2d)
2738      CALL histwrite(nid_mth,"soll",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2739c
2740      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sollwdown,zx_tmp_2d)
2741      CALL histwrite(nid_mth,"solldown",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2742c
2743      CALL gr_fi_ecrit(1, klon,iim,jjmp1, topsw0,zx_tmp_2d)
2744      CALL histwrite(nid_mth,"tops0",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2745c
2746      CALL gr_fi_ecrit(1, klon,iim,jjmp1, toplw0,zx_tmp_2d)
2747      CALL histwrite(nid_mth,"topl0",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2748c
2749      CALL gr_fi_ecrit(1, klon,iim,jjmp1, solsw0,zx_tmp_2d)
2750      CALL histwrite(nid_mth,"sols0",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2751c
2752      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sollw0,zx_tmp_2d)
2753      CALL histwrite(nid_mth,"soll0",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2754c
2755      CALL gr_fi_ecrit(1, klon,iim,jjmp1, bils,zx_tmp_2d)
2756      CALL histwrite(nid_mth,"bils",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2757c
2758      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sens,zx_tmp_2d)
2759      CALL histwrite(nid_mth,"sens",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2760c
2761      CALL gr_fi_ecrit(1, klon,iim,jjmp1, fder,zx_tmp_2d)
2762      CALL histwrite(nid_mth,"fder",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2763c
2764c
2765c      DO i = 1, klon
2766c         zx_tmp_fi2d(i) = fluxu(i,1)
2767c      ENDDO
2768c      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2769c      CALL histwrite(nid_mth,"frtu",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2770c
2771c      DO i = 1, klon
2772c         zx_tmp_fi2d(i) = fluxv(i,1)
2773c      ENDDO
2774c      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2775c      CALL histwrite(nid_mth,"frtv",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2776c
2777      DO nsrf = 1, nbsrf
2778C§§§
2779        zx_tmp_fi2d(1 : klon) = pctsrf( 1 : klon, nsrf)
2780        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2781        CALL histwrite(nid_mth,"pourc_"//clnsurf(nsrf),itap,
2782     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2783C
2784        zx_tmp_fi2d(1 : klon) = ftsol( 1 : klon, nsrf)
2785        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2786        CALL histwrite(nid_mth,"tsol_"//clnsurf(nsrf),itap,
2787     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2788C
2789        zx_tmp_fi2d(1 : klon) = fluxt( 1 : klon, 1, nsrf)
2790        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2791        CALL histwrite(nid_mth,"sens_"//clnsurf(nsrf),itap,
2792     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2793C
2794        zx_tmp_fi2d(1 : klon) = fluxlat( 1 : klon, nsrf)
2795        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2796        CALL histwrite(nid_mth,"lat_"//clnsurf(nsrf),itap,
2797     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2798C
2799        zx_tmp_fi2d(1 : klon) = fluxu( 1 : klon, 1, nsrf)
2800        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2801        CALL histwrite(nid_mth,"taux_"//clnsurf(nsrf),itap,
2802     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2803C     
2804        zx_tmp_fi2d(1 : klon) = fluxv( 1 : klon, 1, nsrf)
2805        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2806        CALL histwrite(nid_mth,"tauy_"//clnsurf(nsrf),itap,
2807     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2808C
2809        zx_tmp_fi2d(1 : klon) = falbe( 1 : klon, nsrf)
2810        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2811        CALL histwrite(nid_mth,"albe_"//clnsurf(nsrf),itap,
2812     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2813C
2814        zx_tmp_fi2d(1 : klon) = frugs( 1 : klon, nsrf)
2815        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
2816        CALL histwrite(nid_mth,"rugs_"//clnsurf(nsrf),itap,
2817     $      zx_tmp_2d,iim*jjmp1,ndex2d)
2818c
2819      zx_tmp_fi2d(1 : klon) = agesno( 1 : klon, nsrf)
2820      CALL gr_fi_ecrit(1, klon,iim,jjmp1, agesno,zx_tmp_2d)
2821      CALL histwrite(nid_mth,"ages_"//clnsurf(nsrf),itap
2822     $    ,zx_tmp_2d,iim*jjmp1,ndex2d)
2823
2824      END DO 
2825c$$$      DO i = 1, klon
2826c$$$         zx_tmp_fi2d(i) = pctsrf(i,is_sic)
2827c$$$      ENDDO
2828c$$$      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
2829c$$$      CALL histwrite(nid_mth,"sicf",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2830c
2831      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol,zx_tmp_2d)
2832      CALL histwrite(nid_mth,"albs",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2833      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsollw,zx_tmp_2d)
2834      CALL histwrite(nid_mth,"albslw",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2835c
2836      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cdragm,zx_tmp_2d)
2837      CALL histwrite(nid_mth,"cdrm",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2838c
2839      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cdragh,zx_tmp_2d)
2840      CALL histwrite(nid_mth,"cdrh",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2841c
2842      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldl,zx_tmp_2d)
2843      CALL histwrite(nid_mth,"cldl",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2844c
2845      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldm,zx_tmp_2d)
2846      CALL histwrite(nid_mth,"cldm",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2847c
2848      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldh,zx_tmp_2d)
2849      CALL histwrite(nid_mth,"cldh",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2850c
2851      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldt,zx_tmp_2d)
2852      CALL histwrite(nid_mth,"cldt",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2853c
2854      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cldq,zx_tmp_2d)
2855      CALL histwrite(nid_mth,"cldq",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2856c
2857      CALL gr_fi_ecrit(1, klon,iim,jjmp1, ue,zx_tmp_2d)
2858      CALL histwrite(nid_mth,"ue",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2859c
2860      CALL gr_fi_ecrit(1, klon,iim,jjmp1, ve,zx_tmp_2d)
2861      CALL histwrite(nid_mth,"ve",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2862c
2863      CALL gr_fi_ecrit(1, klon,iim,jjmp1, uq,zx_tmp_2d)
2864      CALL histwrite(nid_mth,"uq",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2865c
2866      CALL gr_fi_ecrit(1, klon,iim,jjmp1, vq,zx_tmp_2d)
2867      CALL histwrite(nid_mth,"vq",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2868cKE43
2869      IF (iflag_con .EQ. 4) THEN ! sb
2870c
2871      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cape,zx_tmp_2d)
2872      CALL histwrite(nid_mth,"cape",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2873c
2874      CALL gr_fi_ecrit(1, klon,iim,jjmp1,pbase,zx_tmp_2d)
2875      CALL histwrite(nid_mth,"pbase",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2876c
2877      CALL gr_fi_ecrit(1, klon,iim,jjmp1,ema_pct,zx_tmp_2d)
2878      CALL histwrite(nid_mth,"ptop",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2879c
2880      CALL gr_fi_ecrit(1, klon,iim,jjmp1,ema_cbmf,zx_tmp_2d)
2881      CALL histwrite(nid_mth,"fbase",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
2882c
2883c
2884      ENDIF
2885c34EK
2886c
2887c Champs 3D:
2888C
2889      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, t_seri, zx_tmp_3d)
2890      CALL histwrite(nid_mth,"temp",itap,zx_tmp_3d,
2891     .                                   iim*jjmp1*klev,ndex3d)
2892c
2893      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, qx(1,1,ivap), zx_tmp_3d)
2894      CALL histwrite(nid_mth,"ovap",itap,zx_tmp_3d,
2895     .                                   iim*jjmp1*klev,ndex3d)
2896c
2897      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, zphi, zx_tmp_3d)
2898      CALL histwrite(nid_mth,"geop",itap,zx_tmp_3d,
2899     .                                   iim*jjmp1*klev,ndex3d)
2900c
2901      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, u_seri, zx_tmp_3d)
2902      CALL histwrite(nid_mth,"vitu",itap,zx_tmp_3d,
2903     .                                   iim*jjmp1*klev,ndex3d)
2904c
2905      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, v_seri, zx_tmp_3d)
2906      CALL histwrite(nid_mth,"vitv",itap,zx_tmp_3d,
2907     .                                   iim*jjmp1*klev,ndex3d)
2908c
2909      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, omega, zx_tmp_3d)
2910      CALL histwrite(nid_mth,"vitw",itap,zx_tmp_3d,
2911     .                                   iim*jjmp1*klev,ndex3d)
2912c
2913      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, pplay, zx_tmp_3d)
2914      CALL histwrite(nid_mth,"pres",itap,zx_tmp_3d,
2915     .                                   iim*jjmp1*klev,ndex3d)
2916c
2917      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, cldfra, zx_tmp_3d)
2918      CALL histwrite(nid_mth,"rneb",itap,zx_tmp_3d,
2919     .                                   iim*jjmp1*klev,ndex3d)
2920c
2921      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, zx_rh, zx_tmp_3d)
2922      CALL histwrite(nid_mth,"rhum",itap,zx_tmp_3d,
2923     .                                   iim*jjmp1*klev,ndex3d)
2924c
2925      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, cldliq, zx_tmp_3d)
2926      CALL histwrite(nid_mth,"oliq",itap,zx_tmp_3d,
2927     .                                   iim*jjmp1*klev,ndex3d)
2928c
2929      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_t_dyn, zx_tmp_3d)
2930      CALL histwrite(nid_mth,"dtdyn",itap,zx_tmp_3d,
2931     .                                   iim*jjmp1*klev,ndex3d)
2932c
2933      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_q_dyn, zx_tmp_3d)
2934      CALL histwrite(nid_mth,"dqdyn",itap,zx_tmp_3d,
2935     .                                   iim*jjmp1*klev,ndex3d)
2936c
2937      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_t_con, zx_tmp_3d)
2938      CALL histwrite(nid_mth,"dtcon",itap,zx_tmp_3d,
2939     .                                   iim*jjmp1*klev,ndex3d)
2940c
2941      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_q_con, zx_tmp_3d)
2942      CALL histwrite(nid_mth,"dqcon",itap,zx_tmp_3d,
2943     .                                   iim*jjmp1*klev,ndex3d)
2944c
2945      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_t_lsc, zx_tmp_3d)
2946      CALL histwrite(nid_mth,"dtlsc",itap,zx_tmp_3d,
2947     .                                   iim*jjmp1*klev,ndex3d)
2948c
2949      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_q_lsc, zx_tmp_3d)
2950      CALL histwrite(nid_mth,"dqlsc",itap,zx_tmp_3d,
2951     .                                   iim*jjmp1*klev,ndex3d)
2952c
2953      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_t_vdf, zx_tmp_3d)
2954      CALL histwrite(nid_mth,"dtvdf",itap,zx_tmp_3d,
2955     .                                   iim*jjmp1*klev,ndex3d)
2956c
2957      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_q_vdf, zx_tmp_3d)
2958      CALL histwrite(nid_mth,"dqvdf",itap,zx_tmp_3d,
2959     .                                   iim*jjmp1*klev,ndex3d)
2960c
2961      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_t_eva, zx_tmp_3d)
2962      CALL histwrite(nid_mth,"dteva",itap,zx_tmp_3d,
2963     .                                   iim*jjmp1*klev,ndex3d)
2964c
2965      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_q_eva, zx_tmp_3d)
2966      CALL histwrite(nid_mth,"dqeva",itap,zx_tmp_3d,
2967     .                                   iim*jjmp1*klev,ndex3d)
2968c
2969      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, zpt_conv, zx_tmp_3d)
2970      CALL histwrite(nid_mth,"ptconv",itap,zx_tmp_3d,
2971     .                                   iim*(jjm+1)*klev,ndex3d)
2972c
2973      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, ratqs, zx_tmp_3d)
2974      CALL histwrite(nid_mth,"ratqs",itap,zx_tmp_3d,
2975     .                                   iim*(jjm+1)*klev,ndex3d)
2976c
2977      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_t_ajs, zx_tmp_3d)
2978      CALL histwrite(nid_mth,"dtajs",itap,zx_tmp_3d,
2979     .                                   iim*jjmp1*klev,ndex3d)
2980c
2981      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_q_ajs, zx_tmp_3d)
2982      CALL histwrite(nid_mth,"dqajs",itap,zx_tmp_3d,
2983     .                                   iim*jjmp1*klev,ndex3d)
2984c
2985      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, heat, zx_tmp_3d)
2986      CALL histwrite(nid_mth,"dtswr",itap,zx_tmp_3d,
2987     .                                   iim*jjmp1*klev,ndex3d)
2988c
2989      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, heat0, zx_tmp_3d)
2990      CALL histwrite(nid_mth,"dtsw0",itap,zx_tmp_3d,
2991     .                                   iim*jjmp1*klev,ndex3d)
2992c
2993      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, cool, zx_tmp_3d)
2994      CALL histwrite(nid_mth,"dtlwr",itap,zx_tmp_3d,
2995     .                                   iim*jjmp1*klev,ndex3d)
2996c
2997      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, cool0, zx_tmp_3d)
2998      CALL histwrite(nid_mth,"dtlw0",itap,zx_tmp_3d,
2999     .                                   iim*jjmp1*klev,ndex3d)
3000c
3001      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_u_vdf, zx_tmp_3d)
3002      CALL histwrite(nid_mth,"duvdf",itap,zx_tmp_3d,
3003     .                                   iim*jjmp1*klev,ndex3d)
3004c
3005      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_v_vdf, zx_tmp_3d)
3006      CALL histwrite(nid_mth,"dvvdf",itap,zx_tmp_3d,
3007     .                                   iim*jjmp1*klev,ndex3d)
3008c
3009      IF (ok_orodr) THEN
3010      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_u_oro, zx_tmp_3d)
3011      CALL histwrite(nid_mth,"duoro",itap,zx_tmp_3d,
3012     .                                   iim*jjmp1*klev,ndex3d)
3013c
3014      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_v_oro, zx_tmp_3d)
3015      CALL histwrite(nid_mth,"dvoro",itap,zx_tmp_3d,
3016     .                                   iim*jjmp1*klev,ndex3d)
3017c
3018      ENDIF
3019C
3020      IF (ok_orolf) THEN
3021      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_u_lif, zx_tmp_3d)
3022      CALL histwrite(nid_mth,"dulif",itap,zx_tmp_3d,
3023     .                                   iim*jjmp1*klev,ndex3d)
3024c
3025      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_v_lif, zx_tmp_3d)
3026      CALL histwrite(nid_mth,"dvlif",itap,zx_tmp_3d,
3027     .                                   iim*jjmp1*klev,ndex3d)
3028      ENDIF
3029C
3030      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, wo, zx_tmp_3d)
3031      CALL histwrite(nid_mth,"ozone",itap,zx_tmp_3d,
3032     .                                   iim*jjmp1*klev,ndex3d)
3033c
3034      IF (nqmax.GE.3) THEN
3035      DO iq=1,nqmax-2
3036      IF (iq.LE.99) THEN
3037         CALL gr_fi_ecrit(klev,klon,iim,jjmp1, qx(1,1,iq+2), zx_tmp_3d)
3038         WRITE(str2,'(i2.2)') iq
3039         CALL histwrite(nid_mth,"trac"//str2,itap,zx_tmp_3d,
3040     .                                   iim*jjmp1*klev,ndex3d)
3041      ELSE
3042         PRINT*, "Trop de traceurs"
3043         CALL abort
3044      ENDIF
3045      ENDDO
3046      ENDIF
3047cKE43
3048      IF (iflag_con.EQ.4) THEN ! (sb)
3049c
3050      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, upwd, zx_tmp_3d)
3051      CALL histwrite(nid_mth,"upwd",itap,zx_tmp_3d,
3052     .                                   iim*jjmp1*klev,ndex3d)
3053c
3054      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, dnwd, zx_tmp_3d)
3055      CALL histwrite(nid_mth,"dnwd",itap,zx_tmp_3d,
3056     .                                   iim*jjmp1*klev,ndex3d)
3057c
3058      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, dnwd0, zx_tmp_3d)
3059      CALL histwrite(nid_mth,"dnwd0",itap,zx_tmp_3d,
3060     .                                   iim*jjmp1*klev,ndex3d)
3061c
3062      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, Ma, zx_tmp_3d)
3063      CALL histwrite(nid_mth,"Ma",itap,zx_tmp_3d,
3064     .                                   iim*jjmp1*klev,ndex3d)
3065c
3066c
3067      ENDIF
3068c34EK
3069c
3070      if (ok_sync) then
3071        call histsync(nid_mth)
3072      endif
3073      ENDIF
3074c
3075      IF (ok_instan) THEN
3076c
3077      ndex2d = 0
3078      ndex3d = 0
3079c
3080c Champs 2D:
3081c
3082         zsto = dtime * ecrit_ins
3083         zout = dtime * ecrit_ins
3084
3085         i = NINT(zout/zsto)
3086         CALL gr_fi_ecrit(1,klon,iim,jjmp1,pphis,zx_tmp_2d)
3087         CALL histwrite(nid_ins,"phis",i,zx_tmp_2d,iim*jjmp1,ndex2d)
3088c
3089         i = NINT(zout/zsto)
3090         CALL gr_fi_ecrit(1,klon,iim,jjmp1,paire,zx_tmp_2d)
3091         CALL histwrite(nid_ins,"aire",i,zx_tmp_2d,iim*jjmp1,ndex2d)
3092
3093      DO i = 1, klon
3094         zx_tmp_fi2d(i) = paprs(i,1)
3095      ENDDO
3096      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
3097      CALL histwrite(nid_ins,"psol",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3098c
3099      DO i = 1, klon
3100         zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i)
3101      ENDDO
3102      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
3103      CALL histwrite(nid_ins,"rain",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3104c
3105      DO i = 1, klon
3106         zx_tmp_fi2d(i) = rain_lsc(i) + snow_lsc(i)
3107      ENDDO
3108      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
3109      CALL histwrite(nid_ins,"plul",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3110c
3111      DO i = 1, klon
3112         zx_tmp_fi2d(i) = rain_con(i) + snow_con(i)
3113      ENDDO
3114      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
3115      CALL histwrite(nid_ins,"pluc",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3116
3117      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxtsol,zx_tmp_2d)
3118      CALL histwrite(nid_ins,"tsol",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3119c
3120      CALL gr_fi_ecrit(1, klon,iim,jjmp1, snow_fall,zx_tmp_2d)
3121      CALL histwrite(nid_ins,"snow",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3122
3123c
3124      CALL gr_fi_ecrit(1, klon,iim,jjmp1, toplw,zx_tmp_2d)
3125      CALL histwrite(nid_ins,"topl",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3126c
3127      CALL gr_fi_ecrit(1, klon,iim,jjmp1, evap,zx_tmp_2d)
3128      CALL histwrite(nid_ins,"evap",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3129c
3130      CALL gr_fi_ecrit(1, klon,iim,jjmp1, solsw,zx_tmp_2d)
3131      CALL histwrite(nid_ins,"sols",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3132c
3133      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sollw,zx_tmp_2d)
3134      CALL histwrite(nid_ins,"soll",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3135c
3136      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sollwdown,zx_tmp_2d)
3137      CALL histwrite(nid_ins,"solldown",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3138c
3139      CALL gr_fi_ecrit(1, klon,iim,jjmp1, bils,zx_tmp_2d)
3140      CALL histwrite(nid_ins,"bils",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3141c
3142      CALL gr_fi_ecrit(1, klon,iim,jjmp1, sens,zx_tmp_2d)
3143      CALL histwrite(nid_ins,"sens",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3144c
3145      CALL gr_fi_ecrit(1, klon,iim,jjmp1, fder,zx_tmp_2d)
3146      CALL histwrite(nid_ins,"fder",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3147c
3148      CALL gr_fi_ecrit(1, klon,iim,jjmp1, d_ts(1,is_oce),zx_tmp_2d)
3149      CALL histwrite(nid_ins,"dtsvdfo",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3150c
3151      CALL gr_fi_ecrit(1, klon,iim,jjmp1, d_ts(1,is_ter),zx_tmp_2d)
3152      CALL histwrite(nid_ins,"dtsvdft",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3153c
3154      CALL gr_fi_ecrit(1, klon,iim,jjmp1, d_ts(1,is_lic),zx_tmp_2d)
3155      CALL histwrite(nid_ins,"dtsvdfg",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3156c
3157      CALL gr_fi_ecrit(1, klon,iim,jjmp1, d_ts(1,is_sic),zx_tmp_2d)
3158      CALL histwrite(nid_ins,"dtsvdfi",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3159
3160      DO nsrf = 1, nbsrf
3161C§§§
3162        zx_tmp_fi2d(1 : klon) = pctsrf( 1 : klon, nsrf)
3163        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
3164        CALL histwrite(nid_ins,"pourc_"//clnsurf(nsrf),itap,
3165     $      zx_tmp_2d,iim*jjmp1,ndex2d)
3166C
3167        zx_tmp_fi2d(1 : klon) = fluxt( 1 : klon, 1, nsrf)
3168        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
3169        CALL histwrite(nid_ins,"sens_"//clnsurf(nsrf),itap,
3170     $      zx_tmp_2d,iim*jjmp1,ndex2d)
3171C
3172        zx_tmp_fi2d(1 : klon) = fluxlat( 1 : klon, nsrf)
3173        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
3174        CALL histwrite(nid_ins,"lat_"//clnsurf(nsrf),itap,
3175     $      zx_tmp_2d,iim*jjmp1,ndex2d)
3176C
3177        zx_tmp_fi2d(1 : klon) = ftsol( 1 : klon, nsrf)
3178        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
3179        CALL histwrite(nid_ins,"tsol_"//clnsurf(nsrf),itap,
3180     $      zx_tmp_2d,iim*jjmp1,ndex2d)
3181C
3182        zx_tmp_fi2d(1 : klon) = fluxu( 1 : klon, 1, nsrf)
3183        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
3184        CALL histwrite(nid_ins,"taux_"//clnsurf(nsrf),itap,
3185     $      zx_tmp_2d,iim*jjmp1,ndex2d)
3186C     
3187        zx_tmp_fi2d(1 : klon) = fluxv( 1 : klon, 1, nsrf)
3188        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
3189        CALL histwrite(nid_ins,"tauy_"//clnsurf(nsrf),itap,
3190     $      zx_tmp_2d,iim*jjmp1,ndex2d)
3191C
3192        zx_tmp_fi2d(1 : klon) = frugs( 1 : klon, nsrf)
3193        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
3194        CALL histwrite(nid_ins,"rugs_"//clnsurf(nsrf),itap,
3195     $      zx_tmp_2d,iim*jjmp1,ndex2d)
3196C
3197        zx_tmp_fi2d(1 : klon) = falbe( 1 : klon, nsrf)
3198        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
3199        CALL histwrite(nid_ins,"albe_"//clnsurf(nsrf),itap,
3200     $      zx_tmp_2d,iim*jjmp1,ndex2d)
3201C
3202      END DO 
3203      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol,zx_tmp_2d)
3204      CALL histwrite(nid_ins,"albs",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3205      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsollw,zx_tmp_2d)
3206      CALL histwrite(nid_ins,"albslw",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3207c
3208      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxsnow,zx_tmp_2d)
3209      CALL histwrite(nid_ins,"snow_cov",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3210c
3211      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zxrugs,zx_tmp_2d)
3212      CALL histwrite(nid_ins,"rugs",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
3213c
3214c Champs 3D:
3215c
3216      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, t_seri, zx_tmp_3d)
3217      CALL histwrite(nid_ins,"temp",itap,zx_tmp_3d,
3218     .                                   iim*jjmp1*klev,ndex3d)
3219c
3220      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, u_seri, zx_tmp_3d)
3221      CALL histwrite(nid_ins,"vitu",itap,zx_tmp_3d,
3222     .                                   iim*jjmp1*klev,ndex3d)
3223c
3224      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, v_seri, zx_tmp_3d)
3225      CALL histwrite(nid_ins,"vitv",itap,zx_tmp_3d,
3226     .                                   iim*jjmp1*klev,ndex3d)
3227c
3228      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, zphi, zx_tmp_3d)
3229      CALL histwrite(nid_ins,"geop",itap,zx_tmp_3d,
3230     .                                   iim*jjmp1*klev,ndex3d)
3231c
3232      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, pplay, zx_tmp_3d)
3233      CALL histwrite(nid_ins,"pres",itap,zx_tmp_3d,
3234     .                                   iim*jjmp1*klev,ndex3d)
3235c
3236      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_t_vdf, zx_tmp_3d)
3237      CALL histwrite(nid_ins,"dtvdf",itap,zx_tmp_3d,
3238     .                                   iim*jjmp1*klev,ndex3d)
3239c
3240      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_q_vdf, zx_tmp_3d)
3241      CALL histwrite(nid_ins,"dqvdf",itap,zx_tmp_3d,
3242     .                                   iim*jjmp1*klev,ndex3d)
3243
3244c
3245      if (ok_sync) then
3246        call histsync(nid_ins)
3247      endif
3248      ENDIF
3249c
3250c
3251c Ecrire la bande regionale (binaire grads)
3252      IF (ok_region .AND. mod(itap,ecrit_reg).eq.0) THEN
3253         CALL ecriregs(84,zxtsol)
3254         CALL ecriregs(84,paprs(1,1))
3255         CALL ecriregs(84,topsw)
3256         CALL ecriregs(84,toplw)
3257         CALL ecriregs(84,solsw)
3258         CALL ecriregs(84,sollw)
3259         CALL ecriregs(84,rain_fall)
3260         CALL ecriregs(84,snow_fall)
3261         CALL ecriregs(84,evap)
3262         CALL ecriregs(84,sens)
3263         CALL ecriregs(84,bils)
3264         CALL ecriregs(84,pctsrf(1,is_sic))
3265         CALL ecriregs(84,zxfluxu(1,1))
3266         CALL ecriregs(84,zxfluxv(1,1))
3267         CALL ecriregs(84,ue)
3268         CALL ecriregs(84,ve)
3269         CALL ecriregs(84,uq)
3270         CALL ecriregs(84,vq)
3271c
3272         CALL ecrirega(84,u_seri)
3273         CALL ecrirega(84,v_seri)
3274         CALL ecrirega(84,omega)
3275         CALL ecrirega(84,t_seri)
3276         CALL ecrirega(84,zphi)
3277         CALL ecrirega(84,q_seri)
3278         CALL ecrirega(84,cldfra)
3279         CALL ecrirega(84,cldliq)
3280         CALL ecrirega(84,pplay)
3281
3282
3283cc         CALL ecrirega(84,d_t_dyn)
3284cc         CALL ecrirega(84,d_q_dyn)
3285cc         CALL ecrirega(84,heat)
3286cc         CALL ecrirega(84,cool)
3287cc         CALL ecrirega(84,d_t_con)
3288cc         CALL ecrirega(84,d_q_con)
3289cc         CALL ecrirega(84,d_t_lsc)
3290cc         CALL ecrirega(84,d_q_lsc)
3291      ENDIF
3292c
3293c Convertir les incrementations en tendances
3294c
3295      DO k = 1, klev
3296      DO i = 1, klon
3297         d_u(i,k) = ( u_seri(i,k) - u(i,k) ) / dtime
3298         d_v(i,k) = ( v_seri(i,k) - v(i,k) ) / dtime
3299         d_t(i,k) = ( t_seri(i,k)-t(i,k) ) / dtime
3300         d_qx(i,k,ivap) = ( q_seri(i,k) - qx(i,k,ivap) ) / dtime
3301         d_qx(i,k,iliq) = ( ql_seri(i,k) - qx(i,k,iliq) ) / dtime
3302      ENDDO
3303      ENDDO
3304c
3305      IF (nqmax.GE.3) THEN
3306      DO iq = 3, nqmax
3307      DO  k = 1, klev
3308      DO  i = 1, klon
3309         d_qx(i,k,iq) = ( tr_seri(i,k,iq-2) - qx(i,k,iq) ) / dtime
3310      ENDDO
3311      ENDDO
3312      ENDDO
3313      ENDIF
3314c
3315c Sauvegarder les valeurs de t et q a la fin de la physique:
3316c
3317      DO k = 1, klev
3318      DO i = 1, klon
3319         t_ancien(i,k) = t_seri(i,k)
3320         q_ancien(i,k) = q_seri(i,k)
3321      ENDDO
3322      ENDDO
3323c
3324c====================================================================
3325c Si c'est la fin, il faut conserver l'etat de redemarrage
3326c====================================================================
3327c
3328      IF (lafin) THEN
3329ccc         IF (ok_oasis) CALL quitcpl
3330         CALL phyredem ("restartphy.nc",dtime,radpas,co2_ppm,solaire,
3331     .      rlat, rlon, pctsrf, ftsol, ftsoil, deltat, fqsol, fsnow,
3332     .      falbe, fevap, rain_fall, snow_fall,
3333     .      solsw, sollwdown,dlw,
3334     .      radsol,frugs,agesno,
3335     .      zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro,
3336     .      t_ancien, q_ancien)
3337      ENDIF
3338
3339      RETURN
3340      END
3341      FUNCTION qcheck(klon,klev,paprs,q,ql,aire)
3342      IMPLICIT none
3343c
3344c Calculer et imprimer l'eau totale. A utiliser pour verifier
3345c la conservation de l'eau
3346c
3347#include "YOMCST.h"
3348      INTEGER klon,klev
3349      REAL paprs(klon,klev+1), q(klon,klev), ql(klon,klev)
3350      REAL aire(klon)
3351      REAL qtotal, zx, qcheck
3352      INTEGER i, k
3353c
3354      zx = 0.0
3355      DO i = 1, klon
3356         zx = zx + aire(i)
3357      ENDDO
3358      qtotal = 0.0
3359      DO k = 1, klev
3360      DO i = 1, klon
3361         qtotal = qtotal + (q(i,k)+ql(i,k)) * aire(i)
3362     .                     *(paprs(i,k)-paprs(i,k+1))/RG
3363      ENDDO
3364      ENDDO
3365c
3366      qcheck = qtotal/zx
3367c
3368      RETURN
3369      END
3370      SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
3371      IMPLICIT none
3372c
3373c Tranformer une variable de la grille physique a
3374c la grille d'ecriture
3375c
3376      INTEGER nfield,nlon,iim,jjmp1, jjm
3377      REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
3378c
3379      INTEGER i, n, ig
3380c
3381      jjm = jjmp1 - 1
3382      DO n = 1, nfield
3383         DO i=1,iim
3384            ecrit(i,n) = fi(1,n)
3385            ecrit(i+jjm*iim,n) = fi(nlon,n)
3386         ENDDO
3387         DO ig = 1, nlon - 2
3388           ecrit(iim+ig,n) = fi(1+ig,n)
3389         ENDDO
3390      ENDDO
3391      RETURN
3392      END
3393
Note: See TracBrowser for help on using the repository browser.