New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 719 for trunk/NEMO/OPA_SRC/daymod.F90 – NEMO

Ignore:
Timestamp:
2007-10-16T16:59:56+02:00 (17 years ago)
Author:
ctlod
Message:

get back to the nemo_v2_3 version for trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/daymod.F90

    • Property svn:keywords changed from Id to Author Date Id Revision
    r703 r719  
    44   !! Ocean        :  calendar  
    55   !!===================================================================== 
    6    !! History :        !  94-09  (M. Pontaud M. Imbard)  Original code 
    7    !!                  !  97-03  (O. Marti) 
    8    !!                  !  97-05  (G. Madec)  
    9    !!                  !  97-08  (M. Imbard) 
    10    !!             9.0  !  03-09  (G. Madec)  F90 + nyear, nmonth, nday 
    11    !!                  !  04-01  (A.M. Treguier) new calculation based on adatrj 
    12    !!                  !  06-08  (G. Madec)  surface module major update 
    13    !!----------------------------------------------------------------------       
    146 
    157   !!---------------------------------------------------------------------- 
    168   !!   day        : calendar 
    179   !!---------------------------------------------------------------------- 
     10   !! * Modules used 
    1811   USE dom_oce         ! ocean space and time domain 
    1912   USE phycst          ! physical constants 
     
    2417   PRIVATE 
    2518 
     19   !! * Routine accessibility 
    2620   PUBLIC day        ! called by step.F90 
    2721 
    28    INTEGER , PUBLIC ::   nyear       !: current year 
    29    INTEGER , PUBLIC ::   nmonth      !: current month 
    30    INTEGER , PUBLIC ::   nday        !: current day of the month 
    31    INTEGER , PUBLIC ::   nday_year   !: current day counted from jan 1st of the current year 
    32    REAL(wp), PUBLIC ::   rsec_year   !: current time step counted in second since 00h jan 1st of the current year 
    33    REAL(wp), PUBLIC ::   rsec_month  !: current time step counted in second since 00h 1st day of the current month 
    34    REAL(wp), PUBLIC ::   rsec_day    !: current time step counted in second since 00h         of the current day 
    35    INTEGER , PUBLIC ::   ndastp      !: time step date in year/month/day aammjj 
    36  
    37 !!gm supprimer adatrj et adatrj0 ==> remplacer par rsecday..... 
    38    REAL(wp), PUBLIC ::   adatrj      !: number of elapsed days since the begining of the run 
    39    REAL(wp), PUBLIC ::   adatrj0     !: value of adatrj at nit000-1 (before the present run). 
    40    !                                 !  it is the accumulated duration of previous runs 
    41    !                                 !  that may have been run with different time steps. 
    42    INTEGER , PUBLIC, DIMENSION(0:13) ::   nmonth_len   !: length of the current year 
    43  
    44    INTEGER, PUBLIC, DIMENSION(12) ::   nbiss = (/ 31, 29, 31, 30, 31, 30,    &  !: number of days per month 
    45       &                                           31, 31, 30, 31, 30, 31 /)     !: (leap-year) 
    46    INTEGER, PUBLIC, DIMENSION(12) ::   nobis = (/ 31, 28, 31, 30, 31, 30,    &  !: number of days per month 
    47       &                                           31, 31, 30, 31, 30, 31 /)     !: (365 days a year) 
    48  
    49    REAL(wp), PUBLIC, DIMENSION(0:14) ::   rmonth_half(0:14) 
    50  
     22   !! * Shared module variables 
     23   INTEGER , PUBLIC ::   &  !: 
     24      nyear     ,   &  !: current year 
     25      nmonth    ,   &  !: current month 
     26      nday      ,   &  !: current day of the month 
     27      nday_year ,   &  !: curent day counted from jan 1st of the current year 
     28      ndastp           !: time step date in year/month/day aammjj 
     29   REAL(wp), PUBLIC ::   &  !: 
     30       adatrj   ,   &  !: number of elapsed days since the begining of the run 
     31       adatrj0         !: value of adatrj at nit000-1 (before the present run). 
     32       !               !  it is the accumulated duration of previous runs 
     33       !               !  that may have been run with different time steps. 
    5134   !!---------------------------------------------------------------------- 
    52    !!  OPA 9.0 , LOCEAN-IPSL (2006)  
    53    !! $Id$ 
    54    !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     35   !!  OPA 9.0 , LOCEAN-IPSL (2005)  
     36   !! $Header$  
     37   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 
    5538   !!---------------------------------------------------------------------- 
    5639 
     
    7154      !!              - ndastp    : =nyear*10000+nmonth*100+nday 
    7255      !!              - adatrj    : date in days since the beginning of the run 
    73       !!              - rsec_year : current time of the year (in second since 00h, jan 1st) 
     56      !! 
     57      !! History : 
     58      !!        !  94-09  (M. Pontaud M. Imbard)  Original code 
     59      !!        !  97-03  (O. Marti) 
     60      !!        !  97-05  (G. Madec)  
     61      !!        !  97-08  (M. Imbard) 
     62      !!   9.0  !  03-09  (G. Madec)  F90 + nyear, nmonth, nday 
     63      !!        !  04-01  (A.M. Treguier) new calculation based on adatrj 
    7464      !!----------------------------------------------------------------------       
    75       INTEGER, INTENT(in) ::   kt        ! ocean time-step indices 
    76       ! 
    77       INTEGER  ::   js, jm               ! dummy loop indice 
    78       CHARACTER (len=25) ::   charout 
     65      !! * Arguments 
     66      INTEGER, INTENT( in ) ::   kt      ! ocean time-step indices 
     67 
     68      !! * Local declarations 
     69      INTEGER  ::   js                   ! dummy loop indice 
     70      INTEGER  ::   iend, iday0, iday1   ! temporary integers 
     71      REAL(wp) :: zadatrjn, zadatrjb     ! adatrj at timestep kt-1 and kt-2  
     72      CHARACTER (len=25) :: charout 
    7973      !!---------------------------------------------------------------------- 
    8074 
     
    8377      !----------------------------------------------------------------- 
    8478 
    85       !                        ! ---------------- ! 
    86       IF( kt == -1 ) THEN      !  Initialisation  ! 
    87          !                     ! ---------------- ! 
    88          ! 
     79      IF( kt == nit000 ) THEN 
     80 
    8981         IF( .NOT.ln_rstart )   adatrj0 = 0.e0      ! adatrj0 initialized in rst_read when restart  
    9082 
    91          ! set the calandar from adatrj0 and ndastp (read in restart file and namelist) 
    92          adatrj  =   adatrj0      !???? bug.... toujours rest   !!gm 
     83         adatrj  = adatrj0 
    9384         nyear   =   ndastp / 10000 
    9485         nmonth  = ( ndastp - (nyear * 10000) ) / 100 
    9586         nday    =   ndastp - (nyear * 10000) - ( nmonth * 100 )  
    9687 
    97          ! length of the month of the current year (from nleapy, read in namelist) 
    98          nmonth_len(0) = nbiss(12)   ;   nmonth_len(13) = nbiss(1) 
    99          SELECT CASE( nleapy ) 
    100          CASE( 1  )    
    101             IF( MOD( nyear, 4 ) == 0 ) THEN 
    102                ;          nmonth_len(1:12) = nbiss(:)      ! 366 days per year (leap year) 
     88         ! Calculates nday_year, day since january 1st (useful to read  daily forcing fields) 
     89         nday_year =  nday 
     90         !                               ! accumulates days of previous months of this year 
     91         DO js = 1, nmonth-1 
     92            IF( nleapy == 1 .AND. MOD( nyear, 4 ) == 0 ) THEN 
     93               nday_year = nday_year + nbiss(js) 
    10394            ELSE 
    104                ;          nmonth_len(1:12) = nobis(:)      ! 365 days per year 
     95               nday_year = nday_year + nobis(js) 
    10596            ENDIF 
    106          CASE( 0  )   ;   nmonth_len(1:12) = nobis(:)      ! 365 days per year 
    107          CASE( 2: )   ;   nmonth_len(1:13) = nleapy        ! 12*nleapy days per year 
    108          END SELECT 
    109  
    110          ! half month in second since the bigining of the year 
    111          rmonth_half(0) = - 0.5 * rday * REAL( nmonth_len( 0 ) ) 
    112          DO jm = 1, 12 
    113             rmonth_half(jm) = rmonth_half(jm-1) + 0.5 * rday * REAL( nmonth_len(jm-1) + nmonth_len(jm) ) 
    114          END DO 
    115          rmonth_half(13) = rmonth_half( 1 ) + 365. * rday 
    116          rmonth_half(14) = rmonth_half( 2 ) + 365. * rday 
    117  
    118          ! day since january 1st (useful to read  daily forcing fields) 
    119          nday_year =  nday 
    120          DO js = 1, nmonth - 1             ! accumulates days of previous months of this year 
    121             nday_year = nday_year + nmonth_len(js) 
    12297         END DO 
    12398 
    124          ! number of seconds since... 
    125          rsec_year  = REAL( nday_year - 1 ) * rday - rdttra(1)      ! 00h 1st day of the current year 
    126          rsec_day   = REAL( nday      - 1 ) * rday - rdttra(1)      ! 00h 1st day of the current month 
    127          rsec_month =                              - rdttra(1)      ! 00h         of the current day 
     99      ENDIF 
    128100 
    129          ! control print 
    130          IF(lwp) WRITE(numout,*)' ==============>> time-step =', kt, ' Initial DATE= ',   & 
    131                &                   nyear, '/', nmonth, '/', nday, '  rsec_day:', rsec_day 
     101      ! I.  calculates adatrj, zadatrjn, zadatrjb. 
     102      ! ------------------------------------------------------------------ 
    132103 
    133          ! 
    134          !                     ! -------------------------------- !  
    135       ELSE                     !  Model calendar at time-step kt  ! 
    136          !                     ! -------------------------------- !  
     104      adatrj    = adatrj0 + ( kt - nit000 + 1 ) * rdttra(1) / rday 
     105      zadatrjn  = adatrj0 + ( kt - nit000     ) * rdttra(1) / rday 
     106      zadatrjb  = adatrj0 + ( kt - nit000 - 1 ) * rdttra(1) / rday 
    137107 
    138          rsec_year  = rsec_year  + rdttra(1)                 ! New time-step 
    139          rsec_month = rsec_month + rdttra(1)                 ! New time-step 
    140          rsec_day   = rsec_day   + rdttra(1)                 ! New time-step 
    141108 
    142          adatrj    = adatrj0 + ( kt - nit000 + 1 ) * rdttra(1) / rday 
     109      ! II.  increment the date.  The date corresponds to 'now' variables (kt-1), 
     110      !      which is the time step of forcing fields.  
     111      !      Do not do this at nit000  unless nrstdt= 2 
     112      !      In that case ndastp (read in restart) was for step nit000-2 
     113      ! ------------------------------------------------------------------- 
    143114 
    144          IF( rsec_day >= rday ) THEN 
    145             ! 
    146             rsec_day  = 0.e0                               ! NEW day 
    147             nday      = nday + 1 
    148             nday_year = nday_year + 1 
    149             ! 
    150             IF( nday == nmonth_len(nmonth) + 1 ) THEN      ! NEW month 
    151                nday  = 1 
    152                rsec_month = 0.e0    
    153                nmonth = nmonth + 1 
    154                IF( nmonth == 13 ) THEN                     ! NEW year 
    155                   nyear     = nyear + 1 
    156                   nmonth    = 1 
    157                   nday_year = 1 
    158                   rsec_year = 0.e0 
    159                   !                                        ! update the length of the month 
    160                   IF( nleapy == 1 ) THEN                   ! of the current year (if necessary) 
    161                      IF( MOD( nyear, 4 ) == 0 ) THEN 
    162                         nmonth_len(1:12) = nbiss(:)              ! 366 days per year (leap year) 
    163                      ELSE 
    164                         nmonth_len(1:12) = nobis(:)              ! 365 days per year 
    165                      ENDIF 
    166                      ! half month in second since the bigining of the year 
    167                      rmonth_half(0) = - 0.5 * rday * REAL( nmonth_len( 0 ) ) 
    168                      DO jm = 1, 12 
    169                         rmonth_half(jm) = rmonth_half(jm-1) + 0.5 * rday * REAL( nmonth_len(jm-1) + nmonth_len(jm) ) 
    170                      END DO 
    171                      rmonth_half(13) = rmonth_half( 1 ) + 365. * rday 
    172                      rmonth_half(14) = rmonth_half( 2 ) + 365. * rday 
    173                   ENDIF 
    174                ENDIF 
     115      iday0 = INT( zadatrjb ) 
     116      iday1 = INT( zadatrjn ) 
     117 
     118      IF( iday1 - iday0 >= 1 .AND. ( kt /= nit000 .OR. nrstdt == 2 ) ) THEN 
     119 
     120         ! increase calendar 
     121         nyear  =   ndastp / 10000 
     122         nmonth = ( ndastp - (nyear * 10000) ) / 100 
     123         nday   =   ndastp - (nyear * 10000) - ( nmonth * 100 )  
     124         nday = nday + 1 
     125         IF( nleapy == 1 .AND. MOD( nyear, 4 ) == 0 ) THEN 
     126            iend = nbiss(nmonth) 
     127         ELSEIF( nleapy > 1 ) THEN  
     128            iend = nleapy 
     129         ELSE  
     130            iend = nobis(nmonth) 
     131         ENDIF 
     132         IF( nday == iend + 1 ) THEN 
     133            nday  = 1 
     134            nmonth = nmonth + 1 
     135            IF( nmonth == 13 ) THEN 
     136               nmonth  = 1 
     137               nyear = nyear + 1 
    175138            ENDIF 
     139         ENDIF 
     140         ndastp = nyear * 10000 + nmonth * 100 + nday 
    176141 
    177             ! 
    178             ndastp = nyear * 10000 + nmonth * 100 + nday   ! NEW date 
    179             ! 
    180 !           IF(lwp) WRITE(numout,'(a,i8,a,i4,a,i2,a,i2,a,i3)') '======>> time-step =', kt,   & 
    181 !              &   '      New day, DATE= ', nyear, '/', nmonth, '/', nday, '      nday_year = ', nday_year 
    182 !           IF(lwp) WRITE(numout,'(a,F9.0,a,F9.0,a,F9.0)') '         rsec_year = ', rsec_year,   & 
    183 !              &   '   rsec_month = ', rsec_month, '   rsec_day = ', rsec_day 
    184          ENDIF 
     142         ! Calculates nday_year, day since january 1st (useful to read  daily forcing fields) 
     143         nday_year =  nday 
     144         !                                ! accumulates days of previous months of this year 
     145         DO js = 1, nmonth-1 
     146            IF( nleapy == 1 .AND. MOD( nyear, 4 ) == 0 ) THEN 
     147               nday_year = nday_year + nbiss(js) 
     148            ELSE 
     149               nday_year = nday_year + nobis(js) 
     150            ENDIF 
     151         END DO 
    185152 
    186          IF(ln_ctl) THEN 
    187             WRITE(charout,FMT="('kt =', I4,'  d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear 
    188             CALL prt_ctl_info(charout) 
    189          ENDIF 
    190          ! 
     153         IF(lwp) WRITE(numout,*)' ==============>> time-step =', kt, ' New day, DATE= ',   & 
     154            &                   nyear, '/', nmonth, '/', nday, 'nday_year:', nday_year 
     155      ENDIF 
     156 
     157      IF(ln_ctl) THEN 
     158         WRITE(charout,FMT="('kt =', I4,'  d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear 
     159         CALL prt_ctl_info(charout, itime=kt) 
    191160      ENDIF 
    192161 
Note: See TracChangeset for help on using the changeset viewer.