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 7753 for trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90 – NEMO

Ignore:
Timestamp:
2017-03-03T12:46:59+01:00 (7 years ago)
Author:
mocavero
Message:

Reverting trunk to remove OpenMP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r7698 r7753  
    8484      !     Initialisation of variables used to compute PAR 
    8585      !     ----------------------------------------------- 
    86 !$OMP PARALLEL 
    87 !$OMP DO schedule(static) private(jk,jj,ji) 
    88       DO jk = 1, jpk 
    89          DO jj = 1, jpj 
    90             DO ji = 1, jpi 
    91                ze1(ji,jj,jk) = 0._wp 
    92                ze2(ji,jj,jk) = 0._wp 
    93                ze3(ji,jj,jk) = 0._wp 
    94             END DO 
    95          END DO 
    96       END DO 
    97 !$OMP END DO NOWAIT 
     86      ze1(:,:,:) = 0._wp 
     87      ze2(:,:,:) = 0._wp 
     88      ze3(:,:,:) = 0._wp 
    9889      ! 
    9990      !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
    10091                                               !  -------------------------------------------------------- 
    101 !$OMP DO schedule(static) private(jk,jj,ji) 
    102       DO jk = 1, jpk 
    103          DO jj = 1, jpj 
    104             DO ji = 1, jpi 
    105                zchl3d(ji,jj,jk) = trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) 
    106             END DO 
    107          END DO 
    108       END DO 
    109 !$OMP END PARALLEL 
    110       IF( ln_p5z ) THEN 
    111 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    112          DO jk = 1, jpk 
    113             DO jj = 1, jpj 
    114                DO ji = 1, jpi 
    115                   zchl3d(ji,jj,jk) = zchl3d(ji,jj,jk) + trb(ji,jj,jk,jppch) 
    116                END DO 
    117             END DO 
    118          END DO 
    119       END IF 
    120       ! 
    121 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zchl,irgb) 
     92                    zchl3d(:,:,:) = trb(:,:,:,jpnch) + trb(:,:,:,jpdch) 
     93      IF( ln_p5z )  zchl3d(:,:,:) = zchl3d(:,:,:) + trb(:,:,:,jppch) 
     94      ! 
    12295      DO jk = 1, jpkm1    
    12396         DO jj = 1, jpj 
     
    137110      IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
    138111         ! 
    139 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    140          DO jj = 1, jpj 
    141             DO ji = 1, jpi 
    142                zqsr_corr(ji,jj) = qsr_mean(ji,jj) / ( 1. - fr_i(ji,jj) + rtrn ) 
    143             END DO 
    144          END DO 
     112         zqsr_corr(:,:) = qsr_mean(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
    145113         ! 
    146114         CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 )  
    147115         ! 
    148 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    149116         DO jk = 1, nksrp       
    150             DO jj = 1, jpj 
    151                DO ji = 1, jpi 
    152                   etot_ndcy(ji,jj,jk) =        ze1(ji,jj,jk) +        ze2(ji,jj,jk) +       ze3(ji,jj,jk) 
    153                   enano    (ji,jj,jk) =  2.1 * ze1(ji,jj,jk) + 0.42 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk) 
    154                   ediat    (ji,jj,jk) =  1.6 * ze1(ji,jj,jk) + 0.69 * ze2(ji,jj,jk) + 0.7 * ze3(ji,jj,jk) 
    155                END DO 
    156             END DO 
     117            etot_ndcy(:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     118            enano    (:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     119            ediat    (:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
    157120         END DO 
    158121         IF( ln_p5z ) THEN 
    159 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    160122            DO jk = 1, nksrp       
    161                DO jj = 1, jpj 
    162                   DO ji = 1, jpi 
    163                      epico  (ji,jj,jk) =  2.1 * ze1(ji,jj,jk) + 0.42 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk) 
    164                   END DO 
    165                END DO 
     123              epico  (:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
    166124            END DO 
    167125         ENDIF 
    168126         ! 
    169 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    170          DO jj = 1, jpj 
    171             DO ji = 1, jpi 
    172                zqsr_corr(ji,jj) = qsr(ji,jj) / ( 1. - fr_i(ji,jj) + rtrn ) 
    173             END DO 
    174          END DO 
     127         zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
    175128         ! 
    176129         CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3 )  
    177130         ! 
    178 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    179131         DO jk = 1, nksrp       
    180             DO jj = 1, jpj 
    181                DO ji = 1, jpi 
    182                   etot(ji,jj,jk) =  ze1(ji,jj,jk) + ze2(ji,jj,jk) + ze3(ji,jj,jk) 
    183                END DO 
    184             END DO 
     132            etot(:,:,jk) =  ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 
    185133         END DO 
    186134         ! 
    187135      ELSE 
    188136         ! 
    189 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    190          DO jj = 1, jpj 
    191             DO ji = 1, jpi 
    192                zqsr_corr(ji,jj) = qsr(ji,jj) / ( 1. - fr_i(ji,jj) + rtrn ) 
    193             END DO 
    194          END DO 
     137         zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
    195138         ! 
    196139         CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100  )  
    197140         ! 
    198 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    199          DO jk = 1, nksrp 
    200             DO jj = 1, jpj 
    201                DO ji = 1, jpi 
    202                   etot (ji,jj,jk) =        ze1(ji,jj,jk) +        ze2(ji,jj,jk) +       ze3(ji,jj,jk) 
    203                   enano(ji,jj,jk) =  2.1 * ze1(ji,jj,jk) + 0.42 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk) 
    204                   ediat(ji,jj,jk) =  1.6 * ze1(ji,jj,jk) + 0.69 * ze2(ji,jj,jk) + 0.7 * ze3(ji,jj,jk) 
    205                END DO 
    206             END DO 
     141         DO jk = 1, nksrp       
     142            etot (:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     143            enano(:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     144            ediat(:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
    207145         END DO 
    208146         IF( ln_p5z ) THEN 
    209 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    210             DO jk = 1, nksrp 
    211                DO jj = 1, jpj 
    212                   DO ji = 1, jpi 
    213                      epico(ji,jj,jk) =  2.1 * ze1(ji,jj,jk) + 0.42 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk) 
    214                   END DO 
    215                END DO 
     147            DO jk = 1, nksrp       
     148              epico(:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
    216149            END DO 
    217150         ENDIF 
    218 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    219          DO jk = 1, jpk 
    220             DO jj = 1, jpj 
    221                DO ji = 1, jpi 
    222                   etot_ndcy(ji,jj,jk) =  etot(ji,jj,jk) 
    223                END DO 
    224             END DO 
    225          END DO 
     151         etot_ndcy(:,:,:) =  etot(:,:,:)  
    226152      ENDIF 
    227153 
     
    231157         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3, pe0=ze0 ) 
    232158         ! 
    233 !$OMP PARALLEL 
    234 !$OMP DO schedule(static) private(jj,ji) 
    235          DO jj = 1, jpj 
    236             DO ji = 1, jpi 
    237                etot3(ji,jj,1) =  qsr(ji,jj) * tmask(ji,jj,1) 
    238             END DO 
    239          END DO 
    240 !$OMP DO schedule(static) private(jk,jj,ji) 
     159         etot3(:,:,1) =  qsr(:,:) * tmask(:,:,1) 
    241160         DO jk = 2, nksrp + 1 
    242             DO jj = 1, jpj 
    243                DO ji = 1, jpi 
    244                   etot3(ji,jj,jk) =  ( ze0(ji,jj,jk) + ze1(ji,jj,jk) + ze2(ji,jj,jk) + ze3(ji,jj,jk) ) * tmask(ji,jj,jk) 
    245                END DO 
    246             END DO 
    247          END DO 
    248 !$OMP END PARALLEL 
     161            etot3(:,:,jk) =  ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 
     162         END DO 
    249163         !                                     !  ------------------------ 
    250164      ENDIF 
    251165      !                                        !* Euphotic depth and level 
    252                                                !  ------------------------ 
    253 !$OMP PARALLEL  
    254 !$OMP DO schedule(static) private(jj,ji) 
    255       DO jj = 1, jpj 
    256          DO ji = 1, jpi 
    257             neln(ji,jj) = 1 
    258             heup   (ji,jj) = gdepw_n(ji,jj,2) 
    259             heup_01(ji,jj) = gdepw_n(ji,jj,2) 
    260          END DO 
    261       END DO 
     166      neln   (:,:) = 1                            !  ------------------------ 
     167      heup   (:,:) = gdepw_n(:,:,2) 
     168      heup_01(:,:) = gdepw_n(:,:,2) 
    262169 
    263170      DO jk = 2, nksrp 
    264 !$OMP DO schedule(static) private(jj,ji) 
    265171         DO jj = 1, jpj 
    266172           DO ji = 1, jpi 
     
    277183      END DO 
    278184      ! 
    279 !$OMP DO schedule(static) private(jj,ji) 
    280       DO jj = 1, jpj 
    281          DO ji = 1, jpi 
    282             heup   (ji,jj) = MIN( 300., heup   (ji,jj) ) 
    283             heup_01(ji,jj) = MIN( 300., heup_01(ji,jj) ) 
    284             !                                          !* mean light over the mixed layer 
    285             zdepmoy(ji,jj)   = 0.e0                    !  ------------------------------- 
    286             zetmp1 (ji,jj)   = 0.e0 
    287             zetmp2 (ji,jj)   = 0.e0 
    288             zetmp3 (ji,jj)   = 0.e0 
    289             zetmp4 (ji,jj)   = 0.e0 
    290         END DO 
    291       END DO 
     185      heup   (:,:) = MIN( 300., heup   (:,:) ) 
     186      heup_01(:,:) = MIN( 300., heup_01(:,:) ) 
     187      !                                        !* mean light over the mixed layer 
     188      zdepmoy(:,:)   = 0.e0                    !  ------------------------------- 
     189      zetmp1 (:,:)   = 0.e0 
     190      zetmp2 (:,:)   = 0.e0 
     191      zetmp3 (:,:)   = 0.e0 
     192      zetmp4 (:,:)   = 0.e0 
    292193 
    293194      DO jk = 1, nksrp 
    294 !$OMP DO schedule(static) private(jj,ji) 
    295195         DO jj = 1, jpj 
    296196            DO ji = 1, jpi 
     
    306206      END DO 
    307207      ! 
    308 !$OMP DO schedule(static) private(jk,jj,ji) 
    309       DO jk = 1, jpk 
    310          DO jj = 1, jpj 
    311             DO ji = 1, jpi 
    312                emoy(ji,jj,jk) = etot(ji,jj,jk)       ! remineralisation 
    313                zpar(ji,jj,jk) = etot_ndcy(ji,jj,jk)  ! diagnostic : PAR with no diurnal cycle  
    314             END DO 
    315          END DO 
    316       END DO 
    317       ! 
    318 !$OMP DO schedule(static) private(jk,jj,ji,z1_dep) 
     208      emoy(:,:,:) = etot(:,:,:)       ! remineralisation 
     209      zpar(:,:,:) = etot_ndcy(:,:,:)  ! diagnostic : PAR with no diurnal cycle  
     210      ! 
    319211      DO jk = 1, nksrp 
    320212         DO jj = 1, jpj 
     
    330222         END DO 
    331223      END DO 
    332 !$OMP END PARALLEL 
    333224      ! 
    334225      IF( ln_p5z ) THEN 
    335 !$OMP PARALLEL 
    336 !$OMP DO schedule(static) private(jj,ji) 
    337          DO jj = 1, jpj 
    338             DO ji = 1, jpi 
    339                zetmp5 (ji,jj) = 0.e0 
    340             END DO 
    341          END DO 
     226         zetmp5 (:,:) = 0.e0 
    342227         DO jk = 1, nksrp 
    343 !$OMP DO schedule(static) private(jj,ji,z1_dep) 
    344228            DO jj = 1, jpj 
    345229               DO ji = 1, jpi 
     
    352236            END DO 
    353237         END DO 
    354 !$OMP END PARALLEL 
    355238      ENDIF 
    356239      IF( lk_iomput ) THEN 
     
    391274 
    392275      !  Real shortwave 
    393       IF( ln_varpar ) THEN 
    394 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    395          DO jj = 1, jpj 
    396             DO ji = 1, jpi 
    397                zqsr(ji,jj) = par_varsw(ji,jj) * pqsr(ji,jj) 
    398             END DO 
    399          END DO 
    400       ELSE 
    401 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    402          DO jj = 1, jpj 
    403             DO ji = 1, jpi 
    404                zqsr(ji,jj) = xparsw         * pqsr(ji,jj) 
    405             END DO 
    406          END DO 
     276      IF( ln_varpar ) THEN  ;  zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 
     277      ELSE                  ;  zqsr(:,:) = xparsw         * pqsr(:,:) 
    407278      ENDIF 
    408279       
    409280      !  Light at the euphotic depth  
    410       IF( PRESENT( pqsr100 ) ) THEN 
    411 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    412          DO jj = 1, jpj 
    413             DO ji = 1, jpi 
    414                pqsr100(ji,jj) = 0.01 * 3. * zqsr(ji,jj) 
    415             END DO 
    416          END DO 
    417       ENDIF 
     281      IF( PRESENT( pqsr100 ) )  pqsr100(:,:) = 0.01 * 3. * zqsr(:,:) 
    418282 
    419283      IF( PRESENT( pe0 ) ) THEN     !  W-level 
    420284         ! 
    421 !$OMP PARALLEL 
    422 !$OMP DO schedule(static) private(jj,ji) 
    423          DO jj = 1, jpj 
    424             DO ji = 1, jpi 
    425                pe0(ji,jj,1) = pqsr(ji,jj) - 3. * zqsr(ji,jj)    !   ( 1 - 3 * alpha ) * q 
    426                pe1(ji,jj,1) = zqsr(ji,jj) 
    427                pe2(ji,jj,1) = zqsr(ji,jj) 
    428                pe3(ji,jj,1) = zqsr(ji,jj) 
    429             END DO 
    430          END DO 
     285         pe0(:,:,1) = pqsr(:,:) - 3. * zqsr(:,:)    !   ( 1 - 3 * alpha ) * q 
     286         pe1(:,:,1) = zqsr(:,:)          
     287         pe2(:,:,1) = zqsr(:,:) 
     288         pe3(:,:,1) = zqsr(:,:) 
    431289         ! 
    432290         DO jk = 2, nksrp + 1 
    433 !$OMP DO schedule(static) private(jj,ji) 
    434291            DO jj = 1, jpj 
    435292               DO ji = 1, jpi 
     
    443300            ! 
    444301         END DO 
    445 !$OMP END PARALLEL 
    446302        ! 
    447303      ELSE   ! T- level 
    448304        ! 
    449 !$OMP PARALLEL 
    450 !$OMP DO schedule(static) private(jj,ji) 
    451         DO jj = 1, jpj 
    452            DO ji = 1, jpi 
    453               pe1(ji,jj,1) = zqsr(ji,jj) * EXP( -0.5 * ekb(ji,jj,1) ) 
    454               pe2(ji,jj,1) = zqsr(ji,jj) * EXP( -0.5 * ekg(ji,jj,1) ) 
    455               pe3(ji,jj,1) = zqsr(ji,jj) * EXP( -0.5 * ekr(ji,jj,1) ) 
    456            END DO 
    457         END DO 
     305        pe1(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekb(:,:,1) ) 
     306        pe2(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekg(:,:,1) ) 
     307        pe3(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekr(:,:,1) ) 
    458308        ! 
    459309        DO jk = 2, nksrp       
    460 !$OMP DO schedule(static) private(jj,ji) 
    461310           DO jj = 1, jpj 
    462311              DO ji = 1, jpi 
     
    467316           END DO 
    468317        END DO     
    469 !$OMP END PARALLEL 
    470318        ! 
    471319      ENDIF 
     
    521369      INTEGER :: ierr 
    522370      INTEGER :: ios                 ! Local integer output status for namelist read 
    523       INTEGER    ::   ji, jj, jk     ! dummy loop indices 
    524371      REAL(wp), DIMENSION(nbtimes) :: zsteps                 ! times records 
    525372      ! 
     
    577424      IF(lwp) WRITE(numout,*) '        level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 
    578425      ! 
    579 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    580          DO jk = 1, jpk 
    581             DO jj = 1, jpj 
    582                DO ji = 1, jpi 
    583                   ekr      (ji,jj,jk) = 0._wp 
    584                   ekb      (ji,jj,jk) = 0._wp 
    585                   ekg      (ji,jj,jk) = 0._wp 
    586                   etot     (ji,jj,jk) = 0._wp 
    587                   etot_ndcy(ji,jj,jk) = 0._wp 
    588                   enano    (ji,jj,jk) = 0._wp 
    589                   ediat    (ji,jj,jk) = 0._wp 
    590                END DO 
    591             END DO 
    592          END DO 
    593       IF( ln_qsr_bio ) THEN 
    594 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    595          DO jk = 1, jpk 
    596             DO jj = 1, jpj 
    597                DO ji = 1, jpi 
    598                   etot3    (ji,jj,jk) = 0._wp 
    599                END DO 
    600             END DO 
    601          END DO 
    602       END IF 
    603  
    604       IF( ln_p5z     ) THEN 
    605 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    606          DO jk = 1, jpk 
    607             DO jj = 1, jpj 
    608                DO ji = 1, jpi 
    609                   epico    (ji,jj,jk) = 0._wp 
    610                END DO 
    611             END DO 
    612          END DO 
    613       END IF 
     426                         ekr      (:,:,:) = 0._wp 
     427                         ekb      (:,:,:) = 0._wp 
     428                         ekg      (:,:,:) = 0._wp 
     429                         etot     (:,:,:) = 0._wp 
     430                         etot_ndcy(:,:,:) = 0._wp 
     431                         enano    (:,:,:) = 0._wp 
     432                         ediat    (:,:,:) = 0._wp 
     433      IF( ln_p5z     )   epico    (:,:,:) = 0._wp 
     434      IF( ln_qsr_bio )   etot3    (:,:,:) = 0._wp 
    614435      !  
    615436      IF( nn_timing == 1 )  CALL timing_stop('p4z_opt_init') 
Note: See TracChangeset for help on using the changeset viewer.