Changeset 7698 for trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
- Timestamp:
- 2017-02-18T10:02:03+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r7646 r7698 99 99 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 100 100 DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter 101 trb(:,:,:,jn) = trn(:,:,:,jn) 101 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 102 DO jk = 1, jpk 103 DO jj = 1, jpj 104 DO ji = 1, jpi 105 trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 106 END DO 107 END DO 108 END DO 102 109 END DO 103 110 ENDIF … … 125 132 CALL p4z_flx( kt, jnt ) ! Compute surface fluxes 126 133 ! 127 xnegtr(:,:,:) = 1.e0 134 !$OMP PARALLEL 135 !$OMP DO schedule(static) private(jk, jj, ji) 136 DO jk = 1, jpk 137 DO jj = 1, jpj 138 DO ji = 1, jpi 139 xnegtr(ji,jj,jk) = 1.e0 140 END DO 141 END DO 142 END DO 128 143 DO jn = jp_pcs0, jp_pcs1 144 !$OMP DO schedule(static) private(jk, jj, ji, ztra) 129 145 DO jk = 1, jpk 130 146 DO jj = 1, jpj … … 141 157 ! ! 142 158 DO jn = jp_pcs0, jp_pcs1 143 trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 159 !$OMP DO schedule(static) private(jk, jj, ji) 160 DO jk = 1, jpk 161 DO jj = 1, jpj 162 DO ji = 1, jpi 163 trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn) + xnegtr(ji,jj,jk) * tra(ji,jj,jk,jn) 164 END DO 165 END DO 166 END DO 144 167 END DO 145 168 ! 146 169 DO jn = jp_pcs0, jp_pcs1 147 tra(:,:,:,jn) = 0._wp 148 END DO 170 !$OMP DO schedule(static) private(jk, jj, ji) 171 DO jk = 1, jpk 172 DO jj = 1, jpj 173 DO ji = 1, jpi 174 tra(ji,jj,jk,jn) = 0._wp 175 END DO 176 END DO 177 END DO 178 END DO 179 !$OMP END PARALLEL 149 180 ! 150 181 IF( ln_top_euler ) THEN 151 182 DO jn = jp_pcs0, jp_pcs1 152 trn(:,:,:,jn) = trb(:,:,:,jn) 183 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 184 DO jk = 1, jpk 185 DO jj = 1, jpj 186 DO ji = 1, jpi 187 trn(ji,jj,jk,jn) = trb(ji,jj,jk,jn) 188 END DO 189 END DO 190 END DO 153 191 END DO 154 192 ENDIF … … 349 387 ! 350 388 INTEGER, INTENT( in ) :: kt ! time step 389 INTEGER :: ji, jj, jk 351 390 ! 352 391 REAL(wp) :: alkmean = 2426. ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) … … 357 396 REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 358 397 REAL(wp) :: zalksumb, zpo4sumb, zno3sumb, zsilsumb 398 REAL(wp), POINTER, DIMENSION(:,:,:) :: zctrn_jptal, zctrn_jppo4, zctrn_jppo3, zctrn_jpsil !workspace arrays 399 REAL(wp), POINTER, DIMENSION(:,:,:) :: zctrb_jptal, zctrb_jppo4, zctrb_jppo3, zctrb_jpsil !workspace arrays 359 400 !!--------------------------------------------------------------------- 360 401 … … 366 407 IF( cn_cfg == "orca" .AND. .NOT. lk_c1d ) THEN ! ORCA configuration (not 1D) ! 367 408 ! ! --------------------------- ! 409 CALL wrk_alloc( jpi, jpj, jpk, zctrn_jptal, zctrn_jppo4, zctrn_jppo3, zctrn_jpsil ) 410 CALL wrk_alloc( jpi, jpj, jpk, zctrb_jptal, zctrb_jppo4, zctrb_jppo3, zctrb_jpsil ) 411 368 412 ! set total alkalinity, phosphate, nitrate & silicate 369 413 zarea = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6 370 414 371 zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea 372 zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 373 zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 374 zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 375 376 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 377 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 378 379 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 380 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 381 382 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 383 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 384 385 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 386 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 415 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 416 DO jk = 1, jpk 417 DO jj = 1, jpj 418 DO ji = 1, jpi 419 zctrn_jptal(ji,jj,jk) = trn(ji,jj,jk,jptal) * cvol(ji,jj,jk) 420 zctrn_jppo4(ji,jj,jk) = trn(ji,jj,jk,jppo4) * cvol(ji,jj,jk) 421 zctrn_jppo3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * cvol(ji,jj,jk) 422 zctrn_jpsil(ji,jj,jk) = trn(ji,jj,jk,jpsil) * cvol(ji,jj,jk) 423 END DO 424 END DO 425 END DO 426 427 zalksumn = glob_sum( zctrn_jptal(:,:,:) ) * zarea 428 zpo4sumn = glob_sum( zctrn_jppo4(:,:,:) ) * zarea * po4r 429 zno3sumn = glob_sum( zctrn_jppo3(:,:,:) ) * zarea * rno3 430 zsilsumn = glob_sum( zctrn_jpsil(:,:,:) ) * zarea 431 432 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 433 DO jk = 1, jpk 434 DO jj = 1, jpj 435 DO ji = 1, jpi 436 trn(ji,jj,jk,jpsil) = MIN( 400.e-6,trn(ji,jj,jk,jpsil) * silmean / zsilsumn ) 437 trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) * alkmean / zalksumn 438 trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) * po4mean / zpo4sumn 439 trn(ji,jj,jk,jpno3) = trn(ji,jj,jk,jpno3) * no3mean / zno3sumn 440 END DO 441 END DO 442 END DO 443 444 IF(lwp) THEN 445 WRITE(numout,*) ' TALKN mean : ', zalksumn 446 WRITE(numout,*) ' PO4N mean : ', zpo4sumn 447 WRITE(numout,*) ' NO3N mean : ', zno3sumn 448 WRITE(numout,*) ' SiO3N mean : ', zsilsumn 449 END IF 387 450 ! 388 451 ! 389 452 IF( .NOT. ln_top_euler ) THEN 390 zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:) ) * zarea 391 zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 392 zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 393 zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 394 395 IF(lwp) WRITE(numout,*) ' ' 396 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 397 trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 398 399 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 400 trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 401 402 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 403 trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 404 405 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 406 trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 453 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 454 DO jk = 1, jpk 455 DO jj = 1, jpj 456 DO ji = 1, jpi 457 zctrb_jptal(ji,jj,jk) = trb(ji,jj,jk,jptal) * cvol(ji,jj,jk) 458 zctrb_jppo4(ji,jj,jk) = trb(ji,jj,jk,jppo4) * cvol(ji,jj,jk) 459 zctrb_jppo3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * cvol(ji,jj,jk) 460 zctrb_jpsil(ji,jj,jk) = trb(ji,jj,jk,jpsil) * cvol(ji,jj,jk) 461 END DO 462 END DO 463 END DO 464 465 zalksumb = glob_sum( zctrb_jptal(:,:,:) ) * zarea 466 zpo4sumb = glob_sum( zctrb_jppo4(:,:,:) ) * zarea * po4r 467 zno3sumb = glob_sum( zctrb_jppo3(:,:,:) ) * zarea * rno3 468 zsilsumb = glob_sum( zctrb_jpsil(:,:,:) ) * zarea 469 470 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 471 DO jk = 1, jpk 472 DO jj = 1, jpj 473 DO ji = 1, jpi 474 trb(ji,jj,jk,jpsil) = MIN( 400.e-6,trb(ji,jj,jk,jpsil) * silmean / zsilsumb ) 475 trb(ji,jj,jk,jptal) = trb(ji,jj,jk,jptal) * alkmean / zalksumb 476 trb(ji,jj,jk,jppo4) = trb(ji,jj,jk,jppo4) * po4mean / zpo4sumb 477 trb(ji,jj,jk,jpno3) = trb(ji,jj,jk,jpno3) * no3mean / zno3sumb 478 END DO 479 END DO 480 END DO 481 482 IF(lwp) THEN 483 WRITE(numout,*) ' ' 484 WRITE(numout,*) ' TALKB mean : ', zalksumb 485 WRITE(numout,*) ' PO4B mean : ', zpo4sumb 486 WRITE(numout,*) ' NO3B mean : ', zno3sumb 487 WRITE(numout,*) ' SiO3B mean : ', zsilsumb 488 END IF 407 489 ENDIF 490 ! 491 CALL wrk_dealloc( jpi, jpj, jpk, zctrb_jptal, zctrb_jppo4, zctrb_jppo3, zctrb_jpsil ) 492 CALL wrk_dealloc( jpi, jpj, jpk, zctrn_jptal, zctrn_jppo4, zctrn_jppo3, zctrn_jpsil ) 408 493 ! 409 494 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.