diff --git a/src/OCE/SBC/sbcclo.F90 b/src/OCE/SBC/sbcclo.F90 index 44fe238211a5f0e8f33a44ba9bf3101e3badeae4..ba956f5e32dfa77dfea9106ee2855e2b2659d716 100644 --- a/src/OCE/SBC/sbcclo.F90 +++ b/src/OCE/SBC/sbcclo.F90 @@ -38,11 +38,11 @@ MODULE sbcclo PUBLIC sbc_clo PUBLIC sbc_clo_init ! - REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:) :: rsurfsrcg, rsurftrgg !: closed sea source/target glo surface areas - REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:) :: rsurfsrcr, rsurftrgr !: closed sea source/target rnf surface areas - REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:) :: rsurfsrce, rsurftrge !: closed sea source/target emp surface areas + REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:) :: rsurfsrcg, rsurftrgg !: closed sea source/target glo surface areas + REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:) :: rsurfsrcr, rsurftrgr !: closed sea source/target rnf surface areas + REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:) :: rsurfsrce, rsurftrge !: closed sea source/target emp surface areas ! - INTEGER, PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:) :: mcsgrpg, mcsgrpr, mcsgrpe !: closed sea group for glo, rnf and emp + INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: mcsgrpg, mcsgrpr, mcsgrpe !: closed sea group for glo, rnf and emp ! CONTAINS ! @@ -301,19 +301,21 @@ MODULE sbcclo imsk_trg = kmsk_grp * kmsk_opnsea END IF ! - !! 3. Subtract residuals from source points - zcsfwf = zcsfw / zsurfsrc - pwcs(:,:) = pwcs(:,:) - zcsfwf * imsk_src(:,:) - pqcs(:,:) = pqcs(:,:) + rcp * zcsfwf * sst_m(:,:) * imsk_src(:,:) - ! - !! 4. Add residuals to target points - !! Do not use pqcs(:,:) = pqcs(:,:) - rcp * zcsfw * sst_m(:,:) / zsurftrg - !! as there is no reason heat will be conserved with this formulation - zcsh = glob_sum( 'closea', e1e2t(:,:) * rcp * zcsfwf * sst_m(:,:) * imsk_src(:,:) ) - WHERE( imsk_trg(:,:) == kcsgrp(jcs) ) - pwcs(:,:) = pwcs(:,:) + zcsfw / zsurftrg - pqcs(:,:) = pqcs(:,:) - zcsh / zsurftrg - ENDWHERE + IF( zsurftrg > 0._wp ) THEN ! target area /=0 + !! 3. Subtract residuals from source points + zcsfwf = zcsfw / zsurfsrc + pwcs(:,:) = pwcs(:,:) - zcsfwf * imsk_src(:,:) + pqcs(:,:) = pqcs(:,:) + rcp * zcsfwf * sst_m(:,:) * imsk_src(:,:) + ! + !! 4. Add residuals to target points + !! Do not use pqcs(:,:) = pqcs(:,:) - rcp * zcsfw * sst_m(:,:) / zsurftrg + !! as there is no reason heat will be conserved with this formulation + zcsh = glob_sum( 'closea', e1e2t(:,:) * rcp * zcsfwf * sst_m(:,:) * imsk_src(:,:) ) + WHERE( imsk_trg(:,:) == kcsgrp(jcs) ) + pwcs(:,:) = pwcs(:,:) + zcsfw / zsurftrg + pqcs(:,:) = pqcs(:,:) - zcsh / zsurftrg + ENDWHERE + ENDIF ! END DO ! jcs