- Timestamp:
- 2017-05-09T12:14:45+02:00 (7 years ago)
- File:
-
- 1 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
Note: See TracChangeset
for help on using the changeset viewer.