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 9176 for branches/UKMO/dev_r5518_GO6_package_OMP/NEMOGCM/NEMO/OPA_SRC/DYN – NEMO

Ignore:
Timestamp:
2018-01-04T13:30:03+01:00 (6 years ago)
Author:
andmirek
Message:

#2001: OMP directives

Location:
branches/UKMO/dev_r5518_GO6_package_OMP/NEMOGCM/NEMO/OPA_SRC/DYN
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90

    r6487 r9176  
    105105         IF(lwp) WRITE(numout,*) '~~~~~~~   NOT optimal for auto-tasking case' 
    106106      ENDIF 
    107  
    108       !                                                ! =============== 
     107      ! 
     108!$OMP PARALLEL DO                                       ! =============== 
    109109      DO jk = 1, jpkm1                                 ! Horizontal slab 
    110110         !                                             ! =============== 
     
    287287      ENDIF 
    288288 
    289       !                                                ! =============== 
     289!$OMP PARALLEL DO                                      ! =============== 
    290290      DO jk = 1, jpkm1                                 ! Horizontal slab 
    291291         !                                             ! =============== 
  • branches/UKMO/dev_r5518_GO6_package_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilap.F90

    r6486 r9176  
    7777      INTEGER  ::   ji, jj, jk                  ! dummy loop indices 
    7878      REAL(wp) ::   zua, zva, zbt, ze2u, ze2v   ! temporary scalar 
    79       REAL(wp), POINTER, DIMENSION(:,:  ) :: zcu, zcv 
     79      REAL(wp),      DIMENSION(jpi,jpj  ) :: zcu, zcv 
    8080      REAL(wp), POINTER, DIMENSION(:,:,:) :: zuf, zut, zlu, zlv 
    8181      !!---------------------------------------------------------------------- 
     
    8383      IF( nn_timing == 1 )  CALL timing_start('dyn_ldf_bilap') 
    8484      ! 
    85       CALL wrk_alloc( jpi, jpj,      zcu, zcv           ) 
     85!     CALL wrk_alloc( jpi, jpj,      zcu, zcv           ) 
    8686      CALL wrk_alloc( jpi, jpj, jpk, zuf, zut, zlu, zlv )  
    8787      ! 
     
    102102      zlv(:,:,:) = 0._wp 
    103103 
    104       !                                                ! =============== 
    105       DO jk = 1, jpkm1                                 ! Horizontal slab 
    106          !                                             ! =============== 
     104         ! 
    107105         ! Laplacian 
    108106         ! --------- 
    109107 
    110108         IF( ln_sco .OR. ln_zps ) THEN   ! s-coordinate or z-coordinate with partial steps 
    111             zuf(:,:,jk) = rotb(:,:,jk) * fse3f(:,:,jk) 
    112             DO jj = 2, jpjm1 
    113                DO ji = fs_2, fs_jpim1   ! vector opt. 
    114                   zlu(ji,jj,jk) = - ( zuf(ji,jj,jk) - zuf(ji,jj-1,jk) ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) )   & 
    115                      &         + ( hdivb(ji+1,jj,jk) - hdivb(ji,jj,jk) ) / e1u(ji,jj) 
    116     
    117                   zlv(ji,jj,jk) = + ( zuf(ji,jj,jk) - zuf(ji-1,jj,jk) ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) )   & 
    118                      &         + ( hdivb(ji,jj+1,jk) - hdivb(ji,jj,jk) ) / e2v(ji,jj) 
    119                END DO 
     109!$OMP PARALLEL DO 
     110            !                                                ! =============== 
     111            DO jk = 1, jpkm1                                 ! Horizontal slab 
     112               !                                             ! =============== 
     113               ! Laplacian 
     114               ! --------- 
     115                  zuf(:,:,jk) = rotb(:,:,jk) * fse3f(:,:,jk) 
     116                  DO jj = 2, jpjm1 
     117                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     118                        zlu(ji,jj,jk) = - ( zuf(ji,jj,jk) - zuf(ji,jj-1,jk) ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) )   & 
     119                           &         + ( hdivb(ji+1,jj,jk) - hdivb(ji,jj,jk) ) / e1u(ji,jj) 
     120    
     121                        zlv(ji,jj,jk) = + ( zuf(ji,jj,jk) - zuf(ji-1,jj,jk) ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) )   & 
     122                           &         + ( hdivb(ji,jj+1,jk) - hdivb(ji,jj,jk) ) / e2v(ji,jj) 
     123                     END DO 
     124                  END DO 
    120125            END DO 
    121126         ELSE                            ! z-coordinate - full step 
    122             DO jj = 2, jpjm1 
    123                DO ji = fs_2, fs_jpim1   ! vector opt. 
    124                   zlu(ji,jj,jk) = - ( rotb (ji  ,jj,jk) - rotb (ji,jj-1,jk) ) / e2u(ji,jj)   & 
    125                      &         + ( hdivb(ji+1,jj,jk) - hdivb(ji,jj  ,jk) ) / e1u(ji,jj) 
    126     
    127                   zlv(ji,jj,jk) = + ( rotb (ji,jj  ,jk) - rotb (ji-1,jj,jk) ) / e1v(ji,jj)   & 
    128                      &         + ( hdivb(ji,jj+1,jk) - hdivb(ji  ,jj,jk) ) / e2v(ji,jj) 
     127!$OMP PARALLEL DO 
     128           !                                                ! =============== 
     129            DO jk = 1, jpkm1                                 ! Horizontal slab 
     130               !                                             ! =============== 
     131               DO jj = 2, jpjm1 
     132                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     133                     zlu(ji,jj,jk) = - ( rotb (ji  ,jj,jk) - rotb (ji,jj-1,jk) ) / e2u(ji,jj)   & 
     134                        &         + ( hdivb(ji+1,jj,jk) - hdivb(ji,jj  ,jk) ) / e1u(ji,jj) 
     135    
     136                     zlv(ji,jj,jk) = + ( rotb (ji,jj  ,jk) - rotb (ji-1,jj,jk) ) / e1v(ji,jj)   & 
     137                        &         + ( hdivb(ji,jj+1,jk) - hdivb(ji  ,jj,jk) ) / e2v(ji,jj) 
     138                  END DO   
    129139               END DO   
    130             END DO   
     140            END DO 
    131141         ENDIF 
    132       END DO 
    133142      CALL lbc_lnk( zlu, 'U', -1. )   ;   CALL lbc_lnk( zlv, 'V', -1. )   ! Boundary conditions 
    134  
    135           
     143!$OMP PARALLE DO PRIVATE(zcu, zcv, zbt) 
    136144      DO jk = 1, jpkm1 
    137145    
     
    145153          
    146154         ! Contravariant "laplacian" 
    147          zcu(:,:) = e1u(:,:) * zlu(:,:,jk) 
    148          zcv(:,:) = e2v(:,:) * zlv(:,:,jk) 
     155         DO jj = 1, jpj 
     156            DO ji = 1, jpi 
     157               zcu(ji,jj) = e1u(ji,jj) * zlu(ji,jj,jk) 
     158               zcv(ji,jj) = e2v(ji,jj) * zlv(ji,jj,jk) 
     159            END DO 
     160         END DO 
    149161          
    150162         ! Laplacian curl ( * e3f if s-coordinates or z-coordinate with partial steps) 
     
    180192      CALL lbc_lnk( zuf, 'F', 1. ) 
    181193      CALL lbc_lnk( zut, 'T', 1. ) 
    182  
     194!OMP PARALLEL DO PRIVATE(ze2u, ze2v, zua, zva) 
    183195      DO jk = 1, jpkm1       
    184196    
     
    205217      END DO                                           !   End of slab 
    206218      !                                                ! =============== 
    207       CALL wrk_dealloc( jpi, jpj,      zcu, zcv           ) 
     219!     CALL wrk_dealloc( jpi, jpj,      zcu, zcv           ) 
    208220      CALL wrk_dealloc( jpi, jpj, jpk, zuf, zut, zlu, zlv )  
    209221      ! 
  • branches/UKMO/dev_r5518_GO6_package_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90

    r6486 r9176  
    222222      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    223223      REAL(wp) ::   zx1, zy1, zfact2, zx2, zy2   ! local scalars 
    224       REAL(wp), POINTER, DIMENSION(:,:) :: zwx, zwy, zwz 
     224      REAL(wp), DIMENSION(jpi, jpj) :: zwx, zwy, zwz 
    225225      !!---------------------------------------------------------------------- 
    226226      ! 
    227227      IF( nn_timing == 1 )  CALL timing_start('vor_ene') 
    228228      ! 
    229       CALL wrk_alloc( jpi, jpj, zwx, zwy, zwz )  
     229!     CALL wrk_alloc( jpi, jpj, zwx, zwy, zwz )  
    230230      ! 
    231231      IF( kt == nit000 ) THEN 
     
    237237      zfact2 = 0.5 * 0.5      ! Local constant initialization 
    238238 
    239 !CDIR PARALLEL DO PRIVATE( zwx, zwy, zwz ) 
     239!$OMP PARALLEL DO PRIVATE( zwx, zwy, zwz, zy1, zy2, zx1, zx2 ) 
    240240      !                                                ! =============== 
    241241      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    292292      END DO                                           !   End of slab 
    293293      !                                                ! =============== 
    294       CALL wrk_dealloc( jpi, jpj, zwx, zwy, zwz )  
     294!     CALL wrk_dealloc( jpi, jpj, zwx, zwy, zwz )  
    295295      ! 
    296296      IF( nn_timing == 1 )  CALL timing_stop('vor_ene') 
     
    350350      zfact2 = 0.5 * 0.5 
    351351 
    352 !CDIR PARALLEL DO PRIVATE( zwx, zwy, zwz, zww ) 
     352!!!!$OMP PARALLEL DO PRIVATE( zwx, zwy, zwz, zww, zy1, zy2, zx1, zx2, zua, zva, zcua, zcva) 
    353353      !                                                ! =============== 
    354354      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    466466      zfact1 = 0.5 * 0.25      ! Local constant initialization 
    467467 
    468 !CDIR PARALLEL DO PRIVATE( zwx, zwy, zwz ) 
     468!!!!$OMP PARALLEL DO PRIVATE( zwx, zwy, zwz, zuav, zvau ) 
    469469      !                                                ! =============== 
    470470      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    599599 
    600600         IF( ln_dynvor_een_old ) THEN ! original formulation 
     601!$OMP PARALLEL DO PRIVATE(ze3) 
    601602            DO jk = 1, jpk 
    602603               DO jj = 1, jpjm1 
     
    609610            END DO 
    610611         ELSE ! new formulation from NEMO 3.6 
     612!$OMP PARALLEL DO PRIVATE(ze3, zmsk) 
    611613            DO jk = 1, jpk 
    612614               DO jj = 1, jpjm1 
     
    628630 
    629631       
    630 !CDIR PARALLEL DO PRIVATE( zwx, zwy, zwz, ztnw, ztne, ztsw, ztse ) 
     632!!!!!$OMP PARALLEL DO PRIVATE( zwx, zwy, zwz, ztnw, ztne, ztsw, ztse, zua, zva ) 
    631633      !                                                ! =============== 
    632634      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    637639         SELECT CASE( kvor )      ! vorticity considered 
    638640         CASE ( 1 )                                                ! planetary vorticity (Coriolis) 
    639             zwz(:,:) = ff(:,:)      * ze3f(:,:,jk) 
     641               zwz(:,:) = ff(:,:)      * ze3f(:,:,jk) 
    640642         CASE ( 2 )                                                ! relative  vorticity 
    641             zwz(:,:) = rotn(:,:,jk) * ze3f(:,:,jk) 
     643               zwz(:,:) = rotn(:,:,jk) * ze3f(:,:,jk) 
    642644         CASE ( 3 )                                                ! metric term 
    643645            DO jj = 1, jpjm1 
     
    650652            CALL lbc_lnk( zwz, 'F', 1. ) 
    651653        CASE ( 4 )                                                ! total (relative + planetary vorticity) 
    652             zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk) 
     654              zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk) 
    653655         CASE ( 5 )                                                ! total (coriolis + metric) 
    654656            DO jj = 1, jpjm1 
Note: See TracChangeset for help on using the changeset viewer.