source: LMDZ4/branches/LMDZ4-dev/libf/dyn3d/leapfrog.F @ 1114

Last change on this file since 1114 was 1114, checked in by jghattas, 15 years ago

Creation du module infotrac:

  • contient les variables de advtrac.h
  • contient la subroutine iniadvtrac renommer en infotrac_init
  • le nombre des traceurs est lu dans tracer.def en dynamique (ou par default ou recu par INCA)
  • ce module est utilise dans la dynamique et la physique
  • contient aussi la variable nbtr qui avant etait stockee dans dimphy

Le fichier advtrac.h n'existe plus.
La compilation ne prend plus en compte le nombre de traceur.

/JG

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 19.9 KB
Line 
1!
2c
3c
4      SUBROUTINE leapfrog(ucov,vcov,teta,ps,masse,phis,q,clesphy0,
5     &                    time_0)
6
7
8cIM : pour sortir les param. du modele dans un fis. netcdf 110106
9      USE IOIPSL
10      USE infotrac
11
12      IMPLICIT NONE
13
14c      ......   Version  du 10/01/98    ..........
15
16c             avec  coordonnees  verticales hybrides
17c   avec nouveaux operat. dissipation * ( gradiv2,divgrad2,nxgraro2 )
18
19c=======================================================================
20c
21c   Auteur:  P. Le Van /L. Fairhead/F.Hourdin
22c   -------
23c
24c   Objet:
25c   ------
26c
27c   GCM LMD nouvelle grille
28c
29c=======================================================================
30c
31c  ... Dans inigeom , nouveaux calculs pour les elongations  cu , cv
32c      et possibilite d'appeler une fonction f(y)  a derivee tangente
33c      hyperbolique a la  place de la fonction a derivee sinusoidale.
34
35c  ... Possibilite de choisir le shema pour l'advection de
36c        q  , en modifiant iadv dans traceur.def  (10/02) .
37c
38c      Pour Van-Leer + Vapeur d'eau saturee, iadv(1)=4. (F.Codron,10/99)
39c      Pour Van-Leer iadv=10
40c
41c-----------------------------------------------------------------------
42c   Declarations:
43c   -------------
44
45#include "dimensions.h"
46#include "paramet.h"
47#include "comconst.h"
48#include "comdissnew.h"
49#include "comvert.h"
50#include "comgeom.h"
51#include "logic.h"
52#include "temps.h"
53#include "control.h"
54#include "ener.h"
55#include "description.h"
56#include "serre.h"
57#include "com_io_dyn.h"
58#include "iniprint.h"
59#include "academic.h"
60
61! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique
62! #include "clesphys.h"
63
64      INTEGER         longcles
65      PARAMETER     ( longcles = 20 )
66      REAL  clesphy0( longcles )
67
68      real zqmin,zqmax
69      INTEGER nbetatmoy, nbetatdem,nbetat
70
71c   variables dynamiques
72      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants
73      REAL teta(ip1jmp1,llm)                 ! temperature potentielle
74      REAL q(ip1jmp1,llm,nqtot)               ! champs advectes
75      REAL ps(ip1jmp1)                       ! pression  au sol
76      REAL p (ip1jmp1,llmp1  )               ! pression aux interfac.des couches
77      REAL pks(ip1jmp1)                      ! exner au  sol
78      REAL pk(ip1jmp1,llm)                   ! exner au milieu des couches
79      REAL pkf(ip1jmp1,llm)                  ! exner filt.au milieu des couches
80      REAL masse(ip1jmp1,llm)                ! masse d'air
81      REAL phis(ip1jmp1)                     ! geopotentiel au sol
82      REAL phi(ip1jmp1,llm)                  ! geopotentiel
83      REAL w(ip1jmp1,llm)                    ! vitesse verticale
84
85c variables dynamiques intermediaire pour le transport
86      REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm) !flux de masse
87
88c   variables dynamiques au pas -1
89      REAL vcovm1(ip1jm,llm),ucovm1(ip1jmp1,llm)
90      REAL tetam1(ip1jmp1,llm),psm1(ip1jmp1)
91      REAL massem1(ip1jmp1,llm)
92
93c   tendances dynamiques
94      REAL dv(ip1jm,llm),du(ip1jmp1,llm)
95      REAL dteta(ip1jmp1,llm),dq(ip1jmp1,llm,nqtot),dp(ip1jmp1)
96
97c   tendances de la dissipation
98      REAL dvdis(ip1jm,llm),dudis(ip1jmp1,llm)
99      REAL dtetadis(ip1jmp1,llm)
100
101c   tendances physiques
102      REAL dvfi(ip1jm,llm),dufi(ip1jmp1,llm)
103      REAL dtetafi(ip1jmp1,llm),dqfi(ip1jmp1,llm,nqtot),dpfi(ip1jmp1)
104
105c   variables pour le fichier histoire
106      REAL dtav      ! intervalle de temps elementaire
107
108      REAL tppn(iim),tpps(iim),tpn,tps
109c
110      INTEGER itau,itaufinp1,iav
111      INTEGER*4  iday ! jour julien
112      REAL       time ! Heure de la journee en fraction d'1 jour
113
114      REAL  SSUM
115      REAL time_0 , finvmaold(ip1jmp1,llm)
116
117cym      LOGICAL  lafin
118      LOGICAL :: lafin=.false.
119      INTEGER ij,iq,l
120      INTEGER ik
121
122      real time_step, t_wrt, t_ops
123
124      REAL rdayvrai,rdaym_ini
125      LOGICAL first,callinigrads
126cIM : pour sortir les param. du modele dans un fis. netcdf 110106
127      save first
128      data first/.true./
129      real dt_cum, zjulian
130      character*10 infile
131      integer zan, tau0, thoriid
132      integer nid_ctesGCM
133      save nid_ctesGCM
134      real degres
135      real rlong(iip1), rlatg(jjp1)
136      real zx_tmp_2d(iip1,jjp1)
137      integer ndex2d(iip1*jjp1)
138      logical ok_sync
139      parameter (ok_sync = .true.)
140
141      data callinigrads/.true./
142      character*10 string10
143
144      REAL alpha(ip1jmp1,llm),beta(ip1jmp1,llm)
145      REAL :: flxw(ip1jmp1,llm)  ! flux de masse verticale
146
147c+jld variables test conservation energie
148      REAL ecin(ip1jmp1,llm),ecin0(ip1jmp1,llm)
149C     Tendance de la temp. potentiel d (theta)/ d t due a la
150C     tansformation d'energie cinetique en energie thermique
151C     cree par la dissipation
152      REAL dtetaecdt(ip1jmp1,llm)
153      REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm)
154      REAL vnat(ip1jm,llm),unat(ip1jmp1,llm)
155      REAL      d_h_vcol, d_qt, d_qw, d_ql, d_ec
156      CHARACTER*15 ztit
157!IM   INTEGER   ip_ebil_dyn  ! PRINT level for energy conserv. diag.
158!IM   SAVE      ip_ebil_dyn
159!IM   DATA      ip_ebil_dyn/0/
160c-jld
161
162      character*80 dynhist_file, dynhistave_file
163      character*20 modname
164      character*80 abort_message
165
166C Calendrier
167      LOGICAL true_calendar
168      PARAMETER (true_calendar = .false.)
169
170      logical dissip_conservative
171      save dissip_conservative
172      data dissip_conservative/.true./
173
174      LOGICAL prem
175      save prem
176      DATA prem/.true./
177      INTEGER testita
178      PARAMETER (testita = 9)
179
180      logical , parameter :: flag_verif = .false.
181     
182
183      integer itau_w   ! pas de temps ecriture = itap + itau_phy
184
185
186      itaufin   = nday*day_step
187      itaufinp1 = itaufin +1
188      modname="leapfrog"
189     
190
191      itau = 0
192      iday = day_ini+itau/day_step
193      time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
194         IF(time.GT.1.) THEN
195          time = time-1.
196          iday = iday+1
197         ENDIF
198
199
200c-----------------------------------------------------------------------
201c   On initialise la pression et la fonction d'Exner :
202c   --------------------------------------------------
203
204      dq=0.
205      CALL pression ( ip1jmp1, ap, bp, ps, p       )
206      CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf )
207
208c-----------------------------------------------------------------------
209c   Debut de l'integration temporelle:
210c   ----------------------------------
211
212   1  CONTINUE
213
214
215#ifdef CPP_IOIPSL
216      if (ok_guide.and.(itaufin-itau-1)*dtvr.gt.21600) then
217        call guide(itau,ucov,vcov,teta,q,masse,ps)
218      else
219        IF(prt_level>9)WRITE(*,*)'attention on ne guide pas les ',
220     .    '6 dernieres heures'
221      endif
222#endif
223c
224c     IF( MOD( itau, 10* day_step ).EQ.0 )  THEN
225c       CALL  test_period ( ucov,vcov,teta,q,p,phis )
226c       PRINT *,' ----   Test_period apres continue   OK ! -----', itau
227c     ENDIF
228c
229      CALL SCOPY( ijmllm ,vcov , 1, vcovm1 , 1 )
230      CALL SCOPY( ijp1llm,ucov , 1, ucovm1 , 1 )
231      CALL SCOPY( ijp1llm,teta , 1, tetam1 , 1 )
232      CALL SCOPY( ijp1llm,masse, 1, massem1, 1 )
233      CALL SCOPY( ip1jmp1, ps  , 1,   psm1 , 1 )
234
235      forward = .TRUE.
236      leapf   = .FALSE.
237      dt      =  dtvr
238
239c   ...    P.Le Van .26/04/94  ....
240
241      CALL SCOPY   ( ijp1llm,   masse, 1, finvmaold,     1 )
242      CALL filtreg ( finvmaold ,jjp1, llm, -2,2, .TRUE., 1 )
243
244      call minmax(ijp1llm,q(:,:,3),zqmin,zqmax)
245
246   2  CONTINUE
247
248c-----------------------------------------------------------------------
249
250c   date:
251c   -----
252
253
254c   gestion des appels de la physique et des dissipations:
255c   ------------------------------------------------------
256c
257c   ...    P.Le Van  ( 6/02/95 )  ....
258
259      apphys = .FALSE.
260      statcl = .FALSE.
261      conser = .FALSE.
262      apdiss = .FALSE.
263
264      IF( purmats ) THEN
265         IF( MOD(itau,iconser) .EQ.0.AND.  forward    ) conser = .TRUE.
266         IF( MOD(itau,idissip ).EQ.0.AND..NOT.forward ) apdiss = .TRUE.
267         IF( MOD(itau,iphysiq ).EQ.0.AND..NOT.forward
268     s          .and. iflag_phys.EQ.1                 ) apphys = .TRUE.
269      ELSE
270         IF( MOD(itau   ,iconser) .EQ. 0              ) conser = .TRUE.
271         IF( MOD(itau+1,idissip)  .EQ. 0              ) apdiss = .TRUE.
272         IF( MOD(itau+1,iphysiq).EQ.0.AND.iflag_phys.EQ.1) apphys=.TRUE.
273      END IF
274
275c-----------------------------------------------------------------------
276c   calcul des tendances dynamiques:
277c   --------------------------------
278
279      CALL geopot  ( ip1jmp1, teta  , pk , pks,  phis  , phi   )
280
281      CALL caldyn
282     $  ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
283     $    phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time+iday-day_ini )
284
285c-----------------------------------------------------------------------
286c   calcul des tendances advection des traceurs (dont l'humidite)
287c   -------------------------------------------------------------
288
289      IF( forward. OR . leapf )  THEN
290
291         CALL caladvtrac(q,pbaru,pbarv,
292     *        p, masse, dq,  teta,
293     .        flxw, pk)
294         
295         IF (offline) THEN
296Cmaf stokage du flux de masse pour traceurs OFF-LINE
297
298#ifdef CPP_IOIPSL
299           CALL fluxstokenc(pbaru,pbarv,masse,teta,phi,phis,
300     .   dtvr, itau)
301#endif
302
303
304         ENDIF
305c
306      ENDIF
307
308
309c-----------------------------------------------------------------------
310c   integrations dynamique et traceurs:
311c   ----------------------------------
312
313
314       CALL integrd ( 2,vcovm1,ucovm1,tetam1,psm1,massem1 ,
315     $         dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis ,
316     $              finvmaold                                    )
317
318
319c .P.Le Van (26/04/94  ajout de  finvpold dans l'appel d'integrd)
320c
321c-----------------------------------------------------------------------
322c   calcul des tendances physiques:
323c   -------------------------------
324c    ########   P.Le Van ( Modif le  6/02/95 )   ###########
325c
326       IF( purmats )  THEN
327          IF( itau.EQ.itaufin.AND..NOT.forward ) lafin = .TRUE.
328       ELSE
329          IF( itau+1. EQ. itaufin )              lafin = .TRUE.
330       ENDIF
331c
332c
333       IF( apphys )  THEN
334c
335c     .......   Ajout   P.Le Van ( 17/04/96 )   ...........
336c
337
338         CALL pression (  ip1jmp1, ap, bp, ps,  p      )
339         CALL exner_hyb(  ip1jmp1, ps, p,alpha,beta,pks, pk, pkf )
340
341           rdaym_ini  = itau * dtvr / daysec
342           rdayvrai   = rdaym_ini  + day_ini
343
344
345c rajout debug
346c       lafin = .true.
347
348
349c   Inbterface avec les routines de phylmd (phymars ... )
350c   -----------------------------------------------------
351
352#ifdef CPP_PHYS
353c+jld
354
355c  Diagnostique de conservation de l'énergie : initialisation
356      IF (ip_ebil_dyn.ge.1 ) THEN
357          ztit='bil dyn'
358          CALL diagedyn(ztit,2,1,1,dtphys
359     e  , ucov    , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2))
360      ENDIF
361c-jld
362cIM : pour sortir les param. du modele dans un fis. netcdf 110106
363      IF (first) THEN
364       first=.false.
365#include "ini_paramLMDZ_dyn.h"
366      ENDIF
367c
368#include "write_paramLMDZ_dyn.h"
369c
370
371        CALL calfis( lafin ,rdayvrai,time  ,
372     $               ucov,vcov,teta,q,masse,ps,p,pk,phis,phi ,
373     $               du,dv,dteta,dq,
374     $               flxw,
375     $               clesphy0, dufi,dvfi,dtetafi,dqfi,dpfi  )
376
377       IF (ok_strato) THEN
378         CALL top_bound( vcov,ucov,teta, dufi,dvfi,dtetafi)
379       ENDIF
380       
381c      ajout des tendances physiques:
382c      ------------------------------
383          CALL addfi( dtphys, leapf, forward   ,
384     $                  ucov, vcov, teta , q   ,ps ,
385     $                 dufi, dvfi, dtetafi , dqfi ,dpfi  )
386c
387c  Diagnostique de conservation de l'énergie : difference
388      IF (ip_ebil_dyn.ge.1 ) THEN
389          ztit='bil phys'
390          CALL diagedyn(ztit,2,1,1,dtphys
391     e  , ucov    , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2))
392      ENDIF
393#endif
394       ENDIF ! of IF( apphys )
395
396      IF(iflag_phys.EQ.2) THEN ! "Newtonian physics" case
397c   Calcul academique de la physique = Rappel Newtonien + friction
398c   --------------------------------------------------------------
399       teta(:,:)=teta(:,:)
400     s  -iphysiq*dtvr*(teta(:,:)-tetarappel(:,:))/taurappel
401       call friction(ucov,vcov,iphysiq*dtvr)
402      ENDIF
403
404
405c-jld
406
407        CALL pression ( ip1jmp1, ap, bp, ps, p                  )
408        CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf )
409
410
411c-----------------------------------------------------------------------
412c   dissipation horizontale et verticale  des petites echelles:
413c   ----------------------------------------------------------
414
415      IF(apdiss) THEN
416
417
418c   calcul de l'energie cinetique avant dissipation
419        call covcont(llm,ucov,vcov,ucont,vcont)
420        call enercin(vcov,ucov,vcont,ucont,ecin0)
421
422c   dissipation
423        CALL dissip(vcov,ucov,teta,p,dvdis,dudis,dtetadis)
424        ucov=ucov+dudis
425        vcov=vcov+dvdis
426c       teta=teta+dtetadis
427
428
429c------------------------------------------------------------------------
430        if (dissip_conservative) then
431C       On rajoute la tendance due a la transform. Ec -> E therm. cree
432C       lors de la dissipation
433            call covcont(llm,ucov,vcov,ucont,vcont)
434            call enercin(vcov,ucov,vcont,ucont,ecin)
435            dtetaecdt= (ecin0-ecin)/ pk
436c           teta=teta+dtetaecdt
437            dtetadis=dtetadis+dtetaecdt
438        endif
439        teta=teta+dtetadis
440c------------------------------------------------------------------------
441
442
443c    .......        P. Le Van (  ajout  le 17/04/96  )   ...........
444c   ...      Calcul de la valeur moyenne, unique de h aux poles  .....
445c
446
447        DO l  =  1, llm
448          DO ij =  1,iim
449           tppn(ij)  = aire(  ij    ) * teta(  ij    ,l)
450           tpps(ij)  = aire(ij+ip1jm) * teta(ij+ip1jm,l)
451          ENDDO
452           tpn  = SSUM(iim,tppn,1)/apoln
453           tps  = SSUM(iim,tpps,1)/apols
454
455          DO ij = 1, iip1
456           teta(  ij    ,l) = tpn
457           teta(ij+ip1jm,l) = tps
458          ENDDO
459        ENDDO
460
461        DO ij =  1,iim
462          tppn(ij)  = aire(  ij    ) * ps (  ij    )
463          tpps(ij)  = aire(ij+ip1jm) * ps (ij+ip1jm)
464        ENDDO
465          tpn  = SSUM(iim,tppn,1)/apoln
466          tps  = SSUM(iim,tpps,1)/apols
467
468        DO ij = 1, iip1
469          ps(  ij    ) = tpn
470          ps(ij+ip1jm) = tps
471        ENDDO
472
473
474      END IF
475
476c ajout debug
477c              IF( lafin ) then 
478c                abort_message = 'Simulation finished'
479c                call abort_gcm(modname,abort_message,0)
480c              ENDIF
481       
482c   ********************************************************************
483c   ********************************************************************
484c   .... fin de l'integration dynamique  et physique pour le pas itau ..
485c   ********************************************************************
486c   ********************************************************************
487
488c   preparation du pas d'integration suivant  ......
489
490      IF ( .NOT.purmats ) THEN
491c       ........................................................
492c       ..............  schema matsuno + leapfrog  ..............
493c       ........................................................
494
495            IF(forward. OR. leapf) THEN
496              itau= itau + 1
497              iday= day_ini+itau/day_step
498              time= FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
499                IF(time.GT.1.) THEN
500                  time = time-1.
501                  iday = iday+1
502                ENDIF
503            ENDIF
504
505
506            IF( itau. EQ. itaufinp1 ) then 
507              if (flag_verif) then
508                write(79,*) 'ucov',ucov
509                write(80,*) 'vcov',vcov
510                write(81,*) 'teta',teta
511                write(82,*) 'ps',ps
512                write(83,*) 'q',q
513                WRITE(85,*) 'q1 = ',q(:,:,1)
514                WRITE(86,*) 'q3 = ',q(:,:,3)
515              endif
516
517              abort_message = 'Simulation finished'
518
519              call abort_gcm(modname,abort_message,0)
520            ENDIF
521c-----------------------------------------------------------------------
522c   ecriture du fichier histoire moyenne:
523c   -------------------------------------
524
525            IF(MOD(itau,iperiod).EQ.0 .OR. itau.EQ.itaufin) THEN
526               IF(itau.EQ.itaufin) THEN
527                  iav=1
528               ELSE
529                  iav=0
530               ENDIF
531#ifdef CPP_IOIPSL
532              CALL writedynav(histaveid, itau,vcov ,
533     ,                          ucov,teta,pk,phi,q,masse,ps,phis)
534               call bilan_dyn (2,dtvr*iperiod,dtvr*day_step*periodav,
535     ,           ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q)
536#endif
537
538            ENDIF
539
540c-----------------------------------------------------------------------
541c   ecriture de la bande histoire:
542c   ------------------------------
543
544            IF( MOD(itau,iecri         ).EQ.0) THEN
545c           IF( MOD(itau,iecri*day_step).EQ.0) THEN
546
547               nbetat = nbetatdem
548       CALL geopot  ( ip1jmp1, teta  , pk , pks,  phis  , phi        )
549        unat=0.
550        do l=1,llm
551           unat(iip2:ip1jm,l)=ucov(iip2:ip1jm,l)/cu(iip2:ip1jm)
552           vnat(:,l)=vcov(:,l)/cv(:)
553        enddo
554#ifdef CPP_IOIPSL
555c        CALL writehist(histid,histvid,itau,vcov,
556c     s                       ucov,teta,phi,q,masse,ps,phis)
557#else
558#include "write_grads_dyn.h"
559#endif
560
561
562            ENDIF
563
564            IF(itau.EQ.itaufin) THEN
565
566
567#ifdef CPP_IOIPSL
568       CALL dynredem1("restart.nc",0.0,
569     ,                     vcov,ucov,teta,q,masse,ps)
570#endif
571
572              CLOSE(99)
573            ENDIF
574
575c-----------------------------------------------------------------------
576c   gestion de l'integration temporelle:
577c   ------------------------------------
578
579            IF( MOD(itau,iperiod).EQ.0 )    THEN
580                    GO TO 1
581            ELSE IF ( MOD(itau-1,iperiod). EQ. 0 ) THEN
582
583                   IF( forward )  THEN
584c      fin du pas forward et debut du pas backward
585
586                      forward = .FALSE.
587                        leapf = .FALSE.
588                           GO TO 2
589
590                   ELSE
591c      fin du pas backward et debut du premier pas leapfrog
592
593                        leapf =  .TRUE.
594                        dt  =  2.*dtvr
595                        GO TO 2
596                   END IF
597            ELSE
598
599c      ......   pas leapfrog  .....
600
601                 leapf = .TRUE.
602                 dt  = 2.*dtvr
603                 GO TO 2
604            END IF
605
606      ELSE
607
608c       ........................................................
609c       ..............       schema  matsuno        ...............
610c       ........................................................
611            IF( forward )  THEN
612
613             itau =  itau + 1
614             iday = day_ini+itau/day_step
615             time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
616
617                  IF(time.GT.1.) THEN
618                   time = time-1.
619                   iday = iday+1
620                  ENDIF
621
622               forward =  .FALSE.
623               IF( itau. EQ. itaufinp1 ) then 
624                 abort_message = 'Simulation finished'
625                 call abort_gcm(modname,abort_message,0)
626               ENDIF
627               GO TO 2
628
629            ELSE
630
631            IF(MOD(itau,iperiod).EQ.0 .OR. itau.EQ.itaufin) THEN
632               IF(itau.EQ.itaufin) THEN
633                  iav=1
634               ELSE
635                  iav=0
636               ENDIF
637#ifdef CPP_IOIPSL
638              CALL writedynav(histaveid, itau,vcov ,
639     ,                          ucov,teta,pk,phi,q,masse,ps,phis)
640               call bilan_dyn (2,dtvr*iperiod,dtvr*day_step*periodav,
641     ,           ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q)
642#endif
643
644            ENDIF
645
646               IF(MOD(itau,iecri         ).EQ.0) THEN
647c              IF(MOD(itau,iecri*day_step).EQ.0) THEN
648                  nbetat = nbetatdem
649       CALL geopot  ( ip1jmp1, teta  , pk , pks,  phis  , phi       )
650        unat=0.
651        do l=1,llm
652           unat(iip2:ip1jm,l)=ucov(iip2:ip1jm,l)/cu(iip2:ip1jm)
653           vnat(:,l)=vcov(:,l)/cv(:)
654        enddo
655#ifdef CPP_IOIPSL
656c       CALL writehist( histid, histvid, itau,vcov ,
657c    ,                           ucov,teta,phi,q,masse,ps,phis)
658#else
659#include "write_grads_dyn.h"
660#endif
661
662
663               ENDIF
664
665#ifdef CPP_IOIPSL
666                 IF(itau.EQ.itaufin)
667     . CALL dynredem1("restart.nc",0.0,
668     .                     vcov,ucov,teta,q,masse,ps)
669#endif
670
671                 forward = .TRUE.
672                 GO TO  1
673
674            ENDIF
675
676      END IF
677
678      STOP
679      END
Note: See TracBrowser for help on using the repository browser.