From 676a31ced2143afb1af228a8076c83bfea812d2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Chanut?=
 <jerome.chanut@mercator-ocean.fr>
Date: Mon, 18 Jul 2022 09:57:07 +0000
Subject: [PATCH] Resolve "Issues with ssh initialization in iceinit with vvl
 and AGRIF"

---
 src/ICE/iceistate.F90        | 10 +++-------
 src/NST/agrif_oce_interp.F90 | 20 +++++++++++++++++++-
 src/OCE/SBC/sbcdcy.F90       |  4 ++--
 src/OCE/TRA/zpshde.F90       |  6 +++---
 4 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/src/ICE/iceistate.F90 b/src/ICE/iceistate.F90
index c1fb86e09..97c783148 100644
--- a/src/ICE/iceistate.F90
+++ b/src/ICE/iceistate.F90
@@ -436,11 +436,7 @@ CONTAINS
          ! Override ssh adjustment in nested domains by the root-domain ssh adjustment;
          ! store the adjustment value in a global module variable to make it retrievable in nested domains
          IF( .NOT.Agrif_Root() ) THEN
-            IF  (.NOT.ln_init_chfrpar ) THEN   ! child is not initialized from the parent
-               zsshadj = Agrif_Parent(rsshadj)
-            ELSE                               ! child is     initialized from the parent
-               zsshadj = 0._wp                 ! => 0 since ssh adjustement is already done
-            ENDIF
+            zsshadj = Agrif_Parent(rsshadj)
          ELSE
             rsshadj = zsshadj
          ENDIF
@@ -463,10 +459,10 @@ CONTAINS
 #else
          DO jk = 1, jpk
             DO_2D( nn_hls, nn_hls, nn_hls, nn_hls)
-               IF( snwice_mass(ji,jj) /= 0._wp ) THEN
+!               IF( snwice_mass(ji,jj) /= 0._wp ) THEN
                   e3t(ji,jj,jk,Kmm) = e3t_0(ji,jj,jk) * ( 1._wp + ssh(ji,jj,Kmm) * r1_ht_0(ji,jj) * tmask(ji,jj,jk) )
                   e3t(ji,jj,jk,Kbb) = e3t_0(ji,jj,jk) * ( 1._wp + ssh(ji,jj,Kbb) * r1_ht_0(ji,jj) * tmask(ji,jj,jk) )
-               ENDIF
+!               ENDIF
             END_2D
          END DO
          !
diff --git a/src/NST/agrif_oce_interp.F90 b/src/NST/agrif_oce_interp.F90
index 7d25ea554..326ecbbd0 100644
--- a/src/NST/agrif_oce_interp.F90
+++ b/src/NST/agrif_oce_interp.F90
@@ -34,7 +34,11 @@ MODULE agrif_oce_interp
    USE lib_mpp
    USE vremap
    USE lbclnk
- 
+#if defined key_si3
+   USE iceistate, ONLY: rsshadj, nn_iceini_file
+   USE sbc_oce  , ONLY: ln_ice_embd
+   USE sbc_ice  , ONLY: snwice_mass
+#endif 
    IMPLICIT NONE
    PRIVATE
 
@@ -1108,7 +1112,21 @@ CONTAINS
       !!----------------------------------------------------------------------  
       !
       IF( before) THEN
+#if defined key_si3
+         IF (l_ini_child.AND.(.NOT.(ln_rstart .OR. nn_iceini_file == 2))) THEN
+            IF( ln_ice_embd ) THEN  
+               ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Kmm_a)  &
+                    &              + snwice_mass(i1:i2,j1:j2) * r1_rho0
+            ELSE
+               ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Kmm_a)  &
+                    &              + rsshadj * tmask(i1:i2,j1:j2,1)
+            ENDIF
+         ELSE
+            ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Kmm_a)
+         ENDIF
+#else
          ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Kmm_a)
+#endif
       ELSE
          IF( l_ini_child ) THEN
             ssh(i1:i2,j1:j2,Krhs_a) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1)
diff --git a/src/OCE/SBC/sbcdcy.F90 b/src/OCE/SBC/sbcdcy.F90
index 26c44de74..a6ccd0332 100644
--- a/src/OCE/SBC/sbcdcy.F90
+++ b/src/OCE/SBC/sbcdcy.F90
@@ -151,8 +151,8 @@ CONTAINS
          ENDIF
       END_2D
       !
-      IF( PRESENT(l_mask) .AND. l_mask ) THEN
-         zqsrout(:,:) = float(imask_night(:,:))
+      IF( PRESENT(l_mask) ) THEN
+         IF ( l_mask ) zqsrout(:,:) = float(imask_night(:,:))
       ENDIF
       !
    END FUNCTION sbc_dcy
diff --git a/src/OCE/TRA/zpshde.F90 b/src/OCE/TRA/zpshde.F90
index 2b786d65e..0591067f9 100644
--- a/src/OCE/TRA/zpshde.F90
+++ b/src/OCE/TRA/zpshde.F90
@@ -164,7 +164,7 @@ CONTAINS
          END_2D
       END DO
       !
-      IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgtu(:,:,:), 'U', -1.0_wp , pgtv(:,:,:), 'V', -1.0_wp )   ! Lateral boundary cond.
+      IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgtu, 'U', -1.0_wp , pgtv, 'V', -1.0_wp )   ! Lateral boundary cond.
       !
       IF( PRESENT( prd ) ) THEN    !==  horizontal derivative of density anomalies (rd)  ==!    (optional part)
          pgru(:,:) = 0._wp
@@ -343,7 +343,7 @@ CONTAINS
          END_2D
       END DO
       !
-      IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgtu(:,:,:), 'U', -1.0_wp , pgtv(:,:,:), 'V', -1.0_wp )   ! Lateral boundary cond.
+      IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgtu, 'U', -1.0_wp , pgtv, 'V', -1.0_wp )   ! Lateral boundary cond.
 
       ! horizontal derivative of density anomalies (rd)
       IF( PRESENT( prd ) ) THEN         ! depth of the partial step level
@@ -436,7 +436,7 @@ CONTAINS
          END_2D
          !
       END DO
-      IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgtui(:,:,:), 'U', -1.0_wp , pgtvi(:,:,:), 'V', -1.0_wp )   ! Lateral boundary cond.
+      IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgtui, 'U', -1.0_wp , pgtvi, 'V', -1.0_wp )   ! Lateral boundary cond.
 
       IF( PRESENT( prd ) ) THEN    !==  horizontal derivative of density anomalies (rd)  ==!    (optional part)
          !
-- 
GitLab