Changeset 8003
- Timestamp:
- 2017-05-09T12:14:45+02:00 (8 years ago)
- Location:
- branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES
- Files:
-
- 34 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zagg.F90
r7180 r8003 35 35 CONTAINS 36 36 37 #if ! defined key_kriest38 37 !!---------------------------------------------------------------------- 39 38 !! 'standard parameterisation' ??? … … 66 65 ! 67 66 zstep = xstep 68 # if defined key_degrad69 zstep = zstep * facvol(ji,jj,jk)70 # endif71 67 zfact = zstep * xdiss(ji,jj,jk) 72 68 ! Part I : Coagulation dependent on turbulence … … 121 117 122 118 #else 123 !!----------------------------------------------------------------------124 !! 'Kriest parameterisation' key_kriest ???125 !!----------------------------------------------------------------------126 127 SUBROUTINE p4z_agg ( kt, knt )128 !!---------------------------------------------------------------------129 !! *** ROUTINE p4z_agg ***130 !!131 !! ** Purpose : Compute aggregation of particles132 !!133 !! ** Method : - ???134 !!---------------------------------------------------------------------135 !136 INTEGER, INTENT(in) :: kt, knt137 !138 INTEGER :: ji, jj, jk139 REAL(wp) :: zagg1, zagg2, zagg3, zagg4, zagg5, zfract, zaggsi, zaggsh140 REAL(wp) :: zagg , zaggdoc, zaggdoc1, znumdoc141 REAL(wp) :: znum , zeps, zfm, zgm, zsm142 REAL(wp) :: zdiv , zdiv1, zdiv2, zdiv3, zdiv4, zdiv5143 REAL(wp) :: zval1, zval2, zval3, zval4144 REAL(wp) :: zfact145 CHARACTER (len=25) :: charout146 !!---------------------------------------------------------------------147 !148 IF( nn_timing == 1 ) CALL timing_start('p4z_agg')149 !150 ! Exchange between organic matter compartments due to coagulation/disaggregation151 ! ---------------------------------------------------152 153 zval1 = 1. + xkr_zeta154 zval2 = 1. + xkr_eta155 zval3 = 3. + xkr_eta156 zval4 = 4. + xkr_eta157 158 DO jk = 1,jpkm1159 DO jj = 1,jpj160 DO ji = 1,jpi161 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN162 163 znum = trb(ji,jj,jk,jppoc)/(trb(ji,jj,jk,jpnum)+rtrn) / xkr_massp164 !-------------- To avoid sinking speed over 50 m/day -------165 znum = min(xnumm(jk),znum)166 znum = MAX( 1.1,znum)167 !------------------------------------------------------------168 zeps = ( zval1 * znum - 1.) / ( znum - 1.)169 zdiv = MAX( 1.e-4, ABS( zeps - zval3) ) * SIGN( 1., zeps - zval3 )170 zdiv1 = MAX( 1.e-4, ABS( zeps - 4. ) ) * SIGN( 1., zeps - 4. )171 zdiv2 = zeps - 2.172 zdiv3 = zeps - 3.173 zdiv4 = zeps - zval2174 zdiv5 = 2.* zeps - zval4175 zfm = xkr_frac**( 1.- zeps )176 zsm = xkr_frac**xkr_eta177 178 ! Part I : Coagulation dependant on turbulence179 ! ----------------------------------------------180 181 zagg1 = 0.163 * trb(ji,jj,jk,jpnum)**2 &182 & * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3) &183 & * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min) &184 & * (zfm*xkr_mass_max**2-xkr_mass_min**2) &185 & * (zeps-1.)**2/(zdiv2*zdiv3))186 zagg2 = 2*0.163*trb(ji,jj,jk,jpnum)**2*zfm* &187 & ((xkr_mass_max**3+3.*(xkr_mass_max**2 &188 & *xkr_mass_min*(zeps-1.)/zdiv2 &189 & +xkr_mass_max*xkr_mass_min**2*(zeps-1.)/zdiv3) &190 & +xkr_mass_min**3*(zeps-1)/zdiv1) &191 & -zfm*xkr_mass_max**3*(1.+3.*((zeps-1.)/ &192 & (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1))193 194 zagg3 = 0.163*trb(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3195 196 ! Aggregation of small into large particles197 ! Part II : Differential settling198 ! ----------------------------------------------199 200 zagg4 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2* &201 & xkr_wsbio_min*(zeps-1.)**2 &202 & *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4) &203 & -(1.-zfm)/(zdiv*(zeps-1.)))- &204 & ((zfm*zfm*xkr_mass_max**2*zsm-xkr_mass_min**2) &205 & *xkr_eta)/(zdiv*zdiv3*zdiv5) )206 207 zagg5 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2 &208 & *(zeps-1.)*zfm*xkr_wsbio_min &209 & *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2) &210 & /zdiv3-(xkr_mass_min**2-zfm*zsm*xkr_mass_max**2) &211 & /zdiv)212 213 !214 ! Fractionnation by swimming organisms215 ! ------------------------------------216 217 zfract = 2.*3.141*0.125*trb(ji,jj,jk,jpmes)*12./0.12/0.06**3*trb(ji,jj,jk,jpnum) &218 & * (0.01/xkr_mass_min)**(1.-zeps)*0.1**2 &219 & * 10000.*xstep220 221 ! Aggregation of DOC to small particles222 ! --------------------------------------223 224 zaggdoc = 0.83 * trb(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) &225 & + 0.005 * 231. * trb(ji,jj,jk,jpdoc) * xstep * trb(ji,jj,jk,jpdoc)226 zaggdoc1 = 271. * trb(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) &227 & + 0.02 * 16706. * trb(ji,jj,jk,jppoc) * xstep * trb(ji,jj,jk,jpdoc)228 229 # if defined key_degrad230 zagg1 = zagg1 * facvol(ji,jj,jk)231 zagg2 = zagg2 * facvol(ji,jj,jk)232 zagg3 = zagg3 * facvol(ji,jj,jk)233 zagg4 = zagg4 * facvol(ji,jj,jk)234 zagg5 = zagg5 * facvol(ji,jj,jk)235 zaggdoc = zaggdoc * facvol(ji,jj,jk)236 zaggdoc1 = zaggdoc1 * facvol(ji,jj,jk)237 # endif238 zaggsh = ( zagg1 + zagg2 + zagg3 ) * rfact2 * xdiss(ji,jj,jk) / 1000.239 zaggsi = ( zagg4 + zagg5 ) * xstep / 10.240 zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi )241 !242 znumdoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )243 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc + zaggdoc1244 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zfract + zaggdoc / xkr_massp - zagg245 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc1246 247 ENDIF248 END DO249 END DO250 END DO251 !252 IF(ln_ctl) THEN ! print mean trends (used for debugging)253 WRITE(charout, FMT="('agg')")254 CALL prt_ctl_trc_info(charout)255 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)256 ENDIF257 !258 IF( nn_timing == 1 ) CALL timing_stop('p4z_agg')259 !260 END SUBROUTINE p4z_agg261 262 #endif263 264 #else265 119 !!====================================================================== 266 120 !! Dummy module : No PISCES bio-model -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r7617 r8003 72 72 REAL(wp) :: zdenom1, zscave, zaggdfea, zaggdfeb, zcoag 73 73 REAL(wp) :: ztrc, zdust 74 #if ! defined key_kriest75 74 REAL(wp) :: zdenom2 76 #endif77 75 REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig, precip 78 76 REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP … … 274 272 DO ji = 1, jpi 275 273 zstep = xstep 276 # if defined key_degrad277 zstep = zstep * facvol(ji,jj,jk)278 # endif279 274 ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water. 280 275 ! This parameterization assumes a simple second order kinetics (k[Particles][Fe]). … … 303 298 ENDIF 304 299 ENDIF 305 #if defined key_kriest306 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6307 #else308 300 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 309 #endif310 301 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s 311 302 zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc … … 316 307 ! --------------------------------------------------------- 317 308 zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b 318 #if ! defined key_kriest319 309 zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b 320 #endif321 310 322 311 ! Increased scavenging for very high iron concentrations found near the coasts … … 338 327 zaggdfea = zlam1a * zstep * zfecollc 339 328 ! 340 #if defined key_kriest341 zaggdfeb = 0.342 #else343 329 zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 344 330 zaggdfeb = zlam1b * zstep * zfecollc 345 #endif346 331 ! precipitation of Fe3+, creation of nanoparticles 347 332 precip(ji,jj,jk) = max( 0., (zfeequi - fe3sol) ) * kfep * zstep … … 350 335 & - zcoag - precip(ji,jj,jk) 351 336 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea 352 #if ! defined key_kriest353 337 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb 354 #endif355 338 zscav3d(ji,jj,jk) = zscave 356 339 zcoll3d(ji,jj,jk) = zaggdfea + zaggdfeb 357 340 #if defined key_ligand 358 341 zaggliga = zlam1a * zstep * zligco 359 # if defined key_kriest360 zaggligb = 0.361 # else362 342 zaggligb = zlam1b * zstep * zligco 363 # endif364 343 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk) 365 344 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r6966 r8003 158 158 zkgwan = 0.251 * zws 159 159 zkgwan = zkgwan * xconv * ( 1.- fr_i(ji,jj) ) * tmask(ji,jj,1) 160 # if defined key_degrad161 zkgwan = zkgwan * facvol(ji,jj,1)162 #endif163 160 ! compute gas exchange for CO2 and O2 164 161 zkgco2(ji,jj) = zkgwan * SQRT( 660./ zsch_co2 ) … … 227 224 ! 228 225 CALL wrk_dealloc( jpi, jpj, zw2d ) 229 ELSE230 IF( ln_diatrc ) THEN231 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) * rfact2r232 trc2d(:,:,jp_pcs0_2d + 1) = zoflx(:,:) * 1000 * tmask(:,:,1)233 trc2d(:,:,jp_pcs0_2d + 2) = zkgco2(:,:) * tmask(:,:,1)234 trc2d(:,:,jp_pcs0_2d + 3) = ( zpco2atm(:,:) - zh2co3(:,:) / ( chemc(:,:,1) + rtrn ) ) * tmask(:,:,1)235 ENDIF236 226 ENDIF 237 227 ! -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zligand.F90
r7627 r8003 78 78 ! --------------------------------------------------------- 79 79 zstep = xstep 80 # if defined key_degrad81 zstep = zstep * facvol(ji,jj,jk)82 # endif83 80 zstep2 = zstep / 365. ! per year 84 81 ! production from remineralisation of organic matter -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r7617 r8003 120 120 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 121 121 zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 122 # if defined key_degrad123 zdispot = zdispot * facvol(ji,jj,jk)124 # endif125 122 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 126 123 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION … … 144 141 CALL iom_put( "AOU" , MAX(0., zwork(:,:,:) ) ) 145 142 ENDIF 146 ELSE147 IF( ln_diatrc ) THEN148 trc3d(:,:,:,jp_pcs0_3d ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:)149 trc3d(:,:,:,jp_pcs0_3d + 1) = zco3(:,:,:) * tmask(:,:,:)150 trc3d(:,:,:,jp_pcs0_3d + 2) = zco3sat(:,:,:) * tmask(:,:,:)151 ENDIF152 143 ENDIF 153 144 ! -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r7617 r8003 76 76 REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf 77 77 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz2, zgrasrat, zgrasratn 78 #if defined key_kriest79 REAL znumpoc80 #endif81 78 REAL(wp) :: zrespz2, ztortz2, zgrazd, zgrazz, zgrazpof 82 79 REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 83 80 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 81 REAL(wp) :: zbeta, zepsherf 84 82 CHARACTER (len=25) :: charout 85 83 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo2 … … 104 102 DO ji = 1, jpi 105 103 zcompam = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 106 # if defined key_degrad107 zstep = xstep * facvol(ji,jj,jk)108 # else109 104 zstep = xstep 110 # endif111 105 zfact = zstep * tgfunc2(ji,jj,jk) * zcompam 112 106 … … 148 142 ! ---------------------------------- 149 143 ! ---------------------------------- 150 # if ! defined key_kriest151 144 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) & 152 145 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 153 146 zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 154 # endif155 147 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) & 156 148 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 157 149 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 158 150 ! 159 # if ! defined key_kriest160 151 zgraztot = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 161 152 ! Compute the proportion of filter feeders … … 179 170 & + zgrazpoc + zgrazffep + zgrazffeg 180 171 zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg 181 # else182 zgraztot = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep183 ! Compute the proportion of filter feeders184 zproport = zgrazffep / ( zgraztot + rtrn )185 zgrazffep = zproport * zgrazffep186 zgrazfffp = zproport * zgrazfffp187 zgraztot = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep188 zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk) + zgrazpoc + zgrazffep189 zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp190 # endif191 172 192 173 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) … … 198 179 zgrasratn = ( zgraztotn +rtrn )/ ( zgraztot + rtrn ) 199 180 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3) 200 zepsherv = zepshert * MIN( epsher2, (1. - unass2) * zgrasrat / ferat3, (1. - unass2) * zgrasratn ) 181 zbeta = 1./ (epsher2 - 0.2) 182 zepsherf = 0.2 + 1./ (zbeta + 0.04 * 12. * zfood *1E6 ) 183 zepsherv = zepshert * MIN( zepsherf, (1. - unass2) * zgrasrat / ferat3, (1. - unass2) * zgrasratn ) 201 184 zgrarem2 = zgraztot * ( 1. - zepsherv - unass2 ) & 202 185 & + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz2 … … 232 215 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 233 216 234 #if defined key_kriest235 znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )236 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2237 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso &238 & + zmortzgoc * xkr_dmeso - zgrazffep * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn )239 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortzgoc - zgrazfffp - zgrazpof &240 & + zgraztotf * unass2241 zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + rtrn )242 zgrazcal = ( zgrazffep + zgrazpoc ) * (1. - part2) * zfracal243 #else244 217 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 245 218 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac … … 253 226 zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jpgoc) + rtrn ) 254 227 zgrazcal = zgrazffeg * (1. - part2) * zfracal 255 #endif256 228 257 229 ! calcite production -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r7617 r8003 78 78 REAL(wp) :: zgrazp, zgrazm, zgrazsd 79 79 REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 80 REAL(wp) :: zbeta, zepsherf 80 81 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo 81 82 #if defined key_ligand … … 99 100 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 100 101 zstep = xstep 101 # if defined key_degrad102 zstep = zstep * facvol(ji,jj,jk)103 # endif104 102 zfact = zstep * tgfunc2(ji,jj,jk) * zcompaz 105 103 … … 146 144 zgrasratn = ( zgraztotn + rtrn ) / ( zgraztot + rtrn ) 147 145 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3) 148 zepsherv = zepshert * MIN( epsher, (1. - unass) * zgrasrat / ferat3, (1. - unass) * zgrasratn ) 146 zbeta = 1./ (epsher - 0.2) 147 zepsherf = 0.2 + 1./ (zbeta + 0.04 * 12. * zfood * 1E6 ) 148 zepsherv = zepshert * MIN( zepsherf, (1. - unass) * zgrasrat / ferat3, (1. - unass) * zgrasratn ) 149 149 zgrafer = zgraztot * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv ) 150 150 zgrarem = zgraztot * ( 1. - zepsherv - unass ) … … 169 169 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 170 170 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 171 #if defined key_kriest 172 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_dmicro 173 #endif 171 174 172 ! Update the arrays TRA which contain the biological sources and sinks 175 173 ! -------------------------------------------------------------------- … … 197 195 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 198 196 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 199 #if defined key_kriest200 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zmortz * xkr_dmicro &201 - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )202 #endif203 197 END DO 204 198 END DO -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90
r7180 r8003 87 87 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 88 88 zstep = xstep 89 # if defined key_degrad90 zstep = zstep * facvol(ji,jj,jk)91 # endif92 89 ! When highly limited by macronutrients, very small cells 93 90 ! dominate the community. As a consequence, aggregation … … 121 118 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 122 119 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 123 #if defined key_kriest124 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp125 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp * xkr_dnano + zrespp * xkr_ddiat126 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe127 #else128 120 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfracal * zmortp 129 121 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ( 1. - zfracal ) * zmortp … … 132 124 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ( 1. - zfracal ) * zmortp * zfactfe 133 125 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zfracal * zmortp * zfactfe 134 #endif135 126 END DO 136 127 END DO … … 181 172 ! ------------------------------------------------------------ 182 173 zstep = xstep 183 # if defined key_degrad184 zstep = zstep * facvol(ji,jj,jk)185 # endif186 174 ! Phytoplankton respiration 187 175 ! ------------------------ … … 206 194 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zmortp2 * zfactsi 207 195 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zmortp2 * zfactsi 208 #if defined key_kriest209 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp2210 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp2 * xkr_ddiat + zrespp2 * xkr_daggr211 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp2 * zfactfe212 #else213 196 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zrespp2 + 0.5 * ztortp2 214 197 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + 0.5 * ztortp2 … … 217 200 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 0.5 * ztortp2 * zfactfe 218 201 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ( zrespp2 + 0.5 * ztortp2 ) * zfactfe 219 #endif220 202 END DO 221 203 END DO -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r6966 r8003 251 251 IF( iom_use( "PAR" ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 252 252 ENDIF 253 ELSE254 IF( ln_diatrc ) THEN ! save output diagnostics255 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1)256 trc3d(:,:,:,jp_pcs0_3d + 3) = etot(:,:,:) * tmask(:,:,:)257 ENDIF258 253 ENDIF 259 254 ! -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zpoc.F90
r7627 r8003 65 65 REAL(wp) :: zremip, zremig, zdep, zorem, zorem2, zofer 66 66 REAL(wp) :: zsizek, zsizek1, alphat, remint, solgoc, zpoc 67 #if ! defined key_kriest68 67 REAL(wp) :: zofer2, zofer3 69 #endif70 68 REAL(wp) :: zstep, zrfact2 71 69 CHARACTER (len=25) :: charout … … 108 106 END DO 109 107 110 #if ! defined key_kriest111 108 ! ----------------------------------------------------------------------- 112 109 ! Lability parameterization. This is the big particles part (GOC) … … 200 197 DO ji = 1, jpi 201 198 zstep = xstep 202 # if defined key_degrad203 zstep = zstep * facvol(ji,jj,jk)204 # endif205 199 ! POC disaggregation by turbulence and bacterial activity. 206 200 ! -------------------------------------------------------- … … 371 365 END DO 372 366 END DO 373 #endif374 367 375 368 … … 379 372 IF (tmask(ji,jj,jk) == 1.) THEN 380 373 zstep = xstep 381 # if defined key_degrad382 zstep = zstep * facvol(ji,jj,jk)383 # endif384 374 ! POC disaggregation by turbulence and bacterial activity. 385 375 ! -------------------------------------------------------- … … 387 377 zorem = zremip * trb(ji,jj,jk,jppoc) 388 378 zofer = zremip * trb(ji,jj,jk,jpsfe) 389 #if defined key_kriest390 zorem2 = zremip * trb(ji,jj,jk,jpnum)391 #endif392 379 393 380 ! Update the appropriate tracers trends … … 399 386 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 400 387 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zorem 401 #if defined key_kriest402 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zorem2403 #endif404 388 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 405 389 -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r7617 r8003 488 488 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 489 489 ENDIF 490 ELSE 491 IF( ln_diatrc ) THEN 492 zfact = 1.e+3 * rfact2r 493 trc3d(:,:,:,jp_pcs0_3d + 4) = zprorcan(:,:,:) * zfact * tmask(:,:,:) 494 trc3d(:,:,:,jp_pcs0_3d + 5) = zprorcad(:,:,:) * zfact * tmask(:,:,:) 495 trc3d(:,:,:,jp_pcs0_3d + 6) = zpronewn(:,:,:) * zfact * tmask(:,:,:) 496 trc3d(:,:,:,jp_pcs0_3d + 7) = zpronewd(:,:,:) * zfact * tmask(:,:,:) 497 trc3d(:,:,:,jp_pcs0_3d + 8) = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) 498 trc3d(:,:,:,jp_pcs0_3d + 9) = zprofed (:,:,:) * zfact * tmask(:,:,:) 499 # if ! defined key_kriest 500 trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zfact * tmask(:,:,:) 501 # endif 502 ENDIF 503 ENDIF 490 ENDIF 504 491 505 492 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r7627 r8003 80 80 REAL(wp), POINTER, DIMENSION(:,: ) :: ztempbac 81 81 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zdepprod, zdepeff, zfacsi, zfacsib 82 REAL(wp), POINTER, DIMENSION(:,:,:) :: znitr, zolimi, zfe cbact82 REAL(wp), POINTER, DIMENSION(:,:,:) :: znitr, zolimi, zfebact 83 83 !!--------------------------------------------------------------------- 84 84 ! … … 95 95 ! Initialisation of temprary arrys 96 96 zdepprod(:,:,:) = 1._wp 97 zdepeff (:,:,:) = 0. 3_wp97 zdepeff (:,:,:) = 0.4_wp 98 98 ztempbac(:,:) = 0._wp 99 99 zfebact (:,:,:) = 0._wp … … 117 117 zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 118 118 zdepprod(ji,jj,jk) = zdepmin**0.273 119 zdepeff (ji,jj,jk) = 0.3 * zdepmin**0.3119 ! zdepeff (ji,jj,jk) = 0.3 * zdepmin**0.3 120 120 ENDIF 121 121 END DO … … 139 139 DO ji = 1, jpi 140 140 zstep = xstep 141 # if defined key_degrad142 zstep = zstep * facvol(ji,jj,jk)143 # endif144 141 ! DOC ammonification. Depends on depth, phytoplankton biomass 145 142 ! and a limitation term which is supposed to be a parameterization … … 177 174 DO ji = 1, jpi 178 175 zstep = xstep 179 # if defined key_degrad180 zstep = zstep * facvol(ji,jj,jk)181 # endif182 176 ! NH4 nitrification to NO3. Ceased for oxygen concentrations 183 177 ! below 2 umol/L. Inhibited at strong light … … 214 208 & * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) ) & 215 209 & * zdepprod(ji,jj,jk) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 216 #if defined key_kriest217 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.15218 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.15219 zfebact(ji,jj,jk) = zbactfer * 0.15220 #else221 210 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.39 222 211 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.3 223 212 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.09 224 213 zfebact(ji,jj,jk) = zbactfer * 0.39 225 #endif226 214 END DO 227 215 END DO … … 242 230 DO ji = 1, jpi 243 231 zstep = xstep 244 # if defined key_degrad245 zstep = zstep * facvol(ji,jj,jk)246 # endif247 232 zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 248 233 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/P4Z/p4zsbc.F90
r7617 r8003 476 476 END DO 477 477 IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 478 ii0 = 17 6 ; ii1 = 176! Southern Island : Kerguelen479 ij0 = 3 7 ; ij1 = 37; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp478 ii0 = 177 ; ii1 = 177 ! Southern Island : Kerguelen 479 ij0 = 38 ; ij1 = 38 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 480 480 ! 481 481 ii0 = 119 ; ii1 = 119 ! South Georgia 482 ij0 = 29 ; ij1 = 29 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 483 ! 484 ii0 = 111 ; ii1 = 111 ! Falklands 485 ij0 = 35 ; ij1 = 35 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 486 ! 487 ii0 = 168 ; ii1 = 168 ! Crozet 482 ij0 = 28 ; ij1 = 28 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 483 ! 484 ii0 = 167 ; ii1 = 167 ! Crozet 488 485 ij0 = 40 ; ij1 = 40 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 489 486 ! … … 491 488 ij0 = 28 ; ij1 = 28 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 492 489 ! 493 ii0 = 14 0 ; ii1 = 140! Bouvet Island490 ii0 = 144 ; ii1 = 144 ! Bouvet Island 494 491 ij0 = 33 ; ij1 = 33 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 495 492 ! -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r7617 r8003 243 243 IF( tmask(ji,jj,1) == 1 ) THEN 244 244 ikt = mbkt(ji,jj) 245 # if defined key_kriest246 zflx = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) * 1E3 * 1E6 / 1E4247 # else248 245 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 249 246 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4 250 #endif251 247 zflx = LOG10( MAX( 1E-3, zflx ) ) 252 248 zo2 = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) … … 272 268 IF( tmask(ji,jj,1) == 1 ) THEN 273 269 ikt = mbkt(ji,jj) 274 # if defined key_kriest275 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwscal (ji,jj)276 zwork2(ji,jj) = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)277 # else278 270 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 279 271 zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 280 # endif281 272 ! For calcite, burial efficiency is made a function of saturation 282 273 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) … … 304 295 zws4 = zwsbio4(ji,jj) * zdep 305 296 zwsc = zwscal (ji,jj) * zdep 306 # if defined key_kriest307 zsiloss = trb(ji,jj,ikt,jpgsi) * zws4308 # else309 297 zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 310 # endif311 298 zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 312 299 ! … … 336 323 #endif 337 324 zrivno3 = 1. - zbureff(ji,jj) 338 # if ! defined key_kriest339 325 tra(ji,jj,ikt,jpgoc) = tra(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4 340 326 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 … … 345 331 tra(ji,jj,ikt,jpfep) = tra(ji,jj,ikt,jpfep) - trn(ji,jj,ikt,jpfep) * zwssfep 346 332 # endif 347 # else348 tra(ji,jj,ikt,jpnum) = tra(ji,jj,ikt,jpnum) - trb(ji,jj,ikt,jpnum) * zws4349 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3350 tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3351 zwstpoc = trb(ji,jj,ikt,jppoc) * zws3352 # if defined key_ligand353 tra(ji,jj,ikt,jpfep) = tra(ji,jj,ikt,jpfep) - trn(ji,jj,ikt,jpfep) * zwssfep354 # endif355 # endif356 333 357 334 #if ! defined key_sed … … 384 361 zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 385 362 IF( zlim <= 0.2 ) zlim = 0.01 386 #if defined key_degrad387 zfact = zlim * rfact2 * facvol(ji,jj,jk)388 #else389 363 zfact = zlim * rfact2 390 #endif391 364 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 392 365 ztrpo4 = trb (ji,jj,jk,jppo4) / ( concnnh4 + trb (ji,jj,jk,jppo4) ) … … 431 404 IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * 1.e+3 * rno3 ) 432 405 ENDIF 433 ELSE434 IF( ln_diatrc ) &435 & trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1)436 406 ENDIF 437 407 ! -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90
r7180 r8003 21 21 USE iom ! I/O manager 22 22 USE lib_mpp 23 USE p4zsbc 23 24 24 25 IMPLICIT NONE … … 37 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkcal, sinksil !: CaCO3 and BSi sinking fluxes 38 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes 39 #if ! defined key_kriest40 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer2 !: Big iron sinking fluxes 41 #endif42 41 #if defined key_ligand 43 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfep !: Fep sinking fluxes … … 46 45 47 46 INTEGER :: ik100 48 49 #if defined key_kriest50 REAL(wp) :: xkr_sfact !: Sinking factor51 REAL(wp) :: xkr_stick !: Stickiness52 REAL(wp) :: xkr_nnano !: Nbr of cell in nano size class53 REAL(wp) :: xkr_ndiat !: Nbr of cell in diatoms size class54 REAL(wp) :: xkr_nmicro !: Nbr of cell in microzoo size class55 REAL(wp) :: xkr_nmeso !: Nbr of cell in mesozoo size class56 REAL(wp) :: xkr_naggr !: Nbr of cell in aggregates size class57 58 REAL(wp) :: xkr_frac59 60 REAL(wp), PUBLIC :: xkr_dnano !: Size of particles in nano pool61 REAL(wp), PUBLIC :: xkr_ddiat !: Size of particles in diatoms pool62 REAL(wp), PUBLIC :: xkr_dmicro !: Size of particles in microzoo pool63 REAL(wp), PUBLIC :: xkr_dmeso !: Size of particles in mesozoo pool64 REAL(wp), PUBLIC :: xkr_daggr !: Size of particles in aggregates pool65 REAL(wp), PUBLIC :: xkr_wsbio_min !: min vertical particle speed66 REAL(wp), PUBLIC :: xkr_wsbio_max !: max vertical particle speed67 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: xnumm !: maximum number of particles in aggregates69 #endif70 47 71 48 !!* Substitution … … 78 55 CONTAINS 79 56 80 #if ! defined key_kriest81 57 !!---------------------------------------------------------------------- 82 58 !! 'standard sinking parameterisation' ??? … … 255 231 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 256 232 ENDIF 257 ELSE258 IF( ln_diatrc ) THEN259 zfact = 1.e3 * rfact2r260 trc2d(:,:,jp_pcs0_2d + 4) = sinking (:,:,ik100) * zfact * tmask(:,:,1)261 trc2d(:,:,jp_pcs0_2d + 5) = sinking2(:,:,ik100) * zfact * tmask(:,:,1)262 trc2d(:,:,jp_pcs0_2d + 6) = sinkfer (:,:,ik100) * zfact * tmask(:,:,1)263 trc2d(:,:,jp_pcs0_2d + 7) = sinkfer2(:,:,ik100) * zfact * tmask(:,:,1)264 trc2d(:,:,jp_pcs0_2d + 8) = sinksil (:,:,ik100) * zfact * tmask(:,:,1)265 trc2d(:,:,jp_pcs0_2d + 9) = sinkcal (:,:,ik100) * zfact * tmask(:,:,1)266 ENDIF267 233 ENDIF 268 234 ! … … 294 260 ! 295 261 END SUBROUTINE p4z_sink_init 296 297 #else298 !!----------------------------------------------------------------------299 !! 'Kriest sinking parameterisation' key_kriest ???300 !!----------------------------------------------------------------------301 302 SUBROUTINE p4z_sink ( kt, knt )303 !!---------------------------------------------------------------------304 !! *** ROUTINE p4z_sink ***305 !!306 !! ** Purpose : Compute vertical flux of particulate matter due to307 !! gravitational sinking - Kriest parameterization308 !!309 !! ** Method : - ???310 !!---------------------------------------------------------------------311 !312 INTEGER, INTENT(in) :: kt, knt313 !314 INTEGER :: ji, jj, jk, jit, niter1, niter2315 REAL(wp) :: znum , zeps, zfm, zgm, zsm316 REAL(wp) :: zdiv , zdiv1, zdiv2, zdiv3, zdiv4, zdiv5317 REAL(wp) :: zval1, zval2, zval3318 REAL(wp) :: zfact319 INTEGER :: ik1320 CHARACTER (len=25) :: charout321 REAL(wp), POINTER, DIMENSION(:,:,:) :: znum3d322 REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d323 REAL(wp), POINTER, DIMENSION(:,: ) :: zw2d324 !!---------------------------------------------------------------------325 !326 IF( nn_timing == 1 ) CALL timing_start('p4z_sink')327 !328 CALL wrk_alloc( jpi, jpj, jpk, znum3d )329 !330 ! Initialisation of variables used to compute Sinking Speed331 ! ---------------------------------------------------------332 333 znum3d(:,:,:) = 0.e0334 zval1 = 1. + xkr_zeta335 zval2 = 1. + xkr_zeta + xkr_eta336 zval3 = 1. + xkr_eta337 338 ! Computation of the vertical sinking speed : Kriest et Evans, 2000339 ! -----------------------------------------------------------------340 341 DO jk = 1, jpkm1342 DO jj = 1, jpj343 DO ji = 1, jpi344 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN345 znum = trb(ji,jj,jk,jppoc) / ( trb(ji,jj,jk,jpnum) + rtrn ) / xkr_massp346 ! -------------- To avoid sinking speed over 50 m/day -------347 znum = MIN( xnumm(jk), znum )348 znum = MAX( 1.1 , znum )349 znum3d(ji,jj,jk) = znum350 !------------------------------------------------------------351 zeps = ( zval1 * znum - 1. )/ ( znum - 1. )352 zfm = xkr_frac**( 1. - zeps )353 zgm = xkr_frac**( zval1 - zeps )354 zdiv = MAX( 1.e-4, ABS( zeps - zval2 ) ) * SIGN( 1., ( zeps - zval2 ) )355 zdiv1 = zeps - zval3356 wsbio3(ji,jj,jk) = xkr_wsbio_min * ( zeps - zval1 ) / zdiv &357 & - xkr_wsbio_max * zgm * xkr_eta / zdiv358 wsbio4(ji,jj,jk) = xkr_wsbio_min * ( zeps-1. ) / zdiv1 &359 & - xkr_wsbio_max * zfm * xkr_eta / zdiv1360 IF( znum == 1.1) wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk)361 ENDIF362 END DO363 END DO364 END DO365 366 wscal(:,:,:) = MAX( wsbio3(:,:,:), 30._wp )367 #if defined key_ligand368 wsfep (:,:,:) = wfep369 #endif370 371 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS372 ! -----------------------------------------373 374 sinking (:,:,:) = 0.e0375 sinking2(:,:,:) = 0.e0376 sinkcal (:,:,:) = 0.e0377 sinkfer (:,:,:) = 0.e0378 sinksil (:,:,:) = 0.e0379 #if defined key_ligand380 sinkfep(:,:,:) = 0.e0381 #endif382 383 ! Compute the sedimentation term using p4zsink2 for all the sinking particles384 ! -----------------------------------------------------385 386 niter1 = niter1max387 niter2 = niter2max388 389 DO jit = 1, niter1390 CALL p4z_sink2( wsbio3, sinking , jppoc, niter1 )391 CALL p4z_sink2( wsbio3, sinkfer , jpsfe, niter1 )392 CALL p4z_sink2( wscal , sinksil , jpgsi, niter1 )393 CALL p4z_sink2( wscal , sinkcal , jpcal, niter1 )394 #if defined key_ligand395 CALL p4z_sink2( wsfep, sinkfep , jpfep, iiter1 )396 #endif397 END DO398 399 DO jit = 1, niter2400 CALL p4z_sink2( wsbio4, sinking2, jpnum, niter2 )401 END DO402 403 IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) &404 & t_oce_co2_exp = glob_sum( sinking(:,:,ik100) * e1e2t(:,:) * tmask(:,:,1) )405 !406 IF( lk_iomput ) THEN407 IF( knt == nrdttrc ) THEN408 CALL wrk_alloc( jpi, jpj, zw2d )409 CALL wrk_alloc( jpi, jpj, jpk, zw3d )410 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s411 !412 IF( iom_use( "EPC100" ) ) THEN413 zw2d(:,:) = sinking(:,:,ik100) * zfact * tmask(:,:,1) ! Export of carbon at 100m414 CALL iom_put( "EPC100" , zw2d )415 ENDIF416 IF( iom_use( "EPN100" ) ) THEN417 zw2d(:,:) = sinking2(:,:,ik100) * zfact * tmask(:,:,1) ! Export of number of aggregates ?418 CALL iom_put( "EPN100" , zw2d )419 ENDIF420 IF( iom_use( "EPCAL100" ) ) THEN421 zw2d(:,:) = sinkcal(:,:,ik100) * zfact * tmask(:,:,1) ! Export of calcite at 100m422 CALL iom_put( "EPCAL100" , zw2d )423 ENDIF424 IF( iom_use( "EPSI100" ) ) THEN425 zw2d(:,:) = sinksil(:,:,ik100) * zfact * tmask(:,:,1) ! Export of bigenic silica at 100m426 CALL iom_put( "EPSI100" , zw2d )427 ENDIF428 IF( iom_use( "EXPC" ) ) THEN429 zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column430 CALL iom_put( "EXPC" , zw3d )431 ENDIF432 IF( iom_use( "EXPN" ) ) THEN433 zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column434 CALL iom_put( "EXPN" , zw3d )435 ENDIF436 IF( iom_use( "EXPCAL" ) ) THEN437 zw3d(:,:,:) = sinkcal(:,:,:) * zfact * tmask(:,:,:) ! Export of calcite438 CALL iom_put( "EXPCAL" , zw3d )439 ENDIF440 IF( iom_use( "EXPSI" ) ) THEN441 zw3d(:,:,:) = sinksil(:,:,:) * zfact * tmask(:,:,:) ! Export of bigenic silica442 CALL iom_put( "EXPSI" , zw3d )443 ENDIF444 IF( iom_use( "XNUM" ) ) THEN445 zw3d(:,:,:) = znum3d(:,:,:) * tmask(:,:,:) ! Number of particles on aggregats446 CALL iom_put( "XNUM" , zw3d )447 ENDIF448 IF( iom_use( "WSC" ) ) THEN449 zw3d(:,:,:) = wsbio3(:,:,:) * tmask(:,:,:) ! Sinking speed of carbon particles450 CALL iom_put( "WSC" , zw3d )451 ENDIF452 IF( iom_use( "WSN" ) ) THEN453 zw3d(:,:,:) = wsbio4(:,:,:) * tmask(:,:,:) ! Sinking speed of particles number454 CALL iom_put( "WSN" , zw3d )455 ENDIF456 !457 CALL wrk_dealloc( jpi, jpj, zw2d )458 CALL wrk_dealloc( jpi, jpj, jpk, zw3d )459 ELSE460 IF( ln_diatrc ) THEN461 zfact = 1.e3 * rfact2r462 trc2d(:,: ,jp_pcs0_2d + 4) = sinking (:,:,ik100) * zfact * tmask(:,:,1)463 trc2d(:,: ,jp_pcs0_2d + 5) = sinking2(:,:,ik100) * zfact * tmask(:,:,1)464 trc2d(:,: ,jp_pcs0_2d + 6) = sinkfer (:,:,ik100) * zfact * tmask(:,:,1)465 trc2d(:,: ,jp_pcs0_2d + 7) = sinksil (:,:,ik100) * zfact * tmask(:,:,1)466 trc2d(:,: ,jp_pcs0_2d + 8) = sinkcal (:,:,ik100) * zfact * tmask(:,:,1)467 trc3d(:,:,:,jp_pcs0_3d + 11) = sinking (:,:,:) * zfact * tmask(:,:,:)468 trc3d(:,:,:,jp_pcs0_3d + 12) = sinking2(:,:,:) * zfact * tmask(:,:,:)469 trc3d(:,:,:,jp_pcs0_3d + 13) = sinksil (:,:,:) * zfact * tmask(:,:,:)470 trc3d(:,:,:,jp_pcs0_3d + 14) = sinkcal (:,:,:) * zfact * tmask(:,:,:)471 trc3d(:,:,:,jp_pcs0_3d + 15) = znum3d (:,:,:) * tmask(:,:,:)472 trc3d(:,:,:,jp_pcs0_3d + 16) = wsbio3 (:,:,:) * tmask(:,:,:)473 trc3d(:,:,:,jp_pcs0_3d + 17) = wsbio4 (:,:,:) * tmask(:,:,:)474 ENDIF475 ENDIF476 477 !478 IF(ln_ctl) THEN ! print mean trends (used for debugging)479 WRITE(charout, FMT="('sink')")480 CALL prt_ctl_trc_info(charout)481 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)482 ENDIF483 !484 CALL wrk_dealloc( jpi, jpj, jpk, znum3d )485 !486 IF( nn_timing == 1 ) CALL timing_stop('p4z_sink')487 !488 END SUBROUTINE p4z_sink489 490 491 SUBROUTINE p4z_sink_init492 !!----------------------------------------------------------------------493 !! *** ROUTINE p4z_sink_init ***494 !!495 !! ** Purpose : Initialization of sinking parameters496 !! Kriest parameterization only497 !!498 !! ** Method : Read the nampiskrs namelist and check the parameters499 !! called at the first timestep500 !!501 !! ** input : Namelist nampiskrs502 !!----------------------------------------------------------------------503 INTEGER :: jk, jn, kiter504 INTEGER :: ios ! Local integer output status for namelist read505 REAL(wp) :: znum, zdiv506 REAL(wp) :: zws, zwr, zwl,wmax, znummax507 REAL(wp) :: zmin, zmax, zl, zr, xacc508 !509 NAMELIST/nampiskrs/ xkr_sfact, xkr_stick , &510 & xkr_nnano, xkr_ndiat, xkr_nmicro, xkr_nmeso, xkr_naggr511 !!----------------------------------------------------------------------512 !513 IF( nn_timing == 1 ) CALL timing_start('p4z_sink_init')514 !515 516 REWIND( numnatp_ref ) ! Namelist nampiskrs in reference namelist : Pisces sinking Kriest517 READ ( numnatp_ref, nampiskrs, IOSTAT = ios, ERR = 901)518 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrs in reference namelist', lwp )519 520 REWIND( numnatp_cfg ) ! Namelist nampiskrs in configuration namelist : Pisces sinking Kriest521 READ ( numnatp_cfg, nampiskrs, IOSTAT = ios, ERR = 902 )522 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrs in configuration namelist', lwp )523 IF(lwm) WRITE ( numonp, nampiskrs )524 525 IF(lwp) THEN526 WRITE(numout,*)527 WRITE(numout,*) ' Namelist : nampiskrs'528 WRITE(numout,*) ' Sinking factor xkr_sfact = ', xkr_sfact529 WRITE(numout,*) ' Stickiness xkr_stick = ', xkr_stick530 WRITE(numout,*) ' Nbr of cell in nano size class xkr_nnano = ', xkr_nnano531 WRITE(numout,*) ' Nbr of cell in diatoms size class xkr_ndiat = ', xkr_ndiat532 WRITE(numout,*) ' Nbr of cell in microzoo size class xkr_nmicro = ', xkr_nmicro533 WRITE(numout,*) ' Nbr of cell in mesozoo size class xkr_nmeso = ', xkr_nmeso534 WRITE(numout,*) ' Nbr of cell in aggregates size class xkr_naggr = ', xkr_naggr535 ENDIF536 537 538 ! max and min vertical particle speed539 xkr_wsbio_min = xkr_sfact * xkr_mass_min**xkr_eta540 xkr_wsbio_max = xkr_sfact * xkr_mass_max**xkr_eta541 IF (lwp) WRITE(numout,*) ' max and min vertical particle speed ', xkr_wsbio_min, xkr_wsbio_max542 543 !544 ! effect of the sizes of the different living pools on particle numbers545 ! nano = 2um-20um -> mean size=6.32 um -> ws=2.596 -> xnum=xnnano=2.337546 ! diat and microzoo = 10um-200um -> 44.7 -> 8.732 -> xnum=xndiat=3.718547 ! mesozoo = 200um-2mm -> 632.45 -> 45.14 -> xnum=xnmeso=7.147548 ! aggregates = 200um-10mm -> 1414 -> 74.34 -> xnum=xnaggr=9.877549 ! doc aggregates = 1um550 ! ----------------------------------------------------------551 552 xkr_dnano = 1. / ( xkr_massp * xkr_nnano )553 xkr_ddiat = 1. / ( xkr_massp * xkr_ndiat )554 xkr_dmicro = 1. / ( xkr_massp * xkr_nmicro )555 xkr_dmeso = 1. / ( xkr_massp * xkr_nmeso )556 xkr_daggr = 1. / ( xkr_massp * xkr_naggr )557 558 !!---------------------------------------------------------------------559 !! 'key_kriest' ???560 !!---------------------------------------------------------------------561 ! COMPUTATION OF THE VERTICAL PROFILE OF MAXIMUM SINKING SPEED562 ! Search of the maximum number of particles in aggregates for each k-level.563 ! Bissection Method564 !--------------------------------------------------------------------565 IF (lwp) THEN566 WRITE(numout,*)567 WRITE(numout,*)' kriest : Compute maximum number of particles in aggregates'568 ENDIF569 570 xacc = 0.001_wp571 kiter = 50572 zmin = 1.10_wp573 zmax = xkr_mass_max / xkr_mass_min574 xkr_frac = zmax575 576 DO jk = 1,jpk577 zl = zmin578 zr = zmax579 wmax = 0.5 * fse3t(1,1,jk) * rday * float(niter1max) / rfact2580 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl581 znum = zl - 1.582 zwl = xkr_wsbio_min * xkr_zeta / zdiv &583 & - ( xkr_wsbio_max * xkr_eta * znum * &584 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &585 & - wmax586 587 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr588 znum = zr - 1.589 zwr = xkr_wsbio_min * xkr_zeta / zdiv &590 & - ( xkr_wsbio_max * xkr_eta * znum * &591 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &592 & - wmax593 iflag: DO jn = 1, kiter594 IF ( zwl == 0._wp ) THEN ; znummax = zl595 ELSEIF( zwr == 0._wp ) THEN ; znummax = zr596 ELSE597 znummax = ( zr + zl ) / 2.598 zdiv = xkr_zeta + xkr_eta - xkr_eta * znummax599 znum = znummax - 1.600 zws = xkr_wsbio_min * xkr_zeta / zdiv &601 & - ( xkr_wsbio_max * xkr_eta * znum * &602 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &603 & - wmax604 IF( zws * zwl < 0. ) THEN ; zr = znummax605 ELSE ; zl = znummax606 ENDIF607 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl608 znum = zl - 1.609 zwl = xkr_wsbio_min * xkr_zeta / zdiv &610 & - ( xkr_wsbio_max * xkr_eta * znum * &611 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &612 & - wmax613 614 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr615 znum = zr - 1.616 zwr = xkr_wsbio_min * xkr_zeta / zdiv &617 & - ( xkr_wsbio_max * xkr_eta * znum * &618 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &619 & - wmax620 !621 IF ( ABS ( zws ) <= xacc ) EXIT iflag622 !623 ENDIF624 !625 END DO iflag626 627 xnumm(jk) = znummax628 IF (lwp) WRITE(numout,*) ' jk = ', jk, ' wmax = ', wmax,' xnum max = ', xnumm(jk)629 !630 END DO631 !632 ik100 = 10 ! last level where depth less than 100 m633 DO jk = jpkm1, 1, -1634 IF( gdept_1d(jk) > 100. ) ik100 = jk - 1635 END DO636 IF (lwp) WRITE(numout,*)637 IF (lwp) WRITE(numout,*) ' Level corresponding to 100m depth ', ik100 + 1638 IF (lwp) WRITE(numout,*)639 !640 t_oce_co2_exp = 0._wp641 !642 IF( nn_timing == 1 ) CALL timing_stop('p4z_sink_init')643 !644 END SUBROUTINE p4z_sink_init645 646 #endif647 262 648 263 SUBROUTINE p4z_sink2( pwsink, psinkflx, jp_tra, kiter ) … … 769 384 & sinking(jpi,jpj,jpk) , sinking2(jpi,jpj,jpk) , & 770 385 & sinkcal(jpi,jpj,jpk) , sinksil (jpi,jpj,jpk) , & 771 #if defined key_kriest772 & xnumm(jpk) , &773 #else774 386 & sinkfer2(jpi,jpj,jpk) , & 775 #endif776 387 #if defined key_ligand 777 388 & wsfep(jpi,jpj,jpk) , sinkfep(jpi,jpj,jpk) , & -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r6966 r8003 71 71 INTEGER :: ji, jj, jk, jnt, jn, jl 72 72 REAL(wp) :: ztra 73 #if defined key_kriest74 REAL(wp) :: zcoef1, zcoef275 #endif76 73 CHARACTER (len=25) :: charout 77 74 !!--------------------------------------------------------------------- … … 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 ! … … 214 200 !! ** input : file 'namelist.trc.s' containing the following 215 201 !! namelist: natext, natbio, natsms 216 !! natkriest ("key_kriest")217 202 !!---------------------------------------------------------------------- 218 203 #if defined key_ligand … … 221 206 #else 222 207 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, 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 … … 258 240 ENDIF 259 241 260 #if defined key_kriest261 262 ! ! nampiskrp : kriest parameters263 ! ! -----------------------------264 REWIND( numnatp_ref ) ! Namelist nampiskrp in reference namelist : Pisces Kriest265 READ ( numnatp_ref, nampiskrp, IOSTAT = ios, ERR = 903)266 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in reference namelist', lwp )267 268 REWIND( numnatp_cfg ) ! Namelist nampiskrp in configuration namelist : Pisces Kriest269 READ ( numnatp_cfg, nampiskrp, IOSTAT = ios, ERR = 904 )270 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in configuration namelist', lwp )271 IF(lwm) WRITE ( numonp, nampiskrp )272 273 IF(lwp) THEN274 WRITE(numout,*)275 WRITE(numout,*) ' Namelist : nampiskrp'276 WRITE(numout,*) ' Sinking exponent xkr_eta = ', xkr_eta277 WRITE(numout,*) ' N content exponent xkr_zeta = ', xkr_zeta278 WRITE(numout,*) ' N content factor xkr_ncontent = ', xkr_ncontent279 WRITE(numout,*) ' Minimum mass for Aggregates xkr_mass_min = ', xkr_mass_min280 WRITE(numout,*) ' Maximum mass for Aggregates xkr_mass_max = ', xkr_mass_max281 WRITE(numout,*)282 ENDIF283 284 285 ! Computation of some variables286 xkr_massp = xkr_ncontent * 7.625 * xkr_mass_min**xkr_zeta287 288 #endif289 290 242 REWIND( numnatp_ref ) ! Namelist nampisdmp in reference namelist : Pisces damping 291 243 READ ( numnatp_ref, nampisdmp, IOSTAT = ios, ERR = 905) … … 484 436 & + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) & 485 437 & + trn(:,:,:,jppoc) & 486 #if ! defined key_kriest487 438 & + trn(:,:,:,jpgoc) & 488 #endif489 439 & + trn(:,:,:,jpdoc) ) * cvol(:,:,:) ) 490 440 ! … … 498 448 & + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) & 499 449 & + trn(:,:,:,jppoc) & 500 #if ! defined key_kriest501 450 & + trn(:,:,:,jpgoc) & 502 #endif503 451 & + trn(:,:,:,jpdoc) ) * cvol(:,:,:) ) 504 452 po4budget = po4budget / areatot … … 526 474 ferbudget = glob_sum( ( trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) & 527 475 & + trn(:,:,:,jpdfe) & 528 #if ! defined key_kriest529 476 & + trn(:,:,:,jpbfe) & 530 #endif531 477 #if defined key_ligand 532 478 & + trn(:,:,:,jpfep) & -
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) & -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sed.F90
r5215 r8003 40 40 41 41 USE p4zsink , ONLY : sinking => sinking !: sinking flux for POC 42 #if ! defined key_kriest43 42 USE p4zsink , ONLY : sinking2 => sinking2 !: sinking flux for GOC 44 #endif45 43 USE p4zsink , ONLY : sinkcal => sinkcal !: sinking flux for calcite 46 44 USE p4zsink , ONLY : sinksil => sinksil !: sinking flux for opal ( dsi ) -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/seddta.F90
r5215 r8003 55 55 56 56 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zdta 57 #if ! defined key_kriest58 57 REAL(wp), DIMENSION(:) , ALLOCATABLE :: zdtap, zdtag 59 #endif60 58 61 59 … … 98 96 99 97 100 #if ! defined key_kriest101 98 ! Initialization of temporaries arrays 102 99 ALLOCATE( zdtap(jpoce) ) ; zdtap(:) = 0. 103 100 ALLOCATE( zdtag(jpoce) ) ; zdtag(:) = 0. 104 #endif105 101 106 102 … … 122 118 trc_data(ji,jj,5) = trn (ji,jj,ikt,jpoxy) 123 119 trc_data(ji,jj,6) = trn (ji,jj,ikt,jpsil) 124 # if ! defined key_kriest125 120 trc_data(ji,jj,7 ) = sinksil (ji,jj,ikt) 126 121 trc_data(ji,jj,8 ) = sinking (ji,jj,ikt) … … 129 124 trc_data(ji,jj,11) = tsn (ji,jj,ikt,jp_tem) 130 125 trc_data(ji,jj,12) = tsn (ji,jj,ikt,jp_sal) 131 # else132 trc_data(ji,jj,7 ) = sinksil (ji,jj,ikt)133 trc_data(ji,jj,8 ) = sinking (ji,jj,ikt)134 trc_data(ji,jj,9 ) = sinkcal (ji,jj,ikt)135 trc_data(ji,jj,10) = tsn (ji,jj,ikt,jp_tem)136 trc_data(ji,jj,11) = tsn (ji,jj,ikt,jp_sal)137 # endif138 126 ENDIF 139 127 ENDDO … … 147 135 CALL iom_get( numbio, jpdom_data, 'O2BOT' , trc_data(:,:,5 ) ) 148 136 CALL iom_get( numbio, jpdom_data, 'SIBOT' , trc_data(:,:,6 ) ) 149 # if ! defined key_kriest150 137 CALL iom_get( numbio, jpdom_data, 'OPALFLXBOT' , trc_data(:,:,7 ) ) 151 138 CALL iom_get( numbio, jpdom_data, 'POCFLXBOT' , trc_data(:,:,8 ) ) … … 154 141 CALL iom_get( numoce, jpdom_data, 'TBOT' , trc_data(:,:,11) ) 155 142 CALL iom_get( numoce, jpdom_data, 'SBOT' , trc_data(:,:,12) ) 156 # else157 CALL iom_get( numbio, jpdom_data, 'OPALFLXBOT' , trc_data(:,:,7 ) )158 CALL iom_get( numbio, jpdom_data, 'POCFLXBOT' , trc_data(:,:,8 ) )159 CALL iom_get( numbio, jpdom_data, 'CACO3FLXBOT', trc_data(:,:,9 ) )160 CALL iom_get( numoce, jpdom_data, 'TBOT' , trc_data(:,:,10) )161 CALL iom_get( numoce, jpdom_data, 'SBOT' , trc_data(:,:,11) )162 # endif163 143 #endif 164 144 … … 186 166 ! Solid components : 187 167 !----------------------- 188 #if ! defined key_kriest189 168 ! Sinking fluxes for OPAL in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 190 169 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsopal), trc_data(1:jpi,1:jpj,7), iarroce(1:jpoce) ) … … 200 179 CALL pack_arr ( jpoce, temp(1:jpoce), trc_data(1:jpi,1:jpj,11), iarroce(1:jpoce) ) 201 180 CALL pack_arr ( jpoce, salt(1:jpoce), trc_data(1:jpi,1:jpj,12), iarroce(1:jpoce) ) 202 #else203 ! Sinking fluxes for OPAL in mol.m-2.s-1 ; conversion in mol.cm-2.s-1204 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsopal), trc_data(1:jpi,1:jpj,7), iarroce(1:jpoce) )205 rainrm_dta(1:jpoce,jsopal) = rainrm_dta(1:jpoce,jsopal) * 1e-4206 ! Sinking fluxes for POC in mol.m-2.s-1 ; conversion in mol.cm-2.s-1207 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jspoc), trc_data(1:jpi,1:jpj,8) , iarroce(1:jpoce) )208 rainrm_dta(1:jpoce,jspoc) = rainrm_dta(1:jpoce,jspoc) * 1e-4209 ! Sinking fluxes for Calcite in mol.m-2.s-1 ; conversion in mol.cm-2.s-1210 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jscal), trc_data(1:jpi,1:jpj,9), iarroce(1:jpoce) )211 rainrm_dta(1:jpoce,jscal) = rainrm_dta(1:jpoce,jscal) * 1e-4212 ! vector temperature [°C] and salinity213 CALL pack_arr ( jpoce, temp(1:jpoce), trc_data(1:jpi,1:jpj,10), iarroce(1:jpoce) )214 CALL pack_arr ( jpoce, salt(1:jpoce), trc_data(1:jpi,1:jpj,11), iarroce(1:jpoce) )215 216 #endif217 181 218 182 ! Clay rain rate in [mol/(cm**2.s)] … … 252 216 253 217 DEALLOCATE( zdta ) 254 #if ! defined key_kriest255 218 DEALLOCATE( zdtap ) ; DEALLOCATE( zdtag ) 256 #endif257 219 258 220 IF( kt == nitsedend ) THEN -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/par_pisces.F90
r6453 r8003 38 38 #elif defined key_pisces 39 39 !!--------------------------------------------------------------------- 40 !! 'key_pisces' & 'key_kriest'PISCES bio-model + ???40 !! 'key_pisces' PISCES bio-model + ??? 41 41 !!--------------------------------------------------------------------- 42 42 LOGICAL, PUBLIC, PARAMETER :: lk_pisces = .TRUE. !: PISCES flag 43 43 INTEGER, PUBLIC, PARAMETER :: nn_p4z = 2 !: p4z flag 44 # if defined key_kriest45 LOGICAL, PUBLIC, PARAMETER :: lk_kriest = .TRUE. !: Kriest flag46 INTEGER, PUBLIC, PARAMETER :: jp_kriest = 147 INTEGER, PUBLIC, PARAMETER :: jp_kriest_diag = 748 # else49 LOGICAL, PUBLIC, PARAMETER :: lk_kriest = .FALSE. !: Kriest flag50 INTEGER, PUBLIC, PARAMETER :: jp_kriest = 251 INTEGER, PUBLIC, PARAMETER :: jp_kriest_diag = 052 # endif53 44 # if defined key_ligand 54 45 LOGICAL, PUBLIC, PARAMETER :: lk_ligand = .TRUE. !: Kriest flag … … 60 51 INTEGER, PUBLIC, PARAMETER :: jp_ligand_diag = 0 61 52 # endif 62 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 2 2 + jp_kriest+ jp_ligand !: number of passive tracers53 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 24 + jp_ligand !: number of passive tracers 63 54 INTEGER, PUBLIC, PARAMETER :: jp_pisces_2d = 13 !: additional 2d output 64 INTEGER, PUBLIC, PARAMETER :: jp_pisces_3d = 13 + jp_ kriest_diag + jp_ligand_diag !: additional 3d output55 INTEGER, PUBLIC, PARAMETER :: jp_pisces_3d = 13 + jp_ligand_diag !: additional 3d output 65 56 INTEGER, PUBLIC, PARAMETER :: jp_pisces_trd = 1 !: number of sms trends for PISCES 66 57 … … 90 81 INTEGER, PUBLIC, PARAMETER :: jpno3 = 21 !: Nitrates Concentration 91 82 INTEGER, PUBLIC, PARAMETER :: jpnh4 = 22 !: Ammonium Concentration 92 # if defined key_kriest93 INTEGER, PUBLIC, PARAMETER :: jpnum = 23 !: Number of particles in the aggregates94 # else95 83 INTEGER, PUBLIC, PARAMETER :: jpgoc = 23 !: Big OM particles Concentration 96 84 INTEGER, PUBLIC, PARAMETER :: jpbfe = 24 !: Big iron particles Concentration 97 # endif98 85 # if defined key_ligand 99 INTEGER, PUBLIC, PARAMETER :: jplgw = 2 2 + jp_kriest+ 1 !: Weak Ligands100 INTEGER, PUBLIC, PARAMETER :: jpfep = 2 2 + jp_kriest+ 2 !: Fe nanoparticle86 INTEGER, PUBLIC, PARAMETER :: jplgw = 24 + 1 !: Weak Ligands 87 INTEGER, PUBLIC, PARAMETER :: jpfep = 24 + 2 !: Fe nanoparticle 101 88 # endif 102 89 103 90 #elif defined key_pisces_quota 104 91 !!--------------------------------------------------------------------- 105 !! 'key_pisces' & 'key_kriest'PISCES bio-model + ???92 !! 'key_pisces' PISCES bio-model + ??? 106 93 !!--------------------------------------------------------------------- 107 94 LOGICAL, PUBLIC, PARAMETER :: lk_pisces = .TRUE. !: PISCES flag 108 95 INTEGER, PUBLIC, PARAMETER :: nn_p4z = 3 !: p4z flag 109 # if defined key_kriest110 LOGICAL, PUBLIC, PARAMETER :: lk_kriest = .TRUE. !: Kriest flag111 INTEGER, PUBLIC, PARAMETER :: jp_kriest = 1112 INTEGER, PUBLIC, PARAMETER :: jp_kriest_diag = 7113 # else114 LOGICAL, PUBLIC, PARAMETER :: lk_kriest = .FALSE. !: Kriest flag115 INTEGER, PUBLIC, PARAMETER :: jp_kriest = 4116 INTEGER, PUBLIC, PARAMETER :: jp_kriest_diag = 7117 # endif118 96 # if defined key_ligand 119 97 LOGICAL, PUBLIC, PARAMETER :: lk_ligand = .TRUE. !: Kriest flag … … 125 103 INTEGER, PUBLIC, PARAMETER :: jp_ligand_diag = 0 126 104 # endif 127 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 3 5 + jp_kriest+ jp_ligand !: number of passive tracers105 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 39 + jp_ligand !: number of passive tracers 128 106 INTEGER, PUBLIC, PARAMETER :: jp_pisces_2d = 13 !: additional 2d output 129 INTEGER, PUBLIC, PARAMETER :: jp_pisces_3d = 13 + jp_kriest_diag+ jp_ligand_diag !: additional 3d output107 INTEGER, PUBLIC, PARAMETER :: jp_pisces_3d = 20 + jp_ligand_diag !: additional 3d output 130 108 INTEGER, PUBLIC, PARAMETER :: jp_pisces_trd = 1 !: number of sms trends for PISCES 131 109 … … 168 146 INTEGER, PUBLIC, PARAMETER :: jppfe = 34 !: small particulate organic phosphorus concentration 169 147 INTEGER, PUBLIC, PARAMETER :: jppch = 35 !: small particulate organic phosphorus concentration 170 # if defined key_kriest171 INTEGER, PUBLIC, PARAMETER :: jpnum = 36 !: Number of particles in the aggregates172 # else173 148 INTEGER, PUBLIC, PARAMETER :: jpgoc = 36 !: Big carbon particles Concentration 174 149 INTEGER, PUBLIC, PARAMETER :: jpgon = 37 !: Big nitrogen particles Concentration 175 150 INTEGER, PUBLIC, PARAMETER :: jpgop = 38 !: Big phosphorus particles Concentration 176 151 INTEGER, PUBLIC, PARAMETER :: jpbfe = 39 !: Big iron particles Concentration 177 # endif178 152 # if defined key_ligand 179 INTEGER, PUBLIC, PARAMETER :: jplgw = 3 5 + jp_kriest+ 1 !: Weak Ligands180 INTEGER, PUBLIC, PARAMETER :: jpfep = 3 5 + jp_kriest+ 2 !: Fe nanoparticle153 INTEGER, PUBLIC, PARAMETER :: jplgw = 39 + 1 !: Weak Ligands 154 INTEGER, PUBLIC, PARAMETER :: jpfep = 39 + 2 !: Fe nanoparticle 181 155 # endif 182 156 -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r6455 r8003 107 107 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates 108 108 109 #if defined key_kriest110 !!* Kriest parameter for aggregation111 REAL(wp) :: xkr_eta !: Sinking exponent112 REAL(wp) :: xkr_zeta !: N content exponent113 REAL(wp) :: xkr_ncontent !: N content factor114 REAL(wp) :: xkr_massp !:115 REAL(wp) :: xkr_mass_min, xkr_mass_max !: Minimum, Maximum mass for Aggregates116 #endif117 118 109 #endif 119 110 -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90
r6453 r8003 5 5 !!====================================================================== 6 6 !! History : 3.5 ! 2013 (M. Vancoppenolle, O. Aumont, G. Madec), original code 7 !! Comment ! probably not properly done when the second particle export8 !! scheme (kriest) is used9 7 !!---------------------------------------------------------------------- 10 8 #if defined key_pisces || defined key_pisces_reduced … … 107 105 zpisc(jppo4,1) = 5.77e-7_wp / po4r 108 106 zpisc(jppoc,1) = 1.27e-6_wp 109 # if ! defined key_kriest110 107 zpisc(jpgoc,1) = 5.23e-8_wp 111 108 zpisc(jpbfe,1) = 9.84e-13_wp 112 # else113 zpisc(jpnum,1) = 0. ! could not get this value since did not use it114 # endif115 109 zpisc(jpsil,1) = 7.36e-6_wp 116 110 zpisc(jpdsi,1) = 1.07e-7_wp … … 154 148 zpisc(jppo4,2) = 4.09e-7_wp / po4r 155 149 zpisc(jppoc,2) = 4.05e-7_wp 156 # if ! defined key_kriest157 150 zpisc(jpgoc,2) = 2.84e-8_wp 158 151 zpisc(jpbfe,2) = 7.03e-13_wp 159 # else160 zpisc(jpnum,2) = 0.00e-00_wp161 # endif162 152 zpisc(jpsil,2) = 6.87e-6_wp 163 153 zpisc(jpdsi,2) = 1.73e-7_wp … … 202 192 zpisc(jppo4,3) = 1.88e-6_wp / po4r 203 193 zpisc(jppoc,3) = 1.13e-6_wp 204 # if ! defined key_kriest205 194 zpisc(jpgoc,3) = 2.89e-8_wp 206 195 zpisc(jpbfe,3) = 5.63e-13_wp 207 # else208 zpisc(jpnum,3) = 0.00e-00_wp209 # endif210 196 zpisc(jpsil,3) = 4.96e-5_wp 211 197 zpisc(jpdsi,3) = 5.63e-7_wp … … 250 236 zpisc(jppo4,4) = 2.85e-9_wp / po4r 251 237 zpisc(jppoc,4) = 4.84e-7_wp 252 # if ! defined key_kriest253 238 zpisc(jpgoc,4) = 1.05e-8_wp 254 239 zpisc(jpbfe,4) = 4.97e-13_wp 255 # else256 zpisc(jpnum,4) = 0. ! could not get this value257 # endif258 240 zpisc(jpsil,4) = 4.91e-5_wp 259 241 zpisc(jpdsi,4) = 3.25e-7_wp -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r7180 r8003 142 142 trn(:,:,:,jppon) = bioma0 143 143 trn(:,:,:,jppop) = bioma0 144 # if ! defined key_kriest145 144 trn(:,:,:,jpgoc) = bioma0 146 145 trn(:,:,:,jpgon) = bioma0 147 146 trn(:,:,:,jpgop) = bioma0 148 147 trn(:,:,:,jpbfe) = bioma0 * 5.e-6 149 # else150 trn(:,:,:,jpnum) = bioma0 / ( 6. * xkr_massp )151 # endif152 148 trn(:,:,:,jpsil) = silic1 153 149 trn(:,:,:,jpdsi) = bioma0 * 0.15 … … 293 289 trn(:,:,:,jppo4) = po4 / po4r 294 290 trn(:,:,:,jppoc) = bioma0 295 # if ! defined key_kriest296 291 trn(:,:,:,jpgoc) = bioma0 297 292 trn(:,:,:,jpbfe) = bioma0 * 5.e-6 298 # else299 trn(:,:,:,jpnum) = bioma0 / ( 6. * xkr_massp )300 # endif301 293 trn(:,:,:,jpsil) = silic1 302 294 trn(:,:,:,jpdsi) = bioma0 * 0.15 -
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/trcnam_pisces.F90
r6453 r8003 46 46 !! ** input : file 'namelist.trc.sms' containing the following 47 47 !! namelist: natext, natbio, natsms 48 !! natkriest ("key_kriest")49 48 !!---------------------------------------------------------------------- 50 49 !! … … 77 76 IF(lwm) CALL ctl_opn( numonp , 'output.namelist.pis' , 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 78 77 ! 79 IF( .NOT.lk_iomput .AND. ln_diatrc ) THEN80 !81 ! Namelist nampisdia82 ! -------------------83 REWIND( numnatp_ref ) ! Namelist nampisdia in reference namelist : Pisces diagnostics84 READ ( numnatp_ref, nampisdia, IOSTAT = ios, ERR = 901)85 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdia in reference namelist', lwp )86 87 REWIND( numnatp_cfg ) ! Namelist nampisdia in configuration namelist : Pisces diagnostics88 READ ( numnatp_cfg, nampisdia, IOSTAT = ios, ERR = 902 )89 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdia in configuration namelist', lwp )90 IF(lwm) WRITE ( numonp, nampisdia )91 92 DO jl = 1, jp_pisces_2d93 jn = jp_pcs0_2d + jl - 194 ctrc2d(jn) = pisdia2d(jl)%sname95 ctrc2l(jn) = pisdia2d(jl)%lname96 ctrc2u(jn) = pisdia2d(jl)%units97 END DO98 99 DO jl = 1, jp_pisces_3d100 jn = jp_pcs0_3d + jl - 1101 ctrc3d(jn) = pisdia3d(jl)%sname102 ctrc3l(jn) = pisdia3d(jl)%lname103 ctrc3u(jn) = pisdia3d(jl)%units104 END DO105 106 IF(lwp) THEN ! control print107 WRITE(numout,*)108 WRITE(numout,*) ' Namelist : natadd'109 DO jl = 1, jp_pisces_3d110 jn = jp_pcs0_3d + jl - 1111 WRITE(numout,*) ' 3d diag nb : ', jn, ' short name : ', ctrc3d(jn), &112 & ' long name : ', ctrc3l(jn), ' unit : ', ctrc3u(jn)113 END DO114 WRITE(numout,*) ' '115 116 DO jl = 1, jp_pisces_2d117 jn = jp_pcs0_2d + jl - 1118 WRITE(numout,*) ' 2d diag nb : ', jn, ' short name : ', ctrc2d(jn), &119 & ' long name : ', ctrc2l(jn), ' unit : ', ctrc2u(jn)120 END DO121 WRITE(numout,*) ' '122 ENDIF123 !124 ENDIF125 126 #if defined key_pisces_reduced127 128 IF( ( .NOT.lk_iomput .AND. ln_diabio ) .OR. lk_trdmld_trc ) THEN129 !130 ! Namelist nampisdbi131 ! -------------------132 REWIND( numnatp_ref ) ! Namelist nampisdbi in reference namelist : Pisces add. diagnostics133 READ ( numnatp_ref, nampisdbi, IOSTAT = ios, ERR = 903)134 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdbi in reference namelist', lwp )135 136 REWIND( numnatp_cfg ) ! Namelist nampisdbi in configuration namelist : Pisces add. diagnostics137 READ ( numnatp_cfg, nampisdbi, IOSTAT = ios, ERR = 904 )138 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdbi in configuration namelist', lwp )139 IF(lwm) WRITE ( numonp, nampisdbi )140 141 DO jl = 1, jp_pisces_trd142 jn = jp_pcs0_trd + jl - 1143 ctrbio(jl) = pisdiabio(jl)%sname144 ctrbil(jl) = pisdiabio(jl)%lname145 ctrbiu(jl) = pisdiabio(jl)%units146 END DO147 148 IF(lwp) THEN ! control print149 WRITE(numout,*)150 WRITE(numout,*) ' Namelist : nampisdbi'151 DO jl = 1, jp_pisces_trd152 jn = jp_pcs0_trd + jl - 1153 WRITE(numout,*) ' biological trend No : ', jn, ' short name : ', ctrbio(jn), &154 & ' long name : ', ctrbio(jn), ' unit : ', ctrbio(jn)155 END DO156 WRITE(numout,*) ' '157 END IF158 !159 END IF160 161 #endif162 163 78 END SUBROUTINE trc_nam_pisces 164 79
Note: See TracChangeset
for help on using the changeset viewer.