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/dynldf_bilap.F90 – NEMO

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

#2001: OMP directives

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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      ! 
Note: See TracChangeset for help on using the changeset viewer.