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 7508 for branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90 – NEMO

Ignore:
Timestamp:
2016-12-19T13:15:59+01:00 (8 years ago)
Author:
mocavero
Message:

changes on code duplication and workshare construct

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90

    r7037 r7508  
    6464      !! ** Purpose :   Initialization of the dynamics and tracer fields. 
    6565      !!---------------------------------------------------------------------- 
    66       INTEGER ::   ji, jj, jk   ! dummy loop indices 
     66      INTEGER ::   ji, jj, jk, jp   ! dummy loop indices 
    6767      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::   zuvd    ! U & V data workspace 
    6868      !!---------------------------------------------------------------------- 
     
    7878      IF( lk_c1d )   CALL dta_uvd_init        ! Initialization of U & V input data 
    7979 
    80 !$OMP PARALLEL WORKSHARE 
    81       rhd  (:,:,:  ) = 0._wp   ;   rhop (:,:,:  ) = 0._wp      ! set one for all to 0 at level jpk 
    82       rn2b (:,:,:  ) = 0._wp   ;   rn2  (:,:,:  ) = 0._wp      ! set one for all to 0 at levels 1 and jpk 
    83       tsa  (:,:,:,:) = 0._wp                                   ! set one for all to 0 at level jpk 
    84       rab_b(:,:,:,:) = 0._wp   ;   rab_n(:,:,:,:) = 0._wp      ! set one for all to 0 at level jpk 
    85 !$OMP END PARALLEL WORKSHARE 
     80!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     81      DO jk = 1, jpk 
     82         DO jj = 1, jpj 
     83            DO ji = 1, jpi 
     84               rhd  (ji,jj,jk  ) = 0._wp   ;   rhop (ji,jj,jk  ) = 0._wp      ! set one for all to 0 at level jpk 
     85               rn2b (ji,jj,jk  ) = 0._wp   ;   rn2  (ji,jj,jk  ) = 0._wp      ! set one for all to 0 at levels 1 and jpk 
     86               tsa  (ji,jj,jk,:) = 0._wp                                   ! set one for all to 0 at level jpk 
     87               rab_b(ji,jj,jk,:) = 0._wp   ;   rab_n(ji,jj,jk,:) = 0._wp      ! set one for all to 0 at level jpk 
     88            END DO 
     89         END DO 
     90      END DO 
    8691 
    8792      IF( ln_rstart ) THEN                    ! Restart from a file 
     
    98103         !                                       ! Initialization of ocean to zero 
    99104         !   before fields      !       now fields      
    100 !$OMP PARALLEL WORKSHARE 
    101          sshb (:,:)   = 0._wp   ;   sshn (:,:)   = 0._wp 
    102          ub   (:,:,:) = 0._wp   ;   un   (:,:,:) = 0._wp 
    103          vb   (:,:,:) = 0._wp   ;   vn   (:,:,:) = 0._wp   
    104                                     hdivn(:,:,:) = 0._wp 
    105 !$OMP END PARALLEL WORKSHARE 
     105!$OMP PARALLEL 
     106!$OMP DO schedule(static) private(jj, ji) 
     107         DO jj = 1, jpj 
     108            DO ji = 1, jpi 
     109               sshb (ji,jj)   = 0._wp   ;   sshn (ji,jj)   = 0._wp 
     110            END DO 
     111         END DO 
     112!$OMP END DO NOWAIT 
     113!$OMP DO schedule(static) private(jk, jj, ji) 
     114         DO jk = 1, jpk 
     115            DO jj = 1, jpj 
     116               DO ji = 1, jpi 
     117                  ub   (ji,jj,jk) = 0._wp   ;   un   (ji,jj,jk) = 0._wp 
     118                  vb   (ji,jj,jk) = 0._wp   ;   vn   (ji,jj,jk) = 0._wp   
     119                  hdivn(ji,jj,jk) = 0._wp 
     120               END DO 
     121            END DO 
     122         END DO 
     123!$OMP END PARALLEL 
    106124         ! 
    107125         IF( cp_cfg == 'eel' ) THEN 
     
    112130            IF ( ln_tsd_init ) THEN              ! read 3D T and S data at nit000 
    113131               CALL dta_tsd( nit000, tsb )   
    114 !$OMP PARALLEL WORKSHARE 
    115                tsn(:,:,:,:) = tsb(:,:,:,:) 
    116 !$OMP END PARALLEL WORKSHARE 
     132!$OMP PARALLEL DO schedule(static) private(jp, jk, jj, ji) 
     133               DO jp = 1, jpts 
     134                  DO jk = 1, jpk 
     135                     DO jj = 1, jpj 
     136                        DO ji = 1, jpi 
     137                           tsn(ji,jj,jk,jp) = tsb(ji,jj,jk,jp) 
     138                        END DO 
     139                     END DO 
     140                  END DO 
     141               END DO 
    117142               ! 
    118143            ELSE                                 ! Initial T-S fields defined analytically 
     
    122147               CALL wrk_alloc( jpi,jpj,jpk,2,   zuvd ) 
    123148               CALL dta_uvd( nit000, zuvd ) 
    124 !$OMP PARALLEL WORKSHARE 
    125                ub(:,:,:) = zuvd(:,:,:,1) ;  un(:,:,:) = ub(:,:,:) 
    126                vb(:,:,:) = zuvd(:,:,:,2) ;  vn(:,:,:) = vb(:,:,:) 
    127 !$OMP END PARALLEL WORKSHARE 
     149!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     150               DO jk = 1, jpk 
     151                  DO jj = 1, jpj 
     152                     DO ji = 1, jpi 
     153                        ub(ji,jj,jk) = zuvd(ji,jj,jk,1) ;  un(ji,jj,jk) = ub(ji,jj,jk) 
     154                        vb(ji,jj,jk) = zuvd(ji,jj,jk,2) ;  vn(ji,jj,jk) = vb(ji,jj,jk) 
     155                     END DO 
     156                  END DO 
     157               END DO 
    128158               CALL wrk_dealloc( jpi,jpj,jpk,2,   zuvd ) 
    129159            ENDIF 
     
    146176      ! 
    147177!$OMP PARALLEL 
    148 !$OMP WORKSHARE 
    149       un_b(:,:) = 0._wp   ;   vn_b(:,:) = 0._wp 
    150       ub_b(:,:) = 0._wp   ;   vb_b(:,:) = 0._wp 
    151 !$OMP END WORKSHARE 
     178!$OMP DO schedule(static) private(jj, ji) 
     179      DO jj = 1, jpj 
     180         DO ji = 1, jpi 
     181            un_b(ji,jj) = 0._wp   ;   vn_b(ji,jj) = 0._wp 
     182            ub_b(ji,jj) = 0._wp   ;   vb_b(ji,jj) = 0._wp 
     183         END DO 
     184      END DO 
    152185      ! 
    153186!!gm  the use of umsak & vmask is not necessary belox as un, vn, ub, vb are always masked 
     
    165198      END DO 
    166199      ! 
    167 !$OMP WORKSHARE 
    168       un_b(:,:) = un_b(:,:) * r1_hu_n(:,:) 
    169       vn_b(:,:) = vn_b(:,:) * r1_hv_n(:,:) 
    170       ! 
    171       ub_b(:,:) = ub_b(:,:) * r1_hu_b(:,:) 
    172       vb_b(:,:) = vb_b(:,:) * r1_hv_b(:,:) 
    173 !$OMP END WORKSHARE NOWAIT 
     200!$OMP DO schedule(static) private(jj, ji) 
     201      DO jj = 1, jpj 
     202         DO ji = 1, jpi 
     203            un_b(ji,jj) = un_b(ji,jj) * r1_hu_n(ji,jj) 
     204            vn_b(ji,jj) = vn_b(ji,jj) * r1_hv_n(ji,jj) 
     205            ! 
     206            ub_b(ji,jj) = ub_b(ji,jj) * r1_hu_b(ji,jj) 
     207            vb_b(ji,jj) = vb_b(ji,jj) * r1_hv_b(ji,jj) 
     208         END DO 
     209      END DO 
    174210!$OMP END PARALLEL 
    175211      ! 
     
    406442         CALL iom_close( inum ) 
    407443 
    408 !$OMP PARALLEL WORKSHARE 
    409          tsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) * tmask(:,:,:)  
    410          tsb(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) 
    411 !$OMP END PARALLEL WORKSHARE 
     444!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     445         DO jk = 1, jpk 
     446            DO jj = 1, jpj 
     447               DO ji = 1, jpi 
     448                  tsn(ji,jj,jk,jp_tem) = tsn(ji,jj,jk,jp_tem) * tmask(ji,jj,jk)  
     449                  tsb(ji,jj,jk,jp_tem) = tsn(ji,jj,jk,jp_tem) 
     450               END DO 
     451            END DO 
     452         END DO 
    412453 
    413454         ! Read salinity field 
     
    417458         CALL iom_close( inum ) 
    418459 
    419 !$OMP PARALLEL WORKSHARE 
    420          tsn(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) * tmask(:,:,:)  
    421          tsb(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) 
    422 !$OMP END PARALLEL WORKSHARE 
     460!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     461         DO jk = 1, jpk 
     462            DO jj = 1, jpj 
     463               DO ji = 1, jpi 
     464                  tsn(ji,jj,jk,jp_sal) = tsn(ji,jj,jk,jp_sal) * tmask(ji,jj,jk)  
     465                  tsb(ji,jj,jk,jp_sal) = tsn(ji,jj,jk,jp_sal) 
     466               END DO 
     467            END DO 
     468         END DO 
    423469         ! 
    424470      END SELECT 
Note: See TracChangeset for help on using the changeset viewer.