Index: /trunk/LMDZ.GENERIC/changelog.txt
===================================================================
--- /trunk/LMDZ.GENERIC/changelog.txt	(revision 4163)
+++ /trunk/LMDZ.GENERIC/changelog.txt	(revision 4164)
@@ -2252,2 +2252,10 @@
 Some fixes will be added as the model is tested in various configurations.
 
+== 02/04/2026 ==
+Some changes following the "thermodynamics update":
+- bug fix on the size of pplev
+- renaming the module to something more explicit (thermo_mod.F90 => 
+  pcm_thermodynamics_mod.F90) and the Exner&potential temperature update 
+  routine "thermodynamics" => "thermodynamics_update"
+- some optimizations in "thermodynamics_update" : in the 'thermo_uni_ideal'
+  case seting r(),cpp() and rcp() can be done at first call only.
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/condensation_generic_mod.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/condensation_generic_mod.F90	(revision 4163)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/condensation_generic_mod.F90	(revision 4164)
@@ -11,5 +11,5 @@
         USE mod_phys_lmdz_para, only: is_master
         use generic_tracer_index_mod, only: generic_tracer_index
-        use thermo_mod
+        use pcm_thermodynamics_mod, only: cpp
         use comcstfi_mod
         IMPLICIT none
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/conduction.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/conduction.F90	(revision 4163)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/conduction.F90	(revision 4164)
@@ -8,5 +8,5 @@
                         tsurf,zzlev,zzlay,muvar,qvar,firstcall,zdtconduc)
     
-      use thermo_mod, only: cpp,r
+      use pcm_thermodynamics_mod, only: cpp,r
       use callkeys_mod, only: phitop_conduc,zztop,a_coeff,s_coeff,force_conduction
       use conc_mod,     only: lambda
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/convadj.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/convadj.F90	(revision 4163)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/convadj.F90	(revision 4164)
@@ -17,5 +17,4 @@
       use callkeys_mod, only: tracer,water,generic_condensation, &
                               virtual_theta_correction, thermo_phy
-      use thermo_mod
 
       implicit none
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/moistadj_generic.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/moistadj_generic.F90	(revision 4163)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/moistadj_generic.F90	(revision 4164)
@@ -5,5 +5,4 @@
    use tracer_h
    use callkeys_mod, only: moist_convection_inhibition, thermo_phy, metallicity
-   use thermo_mod
    use comcstfi_mod
 
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/molvis.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/molvis.F90	(revision 4163)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/molvis.F90	(revision 4164)
@@ -12,5 +12,5 @@
       use conc_mod,     only: lambda
       use gases_h
-      use thermo_mod
+      use pcm_thermodynamics_mod, only: cpp, r
 
 !=======================================================================
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/pcm_thermodynamics_mod.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/pcm_thermodynamics_mod.F90	(revision 4164)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/pcm_thermodynamics_mod.F90	(revision 4164)
@@ -0,0 +1,68 @@
+      module pcm_thermodynamics_mod
+
+      use comcstfi_mod, only: cppd_ref,cppv_ref,rd_ref, rcp_ref, mugaz_ref
+      
+      implicit none
+      
+      REAL, SAVE, ALLOCATABLE, PROTECTED :: r(:,:)     ! Reduced gas constant of atmosphere
+      REAL, SAVE, ALLOCATABLE, PROTECTED :: cpp(:,:)   ! Cp of the atmosphere (J/K/kg)
+      REAL, SAVE, ALLOCATABLE, PROTECTED :: rcp(:,:)   ! r/cpp (gamma) of atmosphere
+!$OMP THREADPRIVATE(r,cpp,rcp)
+      
+      contains
+      
+      subroutine thermodynamics_update(thermo_phy, pplay, pplev, t, ngrid, nlayer, nq, q, iq, zh, zpopsk)
+        CHARACTER(LEN=*), INTENT(IN) :: thermo_phy               ! flag
+        REAL, INTENT(IN)    :: pplay(ngrid,nlayer)    ! pressure (Pa) at mid-layer
+        REAL, INTENT(IN)    :: pplev(ngrid,nlayer+1)  ! pressure (Pa) at layer interfaces
+        REAL, INTENT(IN)    :: t(ngrid,nlayer)      ! temperature (K)
+        INTEGER, INTENT(IN) :: ngrid, nlayer,nq     ! Number of cells, vertical layers and tracers
+        REAL, INTENT(IN)    :: q(ngrid,nlayer,nq)   ! Mass mixing ratio of tracers (kg/kg_of_air)
+        INTEGER, INTENT(IN) :: iq                   ! id variable active tracer
+        REAL, INTENT(OUT)   :: zh(ngrid,nlayer)     ! Potential temperature (K)
+        REAL, INTENT(OUT)   :: zpopsk(ngrid,nlayer) ! Exner function
+    
+        ! Local variables
+        integer :: ig,l
+        logical, save :: firstcall=.true.
+!$OMP THREADPRIVATE(firstcall)
+        character(len=80),parameter :: myname = "thermodynamics_update" 
+        
+        if (firstcall) then
+          ALLOCATE(r(ngrid,nlayer))
+          ALLOCATE(cpp(ngrid,nlayer))
+          ALLOCATE(rcp(ngrid,nlayer))
+          
+          SELECT CASE (TRIM(thermo_phy))
+            CASE('thermo_uni_ideal')
+              ! Ideal gas, homogeneous
+              r(:,:) = rd_ref
+              cpp(:,:) = cppd_ref
+              rcp(:,:) = rcp_ref
+            CASE DEFAULT
+            write(*,*) 'Bad selector for thermodynamics mod: <', TRIM(thermo_phy), '>'
+            call abort_physic(trim(myname),'Bad selector for thermodynamics mod!',1)
+          END SELECT
+          
+          firstcall=.false.
+        endif ! of if (firstcall)
+        
+        SELECT CASE (TRIM(thermo_phy))
+
+         CASE('thermo_uni_ideal')
+            ! Ideal gas
+            do l=1,nlayer
+              do ig=1,ngrid
+                zpopsk(ig,l) = (pplay(ig,l)/pplev(ig,1))**rcp(ig,l)
+                zh(ig,l) = t(ig,l)/zpopsk(ig,l)
+              enddo
+            enddo
+         CASE DEFAULT
+            write(*,*) 'Bad selector for thermodynamics mod: <', TRIM(thermo_phy), '>'
+            write(*,*) 'Option is <thermo_uni_ideal>'
+            call abort_physic(trim(myname),'Bad selector for thermodynamics mod!',1)
+        END SELECT
+        
+        end subroutine thermodynamics_update
+        
+        end module pcm_thermodynamics_mod
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/physiq_mod.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/physiq_mod.F90	(revision 4163)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/physiq_mod.F90	(revision 4164)
@@ -63,5 +63,5 @@
                             obliquit, nres, z0
       use comcstfi_mod, only: pi, g, rcp_ref, rd_ref, rad, mugaz_ref, cppd_ref
-      use thermo_mod
+      use pcm_thermodynamics_mod, only: thermodynamics_update, r, cpp
       use time_phylmdz_mod, only: daysec
       use callkeys_mod, only: albedo_spectral_mode, calladj, calldifv, &
@@ -855,5 +855,5 @@
         igcm_generic_vap=1
       endif
-      call thermodynamics(thermo_phy, pplay, pplev, pt, ngrid, nlayer, nq, pq, igcm_generic_vap, zh, zpopsk)
+      call thermodynamics_update(thermo_phy, pplay, pplev, pt, ngrid, nlayer, nq, pq, igcm_generic_vap, zh, zpopsk)
 
 ! ------------------------------------------------------
@@ -1223,5 +1223,5 @@
          
          ! Update thermodynamics
-         call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+         call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
          ! Test of energy conservation
@@ -1305,5 +1305,5 @@
 
          ! Update thermodynamics
-         call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+         call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
          
          ! test energy conservation
@@ -1418,5 +1418,5 @@
          
          ! Update thermodynamics
-         call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+         call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
       ENDIF ! end of 'calltherm'
@@ -1451,5 +1451,5 @@
          
          ! Update thermodynamics
-         call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+         call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
          ! Test energy conservation
@@ -1505,5 +1505,5 @@
          
          ! Update thermodynamics
-         call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+         call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
       ENDIF ! of IF (calllott_nonoro)
@@ -1534,5 +1534,5 @@
 
          ! Update thermodynamics
-         call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+         call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
          ! test energy conservation
@@ -1589,5 +1589,5 @@
                   
                   ! Update thermodynamics
-                  call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+                  call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
                   ! Test energy conservation.
@@ -1629,5 +1629,5 @@
                
                ! Update thermodynamics
-               call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+               call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
                ! Test energy conservation.
@@ -1679,5 +1679,5 @@
                
                ! Update thermodynamics
-               call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+               call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
                ! Test energy conservation.
@@ -1765,5 +1765,5 @@
            
            ! Update thermodynamics
-           call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+           call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
          END IF  ! of IF (photochem)
@@ -1790,5 +1790,5 @@
                
                ! Update thermodynamics
-               call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+               call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
                ! Test energy conservation.
@@ -1830,5 +1830,5 @@
             
             ! Update thermodynamics
-            call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+            call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
             if(enertest)then
@@ -1892,5 +1892,5 @@
             
             ! Update thermodynamics
-            call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+            call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
             ! Test energy conservation.
@@ -1980,5 +1980,5 @@
             
             ! Update thermodynamics
-            call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+            call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
             ! Test water conservation
@@ -2042,5 +2042,5 @@
             
             ! Update thermodynamics
-            call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+            call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
          endif
@@ -2162,5 +2162,5 @@
          
         ! Update thermodynamics
-        call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+        call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
       endif! end of if 'tracer'
@@ -2486,5 +2486,5 @@
         
         ! Update thermodynamics
-        call thermodynamics(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
+        call thermodynamics_update(thermo_phy, pplay, pplev, pt+pdt*ptimestep, ngrid, nlayer, nq, pq+pdq*ptimestep, igcm_generic_vap,zh,zpopsk)
 
       endif ! of if (callthermos)
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/rad_correlatedk.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/rad_correlatedk.F90	(revision 4163)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/rad_correlatedk.F90	(revision 4164)
@@ -38,5 +38,5 @@
       use tracer_h, only: constants_epsi_generic
       use comcstfi_mod, only: pi, mugaz_ref
-      use thermo_mod, only: cpp
+      use pcm_thermodynamics_mod, only: cpp
       use callkeys_mod, only: varactive,diurnal,tracer,water,varfixed,satval, &
                               diagdtau,kastprof,strictboundcorrk,specOLR, &
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/rain_generic.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/rain_generic.F90	(revision 4163)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/rain_generic.F90	(revision 4164)
@@ -8,6 +8,6 @@
    use aerosol_radius, only: aerosol_radius_h2o_liquid_ice_separate ! only used for precip_scheme_generic >=2
    use tracer_h
-   use comcstfi_mod, only: g, cppc_ref
-   use thermo_mod
+   use comcstfi_mod, only: g, cppc_ref, cppd_ref
+   use pcm_thermodynamics_mod, only: r
    use generic_tracer_index_mod, only: generic_tracer_index
    use callkeys_mod, only: thermo_phy,metallicity,evap_prec_generic,evap_coeff_generic, &
Index: unk/LMDZ.GENERIC/libf/phygeneric/thermo_mod.F90
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/thermo_mod.F90	(revision 4163)
+++ 	(revision )
@@ -1,58 +1,0 @@
-      module thermo_mod
-
-      use comcstfi_mod, only: cppd_ref,cppv_ref,rd_ref, rcp_ref, mugaz_ref
-      
-      implicit none
-      
-      REAL, SAVE, ALLOCATABLE, PROTECTED :: r(:,:)     ! Reduced gas constant of atmosphere
-      REAL, SAVE, ALLOCATABLE, PROTECTED :: cpp(:,:)   ! Cp of the atmosphere (J/K/kg)
-      REAL, SAVE, ALLOCATABLE, PROTECTED :: rcp(:,:)   ! r/cpp (gamma) of atmosphere
-!$OMP THREADPRIVATE(r,cpp,rcp)
-      
-      contains
-      
-      subroutine thermodynamics(thermo_phy, pplay, pplev, t, ngrid, nlayer, nq, q, iq, zh, zpopsk)
-        CHARACTER(64), INTENT(IN) :: thermo_phy               ! flag
-        REAL, INTENT(IN)    :: pplay(ngrid,nlayer)      ! pressure (Pa)
-        REAL, INTENT(IN)    :: pplev(ngrid,nlayer)      ! pressure (Pa)
-        REAL, INTENT(IN)    :: t(ngrid,nlayer)      ! temperature (K)
-        INTEGER, INTENT(IN) :: ngrid, nlayer,nq     ! Number of cells, vertical layers and tracers
-        REAL, INTENT(IN)    :: q(ngrid,nlayer,nq)   ! Mass mixing ratio of tracers (kg/kg_of_air)
-        INTEGER, INTENT(IN) :: iq                   ! id variable active tracer
-        REAL, INTENT(OUT)   :: zh(ngrid,nlayer)     ! Potential temperature (K)
-        REAL, INTENT(OUT)   :: zpopsk(ngrid,nlayer) ! Exner function
-    
-        ! Local variables
-        integer :: ig,l
-        logical, save :: firstcall=.true.
-!$OMP THREADPRIVATE(firstcall)
-        
-        if (firstcall) then
-          ALLOCATE(r(ngrid,nlayer))
-          ALLOCATE(cpp(ngrid,nlayer))
-          ALLOCATE(rcp(ngrid,nlayer))
-          firstcall=.false.
-        endif
-        
-        SELECT CASE (TRIM(thermo_phy))
-
-         CASE('thermo_uni_ideal')
-            ! Ideal gas
-            r(:,:) = rd_ref
-            cpp(:,:) = cppd_ref
-            rcp(:,:) = rcp_ref
-            do l=1,nlayer
-              do ig=1,ngrid
-                zpopsk(ig,l) = (pplay(ig,l)/pplev(ig,1))**rcp(ig,l)
-                zh(ig,l) = t(ig,l)/zpopsk(ig,l)
-              enddo
-            enddo
-         CASE DEFAULT
-            write(*,*) 'Bad selector for thermodynamics mod: <', TRIM(thermo_phy), '>'
-            write(*,*) 'Option is <thermo_uni_ideal>'
-            call abort
-        END SELECT
-        
-        end subroutine thermodynamics
-        
-        end module thermo_mod
Index: /trunk/LMDZ.GENERIC/libf/phygeneric/vdif_kc.F
===================================================================
--- /trunk/LMDZ.GENERIC/libf/phygeneric/vdif_kc.F	(revision 4163)
+++ /trunk/LMDZ.GENERIC/libf/phygeneric/vdif_kc.F	(revision 4164)
@@ -5,5 +5,5 @@
       use callkeys_mod, only: generic_condensation, 
      &                        virtual_theta_correction,thermo_phy
-      use thermo_mod, only: rcp
+      use pcm_thermodynamics_mod, only: rcp
       use tracer_h
       IMPLICIT NONE
