Changeset 15548 for NEMO/branches/2021/ticket2632_r14588_theta_sbcblk/src/TOP/PISCES/P4Z/p4zmicro.F90
- Timestamp:
- 2021-11-28T18:59:49+01:00 (3 years ago)
- Location:
- NEMO/branches/2021/ticket2632_r14588_theta_sbcblk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/ticket2632_r14588_theta_sbcblk
- Property svn:externals
-
old new 9 9 10 10 # SETTE 11 ^/utils/CI/sette@14244 sette 11 ^/utils/CI/sette@HEAD sette 12
-
- Property svn:externals
-
NEMO/branches/2021/ticket2632_r14588_theta_sbcblk/src/TOP/PISCES/P4Z/p4zmicro.F90
r13295 r15548 22 22 PRIVATE 23 23 24 !! * Shared module variables 24 25 PUBLIC p4z_micro ! called in p4zbio.F90 25 26 PUBLIC p4z_micro_init ! called in trcsms_pisces.F90 … … 41 42 REAL(wp), PUBLIC :: epsher !: growth efficiency for grazing 1 42 43 REAL(wp), PUBLIC :: epshermin !: minimum growth efficiency for grazing 1 44 REAL(wp), PUBLIC :: xsigma !: Width of the grazing window 45 REAL(wp), PUBLIC :: xsigmadel !: Maximum additional width of the grazing window at low food density 43 46 44 47 !! * Substitutions … … 56 59 !! 57 60 !! ** Purpose : Compute the sources/sinks for microzooplankton 61 !! This includes ingestion and assimilation, flux feeding 62 !! and mortality. We use a passive prey switching 63 !! parameterization. 64 !! All living compartments smaller than microzooplankton 65 !! are potential preys of microzooplankton 58 66 !! 59 67 !! ** Method : - ??? … … 65 73 INTEGER :: ji, jj, jk 66 74 REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 67 REAL(wp) :: zgraze , zdenom, zdenom2 68 REAL(wp) :: zfact , zfood, zfoodlim, zbeta 69 REAL(wp) :: zepsherf, zepshert, zepsherv, zepsherq 70 REAL(wp) :: zgrarsig, zgraztotc, zgraztotn, zgraztotf 75 REAL(wp) :: zgraze , zdenom, zdenom2, zfact, zfood, zfoodlim, zbeta 76 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 71 77 REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 72 REAL(wp) :: zrespz, ztortz, zgrasrat, zgrasratn 73 REAL(wp) :: zgrazp, zgrazm, zgrazsd 74 REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 75 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo, zzligprod 78 REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn 79 REAL(wp) :: zgraznc, zgrazpoc, zgrazdc, zgrazpof, zgrazdf, zgraznf 80 REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmptot, zproport 81 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo 82 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zzligprod 76 83 CHARACTER (len=25) :: charout 84 77 85 !!--------------------------------------------------------------------- 78 86 ! 79 87 IF( ln_timing ) CALL timing_start('p4z_micro') 80 88 ! 81 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 89 IF (ln_ligand) THEN 90 ALLOCATE( zzligprod(jpi,jpj,jpk) ) 91 zzligprod(:,:,:) = 0._wp 92 ENDIF 93 ! 94 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 82 95 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - 1.e-9 ), 0.e0 ) 83 96 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 84 97 85 ! Respiration rates of both zooplankton 86 ! ------------------------------------- 98 ! Proportion of diatoms that are within the size range 99 ! accessible to microzooplankton. 100 zproport = min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 )) 101 102 ! linear mortality of mesozooplankton 103 ! A michaelis menten modulation term is used to avoid extinction of 104 ! microzooplankton at very low food concentrations. Mortality is 105 ! enhanced in low O2 waters 106 ! ----------------------------------------------------------------- 87 107 zrespz = resrat * zfact * tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) ) & 88 108 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 89 109 90 ! Zooplankton mortality. A square function has been selected with 91 ! no real reason except that it seems to be more stable and may mimic predation. 92 ! --------------------------------------------------------------- 110 ! Zooplankton quadratic mortality. A square function has been selected with 111 ! to mimic predation and disease (density dependent mortality). It also tends 112 ! to stabilise the model 113 ! ------------------------------------------------------------------------- 93 114 ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 94 115 95 zcompadi = MIN( MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ), xsizedia ) 116 ! Computation of the abundance of the preys 117 ! A threshold can be specified in the namelist 118 ! Diatoms have a specific treatment. WHen concentrations 119 ! exceed a certain value, diatoms are suppposed to be too 120 ! big for microzooplankton. 121 ! -------------------------------------------------------- 122 zcompadi = zproport * MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ) 96 123 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 ) 97 124 zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthreshpoc ), 0.e0 ) 98 99 ! Microzooplankton grazing 100 ! ------------------------ 125 126 ! Microzooplankton grazing 127 ! The total amount of food is the sum of all preys accessible to mesozooplankton 128 ! multiplied by their food preference 129 ! A threshold can be specified in the namelist (xthresh). However, when food 130 ! concentration is close to this threshold, it is decreased to avoid the 131 ! accumulation of food in the mesozoopelagic domain 132 ! ------------------------------------------------------------------------------- 101 133 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi 102 134 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) … … 105 137 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 106 138 107 zgrazp = zgraze * xprefn * zcompaph * zdenom2 108 zgrazm = zgraze * xprefc * zcompapoc * zdenom2 109 zgrazsd = zgraze * xprefd * zcompadi * zdenom2 110 111 zgrazpf = zgrazp * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 112 zgrazmf = zgrazm * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 113 zgrazsf = zgrazsd * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 114 ! 115 zgraztotc = zgrazp + zgrazm + zgrazsd 116 zgraztotf = zgrazpf + zgrazsf + zgrazmf 117 zgraztotn = zgrazp * quotan(ji,jj,jk) + zgrazm + zgrazsd * quotad(ji,jj,jk) 139 ! An active switching parameterization is used here. 140 ! We don't use the KTW parameterization proposed by 141 ! Vallina et al. because it tends to produce too steady biomass 142 ! composition and the variance of Chl is too low as it grazes 143 ! too strongly on winning organisms. We use a generalized 144 ! switching parameterization proposed by Morozov and 145 ! Petrovskii (2013) 146 ! ------------------------------------------------------------ 147 ! The width of the selection window is increased when preys 148 ! have low abundance, .i.e. zooplankton become less specific 149 ! to avoid starvation. 150 ! ---------------------------------------------------------- 151 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 152 zsigma = xsigma + xsigmadel * zsigma 153 zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 154 ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn ) 155 ztmp2 = xprefd * zcompadi * ( zdiffdn * zcompaph + zcompadi ) / ( 1.0 + zdiffdn ) 156 ztmp3 = xprefc * zcompapoc**2 157 ztmptot = ztmp1 + ztmp2 + ztmp3 + rtrn 158 ztmp1 = ztmp1 / ztmptot 159 ztmp2 = ztmp2 / ztmptot 160 ztmp3 = ztmp3 / ztmptot 161 162 ! Ingestion terms on the different preys of microzooplankton 163 zgraznc = zgraze * ztmp1 * zdenom ! Nanophytoplankton 164 zgrazdc = zgraze * ztmp2 * zdenom ! Diatoms 165 zgrazpoc = zgraze * ztmp3 * zdenom ! POC 166 167 ! Ingestion terms on the iron content of the different preys 168 zgraznf = zgraznc * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 169 zgrazpof = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 170 zgrazdf = zgrazdc * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 171 ! 172 ! Total ingestion rate in C, Fe, N units 173 zgraztotc = zgraznc + zgrazpoc + zgrazdc 174 zgraztotf = zgraznf + zgrazdf + zgrazpof 175 zgraztotn = zgraznc * quotan(ji,jj,jk) + zgrazpoc + zgrazdc * quotad(ji,jj,jk) 118 176 119 177 ! Grazing by microzooplankton … … 129 187 ! Fulton, 2012) 130 188 ! ----------------------------------------------------------------------------- 131 zgrasrat = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 189 190 zgrasratf = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 132 191 zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) 133 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3)192 zepshert = MIN( 1., zgrasratn, zgrasratf / feratz) 134 193 zbeta = MAX(0., (epsher - epshermin) ) 194 ! Food quantity deprivation of the GGE 135 195 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 196 ! Food quality deprivation of the GGE 136 197 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 137 zepsherv = zepsherf * zepshert * zepsherq 138 139 zgrafer = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv ) 198 ! Actual GGE of microzooplankton 199 zepsherv = zepsherf * zepshert * zepsherq 200 ! Excretion of Fe 201 zgrafer = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasratf - feratz * zepsherv ) 202 ! Excretion of C, N, P 140 203 zgrarem = zgraztotc * ( 1. - zepsherv - unass ) 204 ! Egestion of C, N, P 141 205 zgrapoc = zgraztotc * unass 206 142 207 143 208 ! Update of the TRA arrays 144 209 ! ------------------------ 210 ! Fraction of excretion as inorganic nutrients and DIC 145 211 zgrarsig = zgrarem * sigma1 146 212 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarsig … … 165 231 zmortz = ztortz + zrespz 166 232 tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zmortz + zepsherv * zgraztotc 167 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraz p168 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgraz sd169 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgraz p* tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn)170 tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgraz sd* tr(ji,jj,jk,jpdch,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn)171 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgraz sd* tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn)172 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgraz sd* tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn)173 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraz pf174 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgraz sf175 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zmortz - zgraz m233 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc 234 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc 235 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgraznc * tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) 236 tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazdc * tr(ji,jj,jk,jpdch,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 237 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazdc * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 238 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazdc * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 239 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraznf 240 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf 241 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zmortz - zgrazpoc 176 242 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortz 177 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazm 178 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ferat3 * zmortz - zgrazmf 179 ! 180 ! calcite production 181 zprcaca = xfracal(ji,jj,jk) * zgrazp 243 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc 244 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + feratz * zmortz - zgrazpof 245 ! 246 ! Calcite remineralization due to zooplankton activity 247 ! part of the ingested calcite is not dissolving in the acidic gut 248 ! ---------------------------------------------------------------- 249 zprcaca = xfracal(ji,jj,jk) * zgraznc 182 250 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 251 183 252 ! 184 253 zprcaca = part * zprcaca … … 217 286 !! ** Purpose : Initialization of microzooplankton parameters 218 287 !! 219 !! ** Method : Read the namp iszoo namelist and check the parameters288 !! ** Method : Read the namp4zzoo namelist and check the parameters 220 289 !! called at the first timestep (nittrc000) 221 290 !! 222 !! ** input : Namelist namp iszoo291 !! ** input : Namelist namp4zzoo 223 292 !! 224 293 !!---------------------------------------------------------------------- … … 227 296 NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xprefn, xprefc, & 228 297 & xprefd, xthreshdia, xthreshphy, xthreshpoc, & 229 & xthresh, xkgraz, epsher, epshermin, sigma1, unass 298 & xthresh, xkgraz, epsher, epshermin, sigma1, unass, & 299 & xsigma, xsigmadel 230 300 !!---------------------------------------------------------------------- 231 301 ! … … 238 308 READ ( numnatp_ref, namp4zzoo, IOSTAT = ios, ERR = 901) 239 309 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zzoo in reference namelist' ) 310 240 311 READ ( numnatp_cfg, namp4zzoo, IOSTAT = ios, ERR = 902 ) 241 312 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zzoo in configuration namelist' ) … … 259 330 WRITE(numout,*) ' Minimum efficicency of microzoo growth epshermin =', epshermin 260 331 WRITE(numout,*) ' Fraction of microzoo excretion as DOM sigma1 =', sigma1 261 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 332 WRITE(numout,*) ' half saturation constant for grazing 1 xkgraz =', xkgraz 333 WRITE(numout,*) ' Width of the grazing window xsigma =', xsigma 334 WRITE(numout,*) ' Maximum additional width of the grazing window xsigmadel =', xsigmadel 335 262 336 ENDIF 263 337 !
Note: See TracChangeset
for help on using the changeset viewer.