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 3187 for branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/lib_fortran.F90 – NEMO

Ignore:
Timestamp:
2011-11-28T17:44:46+01:00 (12 years ago)
Author:
spickles2
Message:

Stephen Pickles, 28 Nov 2011.
First commit of dCSE NEMO project work, part 1 - index re-ordering,
OPA_SRC top level only. Includes fix for sub-optimal auto-partitioning
in nemogcm.F90.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/lib_fortran.F90

    r2528 r3187  
    2828 
    2929   INTERFACE glob_sum 
    30       MODULE PROCEDURE glob_sum_2d, glob_sum_3d,glob_sum_2d_a, glob_sum_3d_a  
     30      MODULE PROCEDURE glob_sum_2d, glob_sum_3d, glob_sum_2d_a, glob_sum_3d_a  
    3131   END INTERFACE 
    3232 
     
    3939#endif 
    4040 
     41   !! * Control permutation of array indices 
     42#  include "dom_oce_ftrans.h90" 
     43 
    4144   !!---------------------------------------------------------------------- 
    4245   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     
    6972      !! ** Purpose : perform a masked sum on the inner global domain of a 3D array 
    7073      !!----------------------------------------------------------------------- 
     74!FTRANS ptab :I :I :z  
    7175      REAL(wp), INTENT(in), DIMENSION(:,:,:) ::   ptab       ! input 3D array 
    7276      REAL(wp)                               ::   glob_sum   ! global masked sum 
    7377      !! 
    7478      INTEGER :: jk 
     79#if defined key_z_first 
     80      INTEGER :: ji, jj 
     81      REAL(wp) :: ztmask 
     82#endif 
    7583      !!----------------------------------------------------------------------- 
    7684      ! 
    7785      glob_sum = 0.e0 
     86#if defined key_z_first 
     87      DO jj = 1, jpj 
     88        DO ji = 1, jpi 
     89          ztmask = tmask_i(ji,jj) 
     90          DO jk = 1, jpk 
     91            glob_sum = glob_sum + ptab(ji,jj,jk)*ztmask 
     92          END DO 
     93        END DO 
     94      END DO 
     95#else 
    7896      DO jk = 1, jpk 
    7997         glob_sum = glob_sum + SUM( ptab(:,:,jk)*tmask_i(:,:) ) 
    8098      END DO 
     99#endif 
    81100      IF( lk_mpp )   CALL mpp_sum( glob_sum ) 
    82101      ! 
     
    107126      !! ** Purpose : perform a masked sum on the inner global domain of two 3D array 
    108127      !!----------------------------------------------------------------------- 
     128!FTRANS ptab1 :I :I :z  
     129!FTRANS ptab2 :I :I :z  
    109130      REAL(wp), INTENT(in), DIMENSION(:,:,:) ::   ptab1, ptab2   ! input 3D array 
    110131      REAL(wp)            , DIMENSION(2)     ::   glob_sum       ! global masked sum 
    111132      !! 
    112133      INTEGER :: jk 
     134#if defined key_z_first 
     135      INTEGER :: ji, jj 
     136      REAL(wp) :: ztmask 
     137#endif 
    113138      !!----------------------------------------------------------------------- 
    114139      ! 
    115140      glob_sum(:) = 0.e0 
     141#if defined key_z_first 
     142      DO jj = 1, jpj 
     143        DO ji = 1, jpi 
     144          ztmask = tmask_i(ji,jj) 
     145          DO jk = 1, jpk 
     146            glob_sum(1) = glob_sum(1) + ptab1(ji,jj,jk)*ztmask 
     147            glob_sum(2) = glob_sum(2) + ptab2(ji,jj,jk)*ztmask 
     148          END DO 
     149        END DO 
     150      END DO 
     151#else 
    116152      DO jk = 1, jpk 
    117153         glob_sum(1) = glob_sum(1) + SUM( ptab1(:,:,jk)*tmask_i(:,:) ) 
    118154         glob_sum(2) = glob_sum(2) + SUM( ptab2(:,:,jk)*tmask_i(:,:) ) 
    119155      END DO 
     156#endif 
    120157      IF( lk_mpp )   CALL mpp_sum( glob_sum, 2 ) 
    121158      ! 
     
    161198      !! ** Purpose : perform a sum on a 3D array in calling DDPDD routine 
    162199      !!---------------------------------------------------------------------- 
    163       REAL(wp), INTENT(in), DIMENSION(jpi,jpj,jpk) ::   ptab 
    164       REAL(wp)                                     ::   glob_sum   ! global masked sum 
     200!FTRANS ptab :I :I :z  
     201      REAL(wp), INTENT(in), DIMENSION(:,:,:) ::   ptab 
     202      REAL(wp)                               ::   glob_sum   ! global masked sum 
    165203      !! 
    166204      COMPLEX(wp)::   ctmp 
     
    171209      ztmp = 0.e0 
    172210      ctmp = CMPLX( 0.e0, 0.e0, wp ) 
     211#if defined key_z_first 
     212      DO jj = 1, jpj 
     213         DO ji =1, jpi 
     214            DO jk = 1, jpk 
     215#else 
    173216      DO jk = 1, jpk 
    174217         DO jj = 1, jpj 
    175218            DO ji =1, jpi 
     219#endif 
    176220            ztmp =  ptab(ji,jj,jk) * tmask_i(ji,jj) 
    177221            CALL DDPDD( CMPLX( ztmp, 0.e0, wp ), ctmp ) 
     
    221265      !! ** Purpose : perform a sum on two 3D array in calling DDPDD routine 
    222266      !!---------------------------------------------------------------------- 
    223       REAL(wp), INTENT(in), DIMENSION(jpi,jpj,jpk) ::   ptab1, ptab2 
    224       REAL(wp)                                     ::   glob_sum   ! global masked sum 
     267      REAL(wp), INTENT(in), DIMENSION(:,:,:)   ::   ptab1, ptab2 
     268!FTRANS ptab1 :I :I :z  
     269!FTRANS ptab2 :I :I :z  
     270      REAL(wp)                                 ::   glob_sum   ! global masked sum 
    225271      !! 
    226272      COMPLEX(wp)::   ctmp 
     
    231277      ztmp = 0.e0 
    232278      ctmp = CMPLX( 0.e0, 0.e0, wp ) 
     279#if defined key_z_first 
     280      DO jj = 1, jpj 
     281         DO ji =1, jpi 
     282            DO jk = 1, jpk 
     283#else 
    233284      DO jk = 1, jpk 
    234285         DO jj = 1, jpj 
    235286            DO ji =1, jpi 
     287#endif 
    236288            ztmp =  ptab1(ji,jj,jk) * tmask_i(ji,jj) 
    237289            CALL DDPDD( CMPLX( ztmp, 0.e0, wp ), ctmp ) 
Note: See TracChangeset for help on using the changeset viewer.