source: LMDZ6/branches/DYNAMICO-conv/libf/phylmd/phys_cal_mod.F90 @ 3405

Last change on this file since 3405 was 3336, checked in by Laurent Fairhead, 6 years ago

Continuing merge of DYNAMICO and LMDZ physics. With this revision all differences with the
LMDZ physics branch of DYNAMICO have been integrated in LMDZ6 branch. Now for the merge
with trunk

  • 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: 3.0 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 current year
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         ! seconds elapsed (in the current day) since midnight
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
35CONTAINS
36 
37  SUBROUTINE phys_cal_init(annee_ref,day_ref)
38  USE IOIPSL, ONLY:  ymds2ju, ioconf_calendar
39  USE mod_phys_lmdz_para, ONLY:  is_master,is_omp_master
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    IF (is_omp_master) THEN
50      IF (calend == 'earth_360d') THEN
51        CALL ioconf_calendar('360d')
52      ELSE IF (calend == 'earth_365d') THEN
53        CALL ioconf_calendar('noleap')
54      ELSE IF (calend == 'earth_366d') THEN
55        CALL ioconf_calendar('gregorian')
56      ELSE
57        CALL abort_physic('phys_cal_init','Mauvais choix de calendrier',1)
58      ENDIF
59    ENDIF
60!$OMP BARRIER
61
62    CALL ymds2ju(annee_ref, 1, day_ref, 0., jD_ref)
63    jD_ref=INT(jD_ref)
64 
65  END SUBROUTINE  phys_cal_init
66
67  SUBROUTINE phys_cal_update(julian_date)
68    ! This subroutine updates the module saved variables.
69
70    USE IOIPSL, only: ju2ymds, ymds2ju, ioget_mon_len, ioget_year_len
71    IMPLICIT NONE
72    REAL, INTENT(IN) :: julian_date
73
74    jD_cur=INT(julian_date)
75    jH_cur=julian_date-jD_cur
76   
77    CALL ju2ymds(jD_cur+jH_cur, year_cur, mth_cur, day_cur, hour)
78    CALL ymds2ju(year_cur, 1, 1, 0., jD_1jan)
79   
80    jH_1jan = jD_1jan - int (jD_1jan)
81    jD_1jan = int (jD_1jan)
82    xjour = jD_cur - jD_1jan
83    days_elapsed = jD_cur - jD_1jan
84
85    ! Get lenght of current month
86    mth_len = ioget_mon_len(year_cur,mth_cur)
87
88    ! Get length of current year
89    year_len = ioget_year_len(year_cur)
90
91  END SUBROUTINE phys_cal_update
92
93END MODULE phys_cal_mod
Note: See TracBrowser for help on using the repository browser.