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/dyn3dpar/gcm.F

    r1200 r1201  
    11!
    2 ! $Header$
     2! $Id$
    33!
    44c
     
    113113      real time_step, t_wrt, t_ops
    114114
    115 c      REAL rdayvrai,rdaym_ini,rday_ecri
    116 c      LOGICAL first
    117115
    118116      LOGICAL call_iniphys
     
    133131
    134132      character (len=80) :: dynhist_file, dynhistave_file
    135       character (len=20) ::modname
    136       character (len=80) ::abort_message
    137 
    138 C Calendrier
    139       LOGICAL true_calendar
    140       PARAMETER (true_calendar = .false.)
     133      character (len=20) :: modname
     134      character (len=80) :: abort_message
     135! locales pour gestion du temps
     136      INTEGER :: an, mois, jour
     137      REAL :: heure
     138
    141139
    142140c-----------------------------------------------------------------------
     
    165163
    166164
    167 c-----------------------------------------------------------------------
    168 c   Choix du calendrier
    169 c   -------------------
    170 
    171 #ifdef CPP_IOIPSL
    172       if (true_calendar) then
    173         call ioconf_calendar('gregorian')
    174       else
    175         call ioconf_calendar('360d')
    176       endif
    177 #endif
     165
    178166c----------------------------------------------------------------------
    179167c  lecture des fichiers gcm.def ou run.def
     
    221209#endif
    222210      endif ! of if (planet_type.eq."earth")
     211
     212c-----------------------------------------------------------------------
     213c   Choix du calendrier
     214c   -------------------
     215
     216c      calend = 'earth_365d'
     217
     218#ifdef CPP_IOIPSL
     219      if (calend == 'earth_360d') then
     220        call ioconf_calendar('360d')
     221        write(lunout,*)'CALENDRIER CHOISI: Terrestre a 360 jours/an'
     222      else if (calend == 'earth_365d') then
     223        call ioconf_calendar('noleap')
     224        write(lunout,*)'CALENDRIER CHOISI: Terrestre a 365 jours/an'
     225      else if (calend == 'earth_366d') then
     226        call ioconf_calendar('gregorian')
     227        write(lunout,*)'CALENDRIER CHOISI: Terrestre bissextile'
     228      else
     229        abort_message = 'Mauvais choix de calendrier'
     230        call abort_gcm(modname,abort_message,1)
     231      endif
     232#endif
    223233
    224234      IF (config_inca /= 'none') THEN
     
    306316      if (annee_ref .ne. anneeref .or. day_ref .ne. dayref) then
    307317        write(lunout,*)
    308      .  ' Attention les dates initiales lues dans le fichier'
     318     .  'GCM: Attention les dates initiales lues dans le fichier'
    309319        write(lunout,*)
    310320     .  ' restart ne correspondent pas a celles lues dans '
     
    312322        if (raz_date .ne. 1) then
    313323          write(lunout,*)
    314      .    ' On garde les dates du fichier restart'
     324     .    'GCM: On garde les dates du fichier restart'
    315325        else
    316326          annee_ref = anneeref
    317327          day_ref = dayref
    318           day_ini = dayref
     328          day_ini = 1
    319329          itau_dyn = 0
    320330          itau_phy = 0
    321331          time_0 = 0.
    322332          write(lunout,*)
    323      .   ' On reinitialise a la date lue dans gcm.def'
     333     .   'GCM: On reinitialise a la date lue dans gcm.def'
    324334        endif
    325335      ELSE
     
    327337      endif
    328338
    329 #ifdef CPP_IOIPSL
    330       call ioconf_startdate(annee_ref,0,day_ref,0.)
    331 #endif
     339      mois = 1
     340      heure = 0.
     341      call ymds2ju(annee_ref, mois, day_ref, heure, jD_ref)
     342      jH_ref = jD_ref - int(jD_ref)
     343      jD_ref = int(jD_ref)
     344
     345#ifdef CPP_IOIPSL
     346      call ioconf_startdate(annee_ref,0,day_ref, 0.)
     347#endif
     348
     349      write(lunout,*)'DEBUG'
     350      write(lunout,*)'annee_ref, mois, day_ref, heure, jD_ref'
     351      write(lunout,*)annee_ref, mois, day_ref, heure, jD_ref
     352      call ju2ymds(jD_ref+jH_ref,an, mois, jour, heure)
     353      write(lunout,*)'jD_ref+jH_ref,an, mois, jour, heure'
     354      write(lunout,*)jD_ref+jH_ref,an, mois, jour, heure
    332355
    333356c  nombre d'etats dans les fichiers demarrage et histoire
     
    413436      WRITE(lunout,300)day_ini,day_end
    414437 300  FORMAT('1'/,15x,'run du jour',i7,2x,'au jour',i7//)
     438      call ju2ymds(jD_ref+day_ini-1,an, mois, jour, heure)
     439      write (lunout,301)jour, mois, an
     440      call ju2ymds(jD_ref+day_end-1,an, mois, jour, heure)
     441      write (lunout,302)jour, mois, an
     442 301  FORMAT('1'/,15x,'run du ', i2,'/',i2,'/',i4)
     443 302  FORMAT('1'/,15x,'    au ', i2,'/',i2,'/',i4)
    415444
    416445!#ifdef CPP_IOIPSL
Note: See TracChangeset for help on using the changeset viewer.