- Timestamp:
- 2017-05-09T12:14:45+02:00 (7 years ago)
- Location:
- branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z
- Files:
-
- 16 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) &
Note: See TracChangeset
for help on using the changeset viewer.