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 10122 – NEMO

Changeset 10122


Ignore:
Timestamp:
2018-09-13T14:29:16+02:00 (6 years ago)
Author:
ldouriez
Message:

3 loops optimizations in BENCH version of zdfiwm.F90: BULL_OPTIM_ZDFIWM_TSDIFF, BULL_OPTIM_ZDFIWM_SSH, BULL_OPTIM_ZDFIWM_WKBHEIGHT_LOOP2. Disabled by default

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9759_HPC09_ESIWACE/tests/BENCH/MY_SRC/zdfiwm.F90

    r9762 r10122  
    123123      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    124124      REAL(wp) ::   zztmp        ! scalar workspace 
     125#if defined(BULL_OPTIM_ZDFIWM_TSDIFF)       
     126      REAL(wp) ::   diffusivity_tmp1, diffusivity_tmp2 
     127#endif       
    125128      REAL(wp), DIMENSION(jpi,jpj)     ::   zfact       ! Used for vertical structure 
    126129      REAL(wp), DIMENSION(jpi,jpj)     ::   zhdep       ! Ocean depth 
     
    157160!!gm gde3w ==>>>  check for ssh taken into account.... seem OK gde3w_n=gdept_n - sshn 
    158161      DO jk = 2, jpkm1              ! complete with the level-dependent part 
     162#if defined(BULL_OPTIM_ZDFIWM_SSH) 
     163         DO jj = 1, jpj              
     164            DO ji = 1, jpi 
     165               IF ( (zfact(ji,jj) .eq. 0._wp) ) THEN 
     166                  zemx_iwm(ji,jj,jk) = 0._wp 
     167               ELSE 
     168                  zemx_iwm(ji,jj,jk) = zfact(ji,jj) * (  EXP( ( gde3w_n(ji,jj,jk  ) - zhdep(ji,jj) ) / hcri_iwm(ji,jj) )                      & 
     169                       &                             - EXP( ( gde3w_n(ji,jj,jk-1) - zhdep(ji,jj) ) / hcri_iwm(ji,jj) )  ) * wmask(ji,jj,jk)   & 
     170                       &                          / ( gde3w_n(ji,jj,jk) - gde3w_n(ji,jj,jk-1) ) 
     171               ENDIF 
     172            END DO 
     173         END DO 
     174#else          
    159175         zemx_iwm(:,:,jk) = zfact(:,:) * (  EXP( ( gde3w_n(:,:,jk  ) - zhdep(:,:) ) / hcri_iwm(:,:) )                      & 
    160176            &                             - EXP( ( gde3w_n(:,:,jk-1) - zhdep(:,:) ) / hcri_iwm(:,:) )  ) * wmask(:,:,jk)   & 
    161177            &                          / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 
    162  
     178#endif 
    163179!!gm delta(gde3w_n) = e3t_n  !!  Please verify the grid-point position w versus t-point 
    164180!!gm it seems to me that only 1/hcri_iwm  is used ==>  compute it one for all 
     
    234250      zwkb(:,:,1) = zhdep(:,:) * wmask(:,:,1) 
    235251      ! 
     252#if defined(BULL_OPTIM_ZDFIWM_WKBHEIGHT_LOOP2) 
     253      zweight(:,:,1) = 0._wp 
     254      zweight(:,:,jpkm1+1:jk) = 0._wp 
     255 
     256      DO jk = 2, jpkm1 
     257         DO jj = 1, jpj 
     258            DO ji = 1, jpi 
     259               IF ( rn2(ji,jj,jk) <= 0 .OR. wmask(ji,jj,jk) == 0 ) THEN 
     260                  zweight(ji,jj,jk) = 0._wp 
     261               ELSE 
     262                  zweight(ji,jj,jk) = rn2(ji,jj,jk) * hbot_iwm(ji,jj) * wmask(ji,jj,jk) * (  EXP( -zwkb(ji,jj,jk) / hbot_iwm(ji,jj) ) - EXP( -zwkb(ji,jj,jk-1) / hbot_iwm(ji,jj) )  ) 
     263               ENDIF 
     264            END DO 
     265         END DO 
     266      END DO 
     267#else       
    236268      zweight(:,:,:) = 0._wp 
    237269      DO jk = 2, jpkm1 
     
    239271            &   * (  EXP( -zwkb(:,:,jk) / hbot_iwm(:,:) ) - EXP( -zwkb(:,:,jk-1) / hbot_iwm(:,:) )  ) 
    240272      END DO 
     273#endif       
    241274      ! 
    242275      zfact(:,:) = 0._wp 
     
    322355      !       
    323356      IF( ln_tsdiff ) THEN          !* Option for differential mixing of salinity and temperature 
     357#if defined(BULL_OPTIM_ZDFIWM_TSDIFF) 
     358         diffusivity_tmp1 = ( 0.505_wp + 0.495_wp *  & 
     359              &   TANH(    0.92_wp * (   LOG10(  1.e-20_wp  ) - 0.60_wp ) ) ) 
     360#endif          
     361          
    324362         DO jk = 2, jpkm1              ! Calculate S/T diffusivity ratio as a function of Reb 
    325363            DO jj = 1, jpj 
    326364               DO ji = 1, jpi 
     365#if defined(BULL_OPTIM_ZDFIWM_TSDIFF) 
     366                  diffusivity_tmp2 = zReb(ji,jj,jk) * 5._wp * r1_6 
     367                  IF ( diffusivity_tmp2 > 1.e-20_wp ) THEN 
     368                     zav_ratio(ji,jj,jk) = ( 0.505_wp + 0.495_wp *                                                               & 
     369                          &   TANH(    0.92_wp * (   LOG10(   diffusivity_tmp2  ) - 0.60_wp   )    )                             & 
     370                          &                 ) * wmask(ji,jj,jk) 
     371                  ELSE 
     372                     zav_ratio(ji,jj,jk) = diffusivity_tmp1 * wmask(ji,jj,jk) 
     373                  ENDIF 
     374#else                   
    327375                  zav_ratio(ji,jj,jk) = ( 0.505_wp + 0.495_wp *                                                                  & 
    328376                      &   TANH(    0.92_wp * (   LOG10(  MAX( 1.e-20_wp, zReb(ji,jj,jk) * 5._wp * r1_6 )  ) - 0.60_wp   )    )   & 
    329377                      &                 ) * wmask(ji,jj,jk) 
     378#endif                   
    330379               END DO 
    331380            END DO 
Note: See TracChangeset for help on using the changeset viewer.