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/TOP_SRC/PISCES/P4Z/p4zopt.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/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r7037 r7508  
    8989      !     ----------------------------------------------- 
    9090!$OMP PARALLEL 
    91 !$OMP WORKSHARE 
    92       ze1(:,:,:) = 0._wp 
    93       ze2(:,:,:) = 0._wp 
    94       ze3(:,:,:) = 0._wp 
    95 !$OMP END WORKSHARE NOWAIT 
     91!$OMP DO schedule(static) private(jk,jj,ji) 
     92            DO jk = 1, jpk 
     93               DO jj = 1, jpj 
     94                  DO ji = 1, jpi 
     95                     ze1(ji,jj,jk) = 0._wp 
     96                     ze2(ji,jj,jk) = 0._wp 
     97                     ze3(ji,jj,jk) = 0._wp 
     98                  END DO 
     99               END DO 
     100            END DO 
     101!$OMP END DO NOWAIT 
    96102      !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
    97103!$OMP DO schedule(static) private(jk,jj,ji,zchl,irgb) 
     
    115121      IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
    116122         ! 1% of qsr to compute euphotic layer 
    117 !$OMP PARALLEL WORKSHARE 
    118          zqsr100(:,:) = 0.01 * qsr_mean(:,:)     !  daily mean qsr 
    119 !$OMP END PARALLEL WORKSHARE 
     123!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     124         DO jj = 1, jpj 
     125            DO ji = 1, jpi 
     126               zqsr100(ji,jj) = 0.01 * qsr_mean(ji,jj)     !  daily mean qsr 
     127            END DO 
     128         END DO 
    120129         ! 
    121130         CALL p4z_opt_par( kt, qsr_mean, ze1, ze2, ze3 )  
     
    137146      ELSE 
    138147         ! 1% of qsr to compute euphotic layer 
    139 !$OMP PARALLEL WORKSHARE 
    140          zqsr100(:,:) = 0.01 * qsr(:,:) 
    141 !$OMP END PARALLEL WORKSHARE 
     148!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     149         DO jj = 1, jpj 
     150            DO ji = 1, jpi 
     151               zqsr100(ji,jj) = 0.01 * qsr(ji,jj) 
     152            END DO 
     153         END DO 
    142154         ! 
    143155         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 )  
     
    150162            ediat(:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
    151163         END DO 
    152 !$OMP WORKSHARE 
    153          etot_ndcy(:,:,:) =  etot(:,:,:)  
    154 !$OMP END WORKSHARE NOWAIT 
    155 !$OMP END PARALLEL 
    156       ENDIF 
    157  
     164!$OMP DO schedule(static) private(jk,jj,ji) 
     165         DO jk = 1, jpk 
     166            DO jj = 1, jpj 
     167               DO ji = 1, jpi 
     168                  etot_ndcy(ji,jj,jk) =  etot(ji,jj,jk)  
     169               END DO 
     170            END DO 
     171         END DO 
     172!$OMP END PARALLEL 
     173      ENDIF 
    158174 
    159175      IF( ln_qsr_bio ) THEN                    !* heat flux accros w-level (used in the dynamics) 
     
    162178         ! 
    163179!$OMP PARALLEL  
    164 !$OMP WORKSHARE 
    165          etot3(:,:,1) =  qsr(:,:) * tmask(:,:,1) 
    166 !$OMP END WORKSHARE 
     180!$OMP DO schedule(static) private(jj,ji) 
     181         DO jj = 1, jpj 
     182            DO ji = 1, jpi 
     183               etot3(ji,jj,1) =  qsr(ji,jj) * tmask(ji,jj,1) 
     184            END DO 
     185         END DO 
    167186!$OMP DO schedule(static) private(jk) 
    168187         DO jk = 2, nksrp + 1 
    169188            etot3(:,:,jk) =  ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 
    170189         END DO 
    171 !$OMP END DO NOWAIT 
    172190!$OMP END PARALLEL 
    173191         !                                     !  ------------------------ 
     
    175193      !                                        !* Euphotic depth and level 
    176194!$OMP PARALLEL  
    177 !$OMP WORKSHARE 
    178       neln(:,:) = 1                            !  ------------------------ 
    179       heup(:,:) = 300. 
    180 !$OMP END WORKSHARE 
     195!$OMP DO schedule(static) private(jj,ji) 
     196      DO jj = 1, jpj 
     197         DO ji = 1, jpi 
     198            neln(ji,jj) = 1                            !  ------------------------ 
     199            heup(ji,jj) = 300. 
     200         END DO 
     201      END DO 
    181202 
    182203      DO jk = 2, nksrp 
     
    193214      END DO 
    194215      ! 
    195 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
     216!$OMP DO schedule(static) private(jj,ji) 
    196217      DO jj = 1, jpj 
    197218         DO ji = 1, jpi 
     
    200221      END DO 
    201222      !                                        !* mean light over the mixed layer 
    202 !$OMP WORKSHARE 
    203       zdepmoy(:,:)   = 0.e0                    !  ------------------------------- 
    204       zetmp1 (:,:)   = 0.e0 
    205       zetmp2 (:,:)   = 0.e0 
    206       zetmp3 (:,:)   = 0.e0 
    207       zetmp4 (:,:)   = 0.e0 
    208 !$OMP END WORKSHARE 
     223!$OMP DO schedule(static) private(jj,ji) 
     224      DO jj = 1, jpj 
     225         DO ji = 1, jpi 
     226            zdepmoy(ji,jj)   = 0.e0                    !  ------------------------------- 
     227            zetmp1 (ji,jj)   = 0.e0 
     228            zetmp2 (ji,jj)   = 0.e0 
     229            zetmp3 (ji,jj)   = 0.e0 
     230            zetmp4 (ji,jj)   = 0.e0 
     231        END DO 
     232      END DO 
    209233 
    210234      DO jk = 1, nksrp 
     
    224248      END DO 
    225249      ! 
    226 !$OMP WORKSHARE 
    227       emoy(:,:,:) = etot(:,:,:)       ! remineralisation 
    228       zpar(:,:,:) = etot_ndcy(:,:,:)  ! diagnostic : PAR with no diurnal cycle  
    229 !$OMP END WORKSHARE 
     250!$OMP DO schedule(static) private(jk,jj,ji) 
     251            DO jk = 1, jpk 
     252               DO jj = 1, jpj 
     253                  DO ji = 1, jpi 
     254      emoy(ji,jj,jk) = etot(ji,jj,jk)       ! remineralisation 
     255      zpar(ji,jj,jk) = etot_ndcy(ji,jj,jk)  ! diagnostic : PAR with no diurnal cycle  
     256            END DO 
     257         END DO 
     258      END DO 
    230259      ! 
    231260!$OMP DO schedule(static) private(jk,jj,ji,z1_dep) 
     
    254283      ELSE 
    255284         IF( ln_diatrc ) THEN        ! save output diagnostics 
    256 !$OMP PARALLEL WORKSHARE 
    257             trc2d(:,:,  jp_pcs0_2d + 10) = heup(:,:  ) * tmask(:,:,1) 
    258             trc3d(:,:,:,jp_pcs0_3d + 3)  = etot(:,:,:) * tmask(:,:,:) 
    259 !$OMP END PARALLEL WORKSHARE 
     285!$OMP PARALLEL 
     286!$OMP DO schedule(static) private(jj,ji) 
     287            DO jj = 1, jpj 
     288               DO ji = 1, jpi 
     289                  trc2d(ji,jj,  jp_pcs0_2d + 10) = heup(ji,jj  ) * tmask(ji,jj,1) 
     290               END DO 
     291            END DO 
     292!$OMP END DO NOWAIT 
     293!$OMP DO schedule(static) private(jk,jj,ji) 
     294            DO jk = 1, jpk 
     295               DO jj = 1, jpj 
     296                  DO ji = 1, jpi 
     297                     trc3d(ji,jj,jk,jp_pcs0_3d + 3)  = etot(ji,jj,jk) * tmask(ji,jj,jk) 
     298                  END DO 
     299               END DO 
     300            END DO 
     301!$OMP END PARALLEL 
    260302         ENDIF 
    261303      ENDIF 
     
    288330      !  Real shortwave 
    289331      IF( ln_varpar ) THEN   
    290 !$OMP PARALLEL WORKSHARE 
    291           zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 
    292 !$OMP END PARALLEL WORKSHARE 
     332!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     333         DO jj = 1, jpj 
     334            DO ji = 1, jpi 
     335               zqsr(ji,jj) = par_varsw(ji,jj) * pqsr(ji,jj) 
     336            END DO 
     337         END DO 
    293338      ELSE                  
    294 !$OMP PARALLEL WORKSHARE 
    295           zqsr(:,:) = xparsw         * pqsr(:,:) 
    296 !$OMP END PARALLEL WORKSHARE 
     339!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     340         DO jj = 1, jpj 
     341            DO ji = 1, jpi 
     342               zqsr(ji,jj) = xparsw         * pqsr(ji,jj) 
     343            END DO 
     344         END DO 
    297345      ENDIF 
    298346      ! 
     
    300348         ! 
    301349!$OMP PARALLEL 
    302 !$OMP WORKSHARE 
    303          pe0(:,:,1) = pqsr(:,:) - 3. * zqsr(:,:)    !   ( 1 - 3 * alpha ) * q 
    304          pe1(:,:,1) = zqsr(:,:)          
    305          pe2(:,:,1) = zqsr(:,:) 
    306          pe3(:,:,1) = zqsr(:,:) 
    307 !$OMP END WORKSHARE 
     350!$OMP DO schedule(static) private(jj,ji) 
     351         DO jj = 1, jpj 
     352            DO ji = 1, jpi 
     353               pe0(ji,jj,1) = pqsr(ji,jj) - 3. * zqsr(ji,jj)    !   ( 1 - 3 * alpha ) * q 
     354               pe1(ji,jj,1) = zqsr(ji,jj)          
     355               pe2(ji,jj,1) = zqsr(ji,jj) 
     356               pe3(ji,jj,1) = zqsr(ji,jj) 
     357            END DO 
     358         END DO 
    308359         ! 
    309360         DO jk = 2, nksrp + 1 
     
    379430         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_par > 1 ) ) THEN 
    380431            CALL fld_read( kt, 1, sf_par ) 
    381 !$OMP PARALLEL WORKSHARE 
    382             par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) / 3.0 
    383 !$OMP END PARALLEL WORKSHARE 
     432!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     433            DO jj = 1, jpj 
     434               DO ji = 1, jpi 
     435                  par_varsw(ji,jj) = ( sf_par(1)%fnow(ji,jj,1) ) / 3.0 
     436               END DO 
     437            END DO 
    384438         ENDIF 
    385439      ENDIF 
     
    402456      INTEGER :: ierr 
    403457      INTEGER :: ios                 ! Local integer output status for namelist read 
     458      INTEGER    ::   ji, jj, jk     ! dummy loop indices 
    404459      REAL(wp), DIMENSION(nbtimes) :: zsteps                 ! times records 
    405460      ! 
     
    457512      IF(lwp) WRITE(numout,*) '        level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 
    458513      ! 
    459 !$OMP PARALLEL WORKSHARE 
    460                          ekr      (:,:,:) = 0._wp 
    461                          ekb      (:,:,:) = 0._wp 
    462                          ekg      (:,:,:) = 0._wp 
    463                          etot     (:,:,:) = 0._wp 
    464                          etot_ndcy(:,:,:) = 0._wp 
    465                          enano    (:,:,:) = 0._wp 
    466                          ediat    (:,:,:) = 0._wp 
    467 !$OMP END PARALLEL WORKSHARE 
     514!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     515         DO jk = 1, jpk 
     516            DO jj = 1, jpj 
     517               DO ji = 1, jpi 
     518                  ekr      (ji,jj,jk) = 0._wp 
     519                  ekb      (ji,jj,jk) = 0._wp 
     520                  ekg      (ji,jj,jk) = 0._wp 
     521                  etot     (ji,jj,jk) = 0._wp 
     522                  etot_ndcy(ji,jj,jk) = 0._wp 
     523                  enano    (ji,jj,jk) = 0._wp 
     524                  ediat    (ji,jj,jk) = 0._wp 
     525               END DO 
     526            END DO 
     527         END DO 
    468528      IF( ln_qsr_bio ) THEN 
    469 !$OMP PARALLEL WORKSHARE 
    470                          etot3    (:,:,:) = 0._wp 
    471 !$OMP END PARALLEL WORKSHARE 
     529!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     530         DO jk = 1, jpk 
     531            DO jj = 1, jpj 
     532               DO ji = 1, jpi 
     533                  etot3    (ji,jj,jk) = 0._wp 
     534               END DO 
     535            END DO 
     536         END DO 
    472537      END IF 
    473538      !  
Note: See TracChangeset for help on using the changeset viewer.