Ignore:
Timestamp:
Jul 2, 2013, 9:40:28 AM (12 years ago)
Author:
tnavarro
Message:

Possibility to store multiple initial states in one start/startfi. This is RETROCOMPATIBLE. New option ecrithist in run.def to write data in start/startfi every ecrithist dynamical timestep. New option timestart in run.def to initialize the GCM with the time timestart stored in start

Location:
trunk/LMDZ.MARS/libf/dyn3d
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/dyn3d/control.h

    r831 r999  
    77      COMMON/control_i/ndynstep,day_step,                               &
    88     &              iperiod,iconser,idissip,iphysiq ,                   &
    9      &              anneeref
    10       COMMON/control_r/periodav,ecritphy,nday_r
     9     &              anneeref,ecritstart
     10      COMMON/control_r/periodav,ecritphy,nday_r,timestart
    1111
    1212      INTEGER ndynstep ! # of dynamical time steps to run (if negative or not specified in run.def, nday_r is used instead)
     
    1919      REAL periodav
    2020      REAL ecritphy ! output data in "diagfi.nc" every ecritphy dynamical steps
     21      INTEGER ecritstart ! output data in "start.nc" every ecritstart dynamical steps
     22      REAL timestart ! time start for run in "start.nc"
    2123      real nday_r ! number of days to run (possibly including a fraction of day)
    2224
  • trunk/LMDZ.MARS/libf/dyn3d/defrun_new.F

    r828 r999  
    252252        else
    253253          WRITE(tapeout,*)" ecritphy = ",ecritphy
     254        endif
     255       
     256ccc   .... T.Navarro, read start time (06/2013) ...
     257c
     258        WRITE(tapeout,*) ""
     259        WRITE(tapeout,*) "date de debut dans le fichier start.nc"
     260        timestart=-9999
     261        call getin("timestart",timestart)
     262        WRITE(tapeout,*)" timestart = ",timestart
     263
     264ccc   .... T.Navarro, start output (01/2013) ...
     265c
     266        WRITE(tapeout,*) ""
     267        WRITE(tapeout,*) "frequence (en pas) de l'ecriture ",
     268     & "du fichier start.nc"
     269        ecritstart=0
     270        call getin("ecritstart",ecritstart)
     271        ! verify that ecritstart is indeed a multiple of iphysiq
     272        if ( ((real(ecritstart))/iphysiq)
     273     &       .ne.(real(ecritstart)/iphysiq) ) then
     274          write(tapeout,*)" Error! ecritstart must be a multiple",
     275     &    " of iphysiq, but ecritstart=",ecritstart," and iphysiq=",
     276     &    iphysiq
     277        else
     278          WRITE(tapeout,*)" ecritstart = ",ecritstart
    254279        endif
    255280
  • trunk/LMDZ.MARS/libf/dyn3d/dynetat0.F

    r791 r999  
    11      SUBROUTINE dynetat0(fichnom,nq,vcov,ucov,
    2      .                    teta,q,masse,ps,phis,time)
     2     .                    teta,q,masse,ps,phis,time0)
    33     
    44      use netcdf
     
    2020c                    r4 or r8 restarts independently of having compiled
    2121c                    the GCM in r4 or r8)
    22 c
     22c           June 2013 TN : Possibility to read files with a time axis.
     23c                          NOW defrun_new MUST BE CALLED BEFORE dynetat0.
    2324c=======================================================================
    2425c-----------------------------------------------------------------------
     
    3637#include "serre.h"
    3738#include "logic.h"
    38 #include"advtrac.h"
     39#include "advtrac.h"
     40#include "control.h"
    3941
    4042c   Arguments:
     
    4850      REAL ps(iip1,jjp1),phis(iip1,jjp1)
    4951
    50       REAL time ! fraction of day the fields correspond to
     52      REAL time0 ! fraction of day the fields correspond to
    5153
    5254c   Variables
     
    5860      INTEGER ierr, nid, nvarid, nqold
    5961      CHARACTER  str3*3,yes*1
     62     
     63      REAL,ALLOCATABLE :: time(:) ! times stored in start
     64      INTEGER timelen ! number of times stored in the file
     65      INTEGER indextime ! index of selected time
     66      !REAL  hour_ini ! fraction of day of stored date. Equivalent of day_ini, but 0=<hour_ini<1
     67
     68      INTEGER edges(4),corner(4)
    6069
    6170c-----------------------------------------------------------------------
     
    102111      pa         = tab_cntrl(17)
    103112      preff      = tab_cntrl(18)
     113     
     114      hour_ini   = tab_cntrl(29)
     115
    104116c
    105117      clon       = tab_cntrl(19)
     
    119131        IF( tab_cntrl(26).EQ.1. ) ysinus = . TRUE.
    120132      ENDIF
     133     
    121134c   .................................................................
    122135c
     
    239252      ENDIF
    240253
     254
     255! read time axis
     256      ierr = nf90_inq_dimid(nid,"Time",nvarid)
     257      ierr = nf90_inquire_dimension(nid,nvarid,len=timelen)
     258
     259      ALLOCATE(time(timelen))
     260
    241261      ierr=nf90_inq_varid(nid,"Time",nvarid)
    242262      IF (ierr .NE. nf90_noerr) THEN
     
    254274         CALL abort
    255275      ENDIF
    256 
     276     
     277! select desired time
     278      IF (timestart .lt. 0) THEN  ! default: we use the last time value
     279        indextime = timelen
     280      ELSE  ! else we look for the desired value in the time axis
     281       indextime = 0
     282        DO i=1,timelen
     283          IF (abs(time(i) - timestart) .lt. 0.01) THEN
     284             indextime = i
     285             EXIT
     286          ENDIF
     287        ENDDO
     288        IF (indextime .eq. 0) THEN
     289          PRINT*, "Time", timestart," is not in "//fichnom//"!!"
     290          PRINT*, "Stored times are:"
     291          DO i=1,timelen
     292             PRINT*, time(i)
     293          ENDDO
     294          CALL abort
     295        ENDIF
     296      ENDIF
     297     
     298      ! In start the absolute date is day_ini + hour_ini + time
     299      ! For now on, in the GCMdynamics, it is day_ini + time0
     300      time0 = time(indextime) + hour_ini
     301      day_ini = day_ini + INT(time0)
     302      time0 = time0 - INT(time0) ! time0 devient le nouveau hour_ini
     303      hour_ini = time0
     304     
     305      PRINT*, "dynetat0: Selected time ",time(indextime),
     306     .        " at index ",indextime
     307     
     308      DEALLOCATE(time)
     309
     310
     311! read vcov
     312      corner(1)=1
     313      corner(2)=1
     314      corner(3)=1
     315      corner(4)=indextime
     316      edges(1)=iip1
     317      edges(2)=jjm
     318      edges(3)=llm
     319      edges(4)=1
     320      ierr=nf90_inq_varid(nid,"vcov",nvarid)
     321      IF (ierr .NE. nf90_noerr) THEN
     322         PRINT*, "dynetat0: Le champ <vcov> est absent"
     323         write(*,*)trim(nf90_strerror(ierr))
     324         CALL abort
     325      ENDIF
     326      !ierr=nf90_get_var(nid,nvarid,vcov)
     327      ierr=nf90_get_var(nid,nvarid,vcov,corner,edges)
     328      IF (ierr .NE. nf90_noerr) THEN
     329         PRINT*, "dynetat0: Lecture echouee pour <vcov>"
     330         write(*,*)trim(nf90_strerror(ierr))
     331         CALL abort
     332      ENDIF
     333     
     334! read ucov
     335      corner(1)=1
     336      corner(2)=1
     337      corner(3)=1
     338      corner(4)=indextime
     339      edges(1)=iip1
     340      edges(2)=jjp1
     341      edges(3)=llm
     342      edges(4)=1
    257343      ierr=nf90_inq_varid(nid,"ucov",nvarid)
    258344      IF (ierr .NE. nf90_noerr) THEN
     
    261347         CALL abort
    262348      ENDIF
    263       ierr=nf90_get_var(nid,nvarid,ucov)
     349      ierr=nf90_get_var(nid,nvarid,ucov,corner,edges)
    264350      IF (ierr .NE. nf90_noerr) THEN
    265351         PRINT*, "dynetat0: Lecture echouee pour <ucov>"
     
    267353         CALL abort
    268354      ENDIF
    269  
    270       ierr=nf90_inq_varid(nid,"vcov",nvarid)
    271       IF (ierr .NE. nf90_noerr) THEN
    272          PRINT*, "dynetat0: Le champ <vcov> est absent"
    273          write(*,*)trim(nf90_strerror(ierr))
    274          CALL abort
    275       ENDIF
    276       ierr=nf90_get_var(nid,nvarid,vcov)
    277       IF (ierr .NE. nf90_noerr) THEN
    278          PRINT*, "dynetat0: Lecture echouee pour <vcov>"
    279          write(*,*)trim(nf90_strerror(ierr))
    280          CALL abort
    281       ENDIF
    282 
     355
     356! read teta
    283357      ierr=nf90_inq_varid(nid,"teta",nvarid)
    284358      IF (ierr .NE. nf90_noerr) THEN
     
    287361         CALL abort
    288362      ENDIF
    289       ierr=nf90_get_var(nid,nvarid,teta)
     363      ierr=nf90_get_var(nid,nvarid,teta,corner,edges)
    290364      IF (ierr .NE. nf90_noerr) THEN
    291365         PRINT*, "dynetat0: Lecture echouee pour <teta>"
     
    294368      ENDIF
    295369
    296 
     370! read tracers
    297371      IF(nq.GE.1) THEN
    298372        write(*,*) 'dynetat0: loading tracers'
     
    318392           ELSE
    319393           !ierr=nf90_get_var(nid,nvarid,q(1,1,1,iq))
    320            ierr=nf90_get_var(nid,nvarid,traceur)
     394           ierr=nf90_get_var(nid,nvarid,traceur,corner,edges)
    321395             IF (ierr .NE. nf90_noerr) THEN
    322396!                 PRINT*, "dynetat0: Lecture echouee pour "//str3
     
    355429      ENDIF
    356430
     431! read masse
    357432      ierr=nf90_inq_varid(nid,"masse",nvarid)
    358433      IF (ierr .NE. nf90_noerr) THEN
     
    361436         CALL abort
    362437      ENDIF
    363       ierr=nf90_get_var(nid,nvarid,masse)
     438      ierr=nf90_get_var(nid,nvarid,masse,corner,edges)
    364439      IF (ierr .NE. nf90_noerr) THEN
    365440         PRINT*, "dynetat0: Lecture echouee pour <masse>"
     
    368443      ENDIF
    369444
     445! read ps
     446      corner(1)=1
     447      corner(2)=1
     448      corner(3)=indextime
     449      edges(1)=iip1
     450      edges(2)=jjp1
     451      edges(3)=1
    370452      ierr=nf90_inq_varid(nid,"ps",nvarid)
    371453      IF (ierr .NE. nf90_noerr) THEN
     
    374456         CALL abort
    375457      ENDIF
    376       ierr=nf90_get_var(nid,nvarid,ps)
     458      ierr=nf90_get_var(nid,nvarid,ps,corner,edges)
    377459      IF (ierr .NE. nf90_noerr) THEN
    378460         PRINT*, "dynetat0: Lecture echouee pour <ps>"
  • trunk/LMDZ.MARS/libf/dyn3d/dynredem.F

    r410 r999  
    3636      character*80 abort_message
    3737      character(len=80) :: txt ! to store some text
     38     
     39      !REAL  hour_ini ! fraction of day of stored date. Equivalent of day_ini, but 0=<hour_ini<1
     40
    3841
    3942c   Variables locales pour NetCDF:
     
    7275       tab_cntrl(7)  = g
    7376       tab_cntrl(8)  = cpp
    74        tab_cntrl(9) = kappa
     77       tab_cntrl(9)  = kappa
    7578       tab_cntrl(10) = daysec
    7679       tab_cntrl(11) = dtvr
     
    8285       tab_cntrl(17) = pa
    8386       tab_cntrl(18) = preff
     87       
     88       tab_cntrl(29) = hour_ini
     89
    8490c
    8591c    .....    parametres  pour le zoom      ......   
     
    106112       IF( ysinus )  tab_cntrl(26) = 1.
    107113      ENDIF
     114     
     115
    108116c
    109117c    .........................................................
     
    983991      character*80 abort_message
    984992c
     993
     994      INTEGER edges(4),corner(4)
     995
    985996      INTEGER nb,i,j
    986       SAVE nb
    987       DATA nb / 0 /
     997     
    988998
    989999      modname = 'dynredem1'
     
    9931003         CALL abort
    9941004      ENDIF
     1005     
     1006c On a single run, different files can be written with dynredem1.
     1007c Therefore, get the last time index from the file itself:
     1008      ierr = NF_INQ_DIMID(nid,"Time",nvarid)
     1009      ierr = NF_INQ_DIMLEN(nid,nvarid,nb)
    9951010
    9961011c  Ecriture/extension de la coordonnee temps
     
    10081023      ierr = NF_PUT_VAR1_REAL (nid,nvarid,nb,time)
    10091024#endif
    1010       PRINT*, "Enregistrement pour ", nb, time
     1025      IF (ierr .NE. NF_NOERR) THEN
     1026         print*, "Erreur ecriture temps!!"
     1027         print*, NF_STRERROR(ierr)
     1028      ENDIF
     1029      !PRINT*, "Enregistrement pour ", nb, time
    10111030
    10121031c  Ecriture des champs
    10131032c
     1033      corner(1)=1
     1034      corner(2)=1
     1035      corner(3)=1
     1036      corner(4)=nb
     1037      edges(1)=iip1
     1038      edges(2)=jjm
     1039      edges(3)=llm
     1040      edges(4)=1
     1041      ierr = NF_INQ_VARID(nid, "vcov", nvarid)
     1042      IF (ierr .NE. NF_NOERR) THEN
     1043         PRINT*, "Variable vcov n est pas definie"
     1044         CALL abort
     1045      ENDIF
     1046#ifdef NC_DOUBLE
     1047      ierr = NF_PUT_VARA_DOUBLE (nid,nvarid,corner,edges,vcov)
     1048#else
     1049      ierr = NF_PUT_VARA_REAL (nid,nvarid,corner,edges,vcov)
     1050#endif
     1051      IF (ierr .NE. NF_NOERR) THEN
     1052         print*, "Erreur ecriture vcov!!"
     1053         print*, NF_STRERROR(ierr)
     1054      ENDIF
     1055     
     1056c Following corner and egdes are the same for ucov, teta, tracers and masse:
     1057      corner(1)=1
     1058      corner(2)=1
     1059      corner(3)=1
     1060      corner(4)=nb
     1061      edges(1)=iip1
     1062      edges(2)=jjp1
     1063      edges(3)=llm
     1064      edges(4)=1
    10141065      ierr = NF_INQ_VARID(nid, "ucov", nvarid)
    10151066      IF (ierr .NE. NF_NOERR) THEN
     
    10181069      ENDIF
    10191070#ifdef NC_DOUBLE
    1020       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,ucov)
    1021 #else
    1022       ierr = NF_PUT_VAR_REAL (nid,nvarid,ucov)
    1023 #endif
    1024 
    1025       ierr = NF_INQ_VARID(nid, "vcov", nvarid)
    1026       IF (ierr .NE. NF_NOERR) THEN
    1027          PRINT*, "Variable vcov n est pas definie"
    1028          CALL abort
    1029       ENDIF
    1030 #ifdef NC_DOUBLE
    1031       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,vcov)
    1032 #else
    1033       ierr = NF_PUT_VAR_REAL (nid,nvarid,vcov)
    1034 #endif
     1071      ierr = NF_PUT_VARA_DOUBLE (nid,nvarid,corner,edges,ucov)
     1072#else
     1073      ierr = NF_PUT_VARA_REAL (nid,nvarid,corner,edges,ucov)
     1074#endif
     1075      IF (ierr .NE. NF_NOERR) THEN
     1076         print*, "Erreur ecriture ucov!!"
     1077         print*, NF_STRERROR(ierr)
     1078      ENDIF
     1079     
    10351080
    10361081      ierr = NF_INQ_VARID(nid, "teta", nvarid)
     
    10401085      ENDIF
    10411086#ifdef NC_DOUBLE
    1042       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,teta)
    1043 #else
    1044       ierr = NF_PUT_VAR_REAL (nid,nvarid,teta)
    1045 #endif
     1087      ierr = NF_PUT_VARA_DOUBLE (nid,nvarid,corner,edges,teta)
     1088#else
     1089      ierr = NF_PUT_VARA_REAL (nid,nvarid,corner,edges,teta)
     1090#endif
     1091      IF (ierr .NE. NF_NOERR) THEN
     1092         print*, "Erreur ecriture teta!!"
     1093         print*, NF_STRERROR(ierr)
     1094      ENDIF
    10461095
    10471096      IF (nq.GT.99) THEN
     
    10681117            enddo
    10691118#ifdef NC_DOUBLE
    1070             ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,q3d)
    1071 #else
    1072             ierr = NF_PUT_VAR_REAL (nid,nvarid,q3d)
     1119            ierr = NF_PUT_VARA_DOUBLE (nid,nvarid,corner,edgesq3d)
     1120#else
     1121            ierr = NF_PUT_VARA_REAL (nid,nvarid,corner,edges,q3d)
    10731122#endif
    10741123            IF (ierr .NE. NF_NOERR) THEN
     
    10791128      ENDIF
    10801129c
     1130
    10811131      ierr = NF_INQ_VARID(nid, "masse", nvarid)
    10821132      IF (ierr .NE. NF_NOERR) THEN
     
    10851135      ENDIF
    10861136#ifdef NC_DOUBLE
    1087       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,masse)
    1088 #else
    1089       ierr = NF_PUT_VAR_REAL (nid,nvarid,masse)
    1090 #endif
    1091 c
     1137      ierr = NF_PUT_VARA_DOUBLE (nid,nvarid,corner,edges,masse)
     1138#else
     1139      ierr = NF_PUT_VARA_REAL (nid,nvarid,corner,edges,masse)
     1140#endif
     1141      IF (ierr .NE. NF_NOERR) THEN
     1142         print*, "Erreur ecriture masse!!"
     1143         print*, NF_STRERROR(ierr)
     1144      ENDIF
     1145c
     1146
     1147      corner(1)=1
     1148      corner(2)=1
     1149      corner(3)=nb
     1150      edges(1)=iip1
     1151      edges(2)=jjp1
     1152      edges(3)=1
    10921153      ierr = NF_INQ_VARID(nid, "ps", nvarid)
    10931154      IF (ierr .NE. NF_NOERR) THEN
     
    10961157      ENDIF
    10971158#ifdef NC_DOUBLE
    1098       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,ps)
    1099 #else
    1100       ierr = NF_PUT_VAR_REAL (nid,nvarid,ps)
    1101 #endif
     1159      ierr = NF_PUT_VARA_DOUBLE (nid,nvarid,corner,edges,ps)
     1160#else
     1161      ierr = NF_PUT_VARA_REAL (nid,nvarid,corner,edges,ps)
     1162#endif
     1163      IF (ierr .NE. NF_NOERR) THEN
     1164         print*, "Erreur ecriture ps!!"
     1165         print*, NF_STRERROR(ierr)
     1166      ENDIF
    11021167
    11031168      ierr = NF_CLOSE(nid)
  • trunk/LMDZ.MARS/libf/dyn3d/gcm.F

    r828 r999  
    143143c-----------------------------------------------------------------------
    144144c  Initialize tracers using iniadvtrac (Ehouarn, oct 2008)
     145      CALL defrun_new( 99, .TRUE. )
     146
    145147      CALL iniadvtrac(nq,numvanle)
    146 
     148     
    147149      CALL dynetat0("start.nc",nqmx,vcov,ucov,
    148      .              teta,q,masse,ps,phis, time_0)
    149 
    150       CALL defrun_new( 99, .TRUE. )
     150     .              teta,q,masse,ps,phis,time_0)
     151
    151152      ! in case time_0 (because of roundoffs) is close to zero,
    152153      ! set it to zero to avoid roundoff propagation issues
     
    244245     . 'c''est a dire du jour',i7,3x,'au jour',i7//)
    245246
    246       CALL dynredem0("restart.nc",day_end,anne_ini,phis,nqmx)
     247      CALL dynredem0("restart.nc",day_ini,anne_ini,phis,nqmx)
    247248
    248249      ecripar = .TRUE.
     
    517518              iday= day_ini+itau/day_step
    518519              time= REAL(itau-(iday-day_ini)*day_step)/day_step+time_0
    519                 IF(time.GT.1.) THEN
     520                !IF(time.GT.1.) THEN
     521                IF(time.GE.1.) THEN
    520522                  time = time-1.
    521523                  iday = iday+1
     
    544546c-----------------------------------------------------------------------
    545547
    546 
    547             IF(itau.EQ.itaufin) THEN
    548 
    549 
    550        write(*,*)' GCM: Appel test_period avant redem ; itau=',itau
     548            IF( (ecritstart.GT.0) .and. (MOD(itau,ecritstart).EQ.0)
     549     .        .or. (itau.EQ.itaufin) ) THEN
     550           
     551       !write(*,*)' GCM: Appel test_period avant redem ; itau=',itau
    551552       CALL test_period ( ucov,vcov,teta,q,p,phis )
    552        CALL dynredem1("restart.nc",time,
    553      .                     vcov,ucov,teta,q,nqmx,masse,ps)
    554 
    555               CLOSE(99)
     553       
     554       write(*,'(A,I7,A,F12.5)')
     555     .  'GCM:    Ecriture du fichier restart   ; itau=  ',itau,
     556     .  ' date=',REAL(itau)/REAL(day_step)
     557       CALL dynredem1("restart.nc",REAL(itau)/REAL(day_step),
     558     .                vcov,ucov,teta,q,nqmx,masse,ps)
     559     
     560      CLOSE(99)
     561     
    556562            ENDIF
     563
    557564
    558565c-----------------------------------------------------------------------
     
    598605             time = REAL(itau-(iday-day_ini)*day_step)/day_step+time_0
    599606
    600                   IF(time.GT.1.) THEN
     607                  IF(time.GE.1.) THEN
    601608                   time = time-1.
    602609                   iday = iday+1
     
    624631
    625632
    626                  IF(itau.EQ.itaufin)
    627      . CALL dynredem1("restart.nc",time,
    628      .                     vcov,ucov,teta,q,nqmx,masse,ps)
    629 
    630                  forward = .TRUE.
    631                  GO TO  1
     633            IF( (ecritstart.GT.0) .and. (MOD(itau,ecritstart).EQ.0)
     634     .      .or. (itau.EQ.itaufin) ) THEN
     635           
     636              CALL dynredem1("restart.nc",
     637     .                REAL(itau)/REAL(day_step),
     638     .                vcov,ucov,teta,q,nqmx,masse,ps)
     639     
     640              forward = .TRUE.
     641              GO TO  1
     642             
     643            ENDIF
    632644
    633645
  • trunk/LMDZ.MARS/libf/dyn3d/lect_start_archive.F

    r563 r999  
    617617c       call solarlong(timelist(i),sollong(i))
    618618c       sollong(i) = sollong(i)*180./pi
    619         write(*,*) 'initial state at martian day: ',int(timelist(i))
     619c        write(*,*) 'initial state at martian day: ',int(timelist(i))
     620        write(*,*) 'initial state at martian day: ',timelist(i)
    620621c       write(*,6) nint(timelist(i)),nint(mod(timelist(i),669)),
    621622c    .    sollong(i)
     
    630631      memo = 0
    631632      do i=1,timelen
    632         if (date.eq.int(timelist(i))) then
     633c        if (date.eq.int(timelist(i))) then
     634        if (abs(date-timelist(i)).lt.0.01) then
    633635            memo = i
    634636        endif
     
    643645        write(*,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
    644646        do i=1,timelen
    645           write(*,*) 'initial state at martian day: ',nint(timelist(i))
     647          write(*,*) 'initial state at martian day: ',timelist(i)
    646648c         write(*,6) nint(timelist(i)),nint(mod(timelist(i),669))
    647649        end do
    648650        goto 123
    649651      endif
    650 
     652     
    651653!-----------------------------------------------------------------------
    652654! 5. Read (time-dependent) data from datafile
  • trunk/LMDZ.MARS/libf/dyn3d/newstart.F

    r697 r999  
    14491449      if (choix_1.eq.0) then
    14501450         day_ini=int(date)
     1451         hour_ini=date-int(date)
    14511452      endif
    14521453c
     
    14601461
    14611462      CALL dynredem0("restart.nc",day_ini,anneeref,phis,nqmx)
    1462       CALL dynredem1("restart.nc",0.0,vcov,ucov,teta,q,nqmx,masse,ps)
     1463      CALL dynredem1("restart.nc",hour_ini,vcov,ucov,teta,q,
     1464     .               nqmx,masse,ps)
    14631465C
    14641466C Ecriture etat initial physique
    14651467C
    14661468
    1467       call physdem1("restartfi.nc",lonfi,latfi,nsoilmx,nqmx,
    1468      .              dtphys,real(day_ini),
    1469      .              time,tsurf,tsoil,co2ice,emis,q2,qsurf,
     1469      call physdem0("restartfi.nc",lonfi,latfi,nsoilmx,nqmx,
     1470     .              dtphys,real(day_ini),0.0,
    14701471     .              airefi,albfi,ithfi,zmea,zstd,zsig,zgam,zthe)
     1472      call physdem1("restartfi.nc",nsoilmx,nqmx,
     1473     .              dtphys,hour_ini,
     1474     .              tsurf,tsoil,co2ice,emis,q2,qsurf)
    14711475
    14721476c=======================================================================
  • trunk/LMDZ.MARS/libf/dyn3d/start2archive.F

    r410 r999  
    110110c-----------------------------------------------------------------------
    111111
     112      CALL defrun_new(99, .TRUE. )
    112113      grireg   = .TRUE.
    113114
     
    290291c-----------------------------------------------------------------------
    291292
    292       date = day_ini
     293      date = day_ini + hour_ini
    293294      ierr= NF_INQ_VARID(nid,"Time",varid)
    294295      ierr= NF_INQ_DIMID(nid,"Time",dimid)
  • trunk/LMDZ.MARS/libf/dyn3d/temps.h

    r791 r999  
    33
    44      COMMON/temps_i/day_ini,day_end,anne_ini,itaufin
    5       COMMON/temps_r/dt
     5      COMMON/temps_r/dt,hour_ini
    66
    77      INTEGER  itaufin  ! total number of dynamical steps for the run
     
    99      INTEGER*4 day_end ! final day # ; i.e. day # when this simulation ends
    1010      INTEGER*4 anne_ini ! initial year # of simulation sequence ? Not used.
    11       REAL dt ! (dynamics) time step (changes if doing Matsuno or LF step)
     11      REAL dt ! (dynamics) time step (changes if doing Matsuno or LF step)
     12      REAL hour_ini ! initial fraction of day of simulation sequence (0=<hour_ini<1)
    1213
    1314c-----------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.