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/DOM/istate.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/DOM/istate.F90

    r7646 r7698  
    5959      !! ** Purpose :   Initialization of the dynamics and tracer fields. 
    6060      !!---------------------------------------------------------------------- 
    61       INTEGER ::   ji, jj, jk   ! dummy loop indices 
     61      INTEGER ::   ji, jj, jk, jn   ! dummy loop indices 
    6262      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::   zuvd    ! U & V data workspace 
    6363      !!---------------------------------------------------------------------- 
     
    7575!      IF( lk_c1d )   CALL dta_uvd_init        ! Initialization of U & V input data 
    7676!!gm 
    77  
    78       rhd  (:,:,:  ) = 0._wp   ;   rhop (:,:,:  ) = 0._wp      ! set one for all to 0 at level jpk 
    79       rn2b (:,:,:  ) = 0._wp   ;   rn2  (:,:,:  ) = 0._wp      ! set one for all to 0 at levels 1 and jpk 
    80       tsa  (:,:,:,:) = 0._wp                                   ! set one for all to 0 at level jpk 
    81       rab_b(:,:,:,:) = 0._wp   ;   rab_n(:,:,:,:) = 0._wp      ! set one for all to 0 at level jpk 
     77!$OMP PARALLEL 
     78      DO jn = 1, jpts 
     79!$OMP DO schedule(static) private(jk, jj, ji) 
     80         DO jk = 1, jpk 
     81            DO jj = 1, jpj 
     82               DO ji = 1, jpi 
     83                  tsa  (ji,jj,jk,jn) = 0._wp                                       ! set one for all to 0 at level jpk 
     84                  rab_b(ji,jj,jk,jn) = 0._wp   ;   rab_n(ji,jj,jk,jn) = 0._wp      ! set one for all to 0 at level jpk 
     85               END DO 
     86            END DO 
     87         END DO 
     88      END DO 
     89!$OMP DO schedule(static) private(jk, jj, ji) 
     90      DO jk = 1, jpk 
     91         DO jj = 1, jpj 
     92            DO ji = 1, jpi 
     93               rhd  (ji,jj,jk  ) = 0._wp   ;   rhop (ji,jj,jk  ) = 0._wp      ! set one for all to 0 at level jpk 
     94               rn2b (ji,jj,jk  ) = 0._wp   ;   rn2  (ji,jj,jk  ) = 0._wp      ! set one for all to 0 at levels 1 and jpk 
     95            END DO 
     96         END DO 
     97      END DO 
     98!$OMP END PARALLEL 
    8299 
    83100      IF( ln_rstart ) THEN                    ! Restart from a file 
     
    97114            CALL dta_tsd( nit000, tsb )       ! read 3D T and S data at nit000 
    98115            ! 
    99             sshb(:,:)   = 0._wp               ! set the ocean at rest 
    100             ub  (:,:,:) = 0._wp 
    101             vb  (:,:,:) = 0._wp   
     116!$OMP PARALLEL 
     117!$OMP DO schedule(static) private(jj, ji) 
     118            DO jj = 1, jpj 
     119               DO ji = 1, jpi 
     120                  sshb (ji,jj)   = 0._wp      ! set the ocean at rest 
     121               END DO 
     122            END DO 
     123!$OMP END DO NOWAIT 
     124!$OMP DO schedule(static) private(jk, jj, ji) 
     125            DO jk = 1, jpk 
     126               DO jj = 1, jpj 
     127                  DO ji = 1, jpi 
     128                     ub  (ji,jj,jk) = 0._wp 
     129                     vb  (ji,jj,jk) = 0._wp   
     130                  END DO 
     131               END DO 
     132            END DO 
     133!$OMP END PARALLEL 
    102134            ! 
    103135         ELSE                                 ! user defined initial T and S 
    104136            CALL usr_def_istate( gdept_b, tmask, tsb, ub, vb, sshb  )          
    105137         ENDIF 
    106          tsn  (:,:,:,:) = tsb (:,:,:,:)       ! set now values from to before ones 
    107          sshn (:,:)     = sshb(:,:)    
    108          un   (:,:,:)   = ub  (:,:,:) 
    109          vn   (:,:,:)   = vb  (:,:,:) 
    110          hdivn(:,:,jpk) = 0._wp               ! bottom divergence set one for 0 to zero at jpk level 
     138!$OMP PARALLEL 
     139         DO jn = 1, jpts 
     140!$OMP DO schedule(static) private(jk, jj, ji) 
     141            DO jk = 1, jpk 
     142               DO jj = 1, jpj 
     143                  DO ji = 1, jpi 
     144                     tsn  (ji,jj,jk,jn) = tsb (ji,jj,jk,jn)       ! set now values from to before ones 
     145                  END DO 
     146               END DO 
     147            END DO 
     148         END DO 
     149!$OMP DO schedule(static) private(jk, jj, ji) 
     150         DO jk = 1, jpk 
     151            DO jj = 1, jpj 
     152               DO ji = 1, jpi 
     153                  un   (ji,jj,jk)   = ub  (ji,jj,jk) 
     154                  vn   (ji,jj,jk)   = vb  (ji,jj,jk) 
     155               END DO 
     156            END DO 
     157         END DO 
     158!$OMP DO schedule(static) private(jj, ji) 
     159         DO jj = 1, jpj 
     160            DO ji = 1, jpi 
     161               sshn (ji,jj)     = sshb(ji,jj)    
     162               hdivn(ji,jj,jpk) = 0._wp               ! bottom divergence set one for 0 to zero at jpk level 
     163            END DO 
     164         END DO 
     165!$OMP END PARALLEL 
    111166         CALL div_hor( 0 )                    ! compute interior hdivn value   
    112167!!gm                                    hdivn(:,:,:) = 0._wp 
     
    142197      ! Do it whatever the free surface method, these arrays being eventually used 
    143198      ! 
    144       un_b(:,:) = 0._wp   ;   vn_b(:,:) = 0._wp 
    145       ub_b(:,:) = 0._wp   ;   vb_b(:,:) = 0._wp 
     199!$OMP PARALLEL 
     200!$OMP DO schedule(static) private(jj, ji) 
     201      DO jj = 1, jpj 
     202         DO ji = 1, jpi 
     203            un_b(ji,jj) = 0._wp   ;   vn_b(ji,jj) = 0._wp 
     204            ub_b(ji,jj) = 0._wp   ;   vb_b(ji,jj) = 0._wp 
     205         END DO 
     206      END DO 
    146207      ! 
    147208!!gm  the use of umsak & vmask is not necessary below as un, vn, ub, vb are always masked 
    148209      DO jk = 1, jpkm1 
     210!$OMP DO schedule(static) private(jj, ji) 
    149211         DO jj = 1, jpj 
    150212            DO ji = 1, jpi 
     
    158220      END DO 
    159221      ! 
    160       un_b(:,:) = un_b(:,:) * r1_hu_n(:,:) 
    161       vn_b(:,:) = vn_b(:,:) * r1_hv_n(:,:) 
    162       ! 
    163       ub_b(:,:) = ub_b(:,:) * r1_hu_b(:,:) 
    164       vb_b(:,:) = vb_b(:,:) * r1_hv_b(:,:) 
     222!$OMP DO schedule(static) private(jj, ji) 
     223      DO jj = 1, jpj 
     224         DO ji = 1, jpi 
     225            un_b(ji,jj) = un_b(ji,jj) * r1_hu_n(ji,jj) 
     226            vn_b(ji,jj) = vn_b(ji,jj) * r1_hv_n(ji,jj) 
     227            ! 
     228            ub_b(ji,jj) = ub_b(ji,jj) * r1_hu_b(ji,jj) 
     229            vb_b(ji,jj) = vb_b(ji,jj) * r1_hv_b(ji,jj) 
     230         END DO 
     231      END DO 
     232!$OMP END PARALLEL 
    165233      ! 
    166234      IF( nn_timing == 1 )   CALL timing_stop('istate_init') 
Note: See TracChangeset for help on using the changeset viewer.