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 8279 for branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfphy.F90 – NEMO

Ignore:
Timestamp:
2017-07-04T17:46:48+02:00 (7 years ago)
Author:
mocavero
Message:

Implementation of OMP coarse-grained parallelization on ZDF new package

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfphy.F90

    r8055 r8279  
    3232   USE lbclnk         ! lateral boundary conditions 
    3333   USE lib_mpp        ! distribued memory computing 
     34#if defined key_omp 
     35   USE dom_omp        ! omp threads decomposition of MPI subdomain 
     36#endif 
    3437 
    3538   IMPLICIT NONE 
     
    4750 
    4851   LOGICAL ::   l_zdfsh2   ! shear production term flag (=F for CST, =T otherwise (i.e. TKE, GLS, RIC)) 
     52   INTEGER :: ARG_2D 
    4953 
    5054   !! * Substitutions 
     
    216220      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    217221      ! 
    218       INTEGER ::   ji, jj, jk   ! dummy loop indice 
     222      INTEGER :: jk   ! dummy loop indice 
    219223!!OMP      REAL(wp), DIMENSION(WRK_3D) ::   zsh2   ! shear production 
    220224      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zsh2   ! shear production 
    221225      !! --------------------------------------------------------------------- 
    222226      !       
    223 !!OMP ===>>>>   Open-MP   to be defined elsewhere    
    224       ! 
    225       INTEGER ::   ARG_2D 
    226       ! 
     227      ! 
     228      IF (kt==nn_it000) THEN 
     229#ifdef key_omp 
     230         CALL tile_dec_2D 
     231#else 
    227232#if defined key_vectopt_loop 
    228       k_Istr = 1   ;   k_Iend = jpi 
     233         tnldi = 1   ;   tnlei = jpi 
    229234#else 
    230       k_Istr = 2   ;   k_Iend = jpim1 
     235         tnldi = 2   ;   tnlei = jpim1 
    231236#endif 
    232       k_Jstr = 2   ;   k_Jend = jpjm1 
    233       ! 
    234 !!OMP <<<<===   end 
    235        
     237         tnldj = 2   ;   tnlej = jpjm1 
     238#endif 
     239      END IF 
     240      ! 
     241      CALL zdf_bfr( kt )                        !* bottom friction (if quadratic) 
     242      ! 
     243!$OMP PARALLEL PRIVATE(zsh2) 
    236244      ALLOCATE( zsh2(WRK_3D) ) 
    237        
    238        
    239       ! 
    240       CALL zdf_bfr( kt )                        !* bottom friction (if quadratic) 
    241       ! 
    242  
    243245      !                          !==  Kz from chosen turbulent closure  ==!   (avm_k, avt_k) 
    244        
    245246      IF( l_zdfsh2 )   &                        !* shear production at w-points (energy conserving form) 
    246247         CALL zdf_sh2( ARG_2D, ub, vb, un, vn, avm_k,   &   ! <<== in  fields 
     
    248249 
    249250      ! 
     251!$OMP BARRIER 
    250252      SELECT CASE ( nzdf_phy )                  !* Vertical eddy viscosity and diffusivity coefficients at w-points 
    251253      CASE( np_RIC )   ;   CALL zdf_ric( ARG_2D, kt, gdept_n, zsh2, avm_k, avt_k )         ! Richardson number dependent Kz 
     
    257259!!gm         avm_k(WRK_3D) = rn_avm0 * wmask(WRK_3D) 
    258260      END SELECT 
     261      ! 
     262      DEALLOCATE( zsh2 ) 
    259263      !   
    260264      !                          !==  ocean Kz  ==!   (avt, avs, avm) 
     
    271275      ! 
    272276      IF( ln_zdfevd )   CALL zdf_evd( ARG_2D, kt, avm, avt )      !* convection: enhanced vertical eddy diffusivity 
    273       ! 
     277 
    274278      !                                         !* double diffusive mixing 
    275279      IF( ln_zdfddm ) THEN                            ! update avt and compute avs 
     
    282286      IF( ln_zdfswm )   CALL zdf_swm( ARG_2D, kt, avm, avt, avs )   ! surface  wave (Qiao et al. 2004)  
    283287      IF( ln_zdfiwm )   CALL zdf_iwm( ARG_2D, kt, avm, avt, avs )   ! internal wave (de Lavergne et al 2017) 
    284  
     288!$OMP END PARALLEL 
     289      ! 
    285290 
    286291      !                                         !* Lateral boundary conditions (sign unchanged) 
     
    301306      ENDIF 
    302307      ! 
    303       DEALLOCATE( zsh2 ) 
    304       ! 
    305308   END SUBROUTINE zdf_phy 
    306309 
Note: See TracChangeset for help on using the changeset viewer.