diff --git a/cfgs/SHARED/field_def_nemo-oce.xml b/cfgs/SHARED/field_def_nemo-oce.xml index 240c3913dad841c05331260dd38de1297f7c6f62..bd4a63c22d55d1967c0655a491c2ec4157e4451a 100644 --- a/cfgs/SHARED/field_def_nemo-oce.xml +++ b/cfgs/SHARED/field_def_nemo-oce.xml @@ -765,7 +765,7 @@ that are available in the tidal-forcing implementation (see <field id="avt_k" long_name="vertical eddy diffusivity from closure schemes" standard_name="ocean_vertical_eddy_diffusivity" unit="m2/s" /> <field id="avm_k" long_name="vertical eddy viscosity from closure schemes" standard_name="ocean_vertical_eddy_viscosity" unit="m2/s" /> <field id="ediss_k" long_name="Kolmogorov energy dissipation (tke scheme)" standard_name="Kolmogorov_energy_dissipation" unit="W/kg" /> - <field id="eshear_k" long_name="energy source from vertical shear" standard_name="energy_source_from_shear" unit="W/kg" /> + <field id="eshear_k" long_name="energy source from vertical shear" standard_name="energy_source_from_shear" unit="W/kg" grid_ref="grid_W_3D_inner" /> <field id="estrat_k" long_name="energy sink from stratification" standard_name="energy_sink_from_stratification" unit="W/kg" /> </field_group> diff --git a/src/OCE/DIA/diaar5.F90 b/src/OCE/DIA/diaar5.F90 index 38e70c73fef6886972f9b99e797e3d63eb3e4cb8..00ef362d9c60f1b4f41e81504ca9bf9ed02f23bb 100644 --- a/src/OCE/DIA/diaar5.F90 +++ b/src/OCE/DIA/diaar5.F90 @@ -87,7 +87,7 @@ CONTAINS IF( l_ar5 ) THEN ALLOCATE( zarea_ssh(jpi,jpj), zbotpres(jpi,jpj), z2d(jpi,jpj) ) - ALLOCATE( zrhd(jpi,jpj,jpk) ) + ALLOCATE( zrhd(jpi,jpj,jpk), z3d(jpi,jpj,jpk) ) ALLOCATE( ztsn(jpi,jpj,jpk,jpts) ) zarea_ssh(:,:) = e1e2t(:,:) * ssh(:,:,Kmm) ENDIF @@ -295,8 +295,9 @@ CONTAINS ENDIF IF( l_ar5 ) THEN - DEALLOCATE( zarea_ssh , zbotpres, z2d ) - DEALLOCATE( ztsn ) + DEALLOCATE( zarea_ssh, zbotpres, z2d ) + DEALLOCATE( z3d ) + DEALLOCATE( ztsn ) ENDIF ! IF( ln_timing ) CALL timing_stop('dia_ar5') diff --git a/src/OCE/IOM/iom.F90 b/src/OCE/IOM/iom.F90 index de1bd979ec77b70e9224d94920ae458ac9675670..ac8147cca28c52ccf67298b4bb22725f26716c8c 100644 --- a/src/OCE/IOM/iom.F90 +++ b/src/OCE/IOM/iom.F90 @@ -2266,9 +2266,11 @@ CONTAINS LOGICAL, INTENT(IN) :: ldxios, ldrxios !!---------------------------------------------------------------------- ! + ! nn_hls halo points CALL iom_set_domain_attr("grid_"//cdgrd, ni_glo=Ni0glo,nj_glo=Nj0glo,ibegin=mig0(Nis0)-1,jbegin=mjg0(Njs0)-1,ni=Ni_0,nj=Nj_0) CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = -nn_hls, data_ni=jpi, data_jbegin = -nn_hls, data_nj=jpj) + ! Inner domain only CALL iom_set_domain_attr("grid_"//cdgrd//"_inner", ni_glo = Ni0glo, nj_glo = Nj0glo, & & ibegin = mig0(Nis0) - 1, jbegin = mjg0(Njs0) - 1, ni = Ni_0, nj = Nj_0) CALL iom_set_domain_attr("grid_"//cdgrd//"_inner", data_dim=2, data_ibegin = 0, data_ni=Ni_0, data_jbegin = 0, data_nj=Nj_0) @@ -2280,14 +2282,16 @@ CONTAINS idb(jn) = -nn_hls ! Tile data offset (halo size) END DO - ! Tile_[ij]begin are defined with respect to the processor data domain, so data_[ij]begin is added + ! Data includes all halo points CALL iom_set_domain_attr("grid_"//cdgrd, ntiles=nijtile, & - & tile_ibegin=ntsi_a(1:nijtile) + idb(:) - 1, tile_jbegin=ntsj_a(1:nijtile) + idb(:) - 1, & + & tile_ibegin=ntsi_a(1:nijtile) - nn_hls - 1, tile_jbegin=ntsj_a(1:nijtile) - nn_hls - 1, & & tile_ni=ini(:), tile_nj=inj(:), & & tile_data_ibegin=idb(:), tile_data_jbegin=idb(:), & & tile_data_ni=ini(:) - 2 * idb(:), tile_data_nj=inj(:) - 2 * idb(:)) + ! Data contains no halo points + idb(:) = 0 CALL iom_set_domain_attr("grid_"//cdgrd//"_inner", ntiles=nijtile, & - & tile_ibegin=ntsi_a(1:nijtile) + idb(:) - 1, tile_jbegin=ntsj_a(1:nijtile) + idb(:) - 1, & + & tile_ibegin=ntsi_a(1:nijtile) - nn_hls - 1, tile_jbegin=ntsj_a(1:nijtile) - nn_hls - 1, & & tile_ni=ini(:), tile_nj=inj(:), & & tile_data_ibegin=idb(:), tile_data_jbegin=idb(:), & & tile_data_ni=ini(:) - 2 * idb(:), tile_data_nj=inj(:) - 2 * idb(:)) diff --git a/src/OCE/ZDF/zdfphy.F90 b/src/OCE/ZDF/zdfphy.F90 index 66beff367532ff7bd636d5b8a640a8a2918e26f6..9988073a3d1c9edf2531201526aa21653495ac6c 100644 --- a/src/OCE/ZDF/zdfphy.F90 +++ b/src/OCE/ZDF/zdfphy.F90 @@ -379,10 +379,10 @@ CONTAINS ! diagnostics of energy dissipation IF( iom_use('avt_k') .OR. iom_use('avm_k') .OR. iom_use('eshear_k') .OR. iom_use('estrat_k') ) THEN IF( l_zdfsh2 ) THEN - CALL iom_put( 'avt_k' , avt_k * wmask ) - CALL iom_put( 'avm_k' , avm_k * wmask ) - CALL iom_put( 'eshear_k', zsh2 * wmask ) - CALL iom_put( 'estrat_k', - avt_k * rn2 * wmask ) + CALL iom_put( 'avt_k' , avt_k * wmask ) + CALL iom_put( 'avm_k' , avm_k * wmask ) + CALL iom_put( 'eshear_k', zsh2(A2D(0),:) * wmask(A2D(0),:) ) + CALL iom_put( 'estrat_k', - avt_k * rn2 * wmask ) ENDIF ENDIF ! diff --git a/src/OCE/ZDF/zdftke.F90 b/src/OCE/ZDF/zdftke.F90 index 6e3e6b93fb9d2207d66068e57693f20df20fe787..cfacb6285c444b309d07234a5794d5df3e45fc7e 100644 --- a/src/OCE/ZDF/zdftke.F90 +++ b/src/OCE/ZDF/zdftke.F90 @@ -219,7 +219,7 @@ CONTAINS INTEGER , DIMENSION(A2D(nn_hls)) :: imlc REAL(wp), DIMENSION(A2D(nn_hls)) :: zice_fra, zhlc, zus3, zWlc2 REAL(wp), DIMENSION(A2D(nn_hls),jpk) :: zpelc, zdiag, zd_up, zd_lw - REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztmp ! for diags + REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, SAVE :: ztmp ! for diags REAL(wp) :: zdiv !!-------------------------------------------------------------------- ! @@ -462,15 +462,17 @@ CONTAINS ! ediss = Ce*sqrt(en)/L*en ! dissl = sqrt(en)/L IF( iom_use('ediss_k') ) THEN - ALLOCATE( ztmp(A2D(nn_hls),jpk) ) - DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) + IF( .NOT. l_istiled .OR. ntile == 1 ) THEN + ALLOCATE( ztmp(jpi,jpj,jpk) ) + ztmp(:,:,:) = 0._wp + ENDIF + DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) ztmp(ji,jj,jk) = zfact3 * dissl(ji,jj,jk) * en(ji,jj,jk) * wmask(ji,jj,jk) END_3D - DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) - ztmp(ji,jj,jpk) = 0._wp - END_2D - CALL iom_put( 'ediss_k', ztmp ) - DEALLOCATE( ztmp ) + IF( .NOT. l_istiled .OR. ntile == nijtile ) THEN + CALL iom_put( 'ediss_k', ztmp ) + DEALLOCATE( ztmp ) + ENDIF ENDIF ! ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<