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/LIM_SRC_3/limrhg.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/LIM_SRC_3/limrhg.F90

    r7646 r7698  
    164164      !------------------------------------------------------------------------------! 
    165165      ! ocean/land mask 
     166!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    166167      DO jj = 1, jpjm1 
    167168         DO ji = 1, jpim1      ! NO vector opt. 
     
    172173 
    173174      ! Lateral boundary conditions on velocity (modify zfmask) 
    174       zwf(:,:) = zfmask(:,:) 
     175!$OMP PARALLEL 
     176!$OMP DO schedule(static) private(jj, ji) 
     177      DO jj = 1, jpj 
     178         DO ji = 1, jpi 
     179            zwf(ji,jj) = zfmask(ji,jj) 
     180         END DO 
     181      END DO 
     182!$OMP DO schedule(static) private(jj, ji) 
    175183      DO jj = 2, jpjm1 
    176184         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    180188         END DO 
    181189      END DO 
     190!$OMP DO schedule(static) private(jj) 
    182191      DO jj = 2, jpjm1 
    183192         IF( zfmask(1,jj) == 0._wp ) THEN 
     
    188197         ENDIF 
    189198      END DO 
     199!$OMP DO schedule(static) private(ji) 
    190200      DO ji = 2, jpim1 
    191201         IF( zfmask(ji,1) == 0._wp ) THEN 
     
    196206         ENDIF 
    197207      END DO 
     208!$OMP END PARALLEL 
    198209      CALL lbc_lnk( zfmask, 'F', 1._wp ) 
    199210 
     
    225236 
    226237      ! Initialise stress tensor  
    227       zs1 (:,:) = stress1_i (:,:)  
    228       zs2 (:,:) = stress2_i (:,:) 
    229       zs12(:,:) = stress12_i(:,:) 
     238!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     239      DO jj = 1, jpj 
     240         DO ji = 1, jpi 
     241            zs1 (ji,jj) = stress1_i (ji,jj)  
     242            zs2 (ji,jj) = stress2_i (ji,jj) 
     243            zs12(ji,jj) = stress12_i(ji,jj) 
     244         END DO 
     245      END DO 
    230246 
    231247      ! Ice strength 
     
    233249 
    234250      ! scale factors 
     251!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    235252      DO jj = 2, jpjm1 
    236253         DO ji = fs_2, fs_jpim1 
     
    255272         zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 
    256273         ! 
    257          zpice(:,:) = ssh_m(:,:) + ( zintn * snwice_mass(:,:) + zintb * snwice_mass_b(:,:) ) * r1_rau0 
     274!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     275         DO jj = 1, jpj 
     276            DO ji = 1, jpi 
     277               zpice(ji,jj) = ssh_m(ji,jj) + (  zintn * snwice_mass(ji,jj) +  zintb * snwice_mass_b(ji,jj)  ) * r1_rau0 
     278            END DO 
     279         END DO 
    258280         ! 
    259281      ELSE                                    !== non-embedded sea ice: use ocean surface for slope calculation ==! 
    260          zpice(:,:) = ssh_m(:,:) 
     282!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     283         DO jj = 1, jpj 
     284            DO ji = 1, jpi 
     285               zpice(ji,jj) = ssh_m(ji,jj) 
     286            END DO 
     287         END DO 
    261288      ENDIF 
    262289 
     290!$OMP PARALLEL DO schedule(static) private(jj,ji,zm1,zm2,zm3,zmassU,zmassV) 
    263291      DO jj = 2, jpjm1 
    264292         DO ji = fs_2, fs_jpim1 
     
    317345         !                                            !----------------------!         
    318346         IF(ln_ctl) THEN   ! Convergence test 
     347!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    319348            DO jj = 1, jpjm1 
    320                zu_ice(:,jj) = u_ice(:,jj) ! velocity at previous time step 
    321                zv_ice(:,jj) = v_ice(:,jj) 
     349               DO ji = 1, jpi 
     350                  zu_ice(ji,jj) = u_ice(ji,jj) ! velocity at previous time step 
     351                  zv_ice(ji,jj) = v_ice(ji,jj) 
     352               END DO 
    322353            END DO 
    323354         ENDIF 
    324355 
    325356         ! --- divergence, tension & shear (Appendix B of Hunke & Dukowicz, 2002) --- ! 
     357!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    326358         DO jj = 1, jpjm1         ! loops start at 1 since there is no boundary condition (lbc_lnk) at i=1 and j=1 for F points 
    327359            DO ji = 1, jpim1 
     
    336368         CALL lbc_lnk( zds, 'F', 1. ) 
    337369 
     370!$OMP PARALLEL DO schedule(static) private(jj,ji,zds2,zdiv,zdiv2,zdt,zdt2,zdelta) 
    338371         DO jj = 2, jpjm1 
    339372            DO ji = 2, jpim1 ! no vector loop 
     
    370403         CALL lbc_lnk( zp_delt, 'T', 1. ) 
    371404 
     405!$OMP PARALLEL DO schedule(static) private(jj,ji,zp_delf) 
    372406         DO jj = 1, jpjm1 
    373407            DO ji = 1, jpim1 
     
    385419 
    386420         ! --- Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002) --- ! 
     421!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    387422         DO jj = 2, jpjm1 
    388423            DO ji = fs_2, fs_jpim1                
     
    420455         IF( MOD(jter,2) .EQ. 0 ) THEN ! even iterations 
    421456             
     457!$OMP PARALLEL DO schedule(static) private(jj,ji,zTauO,zvel,zTauB,zCor,zTauE,rswitch) 
    422458            DO jj = 2, jpjm1 
    423459               DO ji = fs_2, fs_jpim1 
     
    464500            IF( ln_bdy ) CALL bdy_ice_lim_dyn( 'V' ) 
    465501 
     502!$OMP PARALLEL DO schedule(static) private(jj,ji,zTauO,zvel,zTauB,zCor,zTauE,rswitch) 
    466503            DO jj = 2, jpjm1 
    467504               DO ji = fs_2, fs_jpim1 
     
    509546         ELSE ! odd iterations 
    510547 
     548!$OMP PARALLEL DO schedule(static) private(jj,ji,zTauO,zvel,zTauB,zCor,zTauE,rswitch) 
    511549            DO jj = 2, jpjm1 
    512550               DO ji = fs_2, fs_jpim1 
     
    552590            IF( ln_bdy ) CALL bdy_ice_lim_dyn( 'U' ) 
    553591 
     592!$OMP PARALLEL DO schedule(static) private(jj,ji,zTauO,zvel,zTauB,zCor,zTauE,rswitch) 
    554593            DO jj = 2, jpjm1 
    555594               DO ji = fs_2, fs_jpim1 
     
    598637          
    599638         IF(ln_ctl) THEN   ! Convergence test 
     639!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    600640            DO jj = 2 , jpjm1 
    601                zresr(:,jj) = MAX( ABS( u_ice(:,jj) - zu_ice(:,jj) ), ABS( v_ice(:,jj) - zv_ice(:,jj) ) ) 
     641               DO ji = 1, jpi 
     642                  zresr(ji,jj) = MAX( ABS( u_ice(ji,jj) - zu_ice(ji,jj) ), ABS( v_ice(ji,jj) - zv_ice(ji,jj) ) ) 
     643               END DO 
    602644            END DO 
    603645            zresm = MAXVAL( zresr( 1:jpi, 2:jpjm1 ) ) 
     
    612654      ! 4) Recompute delta, shear and div (inputs for mechanical redistribution)  
    613655      !------------------------------------------------------------------------------! 
     656!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    614657      DO jj = 1, jpjm1 
    615658         DO ji = 1, jpim1 
     
    624667      CALL lbc_lnk( zds, 'F', 1. ) 
    625668       
     669!$OMP PARALLEL DO schedule(static) private(jj,ji,zdt,zdt2,zds2,zdelta,rswitch) 
    626670      DO jj = 2, jpjm1 
    627671         DO ji = 2, jpim1 ! no vector loop 
     
    656700       
    657701      ! --- Store the stress tensor for the next time step --- ! 
    658       stress1_i (:,:) = zs1 (:,:) 
    659       stress2_i (:,:) = zs2 (:,:) 
    660       stress12_i(:,:) = zs12(:,:) 
     702!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     703      DO jj = 1, jpj 
     704         DO ji = 1, jpi 
     705            stress1_i (ji,jj) = zs1 (ji,jj) 
     706            stress2_i (ji,jj) = zs2 (ji,jj) 
     707            stress12_i(ji,jj) = zs12(ji,jj) 
     708         END DO 
     709      END DO 
    661710      ! 
    662711 
Note: See TracChangeset for help on using the changeset viewer.