source: LMDZ6/branches/Amaury_dev/libf/phylmd/phys_cal_mod.F90 @ 5119

Last change on this file since 5119 was 5116, checked in by abarral, 4 months ago

rename modules properly lmdz_*
move ismin, ismax, minmax into new lmdz_libmath.f90
(lint) uppercase fortran keywords

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