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 7698 for trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90 – NEMO

Ignore:
Timestamp:
2017-02-18T10:02:03+01:00 (7 years ago)
Author:
mocavero
Message:

update trunk with OpenMP parallelization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r7646 r7698  
    8484      !!---------------------------------------------------------------------- 
    8585      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     86      INTEGER ::  jk, jj, ji 
    8687      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdu, ztrdv 
    8788      !!---------------------------------------------------------------------- 
     
    9192      IF( l_trddyn ) THEN                    ! Temporary saving of ua and va trends (l_trddyn) 
    9293         CALL wrk_alloc( jpi,jpj,jpk, ztrdu, ztrdv ) 
    93          ztrdu(:,:,:) = ua(:,:,:) 
    94          ztrdv(:,:,:) = va(:,:,:) 
     94!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     95         DO jk = 1, jpk 
     96            DO jj = 1, jpj 
     97               DO ji = 1, jpi 
     98                  ztrdu(ji,jj,jk) = ua(ji,jj,jk) 
     99                  ztrdv(ji,jj,jk) = va(ji,jj,jk) 
     100               END DO 
     101            END DO 
     102         END DO 
    95103      ENDIF 
    96104      ! 
     
    105113      ! 
    106114      IF( l_trddyn ) THEN      ! save the hydrostatic pressure gradient trends for momentum trend diagnostics 
    107          ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    108          ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     115!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     116         DO jk = 1, jpk 
     117            DO jj = 1, jpj 
     118               DO ji = 1, jpi 
     119                  ztrdu(ji,jj,jk) = ua(ji,jj,jk) - ztrdu(ji,jj,jk) 
     120                  ztrdv(ji,jj,jk) = va(ji,jj,jk) - ztrdv(ji,jj,jk) 
     121               END DO 
     122            END DO 
     123         END DO 
    109124         CALL trd_dyn( ztrdu, ztrdv, jpdyn_hpg, kt ) 
    110125         CALL wrk_dealloc( jpi,jpj,jpk, ztrdu, ztrdv ) 
     
    198213      !  
    199214      ! initialisation of ice shelf load 
    200       IF ( .NOT. ln_isfcav ) riceload(:,:)=0.0 
     215      IF ( .NOT. ln_isfcav ) THEN 
     216!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     217         DO jj = 1, jpj 
     218            DO ji = 1, jpi 
     219               riceload(ji,jj)=0.0 
     220            END DO 
     221         END DO 
     222      END IF 
    201223      IF (       ln_isfcav ) THEN 
    202224         CALL wrk_alloc( jpi,jpj, 2,  ztstop)  
     
    212234          
    213235         ! assume water displaced by the ice shelf is at T=-1.9 and S=34.4 (rude) 
    214          ztstop(:,:,1)=-1.9_wp ; ztstop(:,:,2)=34.4_wp 
     236!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     237         DO jj = 1, jpj 
     238            DO ji = 1, jpi 
     239               ztstop(ji,jj,1)=-1.9_wp 
     240               ztstop(ji,jj,2)=34.4_wp 
     241            END DO 
     242         END DO 
    215243 
    216244         ! compute density of the water displaced by the ice shelf  
     
    226254         ! divided by 2 later 
    227255         ziceload = 0._wp 
     256!$OMP PARALLEL 
     257!$OMP DO schedule(static) private(jj,ji,ikt,jk) 
    228258         DO jj = 1, jpj 
    229259            DO ji = 1, jpi 
     
    238268            END DO 
    239269         END DO 
    240          riceload(:,:)=ziceload(:,:)  ! need to be saved for diaar5 
     270!$OMP DO schedule(static) private(jj, ji) 
     271         DO jj = 1, jpj 
     272            DO ji = 1, jpi 
     273               riceload(ji,jj)=ziceload(ji,jj)  ! need to be saved for diaar5 
     274            END DO 
     275         END DO 
     276!$OMP END PARALLEL 
    241277 
    242278         CALL wrk_dealloc( jpi,jpj, 2,  ztstop)  
     
    282318 
    283319      ! Surface value 
     320!$OMP PARALLEL 
     321!$OMP DO schedule(static) private(ji,jj, zcoef1) 
    284322      DO jj = 2, jpjm1 
    285323         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    297335      ! interior value (2=<jk=<jpkm1) 
    298336      DO jk = 2, jpkm1 
     337!$OMP DO schedule(static) private(ji,jj, zcoef1) 
    299338         DO jj = 2, jpjm1 
    300339            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    313352            END DO 
    314353         END DO 
    315       END DO 
     354!$OMP END DO NOWAIT 
     355      END DO 
     356!$OMP END PARALLEL 
    316357      ! 
    317358      CALL wrk_dealloc( jpi,jpj,jpk,   zhpi, zhpj ) 
     
    351392 
    352393      !  Surface value (also valid in partial step case) 
     394!$OMP PARALLEL 
     395!$OMP DO schedule(static) private(ji,jj,zcoef1) 
    353396      DO jj = 2, jpjm1 
    354397         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    365408      ! interior value (2=<jk=<jpkm1) 
    366409      DO jk = 2, jpkm1 
     410!$OMP DO schedule(static) private(ji,jj, zcoef1) 
    367411         DO jj = 2, jpjm1 
    368412            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    384428 
    385429      ! partial steps correction at the last level  (use gru & grv computed in zpshde.F90) 
     430!$OMP DO schedule(static) private(ji,jj,iku,ikv,zcoef2,zcoef3) 
    386431      DO jj = 2, jpjm1 
    387432         DO ji = 2, jpim1 
     
    404449         END DO 
    405450      END DO 
     451!$OMP END PARALLEL 
    406452      ! 
    407453      CALL wrk_dealloc( jpi,jpj,jpk,   zhpi, zhpj ) 
Note: See TracChangeset for help on using the changeset viewer.