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 6748 for branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90 – NEMO

Ignore:
Timestamp:
2016-06-28T11:53:56+02:00 (8 years ago)
Author:
mocavero
Message:

GYRE hybrid parallelization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90

    r6140 r6748  
    106106      CASE ( np_ENE )                                 !* energy conserving scheme 
    107107         IF( l_trddyn ) THEN                                ! trend diagnostics: split the trend in two 
     108!$OMP PARALLEL WORKSHARE 
    108109            ztrdu(:,:,:) = ua(:,:,:) 
    109110            ztrdv(:,:,:) = va(:,:,:) 
     111!$OMP END PARALLEL WORKSHARE 
    110112            CALL vor_ene( kt, nrvm, ua, va )                      ! relative vorticity or metric trend 
     113!$OMP PARALLEL WORKSHARE 
    111114            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    112115            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     116!$OMP END PARALLEL WORKSHARE 
    113117            CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt ) 
     118!$OMP PARALLEL WORKSHARE 
    114119            ztrdu(:,:,:) = ua(:,:,:) 
    115120            ztrdv(:,:,:) = va(:,:,:) 
     121!$OMP END PARALLEL WORKSHARE 
    116122            CALL vor_ene( kt, ncor, ua, va )                      ! planetary vorticity trend 
     123!$OMP PARALLEL WORKSHARE 
    117124            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    118125            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     126!$OMP END PARALLEL WORKSHARE 
    119127            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    120128         ELSE 
     
    124132      CASE ( np_ENS )                                 !* enstrophy conserving scheme 
    125133         IF( l_trddyn ) THEN                                ! trend diagnostics: splitthe trend in two     
     134!$OMP PARALLEL WORKSHARE 
    126135            ztrdu(:,:,:) = ua(:,:,:) 
    127136            ztrdv(:,:,:) = va(:,:,:) 
     137!$OMP END PARALLEL WORKSHARE 
    128138            CALL vor_ens( kt, nrvm, ua, va )                      ! relative vorticity or metric trend 
     139!$OMP PARALLEL WORKSHARE 
    129140            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    130141            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     142!$OMP END PARALLEL WORKSHARE 
    131143            CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt ) 
     144!$OMP PARALLEL WORKSHARE 
    132145            ztrdu(:,:,:) = ua(:,:,:) 
    133146            ztrdv(:,:,:) = va(:,:,:) 
     147!$OMP END PARALLEL WORKSHARE 
    134148            CALL vor_ens( kt, ncor, ua, va )                      ! planetary vorticity trend 
     149!$OMP PARALLEL WORKSHARE 
    135150            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    136151            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     152!$OMP END PARALLEL WORKSHARE 
    137153            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    138154         ELSE 
     
    142158      CASE ( np_MIX )                                 !* mixed ene-ens scheme 
    143159         IF( l_trddyn ) THEN                                ! trend diagnostics: split the trend in two 
     160!$OMP PARALLEL WORKSHARE 
    144161            ztrdu(:,:,:) = ua(:,:,:) 
    145162            ztrdv(:,:,:) = va(:,:,:) 
     163!$OMP END PARALLEL WORKSHARE 
    146164            CALL vor_ens( kt, nrvm, ua, va )                      ! relative vorticity or metric trend (ens) 
     165!$OMP PARALLEL WORKSHARE 
    147166            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    148167            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     168!$OMP END PARALLEL WORKSHARE 
    149169            CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt ) 
     170!$OMP PARALLEL WORKSHARE 
    150171            ztrdu(:,:,:) = ua(:,:,:) 
    151172            ztrdv(:,:,:) = va(:,:,:) 
     173!$OMP END PARALLEL WORKSHARE 
    152174            CALL vor_ene( kt, ncor, ua, va )                      ! planetary vorticity trend (ene) 
     175!$OMP PARALLEL WORKSHARE 
    153176            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    154177            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     178!$OMP END PARALLEL WORKSHARE 
    155179            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    156180         ELSE 
     
    161185      CASE ( np_EEN )                                 !* energy and enstrophy conserving scheme 
    162186         IF( l_trddyn ) THEN                                ! trend diagnostics: split the trend in two 
     187!$OMP PARALLEL WORKSHARE 
    163188            ztrdu(:,:,:) = ua(:,:,:) 
    164189            ztrdv(:,:,:) = va(:,:,:) 
     190!$OMP END PARALLEL WORKSHARE 
    165191            CALL vor_een( kt, nrvm, ua, va )                      ! relative vorticity or metric trend 
     192!$OMP PARALLEL WORKSHARE 
    166193            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    167194            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     195!$OMP END PARALLEL WORKSHARE 
    168196            CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt ) 
     197!$OMP PARALLEL WORKSHARE 
    169198            ztrdu(:,:,:) = ua(:,:,:) 
    170199            ztrdv(:,:,:) = va(:,:,:) 
     200!$OMP END PARALLEL WORKSHARE 
    171201            CALL vor_een( kt, ncor, ua, va )                      ! planetary vorticity trend 
     202!$OMP PARALLEL WORKSHARE 
    172203            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    173204            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     205!$OMP END PARALLEL WORKSHARE 
    174206            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    175207         ELSE 
     
    237269         SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    238270         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
     271!$OMP PARALLEL WORKSHARE 
    239272            zwz(:,:) = ff(:,:)  
     273!$OMP END PARALLEL WORKSHARE 
    240274         CASE ( np_RVO )                           !* relative vorticity 
     275!$OMP PARALLEL DO private(jj,ji) 
    241276            DO jj = 1, jpjm1 
    242277               DO ji = 1, fs_jpim1   ! vector opt. 
     
    246281            END DO 
    247282         CASE ( np_MET )                           !* metric term 
     283!$OMP PARALLEL DO private(jj,ji) 
    248284            DO jj = 1, jpjm1 
    249285               DO ji = 1, fs_jpim1   ! vector opt. 
     
    254290            END DO 
    255291         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
     292!$OMP PARALLEL DO private(jj,ji) 
    256293            DO jj = 1, jpjm1 
    257294               DO ji = 1, fs_jpim1   ! vector opt. 
     
    262299            END DO 
    263300         CASE ( np_CME )                           !* Coriolis + metric 
     301!$OMP PARALLEL DO private(jj,ji) 
    264302            DO jj = 1, jpjm1 
    265303               DO ji = 1, fs_jpim1   ! vector opt. 
     
    275313         ! 
    276314         IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
     315!$OMP PARALLEL DO private(jj,ji) 
    277316            DO jj = 1, jpjm1 
    278317               DO ji = 1, fs_jpim1   ! vector opt. 
     
    287326            zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
    288327         ELSE 
     328!$OMP PARALLEL WORKSHARE 
    289329            zwx(:,:) = e2u(:,:) * un(:,:,jk) 
    290330            zwy(:,:) = e1v(:,:) * vn(:,:,jk) 
     331!$OMP END PARALLEL WORKSHARE 
    291332         ENDIF 
    292333         !                                   !==  compute and add the vorticity term trend  =! 
     334!$OMP PARALLEL DO private(jj, ji, zy1, zy2, zx1, zx2) 
    293335         DO jj = 2, jpjm1 
    294336            DO ji = fs_2, fs_jpim1   ! vector opt. 
Note: See TracChangeset for help on using the changeset viewer.