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

Last change on this file since 3791 was 3406, checked in by jghattas, 6 years ago

Added all modifications in the model code that were used for the simulations with DYANMICO during the Grand Challeng 2018. Modifications done by Y. Meurdesoif, L. Fairhead and A.K. Traore

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