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