- Timestamp:
- 2017-05-09T12:14:45+02:00 (7 years ago)
- Location:
- branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zagg.F90
r7190 r8003 36 36 CONTAINS 37 37 38 #if ! defined key_kriest39 38 !!---------------------------------------------------------------------- 40 39 !! 'standard particles parameterisation' ??? … … 68 67 ! 69 68 zstep = xstep 70 # if defined key_degrad71 zstep = zstep * facvol(ji,jj,jk)72 # endif73 69 zfact = zstep * xdiss(ji,jj,jk) 74 70 ! Part I : Coagulation dependent on turbulence … … 146 142 147 143 #else 148 !!----------------------------------------------------------------------149 !! 'Kriest parameterisation' key_kriest ???150 !!----------------------------------------------------------------------151 152 SUBROUTINE p5z_agg ( kt, knt )153 !!---------------------------------------------------------------------154 !! *** ROUTINE p5z_agg ***155 !!156 !! ** Purpose : Compute aggregation of particles157 !!158 !! ** Method : - ???159 !!---------------------------------------------------------------------160 !161 INTEGER, INTENT(in) :: kt, knt162 !163 INTEGER :: ji, jj, jk164 REAL(wp) :: zagg1, zagg2, zagg3, zagg4, zagg5, zfract, zaggsi, zaggsh165 REAL(wp) :: zagg , zaggdoc, zaggdoc1, znumdoc166 REAL(wp) :: znum , zeps, zfm, zgm, zsm, zfactn, zfactp167 REAL(wp) :: zdiv , zdiv1, zdiv2, zdiv3, zdiv4, zdiv5168 REAL(wp) :: zval1, zval2, zval3, zval4169 CHARACTER (len=25) :: charout170 !!---------------------------------------------------------------------171 !172 IF( nn_timing == 1 ) CALL timing_start('p5z_agg')173 !174 ! Exchange between organic matter compartments due to coagulation/disaggregation175 ! ---------------------------------------------------176 177 zval1 = 1. + xkr_zeta178 zval2 = 1. + xkr_eta179 zval3 = 3. + xkr_eta180 zval4 = 4. + xkr_eta181 182 DO jk = 1,jpkm1183 DO jj = 1,jpj184 DO ji = 1,jpi185 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN186 187 znum = trb(ji,jj,jk,jppoc)/(trb(ji,jj,jk,jpnum)+rtrn) / xkr_massp188 !-------------- To avoid sinking speed over 50 m/day -------189 znum = min(xnumm(jk),znum)190 znum = MAX( 1.1,znum)191 !------------------------------------------------------------192 zeps = ( zval1 * znum - 1.) / ( znum - 1.)193 zdiv = MAX( 1.e-4, ABS( zeps - zval3) ) * SIGN( 1., zeps - zval3 )194 zdiv1 = MAX( 1.e-4, ABS( zeps - 4. ) ) * SIGN( 1., zeps - 4. )195 zdiv2 = zeps - 2.196 zdiv3 = zeps - 3.197 zdiv4 = zeps - zval2198 zdiv5 = 2.* zeps - zval4199 zfm = xkr_frac**( 1.- zeps )200 zsm = xkr_frac**xkr_eta201 202 ! Part I : Coagulation dependant on turbulence203 ! ----------------------------------------------204 zagg1 = 0.163 * trb(ji,jj,jk,jpnum)**2 &205 & * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3) &206 & * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min) &207 & * (zfm*xkr_mass_max**2-xkr_mass_min**2) &208 & * (zeps-1.)**2/(zdiv2*zdiv3))209 zagg2 = 2*0.163*trb(ji,jj,jk,jpnum)**2*zfm &210 & * ((xkr_mass_max**3+3.*(xkr_mass_max**2 &211 & * xkr_mass_min*(zeps-1.)/zdiv2 &212 & + xkr_mass_max*xkr_mass_min**2*(zeps-1.)/zdiv3) &213 & + xkr_mass_min**3*(zeps-1)/zdiv1) &214 & - zfm*xkr_mass_max**3*(1.+3.*((zeps-1.) &215 & / (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1))216 217 zagg3 = 0.163*trb(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3218 219 ! Aggregation of small into large particles220 ! Part II : Differential settling221 ! ----------------------------------------------222 zagg4 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2* &223 & xkr_wsbio_min*(zeps-1.)**2 &224 & *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4) &225 & -(1.-zfm)/(zdiv*(zeps-1.)))- &226 & ((zfm*zfm*xkr_mass_max**2*zsm-xkr_mass_min**2) &227 & *xkr_eta)/(zdiv*zdiv3*zdiv5) )228 229 zagg5 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2 &230 & *(zeps-1.)*zfm*xkr_wsbio_min &231 & *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2) &232 & /zdiv3-(xkr_mass_min**2-zfm*zsm*xkr_mass_max**2) &233 & /zdiv)234 235 !236 ! Fractionnation by swimming organisms237 ! ------------------------------------238 zfract = 2.*3.141*0.125*trb(ji,jj,jk,jpmes)*12./0.12/0.06**3*trb(ji,jj,jk,jpnum) &239 & * (0.01/xkr_mass_min)**(1.-zeps)*0.1**2 &240 & * 10000.*xstep241 242 ! Aggregation of DOC to small particles243 ! --------------------------------------244 zaggdoc = 0.83 * trb(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) &245 & + 0.005 * 231. * trb(ji,jj,jk,jpdoc) * xstep * trb(ji,jj,jk,jpdoc)246 zaggdoc1 = 271. * trb(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) &247 & + 0.02 * 16706. * trb(ji,jj,jk,jppoc) * xstep * trb(ji,jj,jk,jpdoc)248 249 # if defined key_degrad250 zagg1 = zagg1 * facvol(ji,jj,jk)251 zagg2 = zagg2 * facvol(ji,jj,jk)252 zagg3 = zagg3 * facvol(ji,jj,jk)253 zagg4 = zagg4 * facvol(ji,jj,jk)254 zagg5 = zagg5 * facvol(ji,jj,jk)255 zaggdoc = zaggdoc * facvol(ji,jj,jk)256 zaggdoc1 = zaggdoc1 * facvol(ji,jj,jk)257 # endif258 zaggsh = ( zagg1 + zagg2 + zagg3 ) * rfact2 * xdiss(ji,jj,jk) / 1000.259 zaggsi = ( zagg4 + zagg5 ) * xstep / 10.260 zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi )261 !262 znumdoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )263 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc + zaggdoc1264 zfactn = trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn )265 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + ( zaggdoc + zaggdoc1 ) * zfactn266 zfactp = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn )267 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + ( zaggdoc + zaggdoc1 ) * zfactp268 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zfract + zaggdoc / xkr_massp - zagg269 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc1270 271 ENDIF272 END DO273 END DO274 END DO275 !276 IF(ln_ctl) THEN ! print mean trends (used for debugging)277 WRITE(charout, FMT="('agg')")278 CALL prt_ctl_trc_info(charout)279 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)280 ENDIF281 !282 CALL wrk_dealloc( jpi, jpj, jpk, znum3d )283 !284 IF( nn_timing == 1 ) CALL timing_stop('p5z_agg')285 !286 END SUBROUTINE p5z_agg287 288 #endif289 290 #else291 144 !!====================================================================== 292 145 !! Dummy module : No PISCES bio-model -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zlim.F90
r7617 r8003 384 384 zfuptk = 0.35 * zfvn 385 385 zrpho = 2.24 * trb(ji,jj,jk,jppch) / ( trb(ji,jj,jk,jpnpi) * rno3 * 15. + rtrn ) 386 zrass = (1. - 0. 4- zrpho - zfuptk)386 zrass = (1. - 0.3 - zrpho - zfuptk) 387 387 xqppmax(ji,jj,jk) = (zrpho + zfuptk) * 0.0128 * 16. + zrass * 1./ 10.9 * 16. + 0.13 388 388 xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn ) -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zmeso.F90
r7617 r8003 85 85 REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf 86 86 REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot 87 #if defined key_kriest88 REAL znumpoc89 #endif90 87 REAL(wp) :: zgrazdc, zgrazz, zgrazm, zgrazpof, zgrazcal, zfracal 91 88 REAL(wp) :: zgraznc, zgrazpoc, zgrazpon, zgrazpop, zgraznf, zgrazdf … … 119 116 DO ji = 1, jpi 120 117 zcompam = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 121 # if defined key_degrad122 zstep = xstep * facvol(ji,jj,jk)123 # else124 118 zstep = xstep 125 # endif126 119 zfact = zstep * tgfunc2(ji,jj,jk) * zcompam 127 120 … … 192 185 ! Mesozooplankton flux feeding on GOC 193 186 ! ---------------------------------- 194 # if ! defined key_kriest195 187 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) & 196 188 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) … … 198 190 zgrazffng = zgrazffeg * trb(ji,jj,jk,jpgon) / (trb(ji,jj,jk,jpgoc) + rtrn) 199 191 zgrazffpg = zgrazffeg * trb(ji,jj,jk,jpgop) / (trb(ji,jj,jk,jpgoc) + rtrn) 200 # endif201 192 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) & 202 193 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) … … 205 196 zgrazffpp = zgrazffep * trb(ji,jj,jk,jppop) / (trb(ji,jj,jk,jppoc) + rtrn) 206 197 ! 207 # if ! defined key_kriest208 198 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 209 199 … … 237 227 zgraztotp = zgrazdp + (zgrazz + zgrazm) * po4rat3 + zgraznp + zgrazpop & 238 228 & + zgrazffpp + zgrazffpg 239 240 # else241 zgraztotc = zgrazdc + zgrazz + zgrazm + zgraznc + zgrazpoc + zgrazffep242 243 ! Compute the proportion of filter feeders244 ! ----------------------------------------245 zproport = zgrazffep / ( zgraztotc + rtrn )246 zgrazffep = zproport * zgrazffep ; zgrazfffp = zproport * zgrazfffp247 zgrazffnp = zproport * zgrazffnp ; zgrazffpp = zproport * zgrazffpp248 zgraztotc = zgrazdc + zgrazz + zgrazm + zgraznc + zgrazpoc + zgrazffep249 zgraztotf = zgrazdf + zgraznf + (zgrazz + zgrazm) * ferat3 + zgrazpof + zgrazfffp250 zgraztotn = zgrazdn + (zgrazz + zgrazm) * no3rat3 + zgraznn + zgrazpon + zgrazffnp251 zgraztotp = zgrazdp + (zgrazz + zgrazm) * po4rat3 + zgraznp + zgrazpop + zgrazffpp252 # endif253 229 254 230 ! Total grazing ( grazing by microzoo is already computed in p5zmicro ) … … 355 331 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazdc * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 356 332 357 #if defined key_kriest358 znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )359 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zgrapoc360 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zgrazpon - zgrazffnp + zgrapon361 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zgrazpop - zgrazffpp + zgrapop362 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc * xkr_dmeso &363 & - zgrazffep * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn )364 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazfffp - zgrazpof &365 & + zgrapof366 zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + rtrn )367 zgrazcal = ( zgrazffep + zgrazpoc ) * (1. - part2) * zfracal368 #else369 333 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfracc 370 334 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfracc … … 381 345 zfracal = trb(ji,jj,jk,jpcal) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 382 346 zgrazcal = zgrazffeg * (1. - part2) * zfracal 383 #endif 347 384 348 ! calcite production 385 349 ! ------------------ -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zmicro.F90
r7617 r8003 114 114 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 115 115 zstep = xstep 116 # if defined key_degrad117 zstep = zstep * facvol(ji,jj,jk)118 # endif119 116 zfact = zstep * tgfunc2(ji,jj,jk) * zcompaz 120 117 … … 275 272 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc & 276 273 & - ztortz - zgrazz 274 IF (mig(ji) == 72 .and. mjg(jj) == 74 .and. jk == 1) THEN 275 write(0,*) 'plante ',zfood, zepsherv, zgraztotc * rday/rfact2/trn(ji,jj,jk,jpzoo), & 276 & zrespirc * rday/rfact2/trn(ji,jj,jk,jpzoo) 277 ENDIF 277 278 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc 278 279 tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) - zgraznn … … 298 299 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + po4rat3 * ztortz + zgrapop - zgrazpop 299 300 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * ztortz + zgrapof - zgrazpof 300 #if defined key_kriest301 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_dmicro302 #endif303 301 ! 304 302 ! calcite production … … 311 309 & + rno3 * zgraren 312 310 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 313 #if defined key_kriest314 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortz * xkr_dmicro &315 - zgrazpoc * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )316 #endif317 311 END DO 318 312 END DO -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zmort.F90
r7180 r8003 89 89 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-9 ), 0.e0 ) 90 90 zstep = xstep 91 # if defined key_degrad92 zstep = zstep * facvol(ji,jj,jk)93 # endif94 91 ! Squared mortality of Phyto similar to a sedimentation term during 95 92 ! blooms (Doney et al. 1996) … … 120 117 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 121 118 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 122 #if defined key_kriest123 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp124 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + zmortp * zfactn125 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + zmortp * zfactp126 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp * xkr_dnano + zrespp * xkr_ddiat127 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe128 #else129 119 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp 130 120 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + zmortp * zfactn … … 132 122 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortp 133 123 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe 134 #endif135 124 END DO 136 125 END DO … … 169 158 zcompaph = MAX( ( trb(ji,jj,jk,jppic) - 1e-9 ), 0.e0 ) 170 159 zstep = xstep 171 # if defined key_degrad172 zstep = zstep * facvol(ji,jj,jk)173 # endif174 160 ! Squared mortality of Phyto similar to a sedimentation term during 175 161 ! blooms (Doney et al. 1996) … … 192 178 tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) - zmortp * zfactch 193 179 tra(ji,jj,jk,jppfe) = tra(ji,jj,jk,jppfe) - zmortp * zfactfe 194 #if defined key_kriest195 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp196 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + zmortp * zfactn197 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + zmortp * zfactp198 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp * xkr_dnano + zrespp * xkr_ddiat199 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe200 #else201 180 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp 202 181 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + zmortp * zfactn … … 204 183 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe 205 184 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortp 206 #endif207 185 END DO 208 186 END DO … … 249 227 ! ------------------------------------------------------------- 250 228 zstep = xstep 251 # if defined key_degrad252 zstep = zstep * facvol(ji,jj,jk)253 # endif254 229 ! Phytoplankton squared mortality 255 230 ! ------------------------------- … … 277 252 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zmortp2 * zfactsi 278 253 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zmortp2 * zfactsi 279 #if defined key_kriest280 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp2281 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + zmortp2 * zfactn282 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + zmortp2 * zfactp283 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp2 * xkr_ddiat + zrespp2 * xkr_daggr284 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp2 * zfactfe285 #else286 254 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zrespp2 287 255 tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zrespp2 * zfactn … … 294 262 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortp2 295 263 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zrespp2 296 #endif297 264 END DO 298 265 END DO -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zpoc.F90
r7627 r8003 70 70 REAL(wp) :: zsizek, zsizek1, alphat, remint 71 71 REAL(wp) :: solgoc, zpoc 72 #if ! defined key_kriest73 72 REAL(wp) :: zofer2, zofer3 74 #endif75 73 REAL(wp) :: step, zrfact2 76 74 CHARACTER (len=25) :: charout … … 111 109 END DO 112 110 113 #if ! defined key_kriest114 111 ! ----------------------------------------------------------------------- 115 112 ! Lability parameterization. This is the big particles part (GOC) … … 203 200 DO ji = 1, jpi 204 201 zstep = xstep 205 # if defined key_degrad206 zstep = zstep * facvol(ji,jj,jk)207 # endif208 202 ! POC disaggregation by turbulence and bacterial activity. 209 203 ! -------------------------------------------------------- … … 380 374 END DO 381 375 END DO 382 #endif383 376 384 377 DO jk = 1, jpkm1 … … 386 379 DO ji = 1, jpi 387 380 zstep = xstep 388 # if defined key_degrad389 zstep = zstep * facvol(ji,jj,jk)390 # endif391 381 ! POC disaggregation by turbulence and bacterial activity. 392 382 ! -------------------------------------------------------- … … 397 387 zopop = xremipp / xremipc * zremip * trb(ji,jj,jk,jppop) 398 388 zofer = zremip * trb(ji,jj,jk,jpsfe) 399 #if defined key_kriest400 zopoc2 = xremipc * zremip * trb(ji,jj,jk,jpnum)401 #endif402 389 403 390 ! Update the appropriate tracers trends … … 411 398 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop 412 399 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 413 #if defined key_kriest414 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zopoc2415 #endif416 400 END DO 417 401 END DO -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zprod.F90
r7617 r8003 518 518 #endif 519 519 ENDIF 520 ELSE521 trc3d(:,:,:,jp_pcs0_3d + 4) = zprorcan(:,:,:) * zrfact2 * tmask(:,:,:)522 trc3d(:,:,:,jp_pcs0_3d + 5) = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:)523 trc3d(:,:,:,jp_pcs0_3d + 6) = zpronewn(:,:,:) * zrfact2 * tmask(:,:,:)524 trc3d(:,:,:,jp_pcs0_3d + 7) = zpronewd(:,:,:) * zrfact2 * tmask(:,:,:)525 trc3d(:,:,:,jp_pcs0_3d + 8) = zprosid(:,:,:) * zrfact2 * tmask(:,:,:)526 trc3d(:,:,:,jp_pcs0_3d + 9) = zprofed (:,:,:) * zrfact2 * tmask(:,:,:)527 # if ! defined key_kriest528 trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zrfact2 * tmask(:,:,:)529 # endif530 520 ENDIF 531 521 ! -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zrem.F90
r7627 r8003 137 137 DO ji = 1, jpi 138 138 zstep = xstep 139 # if defined key_degrad140 zstep = zstep * facvol(ji,jj,jk)141 # endif142 139 ! DOC ammonification. Depends on depth, phytoplankton biomass 143 140 ! and a limitation term which is supposed to be a parameterization … … 188 185 DO ji = 1, jpi 189 186 zstep = xstep 190 # if defined key_degrad191 zstep = zstep * facvol(ji,jj,jk)192 # endif193 187 ! NH4 nitrification to NO3. Ceased for oxygen concentrations 194 188 ! below 2 umol/L. Inhibited at strong light … … 226 220 & * biron(ji,jj,jk) / ( xkferb + biron(ji,jj,jk) ) & 227 221 & * zdepprod(ji,jj,jk) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 228 #if defined key_kriest229 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.05230 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.05231 zfebact(ji,jj,jk) = zbactfer * 0.15232 #else233 222 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.39 234 223 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.3 235 224 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.09 236 225 zfebact(ji,jj,jk) = zbactfer * 0.39 237 #endif238 226 END DO 239 227 END DO … … 254 242 DO ji = 1, jpi 255 243 zstep = xstep 256 # if defined key_degrad257 zstep = zstep * facvol(ji,jj,jk)258 # endif259 244 zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 260 245 zsatur = MAX( rtrn, ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zsed.F90
r7617 r8003 244 244 IF( tmask(ji,jj,1) == 1 ) THEN 245 245 ikt = mbkt(ji,jj) 246 # if defined key_kriest247 zflx = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) * 1E3 * 1E6 / 1E4248 # else249 246 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 250 247 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4 251 #endif252 248 zflx = LOG10( MAX( 1E-3, zflx ) ) 253 249 zo2 = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) … … 273 269 IF( tmask(ji,jj,1) == 1 ) THEN 274 270 ikt = mbkt(ji,jj) 275 # if defined key_kriest276 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwscal (ji,jj)277 zwork2(ji,jj) = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)278 # else279 271 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 280 272 zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 281 # endif282 273 ! For calcite, burial efficiency is made a function of saturation 283 274 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) … … 305 296 zws4 = zwsbio4(ji,jj) * zdep 306 297 zwsc = zwscal (ji,jj) * zdep 307 # if defined key_kriest308 zsiloss = trb(ji,jj,ikt,jpgsi) * zws4309 # else310 298 zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 311 # endif312 299 zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 313 300 ! … … 336 323 #endif 337 324 zrivno3 = 1. - zbureff(ji,jj) 338 # if ! defined key_kriest339 325 trb(ji,jj,ikt,jpgoc) = trb(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4 340 326 trb(ji,jj,ikt,jppoc) = trb(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 … … 351 337 trn(ji,jj,ikt,jpfep) = trn(ji,jj,ikt,jpfep) - trn(ji,jj,ikt,jpfep) * zwssfep 352 338 # endif 353 # else354 trb(ji,jj,ikt,jpnum) = trb(ji,jj,ikt,jpnum) - trb(ji,jj,ikt,jpnum) * zws4355 trb(ji,jj,ikt,jppoc) = trb(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3356 trb(ji,jj,ikt,jppon) = trb(ji,jj,ikt,jppon) - trb(ji,jj,ikt,jppon) * zws3357 trb(ji,jj,ikt,jppop) = trb(ji,jj,ikt,jppop) - trb(ji,jj,ikt,jppop) * zws3358 trb(ji,jj,ikt,jpsfe) = trb(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3359 zwstpop = trb(ji,jj,ikt,jppop) * zws3360 zwstpon = trb(ji,jj,ikt,jppon) * zws3361 zwstpoc = trb(ji,jj,ikt,jppoc) * zws3362 # if defined key_ligand363 trn(ji,jj,ikt,jpfep) = trn(ji,jj,ikt,jpfep) - trn(ji,jj,ikt,jpfep) * zwssfep364 # endif365 # endif366 339 367 340 #if ! defined key_sed … … 405 378 zlim = ( 1.- xdiano3 - xdianh4 ) 406 379 IF( zlim <= 0.1 ) zlim = 0.01 407 #if defined key_degrad408 zfact = zlim * rfact2 * facvol(ji,jj,jk)409 #else410 380 zfact = zlim * rfact2 411 #endif412 381 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 413 382 ztrpo4(ji,jj,jk) = trb(ji,jj,jk,jppo4) / ( 1E-6 + trb(ji,jj,jk,jppo4) ) -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zsink.F90
r6841 r8003 40 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkcal, sinksil !: CaCO3 and BSi sinking fluxes 41 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes 42 #if ! defined key_kriest43 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer2 !: Big iron sinking fluxes 44 #endif45 43 #if defined key_ligand 46 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfep !: Fep sinking fluxes … … 49 47 50 48 INTEGER :: ik100 51 52 #if defined key_kriest53 REAL(wp) :: xkr_sfact !: Sinking factor54 REAL(wp) :: xkr_stick !: Stickiness55 REAL(wp) :: xkr_nnano !: Nbr of cell in nano size class56 REAL(wp) :: xkr_ndiat !: Nbr of cell in diatoms size class57 REAL(wp) :: xkr_nmicro !: Nbr of cell in microzoo size class58 REAL(wp) :: xkr_nmeso !: Nbr of cell in mesozoo size class59 REAL(wp) :: xkr_naggr !: Nbr of cell in aggregates size class60 61 REAL(wp) :: xkr_frac62 63 REAL(wp), PUBLIC :: xkr_dnano !: Size of particles in nano pool64 REAL(wp), PUBLIC :: xkr_ddiat !: Size of particles in diatoms pool65 REAL(wp), PUBLIC :: xkr_dmicro !: Size of particles in microzoo pool66 REAL(wp), PUBLIC :: xkr_dmeso !: Size of particles in mesozoo pool67 REAL(wp), PUBLIC :: xkr_daggr !: Size of particles in aggregates pool68 REAL(wp), PUBLIC :: xkr_wsbio_min !: min vertical particle speed69 REAL(wp), PUBLIC :: xkr_wsbio_max !: max vertical particle speed70 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: xnumm !: maximum number of particles in aggregates72 #endif73 49 74 50 !!* Substitution … … 81 57 CONTAINS 82 58 83 #if ! defined key_kriest84 59 !!---------------------------------------------------------------------- 85 60 !! 'standard sinking parameterisation' ??? … … 308 283 END SUBROUTINE p5z_sink_init 309 284 310 #else311 !!----------------------------------------------------------------------312 !! 'Kriest sinking parameterisation' key_kriest ???313 !!----------------------------------------------------------------------314 315 SUBROUTINE p5z_sink ( kt, knt )316 !!---------------------------------------------------------------------317 !! *** ROUTINE p5z_sink ***318 !!319 !! ** Purpose : Compute vertical flux of particulate matter due to320 !! gravitational sinking - Kriest parameterization321 !!322 !! ** Method : - ???323 !!---------------------------------------------------------------------324 !325 INTEGER, INTENT(in) :: kt, knt326 !327 INTEGER :: ji, jj, jk, jit, niter1, niter2328 REAL(wp) :: znum , zeps, zfm, zgm, zsm, zfactn, zfactp329 REAL(wp) :: zdiv , zdiv1, zdiv2, zdiv3, zdiv4, zdiv5330 REAL(wp) :: zval1, zval2, zval3, zval4331 CHARACTER (len=25) :: charout332 REAL(wp), POINTER, DIMENSION(:,:,:) :: znum3d333 REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d334 REAL(wp), POINTER, DIMENSION(:,: ) :: zw2d335 !!---------------------------------------------------------------------336 !337 IF( nn_timing == 1 ) CALL timing_start('p5z_sink')338 !339 CALL wrk_alloc( jpi, jpj, jpk, znum3d )340 !341 ! Initialisation of variables used to compute Sinking Speed342 ! ---------------------------------------------------------343 344 znum3d(:,:,:) = 0.e0345 zval1 = 1. + xkr_zeta346 zval2 = 1. + xkr_zeta + xkr_eta347 zval3 = 1. + xkr_eta348 349 ! Computation of the vertical sinking speed : Kriest et Evans, 2000350 ! -----------------------------------------------------------------351 352 DO jk = 1, jpkm1353 DO jj = 1, jpj354 DO ji = 1, jpi355 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN356 znum = trb(ji,jj,jk,jppoc) / ( trb(ji,jj,jk,jpnum) + rtrn ) / xkr_massp357 ! -------------- To avoid sinking speed over 50 m/day -------358 znum = MIN( xnumm(jk), znum )359 znum = MAX( 1.1 , znum )360 znum3d(ji,jj,jk) = znum361 !------------------------------------------------------------362 zeps = ( zval1 * znum - 1. )/ ( znum - 1. )363 zfm = xkr_frac**( 1. - zeps )364 zgm = xkr_frac**( zval1 - zeps )365 zdiv = MAX( 1.e-4, ABS( zeps - zval2 ) ) * SIGN( 1., ( zeps - zval2 ) )366 zdiv1 = zeps - zval3367 wsbio3(ji,jj,jk) = xkr_wsbio_min * ( zeps - zval1 ) / zdiv &368 & - xkr_wsbio_max * zgm * xkr_eta / zdiv369 wsbio4(ji,jj,jk) = xkr_wsbio_min * ( zeps-1. ) / zdiv1 &370 & - xkr_wsbio_max * zfm * xkr_eta / zdiv1371 IF( znum == 1.1) wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk)372 ENDIF373 END DO374 END DO375 END DO376 377 wscal(:,:,:) = MAX( wsbio3(:,:,:), 30._wp )378 #if defined key_ligand379 wsfep (:,:,:) = wfep380 #endif381 382 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS383 ! -----------------------------------------384 385 sinking (:,:,:) = 0.e0386 sinkingn(:,:,:) = 0.e0387 sinkingp(:,:,:) = 0.e0388 sinking2(:,:,:) = 0.e0389 sinkcal (:,:,:) = 0.e0390 sinkfer (:,:,:) = 0.e0391 sinksil (:,:,:) = 0.e0392 #if defined key_ligand393 sinkfep(:,:,:) = 0.e0394 #endif395 396 ! Compute the sedimentation term using p4zsink2 for all the sinking particles397 ! -----------------------------------------------------398 399 niter1 = niter1max400 niter2 = niter2max401 402 DO jit = 1, niter1403 CALL p4z_sink2( wsbio3, sinking , jppoc, niter1 )404 CALL p4z_sink2( wsbio3, sinkingn, jppon, niter1 )405 CALL p4z_sink2( wsbio3, sinkingp, jppop, niter1 )406 CALL p4z_sink2( wsbio3, sinkfer , jpsfe, niter1 )407 CALL p4z_sink2( wscal , sinksil , jpgsi, niter1 )408 CALL p4z_sink2( wscal , sinkcal , jpcal, niter1 )409 #if defined key_ligand410 CALL p4z_sink2( wsfep , sinkfep , jpfep, niter1 )411 #endif412 END DO413 414 DO jit = 1, niter2415 CALL p4z_sink2( wsbio4, sinking2, jpnum, niter2 )416 END DO417 418 ! Total carbon export per year419 IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) &420 & t_oce_co2_exp = glob_sum( ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) )421 !422 IF( lk_iomput ) THEN423 IF( knt == nrdttrc ) THEN424 CALL wrk_alloc( jpi, jpj, zw2d )425 CALL wrk_alloc( jpi, jpj, jpk, zw3d )426 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s427 !428 IF( iom_use( "EPC100" ) ) THEN429 zw2d(:,:) = ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * zfact * tmask(:,:,1) ! Export of carbon at 100m430 CALL iom_put( "EPC100" , zw2d )431 ENDIF432 IF( iom_use( "EPFE100" ) ) THEN433 zw2d(:,:) = ( sinkfer(:,:,ik100) + sinkfer2(:,:,ik100) ) * zfact * tmask(:,:,1) ! Export of iron at 100m434 CALL iom_put( "EPFE100" , zw2d )435 ENDIF436 IF( iom_use( "EPCAL100" ) ) THEN437 zw2d(:,:) = sinkcal(:,:,ik100) * zfact * tmask(:,:,1) ! Export of calcite at 100m438 CALL iom_put( "EPCAL100" , zw2d )439 ENDIF440 IF( iom_use( "EPSI100" ) ) THEN441 zw2d(:,:) = sinksil(:,:,ik100) * zfact * tmask(:,:,1) ! Export of bigenic silica at 100m442 CALL iom_put( "EPSI100" , zw2d )443 ENDIF444 IF( iom_use( "EXPC" ) ) THEN445 zw3d(:,:,:) = ( sinking(:,:,:) + sinking2(:,:,:) ) * zfact * tmask(:,:,:) ! Export of carbon in the water column446 CALL iom_put( "EXPC" , zw3d )447 ENDIF448 IF( iom_use( "EXPFE" ) ) THEN449 zw3d(:,:,:) = ( sinkfer(:,:,:) + sinkfer2(:,:,:) ) * zfact * tmask(:,:,:) ! Export of iron450 CALL iom_put( "EXPFE" , zw3d )451 ENDIF452 IF( iom_use( "EXPCAL" ) ) THEN453 zw3d(:,:,:) = sinkcal(:,:,:) * zfact * tmask(:,:,:) ! Export of calcite454 CALL iom_put( "EXPCAL" , zw3d )455 ENDIF456 IF( iom_use( "EXPSI" ) ) THEN457 zw3d(:,:,:) = sinksil(:,:,:) * zfact * tmask(:,:,:) ! Export of bigenic silica458 CALL iom_put( "EXPSI" , zw3d )459 ENDIF460 IF( iom_use( "XNUM" ) ) THEN461 zw3d(:,:,:) = znum3d(:,:,:) * tmask(:,:,:) ! Number of particles on aggregats462 CALL iom_put( "XNUM" , zw3d )463 ENDIF464 IF( iom_use( "WSC" ) ) THEN465 zw3d(:,:,:) = wsbio3(:,:,:) * tmask(:,:,:) ! Sinking speed of carbon particles466 CALL iom_put( "WSC" , zw3d )467 ENDIF468 IF( iom_use( "WSN" ) ) THEN469 zw3d(:,:,:) = wsbio4(:,:,:) * tmask(:,:,:) ! Sinking speed of particles number470 CALL iom_put( "WSN" , zw3d )471 ENDIF472 IF( iom_use( "tcexp" ) ) CALL iom_put( "tcexp" , t_oce_co2_exp * zfact ) ! molC/s473 !474 CALL wrk_dealloc( jpi, jpj, zw2d )475 CALL wrk_dealloc( jpi, jpj, jpk, zw3d )476 ENDIF477 ELSE478 IF( ln_diatrc ) THEN479 zfact = 1.e3 * rfact2r480 trc2d(:,:,jp_pcs0_2d + 4) = sinking (:,:,ik100) * zfact * tmask(:,:,1)481 trc2d(:,:,jp_pcs0_2d + 5) = sinking2(:,:,ik100) * zfact * tmask(:,:,1)482 trc2d(:,:,jp_pcs0_2d + 6) = sinkfer (:,:,ik100) * zfact * tmask(:,:,1)483 trc2d(:,:,jp_pcs0_2d + 7) = sinkfer2(:,:,ik100) * zfact * tmask(:,:,1)484 trc2d(:,:,jp_pcs0_2d + 8) = sinksil (:,:,ik100) * zfact * tmask(:,:,1)485 trc2d(:,:,jp_pcs0_2d + 9) = sinkcal (:,:,ik100) * zfact * tmask(:,:,1)486 ENDIF487 ENDIF488 !489 IF(ln_ctl) THEN ! print mean trends (used for debugging)490 WRITE(charout, FMT="('sink')")491 CALL prt_ctl_trc_info(charout)492 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)493 ENDIF494 !495 CALL wrk_dealloc( jpi, jpj, jpk, znum3d )496 !497 IF( nn_timing == 1 ) CALL timing_stop('p5z_sink')498 !499 END SUBROUTINE p5z_sink500 501 502 SUBROUTINE p5z_sink_init503 !!----------------------------------------------------------------------504 !! *** ROUTINE p5z_sink_init ***505 !!506 !! ** Purpose : Initialization of sinking parameters507 !! Kriest parameterization only508 !!509 !! ** Method : Read the nampiskrs namelist and check the parameters510 !! called at the first timestep511 !!512 !! ** input : Namelist nampiskrs513 !!----------------------------------------------------------------------514 INTEGER :: jk, jn, kiter515 INTEGER :: ios ! Local integer output status for namelist read516 REAL(wp) :: znum, zdiv517 REAL(wp) :: zws, zwr, zwl,wmax, znummax518 REAL(wp) :: zmin, zmax, zl, zr, xacc519 !520 NAMELIST/nampiskrs/ xkr_sfact, xkr_stick , &521 & xkr_nnano, xkr_ndiat, xkr_nmicro, xkr_nmeso, xkr_naggr522 !!----------------------------------------------------------------------523 !524 IF( nn_timing == 1 ) CALL timing_start('p5z_sink_init')525 !526 527 REWIND( numnatp_ref ) ! Namelist nampiskrs in reference namelist : Pisces sinking Kriest528 READ ( numnatp_ref, nampiskrs, IOSTAT = ios, ERR = 901)529 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrs in reference namelist', lwp )530 531 REWIND( numnatp_cfg ) ! Namelist nampiskrs in configuration namelist : Pisces sinking Kriest532 READ ( numnatp_cfg, nampiskrs, IOSTAT = ios, ERR = 902 )533 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrs in configuration namelist', lwp )534 IF(lwm) WRITE ( numonp, nampiskrs )535 536 IF(lwp) THEN537 WRITE(numout,*)538 WRITE(numout,*) ' Namelist : nampiskrs'539 WRITE(numout,*) ' Sinking factor xkr_sfact = ', xkr_sfact540 WRITE(numout,*) ' Stickiness xkr_stick = ', xkr_stick541 WRITE(numout,*) ' Nbr of cell in nano size class xkr_nnano = ', xkr_nnano542 WRITE(numout,*) ' Nbr of cell in diatoms size class xkr_ndiat = ', xkr_ndiat543 WRITE(numout,*) ' Nbr of cell in microzoo size class xkr_nmicro = ', xkr_nmicro544 WRITE(numout,*) ' Nbr of cell in mesozoo size class xkr_nmeso = ', xkr_nmeso545 WRITE(numout,*) ' Nbr of cell in aggregates size class xkr_naggr = ', xkr_naggr546 ENDIF547 548 549 ! max and min vertical particle speed550 xkr_wsbio_min = xkr_sfact * xkr_mass_min**xkr_eta551 xkr_wsbio_max = xkr_sfact * xkr_mass_max**xkr_eta552 IF (lwp) WRITE(numout,*) ' max and min vertical particle speed ', xkr_wsbio_min, xkr_wsbio_max553 554 !555 ! effect of the sizes of the different living pools on particle numbers556 ! nano = 2um-20um -> mean size=6.32 um -> ws=2.596 -> xnum=xnnano=2.337557 ! diat and microzoo = 10um-200um -> 44.7 -> 8.732 -> xnum=xndiat=3.718558 ! mesozoo = 200um-2mm -> 632.45 -> 45.14 -> xnum=xnmeso=7.147559 ! aggregates = 200um-10mm -> 1414 -> 74.34 -> xnum=xnaggr=9.877560 ! doc aggregates = 1um561 ! ----------------------------------------------------------562 563 xkr_dnano = 1. / ( xkr_massp * xkr_nnano )564 xkr_ddiat = 1. / ( xkr_massp * xkr_ndiat )565 xkr_dmicro = 1. / ( xkr_massp * xkr_nmicro )566 xkr_dmeso = 1. / ( xkr_massp * xkr_nmeso )567 xkr_daggr = 1. / ( xkr_massp * xkr_naggr )568 569 !!---------------------------------------------------------------------570 !! 'key_kriest' ???571 !!---------------------------------------------------------------------572 ! COMPUTATION OF THE VERTICAL PROFILE OF MAXIMUM SINKING SPEED573 ! Search of the maximum number of particles in aggregates for each k-level.574 ! Bissection Method575 !--------------------------------------------------------------------576 IF (lwp) THEN577 WRITE(numout,*)578 WRITE(numout,*)' kriest : Compute maximum number of particles in aggregates'579 ENDIF580 581 xacc = 0.001_wp582 kiter = 50583 zmin = 1.10_wp584 zmax = xkr_mass_max / xkr_mass_min585 xkr_frac = zmax586 587 DO jk = 1,jpk588 zl = zmin589 zr = zmax590 wmax = 0.5 * fse3t(1,1,jk) * rday * float(niter1max) / rfact2591 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl592 znum = zl - 1.593 zwl = xkr_wsbio_min * xkr_zeta / zdiv &594 & - ( xkr_wsbio_max * xkr_eta * znum * &595 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &596 & - wmax597 598 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr599 znum = zr - 1.600 zwr = xkr_wsbio_min * xkr_zeta / zdiv &601 & - ( xkr_wsbio_max * xkr_eta * znum * &602 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &603 & - wmax604 iflag: DO jn = 1, kiter605 IF ( zwl == 0._wp ) THEN ; znummax = zl606 ELSEIF( zwr == 0._wp ) THEN ; znummax = zr607 ELSE608 znummax = ( zr + zl ) / 2.609 zdiv = xkr_zeta + xkr_eta - xkr_eta * znummax610 znum = znummax - 1.611 zws = xkr_wsbio_min * xkr_zeta / zdiv &612 & - ( xkr_wsbio_max * xkr_eta * znum * &613 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &614 & - wmax615 IF( zws * zwl < 0. ) THEN ; zr = znummax616 ELSE ; zl = znummax617 ENDIF618 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl619 znum = zl - 1.620 zwl = xkr_wsbio_min * xkr_zeta / zdiv &621 & - ( xkr_wsbio_max * xkr_eta * znum * &622 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &623 & - wmax624 625 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr626 znum = zr - 1.627 zwr = xkr_wsbio_min * xkr_zeta / zdiv &628 & - ( xkr_wsbio_max * xkr_eta * znum * &629 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &630 & - wmax631 !632 IF ( ABS ( zws ) <= xacc ) EXIT iflag633 !634 ENDIF635 !636 END DO iflag637 638 xnumm(jk) = znummax639 IF (lwp) WRITE(numout,*) ' jk = ', jk, ' wmax = ', wmax,' xnum max = ', xnumm(jk)640 !641 END DO642 !643 ik100 = 10 ! last level where depth less than 100 m644 DO jk = jpkm1, 1, -1645 IF( gdept_1d(jk) > 100. ) ik100 = jk - 1646 END DO647 IF (lwp) WRITE(numout,*)648 IF (lwp) WRITE(numout,*) ' Level corresponding to 100m depth ', ik100 + 1649 IF (lwp) WRITE(numout,*)650 !651 t_oce_co2_exp = 0._wp652 !653 IF( nn_timing == 1 ) CALL timing_stop('p5z_sink_init')654 !655 END SUBROUTINE p5z_sink_init656 657 #endif658 659 285 SUBROUTINE p4z_sink2( pwsink, psinkflx, jp_tra, kiter ) 660 286 !!--------------------------------------------------------------------- … … 782 408 783 409 & sinkcal(jpi,jpj,jpk) , sinksil (jpi,jpj,jpk) , & 784 #if defined key_kriest785 & xnumm(jpk) , &786 #else787 410 & sinkfer2(jpi,jpj,jpk) , & 788 #endif789 411 #if defined key_ligand 790 412 & wsfep(jpi,jpj,jpk) , sinkfep(jpi,jpj,jpk) , & -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zsms.F90
r7190 r8003 72 72 INTEGER :: ji,jj,jk,knt, jn, jl 73 73 REAL(wp) :: ztra 74 #if defined key_kriest75 REAL(wp) :: zcoef1, zcoef276 #endif77 74 CHARACTER (len=25) :: charout 78 75 !!--------------------------------------------------------------------- … … 166 163 ENDIF 167 164 END DO 168 169 #if defined key_kriest170 !171 zcoef1 = 1.e0 / xkr_massp172 zcoef2 = 1.e0 / xkr_massp / 1.1173 DO jk = 1,jpkm1174 trb(:,:,jk,jpnum) = MAX( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk) )175 trb(:,:,jk,jpnum) = MIN( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2 )176 END DO177 !178 #endif179 165 ! 180 166 ! … … 213 199 !! ** input : file 'namelist.trc.s' containing the following 214 200 !! namelist: natext, natbio, natsms 215 !! natkriest ("key_kriest")216 201 !!---------------------------------------------------------------------- 217 202 #if defined key_ligand … … 221 206 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, no3rat3, po4rat3, wsbio2, & 222 207 & wsbio2max, wsbio2scale, niter1max, niter2max 223 #endif224 #if defined key_kriest225 NAMELIST/nampiskrp/ xkr_eta, xkr_zeta, xkr_ncontent, xkr_mass_min, xkr_mass_max226 208 #endif 227 209 NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp … … 257 239 ENDIF 258 240 259 #if defined key_kriest260 261 ! ! nampiskrp : kriest parameters262 ! ! -----------------------------263 REWIND( numnatp_ref ) ! Namelist nampiskrp in reference namelist : Pisces Kriest264 READ ( numnatp_ref, nampiskrp, IOSTAT = ios, ERR = 903)265 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in reference namelist', lwp )266 267 REWIND( numnatp_cfg ) ! Namelist nampiskrp in configuration namelist : Pisces Kriest268 READ ( numnatp_cfg, nampiskrp, IOSTAT = ios, ERR = 904 )269 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in configuration namelist', lwp )270 IF(lwm) WRITE ( numonp, nampiskrp )271 272 IF(lwp) THEN273 WRITE(numout,*)274 WRITE(numout,*) ' Namelist : nampiskrp'275 WRITE(numout,*) ' Sinking exponent xkr_eta = ', xkr_eta276 WRITE(numout,*) ' N content exponent xkr_zeta = ', xkr_zeta277 WRITE(numout,*) ' N content factor xkr_ncontent = ', xkr_ncontent278 WRITE(numout,*) ' Minimum mass for Aggregates xkr_mass_min = ', xkr_mass_min279 WRITE(numout,*) ' Maximum mass for Aggregates xkr_mass_max = ', xkr_mass_max280 WRITE(numout,*)281 ENDIF282 283 284 ! Computation of some variables285 xkr_massp = xkr_ncontent * 7.625 * xkr_mass_min**xkr_zeta286 287 #endif288 289 241 REWIND( numnatp_ref ) ! Namelist nampisdmp in reference namelist : Pisces damping 290 242 READ ( numnatp_ref, nampisdmp, IOSTAT = ios, ERR = 905) … … 492 444 & + (trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)) * no3rat3 & 493 445 & + trn(:,:,:,jppon) + trn(:,:,:,jpnpi) & 494 #if ! defined key_kriest495 446 & + trn(:,:,:,jpgon) & 496 #endif497 447 & + trn(:,:,:,jpdon) ) * cvol(:,:,:) ) 498 448 ! … … 506 456 & + (trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)) * po4rat3 & 507 457 & + trn(:,:,:,jppop) + trn(:,:,:,jpppi) & 508 #if ! defined key_kriest509 458 & + trn(:,:,:,jpgop) & 510 #endif511 459 & + trn(:,:,:,jpdop) ) * cvol(:,:,:) ) 512 460 po4budget = po4budget / areatot … … 535 483 ferbudget = glob_sum( ( trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) & 536 484 & + trn(:,:,:,jpdfe) + trn(:,:,:,jppfe) & 537 #if ! defined key_kriest538 485 & + trn(:,:,:,jpbfe) & 539 #endif540 486 #if defined key_ligand 541 487 & + trn(:,:,:,jpfep) &
Note: See TracChangeset
for help on using the changeset viewer.