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