Changeset 12377 for NEMO/trunk/src/TOP/PISCES/P4Z/p5zmicro.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/TOP/PISCES/P4Z/p5zmicro.F90
r12276 r12377 52 52 LOGICAL, PUBLIC :: bmetexc !: Use of excess carbon for respiration 53 53 54 !! * Substitutions 55 # include "do_loop_substitute.h90" 54 56 !!---------------------------------------------------------------------- 55 57 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 60 62 CONTAINS 61 63 62 SUBROUTINE p5z_micro( kt, knt )64 SUBROUTINE p5z_micro( kt, knt, Kbb, Krhs ) 63 65 !!--------------------------------------------------------------------- 64 66 !! *** ROUTINE p5z_micro *** … … 70 72 INTEGER, INTENT(in) :: kt ! ocean time step 71 73 INTEGER, INTENT(in) :: knt 74 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 72 75 ! 73 76 INTEGER :: ji, jj, jk … … 93 96 IF ( bmetexc ) zmetexcess = 1.0 94 97 ! 95 DO jk = 1, jpkm1 96 DO jj = 1, jpj 97 DO ji = 1, jpi 98 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 99 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 100 101 ! Michaelis-Menten mortality rates of microzooplankton 102 ! ----------------------------------------------------- 103 zrespz = resrat * zfact * ( trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & 104 & + 3. * nitrfac(ji,jj,jk) ) 105 106 ! Zooplankton mortality. A square function has been selected with 107 ! no real reason except that it seems to be more stable and may mimic predation. 108 ! ------------------------------------------------------------------------------ 109 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 110 111 ! Computation of the abundance of the preys 112 ! A threshold can be specified in the namelist 113 ! -------------------------------------------- 114 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 115 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 116 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthreshzoo ), 0.e0 ) 117 zcompapi = MAX( ( trb(ji,jj,jk,jppic) - xthreshpic ), 0.e0 ) 118 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 119 120 ! Microzooplankton grazing 121 ! ------------------------ 122 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi & 123 & + xprefz * zcompaz + xprefp * zcompapi 124 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 125 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 126 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 127 128 ! An active switching parameterization is used here. 129 ! We don't use the KTW parameterization proposed by 130 ! Vallina et al. because it tends to produce to steady biomass 131 ! composition and the variance of Chl is too low as it grazes 132 ! too strongly on winning organisms. Thus, instead of a square 133 ! a 1.5 power value is used which decreases the pressure on the 134 ! most abundant species 135 ! ------------------------------------------------------------ 136 ztmp1 = xprefn * zcompaph**1.5 137 ztmp2 = xprefp * zcompapi**1.5 138 ztmp3 = xprefc * zcompapoc**1.5 139 ztmp4 = xprefd * zcompadi**1.5 140 ztmp5 = xprefz * zcompaz**1.5 141 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 142 ztmp1 = ztmp1 / ztmptot 143 ztmp2 = ztmp2 / ztmptot 144 ztmp3 = ztmp3 / ztmptot 145 ztmp4 = ztmp4 / ztmptot 146 ztmp5 = ztmp5 / ztmptot 147 148 ! Microzooplankton regular grazing on the different preys 149 ! ------------------------------------------------------- 150 zgraznc = zgraze * ztmp1 * zdenom 151 zgraznn = zgraznc * trb(ji,jj,jk,jpnph) / (trb(ji,jj,jk,jpphy) + rtrn) 152 zgraznp = zgraznc * trb(ji,jj,jk,jppph) / (trb(ji,jj,jk,jpphy) + rtrn) 153 zgraznf = zgraznc * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 154 zgrazpc = zgraze * ztmp2 * zdenom 155 zgrazpn = zgrazpc * trb(ji,jj,jk,jpnpi) / (trb(ji,jj,jk,jppic) + rtrn) 156 zgrazpp = zgrazpc * trb(ji,jj,jk,jpppi) / (trb(ji,jj,jk,jppic) + rtrn) 157 zgrazpf = zgrazpc * trb(ji,jj,jk,jppfe) / (trb(ji,jj,jk,jppic) + rtrn) 158 zgrazz = zgraze * ztmp5 * zdenom 159 zgrazpoc = zgraze * ztmp3 * zdenom 160 zgrazpon = zgrazpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn ) 161 zgrazpop = zgrazpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn ) 162 zgrazpof = zgrazpoc* trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 163 zgrazdc = zgraze * ztmp4 * zdenom 164 zgrazdn = zgrazdc * trb(ji,jj,jk,jpndi) / (trb(ji,jj,jk,jpdia) + rtrn) 165 zgrazdp = zgrazdc * trb(ji,jj,jk,jppdi) / (trb(ji,jj,jk,jpdia) + rtrn) 166 zgrazdf = zgrazdc * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 167 ! 168 zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc 169 zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3 170 zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3 171 zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * ferat3 172 ! 173 ! Grazing by microzooplankton 174 zgrazing(ji,jj,jk) = zgraztotc 175 176 ! Stoichiometruc ratios of the food ingested by zooplanton 177 ! -------------------------------------------------------- 178 zgrasratf = (zgraztotf + rtrn) / ( zgraztotc + rtrn ) 179 zgrasratn = (zgraztotn + rtrn) / ( zgraztotc + rtrn ) 180 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 181 182 ! Growth efficiency is made a function of the quality 183 ! and the quantity of the preys 184 ! --------------------------------------------------- 185 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 186 zbeta = MAX( 0., (epsher - epshermin) ) 187 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 188 zepsherv = zepsherf * zepshert 189 190 ! Respiration of microzooplankton 191 ! Excess carbon in the food is used preferentially 192 ! ------------------------------------------------ 193 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 194 zbasresb = MAX(0., zrespz - zexcess) 195 zbasresi = zexcess + MIN(0., zrespz - zexcess) 196 zrespirc = srespir * zepsherv * zgraztotc + zbasresb 197 198 ! When excess carbon is used, the other elements in excess 199 ! are also used proportionally to their abundance 200 ! -------------------------------------------------------- 201 zexcess = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 202 zbasresn = zbasresi * zexcess * zgrasratn 203 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 204 zbasresp = zbasresi * zexcess * zgrasratp 205 zexcess = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 206 zbasresf = zbasresi * zexcess * zgrasratf 207 208 ! Voiding of the excessive elements as DOM 209 ! ---------------------------------------- 210 zgradoct = (1. - unassc - zepsherv) * zgraztotc - zbasresi 211 zgradont = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 212 zgradopt = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 213 zgrareft = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 214 215 ! Since only semilabile DOM is represented in PISCES 216 ! part of DOM is in fact labile and is then released 217 ! as dissolved inorganic compounds (ssigma) 218 ! -------------------------------------------------- 219 zgradoc = zgradoct * ssigma 220 zgradon = zgradont * ssigma 221 zgradop = zgradopt * ssigma 222 zgrarem = (1.0 - ssigma) * zgradoct 223 zgraren = (1.0 - ssigma) * zgradont 224 zgrarep = (1.0 - ssigma) * zgradopt 225 zgraref = zgrareft 226 227 ! Defecation as a result of non assimilated products 228 ! -------------------------------------------------- 229 zgrapoc = zgraztotc * unassc 230 zgrapon = zgraztotn * unassn 231 zgrapop = zgraztotp * unassp 232 zgrapof = zgraztotf * unassc 233 234 ! Addition of respiration to the release of inorganic nutrients 235 ! ------------------------------------------------------------- 236 zgrarem = zgrarem + zbasresi + zrespirc 237 zgraren = zgraren + zbasresn + zrespirc * no3rat3 238 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 239 zgraref = zgraref + zbasresf + zrespirc * ferat3 240 241 ! Update of the TRA arrays 242 ! ------------------------ 243 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep 244 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren 245 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 246 ! 247 IF( ln_ligand ) THEN 248 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 249 zzligprod(ji,jj,jk) = zgradoc * ldocz 250 ENDIF 251 ! 252 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon 253 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop 254 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 255 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 256 zfezoo(ji,jj,jk) = zgraref 257 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz 258 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc 259 tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) - zgraznn 260 tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) - zgraznp 261 tra(ji,jj,jk,jppic) = tra(ji,jj,jk,jppic) - zgrazpc 262 tra(ji,jj,jk,jpnpi) = tra(ji,jj,jk,jpnpi) - zgrazpn 263 tra(ji,jj,jk,jpppi) = tra(ji,jj,jk,jpppi) - zgrazpp 264 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazdc 265 tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) - zgrazdn 266 tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) - zgrazdp 267 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgraznc * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 268 tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) - zgrazpc * trb(ji,jj,jk,jppch)/(trb(ji,jj,jk,jppic)+rtrn) 269 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazdc * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 270 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 271 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 272 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 273 tra(ji,jj,jk,jppfe) = tra(ji,jj,jk,jppfe) - zgrazpf 274 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazdf 275 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ztortz + zgrapoc - zgrazpoc 276 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortz + zgrapoc 277 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc 278 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + no3rat3 * ztortz + zgrapon - zgrazpon 279 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + po4rat3 * ztortz + zgrapop - zgrazpop 280 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * ztortz + zgrapof - zgrazpof 281 ! 282 ! calcite production 283 zprcaca = xfracal(ji,jj,jk) * zgraznc 284 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 285 ! 286 zprcaca = part * zprcaca 287 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem - zprcaca 288 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca & 289 & + rno3 * zgraren 290 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 291 END DO 292 END DO 293 END DO 98 DO_3D_11_11( 1, jpkm1 ) 99 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - 1.e-9 ), 0.e0 ) 100 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 101 102 ! Michaelis-Menten mortality rates of microzooplankton 103 ! ----------------------------------------------------- 104 zrespz = resrat * zfact * ( tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) ) & 105 & + 3. * nitrfac(ji,jj,jk) ) 106 107 ! Zooplankton mortality. A square function has been selected with 108 ! no real reason except that it seems to be more stable and may mimic predation. 109 ! ------------------------------------------------------------------------------ 110 ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 111 112 ! Computation of the abundance of the preys 113 ! A threshold can be specified in the namelist 114 ! -------------------------------------------- 115 zcompadi = MIN( MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ), xsizedia ) 116 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 ) 117 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthreshzoo ), 0.e0 ) 118 zcompapi = MAX( ( tr(ji,jj,jk,jppic,Kbb) - xthreshpic ), 0.e0 ) 119 zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthreshpoc ), 0.e0 ) 120 121 ! Microzooplankton grazing 122 ! ------------------------ 123 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi & 124 & + xprefz * zcompaz + xprefp * zcompapi 125 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 126 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 127 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 128 129 ! An active switching parameterization is used here. 130 ! We don't use the KTW parameterization proposed by 131 ! Vallina et al. because it tends to produce to steady biomass 132 ! composition and the variance of Chl is too low as it grazes 133 ! too strongly on winning organisms. Thus, instead of a square 134 ! a 1.5 power value is used which decreases the pressure on the 135 ! most abundant species 136 ! ------------------------------------------------------------ 137 ztmp1 = xprefn * zcompaph**1.5 138 ztmp2 = xprefp * zcompapi**1.5 139 ztmp3 = xprefc * zcompapoc**1.5 140 ztmp4 = xprefd * zcompadi**1.5 141 ztmp5 = xprefz * zcompaz**1.5 142 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 143 ztmp1 = ztmp1 / ztmptot 144 ztmp2 = ztmp2 / ztmptot 145 ztmp3 = ztmp3 / ztmptot 146 ztmp4 = ztmp4 / ztmptot 147 ztmp5 = ztmp5 / ztmptot 148 149 ! Microzooplankton regular grazing on the different preys 150 ! ------------------------------------------------------- 151 zgraznc = zgraze * ztmp1 * zdenom 152 zgraznn = zgraznc * tr(ji,jj,jk,jpnph,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 153 zgraznp = zgraznc * tr(ji,jj,jk,jppph,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 154 zgraznf = zgraznc * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 155 zgrazpc = zgraze * ztmp2 * zdenom 156 zgrazpn = zgrazpc * tr(ji,jj,jk,jpnpi,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn) 157 zgrazpp = zgrazpc * tr(ji,jj,jk,jpppi,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn) 158 zgrazpf = zgrazpc * tr(ji,jj,jk,jppfe,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn) 159 zgrazz = zgraze * ztmp5 * zdenom 160 zgrazpoc = zgraze * ztmp3 * zdenom 161 zgrazpon = zgrazpoc * tr(ji,jj,jk,jppon,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn ) 162 zgrazpop = zgrazpoc * tr(ji,jj,jk,jppop,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn ) 163 zgrazpof = zgrazpoc* tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 164 zgrazdc = zgraze * ztmp4 * zdenom 165 zgrazdn = zgrazdc * tr(ji,jj,jk,jpndi,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 166 zgrazdp = zgrazdc * tr(ji,jj,jk,jppdi,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 167 zgrazdf = zgrazdc * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 168 ! 169 zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc 170 zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3 171 zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3 172 zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * ferat3 173 ! 174 ! Grazing by microzooplankton 175 zgrazing(ji,jj,jk) = zgraztotc 176 177 ! Stoichiometruc ratios of the food ingested by zooplanton 178 ! -------------------------------------------------------- 179 zgrasratf = (zgraztotf + rtrn) / ( zgraztotc + rtrn ) 180 zgrasratn = (zgraztotn + rtrn) / ( zgraztotc + rtrn ) 181 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 182 183 ! Growth efficiency is made a function of the quality 184 ! and the quantity of the preys 185 ! --------------------------------------------------- 186 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 187 zbeta = MAX( 0., (epsher - epshermin) ) 188 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 189 zepsherv = zepsherf * zepshert 190 191 ! Respiration of microzooplankton 192 ! Excess carbon in the food is used preferentially 193 ! ------------------------------------------------ 194 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 195 zbasresb = MAX(0., zrespz - zexcess) 196 zbasresi = zexcess + MIN(0., zrespz - zexcess) 197 zrespirc = srespir * zepsherv * zgraztotc + zbasresb 198 199 ! When excess carbon is used, the other elements in excess 200 ! are also used proportionally to their abundance 201 ! -------------------------------------------------------- 202 zexcess = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 203 zbasresn = zbasresi * zexcess * zgrasratn 204 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 205 zbasresp = zbasresi * zexcess * zgrasratp 206 zexcess = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 207 zbasresf = zbasresi * zexcess * zgrasratf 208 209 ! Voiding of the excessive elements as DOM 210 ! ---------------------------------------- 211 zgradoct = (1. - unassc - zepsherv) * zgraztotc - zbasresi 212 zgradont = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 213 zgradopt = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 214 zgrareft = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 215 216 ! Since only semilabile DOM is represented in PISCES 217 ! part of DOM is in fact labile and is then released 218 ! as dissolved inorganic compounds (ssigma) 219 ! -------------------------------------------------- 220 zgradoc = zgradoct * ssigma 221 zgradon = zgradont * ssigma 222 zgradop = zgradopt * ssigma 223 zgrarem = (1.0 - ssigma) * zgradoct 224 zgraren = (1.0 - ssigma) * zgradont 225 zgrarep = (1.0 - ssigma) * zgradopt 226 zgraref = zgrareft 227 228 ! Defecation as a result of non assimilated products 229 ! -------------------------------------------------- 230 zgrapoc = zgraztotc * unassc 231 zgrapon = zgraztotn * unassn 232 zgrapop = zgraztotp * unassp 233 zgrapof = zgraztotf * unassc 234 235 ! Addition of respiration to the release of inorganic nutrients 236 ! ------------------------------------------------------------- 237 zgrarem = zgrarem + zbasresi + zrespirc 238 zgraren = zgraren + zbasresn + zrespirc * no3rat3 239 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 240 zgraref = zgraref + zbasresf + zrespirc * ferat3 241 242 ! Update of the TRA arrays 243 ! ------------------------ 244 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarep 245 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgraren 246 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgradoc 247 ! 248 IF( ln_ligand ) THEN 249 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgradoc * ldocz 250 zzligprod(ji,jj,jk) = zgradoc * ldocz 251 ENDIF 252 ! 253 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zgradon 254 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop 255 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem 256 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref 257 zfezoo(ji,jj,jk) = zgraref 258 tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz 259 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc 260 tr(ji,jj,jk,jpnph,Krhs) = tr(ji,jj,jk,jpnph,Krhs) - zgraznn 261 tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) - zgraznp 262 tr(ji,jj,jk,jppic,Krhs) = tr(ji,jj,jk,jppic,Krhs) - zgrazpc 263 tr(ji,jj,jk,jpnpi,Krhs) = tr(ji,jj,jk,jpnpi,Krhs) - zgrazpn 264 tr(ji,jj,jk,jpppi,Krhs) = tr(ji,jj,jk,jpppi,Krhs) - zgrazpp 265 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc 266 tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) - zgrazdn 267 tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) - zgrazdp 268 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) 269 tr(ji,jj,jk,jppch,Krhs) = tr(ji,jj,jk,jppch,Krhs) - zgrazpc * tr(ji,jj,jk,jppch,Kbb)/(tr(ji,jj,jk,jppic,Kbb)+rtrn) 270 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) 271 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) 272 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) 273 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraznf 274 tr(ji,jj,jk,jppfe,Krhs) = tr(ji,jj,jk,jppfe,Krhs) - zgrazpf 275 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf 276 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ztortz + zgrapoc - zgrazpoc 277 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortz + zgrapoc 278 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc 279 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + no3rat3 * ztortz + zgrapon - zgrazpon 280 tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + po4rat3 * ztortz + zgrapop - zgrazpop 281 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ferat3 * ztortz + zgrapof - zgrazpof 282 ! 283 ! calcite production 284 zprcaca = xfracal(ji,jj,jk) * zgraznc 285 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 286 ! 287 zprcaca = part * zprcaca 288 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem - zprcaca 289 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca & 290 & + rno3 * zgraren 291 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) + zprcaca 292 END_3D 294 293 ! 295 294 IF( lk_iomput .AND. knt == nrdttrc ) THEN 296 295 IF( iom_use("GRAZ1") ) THEN ! Total grazing of phyto by zooplankton 297 296 zgrazing(:,:,jpk) = 0._wp ; CALL iom_put( "GRAZ1" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 298 297 ENDIF … … 305 304 ENDIF 306 305 ! 307 IF( ln_ctl) THEN ! print mean trends (used for debugging)306 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 308 307 WRITE(charout, FMT="('micro')") 309 308 CALL prt_ctl_trc_info(charout) 310 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)309 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 311 310 ENDIF 312 311 ! … … 336 335 !!---------------------------------------------------------------------- 337 336 ! 338 REWIND( numnatp_ref )339 337 READ ( numnatp_ref, namp5zzoo, IOSTAT = ios, ERR = 901) 340 338 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zzoo in reference namelist' ) 341 339 ! 342 REWIND( numnatp_cfg )343 340 READ ( numnatp_cfg, namp5zzoo, IOSTAT = ios, ERR = 902 ) 344 341 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zzoo in configuration namelist' )
Note: See TracChangeset
for help on using the changeset viewer.