Index: LMDZ6/trunk/libf/phylmd/calcul_divers.h
===================================================================
--- LMDZ6/trunk/libf/phylmd/calcul_divers.h	(revision 4554)
+++ LMDZ6/trunk/libf/phylmd/calcul_divers.h	(revision 4556)
@@ -2,52 +2,84 @@
 ! $Id$
 !
+! itap : nombre de pas de temps de la physique
+! itapm1 : somme du nombre de pas de temps du/des mois precedent/s.
+! (itap - itapm1) : nombre de pas de temps du mois courant
 !
-! Initialisations diverses au tout debut
+! Ne pas modifier les IFs ci-dessous impliquant itapm1,
+! autrement les resultats seront faux !!
+!
+! Ici on utilise MOD(itap - itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.1)
+! pour detecter le debut de chaque mois lorsque  l on tourne par an.
+!
+! IM, 26.05.2023
+!
+!
+! Initialisations itapm1 du premier mois
       IF(itap.EQ.1) THEN
          itapm1=0
+!        print*,'initialisation itap=1 itapm1 ',itapm1
       ENDIF
 
+!
 ! Initialisation debut de mois
       IF(itap.EQ.itapm1+1) THEN
+         ndayrain_mth(:)=0.
+!        print*,'Initialisation ndayrain_mth ',itap
+      ENDIF
+!
+! Initialisation debut de chaque jour
+      IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN
         nday_rain(:)=0.
 !       print*,'initialisation mois suivants day_rain itap',itap
       ENDIF
-
-! Calcul fin de journee : total_rain, nday_rain
-      IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN
-!        print*,'calcul nday_rain itap ',itap
+!
+! Calcul a chaque pas de temps de la physique
          DO i = 1, klon
             total_rain(i)=rain_fall(i)+snow_fall(i)  
-            IF(total_rain(i).GT.0.) nday_rain(i)=nday_rain(i)+1.
+            IF(total_rain(i).GT.0.) nday_rain(i)=1.
+         ENDDO
+!
+! Cumul en fin de journee
+      IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN
+         DO i = 1, klon
+            ndayrain_mth(i)=ndayrain_mth(i)+nday_rain(i)
          ENDDO
       ENDIF
-
+!
 ! Initialisation fin de mois
+! Ne pas changer le IF ci-dessous, car le compteur itapm1 est augmente
+! apres, dans la boucle !!!
+! IM, 260523
       IF(MOD(itap-itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.0) THEN
         itapm1=itapm1+NINT(mth_len*un_jour/phys_tstep)
-!       print*,'initialisation itapm1 ',itapm1
+!       print*,'fmois i i1 mjt',itap,itapm1,mth_len,un_jour,phys_tstep
       ENDIF
 !
 ! calcul temperatures minimale et maximale moyennees sur le mois 
 !
-!initialisation debut de mois ou de journee pour les fichiers mensuels
+!initialisation debut de mois pour les fichiers mensuels annuels
   IF(itap.EQ.itapm1+1) THEN
      t2m_min_mon=0.
      t2m_max_mon=0.
   ENDIF
+!
+!initialisation debut de journee pour les fichiers mensuels annuels
   IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN
      zt2m_min_mon=zt2m
      zt2m_max_mon=zt2m
   ENDIF
-!calcul a chaque pas de temps pour les fichiers mensuels
+!
+!calcul sur tous les pas de temps pour les fichiers mensuels annuels
      DO i = 1, klon
         zt2m_min_mon(i)=MIN(zt2m(i),zt2m_min_mon(i))
         zt2m_max_mon(i)=MAX(zt2m(i),zt2m_max_mon(i))
      ENDDO
-!fin de journee
+!
+!fin journee
   IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN
    t2m_min_mon=t2m_min_mon+zt2m_min_mon 
    t2m_max_mon=t2m_max_mon+zt2m_max_mon 
   ENDIF
+!
 !fin mois
   IF(itap==itapm1) THEN
Index: LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90	(revision 4554)
+++ LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90	(revision 4556)
@@ -247,5 +247,5 @@
     USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, bs_fall,&
          qsol, z0m, z0h, fevap, agesno, &
-         nday_rain, rain_con, snow_con, &
+         nday_rain, ndayrain_mth, rain_con, snow_con, &
          topsw, toplw, toplw0, swup, swdn, solswfdiff, &
          topsw0, swupc0, swdnc0, swup0, swdn0, SWup200, SWup200clr, &
@@ -907,5 +907,5 @@
        CALL histwrite_phy(o_precip, zx_tmp_fi2d)
        CALL histwrite_phy(o_rain_fall, rain_fall)
-       CALL histwrite_phy(o_ndayrain, nday_rain)
+       CALL histwrite_phy(o_ndayrain, ndayrain_mth)
 
        ! epmax_cape:
Index: LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 4554)
+++ LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 4556)
@@ -313,4 +313,6 @@
       REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:)  
 !$OMP THREADPRIVATE(total_rain,nday_rain)
+      REAL,ALLOCATABLE,SAVE :: ndayrain_mth(:)
+!$OMP THREADPRIVATE(ndayrain_mth)
       REAL,ALLOCATABLE,SAVE :: paire_ter(:)
 !$OMP THREADPRIVATE(paire_ter)
@@ -656,4 +658,5 @@
       ALLOCATE(pfrac_1nucl(klon,klev))
       ALLOCATE(total_rain(klon), nday_rain(klon))
+      ALLOCATE(ndayrain_mth(klon))
       ALLOCATE(paire_ter(klon))
       ALLOCATE(albsol1(klon), albsol2(klon))
@@ -836,4 +839,5 @@
       DEALLOCATE(pfrac_1nucl)
       DEALLOCATE(total_rain, nday_rain)
+      DEALLOCATE(ndayrain_mth)
       DEALLOCATE(paire_ter)
       DEALLOCATE(albsol1, albsol2)
