source: trunk/LMDZ.PLUTO.old/libf/phypluto/physiq.F_bugT

Last change on this file was 3175, checked in by emillour, 11 months ago

Pluto PCM:
Add the old Pluto LMDZ for reference (required prior step to making
an LMDZ.PLUTO using the same framework as the other physics packages).
TB+EM

File size: 83.0 KB
Line 
1      subroutine physiq(ngrid,nlayer,nq,
2     *            firstcall,lastcall,
3     *            pday,ptime,ptimestep,
4     *            pplev,pplay,pphi,
5     *            pu,pv,pt,pq,
6     *            pw,
7     *            pdu,pdv,pdt,pdq,pdpsrf,tracerdyn)
8     
9      use radinc_h, only : naerkind
10      use planet_h         
11      USE ioipsl_getincom
12      use comgeomfi_h
13      use comsoil_h
14      use aerosol_mod
15      implicit none
16
17!==================================================================
18!     Purpose
19!     -------
20!     Central subroutine for all the physics parameterisations in the
21!     universal model. Originally adapted from the Mars LMDZ model.
22!
23!     The model can be run without or with tracer transport
24!     depending on the value of "tracer" in file "callphys.def".
25!
26!   It includes:
27!
28!      1.  Initialization:
29!      1.1 Firstcall initializations
30!      1.2 Initialization for every call to physiq
31!      1.2.5 Compute mean mass and cp, R and thermal conduction coeff.
32!      2. Compute radiative transfer tendencies
33!         (longwave and shortwave).
34!      4. Vertical diffusion (turbulent mixing):
35!      5. Convective adjustment
36!      6. Condensation and sublimation of gases (currently just CO2).
37!      7.  TRACERS :
38!       7c. other schemes for tracer transport (lifting, sedimentation)
39!       7d. updates (pressure variations, surface budget)
40!      9. Surface and sub-surface temperature calculations
41!     10. Write outputs :
42!           - "startfi", "histfi" if it's time
43!           - Saving statistics if "callstats = .true."
44!           - Output any needed variables in "diagfi"
45!     10. Diagnostics: mass conservation of tracers, radiative energy balance etc.
46!
47!   arguments
48!   ---------
49!
50!   input
51!   -----
52!    ecri                  period (in dynamical timestep) to write output
53!    ngrid                 Size of the horizontal grid.
54!                          All internal loops are performed on that grid.
55!    nlayer                Number of vertical layers.
56!    nq                    Number of advected fields
57!    firstcall             True at the first call
58!    lastcall              True at the last call
59!    pday                  Number of days counted from the North. Spring
60!                          equinoxe.
61!    ptime                 Universal time (0<ptime<1): ptime=0.5 at 12:00 UT
62!    ptimestep             timestep (s)
63!    pplay(ngrid,nlayer)   Pressure at the middle of the layers (Pa)
64!    pplev(ngrid,nlayer+1) intermediate pressure levels (pa)
65!    pphi(ngrid,nlayer)    Geopotential at the middle of the layers (m2s-2)
66!    pu(ngrid,nlayer)      u component of the wind (ms-1)
67!    pv(ngrid,nlayer)      v component of the wind (ms-1)
68!    pt(ngrid,nlayer)      Temperature (K)
69!    pq(ngrid,nlayer,nq)   Advected fields
70!    pudyn(ngrid,nlayer)    \
71!    pvdyn(ngrid,nlayer)     \ Dynamical temporal derivative for the
72!    ptdyn(ngrid,nlayer)     / corresponding variables
73!    pqdyn(ngrid,nlayer,nq) /
74!    pw(ngrid,?)           vertical velocity
75!
76!   output
77!   ------
78!
79!    pdu(ngrid,nlayermx)        \
80!    pdv(ngrid,nlayermx)         \  Temporal derivative of the corresponding
81!    pdt(ngrid,nlayermx)         /  variables due to physical processes.
82!    pdq(ngrid,nlayermx)        /
83!    pdpsrf(ngrid)             /
84!    tracerdyn                 call tracer in dynamical part of GCM ?
85!
86!     Authors
87!     -------
88!           Frederic Hourdin    15/10/93
89!           Francois Forget     1994
90!           Christophe Hourdin  02/1997
91!           Subroutine completly rewritten by F.Forget (01/2000)
92!           Water ice clouds: Franck Montmessin (update 06/2003)
93!           Radiatively active tracers: J.-B. Madeleine (10/2008-06/2009)
94!           New correlated-k radiative scheme: R. Wordsworth (2009)
95!           Many specifically Martian subroutines removed: R. Wordsworth (2009)       
96!           Pluto version improved :T. Bertrand (2015,2020)       
97!==================================================================
98
99c    0.  Declarations :
100c    ------------------
101#include "dimensions.h"
102#include "dimphys.h"
103#include "surfdat.h"
104#include "comdiurn.h"
105#include "callkeys.h"
106#include "comcstfi.h"
107#include "comsaison.h"
108#include "control.h"
109#include "comg1d.h"
110#include "tracer.h"
111#include "netcdf.inc"
112
113c Arguments :
114c -----------
115
116c   inputs:
117c   -------
118      INTEGER ngrid,nlayer,nq
119      REAL ptimestep
120      REAL pplev(ngridmx,nlayer+1),pplay(ngridmx,nlayer)
121      REAL pphi(ngridmx,nlayer)
122      REAL pu(ngridmx,nlayer),pv(ngridmx,nlayer)
123      REAL pt(ngridmx,nlayer),pq(ngridmx,nlayer,nq)
124      REAL pw(ngridmx,nlayer)        ! pvervel transmitted by dyn3d
125      REAL zh(ngridmx,nlayermx)      ! potential temperature (K)
126      LOGICAL firstcall,lastcall
127      REAL pday
128      REAL ptime
129      logical tracerdyn
130
131c   outputs:
132c   --------
133c     physical tendencies
134      REAL pdu(ngridmx,nlayer),pdv(ngridmx,nlayer)
135      REAL pdt(ngridmx,nlayer),pdq(ngridmx,nlayer,nq)
136      REAL pdpsrf(ngridmx) ! surface pressure tendency
137      REAL picen2(ngrid)
138
139c Local saved variables:
140c ----------------------
141      INTEGER day_ini  ! Initial date of the run (sol since Ls=0)
142      INTEGER icount     ! counter of calls to physiq during the run.
143      REAL tsurf(ngridmx)            ! Surface temperature (K)
144      REAL tsoil(ngridmx,nsoilmx)    ! sub-surface temperatures (K)
145      REAL tidat(ngridmx,nsoilmx)    ! thermal inertia soil
146      REAL tidat_out(ngridmx,nlayermx)  ! thermal inertia soil but output on vertical grid
147      REAL tsub(ngridmx)             ! temperature of the deepest layer
148      REAL albedo(ngridmx)           ! Surface albedo
149
150      REAL emis(ngridmx)             ! Thermal IR surface emissivity
151      REAL dtrad(ngridmx,nlayermx)   ! Net atm. radiative heating rate (K.s-1)
152      REAL fluxrad_sky(ngridmx)      ! rad. flux from sky absorbed by surface (W.m-2)
153      REAL fluxrad(ngridmx)          ! Net radiative surface flux (W.m-2)
154      REAL capcal(ngridmx)           ! surface heat capacity (J m-2 K-1)
155      REAL dplanck(ngridmx)          ! for output (W.s/m2/K)
156      REAL fluxgrd(ngridmx)          ! surface conduction flux (W.m-2)
157      REAL qsurf(ngridmx,nqmx)       ! tracer on surface (e.g. kg.m-2)
158      REAL q2(ngridmx,nlayermx+1)    ! Turbulent Kinetic Energy
159      REAL qsurf1(ngridmx,nqmx)      ! saving qsurf to calculate flux over long timescales kg.m-2
160      REAL flusurf(ngridmx,nqmx)     ! flux cond/sub kg.m-2.s-1
161      REAL flusurfold(ngridmx,nqmx)  ! old flux cond/sub kg.m-2.s-1
162      REAL totmass                   ! total mass of n2 (atm + surf)
163      REAL globave                   ! globalaverage 2D ps
164      REAL globaveice(nqmx)          ! globalaverage 2D ice
165      REAL globavenewice(nqmx)          ! globalaverage 2D ice
166
167      REAL ptime0    ! store the first time
168      SAVE ptime0
169
170      REAL dstep
171      REAL glastep   ! step en pluto day pour etaler le glacier
172      SAVE glastep
173      DATA glastep/20/
174
175      SAVE day_ini,icount
176      SAVE tsurf,tsoil,tsub
177      SAVE albedo,emis,q2
178      SAVE capcal,fluxgrd,dtrad,fluxrad,fluxrad_sky,qsurf
179      SAVE flusurfold
180
181      REAL stephan   
182      DATA stephan/5.67e-08/  ! Stephan Boltzman constant
183      SAVE stephan
184
185      REAL acond,bcond
186      SAVE acond,bcond
187      REAL tcond1p4Pa
188      DATA tcond1p4Pa/38/
189
190c Local variables :
191c -----------------
192!     Tendencies for the paleoclimate mode
193      REAL,SAVE :: qsurfyear(ngridmx,nqmx)  ! kg.m-2 averaged mass of ice lost/gained in the last Pluto year of the run
194      REAL,SAVE :: phisfinew(ngridmx)       ! geopotential of the bedrock (= phisfi-qsurf/1000*g)
195      REAL qsurfpal(ngridmx,nqmx)           ! qsurf after a paleoclimate step : for physdem1 and restartfi
196      REAL phisfipal(ngridmx)               ! geopotential after a paleoclimate step : for physdem1 and restartfi
197      REAL oblipal                   ! change of obliquity
198      REAL peri_daypal               ! new periday
199      REAL eccpal                    ! change of eccentricity
200      REAL tpalnew                   ! change of time
201      REAL adjustnew                 ! change in N2 ice albedo
202      REAL pdaypal                   ! new pday = day_ini + step
203      REAL zdt_tot                   ! time range corresponding to the flux of qsurfyear
204      REAL massacc(nqmx)             ! accumulated mass 
205      REAL masslost(nqmx)            ! accumulated mass 
206      REAL realarea(ngridmx)         ! real area (correction poles)   
207
208!     aerosol (ice or haze) extinction optical depth  at reference wavelength
209!     for the "naerkind" optically active aerosols:
210      REAL aerosol(ngridmx,nlayermx,naerkind)
211
212      CHARACTER*80 fichier
213      INTEGER l,ig,ierr,igout,iq,i, tapphys
214      INTEGER lecttsoil     ! lecture of tsoil from proftsoil
215!      INTEGER iqmin                     ! Used if iceparty engaged
216
217      REAL fluxsurf_lw(ngridmx)      ! incident LW (IR) surface flux (W.m-2)
218      REAL fluxsurf_sw(ngridmx)      ! incident SW (solar) surface flux (W.m-2)
219      REAL fluxtop_lw(ngridmx)       ! Outgoing LW (IR) flux to space (W.m-2)
220      REAL fluxtop_sw(ngridmx)       ! Outgoing SW (solar) flux to space (W.m-2)
221
222!     included by RW for equilibration test
223      real fluxtop_dn(ngridmx)
224      real fluxabs_sw(ngridmx) ! absorbed shortwave radiation
225      real fluxdyn(ngridmx)    ! horizontal heat transport by dynamics     
226
227      REAL zls                       ! solar longitude (rad)
228      REAL zfluxuv                     ! Lyman alpha flux at 1AU
229                                     !  ph/cm2/s
230      REAL zday                      ! date (time since Ls=0, in martian days)
231      REAL saveday                      ! saved date
232      SAVE saveday   
233      REAL savedeclin                   ! saved declin
234      SAVE savedeclin
235      !REAL adjust                      ! adjustment for surface albedo
236      REAL zzlay(ngridmx,nlayermx)   ! altitude at the middle of the layers
237      REAL zzlev(ngridmx,nlayermx+1) ! altitude at layer boundaries
238
239c     Aerosol effective radius used for radiative transfer (units=meters)
240      REAL reffrad(ngridmx,nlayermx,naerkind)
241
242c     Tendencies due to various processes:
243      REAL dqsurf(ngridmx,nqmx)
244      REAL zdtlw(ngridmx,nlayermx)      ! (K/s)
245      REAL zdtsw(ngridmx,nlayermx)      ! (K/s)
246      REAL cldtlw(ngridmx,nlayermx)     ! (K/s) LW heating rate for clear areas
247      REAL cldtsw(ngridmx,nlayermx)     ! (K/s) SW heating rate for clear areas
248      REAL zdtsurf(ngridmx)             ! (K/s)
249      REAL zdtlscale(ngridmx,nlayermx)
250      REAL zdvdif(ngridmx,nlayermx),zdudif(ngridmx,nlayermx)  ! (m.s-2)
251      REAL zdhdif(ngridmx,nlayermx), zdtsdif(ngridmx)         ! (K/s)
252      REAL zdvadj(ngridmx,nlayermx),zduadj(ngridmx,nlayermx)  ! (m.s-2)
253      REAL zdhadj(ngridmx,nlayermx)                           ! (K/s)
254      REAL zdtgw(ngridmx,nlayermx)                            ! (K/s)
255      REAL zdugw(ngridmx,nlayermx),zdvgw(ngridmx,nlayermx)    ! (m.s-2)
256      REAL zdtc(ngridmx,nlayermx),zdtsurfc(ngridmx)
257      REAL zdvc(ngridmx,nlayermx),zduc(ngridmx,nlayermx)
258      REAL tconds(ngridmx,nlayermx)
259
260      REAL zdqdif(ngridmx,nlayermx,nqmx), zdqsdif(ngridmx,nqmx)
261      REAL zdqsed(ngridmx,nlayermx,nqmx), zdqssed(ngridmx,nqmx)
262      REAL zdqdev(ngridmx,nlayermx,nqmx), zdqsdev(ngridmx,nqmx)
263      REAL zdqadj(ngridmx,nlayermx,nqmx)
264      REAL zdqc(ngridmx,nlayermx,nqmx)
265      REAL zdqlscale(ngridmx,nlayermx,nqmx)
266      REAL zdqslscale(ngridmx,nqmx), zdqsc(ngridmx,nqmx)
267      REAL zdqchim(ngridmx,nlayermx,nqmx)
268      REAL zdqschim(ngridmx,nqmx)
269      REAL zdqch4cloud(ngridmx,nlayermx,nqmx)
270      REAL zdqsch4cloud(ngridmx,nqmx)
271      REAL zdtch4cloud(ngridmx,nlayermx)
272      REAL zdqcocloud(ngridmx,nlayermx,nqmx)
273      REAL zdqscocloud(ngridmx,nqmx)
274      REAL zdtcocloud(ngridmx,nlayermx)
275      REAL rice_ch4(ngridmx,nlayermx)    ! Methane ice geometric mean radius (m)
276      REAL rice_co(ngridmx,nlayermx)     ! CO ice geometric mean radius (m)
277
278      REAL zdqsch4fast(ngridmx)    ! used only for fast model nogcm
279      REAL zdqch4fast(ngridmx)    ! used only for fast model nogcm
280      REAL zdqscofast(ngridmx)    ! used only for fast model nogcm
281      REAL zdqcofast(ngridmx)    ! used only for fast model nogcm
282      REAL zdqflow(ngridmx,nqmx)
283
284      REAL zdteuv(ngridmx,nlayermx)    ! (K/s)
285      REAL zdtconduc(ngridmx,nlayermx) ! (K/s)
286      REAL zdumolvis(ngridmx,nlayermx)
287      REAL zdvmolvis(ngridmx,nlayermx)
288      real zdqmoldiff(ngridmx,nlayermx,nqmx)
289
290      ! Haze relatated tendancies
291      REAL zdqhaze(ngridmx,nlayermx,nqmx)
292      REAL zdqprodhaze(ngridmx,nqmx)
293      REAL zdqsprodhaze(ngridmx)
294      REAL zdqhaze_col(ngridmx)
295      REAL zdqphot_prec(ngrid,nlayer)
296      REAL zdqphot_ch4(ngrid,nlayer)
297      REAL zdqconv_prec(ngrid,nlayer)
298      REAL zdq_source(ngridmx,nlayermx,nqmx)
299      ! Fast Haze relatated tendancies
300      REAL fluxbot(ngridmx)   
301      REAL gradflux(ngridmx)
302      REAL fluxlym_sol_bot(ngridmx)      ! Solar flux Lyman alpha ph.m-2.s-1 reaching the surface
303      REAL fluxlym_ipm_bot(ngridmx)      ! IPM (Interplanetary) flux Lyman alpha ph.m-2.s-1 reaching the surface
304      REAL flym_sol(ngridmx)      ! Incident Solar flux Lyman alpha ph.m-2.s-1
305      REAL flym_ipm(ngridmx)      ! Incident IPM (Interplanetary) flux Lyman alpha ph.m-2.s-1
306
307      real nconsMAX
308      real vdifcncons(ngridmx)
309      real cadjncons(ngridmx)
310      real ch4csMAX
311      real ch4cncons(ngridmx)
312      real ch4sedncons(ngridmx)
313      real ch4sedsMAX
314      real condncons(ngridmx)
315      real dWtot, dWtots
316      real dWtotn2, dWtotsn2
317      real nconsMAXn2
318      real vdifcnconsn2(ngridmx)
319      real cadjnconsn2(ngridmx)
320      real condnconsn2(ngridmx)
321
322c     Local variable for local intermediate calcul:
323      REAL zflubid(ngridmx)
324      REAL zplanck(ngridmx),zpopsk(ngridmx,nlayermx)
325      REAL zdum1(ngridmx,nlayermx)
326      REAL zdum2(ngridmx,nlayermx)
327      REAL ztim1,ztim2,ztim3, z1,z2
328      REAL ztime_fin
329      REAL zdh(ngridmx,nlayermx)
330      INTEGER length
331      PARAMETER (length=100)
332
333c local variables only used for diagnostic (output in file "diagfi" or "stats")
334c -----------------------------------------------------------------------------
335      REAL ps(ngridmx), zt(ngridmx,nlayermx)
336      REAL zu(ngridmx,nlayermx),zv(ngridmx,nlayermx)
337      REAL zq(ngridmx,nlayermx,nqmx)
338      REAL fluxtop_sw_tot(ngridmx), fluxsurf_sw_tot(ngridmx)
339      character*2 str2
340      character*5 str5
341      real zdtdif(ngridmx,nlayermx), zdtadj(ngridmx,nlayermx)
342      real zdtdyn(ngridmx,nlayermx),ztprevious(ngridmx,nlayermx)
343      save ztprevious
344      real qtot1,qtot2            ! total aerosol mass
345      integer igmin, lmin
346      logical tdiag
347
348      REAL zplev(ngrid,nlayermx+1),zplay(ngrid,nlayermx)
349      REAL cd
350      real vmr(ngridmx,nlayermx) ! volume mixing ratio
351
352      REAL time_phys
353
354      REAL tau_col(ngrid)
355      real flux1,flux2,flux3,ts1,ts2,ts3
356
357      real qcol(ngridmx,nqmx)
358!     Pluto adding variables
359      real vmr_ch4(ngridmx)  ! vmr ch4
360      real vmr_co(ngridmx)  ! vmr co
361      real rho(ngridmx,nlayermx) ! density
362      real zrho_ch4(ngridmx,nlayermx) ! density methane kg.m-3
363      real zrho_co(ngridmx,nlayermx) ! density CO kg.m-3
364      real zrho_haze(ngridmx,nlayermx) ! density haze kg.m-3
365      real zdqrho_photprec(ngridmx,nlayermx) !photolysis rate kg.m-3.s-1
366      real zq1temp_ch4(ngridmx) !
367      real qsat_ch4(ngridmx) !
368      real qsat_ch4_l1(ngridmx) !
369
370!      CHARACTER(LEN=20) :: txt ! to temporarly store text for eddy tracers
371      real profmmr(ngridmx,nlayermx) ! fixed profile of haze if haze_proffix
372      real sensiblehf1(ngridmx) ! sensible heat flux
373      real sensiblehf2(ngridmx) ! sensible heat flux
374
375!     included by RW to test energy conservation
376      REAL dEtot, dEtots, masse, vabs, dvabs, ang0
377
378!     included by RW to allow variations in cp with location
379      REAL cpp3D(ngridmx,nlayermx)   ! specific heat capacity at const. pressure
380      REAL rcp3D(ngridmx,nlayermx)   ! R / specific heat capacity
381      real cppNI, rcpNI, nnu ! last one just for Seb version
382      REAL zpopskNI(ngridmx,nlayermx)
383
384!     included by RW to make 1D saves not every timestep
385      integer countG1D
386!     integer countG3D,saveG3D
387      save countG1D
388!     save countG3D,saveG3D
389      CHARACTER(len=10) :: tname
390
391c=======================================================================
392
393c 1. Initialisation:
394c -----------------
395
396c  1.1   Initialisation only at first call
397c  ---------------------------------------
398      IF (firstcall) THEN
399         if(ngrid.eq.1)then
400            saveG1D=1
401            countG1D=1
402         endif
403
404c        variables set to 0
405c        ~~~~~~~~~~~~~~~~~~
406         call zerophys(ngrid*nlayer,dtrad)
407         call zerophys(ngrid,fluxrad)
408         call zerophys(ngrid*nlayer*nq,zdqsed)
409         call zerophys(ngrid*nq, zdqssed)
410         call zerophys(ngrid*nlayer*nq,zdqadj)
411
412c        initialize tracer names, indexes and properties
413c        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
414         tracerdyn=tracer   ! variable tracer in dynamics
415         IF (tracer) THEN
416            CALL initracer()
417         ENDIF  ! end tracer
418
419!        Initialize aerosol indexes: done in initracer
420!        ~~~~~~~~~~~~~~~~~~~~~~~~~~~
421!        call iniaerosol()
422
423c        read startfi (initial parameters)
424c        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
425         CALL phyetat0 ("startfi.nc",0,0,
426     &         nsoilmx,nq,
427     &         day_ini,time_phys,
428     &         tsurf,tsoil,emis,q2,qsurf)
429
430         if (pday.ne.day_ini) then
431           write(*,*) "PHYSIQ: ERROR: bad synchronization between ",
432     &                "physics and dynamics"
433           write(*,*) "dynamics day: ",pday
434           write(*,*) "physics day:  ",day_ini
435           stop
436         endif
437
438         write (*,*) 'In physiq day_ini =', day_ini
439         ptime0=ptime
440         write (*,*) 'In physiq ptime0 =', ptime
441         
442c        Initialize albedo and orbital calculation
443c        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
444         CALL surfini(ngrid,albedo)
445         CALL iniorbit(aphelie,periheli,year_day,peri_day,obliquit)
446
447         saveday=pday
448         savedeclin=0.
449         !adjust=0. ! albedo adjustment for convergeps
450
451c        Initialize surface inventory and geopotential for paleo mode
452c        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
453         if (paleo) then
454           write(*,*) 'Paleo time tpal = ',tpal
455           DO ig=1,ngrid
456             phisfinew(ig)=phisfi(ig)-qsurf(ig,1)*g/1000. ! topo of bedrock below the ice
457           ENDDO
458         endif 
459
460         if (conservn2) then
461            write(*,*) 'conservn2 initial'
462            call testconservmass(ngrid,nlayer,pplev(:,1),qsurf(:,1))
463         endif
464                           
465c        initialize soil
466c        ~~~~~~~~~~~~~~~
467         IF (callsoil) THEN
468            CALL soil(ngrid,nsoilmx,firstcall,inertiedat,
469     s          ptimestep,tsurf,tsoil,capcal,fluxgrd)
470         ELSE
471            PRINT*,'WARNING! Thermal conduction in the soil turned off'
472            DO ig=1,ngrid
473               capcal(ig)=1.e5
474               fluxgrd(ig)=0.
475            ENDDO
476         ENDIF
477         icount=1
478
479      ENDIF        !  (end of "if firstcall")
480
481c ---------------------------------------------------
482c 1.2   Initializations done at every physical timestep:
483c ---------------------------------------------------
484c
485      IF (ngrid.NE.ngridmx) THEN
486         PRINT*,'STOP in PHYSIQ'
487         PRINT*,'Probleme de dimensions :'
488         PRINT*,'ngrid     = ',ngrid
489         PRINT*,'ngridmx   = ',ngridmx
490         STOP
491      ENDIF
492
493c     Initialize various variables
494c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
495      call zerophys(ngrid*nlayer, pdv)
496      call zerophys(ngrid*nlayer, pdu)
497      call zerophys(ngrid*nlayer,pdt)
498      call zerophys(ngrid*nlayer*nq, pdq)
499      call zerophys(ngrid, pdpsrf)
500      call zerophys(ngrid, zflubid)
501      call zerophys(ngrid, zdtsurf)
502      call zerophys(ngrid*nq, dqsurf)
503
504      if (conservn2) then
505         write(*,*) 'conservn2 iniloop'
506         call testconservmass(ngrid,nlayer,pplev(:,1),qsurf(:,1))
507      endif 
508     
509      igout=ngrid/2+1
510
511      zday=pday+ptime ! compute time, in sols (and fraction thereof)
512
513c     Compute Solar Longitude (Ls) :
514c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
515      if (season) then
516         call solarlong(zday,zls)
517      else
518         call solarlong(float(day_ini),zls)
519      end if
520
521c     Get Lyman alpha flux at specific Ls
522      if (haze) then
523         call lymalpha(zls,zfluxuv)
524         print*, 'Haze lyman-alpha zls,zfluxuv=',zls,zfluxuv
525      end if
526
527c     Compute geopotential between layers
528c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
529      DO l=1,nlayer
530         DO ig=1,ngrid
531            zzlay(ig,l)=pphi(ig,l)/g
532         ENDDO
533      ENDDO
534      DO ig=1,ngrid
535         zzlev(ig,1)=0.
536         zzlev(ig,nlayer+1)=1.e7    ! dummy top of last layer above 10000 km...
537      ENDDO
538      DO l=2,nlayer
539         DO ig=1,ngrid
540            z1=(pplay(ig,l-1)+pplev(ig,l))/(pplay(ig,l-1)-pplev(ig,l))
541            z2=(pplev(ig,l)+pplay(ig,l))/(pplev(ig,l)-pplay(ig,l))
542            zzlev(ig,l)=(z1*zzlay(ig,l-1)+z2*zzlay(ig,l))/(z1+z2)
543         ENDDO
544      ENDDO
545
546!     Potential temperature calculation not the same in physiq and dynamic...
547c     Compute potential temperature zh
548      DO l=1,nlayer
549         DO ig=1,ngrid
550            zpopsk(ig,l)=(pplay(ig,l)/pplev(ig,1))**rcp
551            zh(ig,l)=pt(ig,l)/zpopsk(ig,l)
552         ENDDO
553      ENDDO
554
555c --------------------------------------------------------
556c    1.3 thermosphere
557c --------------------------------------------------------
558
559c ajout de la conduction depuis la thermosphere
560      IF (callconduct) THEN
561         
562          call conduction (ngrid,nlayer,ptimestep,
563     $                  pplay,pt,zzlay,zzlev,zdtconduc,tsurf)
564          DO l=1,nlayer
565             DO ig=1,ngrid
566                pdt(ig,l)=pdt(ig,l)+ zdtconduc(ig,l)
567             ENDDO
568          ENDDO
569
570      ENDIF
571
572! ajout de la viscosite moleculaire
573      IF (callmolvis) THEN
574          call molvis(ngrid,nlayer,ptimestep,
575     $                   pplay,pt,zzlay,zzlev,
576     $                   zdtconduc,pu,tsurf,zdumolvis)
577          call molvis(ngrid,nlayer,ptimestep,
578     $                   pplay,pt,zzlay,zzlev,
579     $                   zdtconduc,pv,tsurf,zdvmolvis)
580
581          DO l=1,nlayer
582             DO ig=1,ngrid
583             ! pdt(ig,l)=pdt(ig,l)+ zdtconduc(ig,l)
584                pdv(ig,l)=pdv(ig,l)+zdvmolvis(ig,l)
585                pdu(ig,l)=pdu(ig,l)+zdumolvis(ig,l)
586             ENDDO
587          ENDDO
588      ENDIF
589
590      IF (callmoldiff) THEN
591           call moldiff_red(ngrid,nlayer,nq,
592     &                   pplay,pplev,pt,pdt,pq,pdq,ptimestep,
593     &                   zzlay,zdtconduc,zdqmoldiff)
594
595           DO l=1,nlayer
596              DO ig=1,ngrid
597                 DO iq=1, nq
598                  pdq(ig,l,iq)=pdq(ig,l,iq)+zdqmoldiff(ig,l,iq)
599                 ENDDO
600              ENDDO
601           ENDDO
602      ENDIF
603
604      if (conservn2) then
605         write(*,*) 'conservn2 thermo'
606         call testconservmass(ngrid,nlayer,pplev(:,1),qsurf(:,1))
607      endif 
608
609c-----------------------------------------------------------------------
610c    2. Compute radiative tendencies :
611c---------  --------------------------------------------------------------
612c     Saving qsurf to compute paleo flux condensation/sublimation         
613      DO iq=1, nq
614         DO ig=1,ngrid
615             IF (qsurf(ig,iq).lt.0.) then
616                qsurf(ig,iq)=0.
617             ENDIF
618             qsurf1(ig,iq)=qsurf(ig,iq)
619         ENDDO
620      ENDDO 
621
622      IF (callrad) THEN
623         IF( MOD(icount-1,iradia).EQ.0) THEN
624
625c          Local stellar zenith angle
626c          ~~~~~~~~~~~~~~~~~~~~~~~~~~
627           IF (triton) then
628              CALL orbitetriton(zls,zday,dist_sol,declin)
629           ELSE
630              CALL orbite(zls,dist_sol,declin)
631           ENDIF
632
633           IF (diurnal) THEN
634               ztim1=SIN(declin)
635               ztim2=COS(declin)*COS(2.*pi*(zday-.5))
636               ztim3=-COS(declin)*SIN(2.*pi*(zday-.5))
637
638               CALL solang(ngrid,sinlon,coslon,sinlat,coslat,
639     s         ztim1,ztim2,ztim3,mu0,fract)
640         
641           ELSE
642               CALL mucorr(ngrid,declin,lati,mu0,fract,10000.,rad)
643               ! WARNING: this function appears not to work in 1D
644           ENDIF
645
646c         Albedo /IT changes depending of surface ices (only in 3D)
647c         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
648           if (ngrid.ne.1) then
649           
650            !! Specific Triton to change albedo of N2 so that Psurf
651            !! converges toward 1.4 Pa in "1989" seasons
652            if (convergeps.and.triton) then             
653              ! 1989 declination
654              if (declin*180./pi.gt.-46..and.declin*180./pi.lt.-45.
655     &        .and.zday.gt.saveday+1000..and.declin.lt.savedeclin) then
656                call globalaverage2d(ngrid,pplev(:,1),globave)
657                if (globave.gt.1.5) then
658                      adjust=adjust+0.005
659                else if (globave.lt.1.3) then
660                      adjust=adjust-0.005
661                endif
662                saveday=zday
663              endif
664              call surfprop(ngrid,nq,fract,qsurf,tsurf,tidat,
665     &         capcal,adjust,dist_sol,albedo,emis,flusurfold,ptimestep,
666     &         zls)
667              savedeclin=declin
668
669            else
670              ! Surface properties
671              call surfprop(ngrid,nq,fract,qsurf,tsurf,tidat,
672     &        capcal,adjust,dist_sol,albedo,emis,flusurfold,ptimestep,
673     &         zls)
674            end if
675!TB22
676           else  ! here ngrid=1
677              call surfprop(ngrid,nq,fract,qsurf,tsurf,tidat,
678     &        capcal,adjust,dist_sol,albedo,emis,flusurfold,ptimestep,
679     &         zls)
680
681           end if ! if ngrid ne 1
682
683c          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
684c          Fixed zenith angle in 1D
685c          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
686           if(ngrid.eq.1.and.globmean1d) then   
687             !global mean 1D radiative equiilium
688             ig=1
689             mu0(ig)     = 2**(-0.5)
690             fract(ig)= 1/(4*mu0(ig))
691             !print*,'WARNING GLOBAL MEAN CALCULATION'
692           endif
693
694c          Call main radiative transfer scheme
695c          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
696
697c          Radiative transfer
698c          ------------------
699           if (corrk) then
700c             print*,'TB22 start corrk',tsurf   ! Bug testphys1d nodebug
701             CALL callcorrk(icount,ngrid,nlayer,pq,nq,qsurf,
702     &             albedo,emis,mu0,pplev,pplay,pt,
703     &             tsurf,fract,dist_sol,igout,aerosol,cpp3D,
704     &             zdtlw,zdtsw,fluxsurf_lw,fluxsurf_sw,fluxtop_lw,
705     &             fluxtop_sw,fluxtop_dn,reffrad,tau_col,ptime,pday,
706     &             firstcall,lastcall,zzlay)
707                   
708c            Radiative flux from the sky absorbed by the surface (W.m-2)
709c            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
710             DO ig=1,ngrid
711                fluxrad_sky(ig)=emis(ig)*fluxsurf_lw(ig)
712     &               +fluxsurf_sw(ig)*(1.-albedo(ig))
713             ENDDO
714
715c            Net atmospheric radiative heating/cooling rate (K.s-1):
716c            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
717             DO l=1,nlayer
718                DO ig=1,ngrid
719                 dtrad(ig,l)=zdtsw(ig,l)+zdtlw(ig,l)
720                ENDDO
721             ENDDO
722             
723           else ! corrk = F
724
725c            Atmosphere has no radiative effect
726c            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
727             DO ig=1,ngrid
728                 fluxtop_dn(ig)  = fract(ig)*mu0(ig)*Fat1AU/dist_sol**2
729                 fluxrad_sky(ig) = fluxtop_dn(ig)*(1.-albedo(ig))
730                 fluxtop_sw(ig)  = fluxtop_dn(ig)*albedo(ig)
731                 fluxtop_lw(ig)  = emis(ig)*stephan*tsurf(ig)**4
732             ENDDO ! radiation skips the atmosphere entirely
733             DO l=1,nlayer
734                 DO ig=1,ngrid
735                    dtrad(ig,l)=0.0
736                 ENDDO
737             ENDDO ! hence no atmospheric radiative heating
738
739           endif                ! if corrk
740
741         ENDIF ! of if(mod(icount-1,iradia).eq.0) ie radiative timestep
742   
743!        Transformation of the radiative tendencies:
744!        -------------------------------------------
745
746!        Net radiative surface flux (W.m-2)
747!        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
748
749         DO ig=1,ngrid
750           zplanck(ig)=tsurf(ig)*tsurf(ig)
751           zplanck(ig)=emis(ig)*
752     &          stephan*zplanck(ig)*zplanck(ig)
753           fluxrad(ig)=fluxrad_sky(ig)-zplanck(ig)
754         ENDDO
755
756         DO l=1,nlayer
757           DO ig=1,ngrid
758              pdt(ig,l)=pdt(ig,l)+dtrad(ig,l)
759           ENDDO
760         ENDDO
761
762      ENDIF ! of IF (callrad)
763
764      if (conservn2) then
765         write(*,*) 'conservn2 radiat'
766         call testconservmass(ngrid,nlayer,pplev(:,1),qsurf(:,1))
767      endif 
768
769!-----------------------------------------------------------------------
770!    4. Vertical diffusion (turbulent mixing):
771!-----------------------------------------------------------------------
772
773      IF (calldifv) THEN
774
775         DO ig=1,ngrid
776            zflubid(ig)=fluxrad(ig)+fluxgrd(ig)
777         ENDDO
778
779         CALL zerophys(ngrid*nlayer,zdum1)
780         CALL zerophys(ngrid*nlayer,zdum2)
781         do l=1,nlayer
782            do ig=1,ngrid
783               zdh(ig,l)=pdt(ig,l)/zpopsk(ig,l)
784            enddo
785         enddo
786
787c        Calling vdif (Martian version WITH N2 condensation)
788         CALL vdifc(ngrid,nlayer,nq,zpopsk,
789     &        ptimestep,capcal,lwrite,
790     &        pplay,pplev,zzlay,zzlev,z0,
791     &        pu,pv,zh,pq,pt,tsurf,emis,qsurf,
792     &        zdum1,zdum2,zdh,pdq,pdt,zflubid,
793     &        zdudif,zdvdif,zdhdif,zdtsdif,q2,
794     &        zdqdif,zdqsdif,qsat_ch4,qsat_ch4_l1) !,zq1temp_ch4,qsat_ch4)
795   
796         DO l=1,nlayer
797            DO ig=1,ngrid
798               pdv(ig,l)=pdv(ig,l)+zdvdif(ig,l)
799               pdu(ig,l)=pdu(ig,l)+zdudif(ig,l)
800               pdt(ig,l)=pdt(ig,l)+zdhdif(ig,l)*zpopsk(ig,l)
801
802               zdtdif(ig,l)=zdhdif(ig,l)*zpopsk(ig,l) ! for diagnostic only
803            ENDDO
804         ENDDO
805
806         DO ig=1,ngrid
807            zdtsurf(ig)=zdtsurf(ig)+zdtsdif(ig)
808         ENDDO
809
810         bcond=1./tcond1p4Pa
811         acond=r/lw_n2
812
813         if (tracer) then
814          DO iq=1, nq
815           DO l=1,nlayer
816            DO ig=1,ngrid
817             pdq(ig,l,iq)=pdq(ig,l,iq)+ zdqdif(ig,l,iq)
818            ENDDO
819           ENDDO
820          ENDDO
821
822          DO iq=1, nq
823              DO ig=1,ngrid
824                 dqsurf(ig,iq)=dqsurf(ig,iq) + zdqsdif(ig,iq)
825              ENDDO
826          ENDDO
827
828         end if ! of if (tracer)
829
830!------------------------------------------------------------------
831! test methane conservation
832c         if(methane)then
833c           call testconserv(ngrid,nlayer,nq,igcm_ch4_gas,igcm_ch4_ice,
834c     &          ptimestep,pplev,zdqdif,zdqsdif,'CH4',' vdifc ')
835c         endif  ! methane
836!------------------------------------------------------------------
837! test CO conservation
838c         if(carbox)then
839c           call testconserv(ngrid,nlayer,nq,igcm_co_gas,igcm_co_ice,
840c     &          ptimestep,pplev,zdqdif,zdqsdif,'CO ',' vdifc ')
841c         endif  ! carbox
842!------------------------------------------------------------------
843
844      ELSE   ! case with calldifv=F   
845         ztim1=4.*stephan*ptimestep
846         DO ig=1,ngrid
847           ztim2=ztim1*emis(ig)*tsurf(ig)**3
848           z1=capcal(ig)*tsurf(ig)+
849     s     ztim2*tsurf(ig)+ (fluxrad(ig)+fluxgrd(ig))*ptimestep
850           z2= capcal(ig)+ztim2
851           zdtsurf(ig)=(z1/z2 - tsurf(ig))/ptimestep
852           if (ig.eq.475) print*, 'TB22 z1,z2=',z1,z2,z1/z2
853           if (ig.eq.475) print*, 'TB22 cc,ee=',capcal(ig),emis(ig)
854           if (ig.eq.475) print*, 'TB22 fr,fg=',fluxrad(ig),fluxgrd(ig)
855
856           ! for output:
857           !dplanck(ig)=4.*stephan*ptimestep*emis(ig)*tsurf(ig)**3
858         ENDDO
859
860c        ------------------------------------------------------------------
861c        Methane surface sublimation and condensation in fast model (nogcm)     
862c        ------------------------------------------------------------------
863         print*, 'TB22 tsurf ini=',tsurf(475)
864         print*, 'TB22 dt ini=',zdtsurf(475)*ptimestep
865         print*, 'TB22 qsurfn2=',qsurf(475,1)
866         print*, 'TB22 qsurfch4=',qsurf(475,igcm_ch4_ice)
867         if ((methane).and.(fast).and.condmetsurf) THEN
868
869           call ch4surf(ngrid,nlayer,nq,ptimestep,
870     &     tsurf,zdtsurf,pplev,pdpsrf,pq,pdq,qsurf,dqsurf,
871     &     zdqch4fast,zdqsch4fast)
872
873           DO ig=1,ngrid
874              dqsurf(ig,igcm_ch4_ice)= dqsurf(ig,igcm_ch4_ice) +
875     &                    zdqsch4fast(ig)
876              pdq(ig,1,igcm_ch4_gas)= pdq(ig,1,igcm_ch4_gas) +
877     &                    zdqch4fast(ig)
878              zdtsurf(ig)=zdtsurf(ig)+lw_ch4*zdqsch4fast(ig)/capcal(ig)
879           ENDDO
880         end if
881         print*, lati(475)*180./pi,long(475)*180./pi,capcal(475)
882         print*, 'dtch4=',lw_ch4*zdqsch4fast(475)/capcal(475)*ptimestep
883         print*, 'dqch4s=',zdqsch4fast(475)*ptimestep
884         print*, 'newqsurfch4=',qsurf(475,igcm_ch4_ice)+
885     &                            dqsurf(475,igcm_ch4_ice)*ptimestep
886         print*, 'TB22 tsurf new=',tsurf(475)+zdtsurf(475)*ptimestep
887c        ------------------------------------------------------------------
888c        CO surface sublimation and condensation in fast model (nogcm)     
889c        ------------------------------------------------------------------
890         if ((carbox).and.(fast).and.condcosurf) THEN
891
892           call cosurf(ngrid,nlayer,nq,ptimestep,
893     &     tsurf,pplev,pdpsrf,pq,pdq,qsurf,dqsurf,
894     &     zdqcofast,zdqscofast)
895
896           DO ig=1,ngrid
897              dqsurf(ig,igcm_co_ice)= dqsurf(ig,igcm_co_ice) +
898     &                    zdqscofast(ig)
899              pdq(ig,1,igcm_co_gas)= pdq(ig,1,igcm_co_gas) +
900     &                    zdqcofast(ig)
901              zdtsurf(ig)=zdtsurf(ig)+lw_co*zdqscofast(ig)/capcal(ig)
902           ENDDO
903         end if
904
905      ENDIF ! of IF (calldifv)
906     
907      if (conservn2) then
908        write(*,*) 'conservn2 diff'
909        call testconservmass(ngrid,nlayer,pplev(:,1),qsurf(:,1)+
910     &                                  dqsurf(:,1)*ptimestep)
911      endif 
912
913!------------------------------------------------------------------
914! test CO conservation
915!         if(carbox)then
916!           call testconservfast(ngrid,nlayer,nq,
917!     &          ptimestep,pplev,zdqcofast,zdqscofast,'CO ',' vdifc ')
918!         endif  ! carbox
919!------------------------------------------------------------------
920
921!-----------------------------------------------------------------------
922!   5. Dry convective adjustment:
923!   -----------------------------
924
925      IF(calladj) THEN
926
927         DO l=1,nlayer
928            DO ig=1,ngrid
929                  zdh(ig,l)=pdt(ig,l)/zpopsk(ig,l)
930            ENDDO
931         ENDDO
932         CALL zerophys(ngrid*nlayer,zduadj)
933         CALL zerophys(ngrid*nlayer,zdvadj)
934         CALL zerophys(ngrid*nlayer,zdhadj)
935
936            CALL convadj(ngrid,nlayer,nq,ptimestep,
937     &           pplay,pplev,zpopsk,
938     &           pu,pv,zh,pq,
939     &           pdu,pdv,zdh,pdq,
940     &           zduadj,zdvadj,zdhadj,
941     &           zdqadj)
942
943
944         DO l=1,nlayer
945            DO ig=1,ngrid
946               pdu(ig,l)=pdu(ig,l)+zduadj(ig,l)
947               pdv(ig,l)=pdv(ig,l)+zdvadj(ig,l)
948               pdt(ig,l)=pdt(ig,l)+zdhadj(ig,l)*zpopsk(ig,l)
949               zdtadj(ig,l)=zdhadj(ig,l)*zpopsk(ig,l) ! for diagnostic only
950            ENDDO
951         ENDDO
952
953         if(tracer) then
954           DO iq=1, nq
955            DO l=1,nlayer
956              DO ig=1,ngrid
957                 pdq(ig,l,iq)=pdq(ig,l,iq)+ zdqadj(ig,l,iq)
958              ENDDO
959            ENDDO
960           ENDDO
961         end if
962
963      ENDIF ! of IF(calladj)
964
965!------------------------------------------------------------------
966! test methane conservation
967c         if(methane)then
968c           call testchange(ngrid,nlayer,nq,igcm_ch4_gas,igcm_ch4_ice,
969c     &          ptimestep,pplev,zdqadj,'CH4','calladj')
970c         endif  ! methane
971!------------------------------------------------------------------
972! test CO conservation
973c         if(carbox)then
974c           call testchange(ngrid,nlayer,nq,igcm_co_gas,igcm_co_ice,
975c     &          ptimestep,pplev,zdqadj,'CO ','calladj')
976c         endif  ! carbox
977!------------------------------------------------------------------
978
979!-----------------------------------------------------------------------
980!   6. Nitrogen condensation-sublimation:
981!   -------------------------------------------
982
983      IF (N2cond) THEN
984         if (.not.tracer.or.igcm_n2.eq.0) then
985             print*,'We need a n2 ice tracer to condense n2'
986             call abort
987         endif
988
989c          write(*,*) 'before N2 condens :'
990c          call massn2(ngrid,nlayer,pplev,qsurf(:,1),dqsurf(:,igcm_n2),
991c     &        pdpsrf,ptimestep)
992
993         if (tracer) then
994           zdqc(:,:,:)=0.
995           zdqsc(:,:)=0.
996           call condens_n2(ngrid,nlayer,nq,ptimestep,
997     &        capcal,pplay,pplev,tsurf,pt,
998     &        pphi,pdt,pdu,pdv,zdtsurf,pu,pv,pq,pdq, 
999     &        qsurf(1,igcm_n2),albedo,emis,
1000     &        zdtc,zdtsurfc,pdpsrf,zduc,zdvc,
1001     &        zdqc,zdqsc(1,igcm_n2))
1002         endif
1003
1004         !!! TB temporaire
1005         !zdtc=0.
1006         !zdvc=0.
1007         !zduc=0.
1008         !zdqc=0.
1009         !zdqsc=0.
1010         !zdtsurfc=0.
1011
1012         DO l=1,nlayer
1013           DO ig=1,ngrid
1014             pdt(ig,l)=pdt(ig,l)+zdtc(ig,l)
1015             pdv(ig,l)=pdv(ig,l)+zdvc(ig,l)
1016             pdu(ig,l)=pdu(ig,l)+zduc(ig,l)
1017           ENDDO
1018         ENDDO
1019         DO ig=1,ngrid
1020            zdtsurf(ig) = zdtsurf(ig) + zdtsurfc(ig)
1021         ENDDO
1022
1023         DO iq=1, nq
1024c           TB: option eddy not condensed with N2
1025c           txt=noms(iq)
1026c           IF (txt(1:4).ne."eddy") THEN
1027            DO l=1,nlayer
1028              DO ig=1,ngrid
1029               pdq(ig,l,iq)=pdq(ig,l,iq)+ zdqc(ig,l,iq)
1030              ENDDO
1031            ENDDO
1032c           ENDIF
1033         ENDDO
1034         DO ig=1,ngrid
1035            dqsurf(ig,igcm_n2)= dqsurf(ig,igcm_n2) + zdqsc(ig,igcm_n2)
1036         ENDDO
1037         
1038      ENDIF  ! of IF (N2cond)
1039
1040      if (conservn2) then
1041       write(*,*) 'conservn2 n2cond'
1042       call testconservmass(ngrid,nlayer,pplev(:,1)+
1043     &      pdpsrf(:)*ptimestep,qsurf(:,1)+dqsurf(:,1)*ptimestep)
1044      endif 
1045 
1046!------------------------------------------------------------------
1047! test n2 conservation for one tendency / pplevis not updated here w pdpsrf
1048!         if(tracer)then
1049!          call testconserv(ngrid,nlayer,nq,igcm_n2,igcm_n2,
1050!     &          ptimestep,pplev,zdqc,zdqsc,'N2 ',' n2cond')
1051!          call testconservmass(ngrid,nlayer,pplev(:,1),qsurf(:,1))
1052!         endif  ! n2
1053!------------------------------------------------------------------
1054! test methane conservation
1055!         if(methane)then
1056!           call testconserv(ngrid,nlayer,nq,igcm_ch4_gas,igcm_ch4_ice,
1057!     &          ptimestep,pplev,zdqc,zdqsc,'CH4',' n2cond')
1058!         endif  ! methane
1059!------------------------------------------------------------------
1060! test CO conservation
1061c         if(carbox)then
1062c           call testconserv(ngrid,nlayer,nq,igcm_co_gas,igcm_co_ice,
1063c     &          ptimestep,pplev,zdqc,zdqsc,'CO ',' n2cond')
1064c         endif  ! carbox
1065!------------------------------------------------------------------
1066
1067c-----------------------------------------------------------------------
1068c   7. Specific parameterizations for tracers
1069c   -----------------------------------------
1070
1071      if (tracer) then
1072
1073c   7a. Methane, CO, and ice
1074c      ---------------------------------------
1075c      Methane ice condensation in the atmosphere 
1076c      ----------------------------------------
1077       zdqch4cloud(:,:,:)=0.
1078       if ((methane).and.(metcloud).and.(.not.fast)) THEN
1079           call ch4cloud(ngrid,nlayer,naerkind,ptimestep,
1080     &                pplev,pplay,pdpsrf,zzlev,zzlay, pt,pdt,
1081     &                pq,pdq,zdqch4cloud,zdqsch4cloud,zdtch4cloud,
1082     &                nq,rice_ch4)
1083
1084           DO l=1,nlayer
1085              DO ig=1,ngrid
1086                 pdq(ig,l,igcm_ch4_gas)=pdq(ig,l,igcm_ch4_gas)+
1087     &                                   zdqch4cloud(ig,l,igcm_ch4_gas)
1088                 pdq(ig,l,igcm_ch4_ice)=pdq(ig,l,igcm_ch4_ice)+
1089     &                                   zdqch4cloud(ig,l,igcm_ch4_ice)
1090              ENDDO
1091           ENDDO
1092
1093           ! Increment methane ice surface tracer tendency
1094           DO ig=1,ngrid
1095               dqsurf(ig,igcm_ch4_ice)=dqsurf(ig,igcm_ch4_ice)+
1096     &                               zdqsch4cloud(ig,igcm_ch4_ice)
1097           ENDDO
1098
1099           ! update temperature tendancy
1100           DO ig=1,ngrid
1101             DO l=1,nlayer
1102               pdt(ig,l)=pdt(ig,l)+zdtch4cloud(ig,l)
1103             ENDDO
1104           ENDDO
1105       end if
1106
1107c      ---------------------------------------
1108c      CO ice condensation in the atmosphere
1109c      ----------------------------------------
1110       zdqcocloud(:,:,:)=0.
1111       IF ((carbox).and.(monoxcloud).and.(.not.fast)) THEN
1112           call cocloud(ngrid,nlayer,naerkind,ptimestep,
1113     &                pplev,pplay,pdpsrf,zzlev,zzlay, pt,pdt,
1114     &                pq,pdq,zdqcocloud,zdqscocloud,zdtcocloud,
1115     &                nq,rice_co,qsurf(1,igcm_n2),dqsurf(1,igcm_n2))
1116
1117           DO l=1,nlayer
1118               DO ig=1,ngrid
1119                 pdq(ig,l,igcm_co_gas)=pdq(ig,l,igcm_co_gas)+
1120     &                                   zdqcocloud(ig,l,igcm_co_gas)
1121                 pdq(ig,l,igcm_co_ice)=pdq(ig,l,igcm_co_ice)+
1122     &                                   zdqcocloud(ig,l,igcm_co_ice)
1123               ENDDO
1124           ENDDO
1125
1126           ! Increment CO ice surface tracer tendency
1127           DO ig=1,ngrid
1128            dqsurf(ig,igcm_co_ice)=dqsurf(ig,igcm_co_ice)+
1129     &                               zdqscocloud(ig,igcm_co_ice)
1130           ENDDO
1131
1132           ! update temperature tendancy
1133           DO ig=1,ngrid
1134             DO l=1,nlayer
1135               pdt(ig,l)=pdt(ig,l)+zdtcocloud(ig,l)
1136             ENDDO
1137           ENDDO
1138
1139       END IF  ! of IF (carbox)
1140
1141!------------------------------------------------------------------
1142! test methane conservation
1143c         if(methane)then
1144c           call testconserv(ngrid,nlayer,nq,igcm_ch4_gas,igcm_ch4_ice,
1145c     &         ptimestep,pplev,zdqch4cloud,zdqsch4cloud,'CH4','ch4clou')
1146c         endif  ! methane
1147!------------------------------------------------------------------
1148! test CO conservation
1149c         if(carbox)then
1150c           call testconserv(ngrid,nlayer,nq,igcm_co_gas,igcm_co_ice,
1151c     &          ptimestep,pplev,zdqcocloud,zdqscocloud,'CO ','cocloud')
1152c         endif  ! carbox
1153!------------------------------------------------------------------
1154 
1155c   7b. Haze particle production
1156c     -------------------
1157       IF (haze) THEN
1158         
1159          zdqphot_prec(:,:)=0.
1160          zdqphot_ch4(:,:)=0.
1161          ! Forcing to a fixed haze profile if haze_proffix
1162          if (haze_proffix.and.i_haze.gt.0.) then
1163           call haze_prof(ngrid,nlayer,zzlay,pplay,pt,
1164     &                               reffrad,profmmr)
1165           zdqhaze(:,:,i_haze)=(profmmr(:,:)-pq(:,:,igcm_haze))
1166     &                                               /ptimestep
1167          else
1168           call hazecloud(ngrid,nlayer,nq,ptimestep,
1169     &         pplay,pplev,pq,pdq,dist_sol,mu0,zfluxuv,zdqhaze,
1170     &         zdqphot_prec,zdqphot_ch4,zdqconv_prec,declin)
1171          endif
1172
1173          DO iq=1, nq ! should be updated
1174             DO l=1,nlayer
1175               DO ig=1,ngrid
1176                    pdq(ig,l,iq)=pdq(ig,l,iq)+ zdqhaze(ig,l,iq)
1177               ENDDO
1178             ENDDO
1179          ENDDO
1180
1181       ENDIF
1182
1183       IF (fast.and.fasthaze) THEN
1184         call prodhaze(ngrid,nlayer,nq,ptimestep,pplev,pq,pdq,dist_sol,
1185     &             mu0,declin,zdqprodhaze,zdqsprodhaze,gradflux,fluxbot,
1186     &             fluxlym_sol_bot,fluxlym_ipm_bot,flym_sol,flym_ipm)
1187
1188         DO ig=1,ngrid
1189           pdq(ig,1,igcm_ch4_gas)=pdq(ig,1,igcm_ch4_gas)+
1190     &                                    zdqprodhaze(ig,igcm_ch4_gas)
1191           pdq(ig,1,igcm_prec_haze)=pdq(ig,1,igcm_prec_haze)+
1192     &                                  zdqprodhaze(ig,igcm_prec_haze)
1193           pdq(ig,1,igcm_haze)=abs(pdq(ig,1,igcm_haze)+
1194     &                                  zdqprodhaze(ig,igcm_haze))
1195           qsurf(ig,igcm_haze)= qsurf(ig,igcm_haze)+
1196     &                                      zdqsprodhaze(ig)*ptimestep
1197         ENDDO
1198
1199       ENDIF
1200
1201c   7c. Aerosol particles
1202c     -------------------
1203
1204c      -------------
1205c      Sedimentation
1206c      -------------
1207       IF (sedimentation) THEN
1208         call zerophys(ngrid*nlayer*nq, zdqsed)
1209         call zerophys(ngrid*nq, zdqssed)
1210
1211         call callsedim(ngrid,nlayer, ptimestep,
1212     &        pplev,zzlev, pt,rice_ch4,rice_co,
1213     &        pq, pdq, zdqsed, zdqssed,nq,pphi)
1214
1215         DO iq=1, nq
1216           DO l=1,nlayer
1217             DO ig=1,ngrid
1218               pdq(ig,l,iq)=pdq(ig,l,iq)+ zdqsed(ig,l,iq)
1219             ENDDO
1220           ENDDO
1221         ENDDO
1222         DO iq=2, nq
1223           DO ig=1,ngrid
1224              dqsurf(ig,iq)= dqsurf(ig,iq) + zdqssed(ig,iq)
1225           ENDDO
1226         ENDDO
1227
1228       END IF   ! of IF (sedimentation)
1229
1230!------------------------------------------------------------------
1231! test methane conservation
1232c         if(methane)then
1233c           call testconserv(ngrid,nlayer,nq,igcm_ch4_gas,igcm_ch4_ice,
1234c     &          ptimestep,pplev,zdqsed,zdqssed,'CH4',' sedim ')
1235c         endif  ! methane
1236!------------------------------------------------------------------
1237! test CO conservation
1238c         if(carbox)then
1239c           call testconserv(ngrid,nlayer,nq,igcm_co_gas,igcm_co_ice,
1240c     &          ptimestep,pplev,zdqsed,zdqssed,'CO ',' sedim ')
1241c         endif  ! carbox
1242!------------------------------------------------------------------
1243
1244c   7d. Updates
1245c     ---------
1246!        write(*,*) 'before update qsurf:'
1247!        call massn2(ngrid,nlayer,pplev,qsurf(:,1),dqsurf(:,igcm_n2),
1248!     &        pdpsrf,ptimestep)
1249           
1250c       ---------------------------------
1251c       Updating tracer budget on surface (before spread of glacier)
1252c       ---------------------------------
1253        DO iq=1, nq
1254          DO ig=1,ngrid
1255            qsurf(ig,iq)=qsurf(ig,iq)+ptimestep*dqsurf(ig,iq)
1256          ENDDO 
1257        ENDDO   
1258
1259      endif !  of if (tracer)
1260
1261      if (conservn2) then
1262         write(*,*) 'conservn2 tracer'
1263         call testconservmass(ngrid,nlayer,pplev(:,1)+
1264     &       pdpsrf(:)*ptimestep,qsurf(:,1))
1265      endif 
1266
1267      DO ig=1,ngrid 
1268        flusurf(ig,igcm_n2)=(qsurf(ig,igcm_n2)-
1269     &                              qsurf1(ig,igcm_n2))/ptimestep
1270        flusurfold(ig,igcm_n2)=flusurf(ig,igcm_n2)
1271        if (methane) then
1272          flusurf(ig,igcm_ch4_ice)=(qsurf(ig,igcm_ch4_ice)-
1273     &                              qsurf1(ig,igcm_ch4_ice))/ptimestep
1274          flusurfold(ig,igcm_ch4_ice)=flusurf(ig,igcm_ch4_ice)
1275        endif
1276        if (carbox) then
1277          flusurf(ig,igcm_co_ice)=(qsurf(ig,igcm_co_ice)-
1278     &                              qsurf1(ig,igcm_co_ice))/ptimestep
1279          !flusurfold(ig,igcm_co_ice)=flusurf(ig,igcm_co_ice)
1280        endif
1281      ENDDO
1282
1283      !! Special source of haze particle !
1284      ! todo: should be placed in haze and use tendency of n2 instead of flusurf
1285      IF (source_haze) THEN
1286             call hazesource(ngrid,nlayer,nq,ptimestep,
1287     &                       pplev,flusurf,mu0,zdq_source)
1288             
1289             DO iq=1, nq
1290               DO l=1,nlayer
1291                 DO ig=1,ngrid
1292                    pdq(ig,l,iq)=pdq(ig,l,iq)+zdq_source(ig,l,iq)
1293                 ENDDO
1294               ENDDO
1295             ENDDO
1296      ENDIF
1297
1298!-----------------------------------------------------------------------
1299!   9. Surface and sub-surface soil temperature
1300!-----------------------------------------------------------------------
1301!   For diagnostic
1302!   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1303      DO ig=1,ngrid
1304         sensiblehf1(ig)=rho(ig,1)*cpp*(0.4/log(zzlay(ig,1)/z0))**2*
1305     &                   (pu(ig,1)*pu(ig,1)+pv(ig,1)*pv(ig,1))**0.5*
1306     &                   (tsurf(ig)-pt(ig,1))
1307         sensiblehf2(ig)=zflubid(ig)-capcal(ig)*zdtsdif(ig)
1308
1309      ENDDO
1310   
1311!   9.1 Increment Surface temperature:
1312!   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1313      DO ig=1,ngrid
1314         tsurf(ig)=tsurf(ig)+ptimestep*zdtsurf(ig)
1315         if (tsurf(ig).lt.0.) then
1316                 print*,'TB22 tsurf=',tsurf(ig),ig
1317                 stop
1318         endif
1319      ENDDO
1320!
1321!   9.2 Compute soil temperatures and subsurface heat flux:
1322!   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1323      IF (callsoil) THEN
1324         CALL soil(ngrid,nsoilmx,.false.,tidat,
1325     &          ptimestep,tsurf,tsoil,capcal,fluxgrd)
1326      ENDIF
1327
1328      ! For output :
1329      tidat_out(:,:)=0.
1330      DO l=1,min(nlayermx,nsoilmx)
1331         tidat_out(:,l)=tidat(:,l)
1332      ENDDO
1333     
1334!   9.3 multiply tendencies of cond/subli for paleo loop only in the
1335!       last Pluto year of the simulation
1336!       Year day must be adapted in the startfi for each object
1337!       Paleo uses year_day to calculate the annual mean tendancies
1338!   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1339      IF (paleo) then
1340         if (zday.gt.day_ini+ptime0+nday-year_day) then
1341            DO iq=1,nq
1342             DO ig=1,ngrid
1343               qsurfyear(ig,iq)=qsurfyear(ig,iq)+
1344     &                        (qsurf(ig,iq)-qsurf1(ig,iq))  !kg m-2 !ptimestep
1345             ENDDO
1346            ENDDO
1347         endif
1348      endif
1349
1350!   9.4 Glacial flow at each timestep glastep or at lastcall
1351!   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1352      IF (fast.and.glaflow) THEN
1353         if ((mod(zday-day_ini-ptime0,glastep)).lt.1.
1354     &                                              .or.lastcall) then
1355           IF (lastcall) then
1356            dstep=mod(zday-day_ini-ptime0,glastep)*daysec
1357           else
1358            dstep=glastep*daysec       
1359           endif
1360           zdqflow(:,:)=qsurf(:,:)
1361           IF (paleo) then
1362             !print*, 'calling glacier',dstep
1363             call spreadglacier_paleo(ngrid,nq,qsurf,
1364     &                               phisfinew,dstep,tsurf)
1365           else
1366             call spreadglacier_simple(ngrid,nq,qsurf,dstep)
1367           endif
1368           zdqflow(:,:)=(zdqflow(:,:)-qsurf(:,:))/dstep
1369
1370           if (conservn2) then
1371            write(*,*) 'conservn2 glaflow'
1372            call testconservmass(ngrid,nlayer,pplev(:,1)+
1373     &       pdpsrf(:)*ptimestep,qsurf(:,1))
1374           endif 
1375           
1376         endif
1377      ENDIF
1378
1379!-----------------------------------------------------------------------
1380!  10. Perform diagnostics and write output files
1381!-----------------------------------------------------------------------
1382!     ---------------------------------------------------------
1383!     Check the energy balance of the simulation during the run
1384!     ---------------------------------------------------------
1385      flux1 = 0
1386      flux2 = 0
1387      flux3 = 0
1388      do ig=1,ngrid
1389
1390            flux1 = flux1 +
1391     &        area(ig)*(fluxtop_dn(ig) - fluxtop_sw(ig))
1392            flux2 = flux2 + area(ig)*fluxtop_lw(ig)
1393            flux3 = flux3 + area(ig)*fluxtop_dn(ig)
1394            fluxabs_sw(ig)=fluxtop_dn(ig) - fluxtop_sw(ig)
1395
1396      end do
1397!      print*,'Incident solar flux, absorbed solar flux, OLR (W/m2)'
1398!      print*, flux3/totarea, '      ',  flux1/totarea ,
1399!     & '           = ', flux2/totarea
1400
1401      if(meanOLR)then
1402         ! to record global radiative balance
1403         open(92,file="rad_bal.out",form='formatted',access='append')
1404         write(92,*) zday,flux3/totarea,flux1/totarea,flux2/totarea
1405         close(92)
1406      endif
1407
1408!     Surface temperature information
1409      ts1 = 0
1410      ts2 = 999
1411      ts3 = 0
1412      do ig=1,ngrid
1413         ts1 = ts1 + area(ig)*tsurf(ig)
1414         ts2 = min(ts2,tsurf(ig)) 
1415         ts3 = max(ts3,tsurf(ig)) 
1416      end do
1417!      print*,'Mean Tsurf =',ts1/totarea , ' Min Tsurf=',ts2,
1418!     &          ' Max Tsurf =',ts3
1419!      print*,'Max Tsurf=',ts3,'Min Tsurf=',ts2
1420
1421!    -------------------------------
1422!    Dynamical fields incrementation
1423!    -------------------------------
1424! (FOR OUTPUT ONLY : the actual model integration is performed in the dynamics)
1425      ! temperature, zonal and meridional wind
1426      DO l=1,nlayer
1427        DO ig=1,ngrid
1428          zt(ig,l)=pt(ig,l) + pdt(ig,l)*ptimestep
1429          zu(ig,l)=pu(ig,l) + pdu(ig,l)*ptimestep
1430          zv(ig,l)=pv(ig,l) + pdv(ig,l)*ptimestep
1431      ! diagnostic
1432            zdtdyn(ig,l)=ztprevious(ig,l)-pt(ig,l)
1433            ztprevious(ig,l)=zt(ig,l)
1434        ENDDO
1435      ENDDO
1436!      if(firstcall)call zerophys(zdtdyn)
1437      if(firstcall) zdtdyn(:,:)=0.
1438      ! dynamical heating diagnostic
1439      DO ig=1,ngrid
1440         fluxdyn(ig)=0.
1441         DO l=1,nlayer
1442               fluxdyn(ig)=fluxdyn(ig) - (zdtdyn(ig,l)/ptimestep)
1443     &              *(pplev(ig,l)-pplev(ig,l+1))*cpp/g
1444         ENDDO
1445      ENDDO
1446
1447!    -------------------------------
1448!    Other diagnostics
1449!    -------------------------------
1450     !! diagnostic qsat_lev1 (ps, T1)
1451!      CALL methanesat(ngridmx,zt(:,1),pplev(1,1),qsat_lev1(:),
1452!     &                                          qsurf(:,igcm_n2))
1453
1454     !! eddy tracers : decay time
1455!      DO l=1,nlayer
1456!       DO ig=1,ngrid
1457!        pdq(ig,l,igcm_eddy1e6)=pdq(ig,l,igcm_eddy1e6)-
1458!     &          pq(ig,l,igcm_eddy1e6)*(1-exp(-ptimestep/1.e6))/ptimestep
1459!        pdq(ig,l,igcm_eddy1e7)=pdq(ig,l,igcm_eddy1e7)-
1460!     &          pq(ig,l,igcm_eddy1e7)*(1-exp(-ptimestep/1.e7))/ptimestep
1461!        pdq(ig,l,igcm_eddy5e7)=pdq(ig,l,igcm_eddy5e7)-
1462!     &          pq(ig,l,igcm_eddy5e7)*(1-exp(-ptimestep/5.e7))/ptimestep
1463!        pdq(ig,l,igcm_eddy1e8)=pdq(ig,l,igcm_eddy1e8)-
1464!     &          pq(ig,l,igcm_eddy1e8)*(1-exp(-ptimestep/1.e8))/ptimestep
1465!        pdq(ig,l,igcm_eddy5e8)=pdq(ig,l,igcm_eddy5e8)-
1466!     &          pq(ig,l,igcm_eddy5e8)*(1-exp(-ptimestep/5.e8))/ptimestep
1467!       ENDDO
1468!      ENDDO
1469
1470!    -------------------------------
1471!    Update tracers
1472!    -------------------------------
1473      DO iq=1, nq
1474        DO l=1,nlayer
1475          DO ig=1,ngrid
1476            zq(ig,l,iq)=pq(ig,l,iq) +pdq(ig,l,iq)*ptimestep
1477          ENDDO
1478        ENDDO
1479      ENDDO
1480
1481      DO ig=1,ngrid
1482          ps(ig)=pplev(ig,1) + pdpsrf(ig)*ptimestep
1483      ENDDO
1484      call globalaverage2d(ngrid,ps,globave)
1485
1486      ! pressure density
1487      IF (.not.fast) then !
1488       DO ig=1,ngrid
1489        DO l=1,nlayer
1490             zplev(ig,l)=pplev(ig,l)/pplev(ig,1)*ps(ig)
1491             zplay(ig,l)=pplay(ig,l)/pplev(ig,1)*ps(ig)
1492             rho(ig,l) = zplay(ig,l)/(r*zt(ig,l))
1493        ENDDO
1494        zplev(ig,nlayer+1)=pplev(ig,nlayer+1)/pplev(ig,1)*ps(ig)
1495       ENDDO
1496      ENDIF
1497
1498!     ---------------------------------------------------------
1499!     Compute column amounts (kg m-2) if tracers are enabled
1500!     ---------------------------------------------------------
1501      call zerophys(ngrid*nq,qcol)
1502      if(tracer.and..not.fast)then 
1503         do iq=1,nq
1504            DO ig=1,ngrid
1505               DO l=1,nlayer
1506                  qcol(ig,iq) = qcol(ig,iq) + zq(ig,l,iq) *
1507     &                      (zplev(ig,l) - zplev(ig,l+1)) / g
1508               enddo
1509            enddo
1510         enddo
1511      endif
1512
1513      if (methane) then
1514        IF (fast) then ! zq is the mixing ratio supposingly mixed in all atmosphere
1515          DO ig=1,ngrid
1516            vmr_ch4(ig)=zq(ig,1,igcm_ch4_gas)*
1517     &                        mmol(igcm_n2)/mmol(igcm_ch4_gas)*100.
1518          ENDDO
1519        ELSE
1520          DO ig=1,ngrid
1521!           compute vmr methane
1522            vmr_ch4(ig)=qcol(ig,igcm_ch4_gas)*   
1523     &             g/ps(ig)*mmol(igcm_n2)/mmol(igcm_ch4_gas)*100.
1524!           compute density methane
1525            DO l=1,nlayer
1526               zrho_ch4(ig,l)=zq(ig,l,igcm_ch4_gas)*rho(ig,l)   
1527            ENDDO
1528          ENDDO
1529        ENDIF
1530      endif
1531
1532      if (carbox) then
1533        IF (fast) then
1534          DO ig=1,ngrid
1535            vmr_co(ig)=zq(ig,1,igcm_co_gas)*
1536     &                        mmol(igcm_n2)/mmol(igcm_co_gas)*100.
1537          ENDDO
1538        ELSE
1539         DO ig=1,ngrid
1540!           compute vmr CO
1541            vmr_co(ig)=qcol(ig,igcm_co_gas)*   
1542     &             g/ps(ig)*mmol(igcm_n2)/mmol(igcm_co_gas)*100.
1543!           compute density CO
1544            DO l=1,nlayer
1545               zrho_co(ig,l)=zq(ig,l,igcm_co_gas)*rho(ig,l)   
1546            ENDDO
1547         ENDDO
1548        ENDIF
1549      endif
1550
1551      zrho_haze(:,:)=0.
1552      zdqrho_photprec(:,:)=0.
1553      IF (haze.and.aerohaze) then
1554       DO ig=1,ngrid
1555        DO l=1,nlayer
1556               zrho_haze(ig,l)=zq(ig,l,igcm_haze)*rho(ig,l)   
1557               zdqrho_photprec(ig,l)=zdqphot_prec(ig,l)*rho(ig,l)   
1558            ENDDO
1559        ENDDO
1560      ENDIF
1561
1562      IF (fasthaze) then
1563       DO ig=1,ngrid
1564          qcol(ig,igcm_haze)=zq(ig,1,igcm_haze)*pplev(ig,1)/g
1565          qcol(ig,igcm_prec_haze)=zq(ig,1,igcm_prec_haze)*pplev(ig,1)/g
1566       ENDDO
1567      ENDIF
1568
1569c     Info about Ls, declin...
1570      IF (fast) THEN
1571        write(*,*),'Ls=',zls*180./pi,' dec=',declin*180./pi
1572        write(*,*),'zday=',zday,' ps=',globave
1573       IF (lastcall) then
1574         write(*,*),'lastcall'
1575       ENDIF
1576      ELSE
1577       write(*,*),'Ls=',zls*180./pi,'decli=',declin*180./pi,'zday=',zday
1578      ENDIF
1579
1580      lecttsoil=0 ! default value for lecttsoil
1581      call getin("lecttsoil",lecttsoil)
1582      IF (lastcall.and.(ngrid.EQ.1).and.(lecttsoil.eq.1)) THEN
1583      ! save tsoil temperature profile for 1D profile
1584         OPEN(13,file='proftsoil.out',form='formatted')
1585         DO i=1,nsoilmx
1586            write(13,*) tsoil(1,i)
1587         ENDDO
1588         CLOSE(13)
1589      ENDIF
1590     
1591
1592      IF (ngrid.NE.1) THEN
1593!        -------------------------------------------------------------------
1594!        Writing NetCDF file  "RESTARTFI" at the end of the run
1595!        -------------------------------------------------------------------
1596!        Note: 'restartfi' is stored just before dynamics are stored
1597!              in 'restart'. Between now and the writting of 'restart',
1598!              there will have been the itau=itau+1 instruction and
1599!              a reset of 'time' (lastacll = .true. when itau+1= itaufin)
1600!              thus we store for time=time+dtvr
1601
1602         IF(lastcall) THEN
1603
1604            ztime_fin = ptime + ptimestep/(float(iphysiq)*daysec)
1605            write(*,*)'PHYSIQ: for physdem ztime_fin =',ztime_fin
1606
1607            if (paleo) then
1608             ! time range for tendencies of ice flux qsurfyear
1609             zdt_tot=year_day   ! Last year of simulation
1610
1611             masslost(:)=0.
1612             massacc(:)=0.
1613             DO ig=2,ngrid-1
1614                realarea(ig)=area(ig)
1615             ENDDO
1616             realarea(1)=area(1)*iim
1617             realarea(ngrid)=area(ngrid)*iim
1618
1619
1620             DO ig=1,ngrid
1621                ! update new reservoir of ice on the surface
1622                DO iq=1,nq
1623                 ! kg/m2 to be sublimed or condensed during paleoyears
1624                 qsurfyear(ig,iq)=qsurfyear(ig,iq)*
1625     &                       paleoyears*365.25/(zdt_tot*daysec/86400.)
1626
1627                ! special case if we sublime the entire reservoir
1628                 IF (-qsurfyear(ig,iq).gt.qsurf(ig,iq)) THEN
1629                   masslost(iq)=masslost(iq)+realarea(ig)*
1630     &                    (-qsurfyear(ig,iq)-qsurf(ig,iq))
1631                   qsurfyear(ig,iq)=-qsurf(ig,iq)
1632                 ENDIF
1633
1634                 IF (qsurfyear(ig,iq).gt.0.) THEN
1635                   massacc(iq)=massacc(iq)+realarea(ig)*qsurfyear(ig,iq)
1636                 ENDIF
1637
1638                ENDDO
1639             ENDDO
1640
1641             DO ig=1,ngrid
1642                DO iq=1,nq
1643                  qsurfpal(ig,iq)=qsurf(ig,iq)+qsurfyear(ig,iq)
1644                  IF (qsurfyear(ig,iq).gt.0.) THEN
1645                   qsurfpal(ig,iq)=qsurfpal(ig,iq)-
1646     &                   qsurfyear(ig,iq)*masslost(iq)/massacc(iq)
1647                  ENDIF
1648                ENDDO
1649             ENDDO                 
1650             ! Finally ensure conservation of qsurf
1651             DO iq=1,nq
1652               call globalaverage2d(ngrid,qsurf(:,iq),globaveice(iq))
1653               call globalaverage2d(ngrid,qsurfpal(:,iq),
1654     &                                         globavenewice(iq))
1655               IF (globavenewice(iq).gt.0.) THEN
1656                  qsurfpal(:,iq)=qsurfpal(:,iq)*
1657     &                               globaveice(iq)/globavenewice(iq)
1658               ENDIF
1659             ENDDO
1660
1661             ! update new geopotential depending on the ice reservoir
1662             phisfipal(:)=phisfinew(:)+qsurfpal(:,igcm_n2)*g/1000.
1663             !phisfipal(ig)=phisfi(ig)
1664
1665
1666             if (kbo.or.triton) then !  case of Triton : we do not change the orbital parameters
1667
1668               pdaypal=pday ! no increment of pdaypal to keep same evolution of the subsolar point
1669               eccpal=1.-periheli/((periheli+aphelie)/2.)    !no change of ecc
1670               peri_daypal=peri_day ! no change
1671               oblipal=obliquit     ! no change
1672               tpalnew=tpal
1673               adjustnew=adjust
1674
1675             else  ! Pluto
1676               ! update new pday and tpal (Myr) to be set in startfi controle
1677               pdaypal=int(day_ini+paleoyears*365.25/6.3872)
1678               tpalnew=tpal+paleoyears*1.e-6  ! Myrs
1679
1680               ! update new N2 ice adjustment (not tested yet on Pluto)
1681               adjustnew=adjust
1682
1683               ! update new obliquity
1684               oblipal=23./2.*
1685     &            sin(2.*pi/2.77*(tpalnew+0.16))+115.5
1686
1687               ! update new peri_day
1688               call calcperiday(tpalnew,peri_daypal)
1689               !peri_daypal=peri_day
1690
1691               ! update new eccentricity
1692               call calcecc(tpalnew,eccpal)
1693               !eccpal=0.009
1694
1695             endif
1696
1697             write(*,*) "Paleo peri=",peri_daypal,"  tpal=",tpalnew
1698             write(*,*) "Paleo eccpal=",eccpal,"  tpal=",tpalnew
1699
1700             ! create restartfi
1701             call physdem1pal("restartfi.nc",long,lati,nsoilmx,nq,
1702     .            ptimestep,pdaypal,
1703     .            ztime_fin,tsurf,tsoil,emis,q2,qsurfpal,
1704     .            area,albedodat,tidat,zmea,zstd,zsig,
1705     .            zgam,zthe,oblipal,eccpal,tpalnew,adjustnew,phisfipal,
1706     .            peri_daypal)
1707            else
1708
1709               call physdem1("restartfi.nc",long,lati,nsoilmx,nq,
1710     .              ptimestep,pday,
1711     .              ztime_fin,tsurf,tsoil,emis,q2,qsurf,
1712     .              area,albedodat,tidat,zmea,zstd,zsig,
1713     .              zgam,zthe)
1714
1715            endif
1716
1717         ENDIF
1718
1719!        -----------------------------------------------------------------
1720!        Saving statistics :
1721!        -----------------------------------------------------------------
1722!        ("stats" stores and accumulates 8 key variables in file "stats.nc"
1723!        which can later be used to make the statistic files of the run:
1724!        "stats")          only possible in 3D runs !
1725
1726         
1727         IF (callstats) THEN
1728             write (*,*) "stats have been turned off in the code.
1729     &                You can manage your own output in physiq.F "
1730             stop
1731
1732!            call wstats(ngrid,"ps","Surface pressure","Pa",2,ps)
1733!            call wstats(ngrid,"tsurf","Surface temperature","K",2,tsurf)
1734!             call wstats(ngrid,"fluxsurf_lw",
1735!     .                 "Thermal IR radiative flux to surface","W.m-2",2,
1736!     .                 fluxsurf_lw)
1737!             call wstats(ngrid,"fluxsurf_sw",
1738!     .                  "Solar radiative flux to surface","W.m-2",2,
1739!     .                   fluxsurf_sw_tot)
1740!             call wstats(ngrid,"fluxtop_lw",
1741!     .                  "Thermal IR radiative flux to space","W.m-2",2,
1742!     .                  fluxtop_lw)
1743!             call wstats(ngrid,"fluxtop_sw",
1744!     .                  "Solar radiative flux to space","W.m-2",2,
1745!     .                  fluxtop_sw_tot)
1746
1747!            call wstats(ngrid,"temp","Atmospheric temperature","K",3,zt)
1748!            call wstats(ngrid,"u","Zonal (East-West) wind","m.s-1",3,zu)
1749!            call wstats(ngrid,"v","Meridional (North-South) wind",
1750!     .                  "m.s-1",3,zv)
1751
1752            IF(lastcall) THEN
1753              write (*,*) "Writing stats..."
1754              call mkstats(ierr)
1755            ENDIF
1756          ENDIF !if callstats
1757
1758
1759!        ---------------------------------------------------------------------
1760!        3D OUTPUTS
1761!        ----------------------------------------------------------------------
1762!        output in netcdf file "DIAGFI", containing any variable for diagnostic
1763!        (output with  period "ecritphy", set in "run.def")
1764!        ----------------------------------------------------------------------
1765       
1766!          if(MOD(countG3D,saveG3D).eq.0)then
1767!          print*,'countG3D',countG3D
1768
1769!!       BASIC
1770
1771        call WRITEDIAGFI(ngrid,"tsurf","Surface temperature","K",2,
1772     &                  tsurf)
1773        call WRITEDIAGFI(ngrid,"rice_ch4","ch4 ice mass mean radius",
1774     &         "m",3,rice_ch4)
1775        call WRITEDIAGFI(ngrid,"area","area","m",2,area)
1776        call WRITEDIAGFI(ngrid,"mu0","cos sza","m",2,mu0)
1777        call WRITEDIAGFI(ngrid,"fract","fractional day","",2,fract)
1778        call WRITEDIAGFI(ngrid,"declin","declin","deg",0,declin*180./pi)
1779        call WRITEDIAGFI(ngrid,"ls","ls","deg",0,zls*180./pi)
1780        call WRITEDIAGFI(ngrid,"dist_sol","dist_sol","AU",0,dist_sol)
1781        call WRITEDIAGFI(ngrid,"phisfi","phisfi"," ",2,phisfi)
1782!        call WRITEDIAGFI(ngrid,"tsub","subsurface temperature","K",
1783!     &       1,tsub)
1784!        call WRITEDIAGFI(ngrid,"phitop","phitop"," ",2,phitop)
1785
1786!        ENERGY - Total energy balance diagnostics
1787
1788        call WRITEDIAGFI(ngrid,"albedo","albedo","sans dim",2,
1789     &                  albedo)
1790        call WRITEDIAGFI(ngrid,"emissivite","emissivite","sans dim",2,
1791     &                  emis)
1792        call WRITEDIAGFI(ngrid,"fluxtop_dn","fluxtop_dn","sans dim",2,
1793     &                  fluxtop_dn)
1794        call WRITEDIAGFI(ngrid,"ISR","incoming stellar rad.","W m-2",
1795     &       2,fluxtop_dn)
1796        call WRITEDIAGFI(ngrid,"ASR","absorbed stellar rad.","W m-2",
1797     &       2,fluxabs_sw)
1798        call WRITEDIAGFI(ngrid,"OLR","outgoing longwave rad.","W m-2",
1799     &       2,fluxtop_lw)
1800
1801        IF (fast) then
1802          ! pressure reprocessed in nogcm.F
1803          call WRITEDIAGFI(ngrid,"globave","surf press","Pa",0,globave)
1804          call WRITEDIAGFI(ngrid,"ps","surf press","Pa",2,ps)
1805          call WRITEDIAGFI(ngrid,"fluxrad","fluxrad",
1806     &                                        "W m-2",2,fluxrad)
1807          call WRITEDIAGFI(ngrid,"fluxgrd","fluxgrd",
1808     &                                        "W m-2",2,fluxgrd)
1809          call WRITEDIAGFI(ngrid,"capcal","capcal",
1810     &                                        "W.s m-2 K-1",2,capcal)
1811!          call WRITEDIAGFI(ngrid,"dplanck","dplanck",
1812!     &                                        "W.s m-2 K-1",2,dplanck)
1813          call WRITEDIAGFI(ngrid,"tsoil","tsoil","K",3,tsoil)
1814
1815          ! If we want to see tidat evolution with time:
1816          call WRITEDIAGFI(ngrid,"tidat","tidat","SI",3,tidat_out)
1817
1818
1819          IF (fasthaze) then
1820             call WRITEDIAGFI(ngrid,"gradflux","gradflux",
1821     &                                        "Ph m-2 s-1",2,gradflux)
1822             call WRITEDIAGFI(ngrid,"fluxbot","flux bottom",
1823     &                                        "Ph m-2 s-1",2,fluxbot)
1824             call WRITEDIAGFI(ngrid,"fluxbotsol","flux bottom sol",
1825     &                                  "Ph m-2 s-1",2,fluxlym_sol_bot)
1826             call WRITEDIAGFI(ngrid,"fluxbotipm","flux bottom ipm",
1827     &                                  "Ph m-2 s-1",2,fluxlym_ipm_bot)
1828             call WRITEDIAGFI(ngrid,"fluxlymipm","flux incid ipm",
1829     &                                  "Ph m-2 s-1",2,flym_ipm)
1830             call WRITEDIAGFI(ngrid,"fluxlymsol","flux incid sol",
1831     &                                  "Ph m-2 s-1",2,flym_sol)
1832             call WRITEDIAGFI(ngrid,"tend_prodhaze","prod haze",
1833     &                                    "kg m-2 s-1",2,zdqsprodhaze)
1834             call WRITEDIAGFI(ngrid,"tend_lostch4","tend ch4",
1835     &                     "kg kg-1 s-1",2,zdqprodhaze(1,igcm_ch4_gas))
1836             call WRITEDIAGFI(ngrid,"tend_prodhaze","tend prod haze",
1837     &                     "kg kg-1 s-1",2,zdqprodhaze(1,igcm_haze))
1838          ENDIF
1839          IF (paleo) then
1840            call WRITEDIAGFI(ngrid,"qsurfn2_year","qsurfn2_year",
1841     &                "kg m-2.plutoyear-1",2,qsurfyear(:,1))
1842            call WRITEDIAGFI(ngrid,"phisfipal","phisfipal",
1843     &                                        " ",2,phisfipal)
1844            call WRITEDIAGFI(ngrid,"zdqflow","zdqflow",
1845     &                                        " ",2,zdqflow(1,igcm_n2))
1846          ENDIF
1847        ELSE
1848          call WRITEDIAGFI(ngrid,"ps","surface pressure","Pa",2,ps)
1849          call WRITEDIAGFI(ngrid,"w","Vertical wind","m.s-1",3,pw)
1850          call WRITEDIAGFI(ngrid,"rho","density","none",3,rho)
1851          call WRITEDIAGFI(ngrid,"temp","temperature","K",3,zt)
1852          call WRITEDIAGFI(ngrid,"u","Zonal wind","m.s-1",3,zu)
1853          call WRITEDIAGFI(ngrid,"v","Meridional wind","m.s-1",3,zv)
1854         ! call WRITEDIAGFI(ngrid,"pressure","Pression","Pa",3,pplay)
1855          call WRITEDIAGFI(ngrid,"fluxrad","fluxrad",
1856     &                                        "W m-2",2,fluxrad)
1857          call WRITEDIAGFI(ngrid,"fluxgrd","fluxgrd",
1858     &                                        "W m-2",2,fluxgrd)
1859        ENDIF
1860
1861!       Usually not used :
1862
1863!        call WRITEDIAGFI(ngrid,"q2","q2","kg.m-3",3,q2)
1864        call WRITEDIAGFI(ngrid,'Teta','T potentielle','K',3,zh)
1865!        call WRITEDIAGFI(ngrid,"DYN","dynamical heat input","W m-2",
1866!     &       2,fluxdyn)
1867
1868!        TENDANCIES
1869
1870        call WRITEDIAGFI(ngrid,"dps","dps","K",2,pdpsrf)
1871        call WRITEDIAGFI(ngrid,"zdtsw","SW heating","K s-1",3,zdtsw)
1872        call WRITEDIAGFI(ngrid,"zdtlw","LW heating","K s-1",3,zdtlw)
1873        call WRITEDIAGFI(ngrid,"zdtc","tendancy T cond N2","K",3,zdtc)
1874        call WRITEDIAGFI(ngrid,"zdtch4cloud","tendancy T ch4cloud",
1875     &                                        "K",3,zdtch4cloud)
1876        call WRITEDIAGFI(ngrid,"zdtcocloud","tendancy T cocloud",
1877     &                                        "K",3,zdtcocloud)
1878        call WRITEDIAGFI(ngrid,"zdtsurfc","zdtsurfc","K",2,zdtsurfc)
1879        call WRITEDIAGFI(ngrid,"zdtdif","zdtdif","K",3,zdtdif)
1880        call WRITEDIAGFI(ngrid,"zdtconduc","tendancy T conduc",
1881     &                                                "K",3,zdtconduc)
1882        call WRITEDIAGFI(ngrid,"zdtdyn","Dyn. heating","T s-1",3,zdtdyn)
1883        call WRITEDIAGFI(ngrid,"zdtrad","rad heating","T s-1",3,dtrad)
1884        call WRITEDIAGFI(ngrid,"zdtadj","conv adj","T s-1",3,zdtadj)
1885        call WRITEDIAGFI(ngrid,"zdqcloud","ch4 cloud","T s-1",
1886     &                  3,zdqch4cloud(1,1,igcm_ch4_ice))
1887        call WRITEDIAGFI(ngrid,"zdqcloudgas","ch4 cloud","T s-1",
1888     &                  3,zdqch4cloud(1,1,igcm_ch4_gas))
1889        call WRITEDIAGFI(ngrid,"zdqcn2_c","zdq condn2","",3,zdqc(:,:,3))
1890        call WRITEDIAGFI(ngrid,"zdqdif_c","zdqdif","",3,zdqdif(:,:,3))
1891        call WRITEDIAGFI(ngrid,"zdqadj_c","zdqadj","",3,zdqadj(:,:,3))
1892        !call WRITEDIAGFI(ngrid,"zdqsed_h","zdqsed","",3,zdqsed(:,:,7))
1893        !call WRITEDIAGFI(ngrid,"zdqssed","zdqssed","",2,zdqssed)
1894        call WRITEDIAGFI(ngrid,"zq1temp_ch4"," "," ",2,zq1temp_ch4)
1895        call WRITEDIAGFI(ngrid,"qsat_ch4"," "," ",2,qsat_ch4)
1896        call WRITEDIAGFI(ngrid,"qsat_ch4_l1"," "," ",2,qsat_ch4_l1)
1897        call WRITEDIAGFI(ngrid,"senshf1","senshf1"," ",2,sensiblehf1)
1898        call WRITEDIAGFI(ngrid,"senshf2","senshf2"," ",2,sensiblehf2)
1899
1900
1901!        OTHERS
1902
1903!      call WRITEDIAGFI(ngrid,"dWtotdifv","dWtotdifv","kg m-2",1,dWtot)
1904!      call WRITEDIAGFI(ngrid,"dWtotsdifv","dWtotsdifv","kgm-2",1,dWtots)
1905!      call WRITEDIAGFI(ngrid,"nconsMX","nconsMX","kgm-2s-1",1,nconsMAX)
1906
1907
1908!       TRACERS
1909
1910       if (tracer) then
1911
1912!!!         afficher la tendance sur le flux de la glace
1913          call WRITEDIAGFI(ngridmx,'n2_iceflux',
1914     &                    'n2_iceflux',
1915     &                      "kg m^-2 s^-1",2,flusurf(1,igcm_n2) )
1916
1917        do iq=1,nq
1918          call WRITEDIAGFI(ngrid,noms(iq),noms(iq),'kg/kg',3,zq(1,1,iq))
1919          call WRITEDIAGFI(ngrid,trim(noms(iq))//'_Tcondn2',
1920     &                           trim(noms(iq))//'_Tcondn2',
1921     &                      'kg/kg',3,zdqc(1,1,iq))
1922
1923          call WRITEDIAGFI(ngridmx,trim(noms(iq))//'_surf',
1924     &                    trim(noms(iq))//'_surf',
1925     &                    'kg m^-2',2,qsurf(1,iq) )
1926
1927          call WRITEDIAGFI(ngridmx,trim(noms(iq))//'_col',
1928     &                    trim(noms(iq))//'_col',
1929     &                    'kg m^-2',2,qcol(1,iq) )
1930 
1931!         call WRITEDIAGFI(ngridmx,trim(noms(iq))//'_aero',
1932!     &                    trim(noms(iq))//'_aero',
1933!     &                    'kg/kg',3,aerosol(1,1,iq))
1934
1935
1936        enddo
1937         
1938         call WRITEDIAGFI(ngridmx,'haze_reff',
1939     &                    'haze_reff',
1940     &                    'm',3,reffrad(1,1,1))
1941
1942        if (methane) then
1943
1944         call WRITEDIAGFI(ngridmx,'ch4_iceflux',
1945     &                    'ch4_iceflux',
1946     &                      "kg m^-2 s^-1",2,flusurf(1,igcm_ch4_ice) )
1947
1948         call WRITEDIAGFI(ngrid,"vmr_ch4","vmr_ch4","%",
1949     &                                            2,vmr_ch4)
1950         if (.not.fast) THEN
1951          call WRITEDIAGFI(ngrid,"zrho_ch4","zrho_ch4","kg.m-3",
1952     &                                            3,zrho_ch4(:,:))
1953         endif
1954
1955!        if (fast) THEN
1956!             call WRITEDIAGFI(ngrid,"zq1_ch4","zq ch4","kg m-2",
1957!    &                                      2,zq(1,1,igcm_ch4_gas))
1958!        endif
1959
1960         ! Tendancies
1961         call WRITEDIAGFI(ngrid,"zdqch4cloud","ch4 cloud","T s-1",
1962     &                  3,zdqch4cloud(1,1,igcm_ch4_gas))
1963         call WRITEDIAGFI(ngrid,"zdqcn2_ch4","zdq condn2 ch4","",
1964     &                   3,zdqc(:,:,igcm_ch4_gas))
1965         call WRITEDIAGFI(ngrid,"zdqdif_ch4","zdqdif ch4","",
1966     &                   3,zdqdif(:,:,igcm_ch4_gas))
1967         call WRITEDIAGFI(ngrid,"zdqsdif_ch4_ice","zdqsdif ch4","",
1968     &                   2,zdqsdif(:,igcm_ch4_ice))
1969         call WRITEDIAGFI(ngrid,"zdqadj_ch4","zdqadj ch4","",
1970     &                   3,zdqadj(:,:,igcm_ch4_gas))
1971         call WRITEDIAGFI(ngrid,"zdqsed_ch4","zdqsed ch4","",
1972     &                   3,zdqsed(:,:,igcm_ch4_gas))
1973         call WRITEDIAGFI(ngrid,"zdqssed_ch4","zdqssed ch4","",
1974     &                   2,zdqssed(:,igcm_ch4_gas))
1975        call WRITEDIAGFI(ngrid,"zdtch4cloud","ch4 cloud","T s-1",
1976     &                  3,zdtch4cloud)
1977
1978        endif
1979
1980        if (carbox) then
1981
1982         call WRITEDIAGFI(ngridmx,'co_iceflux',
1983     &                    'co_iceflux',
1984     &                      "kg m^-2 s^-1",2,flusurf(1,igcm_co_ice) )
1985
1986         call WRITEDIAGFI(ngrid,"vmr_co","vmr_co","%",
1987     &                                            2,vmr_co)
1988
1989         if (.not.fast) THEN
1990          call WRITEDIAGFI(ngrid,"zrho_co","zrho_co","kg.m-3",
1991     &                                            3,zrho_co(:,:))
1992         endif
1993
1994!        if (fast) THEN
1995!        call WRITEDIAGFI(ngrid,"zq1_co","zq co","kg m-2",
1996!    &                                      2,zq(1,1,igcm_co_gas))
1997!        endif
1998
1999         ! Tendancies
2000!        call WRITEDIAGFI(ngrid,"zdqcocloud","co cloud","T s-1",
2001!    &                  3,zdqcocloud(1,1,igcm_co_gas))
2002!        call WRITEDIAGFI(ngrid,"zdqcn2_co","zdq condn2 co","",
2003!    &                   3,zdqc(:,:,igcm_co_gas))
2004!        call WRITEDIAGFI(ngrid,"zdqdif_co","zdqdif co","",
2005!    &                   3,zdqdif(:,:,igcm_co_gas))
2006!        call WRITEDIAGFI(ngrid,"zdqsdif_co_ice","zdqsdif co","",
2007!    &                   2,zdqsdif(:,igcm_co_ice))
2008!        call WRITEDIAGFI(ngrid,"zdqadj_co","zdqadj co","",
2009!    &                   3,zdqadj(:,:,igcm_co_gas))
2010!        call WRITEDIAGFI(ngrid,"zdqsed_co","zdqsed co","",
2011!    &                   3,zdqsed(:,:,igcm_co_gas))
2012!        call WRITEDIAGFI(ngrid,"zdqssed_co","zdqssed co","",
2013!    &                   2,zdqssed(:,igcm_co_gas))
2014!       call WRITEDIAGFI(ngrid,"zdtcocloud","co cloud","T s-1",
2015!    &                  3,zdtcocloud)
2016
2017       endif
2018
2019        if (haze) then
2020       
2021!         call WRITEDIAGFI(ngrid,"zrho_haze","zrho_haze","kg.m-3",
2022!     &                                            3,zrho_haze(:,:))
2023         call WRITEDIAGFI(ngrid,"zdqrho_photprec","zdqrho_photprec",
2024     &                  "kg.m-3.s-1",3,zdqrho_photprec(:,:))
2025         call WRITEDIAGFI(ngrid,"zdqphot_prec","zdqphot_prec","",
2026     &                                         3,zdqphot_prec(:,:))
2027         call WRITEDIAGFI(ngrid,"zdqhaze_ch4","zdqhaze_ch4","",
2028     &             3,zdqhaze(:,:,igcm_ch4_gas))
2029         call WRITEDIAGFI(ngrid,"zdqhaze_prec","zdqhaze_prec","",
2030     &             3,zdqhaze(:,:,igcm_prec_haze))
2031         call WRITEDIAGFI(ngrid,"zdqhaze_haze","zdqhaze_haze","",
2032     &             3,zdqhaze(:,:,igcm_haze))
2033         call WRITEDIAGFI(ngrid,"zdqphot_ch4","zdqphot_ch4","",
2034     &                                         3,zdqphot_ch4(:,:))
2035         call WRITEDIAGFI(ngrid,"zdqconv_prec","zdqconv_prec","",
2036     &                                        3,zdqconv_prec(:,:))
2037         call WRITEDIAGFI(ngrid,"zdqssed_haze","zdqssed haze",
2038     &        "kg/m2/s",2,zdqssed(:,igcm_haze))
2039!         call WRITEDIAGFI(ngrid,"zdqhaze_col","zdqhaze col","kg/m2/s",
2040!     &                   2,zdqhaze_col(:))
2041        endif
2042
2043        if (aerohaze) then
2044         call WRITEDIAGFI(ngridmx,"tau_col",
2045     &         "Total aerosol optical depth","opacity",2,tau_col)
2046        endif
2047
2048!         call WRITEDIAGFI(ngridmx,"tau_col",
2049!     &         "Total aerosol optical depth","[]",2,tau_col)
2050       endif
2051
2052!       countG3D=1
2053!       else
2054!            countG3D=countG3D+1
2055!       endif ! if time to save
2056
2057!      ----------------------------------------------------------------------
2058!      1D OUTPUTS
2059!      ----------------------------------------------------------------------
2060      ELSE         ! if(ngrid.eq.1)
2061
2062       if(countG1D.eq.saveG1D)then
2063         
2064!      BASIC 1D ONLY
2065
2066          call WRITEDIAGFI(ngrid,"ISR","incoming stellar rad.","W m-2",
2067     &       0,fluxtop_dn)
2068          call WRITEDIAGFI(ngrid,"ASR","absorbed stellar rad.","W m-2",
2069     &       0,fluxabs_sw)
2070          call WRITEDIAGFI(ngrid,"OLR","outgoing longwave rad.","W m-2",
2071     &       0,fluxtop_lw)
2072          call WRITEDIAGFI(ngrid,"tsurf","Surface temperature","K",0,
2073     &                  tsurf)
2074          call WRITEDIAGFI(ngrid,"ps","surface pressure","Pa",0,ps)
2075          call WRITEDIAGFI(ngrid,"temp","temperature","K",3,zt)
2076
2077          call WRITEDIAGFI(ngrid,"fluxsurf_sw","sw surface flux",
2078     &                                         "K",0,fluxsurf_sw)
2079          call WRITEDIAGFI(ngrid,"zdtsw","SW heating","T s-1",3,zdtsw)
2080          call WRITEDIAGFI(ngrid,"zdtlw","LW heating","T s-1",3,zdtlw)
2081          call WRITEDIAGFI(ngrid,"zdtdif","zdtdif","K",3,zdtdif)
2082          call WRITEDIAGFI(ngrid,"zdtconduc","tendancy T conduc",
2083     &                                                "K",3,zdtconduc)
2084
2085          call WRITEDIAGFI(ngrid,"fluxsurf_sw","sw surface flux",
2086     &                                         "K",0,fluxsurf_sw)
2087          call WRITEDIAGFI(ngrid,"declin","lat subsolaire",
2088     &                                         "deg",0,declin*180./pi)
2089          call WRITEDIAGFI(ngrid,"ls","ls","deg",0,zls*180./pi)
2090          call WRITEDIAGFI(ngrid,"dist_sol","dist_sol","AU",0,dist_sol)
2091          call WRITEDIAGFI(ngrid,"mu0","solar zenith angle",
2092     &                                         "deg",0,mu0)
2093          call WRITEDIAGFI(ngrid,"albedo","albedo",
2094     &                                         "",0,albedo)
2095          call WRITEDIAGFI(ngrid,"emis","emis",
2096     &                                         "",0,emis)
2097          call WRITEDIAGFI(ngrid,"tsoil","tsoil","K",1,tsoil(1,:))
2098          call WRITEDIAGFI(ngrid,"tidat","tidat","SI",1,tidat_out(1,:))
2099
2100!       OUTPUT OF TENDANCIES         
2101!          call WRITEDIAGFI(ngrid,"zdqcloud","ch4 cloud","T s-1",
2102!     &                  3,zdqcloud(1,1,igcm_ch4_gas))
2103!          call WRITEDIAGFI(ngrid,"zdqcn2","zdq condn2","",1,zdqc(:,:,3))
2104!          call WRITEDIAGFI(ngrid,"zdqdif","zdqdif","",1,zdqdif(:,:,3))
2105!          call WRITEDIAGFI(ngrid,"zdqadj","zdqadj","",1,zdqadj(:,:,3))
2106!          call WRITEDIAGFI(ngrid,"zdqsed","zdqsed","",1,zdqsed(:,:,3))
2107!          call WRITEDIAGFI(ngrid,"zdqc","zdqc","",1,zdqc(:,:,3))
2108!          call WRITEDIAGFI(ngrid,"zdqhaze","zdqhaze","",1,
2109!     &               zdqhaze(:,:,3))
2110
2111        ! 1D methane
2112        if (methane) then
2113
2114         call WRITEDIAGFI(ngridmx,'ch4_iceflux',
2115     &                    'ch4_iceflux',
2116     &                      "kg m^-2 s^-1",0,flusurf(1,igcm_ch4_ice) )
2117
2118         call WRITEDIAGFI(ngrid,"vmr_ch4","vmr_ch4","%",
2119     &                                            0,vmr_ch4(1))
2120         call WRITEDIAGFI(ngrid,"zrho_ch4","zrho_ch4","kg.m-3",
2121     &                                            1,zrho_ch4(1,:))
2122
2123         ! Tendancies
2124         call WRITEDIAGFI(ngrid,"zdqch4cloud","ch4 cloud","T s-1",
2125     &                  1,zdqch4cloud(1,1,igcm_ch4_gas))
2126         call WRITEDIAGFI(ngrid,"zdqcn2_ch4","zdq condn2 ch4","",
2127     &                   1,zdqc(1,:,igcm_ch4_gas))
2128         call WRITEDIAGFI(ngrid,"zdqdif_ch4","zdqdif ch4","",
2129     &                   1,zdqdif(1,:,igcm_ch4_gas))
2130         call WRITEDIAGFI(ngrid,"zdqsdif_ch4_ice","zdqsdif ch4","",
2131     &                   1,zdqsdif(:,igcm_ch4_ice))
2132         call WRITEDIAGFI(ngrid,"zdqadj_ch4","zdqadj ch4","",
2133     &                   1,zdqadj(1,:,igcm_ch4_gas))
2134         call WRITEDIAGFI(ngrid,"zdqsed_ch4","zdqsed ch4","",
2135     &                   1,zdqsed(1,:,igcm_ch4_gas))
2136         call WRITEDIAGFI(ngrid,"zdqssed_ch4","zdqssed ch4","",
2137     &                   0,zdqssed(1,igcm_ch4_gas))
2138
2139        endif
2140
2141        ! 1D Haze
2142        if (haze) then
2143       
2144!         call WRITEDIAGFI(ngrid,"zrho_haze","zrho_haze","kg.m-3",
2145!     &                                            1,zrho_haze(:,:))
2146         call WRITEDIAGFI(ngrid,"zdqrho_photprec","zdqrho_photprec",
2147     &                  "kg.m-3.s-1",3,zdqrho_photprec)
2148         call WRITEDIAGFI(ngrid,"zdqphot_prec","zdqphot_prec","",
2149     &                                            3,zdqphot_prec)
2150         call WRITEDIAGFI(ngrid,"zdqhaze_ch4","zdqhaze_ch4","",
2151     &             1,zdqhaze(1,:,igcm_ch4_gas))
2152         call WRITEDIAGFI(ngrid,"zdqhaze_prec","zdqhaze_prec","",
2153     &             1,zdqhaze(1,:,igcm_prec_haze))
2154         call WRITEDIAGFI(ngrid,"zdqhaze_haze","zdqhaze_haze","",
2155     &             1,zdqhaze(1,:,igcm_haze))
2156         call WRITEDIAGFI(ngrid,"zdqphot_ch4","zdqphot_ch4","",
2157     &                                         3,zdqphot_ch4)
2158!         call WRITEDIAGFI(ngrid,"zdqconv_prec","zdqconv_prec","",
2159!     &                                         1,zdqconv_prec(1,:))
2160         call WRITEDIAGFI(ngrid,"zdqssed_haze","zdqssed haze","kg/m2/s",
2161     &                   0,zdqssed(1,igcm_haze))
2162!         call WRITEDIAGFI(ngrid,"zdqhaze_col","zdqhaze col","kg/m2/s",
2163!     &                   0,zdqhaze_col(:))
2164         if (haze_radproffix) then
2165           call WRITEDIAGFI(ngridmx,'haze_reffrad','haze_reffrad','m',
2166     &                   3,reffrad(1,1,1))
2167         endif
2168        endif
2169
2170        if (aerohaze) then
2171         call WRITEDIAGFI(ngridmx,"tau_col",
2172     &         "Total aerosol optical depth","[]",0,tau_col(1))
2173         call WRITEDIAGFI(ngridmx,"tau_aero",
2174     &         "aerosol optical depth","[]",3,aerosol(1,1,1))
2175        endif
2176       
2177!      TRACERS 1D ONLY
2178        if (tracer) then
2179         do iq=1,nq
2180          call WRITEDIAGFI(ngrid,noms(iq),noms(iq),'kg/kg',3,zq(1,1,iq))
2181          call WRITEDIAGFI(ngridmx,trim(noms(iq))//'_surf',
2182     &                    trim(noms(iq))//'_surf',
2183     &                    'kg m^-2',2,qsurf(1,iq) )
2184          call WRITEDIAGFI(ngridmx,trim(noms(iq))//'_col',
2185     &                    trim(noms(iq))//'_col',
2186     &                    'kg m^-2',2,qcol(1,iq) )
2187         enddo
2188        endif
2189
2190         countG1D=1
2191         else
2192            countG1D=countG1D+1
2193         endif ! if time to save
2194
2195      END IF       ! if(ngrid.ne.1)
2196
2197!      countG3D=countG3D+1
2198      icount=icount+1
2199
2200      RETURN
2201      END
Note: See TracBrowser for help on using the repository browser.