Changeset 10368 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zmeso.F90
- Timestamp:
- 2018-12-03T12:45:01+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zmeso.F90
r10345 r10368 25 25 26 26 REAL(wp), PUBLIC :: part2 !: part of calcite not dissolved in mesozoo guts 27 REAL(wp), PUBLIC :: xpref c !: mesozoo preference for POC28 REAL(wp), PUBLIC :: xpref p!: mesozoo preference for nanophyto29 REAL(wp), PUBLIC :: xpref z !: mesozoo preference for diatoms30 REAL(wp), PUBLIC :: xpref poc!: mesozoo preference for POC27 REAL(wp), PUBLIC :: xpref2d !: mesozoo preference for diatoms 28 REAL(wp), PUBLIC :: xpref2n !: mesozoo preference for nanophyto 29 REAL(wp), PUBLIC :: xpref2z !: mesozoo preference for microzooplankton 30 REAL(wp), PUBLIC :: xpref2c !: mesozoo preference for POC 31 31 REAL(wp), PUBLIC :: xthresh2zoo !: zoo feeding threshold for mesozooplankton 32 32 REAL(wp), PUBLIC :: xthresh2dia !: diatoms feeding threshold for mesozooplankton … … 40 40 REAL(wp), PUBLIC :: unass2 !: Efficicency of mesozoo growth 41 41 REAL(wp), PUBLIC :: sigma2 !: Fraction of mesozoo excretion as DOM 42 REAL(wp), PUBLIC :: epsher2 !: half sturation constant for grazing 2 42 REAL(wp), PUBLIC :: epsher2 !: growth efficiency 43 REAL(wp), PUBLIC :: epsher2min !: minimum growth efficiency at high food for grazing 2 43 44 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 44 45 … … 63 64 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 64 65 REAL(wp) :: zgraze2 , zdenom, zdenom2 65 REAL(wp) :: zfact , zfood, zfoodlim, zproport 66 REAL(wp) :: zfact , zfood, zfoodlim, zproport, zbeta 66 67 REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 67 REAL(wp) :: zepsher t, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf68 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz 2, zgrasrat, zgrasratn69 REAL(wp) :: zrespz 2, ztortz2, zgrazd, zgrazz, zgrazpof68 REAL(wp) :: zepsherf, zepshert, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 69 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz, zgrasrat, zgrasratn 70 REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof 70 71 REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 71 72 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 72 73 CHARACTER (len=25) :: charout 73 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing 74 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 74 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 75 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zz2ligprod 75 76 !!--------------------------------------------------------------------- 76 77 ! … … 78 79 ! 79 80 zgrazing(:,:,:) = 0._wp 80 81 zfezoo2 (:,:,:) = 0._wp 82 ! 83 IF (ln_ligand) THEN 84 ALLOCATE( zz2ligprod(jpi,jpj,jpk) ) 85 zz2ligprod(:,:,:) = 0._wp 86 ENDIF 87 ! 81 88 DO jk = 1, jpkm1 82 89 DO jj = 1, jpj … … 87 94 ! Respiration rates of both zooplankton 88 95 ! ------------------------------------- 89 zrespz 2 = resrat2 * zfact *trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) &90 & + resrat2 * zfact * 3. * nitrfac(ji,jj,jk)96 zrespz = resrat2 * zfact * ( trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) & 97 & + 3. * nitrfac(ji,jj,jk) ) 91 98 92 99 ! Zooplankton mortality. A square function has been selected with 93 100 ! no real reason except that it seems to be more stable and may mimic predation 94 101 ! --------------------------------------------------------------- 95 ztortz 2= mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk) )102 ztortz = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk) ) 96 103 ! 97 104 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 98 105 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 106 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 99 107 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 100 108 ! it is to predation by mesozooplankton … … 102 110 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 103 111 & * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 104 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 105 106 zfood = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc 112 113 ! Mesozooplankton grazing 114 ! ------------------------ 115 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc 107 116 zfoodlim = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 108 117 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) … … 110 119 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 111 120 112 zgrazd = zgraze2 * xpref c* zcompadi * zdenom2113 zgrazz = zgraze2 * xpref z* zcompaz * zdenom2114 zgrazn = zgraze2 * xpref p* zcompaph * zdenom2115 zgrazpoc = zgraze2 * xpref poc* zcompapoc * zdenom2121 zgrazd = zgraze2 * xpref2d * zcompadi * zdenom2 122 zgrazz = zgraze2 * xpref2z * zcompaz * zdenom2 123 zgrazn = zgraze2 * xpref2n * zcompaph * zdenom2 124 zgrazpoc = zgraze2 * xpref2c * zcompapoc * zdenom2 116 125 117 126 zgraznf = zgrazn * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) … … 129 138 & * (1. - nitrfac(ji,jj,jk)) 130 139 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 131 !132 zgraztot= zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg133 ! Compute the proportion of filter feeders134 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztot)135 ! Compute fractionation of aggregates. It is assumed that136 ! diatoms based aggregates are more prone to fractionation137 ! since they are more porous (marine snow instead of fecal pellets)138 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn )139 zratio2 = zratio * zratio140 zfrac = zproport * grazflux * xstep * wsbio4(ji,jj,jk) &140 ! 141 zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 142 ! Compute the proportion of filter feeders 143 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 144 ! Compute fractionation of aggregates. It is assumed that 145 ! diatoms based aggregates are more prone to fractionation 146 ! since they are more porous (marine snow instead of fecal pellets) 147 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 148 zratio2 = zratio * zratio 149 zfrac = zproport * grazflux * xstep * wsbio4(ji,jj,jk) & 141 150 & * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 142 151 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 143 zfracfe = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn)144 145 zgrazffep = zproport * zgrazffep146 zgrazffeg = zproport * zgrazffeg147 zgrazfffp = zproport * zgrazfffp148 zgrazfffg = zproport * zgrazfffg149 zgraztot= zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg150 zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk) &151 & + zgrazpoc + zgrazffep + zgrazffeg152 zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg153 154 ! Total grazing ( grazing by microzoo is already computed in p4zmicro )155 zgrazing(ji,jj,jk) = zgraztot156 157 ! Mesozooplankton efficiency158 ! --------------------------159 zgrasrat = ( zgraztotf + rtrn )/ ( zgraztot+ rtrn )160 zgrasratn = ( zgraztotn + rtrn )/ ( zgraztot+ rtrn )152 zfracfe = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 153 154 zgrazffep = zproport * zgrazffep 155 zgrazffeg = zproport * zgrazffeg 156 zgrazfffp = zproport * zgrazfffp 157 zgrazfffg = zproport * zgrazfffg 158 zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 159 zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk) & 160 & + zgrazpoc + zgrazffep + zgrazffeg 161 zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg 162 163 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 164 zgrazing(ji,jj,jk) = zgraztotc 165 166 ! Mesozooplankton efficiency 167 ! -------------------------- 168 zgrasrat = ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 169 zgrasratn = ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) 161 170 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3) 162 zepsherv = zepshert * MIN( epsher2, (1. - unass2) * zgrasrat / ferat3, (1. - unass2) * zgrasratn ) 163 zgrarem2 = zgraztot * ( 1. - zepsherv - unass2 ) & 164 & + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz2 165 zgrafer2 = zgraztot * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv ) & 166 & + ferat3 * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz2 ) 167 zgrapoc2 = zgraztot * unass2 171 zbeta = MAX(0., (epsher2 - epsher2min) ) 172 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 173 zepsherv = zepsherf * zepshert 174 175 zgrarem2 = zgraztotc * ( 1. - zepsherv - unass2 ) & 176 & + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz 177 zgrafer2 = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv ) & 178 & + ferat3 * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 179 zgrapoc2 = zgraztotc * unass2 168 180 169 181 ! Update the arrays TRA which contain the biological sources and sinks … … 173 185 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 - zgrarsig 174 186 ! 175 IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 187 IF( ln_ligand ) THEN 188 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 189 zz2ligprod(ji,jj,jk) = (zgrarem2 - zgrarsig) * ldocz 190 ENDIF 176 191 ! 177 192 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 178 193 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer2 194 zfezoo2(ji,jj,jk) = zgrafer2 179 195 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 180 196 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 181 197 182 zmortz 2 = ztortz2 + zrespz2183 zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz 2 + zrespz2184 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz 2 + zepsherv * zgraztot198 zmortz = ztortz + zrespz 199 zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz 200 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz + zepsherv * zgraztotc 185 201 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazd 186 202 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz … … 193 209 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 194 210 195 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac196 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac197 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep198 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac199 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zmortzgoc + zgrapoc2200 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac201 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe202 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg &211 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 212 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac 213 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep 214 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 215 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zmortzgoc + zgrapoc2 216 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac 217 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 218 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg & 203 219 & + zgraztotf * unass2 - zfracfe 204 zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + rtrn )205 zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal206 ! calcite production207 zprcaca = xfracal(ji,jj,jk) * zgrazn208 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)209 !210 zprcaca = part2 * zprcaca211 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrazcal - zprcaca212 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * ( zgrazcal + zprcaca )213 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca220 zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + rtrn ) 221 zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal 222 ! calcite production 223 zprcaca = xfracal(ji,jj,jk) * zgrazn 224 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 225 ! 226 zprcaca = part2 * zprcaca 227 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrazcal - zprcaca 228 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * ( zgrazcal + zprcaca ) 229 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca 214 230 END DO 215 231 END DO … … 226 242 CALL iom_put( "PCAL", zw3d ) 227 243 ENDIF 244 IF( iom_use( "FEZOO2" ) ) THEN 245 zw3d(:,:,:) = zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 246 CALL iom_put( "FEZOO2", zw3d ) 247 ENDIF 248 IF( iom_use( "LPRODZ2" ) .AND. ln_ligand ) THEN 249 zw3d(:,:,:) = zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 250 CALL iom_put( "LPRODZ2" , zw3d ) 251 ENDIF 228 252 DEALLOCATE( zw3d ) 229 253 ENDIF … … 253 277 INTEGER :: ios ! Local integer 254 278 ! 255 NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xpref c, xprefp, xprefz, &256 & xpref poc, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, &257 & xthresh2, xkgraz2, epsher2, sigma2, unass2, grazflux279 NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xpref2n, xpref2d, xpref2z, & 280 & xpref2c, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 281 & xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux 258 282 !!---------------------------------------------------------------------- 259 283 ! … … 275 299 WRITE(numout,*) ' Namelist : namp4zmes' 276 300 WRITE(numout,*) ' part of calcite not dissolved in mesozoo guts part2 =', part2 277 WRITE(numout,*) ' mesozoo preference for phyto xpref c =', xprefc278 WRITE(numout,*) ' mesozoo preference for POC xprefp =', xprefp279 WRITE(numout,*) ' mesozoo preference for zoo xpref z =', xprefz280 WRITE(numout,*) ' mesozoo preference for poc xpref poc =', xprefpoc301 WRITE(numout,*) ' mesozoo preference for phyto xpref2n =', xpref2n 302 WRITE(numout,*) ' mesozoo preference for diatoms xpref2d =', xpref2d 303 WRITE(numout,*) ' mesozoo preference for zoo xpref2z =', xpref2z 304 WRITE(numout,*) ' mesozoo preference for poc xpref2c =', xpref2c 281 305 WRITE(numout,*) ' microzoo feeding threshold for mesozoo xthresh2zoo =', xthresh2zoo 282 306 WRITE(numout,*) ' diatoms feeding threshold for mesozoo xthresh2dia =', xthresh2dia … … 289 313 WRITE(numout,*) ' mesozoo flux feeding rate grazflux =', grazflux 290 314 WRITE(numout,*) ' non assimilated fraction of P by mesozoo unass2 =', unass2 291 WRITE(numout,*) ' Efficicency of Mesozoo growth epsher2 =', epsher2 315 WRITE(numout,*) ' Efficiency of Mesozoo growth epsher2 =', epsher2 316 WRITE(numout,*) ' Minimum Efficiency of Mesozoo growth epsher2min =', epsher2min 292 317 WRITE(numout,*) ' Fraction of mesozoo excretion as DOM sigma2 =', sigma2 293 318 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 =', xkgraz2
Note: See TracChangeset
for help on using the changeset viewer.