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/dynnxt.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/dynnxt.F90

    r6140 r6748  
    115115         ! Ensure below that barotropic velocities match time splitting estimate 
    116116         ! Compute actual transport and replace it with ts estimate at "after" time step 
     117!$OMP PARALLEL WORKSHARE 
    117118         zue(:,:) = e3u_a(:,:,1) * ua(:,:,1) * umask(:,:,1) 
    118119         zve(:,:) = e3v_a(:,:,1) * va(:,:,1) * vmask(:,:,1) 
     120!$OMP END PARALLEL WORKSHARE 
    119121         DO jk = 2, jpkm1 
    120122            zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * ua(:,:,jk) * umask(:,:,jk) 
    121123            zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * va(:,:,jk) * vmask(:,:,jk) 
    122124         END DO 
     125!$OMP PARALLEL DO schedule(static) private(jk) 
    123126         DO jk = 1, jpkm1 
    124127            ua(:,:,jk) = ( ua(:,:,jk) - zue(:,:) * r1_hu_a(:,:) + ua_b(:,:) ) * umask(:,:,jk) 
     
    131134            ! In the forward case, this is done below after asselin filtering    
    132135            ! so that asselin contribution is removed at the same time  
     136!$OMP PARALLEL DO schedule(static) private(jk) 
    133137            DO jk = 1, jpkm1 
    134138               un(:,:,jk) = ( un(:,:,jk) - un_adv(:,:) + un_b(:,:) )*umask(:,:,jk) 
     
    164168         ! 
    165169         IF( ln_dyn_trd ) THEN              ! 3D output: total momentum trends 
     170!$OMP PARALLEL WORKSHARE 
    166171            zua(:,:,:) = ( ua(:,:,:) - ub(:,:,:) ) * z1_2dt 
    167172            zva(:,:,:) = ( va(:,:,:) - vb(:,:,:) ) * z1_2dt 
     173!$OMP END PARALLEL WORKSHARE 
    168174            CALL iom_put( "utrd_tot", zua )        ! total momentum trends, except the asselin time filter 
    169175            CALL iom_put( "vtrd_tot", zva ) 
    170176         ENDIF 
    171177         ! 
     178!$OMP PARALLEL WORKSHARE 
    172179         zua(:,:,:) = un(:,:,:)             ! save the now velocity before the asselin filter 
    173180         zva(:,:,:) = vn(:,:,:)             ! (caution: there will be a shift by 1 timestep in the 
     181!$OMP END PARALLEL WORKSHARE 
    174182         !                                  !  computation of the asselin filter trends) 
    175183      ENDIF 
     
    178186      ! ------------------------------------------ 
    179187      IF( neuler == 0 .AND. kt == nit000 ) THEN        !* Euler at first time-step: only swap 
     188!$OMP PARALLEL DO schedule(static) private(jk) 
    180189         DO jk = 1, jpkm1 
    181190            un(:,:,jk) = ua(:,:,jk)                          ! un <-- ua 
     
    183192         END DO 
    184193         IF(.NOT.ln_linssh ) THEN 
     194!$OMP PARALLEL DO schedule(static) private(jk) 
    185195            DO jk = 1, jpkm1 
    186196               e3t_b(:,:,jk) = e3t_n(:,:,jk) 
     
    193203         IF( ln_linssh ) THEN             ! Fixed volume ! 
    194204            !                             ! =============! 
     205!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 
    195206            DO jk = 1, jpkm1                               
    196207               DO jj = 1, jpj 
     
    215226               e3t_b(:,:,1:jpkm1) = e3t_n(:,:,1:jpkm1) 
    216227            ELSE 
     228!$OMP PARALLEL DO schedule(static) private(jk) 
    217229               DO jk = 1, jpkm1 
    218230                  e3t_b(:,:,jk) = e3t_n(:,:,jk) + atfp * ( e3t_b(:,:,jk) - 2._wp * e3t_n(:,:,jk) + e3t_a(:,:,jk) ) 
     
    240252               CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 
    241253               CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 
     254!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 
    242255               DO jk = 1, jpkm1 
    243256                  DO jj = 1, jpj 
     
    260273               CALL dom_vvl_interpol( e3t_b(:,:,:), ze3u_f, 'U' ) 
    261274               CALL dom_vvl_interpol( e3t_b(:,:,:), ze3v_f, 'V' ) 
     275!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zue3a, zve3a, zue3n, zve3n, zue3b, zve3b, zuf, zvf) 
    262276               DO jk = 1, jpkm1 
    263277                  DO jj = 1, jpj 
     
    297311               zve(:,:) = zve(:,:) + e3v_b(:,:,jk) * vb(:,:,jk) * vmask(:,:,jk)     
    298312            END DO 
     313!$OMP PARALLEL DO schedule(static) private(jk) 
    299314            DO jk = 1, jpkm1 
    300315               ub(:,:,jk) = ub(:,:,jk) - (zue(:,:) * r1_hu_n(:,:) - un_b(:,:)) * umask(:,:,jk) 
     
    321336      ENDIF 
    322337      ! 
     338!$OMP PARALLEL WORKSHARE 
    323339      un_b(:,:) = e3u_a(:,:,1) * un(:,:,1) * umask(:,:,1) 
    324340      ub_b(:,:) = e3u_b(:,:,1) * ub(:,:,1) * umask(:,:,1) 
    325341      vn_b(:,:) = e3v_a(:,:,1) * vn(:,:,1) * vmask(:,:,1) 
    326342      vb_b(:,:) = e3v_b(:,:,1) * vb(:,:,1) * vmask(:,:,1) 
     343!$OMP END PARALLEL WORKSHARE 
    327344      DO jk = 2, jpkm1 
    328345         un_b(:,:) = un_b(:,:) + e3u_a(:,:,jk) * un(:,:,jk) * umask(:,:,jk) 
     
    331348         vb_b(:,:) = vb_b(:,:) + e3v_b(:,:,jk) * vb(:,:,jk) * vmask(:,:,jk) 
    332349      END DO 
     350!$OMP PARALLEL WORKSHARE 
    333351      un_b(:,:) = un_b(:,:) * r1_hu_a(:,:) 
    334352      vn_b(:,:) = vn_b(:,:) * r1_hv_a(:,:) 
    335353      ub_b(:,:) = ub_b(:,:) * r1_hu_b(:,:) 
    336354      vb_b(:,:) = vb_b(:,:) * r1_hv_b(:,:) 
     355!$OMP END PARALLEL WORKSHARE 
    337356      ! 
    338357      IF( .NOT.ln_dynspg_ts ) THEN        ! output the barotropic currents 
     
    341360      ENDIF 
    342361      IF( l_trddyn ) THEN                ! 3D output: asselin filter trends on momentum 
     362!$OMP PARALLEL WORKSHARE 
    343363         zua(:,:,:) = ( ub(:,:,:) - zua(:,:,:) ) * z1_2dt 
    344364         zva(:,:,:) = ( vb(:,:,:) - zva(:,:,:) ) * z1_2dt 
     365!$OMP END PARALLEL WORKSHARE 
    345366         CALL trd_dyn( zua, zva, jpdyn_atf, kt ) 
    346367      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.