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

Last change on this file since 178 was 178, checked in by lmdzadmin, 24 years ago

changement sur ok_veget et ocean
LF

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