Changeset 7753 for trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
- Timestamp:
- 2017-03-03T12:46:59+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r7698 r7753 84 84 ! Initialisation of variables used to compute PAR 85 85 ! ----------------------------------------------- 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 98 89 ! 99 90 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 100 91 ! -------------------------------------------------------- 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 ! 122 95 DO jk = 1, jpkm1 123 96 DO jj = 1, jpj … … 137 110 IF( l_trcdm2dc ) THEN ! diurnal cycle 138 111 ! 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 ) 145 113 ! 146 114 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 147 115 ! 148 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)149 116 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) 157 120 END DO 158 121 IF( ln_p5z ) THEN 159 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)160 122 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) 166 124 END DO 167 125 ENDIF 168 126 ! 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 ) 175 128 ! 176 129 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3 ) 177 130 ! 178 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)179 131 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) 185 133 END DO 186 134 ! 187 135 ELSE 188 136 ! 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 ) 195 138 ! 196 139 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 197 140 ! 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) 207 145 END DO 208 146 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) 216 149 END DO 217 150 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(:,:,:) 226 152 ENDIF 227 153 … … 231 157 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3, pe0=ze0 ) 232 158 ! 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) 241 160 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 249 163 ! ! ------------------------ 250 164 ENDIF 251 165 ! !* 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) 262 169 263 170 DO jk = 2, nksrp 264 !$OMP DO schedule(static) private(jj,ji)265 171 DO jj = 1, jpj 266 172 DO ji = 1, jpi … … 277 183 END DO 278 184 ! 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 292 193 293 194 DO jk = 1, nksrp 294 !$OMP DO schedule(static) private(jj,ji)295 195 DO jj = 1, jpj 296 196 DO ji = 1, jpi … … 306 206 END DO 307 207 ! 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 ! 319 211 DO jk = 1, nksrp 320 212 DO jj = 1, jpj … … 330 222 END DO 331 223 END DO 332 !$OMP END PARALLEL333 224 ! 334 225 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 342 227 DO jk = 1, nksrp 343 !$OMP DO schedule(static) private(jj,ji,z1_dep)344 228 DO jj = 1, jpj 345 229 DO ji = 1, jpi … … 352 236 END DO 353 237 END DO 354 !$OMP END PARALLEL355 238 ENDIF 356 239 IF( lk_iomput ) THEN … … 391 274 392 275 ! 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(:,:) 407 278 ENDIF 408 279 409 280 ! 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(:,:) 418 282 419 283 IF( PRESENT( pe0 ) ) THEN ! W-level 420 284 ! 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(:,:) 431 289 ! 432 290 DO jk = 2, nksrp + 1 433 !$OMP DO schedule(static) private(jj,ji)434 291 DO jj = 1, jpj 435 292 DO ji = 1, jpi … … 443 300 ! 444 301 END DO 445 !$OMP END PARALLEL446 302 ! 447 303 ELSE ! T- level 448 304 ! 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) ) 458 308 ! 459 309 DO jk = 2, nksrp 460 !$OMP DO schedule(static) private(jj,ji)461 310 DO jj = 1, jpj 462 311 DO ji = 1, jpi … … 467 316 END DO 468 317 END DO 469 !$OMP END PARALLEL470 318 ! 471 319 ENDIF … … 521 369 INTEGER :: ierr 522 370 INTEGER :: ios ! Local integer output status for namelist read 523 INTEGER :: ji, jj, jk ! dummy loop indices524 371 REAL(wp), DIMENSION(nbtimes) :: zsteps ! times records 525 372 ! … … 577 424 IF(lwp) WRITE(numout,*) ' level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 578 425 ! 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 614 435 ! 615 436 IF( nn_timing == 1 ) CALL timing_stop('p4z_opt_init')
Note: See TracChangeset
for help on using the changeset viewer.