Changeset 7698 for trunk/NEMOGCM/NEMO/TOP_SRC
- Timestamp:
- 2017-02-18T10:02:03+01:00 (7 years ago)
- Location:
- trunk/NEMOGCM/NEMO/TOP_SRC
- Files:
-
- 31 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zagg.F90
r7646 r7698 56 56 IF( ln_p4z ) THEN 57 57 ! 58 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zfact,zagg1,zagg2,zagg3,zagg4,zagg,zaggfe,zaggdoc,zaggdoc2,zaggdoc3) 58 59 DO jk = 1, jpkm1 59 60 DO jj = 1, jpj … … 102 103 ELSE ! ln_p5z 103 104 ! 105 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zfact,zaggtmp,zaggfe,zaggpoc,zaggpoc1,zaggpoc2,zaggpoc3,zaggpoc4) & 106 !$OMP& private(zaggpon,zaggpop,zaggdoc,zaggdon,zaggdop,zaggdoc2,zaggdon2,zaggdop2,zaggdoc3,zaggdon3,zaggdop3) 104 107 DO jk = 1, jpkm1 105 108 DO jj = 1, jpj -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90
r7646 r7698 66 66 ! OF PHYTOPLANKTON AND DETRITUS 67 67 68 xdiss(:,:,:) = 1. 68 !$OMP PARALLEL 69 !$OMP DO schedule(static) private(jk,jj,ji) 70 DO jk = 1, jpk 71 DO jj = 1, jpj 72 DO ji = 1, jpi 73 xdiss(ji,jj,jk) = 1. 74 END DO 75 END DO 76 END DO 69 77 !!gm the use of nmld should be better here? 78 !$OMP DO schedule(static) private(jk,jj,ji) 70 79 DO jk = 2, jpkm1 71 80 DO jj = 1, jpj … … 76 85 END DO 77 86 END DO 87 !$OMP END PARALLEL 78 88 79 89 CALL p4z_opt ( kt, knt ) ! Optic: PAR in the water column -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zche.F90
r7646 r7698 132 132 !!---------------------------------------------------------------------- 133 133 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 134 !! $Id$ 134 !! $Id$ 135 135 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 136 136 !!---------------------------------------------------------------------- … … 165 165 ! ------------------------------------------------------------- 166 166 IF (neos == -1) THEN 167 salinprac(:,:,:) = tsn(:,:,:,jp_sal) * 35.0 / 35.16504 167 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 168 DO jk = 1, jpk 169 DO jj = 1, jpj 170 DO ji = 1, jpi 171 salinprac(ji,jj,jk) = tsn(ji,jj,jk,jp_sal) * 35.0 / 35.16504 172 END DO 173 END DO 174 END DO 168 175 ELSE 169 salinprac(:,:,:) = tsn(:,:,:,jp_sal) 176 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 177 DO jk = 1, jpk 178 DO jj = 1, jpj 179 DO ji = 1, jpi 180 salinprac(ji,jj,jk) = tsn(ji,jj,jk,jp_sal) 181 END DO 182 END DO 183 END DO 170 184 ENDIF 171 185 … … 176 190 ! 0.04°C relative to an exact computation 177 191 ! --------------------------------------------------------------------- 192 !$OMP PARALLEL 193 !$OMP DO schedule(static) private(jk,jj,ji,zpres,za1,za2) 178 194 DO jk = 1, jpk 179 195 DO jj = 1, jpj … … 190 206 ! ---------------------------------- 191 207 !CDIR NOVERRCHK 208 !$OMP DO schedule(static) private(jj,ji,ztkel,zt,zsal,zcek1) 192 209 DO jj = 1, jpj 193 210 !CDIR NOVERRCHK … … 211 228 ! ------------------------------- 212 229 !CDIR NOVERRCHK 230 !$OMP DO schedule(static) private(jk,jj,ji,ztkel,zsal,zsal2,ztgg,ztgg2,ztgg3,ztgg4,ztgg5,zoxy) 213 231 DO jk = 1, jpk 214 232 !CDIR NOVERRCHK … … 239 257 ! ------------------------------- 240 258 !CDIR NOVERRCHK 259 !$OMP DO schedule(static) private(jk,jj,ji,zplat,zc1,zpres,ztkel,zsal,zsqrt,zsal15,zlogt,ztr,zis,zis2,zisqrt,ztc,zcl,zst) & 260 !$OMP& private(zft,zcks,zckf,zckb,zck1,zck2,zckw,zck1p,zck2p,zck3p,zcksi,zaksp0,total2free,free2SWS,total2SWS,SWS2total,zak1,zak2,zakb,zakw,zaksp1,zak1p,zak2p,zak3p,zaksi,zcpexp,zcpexp2,zbuf1,zbuf2,ztkel1) 241 261 DO jk = 1, jpk 242 262 !CDIR NOVERRCHK … … 446 466 END DO 447 467 END DO 468 !$OMP END PARALLEL 448 469 ! 449 470 IF( nn_timing == 1 ) CALL timing_stop('p4z_che') … … 473 494 IF( nn_timing == 1 ) CALL timing_start('ahini_for_at') 474 495 ! 496 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,p_alkcb,p_dictot,p_bortot,zca1,zba1,za2,za1,za0,zd,zsqrtd,zhmin) 475 497 DO jk = 1, jpk 476 498 DO jj = 1, jpj … … 515 537 ! 516 538 END SUBROUTINE ahini_for_at 517 518 539 !=============================================================================== 519 540 SUBROUTINE anw_infsup( p_alknw_inf, p_alknw_sup ) … … 526 547 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT) :: p_alknw_inf 527 548 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT) :: p_alknw_sup 528 529 p_alknw_inf(:,:,:) = -trb(:,:,:,jppo4) * 1000. / (rhop(:,:,:) + rtrn) - sulfat(:,:,:) & 530 & - fluorid(:,:,:) 531 p_alknw_sup(:,:,:) = (2. * trb(:,:,:,jpdic) + 2. * trb(:,:,:,jppo4) + trb(:,:,:,jpsil) ) & 532 & * 1000. / (rhop(:,:,:) + rtrn) + borat(:,:,:) 549 INTEGER :: ji, jj, jk 550 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 551 DO jk = 1, jpk 552 DO jj = 1, jpj 553 DO ji = 1, jpi 554 p_alknw_inf(ji,jj,jk) = -trb(ji,jj,jk,jppo4) * 1000. / (rhop(ji,jj,jk) + rtrn) - sulfat(ji,jj,jk) & 555 & - fluorid(ji,jj,jk) 556 p_alknw_sup(ji,jj,jk) = (2. * trb(ji,jj,jk,jpdic) + 2. * trb(ji,jj,jk,jppo4) + trb(ji,jj,jk,jpsil) ) & 557 & * 1000. / (rhop(ji,jj,jk) + rtrn) + borat(ji,jj,jk) 558 END DO 559 END DO 560 END DO 533 561 534 562 END SUBROUTINE anw_infsup … … 571 599 CALL anw_infsup( zalknw_inf, zalknw_sup ) 572 600 573 rmask(:,:,:) = tmask(:,:,:) 574 zhi(:,:,:) = 0. 601 !$OMP PARALLEL 602 !$OMP DO schedule(static) private(jk,jj,ji) 603 DO jk = 1, jpk 604 DO jj = 1, jpj 605 DO ji = 1, jpi 606 rmask(ji,jj,jk) = tmask(ji,jj,jk) 607 zhi(ji,jj,jk) = 0. 608 END DO 609 END DO 610 END DO 575 611 576 612 ! TOTAL H+ scale: conversion factor for Htot = aphscale * Hfree 613 !$OMP DO schedule(static) private(jk,jj,ji,p_alktot,aphscale,zh_ini,zdelta) 577 614 DO jk = 1, jpk 578 615 DO jj = 1, jpj … … 605 642 END DO 606 643 607 zeqn_absmin(:,:,:) = HUGE(1._wp) 644 !$OMP DO schedule(static) private(jk,jj,ji) 645 DO jk = 1, jpk 646 DO jj = 1, jpj 647 DO ji = 1, jpi 648 zeqn_absmin(ji,jj,jk) = HUGE(1._wp) 649 END DO 650 END DO 651 END DO 608 652 609 653 DO jn = 1, jp_maxniter_atgen 654 !$OMP DO schedule(static) private(jk,jj,ji,zfact,p_alktot,zdic,zbot,zpt,zsit,zst,zft,zh,zh_prev,znumer_dic) & 655 !$OMP& private(zdenom_dic,zalk_dic,zdnumer_dic,zdalk_dic,znumer_bor,zdenom_bor,zalk_bor,zdnumer_bor,zdalk_bor) & 656 !$OMP& private(znumer_po4,zdenom_po4,zalk_po4,zdnumer_po4,zdalk_po4,znumer_sil,zdenom_sil,zalk_sil,zdnumer_sil) & 657 !$OMP& private(zdalk_sil,aphscale,znumer_so4,zdenom_so4,zalk_so4,zdnumer_so4,zdalk_so4,znumer_flu,zdenom_flu) & 658 !$OMP& private(zalk_flu,zdnumer_flu,zdalk_flu,zalk_wat,zdalk_wat,zeqn,zalka,zdeqndh,zh_lnfactor,zh_delta,l_exitnow) 610 659 DO jk = 1, jpk 611 660 DO jj = 1, jpj … … 796 845 END DO 797 846 END DO 847 !$OMP END PARALLEL 798 848 ! 799 849 CALL wrk_dealloc( jpi, jpj, jpk, zalknw_inf, zalknw_sup, rmask ) -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r7646 r7698 83 83 ! Allocate temporary workspace 84 84 CALL wrk_alloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip ) 85 zFe3 (:,:,:) = 0. 86 zFeL1(:,:,:) = 0. 87 zTL1 (:,:,:) = 0. 88 IF( ln_fechem ) THEN 89 CALL wrk_alloc( jpi, jpj, zstrn, zstrn2 ) 90 CALL wrk_alloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 91 zFe2 (:,:,:) = 0. 92 zFeL2(:,:,:) = 0. 93 zTL2 (:,:,:) = 0. 94 zFeP (:,:,:) = 0. 95 ENDIF 85 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 86 DO jk = 1, jpk 87 DO jj = 1, jpj 88 DO ji = 1, jpi 89 zFe3 (ji,jj,jk) = 0. 90 zFeL1(ji,jj,jk) = 0. 91 zTL1 (ji,jj,jk) = 0. 92 END DO 93 END DO 94 END DO 96 95 97 96 ! Total ligand concentration : Ligands can be chosen to be constant or variable … … 99 98 ! ------------------------------------------------- 100 99 IF( ln_ligvar ) THEN 101 ztotlig(:,:,:) = 0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 102 ztotlig(:,:,:) = MIN( ztotlig(:,:,:), 10. ) 100 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 101 DO jk = 1, jpk 102 DO jj = 1, jpj 103 DO ji = 1, jpi 104 ztotlig(ji,jj,jk) = 0.09 * trb(ji,jj,jk,jpdoc) * 1E6 + ligand * 1E9 105 ztotlig(ji,jj,jk) = MIN( ztotlig(ji,jj,jk), 10. ) 106 END DO 107 END DO 108 END DO 103 109 ELSE 104 IF( ln_ligand ) THEN ; ztotlig(:,:,:) = trb(:,:,:,jplgw) * 1E9 105 ELSE ; ztotlig(:,:,:) = ligand * 1E9 110 IF( ln_ligand ) 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 ztotlig(ji,jj,jk) = trb(ji,jj,jk,jplgw) * 1E9 116 END DO 117 END DO 118 END DO 119 ELSE 120 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 121 DO jk = 1, jpk 122 DO jj = 1, jpj 123 DO ji = 1, jpi 124 ztotlig(ji,jj,jk) = ligand * 1E9 125 END DO 126 END DO 127 END DO 106 128 ENDIF 107 129 ENDIF 108 130 109 131 IF( ln_fechem ) THEN 132 CALL wrk_alloc( jpi, jpj, zstrn, zstrn2 ) 133 CALL wrk_alloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 110 134 ! compute the day length depending on latitude and the day 111 135 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 112 136 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) 113 137 138 !$OMP PARALLEL 139 !$OMP DO schedule(static) private(jk,jj,ji) 140 DO jk = 1, jpk 141 DO jj = 1, jpj 142 DO ji = 1, jpi 143 zFe2 (ji,jj,jk) = 0. 144 zFeL2(ji,jj,jk) = 0. 145 zTL2 (ji,jj,jk) = 0. 146 zFeP (ji,jj,jk) = 0. 147 END DO 148 END DO 149 END DO 114 150 ! day length in hours 115 zstrn(:,:) = 0. 151 !$OMP DO schedule(static) private(jj,ji) 152 DO jj = 1, jpj 153 DO ji = 1, jpi 154 zstrn(ji,jj) = 0. 155 END DO 156 END DO 157 !$OMP DO schedule(static) private(jj,ji,zargu) 116 158 DO jj = 1, jpj 117 159 DO ji = 1, jpi … … 123 165 124 166 ! Maximum light intensity 125 zstrn2(:,:) = zstrn(:,:) / 24. 126 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 127 zstrn(:,:) = 24. / zstrn(:,:) 167 !$OMP DO schedule(static) private(jj,ji) 168 DO jj = 1, jpj 169 DO ji = 1, jpi 170 zstrn2(ji,jj) = zstrn(ji,jj) / 24. 171 IF( zstrn(ji,jj) < 1.e0 ) zstrn(ji,jj) = 24. 172 zstrn(ji,jj) = 24. / zstrn(ji,jj) 173 END DO 174 END DO 128 175 129 176 ! ------------------------------------------------------------ … … 133 180 ! ------------------------------------------------------------ 134 181 DO jn = 1, 2 182 !$OMP DO schedule(static) private(jk,jj,ji,zzstrn2,ztligand,zph,zoxy,zkox,zkph2,zkph1,ztfe,za) & 183 !$OMP& private(zb,zc,zkappa1,zkappa2,za2,za1,za0,zp,zq,zp3,zq2,zd,zr,zphi,zxs,zfff,jic,zfunc) & 184 !$OMP& private(zlight,zzFe3,zzFep,zzFeL2,zzFeL1,zzFe2) 135 185 DO jk = 1, jpkm1 136 186 DO jj = 1, jpj … … 213 263 END DO 214 264 END DO 265 !$OMP END PARALLEL 215 266 ELSE 216 267 ! ------------------------------------------------------------ … … 219 270 ! Chemistry is supposed to be fast enough to be at equilibrium 220 271 ! ------------------------------------------------------------ 272 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zkeq,zfesatur,ztfe) 221 273 DO jk = 1, jpkm1 222 274 DO jj = 1, jpj … … 239 291 240 292 zdust = 0. ! if no dust available 293 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zfeequi,zfecoll,zhplus,fe3sol,ztrc,zdust) & 294 !$OMP& private(zlam1b,zscave,zdenom1,zdenom2,zlamfac,zdep,zcoag,zlam1a,zaggdfea,zaggdfeb) 241 295 DO jk = 1, jpkm1 242 296 DO jj = 1, jpj … … 308 362 ! Define the bioavailable fraction of iron 309 363 ! ---------------------------------------- 310 IF( ln_fechem ) THEN ; biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 311 ELSE ; biron(:,:,:) = trb(:,:,:,jpfer) 364 IF( ln_fechem ) THEN 365 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 366 DO jk = 1, jpk 367 DO jj = 1, jpj 368 DO ji = 1, jpi 369 biron(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) - zFeP(ji,jj,jk) * 1E-9 ) 370 END DO 371 END DO 372 END DO 373 ELSE 374 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 375 DO jk = 1, jpk 376 DO jj = 1, jpj 377 DO ji = 1, jpi 378 biron(ji,jj,jk) = trb(ji,jj,jk,jpfer) 379 END DO 380 END DO 381 END DO 312 382 ENDIF 313 383 ! 314 384 IF( ln_ligand ) THEN 315 385 ! 386 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zlam1a,zlam1b,zligco,zaggliga,zaggligb) 316 387 DO jk = 1, jpkm1 317 388 DO jj = 1, jpj … … 331 402 ! 332 403 IF( .NOT.ln_fechem) THEN 333 plig(:,:,:) = MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trb(:,:,:,jpfer) +rtrn ) ) ) 334 plig(:,:,:) = MAX( 0. , plig(:,:,:) ) 404 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 405 DO jk = 1, jpk 406 DO jj = 1, jpj 407 DO ji = 1, jpi 408 plig(ji,jj,jk) = MAX( 0., ( ( zFeL1(ji,jj,jk) * 1E-9 ) / ( trb(ji,jj,jk,jpfer) +rtrn ) ) ) 409 plig(ji,jj,jk) = MAX( 0. , plig(ji,jj,jk) ) 410 END DO 411 END DO 412 END DO 335 413 ENDIF 336 414 ! -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r7646 r7698 54 54 !!---------------------------------------------------------------------- 55 55 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 56 !! $Id$ 56 !! $Id$ 57 57 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 58 58 !!---------------------------------------------------------------------- … … 105 105 zdco2dt = ( atcco2h(iind) - atcco2h(iindm1) ) / ( years(iind) - years(iindm1) + rtrn ) 106 106 atcco2 = zdco2dt * ( zyr_dec - years(iindm1) ) + atcco2h(iindm1) 107 satmco2(:,:) = atcco2 108 ENDIF 109 110 IF( l_co2cpl ) satmco2(:,:) = atm_co2(:,:) 111 107 !$OMP PARALLEL DO schedule(static) private(jj,ji) 108 DO jj = 1, jpj 109 DO ji = 1, jpi 110 satmco2(ji,jj) = atcco2 111 END DO 112 END DO 113 ENDIF 114 115 IF( l_co2cpl ) THEN 116 !$OMP PARALLEL DO schedule(static) private(jj,ji) 117 DO jj = 1, jpj 118 DO ji = 1, jpi 119 satmco2(ji,jj) = atm_co2(ji,jj) 120 END DO 121 END DO 122 END IF 123 124 !$OMP PARALLEL 125 !$OMP DO schedule(static) private(jj,ji,zfact,zdic,zph) 112 126 DO jj = 1, jpj 113 127 DO ji = 1, jpi … … 128 142 ! ------------------------------------------- 129 143 144 !$OMP DO schedule(static) private(jj,ji,ztc,ztc2,ztc3,ztc4,zsch_co2,zsch_o2,zws,zkgwan) 130 145 DO jj = 1, jpj 131 146 DO ji = 1, jpi … … 149 164 150 165 166 !$OMP DO schedule(static) private(jj,ji,ztkel,zsal,zvapsw,zxc2,zfugcoeff,zfco2,zfld,zflu,zflu16) 151 167 DO jj = 1, jpj 152 168 DO ji = 1, jpi … … 174 190 END DO 175 191 END DO 192 !$OMP END PARALLEL 176 193 177 194 t_oce_co2_flx = glob_sum( oce_co2(:,:) ) ! Total Flux of Carbon … … 189 206 CALL wrk_alloc( jpi, jpj, zw2d ) 190 207 IF( iom_use( "Cflx" ) ) THEN 191 zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 208 !$OMP PARALLEL DO schedule(static) private(jj,ji) 209 DO jj = 1, jpj 210 DO ji = 1, jpi 211 zw2d(ji,jj) = oce_co2(ji,jj) / e1e2t(ji,jj) * rfact2r 212 END DO 213 END DO 192 214 CALL iom_put( "Cflx" , zw2d ) 193 215 ENDIF 194 216 IF( iom_use( "Oflx" ) ) THEN 195 zw2d(:,:) = zoflx(:,:) * 1000 * tmask(:,:,1) 217 !$OMP PARALLEL DO schedule(static) private(jj,ji) 218 DO jj = 1, jpj 219 DO ji = 1, jpi 220 zw2d(ji,jj) = zoflx(ji,jj) * 1000 * tmask(ji,jj,1) 221 END DO 222 END DO 196 223 CALL iom_put( "Oflx" , zw2d ) 197 224 ENDIF 198 225 IF( iom_use( "Kg" ) ) THEN 199 zw2d(:,:) = zkgco2(:,:) * tmask(:,:,1) 226 !$OMP PARALLEL DO schedule(static) private(jj,ji) 227 DO jj = 1, jpj 228 DO ji = 1, jpi 229 zw2d(ji,jj) = zkgco2(ji,jj) * tmask(ji,jj,1) 230 END DO 231 END DO 200 232 CALL iom_put( "Kg" , zw2d ) 201 233 ENDIF 202 234 IF( iom_use( "Dpco2" ) ) THEN 203 zw2d(:,:) = ( zpco2atm(:,:) - zh2co3(:,:) / ( chemc(:,:,1) + rtrn ) ) * tmask(:,:,1) 235 !$OMP PARALLEL DO schedule(static) private(jj,ji) 236 DO jj = 1, jpj 237 DO ji = 1, jpi 238 zw2d(ji,jj) = ( zpco2atm(ji,jj) - zh2co3(ji,jj) / ( chemc(ji,jj,1) + rtrn ) ) * tmask(ji,jj,1) 239 END DO 240 END DO 204 241 CALL iom_put( "Dpco2" , zw2d ) 205 242 ENDIF 206 243 IF( iom_use( "Dpo2" ) ) THEN 207 zw2d(:,:) = ( atcox * patm(:,:) - atcox * trb(:,:,1,jpoxy) / ( chemo2(:,:,1) + rtrn ) ) * tmask(:,:,1) 244 !$OMP PARALLEL DO schedule(static) private(jj,ji) 245 DO jj = 1, jpj 246 DO ji = 1, jpi 247 zw2d(ji,jj) = ( atcox * patm(ji,jj) - atcox * trb(ji,jj,1,jpoxy) / ( chemo2(ji,jj,1) + rtrn ) ) * tmask(ji,jj,1) 248 END DO 249 END DO 208 250 CALL iom_put( "Dpo2" , zw2d ) 209 251 ENDIF … … 232 274 !!---------------------------------------------------------------------- 233 275 NAMELIST/nampisext/ln_co2int, atcco2, clname, nn_offset 234 INTEGER :: jm 276 INTEGER :: jm, jj, ji 235 277 INTEGER :: ios ! Local integer output status for namelist read 236 278 !!---------------------------------------------------------------------- … … 258 300 WRITE(numout,*) ' ' 259 301 ENDIF 260 satmco2(:,:) = atcco2 ! Initialisation of atmospheric pco2 302 !$OMP PARALLEL DO schedule(static) private(jj,ji) 303 DO jj = 1, jpj 304 DO ji = 1, jpi 305 satmco2(ji,jj) = atcco2 ! Initialisation of atmospheric pco2 306 END DO 307 END DO 261 308 ELSEIF( ln_co2int .AND. .NOT.ln_presatmco2 ) THEN 262 309 IF(lwp) THEN … … 294 341 295 342 ! 296 oce_co2(:,:) = 0._wp ! Initialization of Flux of Carbon 343 !$OMP PARALLEL DO schedule(static) private(jj,ji) 344 DO jj = 1, jpj 345 DO ji = 1, jpi 346 oce_co2(ji,jj) = 0._wp ! Initialization of Flux of Carbon 347 END DO 348 END DO 297 349 t_oce_co2_flx = 0._wp 298 350 t_atm_co2_flx = 0._wp … … 313 365 !! * arguments 314 366 INTEGER, INTENT( in ) :: kt ! ocean time step 367 INTEGER :: jj, ji 315 368 ! 316 369 INTEGER :: ierr … … 361 414 ENDIF 362 415 ! 363 IF( .NOT.ln_presatm ) patm(:,:) = 1.e0 ! Initialize patm if no reading from a file 416 IF( .NOT.ln_presatm ) THEN 417 !$OMP PARALLEL DO schedule(static) private(jj,ji) 418 DO jj = 1, jpj 419 DO ji = 1, jpi 420 patm(ji,jj) = 1.e0 ! Initialize patm if no reading from a file 421 END DO 422 END DO 423 ENDIF 364 424 ! 365 425 ENDIF … … 367 427 IF( ln_presatm ) THEN 368 428 CALL fld_read( kt, 1, sf_patm ) !* input Patm provided at kt + 1/2 369 patm(:,:) = sf_patm(1)%fnow(:,:,1) ! atmospheric pressure 429 !$OMP PARALLEL DO schedule(static) private(jj,ji) 430 DO jj = 1, jpj 431 DO ji = 1, jpi 432 patm(ji,jj) = sf_patm(1)%fnow(ji,jj,1) ! atmospheric pressure 433 END DO 434 END DO 370 435 ENDIF 371 436 ! 372 437 IF( ln_presatmco2 ) THEN 373 438 CALL fld_read( kt, 1, sf_atmco2 ) !* input atmco2 provided at kt + 1/2 374 satmco2(:,:) = sf_atmco2(1)%fnow(:,:,1) ! atmospheric pressure 439 !$OMP PARALLEL DO schedule(static) private(jj,ji) 440 DO jj = 1, jpj 441 DO ji = 1, jpi 442 satmco2(ji,jj) = sf_atmco2(1)%fnow(ji,jj,1) ! atmospheric pressure 443 END DO 444 END DO 375 445 ELSE 376 satmco2(:,:) = atcco2 ! Initialize atmco2 if no reading from a file 446 !$OMP PARALLEL DO schedule(static) private(jj,ji) 447 DO jj = 1, jpj 448 DO ji = 1, jpi 449 satmco2(ji,jj) = atcco2 ! Initialize atmco2 if no reading from a file 450 END DO 451 END DO 377 452 ENDIF 378 453 ! -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90
r7646 r7698 21 21 !!---------------------------------------------------------------------- 22 22 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 23 !! $Id$ 23 !! $Id$ 24 24 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 25 25 !!---------------------------------------------------------------------- … … 36 36 INTEGER, INTENT( in ) :: kt ! ocean time-step index 37 37 ! 38 INTEGER :: ji, jj 38 INTEGER :: ji, jj, jk ! dummy loop indices 39 39 REAL(wp) :: zvar ! local variable 40 40 !!--------------------------------------------------------------------- … … 44 44 ! Computation of phyto and zoo metabolic rate 45 45 ! ------------------------------------------- 46 tgfunc (:,:,:) = EXP( 0.063913 * tsn(:,:,:,jp_tem) ) 47 tgfunc2(:,:,:) = EXP( 0.07608 * tsn(:,:,:,jp_tem) ) 46 !$OMP PARALLEL 47 !$OMP DO schedule(static) private(jk,jj,ji) 48 DO jk = 1, jpk 49 DO jj = 1, jpj 50 DO ji = 1, jpi 51 tgfunc (ji,jj,jk) = EXP( 0.063913 * tsn(ji,jj,jk,jp_tem) ) 52 tgfunc2(ji,jj,jk) = EXP( 0.07608 * tsn(ji,jj,jk,jp_tem) ) 53 END DO 54 END DO 55 END DO 48 56 49 57 ! Computation of the silicon dependant half saturation constant for silica uptake 50 58 ! --------------------------------------------------- 59 !$OMP DO schedule(static) private(jj,ji,zvar) 51 60 DO ji = 1, jpi 52 61 DO jj = 1, jpj … … 57 66 ! 58 67 IF( nday_year == nyear_len(1) ) THEN 59 xksi (:,:) = xksimax(:,:) 60 xksimax(:,:) = 0._wp 68 !$OMP DO schedule(static) private(jj,ji) 69 DO jj = 1, jpj 70 DO ji = 1, jpi 71 xksi (ji,jj) = xksimax(ji,jj) 72 xksimax(ji,jj) = 0._wp 73 END DO 74 END DO 61 75 ENDIF 76 !$OMP END PARALLEL 62 77 ! 63 78 IF( nn_timing == 1 ) CALL timing_stop('p4z_int') -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90
r7646 r7698 97 97 IF( nn_timing == 1 ) CALL timing_start('p4z_lim') 98 98 ! 99 !$OMP PARALLEL 100 !$OMP DO schedule(static) private(jk,jj,ji,zno3,zferlim,zconcd,zconcd2,zconcn,zconcn2,z1_trbphy,z1_trbdia) & 101 !$OMP& private(zconc1d,zconc1dnh4,zconc0n,zconc0nnh4,zdenom,zlim1,zlim2,zlim3,zlim4,zratio,zironmin) 99 102 DO jk = 1, jpkm1 100 103 DO jj = 1, jpj … … 173 176 END DO 174 177 END DO 178 !$OMP END DO NOWAIT 175 179 176 180 ! Compute the fraction of nanophytoplankton that is made of calcifiers 177 181 ! -------------------------------------------------------------------- 182 !$OMP DO schedule(static) private(jk,jj,ji,zlim1,zlim2,zlim3,ztem1,ztem2,zetot1,zetot2) 178 183 DO jk = 1, jpkm1 179 184 DO jj = 1, jpj … … 199 204 END DO 200 205 END DO 201 ! 206 !$OMP END DO NOWAIT 207 ! 208 !$OMP DO schedule(static) private(jk,jj,ji) 202 209 DO jk = 1, jpkm1 203 210 DO jj = 1, jpj … … 210 217 END DO 211 218 END DO 219 !$OMP END PARALLEL 212 220 ! 213 221 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics … … 241 249 & xksi1, xksi2, xkdoc, qnfelim, qdfelim, caco3r, oxymin 242 250 INTEGER :: ios ! Local integer output status for namelist read 251 INTEGER :: ji, jj, jk 243 252 244 253 REWIND( numnatp_ref ) ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters … … 277 286 ENDIF 278 287 ! 279 nitrfac (:,:,:) = 0._wp 288 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 289 DO jk = 1, jpkm1 290 DO jj = 1, jpj 291 DO ji = 1, jpi 292 nitrfac (ji,jj,jk) = 0._wp 293 END DO 294 END DO 295 END DO 280 296 ! 281 297 END SUBROUTINE p4z_lim_init -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r7646 r7698 69 69 CALL wrk_alloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 70 70 ! 71 zco3 (:,:,:) = 0. 72 zcaldiss(:,:,:) = 0. 73 zhinit(:,:,:) = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 71 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 72 DO jk = 1, jpk 73 DO jj = 1, jpj 74 DO ji = 1, jpi 75 zco3 (ji,jj,jk) = 0. 76 zcaldiss(ji,jj,jk) = 0. 77 zhinit(ji,jj,jk) = hi(ji,jj,jk) * 1000. / ( rhop(ji,jj,jk) + rtrn ) 78 END DO 79 END DO 80 END DO 74 81 ! ------------------------------------------- 75 82 ! COMPUTE [CO3--] and [H+] CONCENTRATIONS … … 78 85 CALL solve_at_general(zhinit, zhi) 79 86 87 !$OMP PARALLEL 88 !$OMP DO schedule(static) private(jk, jj, ji) 80 89 DO jk = 1, jpkm1 81 90 DO jj = 1, jpj … … 94 103 ! --------------------------------------------------------- 95 104 105 !$OMP DO schedule(static) private(jk,jj,ji,zcalcon,zfact,zomegaca,zexcess0,zexcess,zdispot) 96 106 DO jk = 1, jpkm1 97 107 DO jj = 1, jpj … … 124 134 END DO 125 135 END DO 136 !$OMP END PARALLEL 126 137 ! 127 138 -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r7646 r7698 79 79 ! 80 80 CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 81 zgrazing(:,:,:) = 0._wp 82 81 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 82 DO jk = 1, jpk 83 DO jj = 1, jpj 84 DO ji = 1, jpi 85 zgrazing(ji,jj,jk) = 0._wp 86 END DO 87 END DO 88 END DO 89 90 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zcompam,zfact,zrespz2,ztortz2,zcompadi,zcompaz,zcompaph,zfracal) & 91 !$OMP& private(zcompapoc,zfood,zfoodlim,zdenom,zdenom2,zgraze2,zgrazd,zgrazz,zgrazn,zgrazpoc,zgraznf,zgrazf,zgrazpof) & 92 !$OMP& private(zgrazffeg,zgrazfffg,zgrazffep,zgrazfffp,zgraztot,zproport,zratio,zratio2,zfrac,zfracfe,zgraztotf,zgrasrat) & 93 !$OMP& private(zgraztotn,zgrasratn,zepshert,zepsherv,zgrarem2,zgrafer2,zgrapoc2,zgrarsig,zmortz2,zmortzgoc,zprcaca,zgrazcal) 83 94 DO jk = 1, jpkm1 84 95 DO jj = 1, jpj … … 220 231 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 221 232 IF( iom_use( "GRAZ2" ) ) THEN 222 zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ! Total grazing of phyto by zooplankton 233 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 234 DO jk = 1, jpk 235 DO jj = 1, jpj 236 DO ji = 1, jpi 237 zw3d(ji,jj,jk) = zgrazing(ji,jj,jk) * 1.e+3 * rfact2r * tmask(ji,jj,jk) ! Total grazing of phyto by zooplankton 238 END DO 239 END DO 240 END DO 223 241 CALL iom_put( "GRAZ2", zw3d ) 224 242 ENDIF 225 243 IF( iom_use( "PCAL" ) ) THEN 226 zw3d(:,:,:) = prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ! Calcite production 244 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 245 DO jk = 1, jpk 246 DO jj = 1, jpj 247 DO ji = 1, jpi 248 zw3d(ji,jj,jk) = prodcal(ji,jj,jk) * 1.e+3 * rfact2r * tmask(ji,jj,jk) ! Calcite production 249 END DO 250 END DO 251 END DO 227 252 CALL iom_put( "PCAL", zw3d ) 228 253 ENDIF -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r7646 r7698 79 79 CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 80 80 ! 81 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zcompaz,zfact,zrespz,ztortz,zcompadi,zcompaph,zcompapoc,zfood) & 82 !$OMP& private(zfoodlim,zdenom,zdenom2,zgraze,zgrazp,zgrazm,zgrazsd,zgrazpf,zgrazmf,zgrazsf,zgraztot,zgraztotf) & 83 !$OMP& private(zgraztotn,zgrasrat,zgrasratn,zepshert,zepsherv,zgrafer,zgrarem,zgrapoc,zgrarsig,zmortz,zprcaca) 81 84 DO jk = 1, jpkm1 82 85 DO jj = 1, jpj … … 181 184 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 182 185 IF( iom_use( "GRAZ1" ) ) THEN 183 zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ! Total grazing of phyto by zooplankton 186 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 187 DO jk = 1, jpk 188 DO jj = 1, jpj 189 DO ji = 1, jpi 190 zw3d(ji,jj,jk) = zgrazing(ji,jj,jk) * 1.e+3 * rfact2r * tmask(ji,jj,jk) ! Total grazing of phyto by zooplankton 191 END DO 192 END DO 193 END DO 184 194 CALL iom_put( "GRAZ1", zw3d ) 185 195 ENDIF -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90
r7646 r7698 32 32 !!---------------------------------------------------------------------- 33 33 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 34 !! $Id$ 34 !! $Id$ 35 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 36 !!---------------------------------------------------------------------- … … 74 74 IF( nn_timing == 1 ) CALL timing_start('p4z_nano') 75 75 ! 76 prodcal(:,:,:) = 0. !: calcite production variable set to zero 76 !$OMP PARALLEL 77 !$OMP DO schedule(static) private(jk,jj,ji) 78 DO jk = 1, jpk 79 DO jj = 1, jpj 80 DO ji = 1, jpi 81 prodcal(ji,jj,jk) = 0. !: calcite production variable set to zero 82 END DO 83 END DO 84 END DO 85 !$OMP DO schedule(static) private(jk,jj,ji,zcompaph,zsizerat,zrespp,ztortp,zmortp,zfactfe,zfactch,zprcaca,zfracal) 77 86 DO jk = 1, jpkm1 78 87 DO jj = 1, jpj … … 119 128 END DO 120 129 END DO 130 !$OMP END PARALLEL 121 131 ! 122 132 IF(ln_ctl) THEN ! print mean trends (used for debugging) … … 153 163 ! ------------------------------------------------------------ 154 164 165 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zcompadi,zlim2,zlim1,zrespp2,ztortp2,zmortp2,zfactfe,zfactch,zfactsi) 155 166 DO jk = 1, jpkm1 156 167 DO jj = 1, jpj -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r7646 r7698 84 84 ! Initialisation of variables used to compute PAR 85 85 ! ----------------------------------------------- 86 ze1(:,:,:) = 0._wp 87 ze2(:,:,:) = 0._wp 88 ze3(:,:,:) = 0._wp 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 89 98 ! 90 99 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 91 100 ! -------------------------------------------------------- 92 zchl3d(:,:,:) = trb(:,:,:,jpnch) + trb(:,:,:,jpdch) 93 IF( ln_p5z ) zchl3d(:,:,:) = zchl3d(:,:,:) + trb(:,:,:,jppch) 94 ! 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) 95 122 DO jk = 1, jpkm1 96 123 DO jj = 1, jpj … … 110 137 IF( l_trcdm2dc ) THEN ! diurnal cycle 111 138 ! 112 zqsr_corr(:,:) = qsr_mean(:,:) / ( 1. - fr_i(:,:) + rtrn ) 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 113 145 ! 114 146 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 115 147 ! 148 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 116 149 DO jk = 1, nksrp 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) 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 120 157 END DO 121 158 IF( ln_p5z ) THEN 159 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 122 160 DO jk = 1, nksrp 123 epico (:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 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 124 166 END DO 125 167 ENDIF 126 168 ! 127 zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 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 128 175 ! 129 176 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3 ) 130 177 ! 178 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 131 179 DO jk = 1, nksrp 132 etot(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 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 133 185 END DO 134 186 ! 135 187 ELSE 136 188 ! 137 zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 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 138 195 ! 139 196 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 140 197 ! 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) 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 145 207 END DO 146 208 IF( ln_p5z ) THEN 147 DO jk = 1, nksrp 148 epico(:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 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 149 216 END DO 150 217 ENDIF 151 etot_ndcy(:,:,:) = etot(:,:,:) 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 152 226 ENDIF 153 227 … … 157 231 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3, pe0=ze0 ) 158 232 ! 159 etot3(:,:,1) = qsr(:,:) * tmask(:,:,1) 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) 160 241 DO jk = 2, nksrp + 1 161 etot3(:,:,jk) = ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 162 END DO 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 163 249 ! ! ------------------------ 164 250 ENDIF 165 251 ! !* Euphotic depth and level 166 neln (:,:) = 1 ! ------------------------ 167 heup (:,:) = gdepw_n(:,:,2) 168 heup_01(:,:) = gdepw_n(:,:,2) 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 169 262 170 263 DO jk = 2, nksrp 264 !$OMP DO schedule(static) private(jj,ji) 171 265 DO jj = 1, jpj 172 266 DO ji = 1, jpi … … 183 277 END DO 184 278 ! 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 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 193 292 194 293 DO jk = 1, nksrp 294 !$OMP DO schedule(static) private(jj,ji) 195 295 DO jj = 1, jpj 196 296 DO ji = 1, jpi … … 206 306 END DO 207 307 ! 208 emoy(:,:,:) = etot(:,:,:) ! remineralisation 209 zpar(:,:,:) = etot_ndcy(:,:,:) ! diagnostic : PAR with no diurnal cycle 210 ! 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) 211 319 DO jk = 1, nksrp 212 320 DO jj = 1, jpj … … 222 330 END DO 223 331 END DO 332 !$OMP END PARALLEL 224 333 ! 225 334 IF( ln_p5z ) THEN 226 zetmp5 (:,:) = 0.e0 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 227 342 DO jk = 1, nksrp 343 !$OMP DO schedule(static) private(jj,ji,z1_dep) 228 344 DO jj = 1, jpj 229 345 DO ji = 1, jpi … … 236 352 END DO 237 353 END DO 354 !$OMP END PARALLEL 238 355 ENDIF 239 356 IF( lk_iomput ) THEN … … 274 391 275 392 ! Real shortwave 276 IF( ln_varpar ) THEN ; zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 277 ELSE ; zqsr(:,:) = xparsw * pqsr(:,:) 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 278 407 ENDIF 279 408 280 409 ! Light at the euphotic depth 281 IF( PRESENT( pqsr100 ) ) pqsr100(:,:) = 0.01 * 3. * zqsr(:,:) 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 282 418 283 419 IF( PRESENT( pe0 ) ) THEN ! W-level 284 420 ! 285 pe0(:,:,1) = pqsr(:,:) - 3. * zqsr(:,:) ! ( 1 - 3 * alpha ) * q 286 pe1(:,:,1) = zqsr(:,:) 287 pe2(:,:,1) = zqsr(:,:) 288 pe3(:,:,1) = zqsr(:,:) 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 289 431 ! 290 432 DO jk = 2, nksrp + 1 433 !$OMP DO schedule(static) private(jj,ji) 291 434 DO jj = 1, jpj 292 435 DO ji = 1, jpi … … 300 443 ! 301 444 END DO 445 !$OMP END PARALLEL 302 446 ! 303 447 ELSE ! T- level 304 448 ! 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) ) 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 308 458 ! 309 459 DO jk = 2, nksrp 460 !$OMP DO schedule(static) private(jj,ji) 310 461 DO jj = 1, jpj 311 462 DO ji = 1, jpi … … 316 467 END DO 317 468 END DO 469 !$OMP END PARALLEL 318 470 ! 319 471 ENDIF … … 369 521 INTEGER :: ierr 370 522 INTEGER :: ios ! Local integer output status for namelist read 523 INTEGER :: ji, jj, jk ! dummy loop indices 371 524 REAL(wp), DIMENSION(nbtimes) :: zsteps ! times records 372 525 ! … … 424 577 IF(lwp) WRITE(numout,*) ' level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 425 578 ! 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 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 435 614 ! 436 615 IF( nn_timing == 1 ) CALL timing_stop('p4z_opt_init') -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zpoc.F90
r7646 r7698 89 89 ! Initialisation of temprary arrys 90 90 IF( ln_p4z ) THEN 91 zremipoc(:,:,:) = xremip 92 zremigoc(:,:,:) = xremip 91 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 92 DO jk = 1, jpk 93 DO jj = 1, jpj 94 DO ji = 1, jpi 95 zremipoc(ji,jj,jk) = xremip 96 zremigoc(ji,jj,jk) = xremip 97 END DO 98 END DO 99 END DO 93 100 ELSE ! ln_p5z 94 zremipoc(:,:,:) = xremipc 95 zremigoc(:,:,:) = xremipc 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 zremipoc(ji,jj,jk) = xremipc 106 zremigoc(ji,jj,jk) = xremipc 107 END DO 108 END DO 109 END DO 96 110 ENDIF 97 zorem3(:,:,:) = 0. 98 orem (:,:,:) = 0. 99 ztremint(:,:,:) = 0. 100 111 !$OMP PARALLEL 112 !$OMP DO schedule(static) private(jk, jj, ji) 113 DO jk = 1, jpk 114 DO jj = 1, jpj 115 DO ji = 1, jpi 116 zorem3 (ji,jj,jk) = 0. 117 orem (ji,jj,jk) = 0. 118 ztremint(ji,jj,jk) = 0. 119 END DO 120 END DO 121 END DO 122 !OMP END DO NOWAIT 101 123 DO jn = 1, jcpoc 102 alphag(:,:,:,jn) = alphan(jn) 103 alphap(:,:,:,jn) = alphan(jn) 124 !$OMP DO schedule(static) private(jk, jj, ji) 125 DO jk = 1, jpk 126 DO jj = 1, jpj 127 DO ji = 1, jpi 128 alphag(ji,jj,jk,jn) = alphan(jn) 129 alphap(ji,jj,jk,jn) = alphan(jn) 130 END DO 131 END DO 132 END DO 104 133 END DO 134 !$OMP END PARALLEL 105 135 106 136 ! ----------------------------------------------------------------------- … … 110 140 ! ----------------------------------------------------------------------- 111 141 DO jk = 2, jpkm1 142 !$OMP PARALLEL DO schedule(static) private(jj,ji,zdep,alphat,remint,zsizek1,zsizek,zpoc,jn) 112 143 DO jj = 1, jpj 113 144 DO ji = 1, jpi … … 120 151 ! 121 152 IF( gdept_n(ji,jj,jk) > zdep ) THEN 122 alphat = 0.123 remint = 0.124 !125 153 zsizek1 = e3t_n(ji,jj,jk-1) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1) 126 154 zsizek = e3t_n(ji,jj,jk) / 2. / (wsbio4(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk) … … 155 183 & + prodgoc(ji,jj,jk) * alphan(jn) / tgfunc(ji,jj,jk) / reminp(jn) & 156 184 & * ( 1. - exp( -reminp(jn) * zsizek ) ) * rday / rfact2 157 alphat = alphat + alphag(ji,jj,jk,jn) 158 remint = remint + alphag(ji,jj,jk,jn) * reminp(jn) 185 159 186 END DO 160 187 ELSE … … 174 201 & - exp( -reminp(jn) * zsizek1 ) ) * exp( -reminp(jn) * zsizek ) + prodgoc(ji,jj,jk) & 175 202 & / tgfunc(ji,jj,jk) * ( 1. - exp( -reminp(jn) * zsizek ) ) ) * rday / rfact2 / reminp(jn) 176 alphat = alphat + alphag(ji,jj,jk,jn)177 remint = remint + alphag(ji,jj,jk,jn) * reminp(jn)178 203 END DO 179 204 ENDIF 205 ! 206 alphat = SUM(alphag(ji,jj,jk,:)) 207 remint = SUM(alphag(ji,jj,jk,:) * reminp(:)) 180 208 ! 181 209 DO jn = 1, jcpoc … … 193 221 END DO 194 222 195 IF( ln_p4z ) THEN ; zremigoc(:,:,:) = MIN( xremip , ztremint(:,:,:) ) 196 ELSE ; zremigoc(:,:,:) = MIN( xremipc, ztremint(:,:,:) ) 223 IF( ln_p4z ) THEN 224 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 225 DO jk = 1, jpk 226 DO jj = 1, jpj 227 DO ji = 1, jpi 228 zremigoc(ji,jj,jk) = MIN( xremip , ztremint(ji,jj,jk) ) 229 END DO 230 END DO 231 END DO 232 ELSE 233 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 234 DO jk = 1, jpk 235 DO jj = 1, jpj 236 DO ji = 1, jpi 237 zremigoc(ji,jj,jk) = MIN( xremipc, ztremint(ji,jj,jk) ) 238 END DO 239 END DO 240 END DO 197 241 ENDIF 198 242 199 243 IF( ln_p4z ) THEN 244 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zremig,zorem2,zofer2,zofer3) 200 245 DO jk = 1, jpkm1 201 246 DO jj = 1, jpj … … 221 266 END DO 222 267 ELSE 268 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zremig,zopoc2,zofer2,zopon2,zopop2) 223 269 DO jk = 1, jpkm1 224 270 DO jj = 1, jpj … … 266 312 ! ------------------------------------------------------------------- 267 313 ! 268 totprod(:,:) = 0. 269 totthick(:,:) = 0. 270 totcons(:,:) = 0. 314 !$OMP PARALLEL 315 !$OMP DO schedule(static) private(jj,ji) 316 DO jj = 1, jpj 317 DO ji = 1, jpi 318 totprod(ji,jj) = 0. 319 totthick(ji,jj) = 0. 320 totcons(ji,jj) = 0. 321 END DO 322 END DO 271 323 ! intregrated production and consumption of POC in the mixed layer 272 324 ! ---------------------------------------------------------------- 273 325 ! 274 326 DO jk = 1, jpkm1 327 !$OMP DO schedule(static) private(jj,ji,zdep) 275 328 DO jj = 1, jpj 276 329 DO ji = 1, jpi … … 286 339 END DO 287 340 END DO 341 !$OMP END PARALLEL 288 342 289 343 ! Computation of the lability spectrum in the mixed layer. In the mixed 290 344 ! layer, this spectrum is supposed to be uniform. 291 345 ! --------------------------------------------------------------------- 346 !$OMP DO schedule(static) private(jk,jj,ji,zdep,alphat,remint,jn) 292 347 DO jk = 1, jpkm1 293 348 DO jj = 1, jpj … … 295 350 IF (tmask(ji,jj,jk) == 1.) THEN 296 351 zdep = hmld(ji,jj) 297 alphat = 0.0298 remint = 0.0299 352 IF( gdept_n(ji,jj,jk) <= zdep ) THEN 300 353 DO jn = 1, jcpoc … … 303 356 alphap(ji,jj,jk,jn) = totprod(ji,jj) * alphan(jn) / ( reminp(jn) & 304 357 & * totthick(ji,jj) + totcons(ji,jj) + wsbio + rtrn ) 305 alphat = alphat + alphap(ji,jj,jk,jn)306 358 END DO 359 alphat = SUM(alphap(ji,jj,jk,:)) 307 360 DO jn = 1, jcpoc 308 361 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk,jn) / ( alphat + rtrn) 309 remint = remint + alphap(ji,jj,jk,jn) * reminp(jn)310 362 END DO 363 remint = SUM(alphap(ji,jj,jk,:) * reminp(:)) 311 364 ! Mean remineralization rate in the mixed layer 312 365 ztremint(ji,jj,jk) = MAX( 0., remint ) … … 317 370 END DO 318 371 ! 319 IF( ln_p4z ) THEN ; zremipoc(:,:,:) = MIN( xremip , ztremint(:,:,:) ) 320 ELSE ; zremipoc(:,:,:) = MIN( xremipc, ztremint(:,:,:) ) 372 IF( ln_p4z ) THEN 373 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 374 DO jk = 1, jpk 375 DO jj = 1, jpj 376 DO ji = 1, jpi 377 zremipoc(ji,jj,jk) = MIN( xremip , ztremint(ji,jj,jk) ) 378 END DO 379 END DO 380 END DO 381 ELSE 382 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 383 DO jk = 1, jpk 384 DO jj = 1, jpj 385 DO ji = 1, jpi 386 zremipoc(ji,jj,jk) = MIN( xremipc , ztremint(ji,jj,jk) ) 387 END DO 388 END DO 389 END DO 321 390 ENDIF 322 391 … … 330 399 ! 331 400 DO jk = 2, jpkm1 401 !$OMP PARALLEL DO schedule(static) private(jj,ji,zdep,alphat,remint,zsizek1,zsizek,zpoc,jn) 332 402 DO jj = 1, jpj 333 403 DO ji = 1, jpi … … 335 405 zdep = hmld(ji,jj) 336 406 IF( gdept_n(ji,jj,jk) > zdep ) THEN 337 alphat = 0.338 remint = 0.339 407 ! 340 408 ! the scale factors are corrected with temperature … … 362 430 & * zsizek ) ) 363 431 alphap(ji,jj,jk,jn) = MAX( 0., alphap(ji,jj,jk,jn) ) 364 alphat = alphat + alphap(ji,jj,jk,jn)365 432 END DO 366 433 ELSE … … 385 452 & - exp( -reminp(jn) * zsizek ) ) 386 453 alphap(ji,jj,jk,jn) = max(0., alphap(ji,jj,jk,jn) ) 387 alphat = alphat + alphap(ji,jj,jk,jn)388 454 END DO 389 455 ENDIF 456 alphat = SUM(alphap(ji,jj,jk,:)) 390 457 ! Normalization of the lability spectrum so that the 391 458 ! integral is equal to 1 392 459 DO jn = 1, jcpoc 393 460 alphap(ji,jj,jk,jn) = alphap(ji,jj,jk,jn) / ( alphat + rtrn) 394 remint = remint + alphap(ji,jj,jk,jn) * reminp(jn)395 461 END DO 462 remint = SUM(alphap(ji,jj,jk,:) * reminp(:)) 396 463 ! Mean remineralization rate in the water column 397 464 ztremint(ji,jj,jk) = MAX( 0., remint ) … … 402 469 END DO 403 470 404 IF( ln_p4z ) THEN ; zremipoc(:,:,:) = MIN( xremip , ztremint(:,:,:) ) 405 ELSE ; zremipoc(:,:,:) = MIN( xremipc, ztremint(:,:,:) ) 471 IF( ln_p4z ) THEN 472 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 473 DO jk = 1, jpk 474 DO jj = 1, jpj 475 DO ji = 1, jpi 476 zremipoc(ji,jj,jk) = MIN( xremip , ztremint(ji,jj,jk) ) 477 END DO 478 END DO 479 END DO 480 ELSE 481 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 482 DO jk = 1, jpk 483 DO jj = 1, jpj 484 DO ji = 1, jpi 485 zremipoc(ji,jj,jk) = MIN( xremipc , ztremint(ji,jj,jk) ) 486 END DO 487 END DO 488 END DO 406 489 ENDIF 407 490 408 491 IF( ln_p4z ) THEN 492 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zremip,zorem,zofer) 409 493 DO jk = 1, jpkm1 410 494 DO jj = 1, jpj … … 427 511 END DO 428 512 ELSE 513 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zremip,zopoc,zopon,zopop,zofer) 429 514 DO jk = 1, jpkm1 430 515 DO jj = 1, jpj … … 487 572 !! 488 573 !!---------------------------------------------------------------------- 489 INTEGER :: jn 574 INTEGER :: jn, jk, jj, ji 490 575 REAL(wp) :: remindelta, reminup, remindown 491 576 INTEGER :: ifault … … 557 642 558 643 DO jn = 1, jcpoc 559 alphap(:,:,:,jn) = alphan(jn) 644 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 645 DO jk = 1, jpk 646 DO jj = 1, jpj 647 DO ji = 1, jpi 648 alphap(ji,jj,jk,jn) = alphan(jn) 649 END DO 650 END DO 651 END DO 560 652 END DO 561 653 -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r7646 r7698 93 93 CALL wrk_alloc( jpi, jpj, jpk, zprorcan, zprorcad, zprofed, zprofen, zpronewn, zpronewd ) 94 94 ! 95 zprorcan(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp ; zprofed (:,:,:) = 0._wp96 zprofen (:,:,:) = 0._wp ; zysopt (:,:,:) = 0._wp97 zpronewn(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp ; zprdia (:,:,:) = 0._wp98 zprbio (:,:,:) = 0._wp ; zprdch (:,:,:) = 0._wp ; zprnch (:,:,:) = 0._wp99 zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp100 101 ! Computation of the optimal production102 prmax(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:)103 104 95 ! compute the day length depending on latitude and the day 105 96 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 106 97 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) 107 98 99 !$OMP PARALLEL 100 !$OMP DO schedule(static) private(jk,jj,ji) 101 DO jk = 1, jpk 102 DO jj = 1, jpj 103 DO ji = 1, jpi 104 zprorcan(ji,jj,jk) = 0._wp 105 zprorcad(ji,jj,jk) = 0._wp 106 zprofed (ji,jj,jk) = 0._wp 107 zprofen (ji,jj,jk) = 0._wp 108 zysopt (ji,jj,jk) = 0._wp 109 zpronewn(ji,jj,jk) = 0._wp 110 zpronewd(ji,jj,jk) = 0._wp 111 zprdia (ji,jj,jk) = 0._wp 112 zprbio (ji,jj,jk) = 0._wp 113 zprdch (ji,jj,jk) = 0._wp 114 zprnch (ji,jj,jk) = 0._wp 115 zmxl_fac(ji,jj,jk) = 0._wp 116 zmxl_chl(ji,jj,jk) = 0._wp 117 118 ! Computation of the optimal production 119 prmax(ji,jj,jk) = 0.8_wp * r1_rday * tgfunc(ji,jj,jk) 120 END DO 121 END DO 122 END DO 123 108 124 ! day length in hours 109 zstrn(:,:) = 0. 125 !$OMP DO schedule(static) private(jj,ji) 126 DO jj = 1, jpj 127 DO ji = 1, jpi 128 zstrn(ji,jj) = 0. 129 END DO 130 END DO 131 !$OMP DO schedule(static) private(jj,ji,zargu) 110 132 DO jj = 1, jpj 111 133 DO ji = 1, jpi … … 117 139 118 140 ! Impact of the day duration and light intermittency on phytoplankton growth 141 !$OMP DO schedule(static) private(jk,jj,ji,zval) 119 142 DO jk = 1, jpkm1 120 143 DO jj = 1 ,jpj … … 132 155 END DO 133 156 134 zprbio(:,:,:) = prmax(:,:,:) * zmxl_fac(:,:,:) 135 zprdia(:,:,:) = zprbio(:,:,:) 157 !$OMP DO schedule(static) private(jk,jj,ji) 158 DO jk = 1, jpk 159 DO jj = 1 ,jpj 160 DO ji = 1, jpi 161 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zmxl_fac(ji,jj,jk) 162 zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 163 END DO 164 END DO 165 END DO 136 166 137 167 ! Maximum light intensity 138 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 168 !$OMP DO schedule(static) private(jj,ji) 169 DO jj = 1 ,jpj 170 DO ji = 1, jpi 171 IF( zstrn(ji,jj) < 1.e0 ) zstrn(ji,jj) = 24. 172 END DO 173 END DO 139 174 140 175 ! Computation of the P-I slope for nanos and diatoms 176 !$OMP DO schedule(static) private(jk,jj,ji,ztn,zadap,zconctemp,zconctemp2) 141 177 DO jk = 1, jpkm1 142 178 DO jj = 1, jpj … … 159 195 160 196 IF( ln_newprod ) THEN 197 !$OMP DO schedule(static) private(jk,jj,ji,zpislopen,zpisloped) 161 198 DO jk = 1, jpkm1 162 199 DO jj = 1, jpj … … 182 219 END DO 183 220 ELSE 221 !$OMP DO schedule(static) private(jk,jj,ji,zpislopen,zpisloped) 184 222 DO jk = 1, jpkm1 185 223 DO jj = 1, jpj … … 206 244 ! Computation of a proxy of the N/C ratio 207 245 ! --------------------------------------- 246 !$OMP DO schedule(static) private(jk,jj,ji,zval) 208 247 DO jk = 1, jpkm1 209 248 DO jj = 1, jpj … … 218 257 END DO 219 258 END DO 220 221 259 !$OMP END DO NOWAIT 260 261 262 !$OMP DO schedule(static) private(jk,jj,ji,zlim,zsilim,zsilfac,zsiborn,zsilfac2) 222 263 DO jk = 1, jpkm1 223 264 DO jj = 1, jpj … … 244 285 END DO 245 286 END DO 287 !$OMP END DO NOWAIT 246 288 247 289 ! Mixed-layer effect on production 248 290 ! Sea-ice effect on production 249 291 292 !$OMP DO schedule(static) private(jk,jj,ji) 250 293 DO jk = 1, jpkm1 251 294 DO jj = 1, jpj … … 260 303 261 304 ! Computation of the various production terms 305 !$OMP DO schedule(static) private(jk,jj,ji,zratio,zmax) 262 306 DO jk = 1, jpkm1 263 307 DO jj = 1, jpj … … 290 334 291 335 ! Computation of the chlorophyll production terms 336 !$OMP DO schedule(static) private(jk,jj,ji,znanotot,zprod,zprochln,chlcnm_n,zprochld,zdiattot) 292 337 DO jk = 1, jpkm1 293 338 DO jj = 1, jpj … … 317 362 318 363 ! Update the arrays TRA which contain the biological sources and sinks 364 !$OMP DO schedule(static) private(jk,jj,ji,zproreg,zproreg2,zdocprod,zfeup) 319 365 DO jk = 1, jpkm1 320 366 DO jj = 1, jpj … … 348 394 ! 349 395 IF( ln_ligand ) THEN 396 !$OMP DO schedule(static) private(jk,jj,ji,zdocprod,zfeup) 350 397 DO jk = 1, jpkm1 351 398 DO jj = 1, jpj … … 360 407 END DO 361 408 ENDIF 409 !$OMP END PARALLEL 362 410 363 411 … … 373 421 ! 374 422 IF( iom_use( "PPPHYN" ) .OR. iom_use( "PPPHYD" ) ) THEN 375 zw3d(:,:,:) = zprorcan(:,:,:) * zfact * tmask(:,:,:) ! primary production by nanophyto 376 CALL iom_put( "PPPHYN" , zw3d ) 423 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 424 DO jk = 1, jpk 425 DO jj = 1, jpj 426 DO ji = 1, jpi 427 zw3d(ji,jj,jk) = zprorcan (ji,jj,jk) * zfact * tmask(ji,jj,jk) ! primary production by nanophyto 428 END DO 429 END DO 430 END DO 431 CALL iom_put( "PPPHYN" , zw3d ) 432 ! 433 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 434 DO jk = 1, jpk 435 DO jj = 1, jpj 436 DO ji = 1, jpi 437 zw3d(ji,jj,jk) = zprorcad (ji,jj,jk) * zfact * tmask(ji,jj,jk) ! primary production by nanophyto 438 END DO 439 END DO 440 END DO 441 CALL iom_put( "PPPHYD" , zw3d ) 442 ENDIF 443 IF( iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) ) THEN 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 zw3d(ji,jj,jk) = zpronewn (ji,jj,jk) * zfact * tmask(ji,jj,jk) ! new primary production by nanophyto 449 END DO 450 END DO 451 END DO 452 CALL iom_put( "PPNEWN" , zw3d ) 377 453 ! 378 zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) ! primary production by diatomes 379 CALL iom_put( "PPPHYD" , zw3d )380 ENDIF381 IF( iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) ) THEN382 zw3d(:,:,:) = zpronewn(:,:,:) * zfact * tmask(:,:,:) ! new primary production by nanophyto383 CALL iom_put( "PPNEWN" , zw3d )384 !385 zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:) ! new primary production by diatomes386 454 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 455 DO jk = 1, jpk 456 DO jj = 1, jpj 457 DO ji = 1, jpi 458 zw3d(ji,jj,jk) = zpronewd (ji,jj,jk) * zfact * tmask(ji,jj,jk) ! new primary production by nanophyto 459 END DO 460 END DO 461 END DO 462 CALL iom_put( "PPNEWD" , zw3d ) 387 463 ENDIF 388 464 IF( iom_use( "PBSi" ) ) THEN 389 zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ! biogenic silica production 390 CALL iom_put( "PBSi" , zw3d ) 465 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 466 DO jk = 1, jpk 467 DO jj = 1, jpj 468 DO ji = 1, jpi 469 zw3d(ji,jj,jk) = zprorcad(ji,jj,jk) * zfact * tmask(ji,jj,jk) * zysopt(ji,jj,jk) ! biogenic silica production 470 END DO 471 END DO 472 END DO 473 CALL iom_put( "PBSi" , zw3d ) 391 474 ENDIF 392 475 IF( iom_use( "PFeN" ) .OR. iom_use( "PFeD" ) ) THEN 393 zw3d(:,:,:) = zprofen(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron production by nanophyto 394 CALL iom_put( "PFeN" , zw3d ) 395 ! 396 zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron production by diatomes 397 CALL iom_put( "PFeD" , zw3d ) 476 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 477 DO jk = 1, jpk 478 DO jj = 1, jpj 479 DO ji = 1, jpi 480 zw3d(ji,jj,jk) = zprofen(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! biogenic iron production by nanophyto 481 END DO 482 END DO 483 END DO 484 CALL iom_put( "PFeN" , zw3d ) 485 ! 486 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 487 DO jk = 1, jpk 488 DO jj = 1, jpj 489 DO ji = 1, jpi 490 zw3d(ji,jj,jk) = zprofed(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! biogenic iron production by nanophyto 491 END DO 492 END DO 493 END DO 494 CALL iom_put( "PFeD" , zw3d ) 398 495 ENDIF 399 496 IF( iom_use( "Mumax" ) ) THEN 400 zw3d(:,:,:) = prmax(:,:,:) * tmask(:,:,:) ! Maximum growth rate 401 CALL iom_put( "Mumax" , zw3d ) 497 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 498 DO jk = 1, jpk 499 DO jj = 1, jpj 500 DO ji = 1, jpi 501 zw3d(ji,jj,jk) = prmax(ji,jj,jk) * tmask(ji,jj,jk) ! Maximum growth rate 502 END DO 503 END DO 504 END DO 505 CALL iom_put( "Mumax" , zw3d ) 402 506 ENDIF 403 507 IF( iom_use( "MuN" ) .OR. iom_use( "MuD" ) ) THEN 404 zw3d(:,:,:) = zprbio(:,:,:) * xlimphy(:,:,:) * tmask(:,:,:) ! Realized growth rate for nanophyto 405 CALL iom_put( "MuN" , zw3d ) 406 ! 407 zw3d(:,:,:) = zprdia(:,:,:) * xlimdia(:,:,:) * tmask(:,:,:) ! Realized growth rate for diatoms 408 CALL iom_put( "MuD" , zw3d ) 508 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 509 DO jk = 1, jpk 510 DO jj = 1, jpj 511 DO ji = 1, jpi 512 zw3d(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tmask(ji,jj,jk) ! Realized growth rate for nanophyto 513 END DO 514 END DO 515 END DO 516 CALL iom_put( "MuN" , zw3d ) 517 ! 518 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 519 DO jk = 1, jpk 520 DO jj = 1, jpj 521 DO ji = 1, jpi 522 zw3d(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tmask(ji,jj,jk) ! Realized growth rate for diatoms 523 END DO 524 END DO 525 END DO 526 CALL iom_put( "MuD" , zw3d ) 409 527 ENDIF 410 528 IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) ) THEN 411 zw3d(:,:,:) = zprbio (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 412 CALL iom_put( "LNlight" , zw3d ) 413 ! 414 zw3d(:,:,:) = zprdia (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 415 CALL iom_put( "LDlight" , zw3d ) 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 zw3d(ji,jj,jk) = zprbio (ji,jj,jk) / (prmax(ji,jj,jk) + rtrn) * tmask(ji,jj,jk) ! light limitation term 534 END DO 535 END DO 536 END DO 537 CALL iom_put( "LNlight" , zw3d ) 538 ! 539 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 540 DO jk = 1, jpk 541 DO jj = 1, jpj 542 DO ji = 1, jpi 543 zw3d(ji,jj,jk) = zprdia (ji,jj,jk) / (prmax(ji,jj,jk) + rtrn) * tmask(ji,jj,jk) ! light limitation term 544 END DO 545 END DO 546 END DO 547 CALL iom_put( "LDlight" , zw3d ) 416 548 ENDIF 417 549 IF( iom_use( "TPP" ) ) THEN 418 zw3d(:,:,:) = ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:) ! total primary production 419 CALL iom_put( "TPP" , zw3d ) 550 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 551 DO jk = 1, jpk 552 DO jj = 1, jpj 553 DO ji = 1, jpi 554 zw3d(ji,jj,jk) = ( zprorcan(ji,jj,jk) + zprorcad(ji,jj,jk) ) * zfact * tmask(ji,jj,jk) ! total primary production 555 END DO 556 END DO 557 END DO 558 CALL iom_put( "TPP" , zw3d ) 420 559 ENDIF 421 560 IF( iom_use( "TPNEW" ) ) THEN 422 zw3d(:,:,:) = ( zpronewn(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:) ! total new production 423 CALL iom_put( "TPNEW" , zw3d ) 561 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 562 DO jk = 1, jpk 563 DO jj = 1, jpj 564 DO ji = 1, jpi 565 zw3d(ji,jj,jk) = ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) * zfact * tmask(ji,jj,jk) ! total new production 566 END DO 567 END DO 568 END DO 569 CALL iom_put( "TPNEW" , zw3d ) 424 570 ENDIF 425 571 IF( iom_use( "TPBFE" ) ) THEN 426 zw3d(:,:,:) = ( zprofen(:,:,:) + zprofed(:,:,:) ) * zfact * tmask(:,:,:) ! total biogenic iron production 427 CALL iom_put( "TPBFE" , zw3d ) 572 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 573 DO jk = 1, jpk 574 DO jj = 1, jpj 575 DO ji = 1, jpi 576 zw3d(ji,jj,jk) = ( zprofen(ji,jj,jk) + zprofed(ji,jj,jk) ) * zfact * tmask(ji,jj,jk) ! total biogenic iron production 577 END DO 578 END DO 579 END DO 580 CALL iom_put( "TPBFE" , zw3d ) 428 581 ENDIF 429 582 IF( iom_use( "INTPPPHYN" ) .OR. iom_use( "INTPPPHYD" ) ) THEN 430 zw2d(:,:) = 0. 583 !$OMP PARALLEL 584 !$OMP DO schedule(static) private(jj,ji) 585 DO jj = 1, jpj 586 DO ji =1 ,jpi 587 zw2d(ji,jj) = 0. 588 END DO 589 END DO 431 590 DO jk = 1, jpkm1 432 zw2d(:,:) = zw2d(:,:) + zprorcan(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated primary produc. by nano 591 !$OMP DO schedule(static) private(jj,ji) 592 DO jj = 1, jpj 593 DO ji =1 ,jpi 594 zw2d(ji,jj) = zw2d(ji,jj) + zprorcan (ji,jj,jk) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert. integrated primary produc. by nano 595 END DO 596 END DO 433 597 ENDDO 598 !$OMP END PARALLEL 434 599 CALL iom_put( "INTPPPHYN" , zw2d ) 435 600 ! 436 zw2d(:,:) = 0. 601 !$OMP PARALLEL 602 !$OMP DO schedule(static) private(jj,ji) 603 DO jj = 1, jpj 604 DO ji =1 ,jpi 605 zw2d(ji,jj) = 0. 606 END DO 607 END DO 437 608 DO jk = 1, jpkm1 438 zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated primary produc. by diatom 609 !$OMP DO schedule(static) private(jj,ji) 610 DO jj = 1, jpj 611 DO ji =1 ,jpi 612 zw2d(ji,jj) = zw2d(ji,jj) + zprorcad(ji,jj,jk) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert. integrated primary produc. by diatom 613 END DO 614 END DO 439 615 ENDDO 616 !$OMP END PARALLEL 440 617 CALL iom_put( "INTPPPHYD" , zw2d ) 441 618 ENDIF 442 619 IF( iom_use( "INTPP" ) ) THEN 443 zw2d(:,:) = 0. 620 !$OMP PARALLEL 621 !$OMP DO schedule(static) private(jj,ji) 622 DO jj = 1, jpj 623 DO ji =1 ,jpi 624 zw2d(ji,jj) = 0. 625 END DO 626 END DO 444 627 DO jk = 1, jpkm1 445 zw2d(:,:) = zw2d(:,:) + ( zprorcan(:,:,jk) + zprorcad(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated pp 628 !$OMP DO schedule(static) private(jj,ji) 629 DO jj = 1, jpj 630 DO ji =1 ,jpi 631 zw2d(ji,jj) = zw2d(ji,jj) + ( zprorcan(ji,jj,jk) + zprorcad(ji,jj,jk) ) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert. integrated pp 632 END DO 633 END DO 446 634 ENDDO 635 !$OMP END PARALLEL 447 636 CALL iom_put( "INTPP" , zw2d ) 448 637 ENDIF 449 638 IF( iom_use( "INTPNEW" ) ) THEN 450 zw2d(:,:) = 0. 639 !$OMP PARALLEL 640 !$OMP DO schedule(static) private(jj,ji) 641 DO jj = 1, jpj 642 DO ji =1 ,jpi 643 zw2d(ji,jj) = 0. 644 END DO 645 END DO 451 646 DO jk = 1, jpkm1 452 zw2d(:,:) = zw2d(:,:) + ( zpronewn(:,:,jk) + zpronewd(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated new prod 647 !$OMP DO schedule(static) private(jj,ji) 648 DO jj = 1, jpj 649 DO ji =1 ,jpi 650 zw2d(ji,jj) = zw2d(ji,jj) + ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert. integrated new prod 651 END DO 652 END DO 453 653 ENDDO 654 !$OMP END PARALLEL 454 655 CALL iom_put( "INTPNEW" , zw2d ) 455 656 ENDIF 456 657 IF( iom_use( "INTPBFE" ) ) THEN ! total biogenic iron production ( vertically integrated ) 457 zw2d(:,:) = 0. 658 !$OMP PARALLEL 659 !$OMP DO schedule(static) private(jj,ji) 660 DO jj = 1, jpj 661 DO ji =1 ,jpi 662 zw2d(ji,jj) = 0. 663 END DO 664 END DO 458 665 DO jk = 1, jpkm1 459 zw2d(:,:) = zw2d(:,:) + ( zprofen(:,:,jk) + zprofed(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert integr. bfe prod 666 !$OMP DO schedule(static) private(jj,ji) 667 DO jj = 1, jpj 668 DO ji =1 ,jpi 669 zw2d(ji,jj) = zw2d(ji,jj) + ( zprofen(ji,jj,jk) + zprofed(ji,jj,jk) ) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert integr. bfe prod 670 END DO 671 END DO 460 672 ENDDO 673 !$OMP END PARALLEL 461 674 CALL iom_put( "INTPBFE" , zw2d ) 462 675 ENDIF 463 676 IF( iom_use( "INTPBSI" ) ) THEN ! total biogenic silica production ( vertically integrated ) 464 zw2d(:,:) = 0. 677 !$OMP PARALLEL 678 !$OMP DO schedule(static) private(jj,ji) 679 DO jj = 1, jpj 680 DO ji =1 ,jpi 681 zw2d(ji,jj) = 0. 682 END DO 683 END DO 465 684 DO jk = 1, jpkm1 466 zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * zysopt(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert integr. bsi prod 685 !$OMP DO schedule(static) private(jj,ji) 686 DO jj = 1, jpj 687 DO ji =1 ,jpi 688 zw2d(ji,jj) = zw2d(ji,jj) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert integr. bsi prod 689 END DO 690 END DO 467 691 ENDDO 692 !$OMP END PARALLEL 468 693 CALL iom_put( "INTPBSI" , zw2d ) 469 694 ENDIF -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r7646 r7698 78 78 79 79 ! Initialisation of temprary arrys 80 zdepprod(:,:,:) = 1._wp 81 ztempbac(:,:) = 0._wp 82 zfacsib(:,:,:) = xsilab / ( 1.0 - xsilab ) 83 zfacsi(:,:,:) = xsilab 80 !$OMP PARALLEL 81 !$OMP DO schedule(static) private(jk,jj,ji) 82 DO jk = 1, jpk 83 DO jj = 1, jpj 84 DO ji = 1, jpi 85 zdepprod(ji,jj,jk) = 1._wp 86 zfacsib(ji,jj,jk) = xsilab / ( 1.0 - xsilab ) 87 zfacsi(ji,jj,jk) = xsilab 88 END DO 89 END DO 90 END DO 91 !$OMP DO schedule(static) private(jj,ji) 92 DO jj = 1, jpj 93 DO ji = 1, jpi 94 ztempbac(ji,jj) = 0._wp 95 END DO 96 END DO 84 97 85 98 ! Computation of the mean phytoplankton concentration as … … 89 102 ! ------------------------------------------------------- 90 103 DO jk = 1, jpkm1 104 !$OMP DO schedule(static) private(jj,ji,zdep,zdepmin) 91 105 DO jj = 1, jpj 92 106 DO ji = 1, jpi … … 105 119 106 120 IF( ln_p4z ) THEN 121 !$OMP DO schedule(static) private(jk,jj,ji,zremik,zolimit) 107 122 DO jk = 1, jpkm1 108 123 DO jj = 1, jpj … … 136 151 END DO 137 152 ELSE 153 !$OMP DO schedule(static) private(jk,jj,ji,zremik,zremikc,zremikn,zremikp,zolimit,zolimic,zolimin,zolimip,zdenitrn,zdenitrp) 138 154 DO jk = 1, jpkm1 139 155 DO jj = 1, jpj … … 181 197 182 198 199 !$OMP DO schedule(static) private(jk,jj,ji,zonitr,zdenitnh4) 183 200 DO jk = 1, jpkm1 184 201 DO jj = 1, jpj … … 199 216 END DO 200 217 END DO 201 202 IF(ln_ctl) THEN ! print mean trends (used for debugging) 203 WRITE(charout, FMT="('rem1')") 204 CALL prt_ctl_trc_info(charout) 205 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 206 ENDIF 207 218 !$OMP END PARALLEL 219 220 IF(ln_ctl) THEN ! print mean trends (used for debugging) 221 WRITE(charout, FMT="('rem1')") 222 CALL prt_ctl_trc_info(charout) 223 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 224 ENDIF 225 226 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zbactfer) 208 227 DO jk = 1, jpkm1 209 228 DO jj = 1, jpj … … 224 243 END DO 225 244 226 227 228 229 230 245 IF(ln_ctl) THEN ! print mean trends (used for debugging) 246 WRITE(charout, FMT="('rem2')") 247 CALL prt_ctl_trc_info(charout) 248 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 249 ENDIF 231 250 232 251 ! Initialization of the array which contains the labile fraction … … 235 254 236 255 DO jk = 1, jpkm1 256 !$OMP PARALLEL DO schedule(static) private(jj,ji,zdep,zsatur,zsatur2,znusil,zsiremin,zosil) 237 257 DO jj = 1, jpj 238 258 DO ji = 1, jpi … … 264 284 CALL prt_ctl_trc_info(charout) 265 285 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 266 286 ENDIF 267 287 268 288 IF( knt == nrdttrc ) THEN 269 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 270 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s 271 ! 272 IF( iom_use( "REMIN" ) ) THEN 273 zw3d(:,:,:) = zolimi(:,:,:) * tmask(:,:,:) * zfact ! Remineralisation rate 274 CALL iom_put( "REMIN" , zw3d ) 275 ENDIF 276 IF( iom_use( "DENIT" ) ) THEN 277 zw3d(:,:,:) = denitr(:,:,:) * rdenit * rno3 * tmask(:,:,:) * zfact ! Denitrification 278 CALL iom_put( "DENIT" , zw3d ) 279 ENDIF 280 ! 281 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 282 ENDIF 289 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 290 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s 291 ! 292 IF( iom_use( "REMIN" ) ) THEN 293 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 294 DO jk = 1, jpk 295 DO jj = 1, jpj 296 DO ji = 1, jpi 297 zw3d(ji,jj,jk) = zolimi(ji,jj,jk) * tmask(ji,jj,jk) * zfact ! Remineralisation rate 298 END DO 299 END DO 300 END DO 301 CALL iom_put( "REMIN" , zw3d ) 302 ENDIF 303 IF( iom_use( "DENIT" ) ) THEN 304 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 305 DO jk = 1, jpk 306 DO jj = 1, jpj 307 DO ji = 1, jpi 308 zw3d(ji,jj,jk) = denitr(ji,jj,jk) * rdenit * rno3 * tmask(ji,jj,jk) * zfact ! Denitrification 309 END DO 310 END DO 311 END DO 312 CALL iom_put( "DENIT" , zw3d ) 313 ENDIF 314 ! 315 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 316 ENDIF 283 317 ! 284 318 CALL wrk_dealloc( jpi, jpj, ztempbac ) … … 305 339 & xremikc, xremikn, xremikp 306 340 INTEGER :: ios ! Local integer output status for namelist read 341 INTEGER :: ji, jj, jk 307 342 308 343 REWIND( numnatp_ref ) ! Namelist nampisrem in reference namelist : Pisces remineralization … … 334 369 ENDIF 335 370 ! 336 denitr (:,:,:) = 0._wp 371 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 372 DO jk = 1, jpk 373 DO jj = 1, jpj 374 DO ji = 1, jpi 375 denitr (ji,jj,jk) = 0._wp 376 END DO 377 END DO 378 END DO 337 379 ! 338 380 END SUBROUTINE p4z_rem_init -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90
r7646 r7698 116 116 CALL fld_read( kt, 1, sf_dust ) 117 117 IF( nn_ice_tr == -1 .AND. .NOT. ln_ironice ) THEN 118 dust(:,:) = sf_dust(1)%fnow(:,:,1) 118 !$OMP PARALLEL DO schedule(static) private(jj, ji) 119 DO jj = 1, jpj 120 DO ji = 1, jpi 121 dust(ji,jj) = sf_dust(1)%fnow(ji,jj,1) 122 END DO 123 END DO 119 124 ELSE 120 dust(:,:) = sf_dust(1)%fnow(:,:,1) * ( 1.0 - fr_i(:,:) ) 125 !$OMP PARALLEL DO schedule(static) private(jj, ji) 126 DO jj = 1, jpj 127 DO ji = 1, jpi 128 dust(ji,jj) = sf_dust(1)%fnow(ji,jj,1) * ( 1.0 - fr_i(ji,jj) ) 129 END DO 130 END DO 121 131 ENDIF 122 132 ENDIF … … 126 136 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_solub > 1 ) ) THEN 127 137 CALL fld_read( kt, 1, sf_solub ) 128 solub(:,:) = sf_solub(1)%fnow(:,:,1) 138 !$OMP PARALLEL DO schedule(static) private(jj, ji) 139 DO jj = 1, jpj 140 DO ji = 1, jpi 141 solub(ji,jj) = sf_solub(1)%fnow(ji,jj,1) 142 END DO 143 END DO 129 144 ENDIF 130 145 ENDIF … … 137 152 CALL fld_read( kt, 1, sf_river ) 138 153 IF( ln_p4z ) THEN 154 !$OMP PARALLEL DO schedule(static) private(jj, ji, zcoef) 139 155 DO jj = 1, jpj 140 156 DO ji = 1, jpi … … 153 169 END DO 154 170 ELSE ! ln_p5z 171 !$OMP PARALLEL DO schedule(static) private(jj, ji, zcoef) 155 172 DO jj = 1, jpj 156 173 DO ji = 1, jpi … … 179 196 IF( ln_ndepo ) THEN 180 197 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_ndep > 1 ) ) THEN 181 zcoef = rno3 * 14E6 * ryyss 182 CALL fld_read( kt, 1, sf_ndepo ) 183 nitdep(:,:) = sf_ndepo(1)%fnow(:,:,1) / zcoef / e3t_n(:,:,1) 198 zcoef = rno3 * 14E6 * ryyss 199 CALL fld_read( kt, 1, sf_ndepo ) 200 !$OMP PARALLEL DO schedule(static) private(jj, ji) 201 DO jj = 1, jpj 202 DO ji = 1, jpi 203 nitdep(ji,jj) = sf_ndepo(1)%fnow(ji,jj,1) / zcoef / e3t_n(ji,jj,1) 204 END DO 205 END DO 184 206 ENDIF 185 207 IF( .NOT.ln_linssh ) THEN 186 zcoef = rno3 * 14E6 * ryyss 187 nitdep(:,:) = sf_ndepo(1)%fnow(:,:,1) / zcoef / e3t_n(:,:,1) 208 zcoef = rno3 * 14E6 * ryyss 209 !$OMP PARALLEL DO schedule(static) private(jj, ji) 210 DO jj = 1, jpj 211 DO ji = 1, jpi 212 nitdep(ji,jj) = sf_ndepo(1)%fnow(ji,jj,1) / zcoef / e3t_n(ji,jj,1) 213 END DO 214 END DO 188 215 ENDIF 189 216 ENDIF … … 292 319 ! online configuration : computed in sbcrnf 293 320 IF( l_offline ) THEN 294 nk_rnf(:,:) = 1 295 h_rnf (:,:) = gdept_n(:,:,1) 321 !$OMP PARALLEL DO schedule(static) private(jj, ji) 322 DO jj = 1, jpj 323 DO ji = 1, jpi 324 nk_rnf(ji,jj) = 1 325 h_rnf (ji,jj) = gdept_n(ji,jj,1) 326 END DO 327 END DO 296 328 ENDIF 297 329 … … 466 498 IF (lwp) WRITE(numout,*) ' Level corresponding to 50m depth ', ik50,' ', gdept_1d(ik50+1) 467 499 IF (lwp) WRITE(numout,*) 500 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zmaskt) 468 501 DO jk = 1, ik50 469 502 DO jj = 2, jpjm1 … … 480 513 CALL lbc_lnk( zcmask , 'T', 1. ) ! lateral boundary conditions on cmask (sign unchanged) 481 514 ! 515 !$OMP PARALLEL 516 !$OMP DO schedule(static) private(jk, jj, ji, zexpide, zdenitide) 482 517 DO jk = 1, jpk 483 518 DO jj = 1, jpj … … 489 524 END DO 490 525 END DO 526 !$OMP END DO NOWAIT 491 527 ! Coastal supply of iron 492 528 ! ------------------------- 493 ironsed(:,:,jpk) = 0._wp 529 !$OMP DO schedule(static) private(jj,ji) 530 DO jj = 1, jpj 531 DO ji = 1, jpi 532 ironsed(ji,jj,jpk) = 0._wp 533 END DO 534 END DO 535 !$OMP DO schedule(static) private(jk,jj,ji) 494 536 DO jk = 1, jpkm1 495 ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( e3t_0(:,:,jk) * rday ) 496 END DO 537 DO jj = 1, jpj 538 DO ji = 1, jpi 539 ironsed(ji,jj,jk) = sedfeinput * zcmask(ji,jj,jk) / ( e3t_0(ji,jj,jk) * rday ) 540 END DO 541 END DO 542 END DO 543 !$OMP END PARALLEL 497 544 DEALLOCATE( zcmask) 498 545 ENDIF -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r7646 r7698 32 32 !!---------------------------------------------------------------------- 33 33 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 34 !! $Id$ 34 !! $Id$ 35 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 36 !!---------------------------------------------------------------------- … … 84 84 85 85 86 zdenit2d(:,:) = 0.e0 87 zbureff (:,:) = 0.e0 88 zwork1 (:,:) = 0.e0 89 zwork2 (:,:) = 0.e0 90 zwork3 (:,:) = 0.e0 91 zsedsi (:,:) = 0.e0 92 zsedcal (:,:) = 0.e0 93 zsedc (:,:) = 0.e0 94 86 !$OMP PARALLEL DO schedule(static) private(jj,ji) 87 DO jj = 1, jpj 88 DO ji = 1, jpi 89 zdenit2d(ji,jj) = 0.e0 90 zbureff (ji,jj) = 0.e0 91 zwork1 (ji,jj) = 0.e0 92 zwork2 (ji,jj) = 0.e0 93 zwork3 (ji,jj) = 0.e0 94 zsedsi (ji,jj) = 0.e0 95 zsedcal (ji,jj) = 0.e0 96 zsedc (ji,jj) = 0.e0 97 END DO 98 END DO 95 99 96 100 ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. … … 100 104 CALL wrk_alloc( jpi, jpj, zironice ) 101 105 ! 106 !$OMP PARALLEL 107 !$OMP DO schedule(static) private(jj,ji,zdep,zwflux,zfminus,zfplus) 102 108 DO jj = 1, jpj 103 109 DO ji = 1, jpi … … 110 116 END DO 111 117 ! 112 tra(:,:,1,jpfer) = tra(:,:,1,jpfer) + zironice(:,:) 118 !$OMP DO schedule(static) private(jj,ji) 119 DO jj = 1, jpj 120 DO ji = 1, jpi 121 tra(ji,jj,1,jpfer) = tra(ji,jj,1,jpfer) + zironice(ji,jj) 122 END DO 123 END DO 124 !$OMP END PARALLEL 113 125 ! 114 126 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironice" ) ) & … … 127 139 ! ! Iron and Si deposition at the surface 128 140 IF( ln_solub ) THEN 129 zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 141 !$OMP PARALLEL DO schedule(static) private(jj,ji) 142 DO jj = 1, jpj 143 DO ji = 1, jpi 144 zirondep(ji,jj,1) = solub(ji,jj) * dust(ji,jj) * mfrac * rfact2 / e3t_n(ji,jj,1) / 55.85 + 3.e-10 * r1_ryyss 145 END DO 146 END DO 130 147 ELSE 131 zirondep(:,:,1) = dustsolub * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 148 !$OMP PARALLEL DO schedule(static) private(jj,ji) 149 DO jj = 1, jpj 150 DO ji = 1, jpi 151 zirondep(ji,jj,1) = dustsolub * dust(ji,jj) * mfrac * rfact2 / e3t_n(ji,jj,1) / 55.85 + 3.e-10 * r1_ryyss 152 END DO 153 END DO 132 154 ENDIF 133 zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1 134 zpdep (:,:,1) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r 155 !$OMP PARALLEL DO schedule(static) private(jj,ji) 156 DO jj = 1, jpj 157 DO ji = 1, jpi 158 zsidep(ji,jj) = 8.8 * 0.075 * dust(ji,jj) * mfrac * rfact2 / e3t_n(ji,jj,1) / 28.1 159 zpdep (ji,jj,1) = 0.1 * 0.021 * dust(ji,jj) * mfrac * rfact2 / e3t_n(ji,jj,1) / 31. / po4r 160 END DO 161 END DO 135 162 ! ! Iron solubilization of particles in the water column 136 163 ! ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ; wdust in m/j 137 164 zwdust = 0.03 * rday / ( wdust * 55.85 ) / ( 270. * rday ) 165 !$OMP PARALLEL 166 !$OMP DO schedule(static) private(jk,jj,ji) 138 167 DO jk = 2, jpkm1 139 zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / 540. ) 140 zpdep (:,:,jk) = zirondep(:,:,jk) * 0.023 168 DO jj = 1, jpj 169 DO ji = 1, jpi 170 zirondep(ji,jj,jk) = dust(ji,jj) * mfrac * zwdust * rfact2 * EXP( -gdept_n(ji,jj,jk) / 540. ) 171 zpdep (ji,jj,jk) = zirondep(ji,jj,jk) * 0.023 172 END DO 173 END DO 141 174 END DO 142 175 ! ! Iron solubilization of particles in the water column 143 tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep (:,:) 144 tra(:,:,:,jppo4) = tra(:,:,:,jppo4) + zpdep (:,:,:) 145 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + zirondep(:,:,:) 176 !$OMP DO schedule(static) private(jj,ji) 177 DO jj = 1, jpj 178 DO ji = 1, jpi 179 tra(ji,jj,1,jpsil) = tra(ji,jj,1,jpsil) + zsidep (ji,jj) 180 END DO 181 END DO 182 !$OMP DO schedule(static) private(jk,jj,ji) 183 DO jk = 1, jpk 184 DO jj = 1, jpj 185 DO ji = 1, jpi 186 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zpdep (ji,jj,jk) 187 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zirondep(ji,jj,jk) 188 END DO 189 END DO 190 END DO 191 !$OMP END PARALLEL 146 192 ! 147 193 IF( lk_iomput ) THEN … … 161 207 ! ---------------------------------------------------------- 162 208 IF( ln_river ) THEN 209 !$OMP PARALLEL DO schedule(static) private(jj,ji,jk) 163 210 DO jj = 1, jpj 164 211 DO ji = 1, jpi … … 174 221 ENDDO 175 222 IF( ln_p5z ) THEN 223 !$OMP PARALLEL DO schedule(static) private(jj,ji,jk) 176 224 DO jj = 1, jpj 177 225 DO ji = 1, jpi … … 189 237 ! ---------------------------------------------------------- 190 238 IF( ln_ndepo ) THEN 191 tra(:,:,1,jpno3) = tra(:,:,1,jpno3) + nitdep(:,:) * rfact2 192 tra(:,:,1,jptal) = tra(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2 239 !$OMP PARALLEL DO schedule(static) private(jj,ji) 240 DO jj = 1, jpj 241 DO ji = 1, jpi 242 tra(ji,jj,1,jpno3) = tra(ji,jj,1,jpno3) + nitdep(ji,jj) * rfact2 243 tra(ji,jj,1,jptal) = tra(ji,jj,1,jptal) - rno3 * nitdep(ji,jj) * rfact2 244 ENDDO 245 ENDDO 193 246 ENDIF 194 247 … … 196 249 ! ------------------------------------------------------ 197 250 IF( ln_ironsed ) THEN 198 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 199 IF( ln_ligand ) tra(:,:,:,jpfep) = tra(:,:,:,jpfep) + ( ironsed(:,:,:) * fep_rats ) * rfact2 251 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 252 DO jk = 1, jpk 253 DO jj = 1, jpj 254 DO ji = 1, jpi 255 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + ironsed(ji,jj,jk) * rfact2 256 END DO 257 END DO 258 END DO 259 260 IF( ln_ligand ) THEN 261 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 262 DO jk = 1, jpk 263 DO jj = 1, jpj 264 DO ji = 1, jpi 265 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + ( ironsed(ji,jj,jk) * fep_rats ) * rfact2 266 END DO 267 END DO 268 END DO 269 END IF 200 270 ! 201 271 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) ) & … … 206 276 ! ------------------------------------------------------ 207 277 IF( ln_hydrofe ) THEN 208 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 278 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 279 DO jk = 1, jpk 280 DO jj = 1, jpj 281 DO ji = 1, jpi 282 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + hydrofe(ji,jj,jk) * rfact2 283 END DO 284 END DO 285 END DO 209 286 IF( ln_ligand ) THEN 210 tra(:,:,:,jpfep) = tra(:,:,:,jpfep) + ( hydrofe(:,:,:) * fep_rath ) * rfact2 211 tra(:,:,:,jplgw) = tra(:,:,:,jplgw) + ( hydrofe(:,:,:) * lgw_rath ) * rfact2 287 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 288 DO jk = 1, jpk 289 DO jj = 1, jpj 290 DO ji = 1, jpi 291 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + ( hydrofe(ji,jj,jk) * fep_rath ) * rfact2 292 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + ( hydrofe(ji,jj,jk) * lgw_rath ) * rfact2 293 END DO 294 END DO 295 END DO 212 296 ENDIF 213 297 ! … … 218 302 ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 219 303 ! -------------------------------------------------------------------- 304 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikt,zdep) 220 305 DO jj = 1, jpj 221 306 DO ji = 1, jpi … … 229 314 ! 230 315 IF( ln_ligand ) THEN 316 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikt,zdep) 231 317 DO jj = 1, jpj 232 318 DO ji = 1, jpi … … 242 328 ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 243 329 ! ------------------------------------------------------- 330 !$OMP PARALLEL 331 !$OMP DO schedule(static) private(jj,ji,ikt,zflx,zo2,zno3,zdep) 244 332 DO jj = 1, jpj 245 333 DO ji = 1, jpi … … 267 355 ! The factor for calcite comes from the alkalinity effect 268 356 ! ------------------------------------------------------------- 357 !$OMP DO schedule(static) private(jj,ji,ikt,zfactcal) 269 358 DO jj = 1, jpj 270 359 DO ji = 1, jpi … … 280 369 END DO 281 370 END DO 371 !$OMP END PARALLEL 282 372 zsumsedsi = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * r1_rday 283 373 zsumsedpo4 = glob_sum( zwork2(:,:) * e1e2t(:,:) ) * r1_rday … … 291 381 IF( .NOT.lk_sed ) zrivsil = 1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / ( zsumsedsi + rtrn ) 292 382 383 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikt,zdep,zwsc,zsiloss,zcaloss) 293 384 DO jj = 1, jpj 294 385 DO ji = 1, jpi … … 305 396 ! 306 397 IF( .NOT.lk_sed ) THEN 398 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikt,zdep,zwsc,zsiloss,zcaloss,zfactcal,zrivalk) 307 399 DO jj = 1, jpj 308 400 DO ji = 1, jpi … … 325 417 ENDIF 326 418 ! 419 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikt,zdep,zws3,zws4) 327 420 DO jj = 1, jpj 328 421 DO ji = 1, jpi … … 339 432 ! 340 433 IF( ln_ligand ) THEN 434 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikt,zdep,zwssfep) 341 435 DO jj = 1, jpj 342 436 DO ji = 1, jpi … … 350 444 ! 351 445 IF( ln_p5z ) THEN 446 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikt,zdep,zws3,zws4) 352 447 DO jj = 1, jpj 353 448 DO ji = 1, jpi … … 367 462 ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 368 463 ! in the sediments and just above the sediments. Not very clever, but simpliest option. 464 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikt,zdep,zws3,zws4,zrivno3,zwstpoc,zpdenit,z1pdenit,zolimit,zdenitt,zwstpop,zwstpon) 369 465 DO jj = 1, jpj 370 466 DO ji = 1, jpi … … 402 498 ! Small source iron from particulate inorganic iron 403 499 !----------------------------------- 500 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 404 501 DO jk = 1, jpkm1 405 zlight (:,:,jk) = ( 1.- EXP( -etot_ndcy(:,:,jk) / diazolight ) ) * ( 1. - fr_i(:,:) ) 406 zsoufer(:,:,jk) = zlight(:,:,jk) * 2E-11 / ( 2E-11 + biron(:,:,jk) ) 502 DO jj = 1, jpj 503 DO ji = 1, jpi 504 zlight (ji,jj,jk) = ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) ) 505 zsoufer(ji,jj,jk) = zlight(ji,jj,jk) * 2E-11 / ( 2E-11 + biron(ji,jj,jk) ) 506 END DO 507 END DO 407 508 ENDDO 408 509 IF( ln_p4z ) THEN 510 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zlim,zfact,ztrfer,ztrpo4s) 409 511 DO jk = 1, jpkm1 410 512 DO jj = 1, jpj … … 423 525 END DO 424 526 ELSE ! p5z 527 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztemp,zmudia,xdianh4,xdiano3,zlim,zfact,ztrfer,ztrdp) 425 528 DO jk = 1, jpkm1 426 529 DO jj = 1, jpj … … 448 551 ! ---------------------------------------- 449 552 IF( ln_p4z ) THEN 553 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zfact) 450 554 DO jk = 1, jpkm1 451 555 DO jj = 1, jpj … … 462 566 END DO 463 567 ELSE ! p5z 568 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zfact) 464 569 DO jk = 1, jpkm1 465 570 DO jj = 1, jpj … … 497 602 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) ) ! nitrogen fixation 498 603 IF( iom_use("INTNFIX") ) THEN ! nitrogen fixation rate in ocean ( vertically integrated ) 499 zwork1(:,:) = 0. 604 !$OMP PARALLEL 605 !$OMP DO schedule(static) private(jj,ji) 606 DO jj = 1, jpj 607 DO ji = 1, jpi 608 zwork1(ji,jj) = 0. 609 END DO 610 ENDDO 500 611 DO jk = 1, jpkm1 501 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * e3t_n(:,:,jk) * tmask(:,:,jk) 612 !$OMP DO schedule(static) private(jj,ji) 613 DO jj = 1, jpj 614 DO ji = 1, jpi 615 zwork1(ji,jj) = zwork1(ji,jj) + nitrpot(ji,jj,jk) * nitrfix * zfact * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 616 END DO 617 END DO 502 618 ENDDO 619 !$OMP END PARALLEL 503 620 CALL iom_put( "INTNFIX" , zwork1 ) 504 621 ENDIF -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90
r7646 r7698 74 74 ! Initialization of some global variables 75 75 ! --------------------------------------- 76 prodpoc(:,:,:) = 0. 77 conspoc(:,:,:) = 0. 78 prodgoc(:,:,:) = 0. 79 consgoc(:,:,:) = 0. 76 !$OMP PARALLEL 77 !$OMP DO schedule(static) private(jk, jj, ji) 78 DO jk = 1, jpk 79 DO jj = 1, jpj 80 DO ji = 1,jpi 81 prodpoc(ji,jj,jk) = 0. 82 conspoc(ji,jj,jk) = 0. 83 prodgoc(ji,jj,jk) = 0. 84 consgoc(ji,jj,jk) = 0. 85 END DO 86 END DO 87 END DO 80 88 81 89 ! … … 83 91 ! by data and from the coagulation theory 84 92 ! ----------------------------------------------------------- 93 !$OMP DO schedule(static) private(jk, jj, ji, zmax, zfact) 85 94 DO jk = 1, jpkm1 86 95 DO jj = 1, jpj … … 94 103 95 104 ! limit the values of the sinking speeds to avoid numerical instabilities 96 wsbio3(:,:,:) = wsbio 105 !$OMP DO schedule(static) private(jk, jj, ji) 106 DO jk = 1, jpk 107 DO jj = 1, jpj 108 DO ji = 1, jpi 109 wsbio3(ji,jj,jk) = wsbio 110 END DO 111 END DO 112 END DO 113 !$OMP END PARALLEL 97 114 98 115 ! … … 112 129 iiter1 = 1 113 130 iiter2 = 1 131 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zwsmax) REDUCTION(MAX:iiter1, iiter2) 114 132 DO jk = 1, jpkm1 115 133 DO jj = 1, jpj … … 131 149 ENDIF 132 150 151 !$OMP PARALLEL 152 !$OMP DO schedule(static) private(jk, jj, ji, zwsmax) 133 153 DO jk = 1,jpkm1 134 154 DO jj = 1, jpj … … 143 163 END DO 144 164 145 wscal (:,:,:) = wsbio4(:,:,:)146 147 165 ! Initializa to zero all the sinking arrays 148 166 ! ----------------------------------------- 149 sinking (:,:,:) = 0.e0 150 sinking2(:,:,:) = 0.e0 151 sinkcal (:,:,:) = 0.e0 152 sinkfer (:,:,:) = 0.e0 153 sinksil (:,:,:) = 0.e0 154 sinkfer2(:,:,:) = 0.e0 167 !$OMP DO schedule(static) private(jk, jj, ji) 168 DO jk = 1, jpk 169 DO jj = 1, jpj 170 DO ji = 1, jpi 171 sinking (ji,jj,jk) = 0.e0 172 sinking2(ji,jj,jk) = 0.e0 173 sinkcal (ji,jj,jk) = 0.e0 174 sinkfer (ji,jj,jk) = 0.e0 175 sinksil (ji,jj,jk) = 0.e0 176 sinkfer2(ji,jj,jk) = 0.e0 177 wscal (ji,jj,jk) = wsbio4(ji,jj,jk) 178 END DO 179 END DO 180 END DO 181 !$OMP END PARALLEL 155 182 156 183 ! Compute the sedimentation term using p4zsink2 for all the sinking particles … … 169 196 170 197 IF( ln_p5z ) THEN 171 sinkingn (:,:,:) = 0.e0 172 sinking2n(:,:,:) = 0.e0 173 sinkingp (:,:,:) = 0.e0 174 sinking2p(:,:,:) = 0.e0 198 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 199 DO jk = 1, jpk 200 DO jj = 1, jpj 201 DO ji = 1, jpi 202 sinkingn (ji,jj,jk) = 0.e0 203 sinking2n(ji,jj,jk) = 0.e0 204 sinkingp (ji,jj,jk) = 0.e0 205 sinking2p(ji,jj,jk) = 0.e0 206 END DO 207 END DO 208 END DO 175 209 176 210 ! Compute the sedimentation term using p4zsink2 for all the sinking particles … … 188 222 189 223 IF( ln_ligand ) THEN 190 wsfep (:,:,:) = wfep 224 !$OMP PARALLEL 225 !$OMP DO schedule(static) private(jk, jj, ji) 226 DO jk = 1, jpk 227 DO jj = 1, jpj 228 DO ji = 1, jpi 229 wsfep (ji,jj,jk) = wfep 230 END DO 231 END DO 232 END DO 233 !$OMP DO schedule(static) private(jk, jj, ji, zwsmax) 191 234 DO jk = 1,jpkm1 192 235 DO jj = 1, jpj … … 199 242 END DO 200 243 END DO 244 !$OMP END DO NOWAIT 201 245 ! 202 sinkfep(:,:,:) = 0.e0 246 !$OMP DO schedule(static) private(jk, jj, ji) 247 DO jk = 1, jpk 248 DO jj = 1, jpj 249 DO ji = 1, jpi 250 sinkfep(ji,jj,jk) = 0.e0 251 END DO 252 END DO 253 END DO 254 !$OMP END PARALLEL 203 255 DO jit = 1, iiter1 204 256 CALL p4z_sink2( wsfep, sinkfep , jpfep, iiter1 ) … … 217 269 ! 218 270 IF( iom_use( "EPC100" ) ) THEN 219 zw2d(:,:) = ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * zfact * tmask(:,:,1) ! Export of carbon at 100m 220 CALL iom_put( "EPC100" , zw2d ) 271 !$OMP PARALLEL DO schedule(static) private(jj, ji) 272 DO jj = 1, jpj 273 DO ji = 1, jpi 274 zw2d(ji,jj) = ( sinking(ji,jj,ik100) + sinking2(ji,jj,ik100) ) * zfact * tmask(ji,jj,1) ! Export of carbon at 100m 275 END DO 276 END DO 277 CALL iom_put( "EPC100" , zw2d ) 221 278 ENDIF 222 279 IF( iom_use( "EPFE100" ) ) THEN 223 zw2d(:,:) = ( sinkfer(:,:,ik100) + sinkfer2(:,:,ik100) ) * zfact * tmask(:,:,1) ! Export of iron at 100m 224 CALL iom_put( "EPFE100" , zw2d ) 280 !$OMP PARALLEL DO schedule(static) private(jj, ji) 281 DO jj = 1, jpj 282 DO ji = 1, jpi 283 zw2d(ji,jj) = ( sinkfer(ji,jj,ik100) + sinkfer2(ji,jj,ik100) ) * zfact * tmask(ji,jj,1) ! Export of iron at 100m 284 END DO 285 END DO 286 CALL iom_put( "EPFE100" , zw2d ) 225 287 ENDIF 226 288 IF( iom_use( "EPCAL100" ) ) THEN 227 zw2d(:,:) = sinkcal(:,:,ik100) * zfact * tmask(:,:,1) ! Export of calcite at 100m 228 CALL iom_put( "EPCAL100" , zw2d ) 289 !$OMP PARALLEL DO schedule(static) private(jj, ji) 290 DO jj = 1, jpj 291 DO ji = 1, jpi 292 zw2d(ji,jj) = sinkcal(ji,jj,ik100) * zfact * tmask(ji,jj,1) ! Export of calcite at 100m 293 END DO 294 END DO 295 CALL iom_put( "EPCAL100" , zw2d ) 229 296 ENDIF 230 297 IF( iom_use( "EPSI100" ) ) THEN 231 zw2d(:,:) = sinksil(:,:,ik100) * zfact * tmask(:,:,1) ! Export of bigenic silica at 100m 232 CALL iom_put( "EPSI100" , zw2d ) 298 !$OMP PARALLEL DO schedule(static) private(jj, ji) 299 DO jj = 1, jpj 300 DO ji = 1, jpi 301 zw2d(ji,jj) = sinksil(ji,jj,ik100) * zfact * tmask(ji,jj,1) ! Export of bigenic silica at 100m 302 END DO 303 END DO 304 CALL iom_put( "EPSI100" , zw2d ) 233 305 ENDIF 234 306 IF( iom_use( "EXPC" ) ) THEN 235 zw3d(:,:,:) = ( sinking(:,:,:) + sinking2(:,:,:) ) * zfact * tmask(:,:,:) ! Export of carbon in the water column 236 CALL iom_put( "EXPC" , zw3d ) 307 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 308 DO jk = 1, jpk 309 DO jj = 1, jpj 310 DO ji = 1, jpi 311 zw3d(ji,jj,jk) = ( sinking(ji,jj,jk) + sinking2(ji,jj,jk) ) * zfact * tmask(ji,jj,jk) ! Export of carbon in the water column 312 END DO 313 END DO 314 END DO 315 CALL iom_put( "EXPC" , zw3d ) 237 316 ENDIF 238 317 IF( iom_use( "EXPFE" ) ) THEN 239 zw3d(:,:,:) = ( sinkfer(:,:,:) + sinkfer2(:,:,:) ) * zfact * tmask(:,:,:) ! Export of iron 240 CALL iom_put( "EXPFE" , zw3d ) 318 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 319 DO jk = 1, jpk 320 DO jj = 1, jpj 321 DO ji = 1, jpi 322 zw3d(ji,jj,jk) = ( sinkfer(ji,jj,jk) + sinkfer2(ji,jj,jk) ) * zfact * tmask(ji,jj,jk) ! Export of iron 323 END DO 324 END DO 325 END DO 326 CALL iom_put( "EXPFE" , zw3d ) 241 327 ENDIF 242 328 IF( iom_use( "EXPCAL" ) ) THEN 243 zw3d(:,:,:) = sinkcal(:,:,:) * zfact * tmask(:,:,:) ! Export of calcite 244 CALL iom_put( "EXPCAL" , zw3d ) 329 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 330 DO jk = 1, jpk 331 DO jj = 1, jpj 332 DO ji = 1, jpi 333 zw3d(ji,jj,jk) = sinkcal(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! Export of calcite 334 END DO 335 END DO 336 END DO 337 CALL iom_put( "EXPCAL" , zw3d ) 245 338 ENDIF 246 339 IF( iom_use( "EXPSI" ) ) THEN 247 zw3d(:,:,:) = sinksil(:,:,:) * zfact * tmask(:,:,:) ! Export of bigenic silica 248 CALL iom_put( "EXPSI" , zw3d ) 340 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 341 DO jk = 1, jpk 342 DO jj = 1, jpj 343 DO ji = 1, jpi 344 zw3d(ji,jj,jk) = sinksil(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! Export of bigenic silica 345 END DO 346 END DO 347 END DO 348 CALL iom_put( "EXPSI" , zw3d ) 249 349 ENDIF 250 350 IF( iom_use( "tcexp" ) ) CALL iom_put( "tcexp" , t_oce_co2_exp * zfact ) ! molC/s … … 312 412 zstep = rfact2 / REAL( kiter, wp ) / 2. 313 413 314 ztraz(:,:,:) = 0.e0 315 zakz (:,:,:) = 0.e0 316 ztrb (:,:,:) = trb(:,:,:,jp_tra) 317 414 !$OMP PARALLEL 415 !$OMP DO schedule(static) private(jk, jj, ji) 416 DO jk = 1, jpk 417 DO jj = 1, jpj 418 DO ji = 1, jpi 419 ztraz(ji,jj,jk) = 0.e0 420 zakz (ji,jj,jk) = 0.e0 421 ztrb (ji,jj,jk) = trb(ji,jj,jk,jp_tra) 422 END DO 423 END DO 424 END DO 425 !$OMP END DO NOWAIT 426 !$OMP DO schedule(static) private(jk, jj, ji) 318 427 DO jk = 1, jpkm1 319 zwsink2(:,:,jk+1) = -pwsink(:,:,jk) / rday * tmask(:,:,jk+1) 320 END DO 321 zwsink2(:,:,1) = 0.e0 322 428 DO jj = 1, jpj 429 DO ji = 1, jpi 430 zwsink2(ji,jj,jk+1) = -pwsink(ji,jj,jk) / rday * tmask(ji,jj,jk+1) 431 END DO 432 END DO 433 END DO 434 435 !$OMP DO schedule(static) private(jj, ji) 436 DO jj = 1, jpj 437 DO ji = 1, jpi 438 zwsink2(ji,jj,1) = 0.e0 439 END DO 440 END DO 441 !$OMP END DO NOWAIT 323 442 324 443 ! Vertical advective flux 325 444 DO jn = 1, 2 326 445 ! first guess of the slopes interior values 446 !$OMP DO schedule(static) private(jk,jj,ji) 327 447 DO jk = 2, jpkm1 328 ztraz(:,:,jk) = ( trb(:,:,jk-1,jp_tra) - trb(:,:,jk,jp_tra) ) * tmask(:,:,jk) 329 END DO 330 ztraz(:,:,1 ) = 0.0 331 ztraz(:,:,jpk) = 0.0 448 DO jj = 1, jpj 449 DO ji = 1, jpi 450 ztraz(ji,jj,jk) = ( trb(ji,jj,jk-1,jp_tra) - trb(ji,jj,jk,jp_tra) ) * tmask(ji,jj,jk) 451 END DO 452 END DO 453 END DO 454 !$OMP END DO NOWAIT 455 !$OMP DO schedule(static) private(jj, ji) 456 DO jj = 1, jpj 457 DO ji = 1, jpi 458 ztraz(ji,jj,1 ) = 0.0 459 ztraz(ji,jj,jpk) = 0.0 460 END DO 461 END DO 332 462 333 463 ! slopes 464 !$OMP DO schedule(static) private(jk, jj, ji, zign) 334 465 DO jk = 2, jpkm1 335 466 DO jj = 1,jpj … … 342 473 343 474 ! Slopes limitation 475 !$OMP DO schedule(static) private(jk, jj, ji) 344 476 DO jk = 2, jpkm1 345 477 DO jj = 1, jpj … … 352 484 353 485 ! vertical advective flux 486 !$OMP DO schedule(static) private(jk, jj, ji, zigma, zew) 354 487 DO jk = 1, jpkm1 355 488 DO jj = 1, jpj … … 363 496 ! 364 497 ! Boundary conditions 365 psinkflx(:,:,1 ) = 0.e0 366 psinkflx(:,:,jpk) = 0.e0 498 !$OMP DO schedule(static) private(jj, ji) 499 DO jj = 1, jpj 500 DO ji = 1, jpi 501 psinkflx(ji,jj,1 ) = 0.e0 502 psinkflx(ji,jj,jpk) = 0.e0 503 END DO 504 END DO 367 505 506 !$OMP DO schedule(static) private(jk, jj, ji, zflx) 368 507 DO jk=1,jpkm1 369 508 DO jj = 1,jpj … … 377 516 ENDDO 378 517 518 !$OMP DO schedule(static) private(jk, jj, ji, zflx) 379 519 DO jk = 1,jpkm1 380 520 DO jj = 1,jpj … … 386 526 END DO 387 527 388 trb(:,:,:,jp_tra) = ztrb(:,:,:) 389 psinkflx(:,:,:) = 2. * psinkflx(:,:,:) 528 !$OMP DO schedule(static) private(jk, jj, ji) 529 DO jk = 1, jpk 530 DO jj = 1, jpj 531 DO ji = 1, jpi 532 trb(ji,jj,jk,jp_tra) = ztrb(ji,jj,jk) 533 psinkflx(ji,jj,jk) = 2. * psinkflx(ji,jj,jk) 534 END DO 535 END DO 536 END DO 537 !$OMP END PARALLEL 390 538 ! 391 539 CALL wrk_dealloc( jpi, jpj, jpk, ztraz, zakz, zwsink2, ztrb ) -
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 -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r7646 r7698 191 191 !-------------------------------------------------------------- 192 192 IF( .NOT.ln_rsttr ) THEN 193 trn(:,:,:,jpdic) = sco2 194 trn(:,:,:,jpdoc) = bioma0 195 trn(:,:,:,jptal) = alka0 196 trn(:,:,:,jpoxy) = oxyg0 197 trn(:,:,:,jpcal) = bioma0 198 trn(:,:,:,jppo4) = po4 / po4r 199 trn(:,:,:,jppoc) = bioma0 200 trn(:,:,:,jpgoc) = bioma0 201 trn(:,:,:,jpbfe) = bioma0 * 5.e-6 202 trn(:,:,:,jpsil) = silic1 203 trn(:,:,:,jpdsi) = bioma0 * 0.15 204 trn(:,:,:,jpgsi) = bioma0 * 5.e-6 205 trn(:,:,:,jpphy) = bioma0 206 trn(:,:,:,jpdia) = bioma0 207 trn(:,:,:,jpzoo) = bioma0 208 trn(:,:,:,jpmes) = bioma0 209 trn(:,:,:,jpfer) = 0.6E-9 210 trn(:,:,:,jpsfe) = bioma0 * 5.e-6 211 trn(:,:,:,jpdfe) = bioma0 * 5.e-6 212 trn(:,:,:,jpnfe) = bioma0 * 5.e-6 213 trn(:,:,:,jpnch) = bioma0 * 12. / 55. 214 trn(:,:,:,jpdch) = bioma0 * 12. / 55. 215 trn(:,:,:,jpno3) = no3 216 trn(:,:,:,jpnh4) = bioma0 217 IF( ln_ligand) THEN 218 trn(:,:,:,jplgw) = 0.6E-9 219 trn(:,:,:,jpfep) = 0. * 5.e-6 220 ENDIF 221 IF( ln_p5z ) THEN 222 trn(:,:,:,jpdon) = bioma0 223 trn(:,:,:,jpdop) = bioma0 224 trn(:,:,:,jppon) = bioma0 225 trn(:,:,:,jppop) = bioma0 226 trn(:,:,:,jpgon) = bioma0 227 trn(:,:,:,jpgop) = bioma0 228 trn(:,:,:,jpnph) = bioma0 229 trn(:,:,:,jppph) = bioma0 230 trn(:,:,:,jppic) = bioma0 231 trn(:,:,:,jpnpi) = bioma0 232 trn(:,:,:,jpppi) = bioma0 233 trn(:,:,:,jpndi) = bioma0 234 trn(:,:,:,jppdi) = bioma0 235 trn(:,:,:,jppfe) = bioma0 * 5.e-6 236 trn(:,:,:,jppch) = bioma0 * 12. / 55. 237 ENDIF 193 !$OMP PARALLEL 194 !$OMP DO schedule(static) private(jk,jj,ji) 195 DO jk = 1, jpk 196 DO jj = 1, jpj 197 DO ji = 1, jpi 198 trn(ji,jj,jk,jpdic) = sco2 199 trn(ji,jj,jk,jpdoc) = bioma0 200 trn(ji,jj,jk,jptal) = alka0 201 trn(ji,jj,jk,jpoxy) = oxyg0 202 trn(ji,jj,jk,jpcal) = bioma0 203 trn(ji,jj,jk,jppo4) = po4 / po4r 204 trn(ji,jj,jk,jppoc) = bioma0 205 trn(ji,jj,jk,jpgoc) = bioma0 206 trn(ji,jj,jk,jpbfe) = bioma0 * 5.e-6 207 trn(ji,jj,jk,jpsil) = silic1 208 trn(ji,jj,jk,jpdsi) = bioma0 * 0.15 209 trn(ji,jj,jk,jpgsi) = bioma0 * 5.e-6 210 trn(ji,jj,jk,jpphy) = bioma0 211 trn(ji,jj,jk,jpdia) = bioma0 212 trn(ji,jj,jk,jpzoo) = bioma0 213 trn(ji,jj,jk,jpmes) = bioma0 214 trn(ji,jj,jk,jpfer) = 0.6E-9 215 trn(ji,jj,jk,jpsfe) = bioma0 * 5.e-6 216 trn(ji,jj,jk,jpdfe) = bioma0 * 5.e-6 217 trn(ji,jj,jk,jpnfe) = bioma0 * 5.e-6 218 trn(ji,jj,jk,jpnch) = bioma0 * 12. / 55. 219 trn(ji,jj,jk,jpdch) = bioma0 * 12. / 55. 220 trn(ji,jj,jk,jpno3) = no3 221 trn(ji,jj,jk,jpnh4) = bioma0 222 IF( ln_ligand) THEN 223 trn(ji,jj,jk,jplgw) = 0.6E-9 224 trn(ji,jj,jk,jpfep) = 0. * 5.e-6 225 ENDIF 226 IF( ln_p5z ) THEN 227 trn(ji,jj,jk,jpdon) = bioma0 228 trn(ji,jj,jk,jpdop) = bioma0 229 trn(ji,jj,jk,jppon) = bioma0 230 trn(ji,jj,jk,jppop) = bioma0 231 trn(ji,jj,jk,jpgon) = bioma0 232 trn(ji,jj,jk,jpgop) = bioma0 233 trn(ji,jj,jk,jpnph) = bioma0 234 trn(ji,jj,jk,jppph) = bioma0 235 trn(ji,jj,jk,jppic) = bioma0 236 trn(ji,jj,jk,jpnpi) = bioma0 237 trn(ji,jj,jk,jpppi) = bioma0 238 trn(ji,jj,jk,jpndi) = bioma0 239 trn(ji,jj,jk,jppdi) = bioma0 240 trn(ji,jj,jk,jppfe) = bioma0 * 5.e-6 241 trn(ji,jj,jk,jppch) = bioma0 * 12. / 55. 242 ENDIF 243 END DO 244 END DO 245 END DO 238 246 ! initialize the half saturation constant for silicate 239 247 ! ---------------------------------------------------- 240 xksi(:,:) = 2.e-6 241 xksimax(:,:) = xksi(:,:) 248 !$OMP DO schedule(static) private(jj,ji) 249 DO jj = 1, jpj 250 DO ji = 1, jpi 251 xksi(ji,jj) = 2.e-6 252 xksimax(ji,jj) = xksi(ji,jj) 253 END DO 254 END DO 255 !$OMP END PARALLEL 242 256 END IF 243 257 -
trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90
r7646 r7698 61 61 !!---------------------------------------------------------------------- 62 62 !! NEMO/TOP 3.7 , NEMO Consortium (2015) 63 !! $Id$ 63 !! $Id$ 64 64 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 65 65 !!---------------------------------------------------------------------- … … 76 76 INTEGER, INTENT(in) :: kt ! ocean time-step index 77 77 ! 78 INTEGER :: jk ! dummy loop index78 INTEGER :: jk, jj, ji ! dummy loop index 79 79 CHARACTER (len=22) :: charout 80 80 REAL(wp), POINTER, DIMENSION(:,:,:) :: zun, zvn, zwn ! effective velocity … … 86 86 ! !== effective transport ==! 87 87 IF( l_offline ) THEN 88 zun(:,:,:) = un(:,:,:) ! effective transport already in un/vn/wn 89 zvn(:,:,:) = vn(:,:,:) 90 zwn(:,:,:) = wn(:,:,:) 88 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 89 DO jk = 1, jpk 90 DO jj = 1, jpj 91 DO ji = 1, jpi 92 zun(ji,jj,jk) = un(ji,jj,jk) ! effective transport already in un/vn/wn 93 zvn(ji,jj,jk) = vn(ji,jj,jk) 94 zwn(ji,jj,jk) = wn(ji,jj,jk) 95 END DO 96 END DO 97 END DO 91 98 ELSE 92 99 ! 100 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 93 101 DO jk = 1, jpkm1 94 zun(:,:,jk) = e2u (:,:) * e3u_n(:,:,jk) * un(:,:,jk) ! eulerian transport 95 zvn(:,:,jk) = e1v (:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 96 zwn(:,:,jk) = e1e2t(:,:) * wn(:,:,jk) 102 DO jj = 1, jpj 103 DO ji = 1, jpi 104 zun(ji,jj,jk) = e2u (ji,jj) * e3u_n(ji,jj,jk) * un(ji,jj,jk) ! eulerian transport 105 zvn(ji,jj,jk) = e1v (ji,jj) * e3v_n(ji,jj,jk) * vn(ji,jj,jk) 106 zwn(ji,jj,jk) = e1e2t(ji,jj) * wn(ji,jj,jk) 107 END DO 108 END DO 97 109 END DO 98 110 ! 99 111 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN ! add z-tilde and/or vvl corrections 100 zun(:,:,:) = zun(:,:,:) + un_td(:,:,:) 101 zvn(:,:,:) = zvn(:,:,:) + vn_td(:,:,:) 112 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 113 DO jk = 1, jpk 114 DO jj = 1, jpj 115 DO ji = 1, jpi 116 zun(ji,jj,jk) = zun(ji,jj,jk) + un_td(ji,jj,jk) 117 zvn(ji,jj,jk) = zvn(ji,jj,jk) + vn_td(ji,jj,jk) 118 END DO 119 END DO 120 END DO 102 121 ENDIF 103 122 ! … … 107 126 IF( ln_mle ) CALL tra_adv_mle( kt, nittrc000, zun, zvn, zwn, 'TRC' ) ! add the mle transport 108 127 ! 109 zun(:,:,jpk) = 0._wp ! no transport trough the bottom 110 zvn(:,:,jpk) = 0._wp 111 zwn(:,:,jpk) = 0._wp 128 !$OMP PARALLEL DO schedule(static) private(jj,ji) 129 DO jj = 1, jpj 130 DO ji = 1, jpi 131 zun(ji,jj,jpk) = 0._wp ! no transport trough the bottom 132 zvn(ji,jj,jpk) = 0._wp 133 zwn(ji,jj,jpk) = 0._wp 134 END DO 135 END DO 112 136 ! 113 137 ENDIF -
trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcbbl.F90
r7646 r7698 31 31 !!---------------------------------------------------------------------- 32 32 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 33 !! $Id$ 33 !! $Id$ 34 34 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 35 35 !!---------------------------------------------------------------------- … … 61 61 IF( l_trdtrc ) THEN 62 62 CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrtrd ) ! temporary save of trends 63 ztrtrd(:,:,:,:) = tra(:,:,:,:) 63 !$OMP PARALLEL DO schedule(static) private(jn,jk,jj,ji) 64 DO jn = 1, jptra 65 DO jk = 1, jpk 66 DO jj = 1, jpj 67 DO ji = 1, jpi 68 ztrtrd(ji,jj,jk,jn) = tra(ji,jj,jk,jn) 69 END DO 70 END DO 71 END DO 72 END DO 64 73 ENDIF 65 74 … … 88 97 IF( l_trdtrc ) THEN ! save the horizontal diffusive trends for further diagnostics 89 98 DO jn = 1, jptra 90 ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) 99 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 100 DO jk = 1, jpk 101 DO jj = 1, jpj 102 DO ji = 1, jpi 103 ztrtrd(ji,jj,jk,jn) = tra(ji,jj,jk,jn) - ztrtrd(ji,jj,jk,jn) 104 END DO 105 END DO 106 END DO 91 107 CALL trd_tra( kt, 'TRC', jn, jptra_bbl, ztrtrd(:,:,:,jn) ) 92 108 END DO -
trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcldf.F90
r6403 r7698 76 76 IF( l_trdtrc ) THEN 77 77 CALL wrk_alloc( jpi,jpj,jpk,jptra, ztrtrd ) 78 ztrtrd(:,:,:,:) = tra(:,:,:,:) 78 !$OMP PARALLEL DO schedule(static) private(jn,jk,jj,ji) 79 DO jn = 1, jptra 80 DO jk = 1, jpk 81 DO jj = 1, jpj 82 DO ji = 1, jpi 83 ztrtrd(ji,jj,jk,jn) = tra(ji,jj,jk,jn) 84 END DO 85 END DO 86 END DO 87 END DO 79 88 ENDIF 80 89 ! !* set the lateral diffusivity coef. for passive tracer 81 90 CALL wrk_alloc( jpi,jpj,jpk, zahu, zahv ) 82 zahu(:,:,:) = rldf * ahtu(:,:,:) 83 zahv(:,:,:) = rldf * ahtv(:,:,:) 91 !$OMP PARALLEL 92 !$OMP DO schedule(static) private(jk,jj,ji) 93 DO jk = 1, jpk 94 DO jj = 1, jpj 95 DO ji = 1, jpi 96 zahu(ji,jj,jk) = rldf * ahtu(ji,jj,jk) 97 zahv(ji,jj,jk) = rldf * ahtv(ji,jj,jk) 98 END DO 99 END DO 100 END DO 84 101 ! !* Enhanced zonal diffusivity coefficent in the equatorial domain 102 !$OMP DO schedule(static) private(jk,jj,ji,zdep) 85 103 DO jk= 1, jpk 86 104 DO jj = 1, jpj … … 93 111 END DO 94 112 END DO 113 !$OMP END DO NOWAIT 114 !$OMP END PARALLEL 95 115 ! 96 116 SELECT CASE ( nldf ) !* compute lateral mixing trend and add it to the general trend … … 112 132 IF( l_trdtrc ) THEN ! send the trends for further diagnostics 113 133 DO jn = 1, jptra 114 ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) 134 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 135 DO jk = 1, jpk 136 DO jj = 1, jpj 137 DO ji = 1, jpi 138 ztrtrd(ji,jj,jk,jn) = tra(ji,jj,jk,jn) - ztrtrd(ji,jj,jk,jn) 139 END DO 140 END DO 141 END DO 115 142 CALL trd_tra( kt, 'TRC', jn, jptra_ldf, ztrtrd(:,:,:,jn) ) 116 143 END DO -
trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r7646 r7698 46 46 !!---------------------------------------------------------------------- 47 47 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 48 !! $Id$ 48 !! $Id$ 49 49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 50 50 !!---------------------------------------------------------------------- … … 77 77 INTEGER, INTENT( in ) :: kt ! ocean time-step index 78 78 ! 79 INTEGER :: jk, jn ! dummy loop indices79 INTEGER :: jk, jn, jj, ji ! dummy loop indices 80 80 REAL(wp) :: zfact ! temporary scalar 81 81 CHARACTER (len=22) :: charout … … 101 101 IF( l_trdtrc ) THEN ! trends: store now fields before the Asselin filter application 102 102 CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrdt ) 103 ztrdt(:,:,:,:) = trn(:,:,:,:) 103 !$OMP PARALLEL DO schedule(static) private(jn,jk,jj,ji) 104 DO jn = 1, jptra 105 DO jk = 1, jpk 106 DO jj = 1, jpj 107 DO ji = 1, jpi 108 ztrdt(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 109 END DO 110 END DO 111 END DO 112 END DO 104 113 ENDIF 105 114 ! ! Leap-Frog + Asselin filter time stepping 106 115 IF( neuler == 0 .AND. kt == nittrc000 ) THEN ! Euler time-stepping at first time-step (only swap) 116 !$OMP PARALLEL DO schedule(static) private(jn,jk,jj,ji) 107 117 DO jn = 1, jptra 108 118 DO jk = 1, jpkm1 109 trn(:,:,jk,jn) = tra(:,:,jk,jn) 119 DO jj = 1, jpj 120 DO ji = 1, jpi 121 trn(ji,jj,jk,jn) = tra(ji,jj,jk,jn) 122 END DO 123 END DO 110 124 END DO 111 125 END DO … … 127 141 DO jk = 1, jpkm1 128 142 zfact = 1._wp / r2dttrc 129 ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact 143 !$OMP PARALLEL DO schedule(static) private(jj,ji) 144 DO jj = 1, jpj 145 DO ji = 1, jpi 146 ztrdt(ji,jj,jk,jn) = ( trb(ji,jj,jk,jn) - ztrdt(ji,jj,jk,jn) ) * zfact 147 END DO 148 END DO 130 149 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 131 150 END DO -
trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90
r7646 r7698 29 29 !!---------------------------------------------------------------------- 30 30 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 31 !! $Id$ 31 !! $Id$ 32 32 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 33 33 !!---------------------------------------------------------------------- … … 140 140 REAL(wp) :: zcoef, ztrcorn, ztrmasn ! " " 141 141 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrtrdb, ztrtrdn ! workspace arrays 142 REAL(wp), POINTER, DIMENSION(:,:,:) :: zcptrbmax, zcptrnmax, zcptrbmin, zcptrnmin ! workspace arrays 142 143 REAL(wp) :: zs2rdt 143 144 LOGICAL :: lldebug = .FALSE. … … 147 148 IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk, ztrtrdb, ztrtrdn ) 148 149 150 CALL wrk_alloc( jpi, jpj, jpk, zcptrbmax, zcptrnmax, zcptrbmin, zcptrnmin ) 149 151 IF( PRESENT( cpreserv ) ) THEN ! total tracer concentration is preserved 150 152 … … 155 157 156 158 IF( l_trdtrc ) THEN 157 ztrtrdb(:,:,:) = ptrb(:,:,:,jn) ! save input trb for trend computation 158 ztrtrdn(:,:,:) = ptrn(:,:,:,jn) ! save input trn for trend computation 159 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 160 DO jk = 1, jpk 161 DO jj = 1, jpj 162 DO ji = 1, jpi 163 ztrtrdb(ji,jj,jk) = ptrb(ji,jj,jk,jn) ! save input trb for trend computation 164 ztrtrdn(ji,jj,jk) = ptrn(ji,jj,jk,jn) 165 END DO 166 END DO 167 END DO 159 168 ENDIF 160 169 ! ! sum over the global domain 161 ztrcorb = glob_sum( MIN( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:) ) 162 ztrcorn = glob_sum( MIN( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:) ) 163 164 ztrmasb = glob_sum( MAX( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:) ) 165 ztrmasn = glob_sum( MAX( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:) ) 170 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 171 DO jk = 1, jpk 172 DO jj = 1, jpj 173 DO ji = 1, jpi 174 zcptrbmin(ji,jj,jk) = MIN( 0., ptrb(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 175 zcptrnmin(ji,jj,jk) = MIN( 0., ptrn(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 176 zcptrbmax(ji,jj,jk) = MAX( 0., ptrb(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 177 zcptrnmax(ji,jj,jk) = MAX( 0., ptrn(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 178 END DO 179 END DO 180 END DO 181 ztrcorb = glob_sum( zcptrbmin(:,:,:) ) 182 ztrcorn = glob_sum( zcptrnmin(:,:,:) ) 183 ztrmasb = glob_sum( zcptrbmax(:,:,:) ) 184 ztrmasn = glob_sum( zcptrnmax(:,:,:) ) 166 185 167 186 IF( ztrcorb /= 0 ) THEN 168 187 zcoef = 1. + ztrcorb / ztrmasb 188 !$OMP PARALLEL DO schedule(static) private(jk) 169 189 DO jk = 1, jpkm1 170 ptrb(:,:,jk,jn) = MAX( 0., ptrb(:,:,jk,jn) ) 171 ptrb(:,:,jk,jn) = ptrb(:,:,jk,jn) * zcoef * tmask(:,:,jk) 190 DO jj = 1, jpj 191 DO ji = 1, jpi 192 ptrb(ji,jj,jk,jn) = MAX( 0., ptrb(ji,jj,jk,jn) ) 193 ptrb(ji,jj,jk,jn) = ptrb(ji,jj,jk,jn) * zcoef * tmask(ji,jj,jk) 194 END DO 195 END DO 172 196 END DO 173 197 ENDIF … … 175 199 IF( ztrcorn /= 0 ) THEN 176 200 zcoef = 1. + ztrcorn / ztrmasn 201 !$OMP PARALLEL DO schedule(static) private(jk) 177 202 DO jk = 1, jpkm1 178 ptrn(:,:,jk,jn) = MAX( 0., ptrn(:,:,jk,jn) ) 179 ptrn(:,:,jk,jn) = ptrn(:,:,jk,jn) * zcoef * tmask(:,:,jk) 203 DO jj = 1, jpj 204 DO ji = 1, jpi 205 ptrn(ji,jj,jk,jn) = MAX( 0., ptrn(ji,jj,jk,jn) ) 206 ptrn(ji,jj,jk,jn) = ptrn(ji,jj,jk,jn) * zcoef * tmask(ji,jj,jk) 207 END DO 208 END DO 180 209 END DO 181 210 ENDIF … … 184 213 ! 185 214 zs2rdt = 1. / ( 2. * rdt ) 186 ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 187 ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt 215 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 216 DO jk = 1, jpk 217 DO jj = 1, jpj 218 DO ji = 1, jpi 219 ztrtrdb(ji,jj,jk) = ( ptrb(ji,jj,jk,jn) - ztrtrdb(ji,jj,jk) ) * zs2rdt 220 ztrtrdn(ji,jj,jk) = ( ptrn(ji,jj,jk,jn) - ztrtrdn(ji,jj,jk) ) * zs2rdt 221 END DO 222 END DO 223 END DO 224 188 225 CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb ) ! Asselin-like trend handling 189 226 CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn ) ! standard trend handling … … 199 236 200 237 IF( l_trdtrc ) THEN 201 ztrtrdb(:,:,:) = ptrb(:,:,:,jn) ! save input trb for trend computation 202 ztrtrdn(:,:,:) = ptrn(:,:,:,jn) ! save input trn for trend computation 203 ENDIF 204 205 DO jk = 1, jpkm1 206 DO jj = 1, jpj 207 DO ji = 1, jpi 208 ptrn(ji,jj,jk,jn) = MAX( 0. , ptrn(ji,jj,jk,jn) ) 209 ptrb(ji,jj,jk,jn) = MAX( 0. , ptrb(ji,jj,jk,jn) ) 210 END DO 211 END DO 212 END DO 213 214 IF( l_trdtrc ) THEN 238 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 239 DO jk = 1, jpk 240 DO jj = 1, jpj 241 DO ji = 1, jpi 242 ztrtrdb(ji,jj,jk) = ptrb(ji,jj,jk,jn) ! save input trb for trend computation 243 ztrtrdn(ji,jj,jk) = ptrn(ji,jj,jk,jn) 244 END DO 245 END DO 246 END DO 247 END IF 248 249 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 250 DO jk = 1, jpkm1 251 DO jj = 1, jpj 252 DO ji = 1, jpi 253 ptrn(ji,jj,jk,jn) = MAX( 0. , ptrn(ji,jj,jk,jn) ) 254 ptrb(ji,jj,jk,jn) = MAX( 0. , ptrb(ji,jj,jk,jn) ) 255 END DO 256 END DO 257 END DO 258 259 IF( l_trdtrc ) THEN 215 260 ! 216 261 zs2rdt = 1. / ( 2. * rdt * REAL( nn_dttrc, wp ) ) 217 ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 218 ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt 262 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 263 DO jk = 1, jpk 264 DO jj = 1, jpj 265 DO ji = 1, jpi 266 ztrtrdb(ji,jj,jk) = ( ptrb(ji,jj,jk,jn) - ztrtrdb(ji,jj,jk) ) * zs2rdt 267 ztrtrdn(ji,jj,jk) = ( ptrn(ji,jj,jk,jn) - ztrtrdn(ji,jj,jk) ) * zs2rdt 268 END DO 269 END DO 270 END DO 219 271 CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb ) ! Asselin-like trend handling 220 272 CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn ) ! standard trend handling … … 227 279 228 280 IF( l_trdtrc ) CALL wrk_dealloc( jpi, jpj, jpk, ztrtrdb, ztrtrdn ) 281 CALL wrk_dealloc( jpi, jpj, jpk, zcptrbmax, zcptrnmax, zcptrbmin, zcptrnmin ) 229 282 230 283 END SUBROUTINE trc_rad_sms -
trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90
r7646 r7698 32 32 !!---------------------------------------------------------------------- 33 33 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 34 !! $Id$ 34 !! $Id$ 35 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 36 !!---------------------------------------------------------------------- … … 61 61 INTEGER, INTENT( in ) :: kt ! ocean time-step index 62 62 ! 63 INTEGER :: ji, jj, j n ! dummy loop indices63 INTEGER :: ji, jj, jk, jn ! dummy loop indices 64 64 REAL(wp) :: zse3t, zrtrn, zratio, zfact ! temporary scalars 65 65 REAL(wp) :: zswitch, zftra, zcd, zdtra, ztfx, ztra ! temporary scalars … … 83 83 ! ! (2) embedded sea-ice : salt and volume fluxes and pressure 84 84 END SELECT 85 85 86 86 87 IF( kt == nittrc000 ) THEN … … 98 99 ELSE ! No restart or restart not found: Euler forward time stepping 99 100 zfact = 1._wp 100 sbc_trc_b(:,:,:) = 0._wp 101 !$OMP PARALLEL DO schedule(static) private(jn,jj,ji) 102 DO jn = 1, jptra 103 DO jj = 1, jpj 104 DO ji = 1, jpi 105 sbc_trc_b(ji,jj,jn) = 0._wp 106 END DO 107 END DO 108 END DO 101 109 ENDIF 102 110 ELSE ! Swap of forcing fields 103 111 IF( ln_top_euler ) THEN 104 112 zfact = 1._wp 105 sbc_trc_b(:,:,:) = 0._wp 113 !$OMP PARALLEL DO schedule(static) private(jn,jj,ji) 114 DO jn = 1, jptra 115 DO jj = 1, jpj 116 DO ji = 1, jpi 117 sbc_trc_b(ji,jj,jn) = 0._wp 118 END DO 119 END DO 120 END DO 106 121 ELSE 107 122 zfact = 0.5_wp 108 sbc_trc_b(:,:,:) = sbc_trc(:,:,:) 123 !$OMP PARALLEL DO schedule(static) private(jn,jj,ji) 124 DO jn = 1, jptra 125 DO jj = 1, jpj 126 DO ji = 1, jpi 127 sbc_trc_b(ji,jj,jn) = sbc_trc(ji,jj,jn) 128 END DO 129 END DO 130 END DO 109 131 ENDIF 110 132 ! … … 116 138 ! 117 139 IF( .NOT.ln_linssh ) THEN ! online coupling with vvl 118 zsfx(:,:) = 0._wp 140 !$OMP PARALLEL DO schedule(static) private(jj,ji) 141 DO jj = 1, jpj 142 DO ji = 1, jpi 143 zsfx(ji,jj) = 0._wp 144 END DO 145 END DO 119 146 ELSE ! online coupling free surface or offline with free surface 120 zsfx(:,:) = emp(:,:) 147 !$OMP PARALLEL DO schedule(static) private(jj,ji) 148 DO jj = 1, jpj 149 DO ji = 1, jpi 150 zsfx(ji,jj) = emp(ji,jj) 151 END DO 152 END DO 121 153 ENDIF 122 154 … … 124 156 DO jn = 1, jptra 125 157 ! 126 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends 127 158 IF( l_trdtrc ) THEN 159 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 160 DO jk = 1, jpk 161 DO jj = 1, jpj 162 DO ji = 1, jpi 163 ztrtrd(ji,jj,jk) = tra(ji,jj,jk,jn) ! save trends 164 END DO 165 END DO 166 END DO ! online coupling free surface or offline with free surface 167 END IF 128 168 IF ( nn_ice_tr == -1 ) THEN ! No tracers in sea ice (null concentration in sea ice) 129 169 170 !$OMP PARALLEL DO schedule(static) private(jj, ji) 130 171 DO jj = 2, jpj 131 172 DO ji = fs_2, fs_jpim1 ! vector opt. … … 136 177 ELSE 137 178 179 !$OMP PARALLEL DO schedule(static) private(jj,ji,zse3t,zftra,zcd,ztfx,zdtra,zratio) 138 180 DO jj = 2, jpj 139 181 DO ji = fs_2, fs_jpim1 ! vector opt. … … 159 201 CALL lbc_lnk( sbc_trc(:,:,jn), 'T', 1. ) 160 202 ! Concentration dilution effect on tracers due to evaporation & precipitation 203 !$OMP PARALLEL DO schedule(static) private(jj,ji,zse3t) 161 204 DO jj = 2, jpj 162 205 DO ji = fs_2, fs_jpim1 ! vector opt. … … 167 210 ! 168 211 IF( l_trdtrc ) THEN 169 ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:) 212 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 213 DO jk = 1, jpk 214 DO jj = 1, jpj 215 DO ji = 1, jpi 216 ztrtrd(ji,jj,jk) = tra(ji,jj,jk,jn) - ztrtrd(ji,jj,jk) 217 END DO 218 END DO 219 END DO ! online coupling free surface or offline with free surface 170 220 CALL trd_tra( kt, 'TRC', jn, jptra_nsr, ztrtrd ) 171 221 END IF -
trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90
r7646 r7698 40 40 !!---------------------------------------------------------------------- 41 41 !! NEMO/TOP 3.7 , NEMO Consortium (2015) 42 !! $Id$ 42 !! $Id$ 43 43 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 44 44 !!---------------------------------------------------------------------- … … 53 53 INTEGER, INTENT( in ) :: kt ! ocean time-step index 54 54 ! 55 INTEGER :: jk, jn 55 INTEGER :: jk, jn, jj, ji 56 56 CHARACTER (len=22) :: charout 57 57 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrtrd ! 4D workspace … … 62 62 IF( l_trdtrc ) THEN 63 63 CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrtrd ) 64 ztrtrd(:,:,:,:) = tra(:,:,:,:) 64 !$OMP PARALLEL DO schedule(static) private(jn,jk,jj,ji) 65 DO jn = 1, jptra 66 DO jk = 1, jpk 67 DO jj = 1, jpj 68 DO ji = 1, jpi 69 ztrtrd(ji,jj,jk,jn) = tra(ji,jj,jk,jn) 70 END DO 71 END DO 72 END DO 73 END DO 65 74 ENDIF 66 75 … … 72 81 IF( l_trdtrc ) THEN ! save the vertical diffusive trends for further diagnostics 73 82 DO jn = 1, jptra 83 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 74 84 DO jk = 1, jpkm1 75 ztrtrd(:,:,jk,jn) = ( ( tra(:,:,jk,jn) - trb(:,:,jk,jn) ) / r2dttrc ) - ztrtrd(:,:,jk,jn) 85 DO jj = 1, jpj 86 DO ji = 1, jpi 87 ztrtrd(ji,jj,jk,jn) = ( ( tra(ji,jj,jk,jn) - trb(ji,jj,jk,jn) ) / r2dttrc ) - ztrtrd(ji,jj,jk,jn) 88 END DO 89 END DO 76 90 END DO 77 91 CALL trd_tra( kt, 'TRC', jn, jptra_zdf, ztrtrd(:,:,:,jn) ) -
trunk/NEMOGCM/NEMO/TOP_SRC/trcice.F90
r7646 r7698 38 38 !!--------------------------------------------------------------------- 39 39 ! --- Variable declarations --- ! 40 INTEGER :: jn, jj, ji ! dummy loop indices 40 41 41 42 IF(lwp) THEN … … 49 50 CALL trc_nam_ice 50 51 ! 51 trc_i(:,:,:) = 0.0d0 ! by default 52 trc_o(:,:,:) = 0.0d0 ! by default 52 !$OMP PARALLEL DO schedule(static) private(jn,jj,ji) 53 DO jn = 1, jptra 54 DO jj = 1, jpj 55 DO ji = 1, jpi 56 trc_i(ji,jj,jn) = 0.0d0 ! by default 57 trc_o(ji,jj,jn) = 0.0d0 ! by default 58 END DO 59 END DO 60 END DO 53 61 54 62 IF ( nn_ice_tr == 1 ) THEN -
trunk/NEMOGCM/NEMO/TOP_SRC/trcini.F90
r7646 r7698 105 105 !! ** Purpose : passive tracers inventories at initialsation phase 106 106 !!---------------------------------------------------------------------- 107 INTEGER :: jk, jn ! dummy loop indices107 INTEGER :: jk, jn, jj, ji ! dummy loop indices 108 108 CHARACTER (len=25) :: charout 109 109 !!---------------------------------------------------------------------- 110 110 ! ! masked grid volume 111 !$OMP PARALLEL 112 !$OMP DO schedule(static) private(jk,jj,ji) 111 113 DO jk = 1, jpk 112 cvol(:,:,jk) = e1e2t(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) 113 END DO 114 DO jj = 1, jpj 115 DO ji = 1, jpi 116 cvol(ji,jj,jk) = e1e2t(ji,jj) * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 117 END DO 118 END DO 119 END DO 120 ! 121 !$OMP DO schedule(static) private(jn) 122 DO jn = 1, jptra 123 trai(jn) = 0._wp ! initial content of all tracers 124 END DO 125 !$OMP END PARALLEL 114 126 ! ! total volume of the ocean 115 127 areatot = glob_sum( cvol(:,:,:) ) 116 128 ! 117 trai(:) = 0._wp ! initial content of all tracers118 129 DO jn = 1, jptra 119 130 trai(jn) = trai(jn) + glob_sum( trn(:,:,:,jn) * cvol(:,:,:) ) … … 220 231 USE trcdta ! initialisation from files 221 232 ! 222 INTEGER :: jn, jl ! dummy loop indices233 INTEGER :: jn, jl, jk, jj, ji ! dummy loop indices 223 234 !!---------------------------------------------------------------------- 224 235 ! … … 254 265 ENDIF 255 266 ! 256 trb(:,:,:,:) = trn(:,:,:,:) 267 !$OMP PARALLEL DO schedule(static) private(jn,jk,jj,ji) 268 DO jn = 1, jptra 269 DO jk = 1, jpk 270 DO jj = 1, jpj 271 DO ji = 1, jpi 272 trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 273 END DO 274 END DO 275 END DO 276 END DO 257 277 ! 258 278 ENDIF 259 279 260 tra(:,:,:,:) = 0._wp 280 !$OMP PARALLEL DO schedule(static) private(jn,jk,jj,ji) 281 DO jn = 1, jptra 282 DO jk = 1, jpk 283 DO jj = 1, jpj 284 DO ji = 1, jpi 285 tra(ji,jj,jk,jn) = 0._wp 286 END DO 287 END DO 288 END DO 289 END DO 261 290 ! ! Partial top/bottom cell: GRADh(trn) 262 291 END SUBROUTINE trc_ini_state -
trunk/NEMOGCM/NEMO/TOP_SRC/trcrst.F90
r7646 r7698 268 268 !! ** purpose : Compute tracers statistics 269 269 !!---------------------------------------------------------------------- 270 INTEGER :: jk, j n270 INTEGER :: jk, jj, ji, jn 271 271 REAL(wp) :: ztraf, zmin, zmax, zmean, zdrift 272 272 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol … … 279 279 ENDIF 280 280 ! 281 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 281 282 DO jk = 1, jpk 282 zvol(:,:,jk) = e1e2t(:,:) * e3t_a(:,:,jk) * tmask(:,:,jk) 283 DO jj = 1, jpj 284 DO ji = 1, jpi 285 zvol(ji,jj,jk) = e1e2t(ji,jj) * e3t_a(ji,jj,jk) * tmask(ji,jj,jk) 286 END DO 287 END DO 283 288 END DO 284 289 ! -
trunk/NEMOGCM/NEMO/TOP_SRC/trcstp.F90
r7646 r7698 37 37 !!---------------------------------------------------------------------- 38 38 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 39 !! $Id$ 39 !! $Id$ 40 40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 41 !!---------------------------------------------------------------------- … … 53 53 !!------------------------------------------------------------------- 54 54 INTEGER, INTENT( in ) :: kt ! ocean time-step index 55 INTEGER :: jk, jn ! dummy loop indices55 INTEGER :: jk, jn, jj, ji ! dummy loop indices 56 56 REAL(wp) :: ztrai 57 57 CHARACTER (len=25) :: charout … … 70 70 ! 71 71 IF( .NOT.ln_linssh ) THEN ! update ocean volume due to ssh temporal evolution 72 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 72 73 DO jk = 1, jpk 73 cvol(:,:,jk) = e1e2t(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) 74 DO jj = 1, jpj 75 DO ji = 1, jpi 76 cvol(ji,jj,jk) = e1e2t(ji,jj) * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 77 END DO 78 END DO 74 79 END DO 75 80 areatot = glob_sum( cvol(:,:,:) ) … … 87 92 ENDIF 88 93 ! 89 tra(:,:,:,:) = 0.e0 94 DO jn = 1, jptra 95 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 96 DO jk = 1, jpk 97 DO jj = 1, jpj 98 DO ji = 1, jpi 99 tra(ji,jj,jk,jn) = 0._wp 100 END DO 101 END DO 102 END DO 103 END DO 90 104 ! 91 105 CALL trc_rst_opn ( kt ) ! Open tracer restart file
Note: See TracChangeset
for help on using the changeset viewer.