Ignore:
Timestamp:
Jul 7, 2009, 4:01:00 PM (15 years ago)
Author:
Laurent Fairhead
Message:

Modifications nécessaires a l'inclusion d'un calendrier réaliste.
La date courante est calculée dans leapfrog.F et exprimée en Jour Julien
(modifié). On en a profité pour faire un peu de ménage dans la gestion des dates
du modèle.
Dans la physique, on utilise les routines de passages entre calendrier Julien et
Gregorien incluses dans IOIPSL pour calculer le nombre de jours écoulés depuis le
1er janvier (pour les conditions aux limites) ou l'equinoxe (pour le calcul de
la longitude solaire). Le calcul de l'orbite reprend celui du gcm planétaire
(codé par FH)
On décide du calendrier à utiliser à l'aide du paramètre calend du run.def. Par
défaut celui-ci est à earth_360d
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4-dev/libf/dyn3d/leapfrog.F

    r1190 r1201  
     1!
     2! $Id$
    13!
    24c
     
    112114c
    113115      INTEGER itau,itaufinp1,iav
    114       INTEGER*4  iday ! jour julien
    115       REAL       time ! Heure de la journee en fraction d'1 jour
     116!      INTEGER  iday ! jour julien
     117      REAL       time
    116118
    117119      REAL  SSUM
     
    125127      real time_step, t_wrt, t_ops
    126128
    127       REAL rdayvrai,rdaym_ini
     129!      REAL rdayvrai,rdaym_ini
     130! jD_cur: jour julien courant
     131! jH_cur: heure julienne courante
     132      REAL :: jD_cur, jH_cur
     133      INTEGER :: an, mois, jour
     134      REAL :: secondes
     135
    128136      LOGICAL first,callinigrads
    129137cIM : pour sortir les param. du modele dans un fis. netcdf 110106
    130138      save first
    131139      data first/.true./
    132       real dt_cum, zjulian
     140      real dt_cum
    133141      character*10 infile
    134142      integer zan, tau0, thoriid
     
    167175      character*80 abort_message
    168176
    169 C Calendrier
    170       LOGICAL true_calendar
    171       PARAMETER (true_calendar = .false.)
    172 
    173177      logical dissip_conservative
    174178      save dissip_conservative
     
    193197
    194198      itau = 0
    195       iday = day_ini+itau/day_step
    196       time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
    197          IF(time.GT.1.) THEN
    198           time = time-1.
    199           iday = iday+1
    200          ENDIF
     199c$$$      iday = day_ini+itau/day_step
     200c$$$      time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
     201c$$$         IF(time.GT.1.) THEN
     202c$$$          time = time-1.
     203c$$$          iday = iday+1
     204c$$$         ENDIF
    201205
    202206
     
    214218
    215219   1  CONTINUE
     220
     221      jD_cur = jD_ref + (day_ini - 1) + int (itau * dtvr / daysec)
     222      jH_cur = jH_ref +                                                 &
     223     &          (itau * dtvr / daysec - int(itau * dtvr / daysec))
    216224
    217225
     
    284292      CALL geopot  ( ip1jmp1, teta  , pk , pks,  phis  , phi   )
    285293
     294      time = jD_cur + jH_cur
    286295      CALL caldyn
    287296     $  ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
    288      $    phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time+iday-day_ini )
     297     $    phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time )
    289298
    290299
     
    345354         CALL exner_hyb(  ip1jmp1, ps, p,alpha,beta,pks, pk, pkf )
    346355
    347            rdaym_ini  = itau * dtvr / daysec
    348            rdayvrai   = rdaym_ini  + day_ini
    349 
     356!           rdaym_ini  = itau * dtvr / daysec
     357!           rdayvrai   = rdaym_ini  + day_ini
     358           jD_cur = jD_ref + (day_ini - 1) + int (itau * dtvr / daysec)
     359           jH_cur = jH_ref +                                            &
     360     &              (itau * dtvr / daysec - int(itau * dtvr / daysec))
     361!         write(lunout,*)'itau, jD_cur = ', itau, jD_cur, jH_cur
     362!         call ju2ymds(jD_cur+jH_cur, an, mois, jour, secondes)
     363!         write(lunout,*)'current date = ',an, mois, jour, secondes
    350364
    351365c rajout debug
     
    379393#endif
    380394! #endif of #ifdef CPP_IOIPSL
    381          CALL calfis( lafin ,rdayvrai,time  ,
     395         CALL calfis( lafin , jD_cur, jH_cur,
    382396     $               ucov,vcov,teta,q,masse,ps,p,pk,phis,phi ,
    383397     $               du,dv,dteta,dq,
     
    507521            IF(forward. OR. leapf) THEN
    508522              itau= itau + 1
    509               iday= day_ini+itau/day_step
    510               time= FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
    511                 IF(time.GT.1.) THEN
    512                   time = time-1.
    513                   iday = iday+1
    514                 ENDIF
     523c$$$              iday= day_ini+itau/day_step
     524c$$$              time= FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
     525c$$$                IF(time.GT.1.) THEN
     526c$$$                  time = time-1.
     527c$$$                  iday = iday+1
     528c$$$                ENDIF
    515529            ENDIF
    516530
     
    632646
    633647             itau =  itau + 1
    634              iday = day_ini+itau/day_step
    635              time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
    636 
    637                   IF(time.GT.1.) THEN
    638                    time = time-1.
    639                    iday = iday+1
    640                   ENDIF
     648c$$$             iday = day_ini+itau/day_step
     649c$$$             time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
     650c$$$
     651c$$$                  IF(time.GT.1.) THEN
     652c$$$                   time = time-1.
     653c$$$                   iday = iday+1
     654c$$$                  ENDIF
    641655
    642656               forward =  .FALSE.
Note: See TracChangeset for help on using the changeset viewer.