Changeset 14385
- Timestamp:
- 2021-02-03T16:03:34+01:00 (4 years ago)
- Location:
- NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO
- Files:
-
- 2 added
- 2 deleted
- 39 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/cfgs/SHARED/field_def_nemo-pisces.xml
r14209 r14385 136 136 <field id="SedpH" long_name="PH" unit="1" /> 137 137 <field id="SedCO3por" long_name="Bicarbonates" unit="mol/m3" /> 138 <field id="Sedligand" long_name="Ligands" unit="mol/m3" /> 139 <field id="SaturCO3" long_name="CO3 Saturation" unit="-" /> 138 140 </field_group> 139 141 140 142 <!-- SEDIMENT additional variables on T sediment grid --> 141 143 <field_group id="Diag_S" grid_ref="grid_T_2D"> 142 <field id="FlxSi" long_name="Si sediment flux" unit="mol/cm2/s" /> 143 <field id="FlxO2" long_name="O2 sediment flux" unit="mol/cm2/s" /> 144 <field id="FlxDIC" long_name="DIC sediment flux" unit="mol/cm2/s" /> 145 <field id="FlxNO3" long_name="NO3 sediment flux" unit="mol/cm2/s" /> 146 <field id="FlxPO4" long_name="PO4 sediment flux" unit="mol/cm2/s" /> 147 <field id="FlxAlkalini" long_name="Alkalinity sediment flux" unit="mol/cm2/s" /> 148 <field id="FlxNH4" long_name="Ammonium sediment flux" unit="mol/cm2/s" /> 149 <field id="FlxH2S" long_name="H2S sediment flux" unit="mol/cm2/s" /> 150 <field id="FlxSO4" long_name="SO4 sediment flux" unit="mol/cm2/s" /> 151 <field id="FlxFe2" long_name="Fe2+ sediment flux" unit="mol/cm2/s" /> 152 <field id="Flxtot" long_name="Sediment net burial rate" unit="cm/s" /> 153 <field id="dzdep" long_name="Sedimentation rate" unit="cm/s" /> 154 <field id="sflxclay" long_name="Clay sedimentation rate" unit="g/m2/s" /> 155 <field id="sflxcal" long_name="Calcite sedimentation rate" unit="mol/m2/s" /> 156 <field id="sflxbsi" long_name="BSi Sedimentation rate" unit="mol/m2/s" /> 157 <field id="sflxpoc" long_name="POC Sedimentation rate" unit="mol/m2/s" /> 158 <field id="sflxfeo" long_name="Fe(OH)3 Sedimentation rate" unit="mol/m2/s" /> 144 <field id="FlxSi" long_name="Si sediment flux" unit="mol/cm2/s" /> 145 <field id="FlxO2" long_name="O2 sediment flux" unit="mol/cm2/s" /> 146 <field id="FlxDIC" long_name="DIC sediment flux" unit="mol/cm2/s" /> 147 <field id="FlxNO3" long_name="NO3 sediment flux" unit="mol/cm2/s" /> 148 <field id="FlxPO4" long_name="PO4 sediment flux" unit="mol/cm2/s" /> 149 <field id="FlxAlkalini" long_name="Alkalinity sediment flux" unit="mol/cm2/s" /> 150 <field id="FlxNH4" long_name="Ammonium sediment flux" unit="mol/cm2/s" /> 151 <field id="FlxH2S" long_name="H2S sediment flux" unit="mol/cm2/s" /> 152 <field id="FlxSO4" long_name="SO4 sediment flux" unit="mol/cm2/s" /> 153 <field id="FlxFe2" long_name="Fe2+ sediment flux" unit="mol/cm2/s" /> 154 <field id="dzdep" long_name="Sedimentation rate" unit="cm/s" /> 155 <field id="sflxclay" long_name="Clay sedimentation rate" unit="g/cm2/s" /> 156 <field id="sflxbsi" long_name="BSi sedimentation rate" unit="g/cm2/s" /> 157 <field id="sflxpoc" long_name="POC sedimentation rate" unit="g/cm2/s" /> 158 <field id="sflxcal" long_name="Calcite sedimentation rate" unit="g/cm2/s" /> 159 <field id="FlxClay" long_name="Clay burial rate" unit="g/cm2/s" /> 160 <field id="FlxCaCO3" long_name="Calcite burial rate" unit="g/cm2/s" /> 161 <field id="FlxBSi" long_name="BSi burial rate" unit="g/cm2/s" /> 162 <field id="FlxPOC" long_name="POC burial rate" unit="g/cm2/s" /> 163 <field id="FlxFeO" long_name="Fe(OH)3 burial rate" unit="g/cm2/s" /> 164 <field id="FlxFeS" long_name="FeS burial rate" unit="g/cm2/s" /> 165 <field id="FlxPOR" long_name="POR burial rate" unit="g/cm2/s" /> 166 <field id="FlxPOS" long_name="POS burial rate" unit="g/cm2/s" /> 167 <field id="Flxtot" long_name="total burial flux" unit="g/cm2/s" /> 159 168 </field_group> 160 169 -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/cfgs/SHARED/namelist_pisces_ref
r12845 r14385 14 14 !----------------------------------------------------------------------- 15 15 ln_p2z = .false. ! LOBSTER model used 16 ln_p4z = . true.! PISCES model used17 ln_p5z = . false.! PISCES QUOTA model used16 ln_p4z = .false. ! PISCES model used 17 ln_p5z = .true. ! PISCES QUOTA model used 18 18 ln_ligand = .false. ! Enable organic ligands 19 19 ln_sediment = .false. ! Enable sediment module … … 34 34 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 35 35 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 36 sn_patm = 'presatm' , -1 37 sn_atmco2 = 'presatmco2' , -1 36 sn_patm = 'presatm' , -1. , 'patm' , .true. , .true. , 'yearly' , '' , '' , '' 37 sn_atmco2 = 'presatmco2' , -1. , 'xco2' , .true. , .true. , 'yearly' , '' , '' , '' 38 38 cn_dir = './' ! root directory for the location of the dynamical files 39 39 ! … … 44 44 &nampisbio ! biological parameters 45 45 !----------------------------------------------------------------------- 46 nrdttrc = 1 ! time step frequency for biology 47 wsbio = 2. ! POC sinking speed 48 xkmort = 2.E-7 ! half saturation constant for mortality 49 ferat3 = 10.E-6 ! Fe/C in zooplankton 50 wsbio2 = 50. ! Big particles sinking speed 51 wsbio2max = 50. ! Big particles maximum sinking speed 52 wsbio2scale = 5000. ! Big particles length scale of sinking 46 nrdttrc = 1 ! time step frequency for biology 47 wsbio = 2. ! POC sinking speed 48 xkmort = 2.E-7 ! half saturation constant for mortality 49 feratz = 10.E-6 ! Fe/C in zooplankton 50 feratm = 15.E-6 ! Fe/C in mesozooplankton 51 wsbio2 = 50. ! Big particles sinking speed 52 wsbio2max = 50. ! Big particles maximum sinking speed 53 wsbio2scale = 5000. ! Big particles length scale of sinking 53 54 ! ! ln_ligand enabled 54 ldocp = 1.E-4! Phyto ligand production per unit doc55 ldocz = 1.E-4! Zoo ligand production per unit doc56 lthet = 1.0! Proportional loss of ligands due to Fe uptake55 ldocp = 1.E-4 ! Phyto ligand production per unit doc 56 ldocz = 1.E-4 ! Zoo ligand production per unit doc 57 lthet = 1.0 ! Proportional loss of ligands due to Fe uptake 57 58 ! ! ln_p5z enabled 58 no3rat3 = 0.182! N/C ratio in zooplankton59 po4rat3 = 0.0094! P/C ratio in zooplankton59 no3rat3 = 0.151 ! N/C ratio in zooplankton 60 po4rat3 = 0.00944 ! P/C ratio in zooplankton 60 61 / 61 62 !----------------------------------------------------------------------- … … 64 65 concnno3 = 1.e-6 ! Nitrate half saturation of nanophytoplankton 65 66 concdno3 = 3.E-6 ! Nitrate half saturation for diatoms 66 concnnh4 = 1.E- 7! NH4 half saturation for phyto67 concdnh4 = 3.E- 7! NH4 half saturation for diatoms68 concnfer = 1.E-9 ! Iron half saturation for phyto69 concdfer = 3.E-9 ! Iron half saturation for diatoms70 concbfe = 1.E-11 ! Iron half-saturation for DOC remin.71 concbnh4 = 2.E-8! NH4 half saturation for DOC remin.72 concbno3 = 2.E-7 ! Nitrate half saturation for DOC remin.67 concnnh4 = 1.E-6 ! NH4 half saturation for phyto 68 concdnh4 = 3.E-6 ! NH4 half saturation for diatoms 69 concnfer = 3.E-9 ! Iron half saturation for phyto 70 concdfer = 9.E-9 ! Iron half saturation for diatoms 71 concbfe = 3.E-11 ! Iron half-saturation for DOC remin. 72 concbnh4 = 3.E-7 ! NH4 half saturation for DOC remin. 73 concbno3 = 3.E-7 ! Nitrate half saturation for DOC remin. 73 74 xsizedia = 1.E-6 ! Minimum size criteria for diatoms 74 75 xsizephy = 1.E-6 ! Minimum size criteria for phyto 75 76 xsizern = 3.0 ! Size ratio for nanophytoplankton 76 xsizerd = 3.0 ! Size ratio for diatoms77 xksi1 = 2.E-6 ! half saturation constant for Si uptake77 xsizerd = 4.0 ! Size ratio for diatoms 78 xksi1 = 8.E-6 ! half saturation constant for Si uptake 78 79 xksi2 = 20E-6 ! half saturation constant for Si/C 79 80 xkdoc = 417.E-6 ! half-saturation constant of DOC remineralization 80 qnfelim = 7.E-6! Optimal quota of phyto81 qdfelim = 7.E-6! Optimal quota of diatoms82 caco3r = 0. 3! mean rain ratio81 qnfelim = 10.E-6 ! Optimal quota of phyto 82 qdfelim = 10.E-6 ! Optimal quota of diatoms 83 caco3r = 0.28 ! mean rain ratio 83 84 oxymin = 1.E-6 ! Half-saturation constant for anoxia 84 85 / … … 86 87 &namp5zlim ! parameters for nutrient limitations PISCES QUOTA - ln_p5z 87 88 !----------------------------------------------------------------------- 88 concnno3 = 3e-6 ! Nitrate half saturation of nanophytoplankton89 concpno3 = 1e-690 concdno3 = 4E-6 ! Phosphate half saturation for diatoms91 concnnh4 = 1.5E-6! NH4 half saturation for phyto92 concpnh4 = 4E-793 concdnh4 = 2E-6 ! NH4 half saturation for diatoms94 concnpo4 = 3E-6 ! PO4 half saturation for phyto95 concppo4 = 1.5E-696 concdpo4 = 4E-6 ! PO4 half saturation for diatoms97 concnfer = 3E-9! Iron half saturation for phyto98 concpfer = 1.5E-999 concdfer = 4E-9! Iron half saturation for diatoms100 concbfe = 1.E-11! Half-saturation for Fe limitation of Bacteria101 concbnh4 = 1.E-7 ! NH4 half saturation for phyto102 concbno3 = 5.E-7 ! Phosphate half saturation for diatoms103 concbpo4 = 1E-7! Phosphate half saturation for bacteria89 concnno3 = 2e-6 ! Nitrate half saturation of nanophytoplankton 90 concpno3 = 7e-7 ! Nitrate half saturation of picophytoplankton 91 concdno3 = 3E-6 ! Phosphate half saturation for diatoms 92 concnnh4 = 2E-6 ! NH4 half saturation for phyto 93 concpnh4 = 7E-7 ! NH4 half saturation for picophytoplankton 94 concdnh4 = 3E-6 ! NH4 half saturation for diatoms 95 concnpo4 = 2E-6 ! PO4 half saturation for phyto 96 concppo4 = 7E-7 ! PO4 half saturation for picophytoplankton 97 concdpo4 = 3E-6 ! PO4 half saturation for diatoms 98 concnfer = 6E-9 ! Iron half saturation for phyto 99 concpfer = 2E-9 ! Iron half saturation for picophytoplankton 100 concdfer = 9E-9 ! Iron half saturation for diatoms 101 concbfe = 3E-11 ! Half-saturation for Fe limitation of Bacteria 102 concbnh4 = 4.E-7 ! NH4 half saturation for phyto 103 concbno3 = 4.E-7 ! Phosphate half saturation for diatoms 104 concbpo4 = 4.E-7 ! Phosphate half saturation for bacteria 104 105 xsizedia = 1.E-6 ! Minimum size criteria for diatoms 105 106 xsizephy = 1.E-6 ! Minimum size criteria for phyto 106 xsizepic = 1.E-6107 xsizern = 1.0 ! Size ratio for nanophytoplankton108 xsizerp = 1.0107 xsizepic = 5.E-7 ! Minimum size criteria for picophyto 108 xsizern = 3.0 ! Size ratio for nanophytoplankton 109 xsizerp = 2.0 ! Size ratio for picophytoplankton 109 110 xsizerd = 4.0 ! Size ratio for diatoms 110 xksi1 = 2.E-6 ! half saturation constant for Si uptake111 xksi2 = 20E-6 ! half saturation constant for Si/C111 xksi1 = 8.E-6 ! half saturation constant for Si uptake 112 xksi2 = 20E-6 ! half saturation constant for Si/C 112 113 xkdoc = 417.E-6 ! half-saturation constant of DOC remineralization 113 caco3r = 0. 35! mean rain ratio114 caco3r = 0.5 ! mean rain ratio 114 115 oxymin = 1.E-6 ! Half-saturation constant for anoxia 115 116 / … … 117 118 &namp5zquota ! parameters for nutrient limitations PISCES quota - ln_p5z 118 119 !----------------------------------------------------------------------- 119 qfnopt = 7.E-6! Optimal Fe quota of nanophyto120 qfpopt = 7.E-6! Optimal Fe quota of picophyto121 qfdopt = 7.E-6! Optimal quota of diatoms122 qnnmin = 0. 29! Minimal N quota for nano123 qnnmax = 1. 39! Maximal N quota for nano124 qpnmin = 0.2 8! Minimal P quota for nano125 qpnmax = 1. 06! Maximal P quota for nano126 qnpmin = 0.42 ! Minimal N quota for pico120 qfnopt = 10.E-6 ! Optimal Fe quota of nanophyto 121 qfpopt = 10.E-6 ! Optimal Fe quota of picophyto 122 qfdopt = 10.E-6 ! Optimal quota of diatoms 123 qnnmin = 0.61 ! Minimal N quota for nano 124 qnnmax = 1.25 ! Maximal N quota for nano 125 qpnmin = 0.24 ! Minimal P quota for nano 126 qpnmax = 1.35 ! Maximal P quota for nano 127 qnpmin = 1.02 ! Minimal N quota for pico 127 128 qnpmax = 1.39 ! Maximal N quota for pico 128 qppmin = 0. 25! Minimal P quota for pico129 qppmax = 0.7! Maximal P quota for pico130 qndmin = 0. 25! Minimal N quota for diatoms131 qndmax = 1. 39! Maximal N quota for diatoms132 qpdmin = 0.2 9! Minimal P quota for diatoms133 qpdmax = 1. 32! Maximal P quota for diatoms134 qfnmax = 40E-6 ! Maximal Fe quota for nano135 qfpmax = 40E-6 ! Maximal Fe quota for pico136 qfdmax = 40E-6 ! Maximal Fe quota for diatoms129 qppmin = 0.19 ! Minimal P quota for pico 130 qppmax = 1.15 ! Maximal P quota for pico 131 qndmin = 0.51 ! Minimal N quota for diatoms 132 qndmax = 1.25 ! Maximal N quota for diatoms 133 qpdmin = 0.24 ! Minimal P quota for diatoms 134 qpdmax = 1.525 ! Maximal P quota for diatoms 135 qfnmax = 60E-6 ! Maximal Fe quota for nano 136 qfpmax = 60E-6 ! Maximal Fe quota for pico 137 qfdmax = 60E-6 ! Maximal Fe quota for diatoms 137 138 / 138 139 !----------------------------------------------------------------------- … … 141 142 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 142 143 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 143 sn_par = 'par.orca' , 24 144 sn_par = 'par.orca' , 24. , 'fr_par' , .true. , .true. , 'yearly' , '' , '' , '' 144 145 cn_dir = './' ! root directory for the location of the dynamical files 145 146 ln_varpar = .true. ! boolean for PAR variable … … 149 150 &namp4zprod ! parameters for phytoplankton growth for PISCES std - ln_p4z 150 151 !----------------------------------------------------------------------- 151 pislopen = 2. 152 pisloped = 2. 152 pislopen = 2.5 ! P-I slope 153 pisloped = 2.5 ! P-I slope for diatoms 153 154 xadap = 0. ! Adaptation factor to low light 154 155 excretn = 0.05 ! excretion ratio of phytoplankton … … 157 158 chlcnm = 0.033 ! Maximum Chl/C in nanophytoplankton 158 159 chlcdm = 0.05 ! Maximum Chl/C in diatoms 159 chlcmin = 0.00 4! Minimum Chl/c in phytoplankton160 fecnm = 40E-6 ! Maximum Fe/C in nanophytoplankton161 fecdm = 40E-6 ! Maximum Fe/C in diatoms162 grosip = 0.1 59! mean Si/C ratio160 chlcmin = 0.003 ! Minimum Chl/c in phytoplankton 161 fecnm = 60E-6 ! Maximum Fe/C in nanophytoplankton 162 fecdm = 60E-6 ! Maximum Fe/C in diatoms 163 grosip = 0.13 ! mean Si/C ratio 163 164 / 164 165 !----------------------------------------------------------------------- 165 166 &namp5zprod ! parameters for phytoplankton growth for PISCES quota- ln_p5z 166 167 !----------------------------------------------------------------------- 167 pislopen = 3. ! P-I slope168 pislopep = 3.! P-I slope for picophytoplankton169 pisloped = 3.! P-I slope for diatoms168 pislopen = 5 ! P-I slope of nanophytoplankton 169 pislopep = 5 ! P-I slope for picophytoplankton 170 pisloped = 5 ! P-I slope for diatoms 170 171 excretn = 0.05 ! excretion ratio of phytoplankton 171 172 excretp = 0.05 ! excretion ratio of picophytoplankton … … 173 174 xadap = 0. ! Adaptation factor to low light 174 175 bresp = 0.02 ! Basal respiration rate 175 thetannm = 0. 25! Maximum Chl/N in nanophytoplankton176 thetanpm = 0. 25! Maximum Chl/N in picophytoplankton177 thetandm = 0. 3! Maximum Chl/N in diatoms178 chlcmin = 0.00 4! Minimum Chl/c in phytoplankton179 grosip = 0.1 31! mean Si/C ratio176 thetannm = 0.3 ! Maximum Chl/N in nanophytoplankton 177 thetanpm = 0.3 ! Maximum Chl/N in picophytoplankton 178 thetandm = 0.4 ! Maximum Chl/N in diatoms 179 chlcmin = 0.003 ! Minimum Chl/c in phytoplankton 180 grosip = 0.12 ! mean Si/C ratio 180 181 / 181 182 !----------------------------------------------------------------------- 182 183 &namp4zmort ! parameters for phytoplankton sinks for PISCES std - ln_p4z 183 184 !----------------------------------------------------------------------- 184 wchl = 0.01 ! quadratic mortality of phytoplankton 185 wchld = 0.01 ! maximum quadratic mortality of diatoms 186 wchldm = 0.03 ! maximum quadratic mortality of diatoms 187 mprat = 0.01 ! phytoplankton mortality rate 188 mprat2 = 0.01 ! Diatoms mortality rate 185 wchln = 0.01 ! quadratic mortality of phytoplankton 186 wchld = 0.03 ! maximum quadratic mortality of diatoms 187 mpratn = 0.01 ! phytoplankton mortality rate 188 mpratd = 0.01 ! Diatoms mortality rate 189 189 / 190 190 !----------------------------------------------------------------------- … … 193 193 wchln = 0.01 ! quadratic mortality of nanophytoplankton 194 194 wchlp = 0.01 ! quadratic mortality of picophytoplankton 195 wchld = 0.01 ! maximum quadratic mortality of diatoms 196 wchldm = 0.02 ! maximum quadratic mortality of diatoms 195 wchld = 0.03 ! maximum quadratic mortality of diatoms 197 196 mpratn = 0.01 ! nanophytoplankton mortality rate 198 197 mpratp = 0.01 ! picophytoplankton mortality rate 199 mprat 2= 0.01 ! Diatoms mortality rate198 mpratd = 0.01 ! Diatoms mortality rate 200 199 / 201 200 !----------------------------------------------------------------------- 202 201 &namp4zmes ! parameters for mesozooplankton for PISCES std - ln_p4z 203 202 !----------------------------------------------------------------------- 204 part2 = 0.75 ! part of calcite not dissolved in mesozoo guts 205 grazrat2 = 0.75 ! maximal mesozoo grazing rate 206 resrat2 = 0.005 ! exsudation rate of mesozooplankton 207 mzrat2 = 0.03 ! mesozooplankton mortality rate 208 xpref2d = 1. ! mesozoo preference for diatoms 209 xpref2n = 0.3 ! mesozoo preference for nanophyto. 210 xpref2z = 1. ! mesozoo preference for microzoo. 211 xpref2c = 0.3 ! mesozoo preference for poc 212 xthresh2zoo = 1E-8 ! zoo feeding threshold for mesozooplankton 213 xthresh2dia = 1E-8 ! diatoms feeding threshold for mesozooplankton 214 xthresh2phy = 1E-8 ! nanophyto feeding threshold for mesozooplankton 215 xthresh2poc = 1E-8 ! poc feeding threshold for mesozooplankton 216 xthresh2 = 3E-7 ! Food threshold for grazing 217 xkgraz2 = 20.E-6 ! half saturation constant for meso grazing 218 epsher2 = 0.35 ! Efficicency of Mesozoo growth 219 epsher2min = 0.35 ! Minimum efficiency of mesozoo growth 220 sigma2 = 0.6 ! Fraction of mesozoo excretion as DOM 221 unass2 = 0.3 ! non assimilated fraction of P by mesozoo 222 grazflux = 3.e3 ! flux-feeding rate 203 part2 = 0.75 ! part of calcite not dissolved in mesozoo guts 204 grazrat2 = 0.5 ! maximal mesozoo grazing rate 205 resrat2 = 0.005 ! exsudation rate of mesozooplankton 206 mzrat2 = 0.01 ! mesozooplankton mortality rate 207 xpref2d = 1. ! mesozoo preference for diatoms 208 xpref2n = 0.3 ! mesozoo preference for nanophyto. 209 xpref2z = 1. ! mesozoo preference for microzoo. 210 xpref2c = 0.3 ! mesozoo preference for poc 211 xthresh2zoo = 1E-8 ! zoo feeding threshold for mesozooplankton 212 xthresh2dia = 1E-8 ! diatoms feeding threshold for mesozooplankton 213 xthresh2phy = 1E-8 ! nanophyto feeding threshold for mesozooplankton 214 xthresh2poc = 1E-8 ! poc feeding threshold for mesozooplankton 215 xthresh2 = 3E-7 ! Food threshold for grazing 216 xkgraz2 = 20.E-6 ! half saturation constant for meso grazing 217 epsher2 = 0.4 ! Efficicency of Mesozoo growth 218 epsher2min = 0.4 ! Minimum efficiency of mesozoo growth 219 sigma2 = 0.6 ! Fraction of mesozoo excretion as DOM 220 unass2 = 0.3 ! non assimilated fraction of P by mesozoo 221 grazflux = 2.e3 ! flux-feeding rate 222 xsigma2 = 0.5 ! Predation window size 223 xsigma2del = 1.0 ! Predation window size scaling 224 ln_dvm_meso = .false. ! Activates DVM for mesozooplankton 225 xfracmig = 0.3 ! Fraction of mesozooplankton performing DVM 223 226 / 224 227 !----------------------------------------------------------------------- 225 228 &namp5zmes ! parameters for mesozooplankton 226 229 !----------------------------------------------------------------------- 227 part2 = 0.75 ! part of calcite not dissolved in mesozoo guts228 grazrat2 = 0.85! maximal mesozoo grazing rate229 bmetexc2 = .true. ! Metabolic use of excess carbon230 resrat2 = 0.005 ! exsudation rate of mesozooplankton231 mzrat2 = 0.02! mesozooplankton mortality rate232 xpref2d = 1. ! zoo preference for phyto233 xpref2 p = 1. ! zoo preference for POC234 xpref2z = 1. ! zoo preference for zoo235 xpref2m = 0.2! meso preference for zoo236 xpref2c = 0.3 ! zoo preference for poc237 xthresh2zoo = 1E-8 ! zoo feeding threshold for mesozooplankton238 xthresh2dia = 1E-8 ! diatoms feeding threshold for mesozooplankton239 xthresh2phy = 1E-8 ! nanophyto feeding threshold for mesozooplankton240 xthresh2mes = 1E-8 ! meso feeding threshold for mesozooplankton241 xthresh2poc = 1E-8 ! poc feeding threshold for mesozooplankton230 part2 = 0.75 ! part of calcite not dissolved in mesozoo guts 231 grazrat2 = 0.5 ! maximal mesozoo grazing rate 232 bmetexc2 = .true. ! Metabolic use of excess carbon 233 resrat2 = 0.005 ! exsudation rate of mesozooplankton 234 mzrat2 = 0.01 ! mesozooplankton mortality rate 235 xpref2d = 1. ! meso preference for diatoms 236 xpref2n = 0.3 ! meso preference for nano 237 xpref2z = 1. ! meso preference for zoo 238 xpref2m = 0. ! meso preference for zoo 239 xpref2c = 0.3 ! meso preference for poc 240 xthresh2zoo = 1E-8 ! zoo feeding threshold for mesozooplankton 241 xthresh2dia = 1E-8 ! diatoms feeding threshold for mesozooplankton 242 xthresh2phy = 1E-8 ! nanophyto feeding threshold for mesozooplankton 243 xthresh2mes = 1E-8 ! meso feeding threshold for mesozooplankton 244 xthresh2poc = 1E-8 ! poc feeding threshold for mesozooplankton 242 245 xthresh2 = 3E-7 ! Food threshold for grazing 243 246 xkgraz2 = 20.E-6 ! half sturation constant for meso grazing 244 247 epsher2 = 0.5 ! Efficicency of Mesozoo growth 245 epsher2min = 0.2 ! Minimum efficiency of mesozoo growth 246 ssigma2 = 0.5 ! Fraction excreted as semi-labile DOM 247 srespir2 = 0.2 ! Active respiration 248 unass2c = 0.3 ! non assimilated fraction of P by mesozoo 249 unass2n = 0.3 ! non assimilated fraction of N by mesozoo 250 unass2p = 0.3 ! non assimilated fraction of P by mesozoo 251 grazflux = 3.e3 ! flux-feeding rate 248 epsher2min = 0.5 ! Minimum efficiency of mesozoo growth 249 ssigma2 = 0.5 ! Fraction excreted as semi-labile DOM 250 srespir2 = 0.2 ! Active respiration 251 unass2c = 0.3 ! non assimilated fraction of C by mesozoo 252 unass2n = 0.3 ! non assimilated fraction of N by mesozoo 253 unass2p = 0.3 ! non assimilated fraction of P by mesozoo 254 xsigma2 = 0.5 ! Predation window size 255 xsigma2del = 1.0 ! Predation window size scaling 256 grazflux = 2.e3 ! flux-feeding rate 257 ln_dvm_meso = .false. ! Activates DVM for mesozooplankton 258 xfracmig = 0.25 ! Fraction of mesozooplankton performing DVM 252 259 / 253 260 !----------------------------------------------------------------------- 254 261 &namp4zzoo ! parameters for microzooplankton for PISCES std - ln_p4z 255 262 !----------------------------------------------------------------------- 256 part = 0. 5! part of calcite not dissolved in microzoo guts257 grazrat = 3.0 ! maximal zoo grazing rate258 resrat = 0.0 3 ! exsudationrate of zooplankton259 mzrat = 0.00 4! zooplankton mortality rate263 part = 0.75 ! part of calcite not dissolved in microzoo guts 264 grazrat = 2.0 ! maximal zoo grazing rate 265 resrat = 0.02 ! Linear mortality rate of zooplankton 266 mzrat = 0.005 ! zooplankton mortality rate 260 267 xprefc = 0.1 ! Microzoo preference for POM 261 268 xprefn = 1. ! Microzoo preference for Nanophyto 262 xprefd = 0. 6! Microzoo preference for Diatoms269 xprefd = 0.8 ! Microzoo preference for Diatoms 263 270 xthreshdia = 1.E-8 ! Diatoms feeding threshold for microzooplankton 264 271 xthreshphy = 1.E-8 ! Nanophyto feeding threshold for microzooplankton … … 266 273 xthresh = 3.E-7 ! Food threshold for feeding 267 274 xkgraz = 20.E-6 ! half sturation constant for grazing 268 epsher = 0. 3! Efficiency of microzoo growth269 epshermin = 0. 3! Minimum efficiency of microzoo growth275 epsher = 0.4 ! Efficiency of microzoo growth 276 epshermin = 0.4 ! Minimum efficiency of microzoo growth 270 277 sigma1 = 0.6 ! Fraction of microzoo excretion as DOM 271 278 unass = 0.3 ! non assimilated fraction of phyto by zoo 279 xsigma = 0.5 ! Predation window size 280 xsigmadel = 1.0 ! Predation window size scaling 272 281 / 273 282 !----------------------------------------------------------------------- 274 283 &namp5zzoo ! parameters for microzooplankton 275 284 !----------------------------------------------------------------------- 276 part = 0. 5! part of calcite not dissolved in microzoo gutsa277 grazrat = 2. 75! maximal zoo grazing rate285 part = 0.75 ! part of calcite not dissolved in microzoo gutsa 286 grazrat = 2.0 ! maximal zoo grazing rate 278 287 bmetexc = .true. ! Metabolic use of excess carbon 279 resrat = 0.0 3! exsudation rate of zooplankton288 resrat = 0.02 ! exsudation rate of zooplankton 280 289 mzrat = 0.005 ! zooplankton mortality rate 281 290 xprefc = 0.1 ! Microzoo preference for POM 282 xprefn = 1. 283 xprefp = 1. 6! Microzoo preference for picophyto284 xprefd = 1.0! Microzoo preference for Diatoms285 xprefz = 0. 3! Microzoo preference for microzooplankton291 xprefn = 1.0 ! Microzoo preference for Nanophyto 292 xprefp = 1.0 ! Microzoo preference for picophyto 293 xprefd = 0.8 ! Microzoo preference for Diatoms 294 xprefz = 0. ! Microzoo preference for microzooplankton 286 295 xthreshdia = 1.E-8 ! Diatoms feeding threshold for microzooplankton 287 296 xthreshphy = 1.E-8 ! Nanophyto feeding threshold for microzooplankton 288 xthreshpic = 1.E-8 289 xthreshzoo = 1.E-8 ! Nanophyto feeding threshold for microzooplankton297 xthreshpic = 1.E-8 ! Picophyto feeding threshold for microzooplankton 298 xthreshzoo = 1.E-8 ! Microzoo feeding threshold for microzooplankton 290 299 xthreshpoc = 1.E-8 ! POC feeding threshold for microzooplankton 291 300 xthresh = 3.E-7 ! Food threshold for feeding 292 xkgraz = 20.E-6 ! half s turation constant for grazing301 xkgraz = 20.E-6 ! half saturation constant for grazing 293 302 epsher = 0.5 ! Efficiency of microzoo growth 294 epshermin = 0. 2! Minimum efficiency of microzoo growth303 epshermin = 0.5 ! Minimum efficiency of microzoo growth 295 304 ssigma = 0.5 ! Fraction excreted as semi-labile DOM 296 305 srespir = 0.2 ! Active respiration 297 306 unassc = 0.3 ! non assimilated fraction of C by zoo 298 unassn = 0.3 ! non assimilated fraction of C by zoo 299 unassp = 0.3 ! non assimilated fraction of C by zoo 307 unassn = 0.3 ! non assimilated fraction of N by zoo 308 unassp = 0.3 ! non assimilated fraction of P by zoo 309 xsigma = 0.5 ! Predation window size 310 xsigmadel = 1.0 ! Predation window size scaling 300 311 / 301 312 !----------------------------------------------------------------------- 302 313 &nampisfer ! parameters for iron chemistry 303 314 !----------------------------------------------------------------------- 304 ln_ligvar = .false. 305 xlam1 = 0.0 05 ! scavenging rate of Iron306 xlamdust = 150.0 ! Scavenging rate of dust307 ligand = 0.7E-9! Ligands concentration315 ln_ligvar = .false. ! variable ligand concentration 316 xlam1 = 0.05 ! scavenging rate of Iron by biogenic particles 317 xlamdust = 150.0 ! Scavenging rate of Iron by dust 318 ligand = 1E-9 ! Ligands concentration 308 319 kfep = 0.01 ! Nanoparticle formation rate constant 320 scaveff = 1.0 ! Fraction of scavenged Fe that goes to POFe 309 321 / 310 322 !----------------------------------------------------------------------- 311 323 &nampisrem ! parameters for remineralization 312 324 !----------------------------------------------------------------------- 313 xremik = 0.3 ! remineralization rate of DOC314 325 nitrif = 0.05 ! NH4 nitrification rate 315 326 xsirem = 0.003 ! remineralization rate of Si 316 327 xsiremlab = 0.03 ! fast remineralization rate of Si 317 328 xsilab = 0.5 ! Fraction of labile biogenic silica 318 feratb = 10.E-6 ! Fe/C quota in bacteria329 feratb = 30.E-6 ! Fe/C quota in bacteria 319 330 xkferb = 3E-10 ! Half-saturation constant for bacteria Fe/C 320 331 ! ! ln_p5z 321 xremikc = 0.25 ! remineralization rate of DOC 322 xremikn = 0.35 ! remineralization rate of DON 323 xremikp = 0.4 ! remineralization rate of DOP 324 ! feratb = 20E-6 ! Bacterial Fe/C ratio 325 ! xkferb = 3E-10 ! Half-saturation constant for bact. Fe/C 332 xremikc = 0.4 ! remineralization rate of DOC 333 xremikn = 0.4 ! remineralization rate of DON 334 xremikp = 0.5 ! remineralization rate of DOP 326 335 / 327 336 !----------------------------------------------------------------------- 328 337 &nampispoc ! parameters for organic particles 329 338 !----------------------------------------------------------------------- 330 xremip = 0.035 ! remineralisation rate of PO N339 xremip = 0.035 ! remineralisation rate of POC 331 340 jcpoc = 15 ! Number of lability classes 332 341 rshape = 1.0 ! Shape of the gamma function 333 342 ! ! ln_p5z 334 xremipc = 0.02 335 xremipn = 0.0 25! remineralisation rate of PON336 xremipp = 0.03 343 xremipc = 0.028 ! remineralisation rate of POC 344 xremipn = 0.03 ! remineralisation rate of PON 345 xremipp = 0.035 ! remineralisation rate of POP 337 346 / 338 347 !----------------------------------------------------------------------- 339 348 &nampiscal ! parameters for Calcite chemistry 340 349 !----------------------------------------------------------------------- 341 kdca = 6. ! calcite dissolution rate constant (1/time)342 nca = 1. ! order of dissolution reaction (dimensionless)350 kdca = 3. ! calcite dissolution rate constant (1/time) 351 nca = 2. ! order of dissolution reaction (dimensionless) 343 352 / 344 353 !----------------------------------------------------------------------- … … 358 367 distcoast = 5.e3 ! Distance off the coast for Iron from sediments 359 368 mfrac = 0.035 ! Fe mineral fraction of dust 360 wdust = 2.0 ! Dust sinking speed 369 wdust = 2.0 ! Dust sinking speed 361 370 icefeinput = 15.e-9 ! Iron concentration in sea ice 362 hratio = 1.e+7 ! Fe to 3He ratio assumed for vent iron supply 371 hratio = 1.e+7 ! Fe to 3He ratio assumed for vent iron supply 363 372 ! ! ln_ligand 364 lgw_rath = 0.5 ! Weak ligand ratio from sed hydro sources 365 / 366 !----------------------------------------------------------------------- 367 &nampissed ! parameters for sediments mobilization 368 !----------------------------------------------------------------------- 369 nitrfix = 1.e-7 ! Nitrogen fixation rate 370 diazolight = 50. ! Diazotrophs sensitivity to light (W/m2) 371 concfediaz = 1.e-10 ! Diazotrophs half-saturation Cste for Iron 373 lgw_rath = 0.5 ! Weak ligand ratio from sed hydro sources 372 374 / 373 375 !----------------------------------------------------------------------- 374 376 &nampislig ! Namelist parameters for ligands, nampislig 375 377 !----------------------------------------------------------------------- 376 rlgw = 100. ! Lifetime (years) of weak ligands378 rlgw = 200. ! Lifetime (years) of weak ligands 377 379 rlig = 1.E-4 ! Remin ligand production per unit C 378 prlgw = 1.E-4 ! Photolysis of weak ligand380 prlgw = 5.E-4 ! Photolysis of weak ligand 379 381 rlgs = 1. ! Lifetime (years) of strong ligands 382 xklig = 1.E-9 ! 1/2 saturation constant of photolysis 380 383 / 381 384 !----------------------------------------------------------------------- -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zagg.F90
r13295 r14385 2 2 !!====================================================================== 3 3 !! *** MODULE p4zagg *** 4 !! TOP : PISCES aggregation of particles 4 !! TOP : PISCES aggregation of particles (DOC, POC, GOC) 5 !! This module is the same for both PISCES and PISCES-QUOTA 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 37 38 !! *** ROUTINE p4z_agg *** 38 39 !! 39 !! ** Purpose : Compute aggregation of particles 40 !! ** Purpose : Compute aggregation of particle. Aggregation by 41 !! brownian motion, differential settling and shear 42 !! are considered. 40 43 !! 41 !! ** Method : - ??? 44 !! ** Method : - Aggregation rates are computed assuming a fixed and 45 !! constant size spectrum in the different particulate 46 !! pools. The coagulation rates have been computed 47 !! externally using dedicated programs (O. Aumont). They 48 !! are hard-coded because they can't be changed 49 !! independently of each other. 42 50 !!--------------------------------------------------------------------- 43 51 INTEGER, INTENT(in) :: kt, knt ! … … 56 64 IF( ln_timing ) CALL timing_start('p4z_agg') 57 65 ! 58 ! Exchange between organic matter compartments due to coagulation/disaggregation 66 ! Exchange between organic matter compartments due to 67 ! coagulation/disaggregation 59 68 ! --------------------------------------------------- 69 70 ! PISCES part 60 71 IF( ln_p4z ) THEN 61 72 ! … … 63 74 ! 64 75 zfact = xstep * xdiss(ji,jj,jk) 76 ! Part I : Coagulation dependent on turbulence 77 ! The stickiness has been assumed to be 0.1 65 78 ! Part I : Coagulation dependent on turbulence 66 zagg1 = 25.9* zfact * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jppoc,Kbb)67 zagg2 = 4452.* zfact * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jpgoc,Kbb)79 zagg1 = 12.5 * zfact * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jppoc,Kbb) 80 zagg2 = 169.7 * zfact * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jpgoc,Kbb) 68 81 69 82 ! Part II : Differential settling 70 71 ! Aggregation of small into large particles72 zagg3 = 47.1 * xstep * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jpgoc,Kbb)73 zagg4 = 3.3 * xstep * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jppoc,Kbb)83 ! Aggregation of small into large particles 84 ! The stickiness has been assumed to be 0.1 85 zagg3 = 8.63 * xstep * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jppoc,Kbb) 86 zagg4 = 132.8 * xstep * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jpgoc,Kbb) 74 87 75 88 zagg = zagg1 + zagg2 + zagg3 + zagg4 … … 80 93 ! 2nd term is shear aggregation of DOC-POC 81 94 ! 3rd term is differential settling of DOC-POC 82 zaggdoc = ( ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact & 83 & + 2.4 * xstep * tr(ji,jj,jk,jppoc,Kbb) ) * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 95 ! 1/3 of DOC is supposed to experience aggregation (HMW) 96 zaggdoc = ( ( 12.0 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact & 97 & + 2.49 * xstep * tr(ji,jj,jk,jppoc,Kbb) ) * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 84 98 ! transfer of DOC to GOC : 85 99 ! 1st term is shear aggregation 86 ! 2nd term is differential settling87 zaggdoc2 = ( 3.53E3 * zfact + 0.1* xstep ) * tr(ji,jj,jk,jpgoc,Kbb) * 0.3 * tr(ji,jj,jk,jpdoc,Kbb)100 ! 1/3 of DOC is supposed to experience aggregation (HMW) 101 zaggdoc2 = ( 1.94 * zfact + 1.37 * xstep ) * tr(ji,jj,jk,jpgoc,Kbb) * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 88 102 ! tranfer of DOC to POC due to brownian motion 89 zaggdoc3 = 114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) *xstep * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 103 ! The temperature dependency has been omitted. 104 zaggdoc3 = ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) * xstep * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 90 105 91 106 ! Update the trends … … 101 116 END_3D 102 117 ELSE ! ln_p5z 118 ! PISCES-QUOTA part 103 119 ! 104 120 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) … … 106 122 zfact = xstep * xdiss(ji,jj,jk) 107 123 ! Part I : Coagulation dependent on turbulence 124 ! The stickiness has been assumed to be 0.1 108 125 zaggtmp = 25.9 * zfact * tr(ji,jj,jk,jppoc,Kbb) 109 126 zaggpoc1 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb) 110 127 zaggtmp = 4452. * zfact * tr(ji,jj,jk,jpgoc,Kbb) 111 128 zaggpoc2 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb) 112 129 113 130 ! Part II : Differential settling 114 131 ! The stickiness has been assumed to be 0.1 132 115 133 ! Aggregation of small into large particles 116 134 zaggtmp = 47.1 * xstep * tr(ji,jj,jk,jpgoc,Kbb) … … 119 137 zaggpoc4 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb) 120 138 121 zaggpoc 139 zaggpoc = zaggpoc1 + zaggpoc2 + zaggpoc3 + zaggpoc4 122 140 zaggpon = zaggpoc * tr(ji,jj,jk,jppon,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 123 141 zaggpop = zaggpoc * tr(ji,jj,jk,jppop,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 124 zaggfe = zaggpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn )142 zaggfe = zaggpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn ) 125 143 126 144 ! Aggregation of DOC to POC : … … 128 146 ! 2nd term is shear aggregation of DOC-POC 129 147 ! 3rd term is differential settling of DOC-POC 130 zaggtmp = ( ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact & 131 & + 2.4 * xstep * tr(ji,jj,jk,jppoc,Kbb) ) 148 ! 1/3 of DOC is supposed to experience aggregation (HMW) 149 zaggtmp = ( ( 0.37 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 20.5 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact & 150 & + 0.15 * xstep * tr(ji,jj,jk,jppoc,Kbb) ) 132 151 zaggdoc = zaggtmp * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 133 152 zaggdon = zaggtmp * 0.3 * tr(ji,jj,jk,jpdon,Kbb) … … 137 156 ! 1st term is shear aggregation 138 157 ! 2nd term is differential settling 139 zaggtmp = ( 3.53E3 * zfact + 0.1 * xstep ) * tr(ji,jj,jk,jpgoc,Kbb) 158 ! 1/3 of DOC is supposed to experience aggregation (HMW) 159 zaggtmp = 655.4 * zfact * tr(ji,jj,jk,jpgoc,Kbb) 140 160 zaggdoc2 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 141 161 zaggdon2 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdon,Kbb) … … 143 163 144 164 ! tranfer of DOC to POC due to brownian motion 145 zaggtmp = ( 114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) * xstep 165 ! 1/3 of DOC is supposed to experience aggregation (HMW) 166 zaggtmp = ( 260.2 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 418.5 * tr(ji,jj,jk,jppoc,Kbb) ) * xstep 146 167 zaggdoc3 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) 147 168 zaggdon3 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdon,Kbb) 148 169 zaggdop3 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdop,Kbb) 170 149 171 150 172 ! Update the trends -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zbc.F90
r13295 r14385 71 71 ! 72 72 INTEGER :: ji, jj, jk, jl 73 REAL(wp) :: z coef, zyyss74 REAL(wp) :: z dep, ztrfer, zwdust, zwflux, zrivdin73 REAL(wp) :: zdep, zwflux, zironice 74 REAL(wp) :: zcoef, zwdust, zrivdin, zdustdep, zndep 75 75 ! 76 76 CHARACTER (len=25) :: charout 77 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zirondep78 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zironice, zndep79 77 !!--------------------------------------------------------------------- 80 78 ! 81 79 IF( ln_timing ) CALL timing_start('p4z_bc') 82 ! 80 81 ! Add the external input of nutrients from dust deposition in the water column 82 ! The inputs at surface have already been added 83 ! ---------------------------------------------------------- 83 84 IF( ll_dust ) THEN 84 ALLOCATE( zirondep(jpi,jpj,jpk) )85 85 ! 86 86 CALL fld_read( kt, 1, sf_dust ) 87 87 dust(:,:) = MAX( rtrn, sf_dust(1)%fnow(:,:,1) ) 88 88 ! 89 jl = n_trc_indsbc(jpfer) 90 zirondep(:,:,1) = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / e3t(:,:,1,Kmm) / rn_sbc_time 91 ! ! Iron solubilization of particles in the water column 92 ! ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ; wdust in m/j 93 zwdust = 0.03 / ( wdust / rday ) / ( 270. * rday ) 94 DO jk = 2, jpkm1 95 zirondep(:,:,jk) = ( mfrac * dust(:,:) * zwdust / mMass_Fe ) * rfact * EXP( -gdept(:,:,jk,Kmm) / 540. ) 96 tr(:,:,jk,jpfer,Krhs) = tr(:,:,jk,jpfer,Krhs) + zirondep(:,:,jk) 97 tr(:,:,jk,jppo4,Krhs) = tr(:,:,jk,jppo4,Krhs) + zirondep(:,:,jk) * 0.023 98 ENDDO 89 ! Iron solubilization of particles in the water column 90 ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ; wdust in m/d 91 ! Dust are supposed to sink at wdust sinking speed. 3% of the iron 92 ! in dust is hypothesized to be soluble at a dissolution rate set to 93 ! 1/(250 days). The vertical distribution of iron in dust is computed 94 ! from a steady state assumption. Parameters are very uncertain and 95 ! are estimated from the literature quoted in Raiswell et al. (2011) 96 ! ------------------------------------------------------------------- 97 98 zwdust = 0.03 / ( wdust / rday ) / ( 250. * rday ) 99 DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 100 zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) ) 101 ! 102 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zdustdep * mfrac / mMass_Fe 103 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zdustdep * 1.e-3 / mMass_P 104 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) + zdustdep * 0.269 / mMass_Si 105 END_3D 99 106 ! 100 107 IF( lk_iomput ) THEN 101 CALL iom_put( "Irondep", zirondep(:,:,1) * 1.e+3 * rfactr * e3t(:,:,1,Kmm) * tmask(:,:,1) ) ! surface downward dust depo of iron 108 ! surface downward dust depo of iron 109 jl = n_trc_indsbc(jpfer) 110 CALL iom_put( "Irondep", ( rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / rn_sbc_time ) * 1.e+3 * rfactr * tmask(:,:,1) ) 111 112 ! dust concentration at surface 102 113 CALL iom_put( "pdust" , dust(:,:) / ( wdust * rday ) * tmask(:,:,1) ) ! dust concentration at surface 103 114 ENDIF 104 DEALLOCATE( zirondep ) 105 ENDIF 106 107 ! N/P and Si releases due to coastal rivers 108 ! Compute river at nit000 or only if there is more than 1 time record in river file 115 ENDIF 116 109 117 ! ----------------------------------------- 110 118 ! Add the external input of nutrients from river 111 119 ! ---------------------------------------------------------- 112 120 IF( ll_river ) THEN … … 124 132 ! ---------------------------------------------------------- 125 133 IF( ll_ndepo ) THEN 126 ALLOCATE( zndep(jpi,jpj) )127 134 IF( ln_trc_sbc(jpno3) ) THEN 128 135 jl = n_trc_indsbc(jpno3) 129 zndep(:,:) = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / e3t(:,:,1,Kmm) / rn_sbc_time 130 tr(:,:,1,jptal,Krhs) = tr(:,:,1,jptal,Krhs) - rno3 * zndep(:,:) * rfact 136 DO_2D( 1, 1, 1, 1 ) 137 zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time 138 tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) - rno3 * zndep * rfact 139 END_2D 131 140 ENDIF 132 141 IF( ln_trc_sbc(jpnh4) ) THEN 133 142 jl = n_trc_indsbc(jpnh4) 134 zndep(:,:) = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / e3t(:,:,1,Kmm) / rn_sbc_time 135 tr(:,:,1,jptal,Krhs) = tr(:,:,1,jptal,Krhs) - rno3 * zndep(:,:) * rfact 136 ENDIF 137 DEALLOCATE( zndep ) 138 ENDIF 139 ! 140 ! Iron input/uptake due to sea ice : Crude parameterization based on 141 ! Lancelot et al. 143 DO_2D( 1, 1, 1, 1 ) 144 zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time 145 tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) - rno3 * zndep * rfact 146 END_2D 147 ENDIF 148 ENDIF 149 ! 150 ! Iron input/uptake due to sea ice : Crude parameterization based on 151 ! Lancelot et al. Iron concentration in sea-ice is constant and set 152 ! in the namelist_pisces (icefeinput). ln_ironice is forced to false 153 ! when nn_ice_tr = 1 142 154 ! ---------------------------------------------------- 143 155 IF( ln_ironice ) THEN 144 156 ! 145 ALLOCATE( zironice(jpi,jpj) ) 146 ! 157 ! Compute the iron flux between sea ice and sea water 158 ! Simple parameterization assuming a fixed constant concentration in 159 ! sea-ice (icefeinput) 160 ! ------------------------------------------------------------------ 147 161 DO_2D( 1, 1, 1, 1 ) 148 zdep = rfact / e3t(ji,jj,1,Kmm) 149 zwflux = fmmflx(ji,jj) / 1000._wp 150 zironice(ji,jj) = MAX( -0.99 * tr(ji,jj,1,jpfer,Kbb), -zwflux * icefeinput * zdep ) 162 zdep = rfact / e3t(ji,jj,1,Kmm) 163 zwflux = fmmflx(ji,jj) / 1000._wp 164 zironice = MAX( -0.99 * tr(ji,jj,1,jpfer,Kbb), -zwflux * icefeinput * zdep ) 165 tr(ji,jj,1,jpfer,Krhs) = tr(ji,jj,1,jpfer,Krhs) + zironice 151 166 END_2D 152 167 ! 153 tr(:,:,1,jpfer,Krhs) = tr(:,:,1,jpfer,Krhs) + zironice(:,:) 154 ! 155 IF( lk_iomput ) CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfactr * e3t(:,:,1,Kmm) * tmask(:,:,1) ) ! iron flux from ice 156 ! 157 DEALLOCATE( zironice ) 168 ! iron flux from ice 169 IF( lk_iomput ) & 170 & CALL iom_put( "Ironice", MAX( -0.99 * tr(:,:,1,jpfer,Kbb), (-1.*fmmflx(:,:)/1000._wp )*icefeinput*1.e+3*tmask(:,:,1)) ) 158 171 ! 159 172 ENDIF -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zbio.F90
r13295 r14385 2 2 !!====================================================================== 3 3 !! *** MODULE p4zbio *** 4 !! TOP : PISCES bio-model 4 !! TOP : PISCES biogeochemical model 5 !! This module is for both PISCES and PISCES-QUOTA 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 8 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 9 !! 3.6 ! 2015 (O. Aumont) PISCES-QUOTA 8 10 !!---------------------------------------------------------------------- 9 11 !! p4z_bio : computes the interactions between the different … … 53 55 !! 54 56 !! ** Purpose : Ecosystem model in the whole ocean: computes the 55 !! different interactions between the different compartments56 !! of PISCES57 !! different interactions between the different compartments 58 !! of PISCES 57 59 !! 58 60 !! ** Method : - ??? … … 66 68 ! 67 69 IF( ln_timing ) CALL timing_start('p4z_bio') 68 !69 ! ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION70 ! OF PHYTOPLANKTON AND DETRITUS71 70 71 ! ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION 72 ! OF PHYTOPLANKTON AND DETRITUS. Shear rate is supposed to equal 1 73 ! in the mixed layer and 0.1 below the mixed layer. 72 74 xdiss(:,:,:) = 1. 73 !!gm the use of nmld should be better here?74 75 DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 75 !!gm : use nmln and test on jk ... less memory acces76 76 IF( gdepw(ji,jj,jk+1,Kmm) > hmld(ji,jj) ) xdiss(ji,jj,jk) = 0.01 77 77 END_3D … … 81 81 CALL p4z_fechem ( kt, knt, Kbb, Kmm, Krhs ) ! Iron chemistry/scavenging 82 82 ! 83 IF( ln_p4z ) THEN 83 IF( ln_p4z ) THEN ! PISCES standard 84 ! Phytoplankton only sources/sinks terms 84 85 CALL p4z_lim ( kt, knt, Kbb, Kmm ) ! co-limitations by the various nutrients 85 86 CALL p4z_prod ( kt, knt, Kbb, Kmm, Krhs ) ! phytoplankton growth rate over the global ocean. 86 87 ! ! (for each element : C, Si, Fe, Chl ) 87 88 CALL p4z_mort ( kt, Kbb, Krhs ) ! phytoplankton mortality 88 ! !zooplankton sources/sinks routines89 ! zooplankton sources/sinks routines 89 90 CALL p4z_micro( kt, knt, Kbb, Krhs ) ! microzooplankton 90 CALL p4z_meso ( kt, knt, Kbb, Krhs ) ! mesozooplankton 91 ELSE 91 CALL p4z_meso ( kt, knt, Kbb, Kmm, Krhs ) ! mesozooplankton 92 ELSE ! PISCES-QUOTA 93 ! Phytoplankton only sources/sinks terms 92 94 CALL p5z_lim ( kt, knt, Kbb, Kmm ) ! co-limitations by the various nutrients 93 95 CALL p5z_prod ( kt, knt, Kbb, Kmm, Krhs ) ! phytoplankton growth rate over the global ocean. 94 96 ! ! (for each element : C, Si, Fe, Chl ) 95 97 CALL p5z_mort ( kt, Kbb, Krhs ) ! phytoplankton mortality 96 ! !zooplankton sources/sinks routines98 ! zooplankton sources/sinks routines 97 99 CALL p5z_micro( kt, knt, Kbb, Krhs ) ! microzooplankton 98 CALL p5z_meso ( kt, knt, Kbb, 100 CALL p5z_meso ( kt, knt, Kbb, Kmm, Krhs ) ! mesozooplankton 99 101 ENDIF 100 102 ! … … 103 105 CALL p4z_poc ( kt, knt, Kbb, Kmm, Krhs ) ! Remineralization of organic particles 104 106 ! 107 ! Ligand production. ln_ligand should be set .true. to activate 105 108 IF( ln_ligand ) & 106 109 & CALL p4z_ligand( kt, knt, Kbb, Krhs ) 110 111 ! Update of the size of the different phytoplankton groups 112 sized(:,:,:) = MAX(1.0, sizeda(:,:,:) ) 113 sizen(:,:,:) = MAX(1.0, sizena(:,:,:) ) 114 IF (ln_p5z) THEN 115 sizep(:,:,:) = MAX(1.0, sizepa(:,:,:) ) 116 ENDIF 107 117 ! ! 108 118 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zfechem.F90
r13472 r14385 30 30 REAL(wp), PUBLIC :: ligand !: ligand concentration in the ocean 31 31 REAL(wp), PUBLIC :: kfep !: rate constant for nanoparticle formation 32 REAL(wp), PUBLIC :: scaveff !: Fraction of scavenged iron that is considered as being subject to solubilization 32 33 33 34 !! * Substitutions … … 54 55 ! 55 56 INTEGER :: ji, jj, jk, jic, jn 56 REAL(wp) :: zdep, zlam1a, zlam1b, zlamfac 57 REAL(wp) :: zkeq, zfeequi, zfesatur, zfecoll, fe3sol 58 REAL(wp) :: zdenom1, zscave, zaggdfea, zaggdfeb, zcoag 59 REAL(wp) :: ztrc, zdust 60 REAL(wp) :: zdenom2 61 REAL(wp) :: zzFeL1, zzFeL2, zzFe2, zzFeP, zzFe3, zzstrn2 62 REAL(wp) :: zrum, zcodel, zargu, zlight 63 REAL(wp) :: zkox, zkph1, zkph2, zph, zionic, ztligand 64 REAL(wp) :: za, zb, zc, zkappa1, zkappa2, za0, za1, za2 65 REAL(wp) :: zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq2 66 REAL(wp) :: ztfe, zoxy, zhplus, zxlam 67 REAL(wp) :: zaggliga, zaggligb 68 REAL(wp) :: dissol, zligco 69 REAL(wp) :: zrfact2 57 REAL(wp) :: zlam1a, zlam1b 58 REAL(wp) :: zkeq, zfesatur, zfecoll, fe3sol, zligco 59 REAL(wp) :: zscave, zaggdfea, zaggdfeb, ztrc, zdust, zklight 60 REAL(wp) :: ztfe, zhplus, zxlam, zaggliga, zaggligb 61 REAL(wp) :: zrfact2 70 62 CHARACTER (len=25) :: charout 71 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zTL1, zFe3, ztotlig, precip, zFeL172 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcoll3d, zscav3d, zlcoll3d 63 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zTL1, zFe3, ztotlig, precip, precipno3, zFeL1 64 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcoll3d, zscav3d, zlcoll3d, zprecip3d 73 65 !!--------------------------------------------------------------------- 74 66 ! 75 67 IF( ln_timing ) CALL timing_start('p4z_fechem') 76 68 ! 69 zFe3 (:,:,:) = 0. 70 zFeL1(:,:,:) = 0. 71 zTL1 (:,:,:) = 0. 72 77 73 ! Total ligand concentration : Ligands can be chosen to be constant or variable 78 ! Parameterization from Tagliabue and Voelker (2011)74 ! Parameterization from Pham and Ito (2018) 79 75 ! ------------------------------------------------- 80 76 IF( ln_ligvar ) THEN 81 ztotlig(:,:,:) = 0.09 * tr(:,:,:,jpdoc,Kbb) * 1E6 + ligand * 1E977 ztotlig(:,:,:) = 0.09 * 0.667 * tr(:,:,:,jpdoc,Kbb) * 1E6 + ligand * 1E9 + MAX(0., chemo2(:,:,:) - tr(:,:,:,jpoxy,Kbb) ) / 400.E-6 82 78 ztotlig(:,:,:) = MIN( ztotlig(:,:,:), 10. ) 83 79 ELSE 84 80 IF( ln_ligand ) THEN ; ztotlig(:,:,:) = tr(:,:,:,jplgw,Kbb) * 1E9 85 ELSE ; ztotlig(:,:,:) = ligand * 1E9 81 ELSE ; ztotlig(:,:,:) = ligand * 1E9 86 82 ENDIF 87 83 ENDIF … … 89 85 ! ------------------------------------------------------------ 90 86 ! from Aumont and Bopp (2006) 91 ! This model is based on one ligand and Fe'87 ! This model is based on one ligand, Fe2+ and Fe3+ 92 88 ! Chemistry is supposed to be fast enough to be at equilibrium 93 89 ! ------------------------------------------------------------ 94 90 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 95 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk)96 zkeq = fekeq(ji,jj,jk)97 zfesatur = zTL1(ji,jj,jk) * 1E-998 ztfe = tr(ji,jj,jk,jpfer,Kbb)99 ! Fe' is the root of a 2nd order polynom100 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) &101 & + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2&102 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq )103 zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9104 zFeL1(ji,jj,jk) = MAX( 0., tr(ji,jj,jk,jpfer,Kbb) * 1E9- zFe3(ji,jj,jk) )91 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk) 92 zkeq = fekeq(ji,jj,jk) 93 zklight = 4.77E-7 * etot(ji,jj,jk) * 0.5 / 10**-6.3 94 zfesatur = zTL1(ji,jj,jk) * 1E-9 95 ztfe = (1.0 + zklight) * tr(ji,jj,jk,jpfer,Kbb) 96 ! Fe' is the root of a 2nd order polynom 97 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq + zklight + consfe3(ji,jj,jk)/10**-6.3 - zkeq * tr(ji,jj,jk,jpfer,Kbb) ) & 98 & + SQRT( ( 1. + zfesatur * zkeq + zklight + consfe3(ji,jj,jk)/10**-6.3 - zkeq * tr(ji,jj,jk,jpfer,Kbb) )**2 & 99 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 100 zFeL1(ji,jj,jk) = MAX( 0., tr(ji,jj,jk,jpfer,Kbb) - zFe3(ji,jj,jk) ) 105 101 END_3D 106 ! 107 102 ! 103 plig(:,:,:) = MAX( 0., ( zFeL1(:,:,:) / ( tr(:,:,:,jpfer,Kbb) + rtrn ) ) ) 104 ! 108 105 zdust = 0. ! if no dust available 109 106 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) … … 117 114 & + fesol(ji,jj,jk,5) / zhplus ) 118 115 ! 119 zfeequi = zFe3(ji,jj,jk) * 1E-9120 116 zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 121 117 ! precipitation of Fe3+, creation of nanoparticles 122 precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 118 precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) - fe3sol ) ) * kfep * xstep * ( 1.0 - nitrfac(ji,jj,jk) ) 119 ! Precipitation of Fe2+ due to oxidation by NO3 (Croot et al., 2019) 120 ! This occurs in anoxic waters only 121 precipno3(ji,jj,jk) = 2.0 * 130.0 * tr(ji,jj,jk,jpno3,Kbb) * nitrfac(ji,jj,jk) * xstep * zFe3(ji,jj,jk) 123 122 ! 124 123 ztrc = ( tr(ji,jj,jk,jppoc,Kbb) + tr(ji,jj,jk,jpgoc,Kbb) + tr(ji,jj,jk,jpcal,Kbb) + tr(ji,jj,jk,jpgsi,Kbb) ) * 1.e6 125 IF( ll_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) & 126 & * EXP( -gdept(ji,jj,jk,Kmm) / 540. ) 127 IF (ln_ligand) THEN 128 zxlam = xlam1 * MAX( 1.E-3, EXP(-2 * etot(ji,jj,jk) / 10. ) * (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) )) 129 ELSE 130 zxlam = xlam1 * 1.0 131 ENDIF 132 zlam1b = 3.e-5 + xlamdust * zdust + zxlam * ztrc 133 zscave = zfeequi * zlam1b * xstep 134 135 ! Compute the different ratios for scavenging of iron 136 ! to later allocate scavenged iron to the different organic pools 137 ! --------------------------------------------------------- 138 zdenom1 = zxlam * tr(ji,jj,jk,jppoc,Kbb) / zlam1b 139 zdenom2 = zxlam * tr(ji,jj,jk,jpgoc,Kbb) / zlam1b 140 141 ! Increased scavenging for very high iron concentrations found near the coasts 142 ! due to increased lithogenic particles and let say it is unknown processes (precipitation, ...) 143 ! ----------------------------------------------------------- 144 zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 145 zlamfac = MIN( 1. , zlamfac ) 146 zdep = MIN( 1., 1000. / gdept(ji,jj,jk,Kmm) ) 147 zcoag = 1E-4 * ( 1. - zlamfac ) * zdep * xstep * tr(ji,jj,jk,jpfer,Kbb) 124 ztrc = MAX( rtrn, ztrc ) 125 IF( ll_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) 126 zxlam = MAX( 1.E-3, (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) )) 127 zlam1b = 3.e-5 + ( xlamdust * zdust + xlam1 * ztrc ) * zxlam 128 zscave = zFe3(ji,jj,jk) * zlam1b * xstep 148 129 149 130 ! Compute the coagulation of colloidal iron. This parameterization … … 151 132 ! It requires certainly some more work as it is very poorly constrained. 152 133 ! ---------------------------------------------------------------- 153 zlam1a = ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk) & 154 & + ( 114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) 134 zlam1a = ( 12.0 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05 * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk) & 135 & + ( 2.49 * tr(ji,jj,jk,jppoc,Kbb) ) & 136 & + ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) 155 137 zaggdfea = zlam1a * xstep * zfecoll 156 !157 zlam1b = 3.53E3 * tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk)138 ! 139 zlam1b = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb) 158 140 zaggdfeb = zlam1b * xstep * zfecoll 141 159 142 ! 160 143 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zscave - zaggdfea - zaggdfeb & 161 & - zcoag - precip(ji,jj,jk) 162 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * zdenom1 + zaggdfea 163 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * zdenom2 + zaggdfeb 164 zscav3d(ji,jj,jk) = zscave 165 zcoll3d(ji,jj,jk) = zaggdfea + zaggdfeb 144 & - precip(ji,jj,jk) - precipno3(ji,jj,jk) 145 146 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc 147 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc 148 149 150 ! Precipitated iron is supposed to be permanently lost. 151 ! Scavenged iron is supposed to be released back to seawater 152 ! when POM is solubilized. This is highly uncertain as probably 153 ! a significant part of it may be rescavenged back onto 154 ! the particles. An efficiency factor is applied that is read 155 ! in the namelist. 156 ! See for instance Tagliabue et al. (2019). 157 ! Aggregated FeL is considered as biogenic Fe as it 158 ! probably remains complexed when the particle is solubilized. 159 ! ------------------------------------------------------------- 160 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zaggdfea 161 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zaggdfeb 162 ! 163 zscav3d(ji,jj,jk) = zscave 164 zcoll3d(ji,jj,jk) = zaggdfea + zaggdfeb 165 zprecip3d(ji,jj,jk) = precip(ji,jj,jk) + precipno3(ji,jj,jk) 166 166 ! 167 167 END_3D … … 174 174 ! 175 175 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 176 zlam1a = ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk) & 177 & + ( 114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) 178 ! 179 zlam1b = 3.53E3 * tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk) 180 zligco = 0.5 * tr(ji,jj,jk,jplgw,Kmm) 181 zaggliga = zlam1a * xstep * zligco 182 zaggligb = zlam1b * xstep * zligco 183 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) - zaggliga - zaggligb 184 zlcoll3d(ji,jj,jk) = zaggliga + zaggligb 176 ! Coagulation of ligands due to various processes (Brownian, shear, diff. sedimentation 177 ! Coefficients are taken from p4zagg 178 ! ------------------------------------------------------------------------------------- 179 zlam1a = ( 12.0 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05 * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk) & 180 & + ( 2.49 * tr(ji,jj,jk,jppoc,Kbb) ) & 181 & + ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) 182 ! 183 zlam1b = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb) 184 ! 50% of the ligands are supposed to be in the colloidal size fraction 185 ! as for FeL 186 zligco = 0.5 * tr(ji,jj,jk,jplgw,Kbb) 187 zaggliga = zlam1a * xstep * zligco 188 zaggligb = zlam1b * xstep * zligco 189 ! 190 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) - zaggliga - zaggligb 191 zlcoll3d(ji,jj,jk) = zaggliga + zaggligb 185 192 END_3D 186 !187 193 plig(:,:,:) = MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( tr(:,:,:,jpfer,Kbb) +rtrn ) ) ) 188 194 ! … … 190 196 ! Output of some diagnostics variables 191 197 ! --------------------------------- 192 IF( lk_iomput ) THEN 193 IF( knt == nrdttrc ) THEN 194 zrfact2 = 1.e3 * rfact2r ! conversion from mol/L/timestep into mol/m3/s 195 IF( iom_use("Fe3") ) THEN 196 zFe3(:,:,jpk) = 0. ; CALL iom_put("Fe3" , zFe3(:,:,:) * tmask(:,:,:) ) ! Fe3+ 197 ENDIF 198 IF( iom_use("FeL1") ) THEN 199 zFeL1(:,:,jpk) = 0. ; CALL iom_put("FeL1", zFeL1(:,:,:) * tmask(:,:,:) ) ! FeL1 200 ENDIF 201 IF( iom_use("TL1") ) THEN 202 zTL1(:,:,jpk) = 0. ; CALL iom_put("TL1" , zTL1(:,:,:) * tmask(:,:,:) ) ! TL1 203 ENDIF 204 IF( iom_use("Totlig") ) CALL iom_put("Totlig" , ztotlig(:,:,:) * tmask(:,:,:) ) ! TL 205 IF( iom_use("Biron") ) CALL iom_put("Biron" , biron (:,:,:) * 1e9 * tmask(:,:,:) ) ! biron 206 IF( iom_use("FESCAV") ) THEN 207 zscav3d (:,:,jpk) = 0. ; CALL iom_put("FESCAV" , zscav3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 208 ENDIF 209 IF( iom_use("FECOLL") ) THEN 210 zcoll3d (:,:,jpk) = 0. ; CALL iom_put("FECOLL" , zcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 211 ENDIF 212 IF( iom_use("LGWCOLL")) THEN 213 zlcoll3d(:,:,jpk) = 0. ; CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 214 ENDIF 215 ENDIF 198 IF( lk_iomput .AND. knt == nrdttrc ) THEN 199 zrfact2 = 1.e3 * rfact2r ! conversion from mol/L/timestep into mol/m3/s 200 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 201 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 202 IF( iom_use("TL1") ) CALL iom_put("TL1" , zTL1 (:,:,:) * tmask(:,:,:) ) ! TL1 203 IF( iom_use("Totlig") ) CALL iom_put("Totlig" , ztotlig(:,:,:) * tmask(:,:,:) ) ! TL 204 IF( iom_use("Biron") ) CALL iom_put("Biron" , biron (:,:,:) * 1e9 * tmask(:,:,:) ) ! biron 205 IF( iom_use("FESCAV") ) CALL iom_put("FESCAV" , zscav3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 206 IF( iom_use("FECOLL") ) CALL iom_put("FECOLL" , zcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 207 IF( iom_use("FEPREC") ) CALL iom_put("FEPREC" , zprecip3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 208 IF( iom_use("LGWCOLL")) CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 216 209 ENDIF 217 210 … … 241 234 INTEGER :: ios ! Local integer 242 235 !! 243 NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep 236 NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep, scaveff 244 237 !!---------------------------------------------------------------------- 245 238 ! … … 263 256 WRITE(numout,*) ' ligand concentration in the ocean ligand =', ligand 264 257 WRITE(numout,*) ' rate constant for nanoparticle formation kfep =', kfep 258 WRITE(numout,*) ' Scavenged iron that is added to POFe scaveff =', scaveff 265 259 ENDIF 266 260 ! -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zflx.F90
r13295 r14385 336 336 IF( ln_presatm ) THEN 337 337 CALL fld_read( kt, 1, sf_patm ) !* input Patm provided at kt + 1/2 338 patm(:,:) = sf_patm(1)%fnow(:,:,1) 338 patm(:,:) = sf_patm(1)%fnow(:,:,1)/101325.0 ! atmospheric pressure 339 339 ENDIF 340 340 ! -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zint.F90
r14086 r14385 1 1 MODULE p4zint 2 !!====================================================================== 2 !!========================================================================= 3 3 !! *** MODULE p4zint *** 4 4 !! TOP : PISCES interpolation and computation of various accessory fields 5 !!====================================================================== 5 !!========================================================================= 6 6 !! History : 1.0 ! 2004-03 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 … … 38 38 ! 39 39 INTEGER :: ji, jj ! dummy loop indices 40 REAL(wp) :: z var ! local variable40 REAL(wp) :: zrum, zcodel, zargu, zvar 41 41 !!--------------------------------------------------------------------- 42 42 ! … … 45 45 ! Computation of phyto and zoo metabolic rate 46 46 ! ------------------------------------------- 47 tgfunc (:,:,:) = EXP( 0.063913 * ts(:,:,:,jp_tem,Kmm) ) 48 tgfunc2(:,:,:) = EXP( 0.07608 * ts(:,:,:,jp_tem,Kmm) ) 47 ! Generic temperature dependence (Eppley, 1972) 48 tgfunc (:,:,:) = EXP( 0.0631 * ts(:,:,:,jp_tem,Kmm) ) 49 ! Temperature dependence of mesozooplankton (Buitenhuis et al. (2005)) 50 tgfunc2(:,:,:) = EXP( 0.0761 * ts(:,:,:,jp_tem,Kmm) ) 51 49 52 50 53 ! Computation of the silicon dependant half saturation constant for silica uptake 51 ! --------------------------------------------------- 54 ! This is based on an old study by Pondaven et al. (1998) 55 ! -------------------------------------------------------------------------------- 52 56 DO_2D( 1, 1, 1, 1 ) 53 57 zvar = tr(ji,jj,1,jpsil,Kbb) * tr(ji,jj,1,jpsil,Kbb) … … 55 59 END_2D 56 60 ! 61 ! At the end of each year, the half saturation constant for silica is 62 ! updated as this is based on the highest concentration reached over 63 ! the year 64 ! ------------------------------------------------------------------- 57 65 IF( nday_year == nyear_len(1) ) THEN 58 66 xksi (:,:) = xksimax(:,:) 59 67 xksimax(:,:) = 0._wp 60 68 ENDIF 69 ! 70 ! compute the day length depending on latitude and the day 71 ! Astronomical parameterization taken from HAMOCC3 72 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 73 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) 74 75 ! day length in hours 76 strn(:,:) = 0. 77 DO jj = 1, jpj 78 DO ji = 1, jpi 79 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 80 zargu = MAX( -1., MIN( 1., zargu ) ) 81 strn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 82 END DO 83 END DO 61 84 ! 62 85 IF( ln_timing ) CALL timing_stop('p4z_int') -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zlim.F90
r13434 r14385 2 2 !!====================================================================== 3 3 !! *** MODULE p4zlim *** 4 !! TOP : PISCES4 !! TOP : Computes the nutrient limitation terms of phytoplankton 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 14 14 USE trc ! Tracers defined 15 15 USE sms_pisces ! PISCES variables 16 USE iom ! 16 USE iom ! I/O manager 17 17 18 18 IMPLICIT NONE 19 19 PRIVATE 20 20 21 PUBLIC p4z_lim 22 PUBLIC p4z_lim_init 23 PUBLIC p4z_lim_alloc 21 PUBLIC p4z_lim ! called in p4zbio.F90 22 PUBLIC p4z_lim_init ! called in trcsms_pisces.F90 23 PUBLIC p4z_lim_alloc ! called in trcini_pisces.F90 24 24 25 25 !! * Shared module variables 26 26 REAL(wp), PUBLIC :: concnno3 !: NO3, PO4 half saturation 27 27 REAL(wp), PUBLIC :: concdno3 !: Phosphate half saturation for diatoms 28 REAL(wp), PUBLIC :: concnnh4 !: NH4 half saturation for phyto28 REAL(wp), PUBLIC :: concnnh4 !: NH4 half saturation for nanophyto 29 29 REAL(wp), PUBLIC :: concdnh4 !: NH4 half saturation for diatoms 30 30 REAL(wp), PUBLIC :: concnfer !: Iron half saturation for nanophyto … … 46 46 47 47 !!* Phytoplankton limitation terms 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanono3 !: ??? 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatno3 !: ??? 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanonh4 !: ??? 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatnh4 !: ??? 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanopo4 !: ??? 53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatpo4 !: ??? 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphy !: ??? 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdia !: ??? 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimnfe !: ??? 57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdfe !: ??? 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimsi !: ??? 59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbac !: ?? 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbacl !: ?? 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concdfe !: ??? 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concnfe !: ??? 63 64 ! Coefficient for iron limitation 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanono3 !: Nanophyto limitation by NO3 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatno3 !: Diatoms limitation by NO3 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanonh4 !: Nanophyto limitation by NH4 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatnh4 !: Diatoms limitation by NH4 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanopo4 !: Nanophyto limitation by PO4 53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatpo4 !: Diatoms limitation by PO4 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphy !: Nutrient limitation term of nanophytoplankton 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdia !: Nutrient limitation term of diatoms 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimnfe !: Nanophyto limitation by Iron 57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdfe !: Diatoms limitation by iron 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimsi !: Diatoms limitation by Si 59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbac !: Bacterial limitation term 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbacl !: Bacterial limitation term 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concdfe !: Limitation of diatoms uptake of Fe 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concnfe !: Limitation of Nano uptake of Fe 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanofer !: Limitation of Fe uptake by nanophyto 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatfer !: Limitation of Fe uptake by diatoms 65 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqfuncfecd, xqfuncfecn 66 67 ! Coefficient for iron limitation following Flynn and Hipkin (1999) 65 68 REAL(wp) :: xcoef1 = 0.0016 / 55.85 66 69 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 … … 81 84 !! 82 85 !! ** Purpose : Compute the co-limitations by the various nutrients 83 !! for the various phytoplankton species 84 !! 85 !! ** Method : - ??? 86 !! for the various phytoplankton species 87 !! 88 !! ** Method : - Limitation follows the Liebieg law of the minimum 89 !! - Monod approach for N, P and Si. Quota approach 90 !! for Iron 86 91 !!--------------------------------------------------------------------- 87 92 INTEGER, INTENT(in) :: kt, knt … … 89 94 ! 90 95 INTEGER :: ji, jj, jk 91 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 92 REAL(wp) :: zconcd, zconcd2, zconcn, zconcn2 96 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zcoef 93 97 REAL(wp) :: z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 94 REAL(wp) :: zdenom, zratio, zironmin 98 REAL(wp) :: zdenom, zratio, zironmin, zbactno3, zbactnh4 95 99 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4 100 REAL(wp) :: fananof, fadiatf, znutlim, zfalim 101 REAL(wp) :: znutlimtot, zlimno3, zlimnh4, zbiron 96 102 !!--------------------------------------------------------------------- 97 103 ! 98 104 IF( ln_timing ) CALL timing_start('p4z_lim') 105 ! 106 sizena(:,:,:) = 1.0 ; sizeda(:,:,:) = 1.0 99 107 ! 100 108 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 101 109 102 ! Tuning of the iron concentration to a minimum level that is set to the detection limit103 !-------------------------------------104 zno3 = tr(ji,jj,jk,jpno3,Kbb) / 40.e-6105 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 )106 zferlim = MIN( zferlim, 7e-11 )107 tr(ji,jj,jk,jpfer,Kbb) = MAX( tr(ji,jj,jk,jpfer,Kbb), zferlim )108 109 110 ! Computation of a variable Ks for iron on diatoms taking into account 110 111 ! that increasing biomass is made of generally bigger cells 112 ! The allometric relationship is classical. 111 113 !------------------------------------------------ 112 zconcd = MAX( 0.e0 , tr(ji,jj,jk,jpdia,Kbb) - xsizedia )113 zconcd2 = tr(ji,jj,jk,jpdia,Kbb) - zconcd114 zconcn = MAX( 0.e0 , tr(ji,jj,jk,jpphy,Kbb) - xsizephy )115 zconcn2 = tr(ji,jj,jk,jpphy,Kbb) - zconcn116 114 z1_trbphy = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 117 115 z1_trbdia = 1. / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 118 116 119 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 120 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 121 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 122 123 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 124 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 125 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 126 127 ! Michaelis-Menten Limitation term for nutrients Small bacteria 128 ! ------------------------------------------------------------- 129 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * tr(ji,jj,jk,jpno3,Kbb) + concbno3 * tr(ji,jj,jk,jpnh4,Kbb) ) 130 xnanono3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) * concbnh4 * zdenom 131 xnanonh4(ji,jj,jk) = tr(ji,jj,jk,jpnh4,Kbb) * concbno3 * zdenom 132 ! 133 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 134 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbnh4 ) 135 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( concbfe + tr(ji,jj,jk,jpfer,Kbb) ) 136 zlim4 = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc + tr(ji,jj,jk,jpdoc,Kbb) ) 137 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 138 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 139 140 ! Michaelis-Menten Limitation term for nutrients Small flagellates 141 ! ----------------------------------------------- 142 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * tr(ji,jj,jk,jpno3,Kbb) + zconc0n * tr(ji,jj,jk,jpnh4,Kbb) ) 143 xnanono3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) * zconc0nnh4 * zdenom 144 xnanonh4(ji,jj,jk) = tr(ji,jj,jk,jpnh4,Kbb) * zconc0n * zdenom 145 ! 146 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 147 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0nnh4 ) 148 zratio = tr(ji,jj,jk,jpnfe,Kbb) * z1_trbphy 149 zironmin = xcoef1 * tr(ji,jj,jk,jpnch,Kbb) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 150 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 151 xnanopo4(ji,jj,jk) = zlim2 152 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 153 xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 154 ! 155 ! Michaelis-Menten Limitation term for nutrients Diatoms 156 ! ---------------------------------------------- 157 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * tr(ji,jj,jk,jpno3,Kbb) + zconc1d * tr(ji,jj,jk,jpnh4,Kbb) ) 158 xdiatno3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) * zconc1dnh4 * zdenom 159 xdiatnh4(ji,jj,jk) = tr(ji,jj,jk,jpnh4,Kbb) * zconc1d * zdenom 160 ! 161 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 162 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc1dnh4 ) 163 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) + rtrn ) 164 zratio = tr(ji,jj,jk,jpdfe,Kbb) * z1_trbdia 165 zironmin = xcoef1 * tr(ji,jj,jk,jpdch,Kbb) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 166 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 167 xdiatpo4(ji,jj,jk) = zlim2 168 xlimdfe (ji,jj,jk) = MIN( 1., zlim4 ) 169 xlimdia (ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 170 xlimsi (ji,jj,jk) = MIN( zlim1, zlim2, zlim4 ) 117 concnfe(ji,jj,jk) = concnfer * sizen(ji,jj,jk)**0.81 118 zconc0n = concnno3 * sizen(ji,jj,jk)**0.81 119 zconc0nnh4 = concnnh4 * sizen(ji,jj,jk)**0.81 120 121 concdfe(ji,jj,jk) = concdfer * sized(ji,jj,jk)**0.81 122 zconc1d = concdno3 * sized(ji,jj,jk)**0.81 123 zconc1dnh4 = concdnh4 * sized(ji,jj,jk)**0.81 124 125 ! Computation of the optimal allocation parameters 126 ! Based on the different papers by Pahlow et al., and 127 ! Smith et al. 128 ! --------------------------------------------------- 129 130 ! Nanophytoplankton 131 zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk) 132 znutlim = zbiron / concnfe(ji,jj,jk) 133 fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 134 135 ! Diatoms 136 znutlim = zbiron / concdfe(ji,jj,jk) 137 fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 138 139 ! Michaelis-Menten Limitation term by nutrients of 140 ! heterotrophic bacteria 141 ! ------------------------------------------------- 142 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) ) 143 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) 144 znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) 145 zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 146 zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 147 ! 148 zlim1 = zbactno3 + zbactnh4 149 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbnh4 ) 150 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( concbfe + tr(ji,jj,jk,jpfer,Kbb) ) 151 zlim4 = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc + tr(ji,jj,jk,jpdoc,Kbb) ) 152 ! Xlimbac is used for DOC solubilization whereas xlimbacl 153 ! is used for all the other bacterial-dependent terms 154 ! ------------------------------------------------------- 155 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 156 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 157 158 ! Michaelis-Menten Limitation term by nutrients: Nanophyto 159 ! Optimal parameterization by Smith and Pahlow series of 160 ! papers is used. Optimal allocation is supposed independant 161 ! for all nutrients. 162 ! -------------------------------------------------------- 163 164 ! Limitation of Fe uptake (Quota formalism) 165 zfalim = (1.-fananof) / fananof 166 xnanofer(ji,jj,jk) = (1. - fananof) * zbiron / ( zbiron + zfalim * concnfe(ji,jj,jk) ) 167 168 ! Limitation of nanophytoplankton growth 169 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) ) 170 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) 171 znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) 172 xnanonh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 173 xnanono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 174 ! 175 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 176 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0nnh4 ) 177 zratio = tr(ji,jj,jk,jpnfe,Kbb) * z1_trbphy 178 179 ! The minimum iron quota depends on the size of PSU, respiration 180 ! and the reduction of nitrate following the parameterization 181 ! proposed by Flynn and Hipkin (1999) 182 zironmin = xcoef1 * tr(ji,jj,jk,jpnch,Kbb) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 183 xqfuncfecn(ji,jj,jk) = zironmin + qnfelim 184 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 185 xnanopo4(ji,jj,jk) = zlim2 186 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 187 xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 188 189 ! Michaelis-Menten Limitation term by nutrients : Diatoms 190 ! ------------------------------------------------------- 191 ! Limitation of Fe uptake (Quota formalism) 192 zfalim = (1.-fadiatf) / fadiatf 193 xdiatfer(ji,jj,jk) = (1. - fadiatf) * zbiron / ( zbiron + zfalim * concdfe(ji,jj,jk) ) 194 195 ! Limitation of diatoms growth 196 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc1d + tr(ji,jj,jk,jpnh4,Kbb) ) 197 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) 198 znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) / ( zconc1d + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) 199 xdiatnh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 200 xdiatno3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 201 ! 202 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 203 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc1dnh4 ) 204 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) ) 205 zratio = tr(ji,jj,jk,jpdfe,Kbb) * z1_trbdia 206 207 ! The minimum iron quota depends on the size of PSU, respiration 208 ! and the reduction of nitrate following the parameterization 209 ! proposed by Flynn and Hipkin (1999) 210 zironmin = xcoef1 * tr(ji,jj,jk,jpdch,Kbb) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 211 xqfuncfecd(ji,jj,jk) = zironmin + qdfelim 212 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 213 xdiatpo4(ji,jj,jk) = zlim2 214 xlimdfe (ji,jj,jk) = MIN( 1., zlim4 ) 215 xlimdia (ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 216 xlimsi (ji,jj,jk) = MIN( zlim1, zlim2, zlim4 ) 171 217 END_3D 172 218 219 220 ! Size estimation of phytoplankton based on total biomass 221 ! Assumes that larger biomass implies addition of larger cells 222 ! ------------------------------------------------------------ 223 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 224 zcoef = tr(ji,jj,jk,jpphy,Kbb) - MIN(xsizephy, tr(ji,jj,jk,jpphy,Kbb) ) 225 sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 226 zcoef = tr(ji,jj,jk,jpdia,Kbb) - MIN(xsizedia, tr(ji,jj,jk,jpdia,Kbb) ) 227 sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 228 END_3D 229 230 173 231 ! Compute the fraction of nanophytoplankton that is made of calcifiers 232 ! This is a purely adhoc formulation described in Aumont et al. (2015) 233 ! This fraction depends on nutrient limitation, light, temperature 174 234 ! -------------------------------------------------------------------- 175 235 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 176 zlim1 = ( tr(ji,jj,jk,jpno3,Kbb) * concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) * concnno3 ) & 177 & / ( concnno3 * concnnh4 + concnnh4 * tr(ji,jj,jk,jpno3,Kbb) + concnno3 * tr(ji,jj,jk,jpnh4,Kbb) ) 236 zlim1 = xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) 178 237 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concnnh4 ) 179 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) + 5.E-11 )180 ztem1 = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) )238 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) + 6.E-11 ) 239 ztem1 = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) + 1.8) 181 240 ztem2 = ts(ji,jj,jk,jp_tem,Kmm) - 10. 182 241 zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) 183 zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) )242 zetot2 = 30. / ( 30.0 + etot_ndcy(ji,jj,jk) ) 184 243 185 244 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & … … 194 253 ! 195 254 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 196 ! denitrification factor computed from O2 levels 255 ! denitrification factor computed from O2 levels 256 ! This factor diagnoses below which level of O2 denitrification 257 ! is active 197 258 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - tr(ji,jj,jk,jpoxy,Kbb) ) & 198 259 & / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) ) ) 199 260 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 200 261 ! 201 ! denitrification factor computed from NO3 levels 262 ! redox factor computed from NO3 levels 263 ! This factor diagnoses below which level of NO3 additional redox 264 ! reactions are taking place. 202 265 nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - tr(ji,jj,jk,jpno3,Kbb) ) & 203 266 & / ( 1.E-6 + tr(ji,jj,jk,jpno3,Kbb) ) ) … … 211 274 CALL iom_put( "LNFe" , xlimnfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 212 275 CALL iom_put( "LDFe" , xlimdfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 276 CALL iom_put( "SIZEN" , sizen (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 277 CALL iom_put( "SIZED" , sized (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 213 278 ENDIF 214 279 ! … … 222 287 !! *** ROUTINE p4z_lim_init *** 223 288 !! 224 !! ** Purpose : Initialization of nutrient limitation parameters225 !! 226 !! ** Method : Read the namp islim namelist and check the parameters289 !! ** Purpose : Initialization of the nutrient limitation parameters 290 !! 291 !! ** Method : Read the namp4zlim namelist and check the parameters 227 292 !! called at the first timestep (nittrc000) 228 293 !! 229 !! ** input : Namelist namp islim294 !! ** input : Namelist namp4zlim 230 295 !! 231 296 !!---------------------------------------------------------------------- 232 297 INTEGER :: ios ! Local integer 233 ! 298 299 ! Namelist block 234 300 NAMELIST/namp4zlim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe, & 235 301 & concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd, & … … 248 314 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zlim in configuration namelist' ) 249 315 IF(lwm) WRITE( numonp, namp4zlim ) 316 250 317 ! 251 318 IF(lwp) THEN ! control print … … 287 354 !!---------------------------------------------------------------------- 288 355 !! *** ROUTINE p5z_lim_alloc *** 356 !! 357 ! Allocation of the arrays used in this module 289 358 !!---------------------------------------------------------------------- 290 359 USE lib_mpp , ONLY: ctl_stop … … 295 364 & xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk), & 296 365 & xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk), & 366 & xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk), & 297 367 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), & 298 368 & xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk), & 299 369 & xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk), & 300 370 & concnfe (jpi,jpj,jpk), concdfe (jpi,jpj,jpk), & 371 & xqfuncfecn(jpi,jpj,jpk), xqfuncfecd(jpi,jpj,jpk), & 301 372 & xlimsi (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 302 373 ! -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zmeso.F90
r13295 r14385 8 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 9 9 !!---------------------------------------------------------------------- 10 !! p4z_meso : Compute the sources/sinks for mesozooplankton 11 !! p4z_meso_init : Initialization of the parameters for mesozooplankton 10 !! p4z_meso : Compute the sources/sinks for mesozooplankton 11 !! p4z_meso_init : Initialization of the parameters for mesozooplankton 12 !! p4z_meso_alloc : Allocate variables for mesozooplankton 12 13 !!---------------------------------------------------------------------- 13 14 USE oce_trc ! shared variables between ocean and passive tracers … … 23 24 PUBLIC p4z_meso ! called in p4zbio.F90 24 25 PUBLIC p4z_meso_init ! called in trcsms_pisces.F90 25 26 PUBLIC p4z_meso_alloc ! called in trcini_pisces.F90 27 28 !! * Shared module variables 26 29 REAL(wp), PUBLIC :: part2 !: part of calcite not dissolved in mesozoo guts 27 30 REAL(wp), PUBLIC :: xpref2d !: mesozoo preference for diatoms … … 42 45 REAL(wp), PUBLIC :: epsher2 !: growth efficiency 43 46 REAL(wp), PUBLIC :: epsher2min !: minimum growth efficiency at high food for grazing 2 47 REAL(wp), PUBLIC :: xsigma2 !: Width of the predation window 48 REAL(wp), PUBLIC :: xsigma2del !: Maximum width of the predation window at low food density 44 49 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 50 REAL(wp), PUBLIC :: xfracmig !: Fractional biomass of meso that performs DVM 51 LOGICAL , PUBLIC :: ln_dvm_meso !: Boolean to activate DVM of mesozooplankton 52 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig !: DVM of mesozooplankton : migration depth 53 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig !: Vertical indice of the the migration depth 45 54 46 55 !! * Substitutions … … 53 62 CONTAINS 54 63 55 SUBROUTINE p4z_meso( kt, knt, Kbb, K rhs )64 SUBROUTINE p4z_meso( kt, knt, Kbb, Kmm, Krhs ) 56 65 !!--------------------------------------------------------------------- 57 66 !! *** ROUTINE p4z_meso *** 58 67 !! 59 68 !! ** Purpose : Compute the sources/sinks for mesozooplankton 69 !! This includes ingestion and assimilation, flux feeding 70 !! and mortality. We use a passive prey switching 71 !! parameterization. 72 !! All living compartments smaller than mesozooplankton 73 !! are potential preys of mesozooplankton as well as small 74 !! sinking particles 60 75 !! 61 76 !! ** Method : - ??? 62 77 !!--------------------------------------------------------------------- 63 78 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? 64 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices65 ! 66 INTEGER :: ji, jj, jk 79 INTEGER, INTENT(in) :: Kbb, kmm, Krhs ! time level indices 80 ! 81 INTEGER :: ji, jj, jk, jkt 67 82 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 68 REAL(wp) :: zgraze2 , zdenom, zdenom2 69 REAL(wp) :: zfact , zfood, zfoodlim, zproport, zbeta 83 REAL(wp) :: zgraze2 , zdenom, zdenom2, zfact , zfood, zfoodlim, zproport, zbeta 70 84 REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 71 REAL(wp) :: zepsherf, zepshert, zepsherv, zepsherq 72 REAL(wp) :: zgrarsig, zgraztotc, zgraztotn, zgraztotf 73 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz, zgrasrat, zgrasratn 74 REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof 75 REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 76 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 77 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing2, zfezoo2, zz2ligprod 85 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgraztotc, zgraztotn, zgraztotf 86 REAL(wp) :: zmigreltime, zprcaca, zmortz, zgrasratf, zgrasratn 87 REAL(wp) :: zrespz, ztortz, zgrazdc, zgrazz, zgrazpof, zgraznc, zgrazpoc, zgraznf, zgrazdf 88 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg, zrum, zcodel, zargu, zval, zdep 89 REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmp4, ztmptot, zmigthick 78 90 CHARACTER (len=25) :: charout 91 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 92 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarem, zgraref, zgrapoc, zgrapof, zgrabsi 93 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrem, zgramigref, zgramigpoc, zgramigpof 94 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigbsi 79 95 !!--------------------------------------------------------------------- 80 96 ! 81 97 IF( ln_timing ) CALL timing_start('p4z_meso') 98 ! 99 zgrazing(:,:,:) = 0._wp ; zgrapoc(:,:,:) = 0._wp 100 zfezoo2 (:,:,:) = 0._wp ; zgrarem(:,:,:) = 0._wp 101 zgraref (:,:,:) = 0._wp ; zgrapof(:,:,:) = 0._wp 102 zgrabsi (:,:,:) = 0._wp 103 ! 104 ! 105 ! Diurnal vertical migration of mesozooplankton 106 ! Computation of the migration depth 107 ! --------------------------------------------- 108 IF (ln_dvm_meso) CALL p4z_meso_depmig( Kbb, Kmm ) 82 109 ! 83 110 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) … … 85 112 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 86 113 87 ! Respiration rates of both zooplankton 88 ! ------------------------------------- 114 115 ! linear mortality of mesozooplankton 116 ! A michaelis menten modulation term is used to avoid extinction of 117 ! mesozooplankton at very low food concentration. Mortality is 118 119 ! enhanced in low O2 waters 120 ! ----------------------------------------------------------------- 89 121 zrespz = resrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) ) & 90 122 & + 3. * nitrfac(ji,jj,jk) ) 91 123 92 ! Zooplankton mortality. A square function has been selected with 93 ! no real reason except that it seems to be more stable and may mimic predation 94 ! --------------------------------------------------------------- 124 ! Zooplankton quadratic mortality. A square function has been selected with 125 ! to mimic predation and disease (density dependent mortality). It also tends 126 ! to stabilise the model 127 ! ------------------------------------------------------------------------- 95 128 ztortz = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk) ) 96 129 ! 130 131 ! Computation of the abundance of the preys 132 ! A threshold can be specified in the namelist 133 ! -------------------------------------------- 97 134 zcompadi = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthresh2dia ), 0.e0 ) 98 135 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthresh2zoo ), 0.e0 ) 99 136 zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthresh2poc ), 0.e0 ) 137 100 138 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 101 ! it is to predation by mesozooplankton 139 ! it is to predation by mesozooplankton. We use a quota dependant parameterization 140 ! as a low quota indicates oligotrophic conditions which are charatcerized by 141 ! small cells 102 142 ! ------------------------------------------------------------------------------- 103 143 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthresh2phy ), 0.e0 ) & 104 144 & * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 105 145 106 ! Mesozooplankton grazing 107 ! ------------------------ 146 147 ! Mesozooplankton grazing 148 ! The total amount of food is the sum of all preys accessible to mesozooplankton 149 ! multiplied by their food preference 150 ! A threshold can be specified in the namelist (xthresh2). However, when food 151 ! concentration is close to this threshold, it is decreased to avoid the 152 ! accumulation of food in the mesozoopelagic domain 153 ! ------------------------------------------------------------------------------- 108 154 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc 109 155 zfoodlim = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) … … 112 158 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 113 159 114 zgrazd = zgraze2 * xpref2d * zcompadi * zdenom2 115 zgrazz = zgraze2 * xpref2z * zcompaz * zdenom2 116 zgrazn = zgraze2 * xpref2n * zcompaph * zdenom2 117 zgrazpoc = zgraze2 * xpref2c * zcompapoc * zdenom2 118 119 zgraznf = zgrazn * tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn) 120 zgrazf = zgrazd * tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn) 160 161 ! An active switching parameterization is used here. 162 ! We don't use the KTW parameterization proposed by 163 ! Vallina et al. because it tends to produce too steady biomass 164 ! composition and the variance of Chl is too low as it grazes 165 ! too strongly on winning organisms. We use a generalized 166 ! switching parameterization proposed by Morozov and 167 ! Petrovskii (2013) 168 ! ------------------------------------------------------------ 169 ! The width of the selection window is increased when preys 170 ! have low abundance, .i.e. zooplankton become less specific 171 ! to avoid starvation. 172 ! ---------------------------------------------------------- 173 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 174 zsigma = xsigma2 + xsigma2del * zsigma 175 ! Nanophytoplankton and diatoms are the only preys considered 176 ! to be close enough to have potential interference 177 ! ----------------------------------------------------------- 178 zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 179 ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn ) 180 ztmp2 = xpref2c * zcompapoc**2 181 ztmp3 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / ( 1.0 + zdiffdn ) 182 ztmp4 = xpref2z * zcompaz**2 183 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + rtrn 184 ztmp1 = ztmp1 / ztmptot 185 ztmp2 = ztmp2 / ztmptot 186 ztmp3 = ztmp3 / ztmptot 187 ztmp4 = ztmp4 / ztmptot 188 189 ! Mesozooplankton regular grazing on the different preys 190 ! ------------------------------------------------------ 191 zgrazdc = zgraze2 * ztmp3 * zdenom ! diatoms 192 zgraznc = zgraze2 * ztmp1 * zdenom ! nanophytoplankton 193 zgrazpoc = zgraze2 * ztmp2 * zdenom ! small POC 194 zgrazz = zgraze2 * ztmp4 * zdenom ! microzooplankton 195 196 ! Ingestion rates of the Fe content of the different preys 197 zgraznf = zgraznc * tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn) 198 zgrazdf = zgrazdc * tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn) 121 199 zgrazpof = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 122 200 123 ! Mesozooplankton flux feeding on GOC 124 ! ---------------------------------- 201 ! Mesozooplankton flux feeding on GOC and POC. The feeding pressure 202 ! is proportional to the flux 203 ! ------------------------------------------------------------------ 125 204 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 126 205 & * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & … … 132 211 zgrazfffp = zgrazffep * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 133 212 ! 134 zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 135 ! Compute the proportion of filter feeders 213 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg 214 ! Compute the proportion of filter feeders. It is assumed steady state. 215 ! --------------------------------------------------------------------- 136 216 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 217 218 ! Compute fractionation of aggregates. It is assumed that 219 ! diatoms based aggregates are more prone to fractionation 220 ! since they are more porous (marine snow instead of fecal pellets) 221 ! ----------------------------------------------------------------- 222 137 223 ! Compute fractionation of aggregates. It is assumed that 138 224 ! diatoms based aggregates are more prone to fractionation … … 145 231 zfracfe = zfrac * tr(ji,jj,jk,jpbfe,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 146 232 233 ! Flux feeding is multiplied by the fractional biomass of flux feeders 147 234 zgrazffep = zproport * zgrazffep 148 235 zgrazffeg = zproport * zgrazffeg 149 236 zgrazfffp = zproport * zgrazfffp 150 237 zgrazfffg = zproport * zgrazfffg 151 zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 152 zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk) & 238 239 ! Total ingestion rates in C, N, Fe 240 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg 241 zgraztotn = zgrazdc * quotad(ji,jj,jk) + zgrazz + zgraznc * quotan(ji,jj,jk) & 153 242 & + zgrazpoc + zgrazffep + zgrazffeg 154 zgraztotf = zgraz f + zgraznf + zgrazz * ferat3+ zgrazpof + zgrazfffp + zgrazfffg243 zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazpof + zgrazfffp + zgrazfffg 155 244 156 245 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 157 zgrazing 2(ji,jj,jk) = zgraztotc246 zgrazing(ji,jj,jk) = zgraztotc 158 247 159 248 ! Mesozooplankton efficiency. … … 165 254 ! Fulton, 2012) 166 255 ! ----------------------------------------------------------------------------------- 167 zgrasrat = ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 256 257 zgrasratf = ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 168 258 zgrasratn = ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) 169 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3)259 zepshert = MIN( 1., zgrasratn, zgrasratf / feratm) 170 260 zbeta = MAX(0., (epsher2 - epsher2min) ) 261 ! Food quantity deprivation of GGE 171 262 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 263 ! Food quality deprivation of GGE 172 264 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 173 zepsherv = zepsherf * zepshert * zepsherq 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 180 181 182 ! Update the arrays TRA which contain the biological sources and sinks 183 zgrarsig = zgrarem2 * sigma2 184 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarsig 185 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgrarsig 186 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgrarem2 - zgrarsig 187 ! 188 IF( ln_ligand ) THEN 189 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + (zgrarem2 - zgrarsig) * ldocz 190 zz2ligprod(ji,jj,jk) = (zgrarem2 - zgrarsig) * ldocz 191 ENDIF 192 ! 193 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarsig 194 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgrafer2 195 zfezoo2(ji,jj,jk) = zgrafer2 196 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarsig 197 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgrarsig 198 265 ! Actual GGE 266 zepsherv = zepsherf * zepshert * zepsherq 267 ! 268 ! Impact of grazing on the prognostic variables 269 ! --------------------------------------------- 199 270 zmortz = ztortz + zrespz 271 ! Mortality induced by the upper trophic levels, ztortz, is allocated 272 ! according to a infinite chain of predators (ANderson et al., 2013) 200 273 zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz 274 201 275 tr(ji,jj,jk,jpmes,Krhs) = tr(ji,jj,jk,jpmes,Krhs) - zmortz + zepsherv * zgraztotc 202 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazd 276 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc 203 277 tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zgrazz 204 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgrazn 205 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgrazn * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 206 tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazd * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 207 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazd * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 208 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazd * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 278 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc 279 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 ) 280 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 ) 281 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 ) 282 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 ) 283 zgrabsi(ji,jj,jk) = zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 284 ! 209 285 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraznf 210 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgraz f211 286 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf 287 ! 212 288 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zgrazpoc - zgrazffep + zfrac 213 289 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac 214 290 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep 215 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac216 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zmortzgoc + zgrapoc2291 ! 292 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg - zfrac 217 293 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac 294 ! 218 295 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zgrazpof - zgrazfffp + zfracfe 219 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + ferat3 * zmortzgoc - zgrazfffg & 220 & + zgraztotf * unass2 - zfracfe 221 zfracal = tr(ji,jj,jk,jpcal,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 222 zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal 223 ! calcite production 224 zprcaca = xfracal(ji,jj,jk) * zgrazn 296 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg - zfracfe 297 298 ! Calcite remineralization due to zooplankton activity 299 ! part2 of the ingested calcite is not dissolving in the 300 ! acidic gut 301 ! ------------------------------------------------------ 302 zfracal = tr(ji,jj,jk,jpcal,Kbb) / ( tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 303 zgrazcal = zgrazffeg * (1. - part2) * zfracal 304 ! calcite production by zooplankton activity 305 zprcaca = xfracal(ji,jj,jk) * zgraznc 225 306 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 226 307 ! 227 308 zprcaca = part2 * zprcaca 228 309 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrazcal - zprcaca 229 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * ( zgrazcal +zprcaca )310 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * ( zgrazcal - zprcaca ) 230 311 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) - zgrazcal + zprcaca 312 313 ! Computation of total excretion and egestion by mesozoo. 314 ! --------------------------------------------------------- 315 zgrarem(ji,jj,jk) = zgraztotc * ( 1. - zepsherv - unass2 ) & 316 & + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz 317 zgraref(ji,jj,jk) = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasratf - feratm * zepsherv ) & 318 & + feratm * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 319 zgrapoc(ji,jj,jk) = zgraztotc * unass2 + zmortzgoc 320 zgrapof(ji,jj,jk) = zgraztotf * unass2 + feratm * zmortzgoc 321 ! 231 322 END_3D 232 ! 323 324 ! Computation of the effect of DVM by mesozooplankton 325 ! This part is only activated if ln_dvm_meso is set to true 326 ! The parameterization has been published in Gorgues et al. (2019). 327 ! ----------------------------------------------------------------- 328 IF (ln_dvm_meso) THEN 329 ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 330 ALLOCATE( zgramigbsi(jpi,jpj) ) 331 zgramigrem(:,:) = 0.0 ; zgramigref(:,:) = 0.0 332 zgramigpoc(:,:) = 0.0 ; zgramigpof(:,:) = 0.0 333 zgramigbsi(:,:) = 0.0 334 335 ! Compute the amount of materials that will go into vertical migration 336 ! This fraction is sumed over the euphotic zone and is removed from 337 ! the fluxes driven by mesozooplankton in the euphotic zone. 338 ! -------------------------------------------------------------------- 339 DO_3D( 1, 1, 1, 1, 1, jpk ) 340 zmigreltime = (1. - strn(ji,jj)) 341 zmigthick = (1. - zmigreltime ) * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 342 IF ( gdept(ji,jj,jk,Kmm) <= heup(ji,jj) ) THEN 343 zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * zmigthick 344 zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * zmigthick 345 zgramigpoc(ji,jj) = zgramigpoc(ji,jj) + xfracmig * zgrapoc(ji,jj,jk) * zmigthick 346 zgramigpof(ji,jj) = zgramigpof(ji,jj) + xfracmig * zgrapof(ji,jj,jk) * zmigthick 347 zgramigbsi(ji,jj) = zgramigbsi(ji,jj) + xfracmig * zgrabsi(ji,jj,jk) * zmigthick 348 349 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 350 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 351 zgrapoc(ji,jj,jk) = zgrapoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 352 zgrapof(ji,jj,jk) = zgrapof(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 353 zgrabsi(ji,jj,jk) = zgrabsi(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 354 ENDIF 355 END_3D 356 357 ! The inorganic and organic fluxes induced by migrating organisms are added at the 358 ! the migration depth (corresponding indice is set by kmig) 359 ! -------------------------------------------------------------------------------- 360 DO_2D( 1, 1, 1, 1 ) 361 IF( tmask(ji,jj,1) == 1.) THEN 362 jkt = kmig(ji,jj) 363 zdep = 1. / e3t(ji,jj,jkt,Kmm) 364 zgrarem(ji,jj,jkt) = zgrarem(ji,jj,jkt) + zgramigrem(ji,jj) * zdep 365 zgraref(ji,jj,jkt) = zgraref(ji,jj,jkt) + zgramigref(ji,jj) * zdep 366 zgrapoc(ji,jj,jkt) = zgrapoc(ji,jj,jkt) + zgramigpoc(ji,jj) * zdep 367 zgrapof(ji,jj,jkt) = zgrapof(ji,jj,jkt) + zgramigpof(ji,jj) * zdep 368 zgrabsi(ji,jj,jkt) = zgrabsi(ji,jj,jkt) + zgramigbsi(ji,jj) * zdep 369 ENDIF 370 END_2D 371 ! 372 ! Deallocate temporary variables 373 ! ------------------------------ 374 DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof, zgramigbsi ) 375 ! End of the ln_dvm_meso part 376 ENDIF 377 378 ! Update the arrays TRA which contain the biological sources and sinks 379 ! This only concerns the variables which are affected by DVM (inorganic 380 ! nutrients, DOC agands, and particulate organic carbon). 381 DO_3D( 1, 1, 1, 1, 1, jpk ) 382 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarem(ji,jj,jk) * sigma2 383 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgrarem(ji,jj,jk) * sigma2 384 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgrarem(ji,jj,jk) * ( 1. - sigma2 ) 385 ! 386 IF( ln_ligand ) & 387 & tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgrarem(ji,jj,jk) * ( 1. - sigma2 ) * ldocz 388 ! 389 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem(ji,jj,jk) * sigma2 390 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref(ji,jj,jk) 391 zfezoo2(ji,jj,jk) = zgraref(ji,jj,jk) 392 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem(ji,jj,jk) * sigma2 393 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgrarem(ji,jj,jk) * sigma2 394 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zgrapoc(ji,jj,jk) 395 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc(ji,jj,jk) 396 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zgrapof(ji,jj,jk) 397 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrabsi(ji,jj,jk) 398 END_3D 399 ! 400 ! Write the output 233 401 IF( lk_iomput .AND. knt == nrdttrc ) THEN 234 402 CALL iom_put( "PCAL" , prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Calcite production 235 IF( iom_use("GRAZ2") ) THEN ! Total grazing of phyto by zooplankton 236 zgrazing2(:,:,jpk) = 0._wp ; CALL iom_put( "GRAZ2" , zgrazing2(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 237 ENDIF 238 IF( iom_use("FEZOO2") ) THEN 239 zfezoo2 (:,:,jpk) = 0._wp ; CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 240 ENDIF 241 IF( ln_ligand ) THEN 242 zz2ligprod(:,:,jpk) = 0._wp ; CALL iom_put( "LPRODZ2", zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 243 ENDIF 403 CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Total grazing of phyto by zoo 404 CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 405 IF( ln_ligand ) & 406 & CALL iom_put( "LPRODZ2", zgrarem(ji,jj,jk) * ( 1. - sigma2 ) * ldocz * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 244 407 ENDIF 245 408 ! … … 261 424 !! ** Purpose : Initialization of mesozooplankton parameters 262 425 !! 263 !! ** Method : Read the namp ismes namelist and check the parameters426 !! ** Method : Read the namp4zmes namelist and check the parameters 264 427 !! called at the first timestep (nittrc000) 265 428 !! … … 270 433 NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xpref2n, xpref2d, xpref2z, & 271 434 & xpref2c, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 272 & xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux 435 & xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux, ln_dvm_meso, & 436 & xsigma2, xsigma2del, xfracmig 273 437 !!---------------------------------------------------------------------- 274 438 ! … … 281 445 READ ( numnatp_ref, namp4zmes, IOSTAT = ios, ERR = 901) 282 446 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmes in reference namelist' ) 447 283 448 READ ( numnatp_cfg, namp4zmes, IOSTAT = ios, ERR = 902 ) 284 449 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmes in configuration namelist' ) … … 303 468 WRITE(numout,*) ' non assimilated fraction of P by mesozoo unass2 =', unass2 304 469 WRITE(numout,*) ' Efficiency of Mesozoo growth epsher2 =', epsher2 305 WRITE(numout,*) ' Minimum Efficiency of Mesozoo growth epsher2min =', epsher2min470 WRITE(numout,*) ' Minimum Efficiency of Mesozoo growth epsher2min =', epsher2min 306 471 WRITE(numout,*) ' Fraction of mesozoo excretion as DOM sigma2 =', sigma2 307 472 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 =', xkgraz2 473 WRITE(numout,*) ' Width of the grazing window xsigma2 =', xsigma2 474 WRITE(numout,*) ' Maximum additional width of the grazing window xsigma2del =', xsigma2del 475 WRITE(numout,*) ' Diurnal vertical migration of mesozoo. ln_dvm_meso =', ln_dvm_meso 476 WRITE(numout,*) ' Fractional biomass of meso that performs DVM xfracmig =', xfracmig 308 477 ENDIF 309 478 ! 310 479 END SUBROUTINE p4z_meso_init 480 481 SUBROUTINE p4z_meso_depmig( Kbb, Kmm ) 482 !!---------------------------------------------------------------------- 483 !! *** ROUTINE p4z_meso_depmig *** 484 !! 485 !! ** Purpose : Computation the migration depth of mesozooplankton 486 !! 487 !! ** Method : Computes the DVM depth of mesozooplankton from oxygen 488 !! temperature and chlorophylle following the parameterization 489 !! proposed by Bianchi et al. (2013) 490 !!---------------------------------------------------------------------- 491 INTEGER, INTENT(in) :: Kbb, kmm ! time level indices 492 ! 493 INTEGER :: ji, jj, jk 494 ! 495 REAL(wp) :: ztotchl, z1dep 496 REAL(wp), DIMENSION(jpi,jpj) :: oxymoy, tempmoy, zdepmoy 497 498 !!--------------------------------------------------------------------- 499 ! 500 IF( ln_timing == 1 ) CALL timing_start('p4z_meso_zdepmig') 501 ! 502 oxymoy(:,:) = 0. 503 tempmoy(:,:) = 0. 504 zdepmoy(:,:) = 0. 505 depmig (:,:) = 5. 506 kmig (:,:) = 1 507 ! 508 ! Compute the averaged values of oxygen, temperature over the domain 509 ! 150m to 500 m depth. 510 ! ------------------------------------------------------------------ 511 DO_3D( 1, 1, 1, 1, 1, jpk ) 512 IF( tmask(ji,jj,jk) == 1.) THEN 513 IF( gdept(ji,jj,jk,Kmm) >= 150. .AND. gdept(ji,jj,jk,kmm) <= 500.) THEN 514 oxymoy(ji,jj) = oxymoy(ji,jj) + tr(ji,jj,jk,jpoxy,Kbb) * 1E6 * e3t(ji,jj,jk,Kmm) 515 tempmoy(ji,jj) = tempmoy(ji,jj) + ts(ji,jj,jk,jp_tem,kmm) * e3t(ji,jj,jk,kmm) 516 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 517 ENDIF 518 ENDIF 519 END_3D 520 521 ! Compute the difference between surface values and the mean values in the mesopelagic 522 ! domain 523 ! ------------------------------------------------------------------------------------ 524 DO_2D( 1, 1, 1, 1 ) 525 z1dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 526 oxymoy(ji,jj) = tr(ji,jj,1,jpoxy,Kbb) * 1E6 - oxymoy(ji,jj) * z1dep 527 tempmoy(ji,jj) = ts(ji,jj,1,jp_tem,Kmm) - tempmoy(ji,jj) * z1dep 528 END_2D 529 ! 530 ! Computation of the migration depth based on the parameterization of 531 ! Bianchi et al. (2013) 532 ! ------------------------------------------------------------------- 533 DO_2D( 1, 1, 1, 1 ) 534 IF( tmask(ji,jj,1) == 1. ) THEN 535 ztotchl = ( tr(ji,jj,1,jpnch,Kbb) + tr(ji,jj,1,jpdch,Kbb) ) * 1E6 536 depmig(ji,jj) = 398. - 0.56 * oxymoy(ji,jj) -115. * log10(ztotchl) + 0.36 * hmld(ji,jj) -2.4 * tempmoy(ji,jj) 537 ENDIF 538 END_2D 539 ! 540 ! Computation of the corresponding jk indice 541 ! ------------------------------------------ 542 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 543 IF( depmig(ji,jj) >= gdepw(ji,jj,jk,Kmm) .AND. depmig(ji,jj) < gdepw(ji,jj,jk+1,Kmm) ) THEN 544 kmig(ji,jj) = jk 545 ENDIF 546 END_3D 547 ! 548 ! Correction of the migration depth and indice based on O2 levels 549 ! If O2 is too low, imposing a migration depth at this low O2 levels 550 ! would lead to negative O2 concentrations (respiration while O2 is close 551 ! to 0. Thus, to avoid that problem, the migration depth is adjusted so 552 ! that it falls above the OMZ 553 ! ----------------------------------------------------------------------- 554 DO_2D( 1, 1, 1, 1 ) 555 IF( tr(ji,jj,kmig(ji,jj),jpoxy,Kbb) < 5E-6 ) THEN 556 DO jk = kmig(ji,jj),1,-1 557 IF( tr(ji,jj,jk,jpoxy,Kbb) >= 5E-6 .AND. tr(ji,jj,jk+1,jpoxy,Kbb) < 5E-6) THEN 558 kmig(ji,jj) = jk 559 depmig(ji,jj) = gdept(ji,jj,jk,Kmm) 560 ENDIF 561 END DO 562 ENDIF 563 END_2D 564 ! 565 IF( ln_timing ) CALL timing_stop('p4z_meso_depmig') 566 ! 567 END SUBROUTINE p4z_meso_depmig 568 569 INTEGER FUNCTION p4z_meso_alloc() 570 !!---------------------------------------------------------------------- 571 !! *** ROUTINE p4z_meso_alloc *** 572 !!---------------------------------------------------------------------- 573 ! 574 ALLOCATE( depmig(jpi,jpj), kmig(jpi,jpj), STAT= p4z_meso_alloc ) 575 ! 576 IF( p4z_meso_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p4z_meso_alloc : failed to allocate arrays.' ) 577 ! 578 END FUNCTION p4z_meso_alloc 311 579 312 580 !!====================================================================== -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zmicro.F90
r13295 r14385 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') 88 ! 89 IF (ln_ligand) THEN 90 ALLOCATE( zzligprod(jpi,jpj,jpk) ) 91 zzligprod(:,:,:) = 0._wp 92 ENDIF 80 93 ! 81 94 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) … … 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 ! -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zmort.F90
r13295 r14385 20 20 PRIVATE 21 21 22 PUBLIC p4z_mort 23 PUBLIC p4z_mort_init 24 25 REAL(wp), PUBLIC :: wchl !: 26 REAL(wp), PUBLIC :: wchld !: 27 REAL(wp), PUBLIC :: wchldm !: 28 REAL(wp), PUBLIC :: mprat !: 29 REAL(wp), PUBLIC :: mprat2 !: 22 PUBLIC p4z_mort ! Called from p4zbio.F90 23 PUBLIC p4z_mort_init ! Called from trcini_pisces.F90 24 25 REAL(wp), PUBLIC :: wchln !: Quadratic mortality rate of nanophytoplankton 26 REAL(wp), PUBLIC :: wchld !: Quadratic mortality rate of diatoms 27 REAL(wp), PUBLIC :: mpratn !: Linear mortality rate of nanophytoplankton 28 REAL(wp), PUBLIC :: mpratd !: Linear mortality rate of diatoms 30 29 31 30 !! * Substitutions … … 42 41 !! *** ROUTINE p4z_mort *** 43 42 !! 44 !! ** Purpose : Calls the different subroutine to initialize andcompute43 !! ** Purpose : Calls the different subroutine to compute 45 44 !! the different phytoplankton mortality terms 46 45 !! … … 51 50 !!--------------------------------------------------------------------- 52 51 ! 53 CALL p4z_nano( Kbb, Krhs ) ! nanophytoplankton 54 ! 55 CALL p4z_diat( Kbb, Krhs ) ! diatoms 52 CALL p4z_mort_nano( Kbb, Krhs ) ! nanophytoplankton 53 CALL p4z_mort_diat( Kbb, Krhs ) ! diatoms 56 54 ! 57 55 END SUBROUTINE p4z_mort 58 56 59 57 60 SUBROUTINE p4z_ nano( Kbb, Krhs )61 !!--------------------------------------------------------------------- 62 !! *** ROUTINE p4z_ nano ***58 SUBROUTINE p4z_mort_nano( Kbb, Krhs ) 59 !!--------------------------------------------------------------------- 60 !! *** ROUTINE p4z_mort_nano *** 63 61 !! 64 62 !! ** Purpose : Compute the mortality terms for nanophytoplankton 65 63 !! 66 !! ** Method : - ???64 !! ** Method : Both quadratic and simili linear mortality terms 67 65 !!--------------------------------------------------------------------- 68 66 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 69 67 INTEGER :: ji, jj, jk 70 REAL(wp) :: z sizerat, zcompaph68 REAL(wp) :: zcompaph 71 69 REAL(wp) :: zfactfe, zfactch, zprcaca, zfracal 72 REAL(wp) :: ztortp , zrespp , zmortp 70 REAL(wp) :: ztortp , zrespp , zmortp, zlim1, zlim2 73 71 CHARACTER (len=25) :: charout 74 72 !!--------------------------------------------------------------------- 75 73 ! 76 IF( ln_timing ) CALL timing_start('p4z_ nano')74 IF( ln_timing ) CALL timing_start('p4z_mort_nano') 77 75 ! 78 76 prodcal(:,:,:) = 0._wp ! calcite production variable set to zero 79 77 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 80 78 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - 1e-8 ), 0.e0 ) 81 ! When highly limited by macronutrients, very small cells 82 ! dominate the community. As a consequence, aggregation83 ! due to turbulence is negligible. Mortality is also set84 ! to 085 z sizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * tr(ji,jj,jk,jpphy,Kbb)86 ! Squared mortality of Phyto similar to a sedimentation term during87 ! blooms (Doney et al. 1996)88 zrespp = wchl * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * zsizerat 89 90 ! Phytoplankton mortality. This mortality loss is slightly91 ! increased when nutrients are limiting phytoplankton growth92 ! as observed for instance in case of iron limitation.93 ztortp = mprat * xstep * zcompaph / ( xkmort + tr(ji,jj,jk,jpphy,Kbb) ) * zsizerat79 80 ! Quadratic mortality of nano due to aggregation during 81 ! blooms (Doney et al. 1996) 82 ! ----------------------------------------------------- 83 zlim2 = xlimphy(ji,jj,jk) * xlimphy(ji,jj,jk) 84 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) * tr(ji,jj,jk,jpphy,Kbb) 85 zrespp = wchln * 1.e6 * xstep * zlim1 * xdiss(ji,jj,jk) * zcompaph 86 87 ! Phytoplankton linear mortality 88 ! A michaelis-menten like term is introduced to avoid 89 ! extinction of nanophyto in highly limited areas 90 ! ---------------------------------------------------- 91 ztortp = mpratn * xstep * zcompaph / ( xkmort + tr(ji,jj,jk,jpphy,Kbb) ) * tr(ji,jj,jk,jpphy,Kbb) 94 92 95 93 zmortp = zrespp + ztortp 96 94 97 95 ! Update the arrays TRA which contains the biological sources and sinks 98 99 96 zfactfe = tr(ji,jj,jk,jpnfe,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) 100 97 zfactch = tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) … … 102 99 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zmortp * zfactch 103 100 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zmortp * zfactfe 101 102 ! Production PIC particles due to mortality 104 103 zprcaca = xfracal(ji,jj,jk) * zmortp 105 !106 104 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 107 ! 105 106 ! POC associated with the shell is supposed to be routed to 107 ! big particles because of the ballasting effect 108 108 zfracal = 0.5 * xfracal(ji,jj,jk) 109 109 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprcaca … … 114 114 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ( 1. - zfracal ) * zmortp 115 115 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zfracal * zmortp 116 117 ! Update the arrays TRA which contains the biological sources and sinks 116 118 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ( 1. - zfracal ) * zmortp * zfactfe 117 119 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zfracal * zmortp * zfactfe 120 ! 118 121 END_3D 119 122 ! … … 124 127 ENDIF 125 128 ! 126 IF( ln_timing ) CALL timing_stop('p4z_ nano')127 ! 128 END SUBROUTINE p4z_ nano129 130 131 SUBROUTINE p4z_ diat( Kbb, Krhs )132 !!--------------------------------------------------------------------- 133 !! *** ROUTINE p4z_ diat ***129 IF( ln_timing ) CALL timing_stop('p4z_mort_nano') 130 ! 131 END SUBROUTINE p4z_mort_nano 132 133 134 SUBROUTINE p4z_mort_diat( Kbb, Krhs ) 135 !!--------------------------------------------------------------------- 136 !! *** ROUTINE p4z_mort_diat *** 134 137 !! 135 138 !! ** Purpose : Compute the mortality terms for diatoms 136 139 !! 137 !! ** Method : - ???140 !! ** Method : - Both quadratic and simili linear mortality terms 138 141 !!--------------------------------------------------------------------- 139 142 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices … … 145 148 !!--------------------------------------------------------------------- 146 149 ! 147 IF( ln_timing ) CALL timing_start('p4z_diat') 148 ! 149 ! Aggregation term for diatoms is increased in case of nutrient 150 ! stress as observed in reality. The stressed cells become more 151 ! sticky and coagulate to sink quickly out of the euphotic zone 152 ! ------------------------------------------------------------ 150 IF( ln_timing ) CALL timing_start('p4z_mort_diat') 151 ! 152 ! Aggregation term for diatoms is increased in case of nutrient 153 ! stress as observed in reality. The stressed cells become more 154 ! sticky and coagulate to sink quickly out of the euphotic zone 155 ! This is due to the production of EPS by stressed cells 156 ! ------------------------------------------------------------- 153 157 154 158 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) … … 156 160 zcompadi = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - 1e-9), 0. ) 157 161 158 ! Aggregation term for diatoms is increased in case of nutrient 159 ! stress as observed in reality. The stressed cells become more 160 ! sticky and coagulate to sink quickly out of the euphotic zone 161 ! ------------------------------------------------------------ 162 ! Phytoplankton respiration 163 ! ------------------------ 162 ! Aggregation term for diatoms is increased in case of nutrient 163 ! stress as observed in reality. The stressed cells become more 164 ! sticky and coagulate to sink quickly out of the euphotic zone 165 ! ------------------------------------------------------------ 164 166 zlim2 = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 165 167 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) 166 zrespp2 = 1.e6 * xstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb) 167 168 ! Phytoplankton mortality. 169 ! ------------------------ 170 ztortp2 = mprat2 * xstep * tr(ji,jj,jk,jpdia,Kbb) / ( xkmort + tr(ji,jj,jk,jpdia,Kbb) ) * zcompadi 168 zrespp2 = 1.e6 * xstep * wchld * zlim1 * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb) 169 170 ! Phytoplankton linear mortality 171 ! A michaelis-menten like term is introduced to avoid 172 ! extinction of diatoms in highly limited areas 173 ! --------------------------------------------------- 174 ztortp2 = mpratd * xstep * tr(ji,jj,jk,jpdia,Kbb) / ( xkmort + tr(ji,jj,jk,jpdia,Kbb) ) * zcompadi 171 175 172 176 zmortp2 = zrespp2 + ztortp2 173 177 174 ! Update the arrays tr (:,:,:,:,Krhs)which contains the biological sources and sinks178 ! Update the arrays trends which contains the biological sources and sinks 175 179 ! --------------------------------------------------------------------- 176 180 zfactch = tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) … … 182 186 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zmortp2 * zfactsi 183 187 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zmortp2 * zfactsi 188 189 ! Half of the linear mortality term is routed to big particles 190 ! becaue of the ballasting effect 184 191 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zrespp2 + 0.5 * ztortp2 185 192 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + 0.5 * ztortp2 … … 196 203 ENDIF 197 204 ! 198 IF( ln_timing ) CALL timing_stop('p4z_ diat')199 ! 200 END SUBROUTINE p4z_ diat205 IF( ln_timing ) CALL timing_stop('p4z_mort_diat') 206 ! 207 END SUBROUTINE p4z_mort_diat 201 208 202 209 … … 207 214 !! ** Purpose : Initialization of phytoplankton parameters 208 215 !! 209 !! ** Method : Read the namp ismort namelist and check the parameters216 !! ** Method : Read the namp4zmort namelist and check the parameters 210 217 !! called at the first timestep 211 218 !! 212 !! ** input : Namelist namp ismort219 !! ** input : Namelist namp4zmort 213 220 !! 214 221 !!---------------------------------------------------------------------- 215 222 INTEGER :: ios ! Local integer 216 223 ! 217 NAMELIST/namp4zmort/ wchl , wchld, wchldm, mprat, mprat2224 NAMELIST/namp4zmort/ wchln, wchld, mpratn, mpratd 218 225 !!---------------------------------------------------------------------- 219 226 ! … … 226 233 READ ( numnatp_ref, namp4zmort, IOSTAT = ios, ERR = 901) 227 234 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmort in reference namelist' ) 235 228 236 READ ( numnatp_cfg, namp4zmort, IOSTAT = ios, ERR = 902 ) 229 237 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmort in configuration namelist' ) … … 232 240 IF(lwp) THEN ! control print 233 241 WRITE(numout,*) ' Namelist : namp4zmort' 234 WRITE(numout,*) ' quadratic mortality of phytoplankton wchl =', wchl242 WRITE(numout,*) ' quadratic mortality of phytoplankton wchln =', wchln 235 243 WRITE(numout,*) ' maximum quadratic mortality of diatoms wchld =', wchld 236 WRITE(numout,*) ' maximum quadratic mortality of diatoms wchldm =', wchldm 237 WRITE(numout,*) ' phytoplankton mortality rate mprat =', mprat 238 WRITE(numout,*) ' Diatoms mortality rate mprat2 =', mprat2 244 WRITE(numout,*) ' phytoplankton mortality rate mpratn =', mpratn 245 WRITE(numout,*) ' Diatoms mortality rate mpratd =', mpratd 239 246 ENDIF 240 247 ! -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zopt.F90
r14213 r14385 80 80 ze3(:,:,:) = 0._wp 81 81 ! 82 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 83 ! ! -------------------------------------------------------- 82 ! Attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 83 ! Thus the light penetration scheme is based on a decomposition of PAR 84 ! into three wave length domains. This was first officially published 85 ! in Lengaigne et al. (2007). 86 ! -------------------------------------------------------- 84 87 zchl3d(:,:,:) = tr(:,:,:,jpnch,Kbb) + tr(:,:,:,jpdch,Kbb) 85 IF( ln_p5z ) zchl3d(:,:,:) = zchl3d(:,:,:) + tr(:,:,:,jppch,Kbb) 86 ! 88 IF( ln_p5z ) zchl3d(:,:,:) = zchl3d(:,:,:) + tr(:,:,:,jppch,Kbb) 89 ! 90 ! Computation of the light attenuation parameters based on a 91 ! look-up table 87 92 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 88 93 zchl = ( zchl3d(ji,jj,jk) + rtrn ) * 1.e6 … … 94 99 ekr(ji,jj,jk) = rkrgb(3,irgb) * e3t(ji,jj,jk,Kmm) 95 100 END_3D 96 ! !* Photosynthetically Available Radiation (PAR) 97 ! ! -------------------------------------- 101 102 ! Photosynthetically Available Radiation (PAR) 103 ! Two cases are considered in the following : 104 ! (1) An explicit diunal cycle is activated. In that case, mean 105 ! QSR is used as PISCES in its current state has not been parameterized 106 ! for an explicit diurnal cycle 107 ! (2) no diurnal cycle of SW is active and in that case, QSR is used. 108 ! -------------------------------------------- 98 109 IF( l_trcdm2dc ) THEN ! diurnal cycle 99 110 ! 111 ! 112 ! SW over the ice free zone of the grid cell. This assumes that 113 ! SW is zero below sea ice which is a very crude assumption that is 114 ! not fully correct with LIM3 and SI3 but no information is 115 ! currently available to do a better job. SHould be improved in the 116 ! (near) future. 100 117 zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 101 118 ! 102 119 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 103 120 ! 121 ! Used PAR is computed for each phytoplankton species 122 ! etot_ndcy is PAR at level jk averaged over 24h. 123 ! Due to their size, they have different light absorption characteristics 104 124 DO jk = 1, nksr 105 125 etot_ndcy(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) … … 113 133 ENDIF 114 134 ! 135 ! SW over the ice free zone of the grid cell. This assumes that 136 ! SW is zero below sea ice which is a very crude assumption that is 137 ! not fully correct with LIM3 and SI3 but no information is 138 ! currently available to do a better job. SHould be improved in the 139 ! (near) future. 140 115 141 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 116 142 ! 117 143 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3 ) 118 144 ! 145 ! Total PAR computation at level jk that includes the diurnal cycle 119 146 DO jk = 1, nksr 120 147 etot(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 121 148 END DO 122 149 ! 123 ELSE 124 ! 150 ELSE ! no diurnal cycle 151 ! 152 ! 153 ! SW over the ice free zone of the grid cell. This assumes that 154 ! SW is zero below sea ice which is a very crude assumption that is 155 ! not fully correct with LIM3 and SI3 but no information is 156 ! currently available to do a better job. SHould be improved in the 157 ! (near) future. 125 158 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 126 159 ! 127 160 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 128 161 ! 162 163 ! Used PAR is computed for each phytoplankton species 164 ! Due to their size, they have different light absorption characteristics 129 165 DO jk = 1, nksr 130 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 131 enano(:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 132 ediat(:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 166 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ! Total PAR 167 enano(:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) ! Nanophytoplankton 168 ediat(:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) ! Diatoms 133 169 END DO 134 170 IF( ln_p5z ) THEN 135 171 DO jk = 1, nksr 136 epico(:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 172 epico(:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) ! Picophytoplankton (PISCES-QUOTA) 137 173 END DO 138 174 ENDIF … … 141 177 142 178 179 ! Biophysical feedback part (computation of vertical penetration of SW) 143 180 IF( ln_qsr_bio ) THEN !* heat flux accros w-level (used in the dynamics) 144 181 ! ! ------------------------ … … 151 188 ! ! ------------------------ 152 189 ENDIF 153 ! !* Euphotic depth and level 154 neln (:,:) = 1 ! ------------------------ 190 191 ! Euphotic depth and level 192 ! Two definitions of the euphotic zone are used here. 193 ! (1) The classical definition based on the relative threshold value 194 ! (2) An alternative definition based on a absolute threshold value. 195 ! ------------------------------------------------------------------- 196 neln(:,:) = 1 155 197 heup (:,:) = gdepw(:,:,2,Kmm) 156 198 heup_01(:,:) = gdepw(:,:,2,Kmm) … … 162 204 heup(ji,jj) = gdepw(ji,jj,jk+1,Kmm) ! Euphotic layer depth 163 205 ENDIF 164 IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0. 50 ) THEN206 IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.10 ) THEN 165 207 heup_01(ji,jj) = gdepw(ji,jj,jk+1,Kmm) ! Euphotic layer depth (light level definition) 166 208 ENDIF 167 209 END_3D 168 210 ! 211 ! The euphotic depth can not exceed 300 meters. 169 212 heup (:,:) = MIN( 300., heup (:,:) ) 170 213 heup_01(:,:) = MIN( 300., heup_01(:,:) ) 171 ! !* mean light over the mixed layer 172 zdepmoy(:,:) = 0.e0 ! ------------------------------- 214 215 ! Mean PAR over the mixed layer 216 ! ----------------------------- 217 zdepmoy(:,:) = 0.e0 173 218 zetmp1 (:,:) = 0.e0 174 219 zetmp2 (:,:) = 0.e0 … … 176 221 DO_3D( 1, 1, 1, 1, 1, nksr ) 177 222 IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 178 zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! remineralisation179 zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! production223 zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Actual PAR for remineralisation 224 zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Par averaged over 24h for production 180 225 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 181 226 ENDIF … … 192 237 ENDIF 193 238 END_3D 194 ! 239 240 ! Computation of the mean usable light for the different phytoplankton 241 ! groups based on their absorption characteristics. 195 242 zdepmoy(:,:) = 0.e0 196 243 zetmp3 (:,:) = 0.e0 … … 199 246 DO_3D( 1, 1, 1, 1, 1, nksr ) 200 247 IF( gdepw(ji,jj,jk+1,Kmm) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN 201 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! production202 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! production248 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Nanophytoplankton 249 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Diatoms 203 250 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 204 251 ENDIF … … 216 263 ! 217 264 IF( ln_p5z ) THEN 265 ! Picophytoplankton when using PISCES-QUOTA 218 266 ALLOCATE( zetmp5(jpi,jpj) ) ; zetmp5 (:,:) = 0.e0 219 267 DO_3D( 1, 1, 1, 1, 1, nksr ) 220 268 IF( gdepw(ji,jj,jk+1,Kmm) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN 221 zetmp5(ji,jj) = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! production269 zetmp5(ji,jj) = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t(ji,jj,jk,Kmm) 222 270 ENDIF 223 271 END_3D -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zpoc.F90
r13295 r14385 3 3 !! *** MODULE p4zpoc *** 4 4 !! TOP : PISCES Compute remineralization of organic particles 5 !! Same module for both PISCES and PISCES-QUOTA 5 6 !!========================================================================= 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 8 9 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 9 10 !! 3.6 ! 2016-03 (O. Aumont) Quota model and diverse 11 !! 4.0 ! 2018 (O. Aumont) Variable lability parameterization 10 12 !!---------------------------------------------------------------------- 11 13 !! p4z_poc : Compute remineralization/dissolution of organic compounds 12 14 !! p4z_poc_init : Initialisation of parameters for remineralisation 15 !! alngam and gamain : computation of the incomplete gamma function 13 16 !!---------------------------------------------------------------------- 14 17 USE oce_trc ! shared variables between ocean and passive tracers … … 22 25 23 26 PUBLIC p4z_poc ! called in p4zbio.F90 24 PUBLIC p4z_poc_init ! called in trc sms_pisces.F9025 PUBLIC alngam ! 27 PUBLIC p4z_poc_init ! called in trcini_pisces.F90 28 PUBLIC alngam ! 26 29 PUBLIC gamain ! 27 30 … … 33 36 REAL(wp), PUBLIC :: rshape !: shape factor of the gamma distribution 34 37 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: alphan, reminp !: 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: alphap !: 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: alphan, reminp !: variable lability of POC and initial distribution 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: alphap !: lability distribution of small particles 37 40 38 41 … … 52 55 !! 53 56 !! ** Purpose : Compute remineralization of organic particles 57 !! A reactivity-continuum parameterization is chosen 58 !! to describe the lability of the organic particles 59 !! As a consequence, the remineralisation rates of the 60 !! the different pools change with time as a function of 61 !! the lability distribution 54 62 !! 55 !! ** Method : - ??? 63 !! ** Method : - Computation of the remineralisation rates is performed 64 !! according to reactivity continuum formalism described 65 !! in Aumont et al. (2017). 56 66 !!--------------------------------------------------------------------- 57 67 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? … … 83 93 solgoc = 0.04/ 2.56 * 1./ ( 1.-50**(-0.04) ) 84 94 85 ! Initialisation of temp rary arrys95 ! Initialisation of temporary arrays 86 96 IF( ln_p4z ) THEN 87 97 zremipoc(:,:,:) = xremip … … 96 106 zfolimi (:,:,:) = 0. 97 107 108 ! Initialisation of the lability distributions that are set to 109 ! the distribution of newly produced organic particles 98 110 DO jn = 1, jcpoc 99 111 alphag(:,:,:,jn) = alphan(jn) … … 101 113 END DO 102 114 103 ! -----------------------------------------------------------------------104 115 ! Lability parameterization. This is the big particles part (GOC) 105 ! This lability parameterization can be activated only with the standard 106 ! particle scheme. Does not work with Kriest parameterization. 116 ! This lability parameterization is always active. However, if only one 117 ! lability class is specified in the namelist, this is equivalent to 118 ! a standard parameterisation with a constant lability 107 119 ! ----------------------------------------------------------------------- 108 120 ztremint(:,:,:) = zremigoc(:,:,:) … … 192 204 193 205 IF( ln_p4z ) THEN 206 ! The standard PISCES part 194 207 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 195 ! POC disaggregation by turbulence and bacterial activity. 196 ! -------------------------------------------------------- 208 ! POC degradation by bacterial activity. It is a function 209 ! of the mean lability and of temperature. This also includes 210 ! shrinking of particles due to the bacterial activity 211 ! ----------------------------------------------------------- 197 212 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 198 213 zorem2 = zremig * tr(ji,jj,jk,jpgoc,Kbb) … … 202 217 zofer3 = zremig * solgoc * tr(ji,jj,jk,jpbfe,Kbb) 203 218 204 ! -------------------------------------219 ! update of the TRA arrays 205 220 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk) 206 221 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zorem2 - zorem3(ji,jj,jk) … … 212 227 END_3D 213 228 ELSE 229 ! PISCES-QUOTA part 214 230 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 215 ! POC disaggregation by turbulence and bacterial activity. 231 ! POC degradation by bacterial activity. It is a function 232 ! of the mean lability and of temperature. This also includes 233 ! shrinking of particles due to the bacterial activity 216 234 ! -------------------------------------------------------- 217 235 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) … … 223 241 zofer2 = xremipn / xremipc * zremig * tr(ji,jj,jk,jpbfe,Kbb) 224 242 225 ! -------------------------------------243 ! update of the TRA arrays 226 244 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk) 227 245 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + solgoc * zopon2 … … 246 264 ENDIF 247 265 248 ! ------------------------------------------------------------------249 266 ! Lability parameterization for the small OM particles. This param 250 267 ! is based on the same theoretical background as the big particles. 251 268 ! However, because of its low sinking speed, lability is not supposed 252 269 ! to be equal to its initial value (the value of the freshly produced 253 ! organic matter). It is however uniform in the mixed layer. 254 ! ------------------------------------------------------------------- 255 ! 270 ! organic matter) in the MLD. It is however uniform in the mixed layer. 271 ! --------------------------------------------------------------------- 256 272 totprod (:,:) = 0. 257 273 totthick(:,:) = 0. 258 274 totcons (:,:) = 0. 275 259 276 ! intregrated production and consumption of POC in the mixed layer 260 277 ! ---------------------------------------------------------------- 261 !262 278 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 263 279 zdep = hmld(ji,jj) … … 272 288 273 289 ! Computation of the lability spectrum in the mixed layer. In the mixed 274 ! layer, this spectrum is supposed to be uniform. 290 ! layer, this spectrum is supposed to be uniform as a result of intense 291 ! mixing. 275 292 ! --------------------------------------------------------------------- 276 293 ztremint(:,:,:) = zremipoc(:,:,:) … … 302 319 ENDIF 303 320 304 ! -----------------------------------------------------------------------305 321 ! The lability parameterization is used here. The code is here 306 322 ! almost identical to what is done for big particles. The only difference … … 309 325 ! should be determined before. 310 326 ! ----------------------------------------------------------------------- 311 !312 327 DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 313 328 IF (tmask(ji,jj,jk) == 1.) THEN … … 384 399 385 400 IF( ln_p4z ) THEN 401 ! The standard PISCES part 386 402 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 387 403 IF (tmask(ji,jj,jk) == 1.) THEN 388 ! POC disaggregation by turbulence and bacterial activity. 404 ! POC disaggregation by turbulence and bacterial activity.It is a function 405 ! of the mean lability and of temperature 389 406 ! -------------------------------------------------------- 390 407 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 391 408 zorem = zremip * tr(ji,jj,jk,jppoc,Kbb) 392 409 zofer = zremip * tr(ji,jj,jk,jpsfe,Kbb) 393 410 411 ! Update of the TRA arrays 394 412 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem 395 413 orem(ji,jj,jk) = orem(ji,jj,jk) + zorem … … 401 419 END_3D 402 420 ELSE 421 ! PISCES-QUOTA part 403 422 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 404 ! POC disaggregation by turbulence and bacterial activity. 405 ! -------------------------------------------------------- 423 ! POC disaggregation by turbulence and bacterial activity.It is a function 424 ! of the mean lability and of temperature 425 !-------------------------------------------------------- 406 426 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 407 427 zopoc = zremip * tr(ji,jj,jk,jppoc,Kbb) … … 410 430 zopop = xremipp / xremipc * zremip * tr(ji,jj,jk,jppop,Kbb) 411 431 zofer = xremipn / xremipc * zremip * tr(ji,jj,jk,jpsfe,Kbb) 412 432 433 ! Update of the TRA arrays 413 434 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zopoc 414 435 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zopon … … 426 447 IF( knt == nrdttrc ) THEN 427 448 zrfact2 = 1.e3 * rfact2r 428 CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 429 CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 430 CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:) * 1.e+9 * zrfact2 ) ! Remineralisation rate449 CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate of small particles 450 CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate of large particles 451 CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:) * 1.e+9 * zrfact2 ) ! Remineralisation of biogenic particulate iron 431 452 ENDIF 432 453 ENDIF … … 493 514 ALLOCATE( alphan(jcpoc) , reminp(jcpoc) , alphap(jpi,jpj,jpk,jcpoc) ) 494 515 ! 495 IF (jcpoc > 1) THEN 516 IF (jcpoc > 1) THEN ! Case when more than one lability class is used 496 517 ! 497 518 remindelta = LOG(4. * 1000. ) / REAL(jcpoc-1, wp) … … 517 538 reminp(jcpoc) = reminp(jcpoc) * xremip / alphan(jcpoc) 518 539 519 ELSE 540 ELSE ! Only one lability class is used 520 541 alphan(jcpoc) = 1. 521 542 reminp(jcpoc) = xremip -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zprod.F90
r13295 r14385 2 2 !!====================================================================== 3 3 !! *** MODULE p4zprod *** 4 !! TOP : Growth Rate of the two phytoplankton s groups4 !! TOP : Growth Rate of the two phytoplankton groups of PISCES 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 24 24 PUBLIC p4z_prod ! called in p4zbio.F90 25 25 PUBLIC p4z_prod_init ! called in trcsms_pisces.F90 26 PUBLIC p4z_prod_alloc 27 28 REAL(wp), PUBLIC :: pislopen !: 29 REAL(wp), PUBLIC :: pisloped !: 30 REAL(wp), PUBLIC :: xadap !: 31 REAL(wp), PUBLIC :: excretn !: 32 REAL(wp), PUBLIC :: excretd !: 33 REAL(wp), PUBLIC :: bresp !: 34 REAL(wp), PUBLIC :: chlcnm !: 35 REAL(wp), PUBLIC :: chlcdm !: 36 REAL(wp), PUBLIC :: chlcmin !: 37 REAL(wp), PUBLIC :: fecnm !: 38 REAL(wp), PUBLIC :: fecdm !: 39 REAL(wp), PUBLIC :: grosip !: 26 PUBLIC p4z_prod_alloc ! called in trcini_pisces.F90 27 28 REAL(wp), PUBLIC :: pislopen !: P-I slope of nanophytoplankton 29 REAL(wp), PUBLIC :: pisloped !: P-I slope of diatoms 30 REAL(wp), PUBLIC :: xadap !: Adaptation factor to low light 31 REAL(wp), PUBLIC :: excretn !: Excretion ratio of nanophyto 32 REAL(wp), PUBLIC :: excretd !: Excretion ratio of diatoms 33 REAL(wp), PUBLIC :: bresp !: Basal respiration rate 34 REAL(wp), PUBLIC :: chlcnm !: Maximum Chl/C ratio of nano 35 REAL(wp), PUBLIC :: chlcdm !: Maximum Chl/C ratio of diatoms 36 REAL(wp), PUBLIC :: chlcmin !: Minimum Chl/C ratio of phytoplankton 37 REAL(wp), PUBLIC :: fecnm !: Maximum Fe/C ratio of nano 38 REAL(wp), PUBLIC :: fecdm !: Maximum Fe/C ratio of diatoms 39 REAL(wp), PUBLIC :: grosip !: Mean Si/C ratio of diatoms 40 40 41 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotan !: proxy of N quota in Nanophyto 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotad !: proxy of N quota in diatom ee42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotad !: proxy of N quota in diatoms 43 43 44 44 REAL(wp) :: r1_rday ! 1 / rday … … 60 60 !! *** ROUTINE p4z_prod *** 61 61 !! 62 !! ** Purpose : Compute the phytoplankton production depending on 63 !! light, temperature and nutrient availability 64 !! 65 !! ** Method : - ??? 62 !! ** Purpose : Computes phytoplankton production depending on 63 !! light, temperature and nutrient availability 64 !! Computes also the uptake of Iron and Si as well 65 !! as the chlorophyll content of the cells 66 !! PISCES relies on a mixed Monod-Quota formalism 66 67 !!--------------------------------------------------------------------- 67 68 INTEGER, INTENT(in) :: kt, knt ! … … 70 71 INTEGER :: ji, jj, jk 71 72 REAL(wp) :: zsilfac, znanotot, zdiattot, zconctemp, zconctemp2 72 REAL(wp) :: zratio, zmax, zsilim, ztn, zadap, zlim, zsi lfac2, zsiborn73 REAL(wp) :: zp rod, zproreg, zproreg2, zprochln, zprochld74 REAL(wp) :: z maxday, zdocprod, zpislopen, zpisloped75 REAL(wp) :: z mxltst, zmxlday76 REAL(wp) :: zr um, zcodel, zargu, zval, zfeup, chlcnm_n, chlcdm_n77 REAL(wp) :: z fact73 REAL(wp) :: zratio, zmax, zsilim, ztn, zadap, zlim, zsiborn 74 REAL(wp) :: zpptot, zpnewtot, zpregtot, zprochln, zprochld 75 REAL(wp) :: zproddoc, zprodsil, zprodfer, zprodlig 76 REAL(wp) :: zpislopen, zpisloped, zfact 77 REAL(wp) :: zratiosi, zmaxsi, zlimfac, zsizetmp, zfecnm, zfecdm 78 REAL(wp) :: zprod, zval 78 79 CHARACTER (len=25) :: charout 79 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zw2d80 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d81 REAL(wp), DIMENSION(jpi,jpj ) :: zstrn, zmixnano, zmixdiat82 80 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprmaxn,zprmaxd 83 81 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadd, zysopt 84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdia, zprbio, zprdch, zprnch 82 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdia, zprbio, zprchld, zprchln 83 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdch, zprnch 85 84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprorcan, zprorcad, zprofed, zprofen 86 85 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpronewn, zpronewd 87 86 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmxl_fac, zmxl_chl 88 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpligprod1, zpligprod287 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zpligprod 89 88 !!--------------------------------------------------------------------- 90 89 ! … … 93 92 ! Allocate temporary workspace 94 93 ! 95 zprorcan (:,:,:) = 0._wp ; zprorcad (:,:,:) = 0._wp ; zprofed (:,:,:) = 0._wp 96 zprofen (:,:,:) = 0._wp ; zysopt (:,:,:) = 0._wp 97 zpronewn (:,:,:) = 0._wp ; zpronewd (:,:,:) = 0._wp ; zprdia (:,:,:) = 0._wp 98 zprbio (:,:,:) = 0._wp ; zprdch (:,:,:) = 0._wp ; zprnch (:,:,:) = 0._wp 99 zmxl_fac (:,:,:) = 0._wp ; zmxl_chl (:,:,:) = 0._wp 100 zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp 101 102 ! Computation of the optimal production 94 zprorcan(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp ; zprofed(:,:,:) = 0._wp 95 zprofen (:,:,:) = 0._wp ; zysopt (:,:,:) = 0._wp 96 zpronewn(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp ; zprdia(:,:,:) = 0._wp 97 zprbio (:,:,:) = 0._wp ; zprdch (:,:,:) = 0._wp ; zprnch(:,:,:) = 0._wp 98 zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp 99 consfe3 (:,:,:) = 0._wp 100 101 ! Computation of the maximimum production. Based on a Q10 description 102 ! of the thermal dependency 103 ! Parameters are taken from Bissinger et al. (2008) 103 104 zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 104 105 zprmaxd(:,:,:) = zprmaxn(:,:,:) 105 106 106 ! compute the day length depending on latitude and the day 107 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 108 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) 109 110 ! day length in hours 111 zstrn(:,:) = 0. 112 DO_2D( 1, 1, 1, 1 ) 113 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 114 zargu = MAX( -1., MIN( 1., zargu ) ) 115 zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 116 END_2D 117 118 ! Impact of the day duration and light intermittency on phytoplankton growth 119 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 120 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 121 zval = MAX( 1., zstrn(ji,jj) ) 122 IF( gdept(ji,jj,jk,Kmm) <= hmld(ji,jj) ) THEN 123 zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 124 ENDIF 125 zmxl_chl(ji,jj,jk) = zval / 24. 126 zmxl_fac(ji,jj,jk) = 1.5 * zval / ( 12. + zval ) 127 ENDIF 128 END_3D 107 ! Intermittency is supposed to have a similar effect on production as 108 ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac. 109 ! zmxl_chl is the fractional day length and is used to compute the mean 110 ! PAR during daytime. The effect of mixing is computed using the 111 ! absolute light level definition of the euphotic zone 112 ! ------------------------------------------------------------------------- 113 DO jk = 1, jpkm1 114 DO jj = 1 ,jpj 115 DO ji = 1, jpi 116 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 117 zval = MAX( 1., strn(ji,jj) ) 118 IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 119 zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 120 ENDIF 121 zmxl_chl(ji,jj,jk) = zval / 24. 122 zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 123 ENDIF 124 END DO 125 END DO 126 END DO 129 127 130 128 zprbio(:,:,:) = zprmaxn(:,:,:) * zmxl_fac(:,:,:) 131 129 zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:) 132 130 133 ! Maximum light intensity134 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24.135 136 ! Computation of the P-I slope for nanos and diatoms131 ! The formulation proposed by Geider et al. (1997) has been modified 132 ! to exclude the effect of nutrient limitation and temperature in the PI 133 ! curve following Vichi et al. (2007) 134 ! ----------------------------------------------------------------------- 137 135 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 138 136 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN … … 142 140 zconctemp2 = tr(ji,jj,jk,jpdia,Kbb) - zconctemp 143 141 ! 142 ! The initial slope of the PI curve can be increased for nano 143 ! to account for photadaptation, for instance in the DCM 144 ! This parameterization is adhoc and should be either 145 ! improved or removed in future versions of the model 146 147 ! Nanophytoplankton 144 148 zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap * EXP( -0.25 * enano(ji,jj,jk) ) ) & 145 149 & * tr(ji,jj,jk,jpnch,Kbb) /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn) 146 ! 150 151 ! Diatoms 147 152 zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) & 148 153 & * tr(ji,jj,jk,jpdch,Kbb) /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn) … … 153 158 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 154 159 ! Computation of production function for Carbon 155 ! --------------------------------------------- 160 ! Actual light levels are used here 161 ! ---------------------------------------------- 156 162 zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 157 163 & * zmxl_fac(ji,jj,jk) * rday + rtrn) … … 160 166 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 161 167 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 168 162 169 ! Computation of production function for Chlorophyll 163 !-------------------------------------------------- 170 ! Mean light level in the mixed layer (when appropriate) 171 ! is used here (acclimation is in general slower than 172 ! the characteristic time scales of vertical mixing) 173 ! ------------------------------------------------------ 164 174 zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 165 175 zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) … … 169 179 END_3D 170 180 171 ! Computation of a proxy of the N/C ratio 172 ! --------------------------------------- 181 ! Computation of a proxy of the N/C quota from nutrient limitation 182 ! and light limitation. Steady state is assumed to allow the computation 183 ! ---------------------------------------------------------------------- 173 184 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 174 185 zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) ) & … … 184 195 185 196 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 186 ! Si/C of diatoms 187 ! ------------------------ 188 ! Si/C increases with iron stress and silicate availability 189 ! Si/C is arbitrariliy increased for very high Si concentrations 190 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 197 ! Si/C of diatoms 198 ! ------------------------ 199 ! Si/C increases with iron stress and silicate availability 200 ! Si/C is arbitrariliy increased for very high Si concentrations 201 ! to mimic the very high ratios observed in the Southern Ocean (zsilfac) 202 ! A parameterization derived from Flynn (2003) is used for the control 203 ! when Si is not limiting which is similar to the parameterisation 204 ! proposed by Gurney and Davidson (1999). 205 ! ----------------------------------------------------------------------- 191 206 zlim = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi1 ) 192 zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 193 zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 207 zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 194 208 zsiborn = tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) 195 209 IF (gphit(ji,jj) < -30 ) THEN 196 zsilfac 2= 1. + 2. * zsiborn / ( zsiborn + xksi2**3 )210 zsilfac = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 197 211 ELSE 198 zsilfac 2= 1. + zsiborn / ( zsiborn + xksi2**3 )212 zsilfac = 1. + zsiborn / ( zsiborn + xksi2**3 ) 199 213 ENDIF 200 zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 214 zratiosi = 1.0 - tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / ( zsilfac * grosip * 3.0 + rtrn ) 215 zratiosi = MAX(0., MIN(1.0, zratiosi) ) 216 zmaxsi = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 217 IF( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 218 zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zmaxsi 219 ELSE 220 zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zsilim**0.7 * zmaxsi 221 ENDIF 201 222 ENDIF 202 223 END_3D 203 224 204 ! Mixed-layer effect on production205 ! Sea-ice effect on production206 225 ! Sea-ice effect on production 226 ! No production is assumed below sea ice 227 ! -------------------------------------- 207 228 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 208 229 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) … … 210 231 END_3D 211 232 212 ! Computation of the various production terms 233 ! Computation of the various production and nutrient uptake terms 234 ! --------------------------------------------------------------- 213 235 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 214 236 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 215 237 ! production terms for nanophyto. (C) 216 238 zprorcan(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tr(ji,jj,jk,jpphy,Kbb) * rfact2 239 240 ! New production (uptake of NO3) 217 241 zpronewn(ji,jj,jk) = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 218 242 ! 219 zratio = tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * fecnm + rtrn ) 220 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 221 zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 222 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 223 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & 224 & * zmax * tr(ji,jj,jk,jpphy,Kbb) * rfact2 225 ! production terms for diatoms (C) 243 ! Size computation 244 ! Size is made a function of the limitation of of phytoplankton growth 245 ! Strongly limited cells are supposed to be smaller. sizena is the 246 ! size at time step t+1 and is thus updated at the end of the 247 ! current time step 248 ! -------------------------------------------------------------------- 249 zlimfac = xlimphy(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 250 zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 251 sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 252 253 ! Iron uptake rates of nanophytoplankton. Upregulation is 254 ! not parameterized at low iron concentrations as observations 255 ! do not suggest it for accimated cells. Uptake is 256 ! downregulated when the quota is close to the maximum quota 257 zfecnm = xqfuncfecn(ji,jj,jk) + ( fecnm - xqfuncfecn(ji,jj,jk) ) * ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) 258 zratio = 1.0 - MIN(1.0,tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * zfecnm + rtrn ) ) 259 zmax = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) ) 260 zprofen(ji,jj,jk) = zfecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 261 & * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn + xnanono3(ji,jj,jk) & 262 & + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) ) & 263 & * xnanofer(ji,jj,jk) * zmax * tr(ji,jj,jk,jpphy,Kbb) * rfact2 264 265 ! production terms of diatoms (C) 226 266 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr(ji,jj,jk,jpdia,Kbb) * rfact2 267 268 ! New production (uptake of NO3) 227 269 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 228 ! 229 zratio = tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) * fecdm + rtrn ) 230 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 231 zprofed(ji,jj,jk) = fecdm * zprmaxd(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 232 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 233 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) ) & 234 & * zmax * tr(ji,jj,jk,jpdia,Kbb) * rfact2 270 271 ! Size computation 272 ! Size is made a function of the limitation of of phytoplankton growth 273 ! Strongly limited cells are supposed to be smaller. sizeda is 274 ! size at time step t+1 and is thus updated at the end of the 275 ! current time step. 276 ! -------------------------------------------------------------------- 277 zlimfac = zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 278 zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 279 sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 280 281 ! Iron uptake rates of diatoms. Upregulation is 282 ! not parameterized at low iron concentrations as observations 283 ! do not suggest it for accimated cells. Uptake is 284 ! downregulated when the quota is close to the maximum quota 285 zfecdm = xqfuncfecd(ji,jj,jk) + ( fecdm - xqfuncfecd(ji,jj,jk) ) * ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) 286 zratio = 1.0 - MIN(1.0, tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) * zfecdm + rtrn ) ) 287 zmax = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) ) 288 zprofed(ji,jj,jk) = zfecdm * zprmaxd(ji,jj,jk) * (1.0 - fr_i(ji,jj) ) & 289 & * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn + xdiatno3(ji,jj,jk) & 290 & + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) ) & 291 & * xdiatfer(ji,jj,jk) * zmax * tr(ji,jj,jk,jpdia,Kbb) * rfact2 235 292 ENDIF 236 293 END_3D 237 294 238 295 ! Computation of the chlorophyll production terms 296 ! The parameterization is taken from Geider et al. (1997) 297 ! ------------------------------------------------------- 239 298 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 240 299 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN … … 243 302 zprod = rday * zprorcan(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 244 303 zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 245 chlcnm_n = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *ts(ji,jj,jk,jp_tem,Kmm))) * (1. - 1.14 / 43.4 * 20.)) 246 zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 304 zprochln = zprochln + (chlcnm - chlcmin) * 12. * zprod / & 247 305 & ( zpislopeadn(ji,jj,jk) * znanotot +rtrn) 306 248 307 ! production terms for diatoms ( chlorophyll ) 249 308 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 250 309 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 251 310 zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 252 chlcdm_n = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * ts(ji,jj,jk,jp_tem,Kmm))) * (1. - 1.14 / 43.4 * 20.)) 253 zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 311 zprochld = zprochld + (chlcdm - chlcmin) * 12. * zprod / & 254 312 & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 313 255 314 ! Update the arrays TRA which contain the Chla sources and sinks 256 315 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln * texcretn … … 262 321 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 263 322 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 264 zproreg = zprorcan(ji,jj,jk) - zpronewn(ji,jj,jk) 265 zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk) 266 zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 267 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 268 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpronewn(ji,jj,jk) - zpronewd(ji,jj,jk) 269 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zproreg - zproreg2 323 zpptot = zprorcan(ji,jj,jk) + zprorcad(ji,jj,jk) 324 zpnewtot = zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) 325 zpregtot = zpptot - zpnewtot 326 zprodsil = zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb) 327 zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 328 zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 329 ! 330 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpptot 331 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpnewtot 332 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zpregtot 270 333 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zprorcan(ji,jj,jk) * texcretn 271 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk) * texcretn334 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk) * texcretn 272 335 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) + zprorcad(ji,jj,jk) * texcretd 273 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd274 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zpro rcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd275 tr(ji,jj,jk,jp doc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zdocprod276 tr(ji,jj,jk,jp oxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + o2ut * ( zproreg + zproreg2) &277 & + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) )336 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd 337 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprodsil 338 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - zprodsil 339 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zproddoc 340 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + o2ut * zpregtot + ( o2ut + o2nit ) * zpnewtot 278 341 ! 279 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 280 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zfeup 281 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 282 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 283 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 284 & - rno3 * ( zproreg + zproreg2 ) 342 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprodfer 343 consfe3(ji,jj,jk) = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) & 344 & * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2 345 346 ! 347 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zpptot 348 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpnewtot - zpregtot ) 285 349 ENDIF 286 350 END_3D 287 ! 351 352 ! Production and uptake of ligands by phytoplankton. This part is activated 353 ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small 354 ! and based on the FeL model by Morel et al. (2008) and on the study of 355 ! Shaked et al. (2020) 356 ! ------------------------------------------------------------------------- 288 357 IF( ln_ligand ) THEN 289 zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp290 358 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 291 359 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 292 z docprod= excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk)293 z feup= texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk)294 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet295 zpligprod1(ji,jj,jk) = zdocprod * ldocp296 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet360 zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 361 zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 362 zprodlig = plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 363 ! 364 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zproddoc * ldocp - zprodfer * zprodlig 297 365 ENDIF 298 366 END_3D … … 300 368 301 369 370 ! Output of the diagnostics 302 371 ! Total primary production per year 303 372 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & … … 312 381 CALL iom_put( "PPNEWD" , zpronewd(:,:,:) * zfact * tmask(:,:,:) ) ! new primary production by diatomes 313 382 CALL iom_put( "PBSi" , zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ) ! biogenic silica production 314 CALL iom_put( "PFeN" , zprofen(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by nanophyto 315 CALL iom_put( "PFeD" , zprofed(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by diatomes 316 IF( ln_ligand ) THEN 317 CALL iom_put( "LPRODP" , zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) ) 318 CALL iom_put( "LDETP" , zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) ) 383 CALL iom_put( "PFeN" , zprofen(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by nanophyto 384 CALL iom_put( "PFeD" , zprofed(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by diatomes 385 IF( ln_ligand .AND. ( iom_use( "LPRODP" ) .OR. iom_use( "LDETP" ) ) ) THEN 386 ALLOCATE( zpligprod(jpi,jpj,jpk) ) 387 zpligprod(:,:,:) = excretd * zprorcad(:,:,:) + excretn * zprorcan(:,:,:) 388 CALL iom_put( "LPRODP" , zpligprod(:,:,:) * ldocp * 1e9 * zfact * tmask(:,:,:) ) 389 ! 390 zpligprod(:,:,:) = ( texcretn * zprofen(:,:,:) + texcretd * zprofed(:,:,:) ) & 391 & * plig(:,:,:) / ( rtrn + plig(:,:,:) + 75.0 * (1.0 - plig(:,:,:) ) ) 392 CALL iom_put( "LDETP" , zpligprod(:,:,:) * lthet * 1e9 * zfact * tmask(:,:,:) ) 393 DEALLOCATE( zpligprod ) 319 394 ENDIF 320 395 CALL iom_put( "Mumax" , zprmaxn(:,:,:) * tmask(:,:,:) ) ! Maximum growth rate … … 346 421 !! ** Purpose : Initialization of phytoplankton production parameters 347 422 !! 348 !! ** Method : Read the namp isprod namelist and check the parameters423 !! ** Method : Read the namp4zprod namelist and check the parameters 349 424 !! called at the first timestep (nittrc000) 350 425 !! 351 !! ** input : Namelist namp isprod426 !! ** input : Namelist namp4zprod 352 427 !!---------------------------------------------------------------------- 353 428 INTEGER :: ios ! Local integer 354 429 ! 430 ! Namelist block 355 431 NAMELIST/namp4zprod/ pislopen, pisloped, xadap, bresp, excretn, excretd, & 356 432 & chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip … … 365 441 READ ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 366 442 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in reference namelist' ) 443 367 444 READ ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 368 445 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zprod in configuration namelist' ) -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zrem.F90
r13295 r14385 3 3 !! *** MODULE p4zrem *** 4 4 !! TOP : PISCES Compute remineralization/dissolution of organic compounds 5 !! except for POC which is treated in p4zpoc.F90 6 !! This module is common to both PISCES and PISCES-QUOTA 5 7 !!========================================================================= 6 8 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 17 19 USE p4zche ! chemical model 18 20 USE p4zprod ! Growth rate of the 2 phyto groups 19 USE p4zlim 21 USE p4zlim ! Nutrient limitation terms 20 22 USE prtctl ! print control for debugging 21 23 USE iom ! I/O manager … … 26 28 27 29 PUBLIC p4z_rem ! called in p4zbio.F90 28 PUBLIC p4z_rem_init ! called in trc sms_pisces.F9029 PUBLIC p4z_rem_alloc 30 31 REAL(wp), PUBLIC :: xremikc !: remineralisation rate of DOC32 REAL(wp), PUBLIC :: xremik n !: remineralisation rate of DON33 REAL(wp), PUBLIC :: xremik p !: remineralisation rate of DOP34 REAL(wp), PUBLIC :: xremik !: remineralisation rate of POC30 PUBLIC p4z_rem_init ! called in trcini_pisces.F90 31 PUBLIC p4z_rem_alloc ! called in trcini_pisces.F90 32 33 !! * Shared module variables 34 REAL(wp), PUBLIC :: xremikc !: remineralisation rate of DOC (p5z) 35 REAL(wp), PUBLIC :: xremikn !: remineralisation rate of DON (p5z) 36 REAL(wp), PUBLIC :: xremikp !: remineralisation rate of DOP (p5z) 35 37 REAL(wp), PUBLIC :: nitrif !: NH4 nitrification rate 36 REAL(wp), PUBLIC :: xsirem !: remineralisation rate of POC37 REAL(wp), PUBLIC :: xsiremlab !: fast remineralisation rate of POC38 REAL(wp), PUBLIC :: xsirem !: remineralisation rate of biogenic silica 39 REAL(wp), PUBLIC :: xsiremlab !: fast remineralisation rate of BSi 38 40 REAL(wp), PUBLIC :: xsilab !: fraction of labile biogenic silica 39 41 REAL(wp), PUBLIC :: feratb !: Fe/C quota in bacteria 40 REAL(wp), PUBLIC :: xkferb !: Half-saturation constant for bacteria Fe/C42 REAL(wp), PUBLIC :: xkferb !: Half-saturation constant for bacterial Fe/C 41 43 42 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array … … 56 58 !! *** ROUTINE p4z_rem *** 57 59 !! 58 !! ** Purpose : Compute remineralization/scavenging of organic compounds 59 !! 60 !! ** Method : - ??? 60 !! ** Purpose : Compute remineralization/dissolution of organic compounds 61 !! Computes also nitrification of ammonium 62 !! The solubilization/remineralization of POC is treated 63 !! in p4zpoc.F90. The dissolution of calcite is processed 64 !! in p4zlys.F90. 65 !! 66 !! ** Method : - Bacterial biomass is computed implicitely based on a 67 !! parameterization developed from an explicit modeling 68 !! of PISCES in an alternative version 61 69 !!--------------------------------------------------------------------- 62 70 INTEGER, INTENT(in) :: kt, knt ! ocean time step … … 66 74 REAL(wp) :: zremik, zremikc, zremikn, zremikp, zsiremin, zfact 67 75 REAL(wp) :: zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 68 REAL(wp) :: zbactfer, zolimit, zonitr, zrfact2 69 REAL(wp) :: zammonic, zoxyremc, zoxyremn, zoxyremp 70 REAL(wp) :: zosil, ztem, zdenitnh4, zolimic, zolimin, zolimip, zdenitrn, zdenitrp 76 REAL(wp) :: zbactfer, zonitr, zrfact2 77 REAL(wp) :: zammonic, zoxyremc, zosil, ztem, zdenitnh4, zolimic 71 78 CHARACTER (len=25) :: charout 72 REAL(wp), DIMENSION(jpi,jpj ) :: ztempbac 73 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zdepprod, zfacsi, zfacsib, zdepeff, zfebact 79 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zfacsi, zfacsib, zdepeff, zfebact 74 80 !!--------------------------------------------------------------------- 75 81 ! 76 82 IF( ln_timing ) CALL timing_start('p4z_rem') 77 83 ! 78 ! Initialisation of arrys 79 zdepprod(:,:,:) = 1._wp 84 ! Initialisation of arrays 80 85 zdepeff (:,:,:) = 0.3_wp 81 ztempbac(:,:) = 0._wp82 86 zfacsib(:,:,:) = xsilab / ( 1.0 - xsilab ) 83 87 zfebact(:,:,:) = 0._wp 84 88 zfacsi(:,:,:) = xsilab 85 89 86 ! Computation of the mean phytoplankton concentration as 87 ! a crude estimate of the bacterial biomass 90 ! Computation of the mean bacterial concentration 88 91 ! this parameterization has been deduced from a model version 89 ! that was modeling explicitely bacteria 90 ! ------------------------------------------------------- 91 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 92 zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 92 ! that was modeling explicitely bacteria. This is a very old param 93 ! that will be very soon updated based on results from a much more 94 ! recent version of PISCES with bacteria. 95 ! ---------------------------------------------------------------- 96 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 97 zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 98 zdepbac(ji,jj,jk) = 0.6 * ( MAX(0.0, tr(ji,jj,jk,jpzoo,Kbb) + tr(ji,jj,jk,jpmes,Kbb) ) * 1.0E6 )**0.6 * 1.E-6 93 99 IF( gdept(ji,jj,jk,Kmm) < zdep ) THEN 94 zdepbac(ji,jj,jk) = MIN( 0.7 * ( tr(ji,jj,jk,jpzoo,Kbb) + 2.* tr(ji,jj,jk,jpmes,Kbb) ), 4.e-6 )95 ztempbac(ji,jj) = zdepbac(ji,jj,jk)96 ELSE97 100 zdepmin = MIN( 1., zdep / gdept(ji,jj,jk,Kmm) ) 98 zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 99 zdepprod(ji,jj,jk) = zdepmin**0.273 100 zdepeff (ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 101 zdepeff(ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 101 102 ENDIF 102 103 END_3D 103 104 104 IF( ln_p4z ) THEN 105 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 106 ! DOC ammonification. Depends on depth, phytoplankton biomass 107 ! and a limitation term which is supposed to be a parameterization of the bacterial activity. 108 zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk) 109 zremik = MAX( zremik, 2.74e-4 * xstep ) 110 ! Ammonification in oxic waters with oxygen consumption 111 ! ----------------------------------------------------- 112 zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * tr(ji,jj,jk,jpdoc,Kbb) 113 zolimi(ji,jj,jk) = MIN( ( tr(ji,jj,jk,jpoxy,Kbb) - rtrn ) / o2ut, zolimit ) 114 ! Ammonification in suboxic waters with denitrification 115 ! ------------------------------------------------------- 116 zammonic = zremik * nitrfac(ji,jj,jk) * tr(ji,jj,jk,jpdoc,Kbb) 117 denitr(ji,jj,jk) = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 118 denitr(ji,jj,jk) = MIN( ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenit, denitr(ji,jj,jk) ) 119 zoxyremc = zammonic - denitr(ji,jj,jk) 120 ! 121 zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 122 denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 123 zoxyremc = MAX( 0.e0, zoxyremc ) 124 125 ! 126 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 127 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 128 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - denitr (ji,jj,jk) * rdenit 129 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) - zolimi (ji,jj,jk) - denitr(ji,jj,jk) - zoxyremc 130 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - zolimi (ji,jj,jk) * o2ut 131 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 132 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zolimi(ji,jj,jk) + zoxyremc & 133 & + ( rdenit + 1.) * denitr(ji,jj,jk) ) 134 END_3D 135 ELSE 136 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 137 ! DOC ammonification. Depends on depth, phytoplankton biomass 138 ! and a limitation term which is supposed to be a parameterization of the bacterial activity. 139 ! ----------------------------------------------------------------- 140 zremik = xstep / 1.e-6 * MAX(0.01, xlimbac(ji,jj,jk)) * zdepbac(ji,jj,jk) 141 zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 142 143 zremikc = xremikc * zremik 144 zremikn = xremikn / xremikc 145 zremikp = xremikp / xremikc 146 147 ! Ammonification in oxic waters with oxygen consumption 148 ! ----------------------------------------------------- 149 zolimit = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * tr(ji,jj,jk,jpdoc,Kbb) 150 zolimic = MAX( 0.e0, MIN( ( tr(ji,jj,jk,jpoxy,Kbb) - rtrn ) / o2ut, zolimit ) ) 151 zolimi(ji,jj,jk) = zolimic 152 zolimin = zremikn * zolimic * tr(ji,jj,jk,jpdon,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 153 zolimip = zremikp * zolimic * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 154 155 ! Ammonification in suboxic waters with denitrification 156 ! ------------------------------------------------------- 157 zammonic = zremikc * nitrfac(ji,jj,jk) * tr(ji,jj,jk,jpdoc,Kbb) 158 denitr(ji,jj,jk) = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 159 denitr(ji,jj,jk) = MAX(0., MIN( ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 160 zoxyremc = MAX(0., zammonic - denitr(ji,jj,jk)) 161 zdenitrn = zremikn * denitr(ji,jj,jk) * tr(ji,jj,jk,jpdon,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 162 zdenitrp = zremikp * denitr(ji,jj,jk) * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 163 zoxyremn = zremikn * zoxyremc * tr(ji,jj,jk,jpdon,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 164 zoxyremp = zremikp * zoxyremc * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 165 166 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zolimip + zdenitrp + zoxyremp 167 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zolimin + zdenitrn + zoxyremn 168 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - denitr(ji,jj,jk) * rdenit 169 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) - zolimic - denitr(ji,jj,jk) - zoxyremc 170 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) - zolimin - zdenitrn - zoxyremn 171 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) - zolimip - zdenitrp - zoxyremp 172 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - zolimic * o2ut 173 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 174 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zolimin + zoxyremn + ( rdenit + 1.) * zdenitrn ) 175 END_3D 176 ! 177 ENDIF 178 105 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 106 ! DOC ammonification. Depends on depth, phytoplankton biomass 107 ! and a limitation term which is supposed to be a parameterization of the bacterial activity. 108 ! -------------------------------------------------------------------------- 109 zremik = xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk) 110 zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 111 zremikc = xremikc * zremik 112 113 ! Ammonification in oxic waters with oxygen consumption 114 ! ----------------------------------------------------- 115 zolimic = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * tr(ji,jj,jk,jpdoc,Kbb) 116 zolimic = MIN( ( tr(ji,jj,jk,jpoxy,Kbb) - rtrn ) / o2ut, zolimic ) 117 zolimi(ji,jj,jk) = zolimic 118 119 ! Ammonification in suboxic waters with denitrification 120 ! ----------------------------------------------------- 121 zammonic = zremikc * nitrfac(ji,jj,jk) * tr(ji,jj,jk,jpdoc,Kbb) 122 denitr(ji,jj,jk) = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 123 denitr(ji,jj,jk) = MAX(0., MIN( ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 124 125 ! Ammonification in waters depleted in O2 and NO3 based on 126 ! other redox processes 127 ! -------------------------------------------------------- 128 zoxyremc = MAX(0., zammonic - denitr(ji,jj,jk) ) 129 130 ! Update of the the trends arrays 131 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - denitr (ji,jj,jk) * rdenit 132 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) - ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 133 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - zolimic * o2ut 134 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 135 IF( ln_p4z ) THEN ! PISCES-std 136 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 137 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 138 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 139 ELSE ! PISCES-QUOTA (p5z) 140 zremikn = xremikn / xremikc * tr(ji,jj,jk,jpdon,kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 141 zremikp = xremikp / xremikc * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 142 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 143 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 144 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) - zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 145 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) - zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 146 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zremikn * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 147 ENDIF 148 END_3D 179 149 180 150 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) … … 194 164 END_3D 195 165 196 166 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 197 167 WRITE(charout, FMT="('rem1')") 198 168 CALL prt_ctl_info( charout, cdcomp = 'top' ) 199 169 CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm) 200 170 ENDIF 201 171 202 172 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) … … 206 176 ! studies (especially at Papa) have shown this uptake to be significant 207 177 ! ---------------------------------------------------------- 208 zbactfer = feratb * rfact2 * 0.6_wp / rday * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) & 209 & * tr(ji,jj,jk,jpfer,Kbb) / ( xkferb + tr(ji,jj,jk,jpfer,Kbb) ) & 210 & * zdepprod(ji,jj,jk) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 211 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zbactfer*0.33 212 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zbactfer*0.25 213 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zbactfer*0.08 214 zfebact(ji,jj,jk) = zbactfer * 0.33 215 blim(ji,jj,jk) = xlimbacl(ji,jj,jk) * zdepbac(ji,jj,jk) / 1.e-6 * zdepprod(ji,jj,jk) 178 zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * tr(ji,jj,jk,jpfer,Kbb) & 179 & / ( xkferb + tr(ji,jj,jk,jpfer,Kbb) ) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 180 181 ! Only the transfer of iron from its dissolved form to particles 182 ! is treated here. The GGE of bacteria supposed to be equal to 183 ! 0.33. This is hard-coded. 184 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zbactfer*0.18 185 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zbactfer*0.15 186 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zbactfer*0.03 187 zfebact(ji,jj,jk) = zbactfer * 0.18 188 blim(ji,jj,jk) = xlimbacl(ji,jj,jk) * zdepbac(ji,jj,jk) / 1.e-6 216 189 END_3D 217 190 … … 225 198 ! of bSi. Set to a constant in the upper ocean 226 199 ! --------------------------------------------------------------- 227 228 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 200 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 201 202 ! Remineralization rate of BSi dependent on T and saturation 203 ! The parameterization is taken from Ridgwell et al. (2002) 204 ! --------------------------------------------------------- 229 205 zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 230 206 zsatur = MAX( rtrn, ( sio3eq(ji,jj,jk) - tr(ji,jj,jk,jpsil,Kbb) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) 231 207 zsatur2 = ( 1. + ts(ji,jj,jk,jp_tem,Kmm) / 400.)**37 232 208 znusil = 0.225 * ( 1. + ts(ji,jj,jk,jp_tem,Kmm) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 233 ! Remineralization rate of BSi depedant on T and saturation 234 ! --------------------------------------------------------- 209 210 ! Two fractions of bSi are considered : a labile one and a more 211 ! refractory one based on the commonly observed two step 212 ! dissolution of bSi (initial rapid dissolution followed by 213 ! more slowly dissolution). 214 ! Computation of the vertical evolution of the labile fraction 215 ! of bSi. This is computed assuming steady state. 216 ! -------------------------------------------------------------- 235 217 IF ( gdept(ji,jj,jk,Kmm) > zdep ) THEN 236 218 zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem ) & … … 283 265 !! 284 266 !!---------------------------------------------------------------------- 285 NAMELIST/nampisrem/ xremik,nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &267 NAMELIST/nampisrem/ nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, & 286 268 & xremikc, xremikn, xremikp 287 269 INTEGER :: ios ! Local integer output status for namelist read … … 303 285 WRITE(numout,*) ' Namelist parameters for remineralization, nampisrem' 304 286 IF( ln_p4z ) THEN 305 WRITE(numout,*) ' remineralization rate of DOC xremik =', xremik287 WRITE(numout,*) ' remineralization rate of DOC xremikc =', xremikc 306 288 ELSE 307 289 WRITE(numout,*) ' remineralization rate of DOC xremikc =', xremikc -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zsed.F90
r13546 r14385 66 66 REAL(wp) :: zsiloss, zcaloss, zws3, zws4, zwsc, zdep 67 67 REAL(wp) :: zwstpoc, zwstpon, zwstpop 68 REAL(wp) :: ztrfer, ztrpo4 s, ztrdp, zwdust, zmudia, ztemp68 REAL(wp) :: ztrfer, ztrpo4, ztrdop, zmudia, ztemp 69 69 REAL(wp) :: xdiano3, xdianh4 70 REAL(wp) :: zsoufer, zlight 70 71 ! 71 72 CHARACTER (len=25) :: charout 72 REAL(wp), DIMENSION(jpi,jpj ) :: zdenit2d, zbureff , zwork73 REAL(wp), DIMENSION(jpi,jpj ) :: zdenit2d, zbureff 73 74 REAL(wp), DIMENSION(jpi,jpj ) :: zwsbio3, zwsbio4 74 75 REAL(wp), DIMENSION(jpi,jpj ) :: zsedcal, zsedsi, zsedc 75 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsoufer, zlight76 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zpdep77 76 !!--------------------------------------------------------------------- 78 77 ! … … 81 80 82 81 ! Allocate temporary workspace 83 ALLOCATE( ztrpo4(jpi,jpj,jpk) )84 IF( ln_p5z ) ALLOCATE( ztrdop(jpi,jpj,jpk) )85 86 82 zdenit2d(:,:) = 0.e0 87 83 zbureff (:,:) = 0.e0 88 zwork (:,:) = 0.e089 84 zsedsi (:,:) = 0.e0 90 85 zsedcal (:,:) = 0.e0 91 86 zsedc (:,:) = 0.e0 92 87 88 ! OA: Warning, the following part is necessary to avoid CFL problems 89 ! above the sediments. Vertical sinking speed is limited using the 90 ! typical CFL criterion 91 ! -------------------------------------------------------------------- 92 DO_2D( 1, 1, 1, 1 ) 93 ikt = mbkt(ji,jj) 94 zdep = e3t(ji,jj,ikt,Kmm) / xstep 95 zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) ) 96 zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) ) 97 END_2D 98 93 99 IF( .NOT.lk_sed ) THEN 94 ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 95 ! -------------------------------------------------------------------- 96 DO_2D( 1, 1, 1, 1 ) 97 ikt = mbkt(ji,jj) 98 zdep = e3t(ji,jj,ikt,Kmm) / xstep 99 zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) ) 100 zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) ) 101 END_2D 102 103 ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 104 ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 100 101 ! Computation of the sediment denitrification proportion: The metamodel 102 ! from Middleburg (2006) is used 103 ! Computation of the fraction of organic matter that is permanently 104 ! buried from Dunne's model (2007) 105 105 ! ------------------------------------------------------- 106 106 DO_2D( 1, 1, 1, 1 ) … … 125 125 ENDIF 126 126 127 ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean.128 ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers)129 ! ------------------------------------------------------ 127 ! Fraction of dSi that is dissolved in the sediments. This fraction is 128 ! set to a constant value in p4zsbc 129 ! -------------------------------------------------------------------- 130 130 IF( .NOT.lk_sed ) zrivsil = 1._wp - sedsilfrac 131 131 132 ! Loss of bSi and CaCO3 to the sediments 132 133 DO_2D( 1, 1, 1, 1 ) 133 134 ikt = mbkt(ji,jj) … … 142 143 ! 143 144 IF( .NOT.lk_sed ) THEN 145 ! Dissolution of CaCO3 and bSi in the sediments. This is 146 ! instantaneous since here sediments are not explicitly 147 ! modeled. The amount of CaCO3 that dissolves in the sediments 148 ! is computed using a metamodel constructed from Archer (1996) 149 ! A minimum set to sedcalfrac is preserved. This value is defined in p4zbc 150 ! --------------------------------------------------------------- 144 151 DO_2D( 1, 1, 1, 1 ) 145 152 ikt = mbkt(ji,jj) … … 160 167 ENDIF 161 168 ! 169 ! Loss of particulate organic carbon and Fe to the sediments 162 170 DO_2D( 1, 1, 1, 1 ) 163 171 ikt = mbkt(ji,jj) … … 171 179 END_2D 172 180 ! 181 ! Loss of particulate organic N and P to the sediments (p5z) 173 182 IF( ln_p5z ) THEN 174 183 DO_2D( 1, 1, 1, 1 ) … … 185 194 186 195 IF( .NOT.lk_sed ) THEN 196 ! Degradation of organic matter in the sediments. The metamodel of 197 ! Middleburg (2006) is used here to mimic the diagenetic reactions. 187 198 ! The 0.5 factor in zpdenit is to avoid negative NO3 concentration after 188 199 ! denitrification in the sediments. Not very clever, but simpliest option. 200 ! ------------------------------------------------------------------------ 189 201 DO_2D( 1, 1, 1, 1 ) 190 202 ikt = mbkt(ji,jj) … … 192 204 zws4 = zwsbio4(ji,jj) * zdep 193 205 zws3 = zwsbio3(ji,jj) * zdep 206 ! Fraction that is permanently buried in the sediments 194 207 zrivno3 = 1. - zbureff(ji,jj) 195 208 zwstpoc = tr(ji,jj,ikt,jpgoc,Kbb) * zws4 + tr(ji,jj,ikt,jppoc,Kbb) * zws3 209 ! Denitrification in the sediments 196 210 zpdenit = MIN( 0.5 * ( tr(ji,jj,ikt,jpno3,Kbb) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 211 ! Fraction that is not denitrified 197 212 z1pdenit = zwstpoc * zrivno3 - zpdenit 213 ! Oxic remineralization of organic matter in the sediments 198 214 zolimit = MIN( ( tr(ji,jj,ikt,jpoxy,Kbb) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 215 ! The fraction that cannot be denitrified nor oxidized by O2 216 ! is released back to the water column as DOC 199 217 tr(ji,jj,ikt,jpdoc,Krhs) = tr(ji,jj,ikt,jpdoc,Krhs) + z1pdenit - zolimit 218 ! Update of the tracers concentrations 200 219 tr(ji,jj,ikt,jppo4,Krhs) = tr(ji,jj,ikt,jppo4,Krhs) + zpdenit + zolimit 201 220 tr(ji,jj,ikt,jpnh4,Krhs) = tr(ji,jj,ikt,jpnh4,Krhs) + zpdenit + zolimit … … 206 225 sdenit(ji,jj) = rdenit * zpdenit * e3t(ji,jj,ikt,Kmm) 207 226 zsedc(ji,jj) = (1. - zrivno3) * zwstpoc * e3t(ji,jj,ikt,Kmm) 227 ! PISCES-QUOTA (p5z) 208 228 IF( ln_p5z ) THEN 209 229 zwstpop = tr(ji,jj,ikt,jpgop,Kbb) * zws4 + tr(ji,jj,ikt,jppop,Kbb) * zws3 … … 215 235 ENDIF 216 236 217 218 ! Nitrogen fixation process 219 ! Small source iron from particulate inorganic iron 220 !----------------------------------- 221 DO jk = 1, jpkm1 222 zlight (:,:,jk) = ( 1.- EXP( -etot_ndcy(:,:,jk) / diazolight ) ) * ( 1. - fr_i(:,:) ) 223 zsoufer(:,:,jk) = zlight(:,:,jk) * 2E-11 / ( 2E-11 + biron(:,:,jk) ) 224 ENDDO 237 ! Nitrogen fixation process : light limitation of diazotrophy 238 ! Small source of iron from particulate inorganic iron (photochemistry) 239 ! This is a purely adhoc param. 240 !---------------------------------------------------------------------- 241 242 ! Diazotrophy (nitrogen fixation) is modeled according to an empirical 243 ! formulation. This is described in Aumont et al. (2015). Limitation 244 ! by P and Fe is computed. Inhibition by high N concentrations is imposed. 245 ! Diazotrophy sensitivity to temperature is parameterized as in 246 ! Ye et al. (2012) 247 ! ------------------------------------------------------------------------ 225 248 IF( ln_p4z ) THEN 249 ! PISCES part 226 250 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 227 ! !Potential nitrogen fixation dependant on temperature and iron251 ! Potential nitrogen fixation dependant on temperature and iron 228 252 ztemp = ts(ji,jj,jk,jp_tem,Kmm) 229 zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 230 ! Potential nitrogen fixation dependant on temperature and iron 253 zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) / rno3 254 ! Nitrogen fixation is inhibited when enough NO3 and/or NH4 255 zlim = ( 1.- xnanonh4(ji,jj,jk) - xnanono3(ji,jj,jk) ) 256 zfact = zlim * rfact2 257 ! Nitrogen fixation limitation by PO4 and Fe 258 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 259 ztrpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 260 zlight = ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) ) 261 nitrpot(ji,jj,jk) = zmudia * r1_rday * zfact * MIN( ztrfer, ztrpo4 ) * zlight 262 END_3D 263 ELSE 264 ! PISCES-QUOTA part 265 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 266 ! Potential nitrogen fixation dependant on temperature and iron 267 ztemp = ts(ji,jj,jk,jp_tem,Kmm) 268 zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) / rno3 269 ! Nitrogen fixation is inhibited when enough NO3 and/or NH4 231 270 xdianh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 232 271 xdiano3 = tr(ji,jj,jk,jpno3,Kbb) / ( concnno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - xdianh4) … … 234 273 IF( zlim <= 0.1 ) zlim = 0.01 235 274 zfact = zlim * rfact2 275 ! Nitrogen fixation limitation by PO4/DOP and Fe 236 276 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 237 ztrpo4(ji,jj,jk) = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 238 ztrdp = ztrpo4(ji,jj,jk) 239 nitrpot(ji,jj,jk) = zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk) 240 END_3D 241 ELSE ! p5z 242 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 243 ! ! Potential nitrogen fixation dependant on temperature and iron 244 ztemp = ts(ji,jj,jk,jp_tem,Kmm) 245 zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 246 ! Potential nitrogen fixation dependant on temperature and iron 247 xdianh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 248 xdiano3 = tr(ji,jj,jk,jpno3,Kbb) / ( concnno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - xdianh4) 249 zlim = ( 1.- xdiano3 - xdianh4 ) 250 IF( zlim <= 0.1 ) zlim = 0.01 251 zfact = zlim * rfact2 252 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 253 ztrpo4(ji,jj,jk) = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 254 ztrdop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( 1E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4(ji,jj,jk)) 255 ztrdp = ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) 256 nitrpot(ji,jj,jk) = zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk) 277 ztrpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 278 ztrdop = tr(ji,jj,jk,jpdop,Kbb) / ( 1E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4) 279 zlight = ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) ) 280 nitrpot(ji,jj,jk) = zmudia * r1_rday * zfact * MIN( ztrfer, ztrpo4 + ztrdop ) * zlight 257 281 END_3D 258 282 ENDIF … … 261 285 ! ---------------------------------------- 262 286 IF( ln_p4z ) THEN 287 ! PISCES part 263 288 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 264 289 zfact = nitrpot(ji,jj,jk) * nitrfix 290 ! 1/3 of the diazotrophs growth is supposed to be excreted 291 ! as NH4. 1/3 as DOC and the rest is routed to POC/GOC as 292 ! a result of mortality by predation. Completely adhoc param 265 293 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zfact / 3.0 266 294 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zfact / 3.0 … … 270 298 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zfact * 1.0 / 3.0 * 1.0 / 3.0 271 299 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 300 ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C at max 301 zlight = ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) ) 302 zsoufer = zlight * 2E-11 / ( 2E-11 + biron(ji,jj,jk) ) 272 303 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - 30E-6 * zfact * 1.0 / 3.0 273 304 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 274 305 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 275 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer (ji,jj,jk)* rfact2 / rday306 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer * rfact2 / rday 276 307 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + concdnh4 / ( concdnh4 + tr(ji,jj,jk,jppo4,Kbb) ) & 277 308 & * 0.001 * tr(ji,jj,jk,jpdoc,Kbb) * xstep 278 309 END_3D 279 310 ELSE ! p5z 311 ! PISCES-QUOTA part 280 312 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 281 313 zfact = nitrpot(ji,jj,jk) * nitrfix 314 ! 1/3 of the diazotrophs growth is supposed to be excreted 315 ! as NH4. 1/3 as DOC and the rest is routed POC and GOC as 316 ! a result of mortality by predation. Completely adhoc param 282 317 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zfact / 3.0 283 318 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zfact / 3.0 319 ! N/P ratio of diazotrophs is supposed to be 46 320 ztrpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) ) 321 ztrdop = tr(ji,jj,jk,jpdop,Kbb) / ( 1E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4) 322 284 323 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - 16.0 / 46.0 * zfact * ( 1.0 - 1.0 / 3.0 ) & 285 & * ztrpo4 (ji,jj,jk) / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk)+ rtrn)324 & * ztrpo4 / (ztrpo4 + ztrdop + rtrn) 286 325 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zfact * 1.0 / 3.0 287 326 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zfact * 1.0 / 3.0 288 327 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + 16.0 / 46.0 * zfact / 3.0 & 289 & - 16.0 / 46.0 * zfact * ztrdop(ji,jj,jk) & 290 & / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn) 328 & - 16.0 / 46.0 * zfact * ztrdop / (ztrpo4 + ztrdop + rtrn) 291 329 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zfact * 1.0 / 3.0 * 2.0 / 3.0 292 330 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + zfact * 1.0 / 3.0 * 2.0 /3.0 … … 296 334 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 1.0 /3.0 297 335 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 336 ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C at max 337 zlight = ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) ) 338 zsoufer = zlight * 2E-11 / ( 2E-11 + biron(ji,jj,jk) ) 298 339 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - 30E-6 * zfact * 1.0 / 3.0 299 340 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 300 341 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 301 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer (ji,jj,jk)* rfact2 / rday342 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer * rfact2 / rday 302 343 END_3D 303 344 ! … … 319 360 ENDIF 320 361 ! 321 IF( ln_p5z ) DEALLOCATE( ztrpo4, ztrdop )322 !323 362 IF( ln_timing ) CALL timing_stop('p4z_sed') 324 363 ! -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zsink.F90
r13295 r14385 2 2 !!====================================================================== 3 3 !! *** MODULE p4zsink *** 4 !! TOP : PISCES vertical flux of particulate matter due to gravitational sinking 4 !! TOP : PISCES vertical flux of particulate matter due to 5 !! gravitational sinking 6 !! This module is the same for both PISCES and PISCES-QUOTA 5 7 !!====================================================================== 6 8 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 8 10 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Change aggregation formula 9 11 !! 3.5 ! 2012-07 (O. Aumont) Introduce potential time-splitting 12 !! 4.0 ! 2019 (O. Aumont) an external subroutine is called 13 !! to compute the impact of sinking 10 14 !!---------------------------------------------------------------------- 11 15 !! p4z_sink : Compute vertical flux of particulate matter due to gravitational sinking … … 25 29 26 30 PUBLIC p4z_sink ! called in p4zbio.F90 27 PUBLIC p4z_sink_init ! called in trc sms_pisces.F9028 PUBLIC p4z_sink_alloc 31 PUBLIC p4z_sink_init ! called in trcini_pisces.F90 32 PUBLIC p4z_sink_alloc ! called in trcini_pisces.F90 29 33 30 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinking, sinking2 !: POC sinking fluxes 31 35 ! ! (different meanings depending on the parameterization) 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkingn, sinking2n !: PO Csinking fluxes33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkingp, sinking2p !: PO Csinking fluxes36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkingn, sinking2n !: PON sinking fluxes 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkingp, sinking2p !: POP sinking fluxes 34 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkcal, sinksil !: CaCO3 and BSi sinking fluxes 35 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes … … 48 52 CONTAINS 49 53 50 !!----------------------------------------------------------------------51 !! 'standard sinking parameterisation' ???52 !!----------------------------------------------------------------------53 54 54 SUBROUTINE p4z_sink ( kt, knt, Kbb, Kmm, Krhs ) 55 55 !!--------------------------------------------------------------------- … … 57 57 !! 58 58 !! ** Purpose : Compute vertical flux of particulate matter due to 59 !! gravitational sinking 60 !! 61 !! ** Method : - ??? 59 !! gravitational sinking. 60 !! 61 !! ** Method : - An external advection subroutine is called to compute 62 !! the impact of sinking on the particles. The tracers 63 !! concentrations are updated in this subroutine which 64 !! is mandatory to deal with negative concentrations 62 65 !!--------------------------------------------------------------------- 63 66 INTEGER, INTENT(in) :: kt, knt … … 77 80 consgoc(:,:,:) = 0. 78 81 79 ! 80 ! Sinking speeds of detritus is increased with depth as shown 81 ! by data and from the coagulation theory 82 ! ----------------------------------------------------------- 82 ! Sinking speeds of big detritus is increased with depth as shown 83 ! by data and from the coagulation theory. This is controled by 84 ! wsbio2max and wsbio2scale. If wsbio2max is set to wsbio2, then 85 ! sinking speed is constant with depth. 86 ! CaCO3 and bSi are supposed to sink at the big particles speed 87 ! due to their high density 88 ! --------------------------------------------------------------- 83 89 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 84 90 zmax = MAX( heup_01(ji,jj), hmld(ji,jj) ) … … 87 93 END_3D 88 94 89 ! limit the values of the sinking speeds to avoid numerical instabilities95 ! Sinking speed of the small particles is always constant 90 96 wsbio3(:,:,:) = wsbio 91 97 92 ! 93 ! Initializa to zero all the sinking arrays 94 ! ----------------------------------------- 98 ! Initialize to zero all the sinking arrays 99 ! ----------------------------------------- 95 100 sinking (:,:,:) = 0.e0 96 101 sinking2(:,:,:) = 0.e0 … … 100 105 sinkfer2(:,:,:) = 0.e0 101 106 102 ! Compute the sedimentation term using p4zsink2for all the sinking particles103 ! 107 ! Compute the sedimentation term using trc_sink for all the sinking particles 108 ! --------------------------------------------------------------------------- 104 109 CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinking , jppoc, rfact2 ) 105 110 CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinkfer , jpsfe, rfact2 ) … … 109 114 CALL trc_sink( kt, Kbb, Kmm, wsbio4, sinkcal , jpcal, rfact2 ) 110 115 116 ! PISCES-QUOTA part 111 117 IF( ln_p5z ) THEN 112 118 sinkingn (:,:,:) = 0.e0 … … 115 121 sinking2p(:,:,:) = 0.e0 116 122 117 ! Compute the sedimentation term using p4zsink2for all the sinking particles118 ! 123 ! Compute the sedimentation term using trc_sink for all the sinking particles 124 ! --------------------------------------------------------------------------- 119 125 CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinkingn , jppon, rfact2 ) 120 126 CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinkingp , jppop, rfact2 ) … … 156 162 !!---------------------------------------------------------------------- 157 163 !! *** ROUTINE p4z_sink_init *** 164 !! 165 !! ** Purpose : Initialization of sinking parameters 166 !! 167 !! ** Method : 168 !! 169 !! ** input : 158 170 !!---------------------------------------------------------------------- 159 171 INTEGER :: jk -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zsms.F90
r14086 r14385 29 29 PRIVATE 30 30 31 PUBLIC p4z_sms_init ! called in p4zsms.F9032 PUBLIC p4z_sms ! called in p4zsms.F9031 PUBLIC p4z_sms_init ! called in trcini_pisces.F90 32 PUBLIC p4z_sms ! called in trcsms_pisces.F90 33 33 34 34 INTEGER :: numco2, numnut, numnit ! logical unit for co2 budget 35 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 35 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget ! total budget of the different conservative elements 36 36 REAL(wp) :: xfact, xfact1, xfact2, xfact3 37 37 … … 55 55 !! routines of PISCES bio-model 56 56 !! 57 !! ** Method : - at each new day ... 58 !! - several calls of bio and sed ??? 59 !! - ... 57 !! ** Method : - calls the various SMS subroutines 58 !! - calls the sediment module (if ln_sediment) 59 !! - several calls of bio and sed (possible time-splitting) 60 !! - handles the potential negative concentrations (xnegtr) 60 61 !!--------------------------------------------------------------------- 61 62 ! … … 90 91 IF( ln_pisdmp .AND. MOD( kt - 1, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt, Kbb, Kmm ) ! Relaxation of some tracers 91 92 ! 92 rfact = rDt_trc 93 rfact = rDt_trc ! time step of PISCES 93 94 ! 94 95 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + 1 ) ) THEN 95 rfactr = 1. / rfact 96 rfact2 = rfact / REAL( nrdttrc, wp ) 97 rfact2r = 1. / rfact2 98 xstep = rfact2 / rday ! Time step duration for biology 96 rfactr = 1. / rfact ! inverse of the time step 97 rfact2 = rfact / REAL( nrdttrc, wp ) ! time step of the biological SMS 98 rfact2r = 1. / rfact2 ! Inverse of the biological time step 99 xstep = rfact2 / rday ! Time step duration for biology relative to a day 99 100 xfact = 1.e+3 * rfact2r 100 101 IF(lwp) WRITE(numout,*) … … 128 129 &