source: LMDZ6/trunk/libf/phylmd/calcul_divers_mod_h.f90 @ 5408

Last change on this file since 5408 was 5293, checked in by abarral, 7 weeks ago

Move calcul_divers.h to module

  • 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:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
1MODULE calcul_divers_mod_h
2  IMPLICIT NONE; PRIVATE
3  PUBLIC calcul_divers
4
5CONTAINS
6
7  SUBROUTINE calcul_divers(itap, itapm1, un_jour)
8    ! IM, 26.05.2023
9    ! Ne pas modifier les IFs ci-dessous impliquant itapm1,
10    ! autrement les resultats seront faux !!
11
12    ! On utilise MOD(itap - itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.1)
13    ! pour detecter le debut de chaque mois lorsque l'on tourne par an.
14
15    ! itap : nombre de pas de temps de la physique
16    ! itapm1 : somme du nombre de pas de temps du/des mois precedent/s.
17    ! (itap - itapm1) : nombre de pas de temps du mois courant
18    USE dimphy, ONLY: klon
19    USE phys_state_var_mod, ONLY: phys_tstep, ndayrain_mth, nday_rain, total_rain, rain_fall, snow_fall
20    USE phys_local_var_mod, ONLY: t2m_min_mon, t2m_max_mon, zt2m_min_mon, zt2m_max_mon, zt2m
21    USE phys_cal_mod, ONLY: mth_len
22
23    IMPLICIT NONE
24
25    INTEGER, INTENT(IN) :: itap
26    INTEGER, INTENT(INOUT) :: itapm1
27    REAL, INTENT(IN) :: un_jour
28
29    INTEGER :: i
30
31    ! Initialisations itapm1 du premier mois
32    IF(itap==1) THEN
33      itapm1 = 0
34      !        PRINT*,'initialisation itap=1 itapm1 ',itapm1
35    ENDIF
36
37    ! Initialisation debut de mois
38    IF(itap==itapm1 + 1) THEN
39      ndayrain_mth(:) = 0.
40      !        PRINT*,'Initialisation ndayrain_mth ',itap
41    ENDIF
42
43    ! Initialisation debut de chaque jour
44    IF(MOD(itap, NINT(un_jour / phys_tstep))==1) THEN
45      nday_rain(:) = 0.
46      !       PRINT*,'initialisation mois suivants day_rain itap',itap
47    ENDIF
48
49    ! Calcul a chaque pas de temps de la physique
50    DO i = 1, klon
51      total_rain(i) = rain_fall(i) + snow_fall(i)
52      IF(total_rain(i)>0.) nday_rain(i) = 1.
53    ENDDO
54
55    ! Cumul en fin de journee
56    IF(MOD(itap, NINT(un_jour / phys_tstep))==0) THEN
57      DO i = 1, klon
58        ndayrain_mth(i) = ndayrain_mth(i) + nday_rain(i)
59      ENDDO
60    ENDIF
61
62    ! Initialisation fin de mois
63    ! Ne pas changer le IF ci-dessous, car le compteur itapm1 est augmente
64    ! apres, dans la boucle !!!
65    ! IM, 260523
66    IF(MOD(itap - itapm1, NINT(mth_len * un_jour / phys_tstep))==0) THEN
67      itapm1 = itapm1 + NINT(mth_len * un_jour / phys_tstep)
68      !       PRINT*,'fmois i i1 mjt',itap,itapm1,mth_len,un_jour,phys_tstep
69    ENDIF
70
71    ! calcul temperatures minimale et maximale moyennees sur le mois
72
73    !initialisation debut de mois pour les fichiers mensuels annuels
74    IF(itap==itapm1 + 1) THEN
75      t2m_min_mon = 0.
76      t2m_max_mon = 0.
77    ENDIF
78
79    !initialisation debut de journee pour les fichiers mensuels annuels
80    IF(MOD(itap, NINT(un_jour / phys_tstep))==1) THEN
81      zt2m_min_mon = zt2m
82      zt2m_max_mon = zt2m
83    ENDIF
84
85    !calcul sur tous les pas de temps pour les fichiers mensuels annuels
86    DO i = 1, klon
87      zt2m_min_mon(i) = MIN(zt2m(i), zt2m_min_mon(i))
88      zt2m_max_mon(i) = MAX(zt2m(i), zt2m_max_mon(i))
89    ENDDO
90
91    !fin journee
92    IF(MOD(itap, NINT(un_jour / phys_tstep))==0) THEN
93      t2m_min_mon = t2m_min_mon + zt2m_min_mon
94      t2m_max_mon = t2m_max_mon + zt2m_max_mon
95    ENDIF
96
97    !fin mois
98    IF(itap==itapm1) THEN
99      t2m_min_mon = t2m_min_mon / mth_len
100      t2m_max_mon = t2m_max_mon / mth_len
101    ENDIF
102
103  END SUBROUTINE calcul_divers
104
105END MODULE calcul_divers_mod_h
Note: See TracBrowser for help on using the repository browser.