From b9ebac2c902439db77207e2e77a1818b91d3af95 Mon Sep 17 00:00:00 2001
From: Christian Ethe <christian.ethe@ipsl.fr>
Date: Wed, 12 Apr 2023 07:47:08 +0000
Subject: [PATCH] Resolve "Minor error in PISCES uninitialized arrays"

---
 src/OFF/dtadyn.F90            |  2 +-
 src/OFF/nemogcm.F90           |  5 ++++-
 src/TOP/PISCES/P4Z/p4zlys.F90 | 26 ++++++++++++++------------
 3 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/src/OFF/dtadyn.F90 b/src/OFF/dtadyn.F90
index 6fd6804d..f8167208 100644
--- a/src/OFF/dtadyn.F90
+++ b/src/OFF/dtadyn.F90
@@ -172,7 +172,7 @@ CONTAINS
          ENDIF
       ENDIF
       !
-      CALL eos    ( ts(:,:,:,:,:), Kmm, rhd ) ! In any case, we need rhd
+      CALL eos    ( ts(:,:,:,:,:), Kmm, rhd, rhop ) ! In any case, we need rhop
       CALL eos_rab( ts(:,:,:,:,Kmm), rab_n, Kmm )       ! now    local thermal/haline expension ratio at T-points
       CALL bn2    ( ts(:,:,:,:,Kmm), rab_n, rn2, Kmm )  ! before Brunt-Vaisala frequency need for zdfmxl
 
diff --git a/src/OFF/nemogcm.F90 b/src/OFF/nemogcm.F90
index e1046b80..6ea5e372 100644
--- a/src/OFF/nemogcm.F90
+++ b/src/OFF/nemogcm.F90
@@ -145,7 +145,10 @@ CONTAINS
                                 CALL dom_qco_r3c( ssh(:,:,Nnn), r3t_f, r3u_f, r3v_f )
 # endif
          ENDIF
-                                CALL trc_stp    ( istp, Nbb, Nnn, Nrhs, Naa ) ! time-stepping
+
+         IF( l_ldftra_time .OR. l_ldfeiv_time )  CALL ldf_tra( istp, Nbb, Nnn )  ! eddy diffusivity coeff. and/or eiv coeff.
+
+                                CALL trc_stp    ( istp, Nbb, Nnn, Nrhs, Naa )    ! time-stepping
          ! Swap time levels
          Nrhs = Nbb
          Nbb  = Nnn
diff --git a/src/TOP/PISCES/P4Z/p4zlys.F90 b/src/TOP/PISCES/P4Z/p4zlys.F90
index d67060f1..0a5235fe 100644
--- a/src/TOP/PISCES/P4Z/p4zlys.F90
+++ b/src/TOP/PISCES/P4Z/p4zlys.F90
@@ -67,7 +67,7 @@ CONTAINS
       INTEGER, INTENT(in)  ::  Kbb, Kmm, Krhs ! time level indices
       !
       INTEGER  ::   ji, jj, jk, jn
-      REAL(wp) ::   zdispot, zrhd, zcalcon, zdepexp, zdissol
+      REAL(wp) ::   zdispot, zfact, zcalcon, zdepexp, zdissol
       REAL(wp) ::   zomegaca, zexcess, zexcess0, zkd, zwsbio
       CHARACTER (len=25) ::   charout
       REAL(wp), DIMENSION(A2D(0),jpk) :: zhinit, zhi, zco3, zcaco3, ztra
@@ -113,8 +113,8 @@ CONTAINS
          ! DEVIATION OF [CO3--] FROM SATURATION VALUE
          ! Salinity dependance in zomegaca and divide by rhop to have good units
          zcalcon  = calcon * ( salinprac(ji,jj,jk) / 35._wp )
-         zrhd    = rhop(ji,jj,jk) / 1000._wp
-         zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zrhd + rtrn )
+         zfact    = rhop(ji,jj,jk) / 1000._wp
+         zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zfact + rtrn )
 
          ! SET DEGREE OF UNDER-/SUPERSATURATION
          excess(ji,jj,jk) = 1._wp - zomegaca
@@ -136,6 +136,8 @@ CONTAINS
         !
       END_3D
       !
+      zcaco3(:,:,:) = 0._wp
+      !
       DO_2D( 0, 0, 0, 0 )
          zcaco3(ji,jj,1) = prodcal(ji,jj,1) * rfact2r / ( wsbio4(ji,jj,1) / e3t(ji,jj,1,Kmm) / rday + ztra(ji,jj,1) )
       END_2D
@@ -203,9 +205,9 @@ CONTAINS
          ENDIF
          IF( iom_use( "CO3sat" ) ) THEN  ! calcite saturation
              DO_3D( 0, 0, 0, 0, 1, jpkm1)
-                zrhd  = rhop(ji,jj,jk) / 1000._wp
-                zw3d(ji,jj,jk) = aksp(ji,jj,jk) / zrhd / ( calcon * ( salinprac(ji,jj,jk) / 35._wp ) + rtrn )  &
-                 &            * 1.e+3 * tmask(ji,jj,jk)
+                zcalcon        = calcon * ( salinprac(ji,jj,jk) / 35._wp )
+                zfact          = rhop(ji,jj,jk) / 1000._wp
+                zw3d(ji,jj,jk) = aksp(ji,jj,jk) * zfact / ( zcalcon + rtrn )  * 1.e+3 * tmask(ji,jj,jk)
              END_3D
              CALL iom_put( "CO3sat", zw3d )
          ENDIF
@@ -230,7 +232,7 @@ CONTAINS
       INTEGER, INTENT(in)  ::  Kbb, Krhs ! time level indices
       !
       INTEGER  ::   ji, jj, jk, jn
-      REAL(wp) ::   zdispot, zrhd, zcalcon, ztra
+      REAL(wp) ::   zdispot, zfact, zcalcon, ztra
       REAL(wp) ::   zomegaca, zexcess, zexcess0, zkd
       CHARACTER (len=25) ::   charout
       REAL(wp), DIMENSION(A2D(0),jpk) :: zhinit, zhi, zco3
@@ -276,8 +278,8 @@ CONTAINS
          ! DEVIATION OF [CO3--] FROM SATURATION VALUE
          ! Salinity dependance in zomegaca and divide by rhd to have good units
          zcalcon  = calcon * ( salinprac(ji,jj,jk) / 35._wp )
-         zrhd    = rhop(ji,jj,jk) / 1000._wp
-         zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zrhd + rtrn )
+         zfact    = rhop(ji,jj,jk) / 1000._wp
+         zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zfact + rtrn )
 
          ! SET DEGREE OF UNDER-/SUPERSATURATION
          excess(ji,jj,jk) = 1._wp - zomegaca
@@ -330,9 +332,9 @@ CONTAINS
          ENDIF
          IF( iom_use( "CO3sat" ) ) THEN  ! calcite saturation
              DO_3D( 0, 0, 0, 0, 1, jpkm1)
-                zrhd  = rhop(ji,jj,jk) / 1000._wp
-                zw3d(ji,jj,jk) = aksp(ji,jj,jk) / zrhd / ( calcon * ( salinprac(ji,jj,jk) / 35._wp ) + rtrn )  &
-                 &            * 1.e+3 * tmask(ji,jj,jk)
+                zcalcon        = calcon * ( salinprac(ji,jj,jk) / 35._wp )
+                zfact          = rhop(ji,jj,jk) / 1000._wp
+                zw3d(ji,jj,jk) = aksp(ji,jj,jk) * zfact / ( zcalcon + rtrn )  * 1.e+3 * tmask(ji,jj,jk)
              END_3D
              CALL iom_put( "CO3sat", zw3d ) 
          ENDIF
-- 
GitLab