New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 2271 – NEMO

Changeset 2271


Ignore:
Timestamp:
2010-10-14T18:41:36+02:00 (14 years ago)
Author:
rblod
Message:

Fix global sum issue in sbcfwb see ticket #737

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90

    r2236 r2271  
    3535   REAL(wp) ::   area               ! global mean ocean surface (interior domain) 
    3636 
    37    REAL(wp), DIMENSION(jpi,jpj) ::   e1e2_i    ! area of the interior domain (e1t*e2t*tmask_i) 
     37   REAL(wp), DIMENSION(jpi,jpj) ::   e1e2    ! area of the interior domain (e1t*e2t) 
    3838 
    3939   !! * Substitutions 
     
    8787         ENDIF 
    8888         ! 
    89          e1e2_i(:,:) = e1t(:,:) * e2t(:,:) * tmask_i(:,:) 
    90          area = glob_sum( e1e2_i(:,:) )   ! sum over the global domain 
     89         e1e2(:,:) = e1t(:,:) * e2t(:,:)  
     90         area = glob_sum( e1e2(:,:) )   ! sum over the global domain 
    9191         ! 
    9292      ENDIF 
     
    103103      CASE ( 1 )                               ! global mean fwf set to zero 
    104104         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    105             z_fwf = glob_sum( e1e2_i(:,:) * ( emp(:,:) - rnf(:,:) ) ) / area   ! sum over the global domain 
     105            z_fwf = glob_sum( e1e2(:,:) * ( emp(:,:) - rnf(:,:) ) ) / area   ! sum over the global domain 
    106106            emp (:,:) = emp (:,:) - z_fwf  
    107107            emps(:,:) = emps(:,:) - z_fwf  
     
    127127         IF( MOD( kt, ikty ) == 0 ) THEN 
    128128            a_fwb_b = a_fwb 
    129             a_fwb   = glob_sum( e1e2_i(:,:) * sshn(:,:) )   ! sum over the global domain 
     129            a_fwb   = glob_sum( e1e2(:,:) * sshn(:,:) )   ! sum over the global domain 
    130130            a_fwb   = a_fwb * 1.e+3 / ( area * 86400. * 365. )     ! convert in Kg/m3/s = mm/s 
    131131!!gm        !                                                      !!bug 365d year  
     
    156156 
    157157            ! Area filled by <0 and >0 erp  
    158             zsurf_neg = SUM( e1e2_i(:,:)*ztmsk_neg(:,:) ) 
    159             zsurf_pos = SUM( e1e2_i(:,:)*ztmsk_pos(:,:) ) 
     158            zsurf_neg = glob_sum( e1e2(:,:)*ztmsk_neg(:,:) ) 
     159            zsurf_pos = glob_sum( e1e2(:,:)*ztmsk_pos(:,:) ) 
    160160         
    161161            ! fwf global mean  
    162             z_fwf = glob_sum( e1e2_i(:,:) * ( emp(:,:) - rnf(:,:) ) ) / area 
    163             IF( lk_mpp )   CALL  mpp_sum( z_fwf ) 
    164             IF( lk_mpp )   CALL  mpp_sum( zsurf_neg ) 
    165             IF( lk_mpp )   CALL  mpp_sum( zsurf_pos ) 
     162            z_fwf = glob_sum( e1e2(:,:) * ( emp(:,:) - rnf(:,:) ) ) / area 
    166163             
    167164            IF( z_fwf < 0.e0 ) THEN 
     
    176173 
    177174            ! fwf global mean over <0 or >0 erp area 
    178             zsum_fwf = SUM( e1e2_i(:,:) * z_fwf ) 
    179             IF( lk_mpp )   CALL  mpp_sum( zsum_fwf ) 
     175            zsum_fwf = glob_sum( e1e2(:,:) * z_fwf ) 
    180176            z_fwf_nsrf =  zsum_fwf / ( zsurf_tospread + rsmall ) 
    181177            ! weight to respect erp field 2D structure  
    182 !!gm  Strange           
    183             z_wgt(:,:) = ztmsk_tospread(:,:) * erp(:,:) / ( SUM( ztmsk_tospread(:,:) * erp(:,:) * e1e2_i(:,:) ) + rsmall ) 
     178            zsum_erp = glob_sum( ztmsk_tospread(:,:) * erp(:,:) * e1e2(:,:) ) 
     179            z_wgt(:,:) = ztmsk_tospread(:,:) * erp(:,:) / ( zsum_erp + rsmall ) 
     180 
    184181            ! final correction term to apply 
    185182            zerp_cor(:,:) = -1. * z_fwf_nsrf * zsurf_tospread * z_wgt(:,:) 
     
    194191               IF( z_fwf < 0.e0 ) THEN 
    195192                  WRITE(numout,*)'       z_fwf < 0' 
    196                   WRITE(numout,*)'       SUM(erp+)        = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
     193                  WRITE(numout,*)'       SUM(erp+)        = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2(:,:) )*1.e-3,' m3.s-1' 
    197194               ELSE 
    198195                   WRITE(numout,*)'      z_fwf >= 0' 
    199                    WRITE(numout,*)'      SUM(erp-)        = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
     196                   WRITE(numout,*)'      SUM(erp-)        = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2(:,:) )*1.e-3,' m3.s-1' 
    200197               ENDIF 
    201                WRITE(numout,*)'      SUM(empG)        = ', SUM( z_fwf*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
     198               WRITE(numout,*)'      SUM(empG)        = ', SUM( z_fwf*e1e2(:,:) )*1.e-3,' m3.s-1' 
    202199               WRITE(numout,*)'      z_fwf            = ', z_fwf      ,' mm.s-1' 
    203200               WRITE(numout,*)'      z_fwf_nsrf       = ', z_fwf_nsrf ,' mm.s-1' 
Note: See TracChangeset for help on using the changeset viewer.