source: LMDZ5/branches/AI-cosp/libf/phylmd/phys_cal_mod.F90 @ 2900

Last change on this file since 2900 was 2422, checked in by Ehouarn Millour, 9 years ago

Small modification in the way time and calendar are handled: Now all the time keeping is done in the physics and only the timestep is transfered from the dynamics to the physics. Due to changes in computations and roundoffs this will change reference bench results.
The implementation of this change in phymar is left as future work.
EM

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 2.5 KB
Line 
1! $Id:$
2MODULE phys_cal_mod
3! This module contains information on the calendar at the current time step
4
5  INTEGER,SAVE :: year_cur      ! current year
6!$OMP THREADPRIVATE(year_cur)
7  INTEGER,SAVE :: mth_cur       ! current month
8!$OMP THREADPRIVATE(mth_cur)
9  INTEGER,SAVE :: day_cur       ! current day
10!$OMP THREADPRIVATE(day_cur)
11  INTEGER,SAVE :: days_elapsed  ! number of whole days since start of the simulation
12!$OMP THREADPRIVATE(days_elapsed)
13  INTEGER,SAVE :: mth_len       ! number of days in the current month
14!$OMP THREADPRIVATE(mth_len)
15  INTEGER,SAVE :: year_len      ! number of days in the current year
16!$OMP THREADPRIVATE(year_len)
17  REAL,SAVE    :: hour
18!$OMP THREADPRIVATE(hour)
19  REAL,SAVE    :: jD_1jan
20!$OMP THREADPRIVATE(jD_1jan)
21  REAL,SAVE    :: jH_1jan
22!$OMP THREADPRIVATE(jH_1jan)
23  REAL,SAVE    :: xjour
24!$OMP THREADPRIVATE(xjour)
25  REAL,SAVE    :: jD_cur  ! jour courant a l'appel de la physique (jour julien)
26!$OMP THREADPRIVATE(jD_cur)
27  REAL,SAVE    :: jH_cur  ! heure courante a l'appel de la physique (jour julien)
28!$OMP THREADPRIVATE(jH_cur)
29  REAL,SAVE    :: jD_ref  ! jour du demarage de la simulation (jour julien)
30!$OMP THREADPRIVATE(jD_ref)
31 CHARACTER (len=10) :: calend ! type of calendar to use
32                              ! (can be earth_360d, earth_365d or earth_366d)
33!$OMP THREADPRIVATE(calend)
34
35
36CONTAINS
37 
38  SUBROUTINE phys_cal_init(annee_ref,day_ref)
39  USE IOIPSL, ONLY:  ymds2ju
40  USE ioipsl_getin_p_mod, ONLY: getin_p
41  IMPLICIT NONE
42    INTEGER,INTENT(IN) :: annee_ref
43    INTEGER,INTENT(IN) :: day_ref
44
45    ! Find out which type of calendar we are using
46    calend = 'earth_360d' ! default
47    CALL getin_p("calend",calend)
48     
49    CALL ymds2ju(annee_ref, 1, day_ref, 0., jD_ref)
50    jD_ref=INT(jD_ref)
51 
52  END SUBROUTINE  phys_cal_init
53
54  SUBROUTINE phys_cal_update(julian_date)
55    ! This subroutine updates the module saved variables.
56
57    USE IOIPSL, only: ju2ymds, ymds2ju, ioget_mon_len, ioget_year_len
58    IMPLICIT NONE
59    REAL, INTENT(IN) :: julian_date
60
61    jD_cur=INT(julian_date)
62    jH_cur=julian_date-jD_cur
63   
64    CALL ju2ymds(jD_cur+jH_cur, year_cur, mth_cur, day_cur, hour)
65    CALL ymds2ju(year_cur, 1, 1, 0., jD_1jan)
66   
67    jH_1jan = jD_1jan - int (jD_1jan)
68    jD_1jan = int (jD_1jan)
69    xjour = jD_cur - jD_1jan
70    days_elapsed = jD_cur - jD_1jan
71
72    ! Get lenght of current month
73    mth_len = ioget_mon_len(year_cur,mth_cur)
74
75    ! Get length of current year
76    year_len = ioget_year_len(year_cur)
77
78  END SUBROUTINE phys_cal_update
79
80END MODULE phys_cal_mod
81
Note: See TracBrowser for help on using the repository browser.