Changeset 14385 for NEMO/branches/2021
- Timestamp:
- 2021-02-03T16:03:34+01:00 (3 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 CALL p4z_flx( kt, jnt, Kbb, Kmm, Krhs ) ! Compute surface fluxes 129 130 ! 131 ! Handling of the negative concentrations 132 ! The biological SMS may generate negative concentrations 133 ! Trends are tested at each grid cell. If a negative concentrations 134 ! is created at a grid cell, all the sources and sinks at that grid 135 ! cell are scale to avoid that negative concentration. This approach 136 ! is quite simplistic but it conserves mass. 137 ! ------------------------------------------------------------------ 130 138 xnegtr(:,:,:) = 1.e0 131 139 DO jn = jp_pcs0, jp_pcs1 … … 139 147 ! ! where at least 1 tracer concentration becomes negative 140 148 ! ! 149 ! Concentrations are updated 141 150 DO jn = jp_pcs0, jp_pcs1 142 151 tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kbb) + xnegtr(:,:,:) * tr(:,:,:,jn,Krhs) … … 191 200 ENDIF 192 201 ! 202 ! Trends are are reset to 0 193 203 DO jn = jp_pcs0, jp_pcs1 194 204 tr(:,:,:,jn,Krhs) = 0._wp … … 199 209 #endif 200 210 ! 211 ! If ln_sediment is set to .true. then the sediment module is called 201 212 IF( ln_sediment ) THEN 202 213 ! … … 210 221 ztrbbio(:,:,:,jn) = 0._wp 211 222 END DO 223 ! 212 224 ! 213 225 IF( l_trdtrc ) THEN … … 233 245 !! *** p4z_sms_init *** 234 246 !! 235 !! ** Purpose : read PISCES namelist236 !! 237 !! ** input : file 'namelist .trc.s' containing the following238 !! namelist: natext, natbio, natsms247 !! ** Purpose : read the general PISCES namelist 248 !! 249 !! ** input : file 'namelist_pisces' containing the following 250 !! namelist: nampisbio, nampisdmp, nampismass 239 251 !!---------------------------------------------------------------------- 240 252 INTEGER :: ios ! Local integer output status for namelist read 241 253 !! 242 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat 3, wsbio2, wsbio2max, wsbio2scale, &243 & 254 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, feratz, feratm, wsbio2, wsbio2max, & 255 & wsbio2scale, ldocp, ldocz, lthet, no3rat3, po4rat3 244 256 ! 245 257 NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp … … 265 277 WRITE(numout,*) ' half saturation constant for mortality xkmort =', xkmort 266 278 IF( ln_p5z ) THEN 267 WRITE(numout,*) ' N/C in zooplankton no3rat3 =', no3rat3 268 WRITE(numout,*) ' P/C in zooplankton po4rat3 =', po4rat3 269 ENDIF 270 WRITE(numout,*) ' Fe/C in zooplankton ferat3 =', ferat3 279 WRITE(numout,*) ' N/C in zooplankton no3rat3 =', no3rat3 280 WRITE(numout,*) ' P/C in zooplankton po4rat3 =', po4rat3 281 ENDIF 282 WRITE(numout,*) ' Fe/C in microzooplankton feratz =', feratz 283 WRITE(numout,*) ' Fe/C in microzooplankton feratz =', feratm 271 284 WRITE(numout,*) ' Big particles sinking speed wsbio2 =', wsbio2 272 285 WRITE(numout,*) ' Big particles maximum sinking speed wsbio2max =', wsbio2max … … 314 327 !! *** ROUTINE p4z_rst *** 315 328 !! 316 !! ** Purpose : Read or write variables in restart file:329 !! ** Purpose : Read or write specific PISCES variables in restart file: 317 330 !! 318 331 !! WRITE(READ) mode: … … 327 340 IF( TRIM(cdrw) == 'READ' ) THEN 328 341 ! 342 ! Read the specific variable of PISCES 329 343 IF(lwp) WRITE(numout,*) 330 344 IF(lwp) WRITE(numout,*) ' p4z_rst : Read specific variables from pisces model ' 331 345 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 332 346 ! 347 ! Read the pH. If not in the restart file, then it is initialized from 348 ! the initial conditions 333 349 IF( iom_varid( numrtr, 'PH', ldstop = .FALSE. ) > 0 ) THEN 334 350 CALL iom_get( numrtr, jpdom_auto, 'PH' , hi(:,:,:) ) … … 338 354 ENDIF 339 355 CALL iom_get( numrtr, jpdom_auto, 'Silicalim', xksi(:,:) ) 356 357 ! Read the Si half saturation constant and the maximum Silica concentration 340 358 IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN 341 359 CALL iom_get( numrtr, jpdom_auto, 'Silicamax' , xksimax(:,:) ) … … 343 361 xksimax(:,:) = xksi(:,:) 344 362 ENDIF 345 ! 363 364 ! Read the Fe3 consumption term by phytoplankton 365 IF( iom_varid( numrtr, 'Consfe3', ldstop = .FALSE. ) > 0 ) THEN 366 CALL iom_get( numrtr, jpdom_auto, 'Consfe3' , consfe3(:,:,:) ) 367 ELSE 368 consfe3(:,:,:) = 0._wp 369 ENDIF 370 371 372 ! Read the cumulative total flux. If not in the restart file, it is set to 0 346 373 IF( iom_varid( numrtr, 'tcflxcum', ldstop = .FALSE. ) > 0 ) THEN ! cumulative total flux of carbon 347 374 CALL iom_get( numrtr, 'tcflxcum' , t_oce_co2_flx_cum ) … … 350 377 ENDIF 351 378 ! 379 ! PISCES size proxy 380 IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 381 CALL iom_get( numrtr, jpdom_auto, 'sized' , sized(:,:,:) ) 382 sized(:,:,:) = MAX( 1.0, sized(:,:,:) ) 383 ELSE 384 sized(:,:,:) = 1. 385 ENDIF 386 ! 387 IF( iom_varid( numrtr, 'sizen', ldstop = .FALSE. ) > 0 ) THEN 388 CALL iom_get( numrtr, jpdom_auto, 'sizen' , sizen(:,:,:) ) 389 sizen(:,:,:) = MAX( 1.0, sizen(:,:,:) ) 390 ELSE 391 sizen(:,:,:) = 1. 392 ENDIF 393 394 ! PISCES-QUOTA specific part 352 395 IF( ln_p5z ) THEN 353 IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 396 ! Read the size of the different phytoplankton groups 397 ! If not in the restart file, they are set to 1 398 IF( iom_varid( numrtr, 'sizep', ldstop = .FALSE. ) > 0 ) THEN 354 399 CALL iom_get( numrtr, jpdom_auto, 'sizep' , sizep(:,:,:) ) 355 CALL iom_get( numrtr, jpdom_auto, 'sizen' , sizen(:,:,:) ) 356 CALL iom_get( numrtr, jpdom_auto, 'sized' , sized(:,:,:) ) 400 sizep(:,:,:) = MAX( 1.0, sizep(:,:,:) ) 357 401 ELSE 358 402 sizep(:,:,:) = 1. 359 sizen(:,:,:) = 1.360 sized(:,:,:) = 1.361 403 ENDIF 362 404 ENDIF 363 405 ! 364 406 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 407 ! write the specific variables of PISCES 365 408 IF( kt == nitrst ) THEN 366 409 IF(lwp) WRITE(numout,*) … … 372 415 CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 373 416 CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) 374 IF( ln_p5z ) THEN375 CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) )376 CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) )377 CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) )378 ENDIF417 CALL iom_rstput( kt, nitrst, numrtw, 'Consfe3', consfe3(:,:,:) ) ! Si max concentration 418 CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) ! Cumulative CO2 flux 419 CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) ) ! Size of nanophytoplankton 420 CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) ) ! Size of diatoms 421 IF( ln_p5z ) CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) ) ! Size of picophytoplankton 379 422 ENDIF 380 423 ! … … 386 429 !! *** p4z_dmp *** 387 430 !! 388 !! ** purpose : Relaxation of some tracers 431 !! ** purpose : Relaxation of the total budget of some elements 432 !! This routine avoids the model to drift far from the 433 !! observed content in various elements 434 !! Elements that may be relaxed : Alk, P, N, Si 389 435 !!---------------------------------------------------------------------- 390 436 ! … … 393 439 ! 394 440 REAL(wp) :: alkmean = 2426. ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 395 REAL(wp) :: po4mean = 2.1 65 ! mean value of phosphates396 REAL(wp) :: no3mean = 3 0.90 ! mean value of nitrate397 REAL(wp) :: silmean = 9 1.51! mean value of silicate441 REAL(wp) :: po4mean = 2.174 ! mean value of phosphate 442 REAL(wp) :: no3mean = 31.00 ! mean value of nitrate 443 REAL(wp) :: silmean = 90.33 ! mean value of silicate 398 444 ! 399 445 REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn … … 416 462 zsilsumn = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kmm) * cvol(:,:,:) ) * zarea 417 463 464 ! Correct the trn mean content of alkalinity 418 465 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 419 466 tr(:,:,:,jptal,Kmm) = tr(:,:,:,jptal,Kmm) * alkmean / zalksumn 420 467 468 ! Correct the trn mean content of PO4 421 469 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 422 470 tr(:,:,:,jppo4,Kmm) = tr(:,:,:,jppo4,Kmm) * po4mean / zpo4sumn 423 471 472 ! Correct the trn mean content of NO3 424 473 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 425 474 tr(:,:,:,jpno3,Kmm) = tr(:,:,:,jpno3,Kmm) * no3mean / zno3sumn 426 475 476 ! Correct the trn mean content of SiO3 427 477 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 428 478 tr(:,:,:,jpsil,Kmm) = MIN( 400.e-6,tr(:,:,:,jpsil,Kmm) * silmean / zsilsumn ) … … 436 486 437 487 IF(lwp) WRITE(numout,*) ' ' 488 ! Correct the trb mean content of alkalinity 438 489 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 439 490 tr(:,:,:,jptal,Kbb) = tr(:,:,:,jptal,Kbb) * alkmean / zalksumb 440 491 492 ! Correct the trb mean content of PO4 441 493 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 442 494 tr(:,:,:,jppo4,Kbb) = tr(:,:,:,jppo4,Kbb) * po4mean / zpo4sumb 443 495 496 ! Correct the trb mean content of NO3 444 497 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 445 498 tr(:,:,:,jpno3,Kbb) = tr(:,:,:,jpno3,Kbb) * no3mean / zno3sumb 446 499 500 ! Correct the trb mean content of SiO3 447 501 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 448 502 tr(:,:,:,jpsil,Kbb) = MIN( 400.e-6,tr(:,:,:,jpsil,Kbb) * silmean / zsilsumb ) … … 484 538 ENDIF 485 539 540 ! Compute the budget of NO3 486 541 IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 487 ! Compute the budget of NO3, ALK, Si, Fer488 542 IF( ln_p4z ) THEN 489 543 zwork(:,:,:) = tr(:,:,:,jpno3,Kmm) + tr(:,:,:,jpnh4,Kmm) & … … 503 557 ENDIF 504 558 ! 559 ! Compute the budget of PO4 505 560 IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 506 561 IF( ln_p4z ) THEN … … 521 576 ENDIF 522 577 ! 578 ! Compute the budget of SiO3 523 579 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 524 580 zwork(:,:,:) = tr(:,:,:,jpsil,Kmm) + tr(:,:,:,jpgsi,Kmm) + tr(:,:,:,jpdsi,Kmm) … … 537 593 ENDIF 538 594 ! 595 ! Compute the budget of Iron 539 596 IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 540 597 zwork(:,:,:) = tr(:,:,:,jpfer,Kmm) + tr(:,:,:,jpnfe,Kmm) + tr(:,:,:,jpdfe,Kmm) & 541 598 & + tr(:,:,:,jpbfe,Kmm) + tr(:,:,:,jpsfe,Kmm) & 542 & + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * ferat3599 & + ( tr(:,:,:,jpzoo,Kmm) * feratz + tr(:,:,:,jpmes,Kmm) ) * feratm 543 600 ! 544 601 ferbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:) ) -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p5zlim.F90
r13434 r14385 2 2 !!====================================================================== 3 3 !! *** MODULE p5zlim *** 4 !! TOP : PISCES with variable stoichiometry 4 !! TOP : PISCES-QUOTA : Computes the various nutrient limitation terms 5 !! of phytoplankton 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 14 15 USE oce_trc ! Shared ocean-passive tracers variables 15 16 USE trc ! Tracers defined 16 USE p4zlim 17 USE p4zlim ! Nutrient limitation 17 18 USE sms_pisces ! PISCES variables 18 19 USE iom ! I/O manager … … 21 22 PRIVATE 22 23 23 PUBLIC p5z_lim 24 PUBLIC p5z_lim_init 25 PUBLIC p5z_lim_alloc 24 PUBLIC p5z_lim ! called in p4zbio.F90 25 PUBLIC p5z_lim_init ! called in trcsms_pisces.F90 26 PUBLIC p5z_lim_alloc ! called in trcini_pisces.F90 26 27 27 28 !! * Shared module variables 28 REAL(wp), PUBLIC :: concpno3 !: NO3 , PO4 half saturation29 REAL(wp), PUBLIC :: concpnh4 !: NH4 half saturation for p hyto30 REAL(wp), PUBLIC :: concnpo4 !: NH4 half saturation for diatoms31 REAL(wp), PUBLIC :: concppo4 !: NH4 half saturation for diatoms32 REAL(wp), PUBLIC :: concdpo4 !: NH4 half saturation for diatoms33 REAL(wp), PUBLIC :: concpfer !: Iron half saturation for nanophyto29 REAL(wp), PUBLIC :: concpno3 !: NO3 half saturation for picophyto 30 REAL(wp), PUBLIC :: concpnh4 !: NH4 half saturation for picophyto 31 REAL(wp), PUBLIC :: concnpo4 !: PO4 half saturation for nanophyto 32 REAL(wp), PUBLIC :: concppo4 !: PO4 half saturation for picophyto 33 REAL(wp), PUBLIC :: concdpo4 !: PO4 half saturation for diatoms 34 REAL(wp), PUBLIC :: concpfer !: Iron half saturation for picophyto 34 35 REAL(wp), PUBLIC :: concbpo4 !: PO4 half saturation for bacteria 35 REAL(wp), PUBLIC :: xsizepic !: Minimum size criteria for diatoms36 REAL(wp), PUBLIC :: xsizerp !: Size ratio for nanophytoplankton36 REAL(wp), PUBLIC :: xsizepic !: Minimum size criteria for picophyto 37 REAL(wp), PUBLIC :: xsizerp !: Size ratio for picophytoplankton 37 38 REAL(wp), PUBLIC :: qfnopt !: optimal Fe quota for nanophyto 38 REAL(wp), PUBLIC :: qfpopt !: optimal Fe quota for nanophyto39 REAL(wp), PUBLIC :: qfpopt !: optimal Fe quota for picophyto 39 40 REAL(wp), PUBLIC :: qfdopt !: optimal Fe quota for diatoms 40 REAL(wp), PUBLIC :: qnnmin !: optimal Fe quota for diatoms41 REAL(wp), PUBLIC :: qnnmax !: optimal Fe quota for diatoms42 REAL(wp), PUBLIC :: qpnmin !: optimal Fe quota for diatoms43 REAL(wp), PUBLIC :: qpnmax !: optimal Fe quota for diatoms44 REAL(wp), PUBLIC :: qnpmin !: optimal Fe quota for diatoms45 REAL(wp), PUBLIC :: qnpmax !: optimal Fe quota for diatoms46 REAL(wp), PUBLIC :: qppmin !: optimal Fe quota for diatoms47 REAL(wp), PUBLIC :: qppmax !: optimal Fe quota for diatoms48 REAL(wp), PUBLIC :: qndmin !: optimal Fequota for diatoms49 REAL(wp), PUBLIC :: qndmax !: optimal Fequota for diatoms50 REAL(wp), PUBLIC :: qpdmin !: optimal Fequota for diatoms51 REAL(wp), PUBLIC :: qpdmax !: optimal Fequota for diatoms52 REAL(wp), PUBLIC :: qfnmax !: optimal Fe quota for diatoms53 REAL(wp), PUBLIC :: qfpmax !: optimal Fe quota for diatoms54 REAL(wp), PUBLIC :: qfdmax !: optimalFe quota for diatoms55 REAL(wp), PUBLIC :: zpsinh4 56 REAL(wp), PUBLIC :: zpsino3 57 REAL(wp), PUBLIC :: zpsiuptk 41 REAL(wp), PUBLIC :: qnnmin !: minimum N quota for nanophyto 42 REAL(wp), PUBLIC :: qnnmax !: maximum N quota for nanophyto 43 REAL(wp), PUBLIC :: qpnmin !: minimum P quota for nanophyto 44 REAL(wp), PUBLIC :: qpnmax !: maximum P quota for nanophyto 45 REAL(wp), PUBLIC :: qnpmin !: minimum N quota for nanophyto 46 REAL(wp), PUBLIC :: qnpmax !: maximum N quota for nanophyto 47 REAL(wp), PUBLIC :: qppmin !: minimum P quota for nanophyto 48 REAL(wp), PUBLIC :: qppmax !: maximum P quota for nanophyto 49 REAL(wp), PUBLIC :: qndmin !: minimum N quota for diatoms 50 REAL(wp), PUBLIC :: qndmax !: maximum N quota for diatoms 51 REAL(wp), PUBLIC :: qpdmin !: minimum P quota for diatoms 52 REAL(wp), PUBLIC :: qpdmax !: maximum P quota for diatoms 53 REAL(wp), PUBLIC :: qfnmax !: maximum Fe quota for nanophyto 54 REAL(wp), PUBLIC :: qfpmax !: maximum Fe quota for picophyto 55 REAL(wp), PUBLIC :: qfdmax !: maximum Fe quota for diatoms 56 REAL(wp), PUBLIC :: zpsinh4 !: respiration cost of NH4 assimilation 57 REAL(wp), PUBLIC :: zpsino3 !: respiration cost of NO3 assimilation 58 REAL(wp), PUBLIC :: zpsiuptk !: Mean respiration cost 58 59 59 60 !!* Allometric variations of the quotas 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmin !: ??? 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmax !: ??? 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmin !: ??? 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmax !: ??? 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmin !: ??? 65 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmax !: ??? 66 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmin !: ??? 67 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmax !: ??? 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmin !: ??? 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmax !: ??? 70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmin !: ??? 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmax !: ??? 72 73 !!* Phytoplankton limitation terms 74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicono3 !: ??? 75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpiconh4 !: ??? 76 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicopo4 !: ??? 77 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanodop !: ??? 78 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicodop !: ??? 79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatdop !: ??? 80 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanofer !: ??? 81 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicofer !: ??? 82 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatfer !: ??? 83 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpic !: ??? 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpfe !: ??? 85 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvnuptk 86 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvpuptk 87 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvduptk 88 89 ! Coefficient for iron limitation 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmin !: Minimum N quota of nanophyto 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmax !: Maximum N quota of nanophyto 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmin !: Minimum P quota of nanophyto 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmax !: Maximum P quota of picophyto 65 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmin !: Minimum N quota of picophyto 66 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmax !: Maximum N quota of picophyto 67 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmin !: Minimum P quota of picophyto 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmax !: Maximum P quota of picophyto 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmin !: Minimum N quota of diatoms 70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmax !: Maximum N quota of diatoms 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmin !: Minimum P quota of diatoms 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmax !: Maximum P quota of diatoms 73 74 !!* Phytoplankton nutrient limitation terms 75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicono3 !: Limitation of NO3 uptake by picophyto 76 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpiconh4 !: Limitation of NH4 uptake by picophyto 77 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicopo4 !: Limitation of PO4 uptake by picophyto 78 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanodop !: Limitation of DOP uptake by nanophyto 79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicodop !: Limitation of DOP uptake by picophyto 80 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatdop !: Limitation of DOP uptake by diatoms 81 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicofer !: Limitation of Fe uptake by picophyto 82 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpic !: Limitation of picophyto PP by nutrients 83 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpics !: Limitation of picophyto PP by nutrients 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphys !: Limitation of nanophyto PP by nutrients 85 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdias !: Limitation of diatoms PP by nutrients 86 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpfe !: Limitation of picophyto PP by Fe 87 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvnuptk !: Maximum potential uptake rate of nanophyto 88 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvpuptk !: Maximum potential uptake rate of picophyto 89 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvduptk !: Maximum potential uptake rate of diatoms 90 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqfuncfecp !: 91 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimnpn, xlimnpp, xlimnpd 92 93 ! Coefficient for iron limitation following Flynn and Hipkin (1999) 90 94 REAL(wp) :: xcoef1 = 0.00167 / 55.85 91 95 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 … … 106 110 !! 107 111 !! ** Purpose : Compute the co-limitations by the various nutrients 108 !! for the various phytoplankton species 112 !! for the various phytoplankton species. Quota based 113 !! approach. The quota model is derived from theoretical 114 !! models proposed by Pahlow and Oschlies (2009) and 115 !! Flynn (2001). Various adaptations from several 116 !! publications by these authors have been also adopted. 109 117 !! 110 !! ** Method : - ??? 118 !! ** Method : Quota based approach. The quota model is derived from 119 !! theoretical models by Pahlow and Oschlies (2009) and 120 !! Flynn (2001). Various adaptations from several publications 121 !! by these authors have been also adopted. 111 122 !!--------------------------------------------------------------------- 112 123 ! … … 117 128 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 118 129 REAL(wp) :: z1_trndia, z1_trnpic, z1_trnphy, ztem1, ztem2, zetot1 119 REAL(wp) :: zratio, zration, zratiof, znutlim, zfalim 130 REAL(wp) :: zratio, zration, zratiof, znutlim, zfalim, zzpsiuptk 120 131 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4, zconc0npo4, zconc0dpo4 121 132 REAL(wp) :: zconc0p, zconc0pnh4, zconc0ppo4, zconcpfe, zconcnfe, zconcdfe 122 133 REAL(wp) :: fanano, fananop, fananof, fadiat, fadiatp, fadiatf 123 REAL(wp) :: fapico, fapicop, fapicof 124 REAL(wp) :: zrpho, zrass, zcoef, zfuptk, zratchl 134 REAL(wp) :: fapico, fapicop, fapicof, zlimpo4, zlimdop 135 REAL(wp) :: zrpho, zrass, zcoef, zfuptk, zratchl, ztrn, ztrp 125 136 REAL(wp) :: zfvn, zfvp, zfvf, zsizen, zsizep, zsized, znanochl, zpicochl, zdiatchl 126 REAL(wp) :: zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4 137 REAL(wp) :: zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4, zbiron 138 REAL(wp) :: znutlimtot, zlimno3, zlimnh4, zlim1f, zsizetmp 139 REAL(wp) :: zrtp, zrtn 140 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zrassn, zrassp, zrassd 127 141 !!--------------------------------------------------------------------- 128 142 ! … … 130 144 ! 131 145 zratchl = 6.0 146 sizena(:,:,:) = 0.0 ; sizepa(:,:,:) = 0.0 ; sizeda(:,:,:) = 0.0 132 147 ! 133 148 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 134 ! 135 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 136 !------------------------------------- 137 zno3 = tr(ji,jj,jk,jpno3,Kbb) / 40.e-6 138 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 139 zferlim = MIN( zferlim, 7e-11 ) 140 tr(ji,jj,jk,jpfer,Kbb) = MAX( tr(ji,jj,jk,jpfer,Kbb), zferlim ) 141 142 ! Computation of the mean relative size of each community 149 ! Computation of the Chl/C ratio of each phytoplankton group 143 150 ! ------------------------------------------------------- 144 151 z1_trnphy = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) … … 149 156 zdiatchl = tr(ji,jj,jk,jpdch,Kbb) * z1_trndia 150 157 151 ! Computation of a variable Ks for iron on diatoms taking into account 152 ! that increasing biomass is made of generally bigger cells 158 ! Computation of a variable Ks for the different phytoplankton 159 ! group as a function of their relative size. Allometry 160 ! from Edwards et al. (2012) 153 161 !------------------------------------------------ 162 163 ! diatoms 154 164 zsized = sized(ji,jj,jk)**0.81 155 165 zconcdfe = concdfer * zsized … … 158 168 zconc0dpo4 = concdpo4 * zsized 159 169 160 zsizep = 1. 170 ! picophytoplankton 171 zsizep = sizep(ji,jj,jk)**0.81 161 172 zconcpfe = concpfer * zsizep 162 173 zconc0p = concpno3 * zsizep … … 164 175 zconc0ppo4 = concppo4 * zsizep 165 176 166 zsizen = 1. 177 ! nanophytoplankton 178 zsizen = sizen(ji,jj,jk)**0.81 167 179 zconcnfe = concnfer * zsizen 168 180 zconc0n = concnno3 * zsizen … … 173 185 ! From Talmy et al. (2014) and Maranon et al. (2013) 174 186 ! ------------------------------------------------------- 175 xqnnmin(ji,jj,jk) = qnnmin 187 xqnnmin(ji,jj,jk) = qnnmin * sizen(ji,jj,jk)**(-0.36) 176 188 xqnnmax(ji,jj,jk) = qnnmax 177 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0. 27)189 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.36) 178 190 xqndmax(ji,jj,jk) = qndmax 179 xqnpmin(ji,jj,jk) = qnpmin 191 xqnpmin(ji,jj,jk) = qnpmin * sizep(ji,jj,jk)**(-0.36) 180 192 xqnpmax(ji,jj,jk) = qnpmax 181 193 … … 183 195 ! Based on the different papers by Pahlow et al., and Smith et al. 184 196 ! ----------------------------------------------------------------- 197 zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk) 198 199 ! Nanophytoplankton 185 200 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0nnh4, & 186 201 & tr(ji,jj,jk,jpno3,Kbb) / zconc0n) … … 188 203 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0npo4 189 204 fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 190 znutlim = biron(ji,jj,jk)/ zconcnfe205 znutlim = zbiron / zconcnfe 191 206 fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 207 208 ! Picophytoplankton 192 209 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0pnh4, & 193 210 & tr(ji,jj,jk,jpno3,Kbb) / zconc0p) … … 195 212 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0ppo4 196 213 fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 197 znutlim = biron(ji,jj,jk)/ zconcpfe214 znutlim = zbiron / zconcpfe 198 215 fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 216 217 ! Diatoms 199 218 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc1dnh4, & 200 219 & tr(ji,jj,jk,jpno3,Kbb) / zconc1d ) … … 202 221 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0dpo4 203 222 fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 204 znutlim = biron(ji,jj,jk)/ zconcdfe223 znutlim = zbiron / zconcdfe 205 224 fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 206 ! 207 ! Michaelis-Menten Limitation term for nutrients Small bacteria 225 226 ! 227 ! Michaelis-Menten Limitation term by nutrients of 228 ! heterotrophic bacteria 208 229 ! ------------------------------------------------------------- 209 zbactnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 210 zbactno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - zbactnh4) 230 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 231 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) 232 znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) & 233 & / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) 234 zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 235 zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 211 236 ! 212 237 zlim1 = zbactno3 + zbactnh4 … … 214 239 zlim3 = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 215 240 zlim4 = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc + tr(ji,jj,jk,jpdoc,Kbb) ) 241 242 ! Xlimbac is used for DOC solubilization whereas xlimbacl 243 ! is used for all the other bacterial-dependent term 244 ! ------------------------------------------------------- 216 245 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 217 246 xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 … … 219 248 ! Michaelis-Menten Limitation term for nutrients Small flagellates 220 249 ! ----------------------------------------------- 221 zfalim = (1.-fanano) / fanano 222 xnanonh4(ji,jj,jk) = (1. - fanano) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc0nnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 223 xnanono3(ji,jj,jk) = (1. - fanano) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) & 224 & * (1. - xnanonh4(ji,jj,jk)) 225 ! 226 zfalim = (1.-fananop) / fananop 227 xnanopo4(ji,jj,jk) = (1. - fananop) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0npo4 ) 228 xnanodop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc ) & 229 & * ( 1.0 - xnanopo4(ji,jj,jk) ) 230 xnanodop(ji,jj,jk) = 0. 231 ! 250 zrtn = tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) 251 zrtp = tr(ji,jj,jk,jppo4,Kbb) + tr(ji,jj,jk,jpdop,Kbb) 252 ! 253 ! Limitation of N based nutrients uptake (NO3 and NH4) 254 zfalim = (1.-fanano) / fanano 255 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) ) 256 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) 257 znutlimtot = (1. - fanano) * zrtn / ( zfalim * zconc0n + ztrn ) 258 xnanonh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 259 xnanono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 260 ! 261 ! Limitation of P based nutrients (PO4 and DOP) 262 zfalim = (1.-fananop) / fananop 263 zlimpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0npo4 ) 264 zlimdop = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + zconc0npo4 ) 265 znutlimtot = (1. - fananop) * ztrp / ( zfalim * zconc0npo4 + ztrp ) 266 xnanopo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 267 xnanodop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 268 ! 269 ! Limitation of Fe uptake 232 270 zfalim = (1.-fananof) / fananof 233 xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 234 ! 271 xnanofer(ji,jj,jk) = (1. - fananof) * zbiron / ( zbiron + zfalim * zconcnfe ) 272 ! 273 ! The minimum iron quota depends on the size of PSU, respiration 274 ! and the reduction of nitrate following the parameterization 275 ! proposed by Flynn and Hipkin (1999) 235 276 zratiof = tr(ji,jj,jk,jpnfe,Kbb) * z1_trnphy 236 277 zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 278 xqfuncfecn(ji,jj,jk) = zqfemn + qfnopt 237 279 ! 238 280 zration = tr(ji,jj,jk,jpnph,Kbb) * z1_trnphy 239 zration = MIN(xqnnmax(ji,jj,jk), MAX( 2. *xqnnmin(ji,jj,jk), zration ))240 fvnuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2.* xqnnmin(ji,jj,jk) / (zration + rtrn) &281 zration = MIN(xqnnmax(ji,jj,jk), MAX( xqnnmin(ji,jj,jk), zration )) 282 fvnuptk(ji,jj,jk) = 2.5 * zpsiuptk * xqnnmin(ji,jj,jk) / (zration + rtrn) & 241 283 & * MAX(0., (1. - zratchl * znanochl / 12. ) ) 242 284 ! 243 zlim1 = max(0., (zration - 2. *xqnnmin(ji,jj,jk) ) &244 & / (xqnnmax(ji,jj,jk) - 2. *xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) &285 zlim1 = max(0., (zration - xqnnmin(ji,jj,jk) ) & 286 & / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) & 245 287 & / (zration + rtrn) 246 zlim3 = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 247 xlimnfe(ji,jj,jk) = MIN( 1., zlim3 ) 248 xlimphy(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 288 ! The value of the optimal quota in the formulation below 289 ! has been found by solving a non linear equation 290 zlim1f = max(0., ( 1.13 - xqnnmin(ji,jj,jk) ) & 291 & / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) 292 zlim3 = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 293 ! computation of the various limitation terms of nanophyto 294 ! growth and PP 295 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 296 xlimphy (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 297 xlimphys(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 298 xlimnpn (ji,jj,jk) = MIN( 1., zlim1) 299 300 249 301 ! 250 302 ! Michaelis-Menten Limitation term for nutrients picophytoplankton 251 303 ! ---------------------------------------------------------------- 304 ! Limitation of N based nutrients uptake (NO3 and NH4) 252 305 zfalim = (1.-fapico) / fapico 253 xpiconh4(ji,jj,jk) = (1. - fapico) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc0pnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 254 xpicono3(ji,jj,jk) = (1. - fapico) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc0p + tr(ji,jj,jk,jpno3,Kbb) ) & 255 & * (1. - xpiconh4(ji,jj,jk)) 256 ! 306 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0p + tr(ji,jj,jk,jpnh4,Kbb) ) 307 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0p + tr(ji,jj,jk,jpno3,Kbb) ) 308 znutlimtot = (1. - fapico) * zrtn / ( zfalim * zconc0p + ztrn ) 309 xpiconh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 310 xpicono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 311 ! 312 ! Limitation of P based nutrients uptake (PO4 and DOP) 257 313 zfalim = (1.-fapicop) / fapicop 258 xpicopo4(ji,jj,jk) = (1. - fapicop) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0ppo4 ) 259 xpicodop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc ) & 260 & * ( 1.0 - xpicopo4(ji,jj,jk) ) 261 xpicodop(ji,jj,jk) = 0. 314 zlimpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0ppo4 ) 315 zlimdop = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + zconc0ppo4 ) 316 znutlimtot = (1. - fapicop) * ztrp / ( zfalim * zconc0ppo4 + ztrp) 317 xpicopo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 318 xpicodop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 262 319 ! 263 320 zfalim = (1.-fapicof) / fapicof 264 xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 265 ! 266 zratiof = tr(ji,jj,jk,jppfe,Kbb) * z1_trnpic 321 xpicofer(ji,jj,jk) = (1. - fapicof) * zbiron / ( zbiron + zfalim * zconcpfe ) 322 ! 323 ! The minimum iron quota depends on the size of PSU, respiration 324 ! and the reduction of nitrate following the parameterization 325 ! proposed by Flynn and Hipkin (1999) 326 zratiof = tr(ji,jj,jk,jppfe,Kbb) * z1_trnpic 267 327 zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 328 xqfuncfecp(ji,jj,jk) = zqfemp + qfpopt 268 329 ! 269 330 zration = tr(ji,jj,jk,jpnpi,Kbb) * z1_trnpic 270 zration = MIN(xqnpmax(ji,jj,jk), MAX( 2. *xqnpmin(ji,jj,jk), zration ))271 fvpuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2.* xqnpmin(ji,jj,jk) / (zration + rtrn) &331 zration = MIN(xqnpmax(ji,jj,jk), MAX( xqnpmin(ji,jj,jk), zration )) 332 fvpuptk(ji,jj,jk) = 2.5 * zpsiuptk * xqnpmin(ji,jj,jk) / (zration + rtrn) & 272 333 & * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 273 334 ! 274 zlim1 = max(0., (zration - 2. *xqnpmin(ji,jj,jk) ) &275 & / (xqnpmax(ji,jj,jk) - 2. *xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) &335 zlim1 = max(0., (zration - xqnpmin(ji,jj,jk) ) & 336 & / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) & 276 337 & / (zration + rtrn) 338 ! The value of the optimal quota in the formulation below 339 ! has been found by solving a non linear equation 340 zlim1f = max(0., (1.29 - xqnpmin(ji,jj,jk) ) & 341 & / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) 277 342 zlim3 = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 278 xlimpfe(ji,jj,jk) = MIN( 1., zlim3 ) 279 xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 343 344 ! computation of the various limitation terms of picophyto 345 ! growth and PP 346 xlimpfe (ji,jj,jk) = MIN( 1., zlim3 ) 347 xlimpic (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 348 xlimnpp (ji,jj,jk) = MIN( 1., zlim1 ) 349 xlimpics(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 350 351 280 352 ! 281 353 ! Michaelis-Menten Limitation term for nutrients Diatoms 282 354 ! ------------------------------------------------------ 355 ! 356 ! Limitation of N based nutrients uptake (NO3 and NH4) 283 357 zfalim = (1.-fadiat) / fadiat 284 xdiatnh4(ji,jj,jk) = (1. - fadiat) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc1dnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 285 xdiatno3(ji,jj,jk) = (1. - fadiat) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) & 286 & * (1. - xdiatnh4(ji,jj,jk)) 287 ! 358 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc1d + tr(ji,jj,jk,jpnh4,Kbb) ) 359 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) 360 znutlimtot = (1.0 - fadiat) * ztrn / ( zfalim * zconc1d + ztrn ) 361 xdiatnh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 362 xdiatno3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 363 ! 364 ! Limitation of P based nutrients uptake (PO4 and DOP) 288 365 zfalim = (1.-fadiatp) / fadiatp 289 xdiatpo4(ji,jj,jk) = (1. - fadiatp) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0dpo4 ) 290 xdiatdop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc ) & 291 & * ( 1.0 - xdiatpo4(ji,jj,jk) ) 292 xdiatdop(ji,jj,jk) = 0. 293 ! 366 zlimpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0dpo4 ) 367 zlimdop = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + zconc0dpo4 ) 368 znutlimtot = (1. - fadiatp) * ztrp / ( zfalim * zconc0dpo4 + ztrp ) 369 xdiatpo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 370 xdiatdop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 371 ! 372 ! Limitation of Fe uptake 294 373 zfalim = (1.-fadiatf) / fadiatf 295 xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 296 ! 374 xdiatfer(ji,jj,jk) = (1. - fadiatf) * zbiron / ( zbiron + zfalim * zconcdfe ) 375 ! 376 ! The minimum iron quota depends on the size of PSU, respiration 377 ! and the reduction of nitrate following the parameterization 378 ! proposed by Flynn and Hipkin (1999) 297 379 zratiof = tr(ji,jj,jk,jpdfe,Kbb) * z1_trndia 298 380 zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 381 xqfuncfecd(ji,jj,jk) = zqfemd + qfdopt 299 382 ! 300 383 zration = tr(ji,jj,jk,jpndi,Kbb) * z1_trndia 301 zration = MIN(xqndmax(ji,jj,jk), MAX( 2. *xqndmin(ji,jj,jk), zration ))302 fvduptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2.* xqndmin(ji,jj,jk) / (zration + rtrn) &384 zration = MIN(xqndmax(ji,jj,jk), MAX( xqndmin(ji,jj,jk), zration )) 385 fvduptk(ji,jj,jk) = 2.5 * zpsiuptk * xqndmin(ji,jj,jk) / (zration + rtrn) & 303 386 & * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 304 387 ! 305 zlim1 = max(0., (zration - 2. *xqndmin(ji,jj,jk) ) &306 & / (xqndmax(ji,jj,jk) - 2. *xqndmin(ji,jj,jk) ) ) &388 zlim1 = max(0., (zration - xqndmin(ji,jj,jk) ) & 389 & / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) ) & 307 390 & * xqndmax(ji,jj,jk) / (zration + rtrn) 308 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) + rtrn ) 391 ! The value of the optimal quota in the formulation below 392 ! has been found by solving a non linear equation 393 zlim1f = max(0., (1.13 - xqndmin(ji,jj,jk) ) & 394 & / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) ) & 395 & * xqndmax(ji,jj,jk) 396 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) ) 309 397 zlim4 = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 398 ! computation of the various limitation terms of diatoms 399 ! growth and PP 310 400 xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 311 401 xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 402 xlimdias(ji,jj,jk) = MIN (1.0, zlim1 / (zlim1f + rtrn ), zlim3, zlim4 ) 312 403 xlimsi(ji,jj,jk) = MIN( zlim1, zlim4 ) 404 xlimnpd(ji,jj,jk) = MIN( 1., zlim1 ) 313 405 END_3D 406 314 407 ! 315 408 ! Compute the phosphorus quota values. It is based on Litchmann et al., 2004 and Daines et al, 2013. … … 319 412 ! -------------------------------------------------------------------------------------------------- 320 413 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 321 ! Size estimation of nanophytoplankton 322 ! ------------------------------------323 zfvn = 2. * fvnuptk(ji,jj,jk)324 sizen(ji,jj,jk) = MAX(1., MIN(xsizern, 1.0 / ( MAX(rtrn, zfvn) )) )325 414 ! Size estimation of nanophytoplankton based on total biomass 415 ! Assumes that larger biomass implies addition of larger cells 416 ! ------------------------------------------------------------ 417 zcoef = tr(ji,jj,jk,jpphy,Kbb) - MIN(xsizephy, tr(ji,jj,jk,jpphy,Kbb) ) 418 sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 326 419 ! N/P ratio of nanophytoplankton 327 420 ! ------------------------------ 328 zfuptk = 0.23 * zfvn 329 zrpho = 2.24 * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpnph,Kbb) * rno3 * 15. + rtrn ) 330 zrass = 1. - 0.2 - zrpho - zfuptk 331 xqpnmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 332 xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * tr(ji,jj,jk,jpnph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) + 0.13 333 xqpnmin(ji,jj,jk) = 0.13 + 0.23 * 0.0128 * 16. 334 335 ! Size estimation of picophytoplankton 336 ! ------------------------------------ 337 zfvn = 2. * fvpuptk(ji,jj,jk) 338 sizep(ji,jj,jk) = MAX(1., MIN(xsizerp, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 421 zfuptk = 0.2 + 0.12 / ( 3.0 * sizen(ji,jj,jk) + rtrn ) 422 ! Computed from Inomura et al. (2020) using Pavlova Lutheri 423 zrpho = 11.55 * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn ) 424 zrass = MAX(0.62/4., ( 1. - zrpho - zfuptk ) * xlimnpn(ji,jj,jk) ) 425 zrassn(ji,jj,jk) = zrass 426 xqpnmin(ji,jj,jk) = ( 0.0 + 0.0078 + 0.62/4. * 0.0783 ) * 16. 427 xqpnmax(ji,jj,jk) = ( zrpho * 0.0089 + zrass * 0.0783 ) * 16. 428 xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) + (0.033 + 0.0078 ) * 16. 429 xqpnmax(ji,jj,jk) = MIN( qpnmax, xqpnmax(ji,jj,jk) ) 430 431 ! Size estimation of picophytoplankton based on total biomass 432 ! Assumes that larger biomass implies addition of larger cells 433 ! ------------------------------------------------------------ 434 zcoef = tr(ji,jj,jk,jppic,Kbb) - MIN(xsizepic, tr(ji,jj,jk,jppic,Kbb) ) 435 sizepa(ji,jj,jk) = 1. + ( xsizerp -1.0 ) * zcoef / ( xsizepic + zcoef ) 339 436 340 437 ! N/P ratio of picophytoplankton 341 438 ! ------------------------------ 342 zfuptk = 0.35 * zfvn 343 zrpho = 2.24 * tr(ji,jj,jk,jppch,Kbb) / ( tr(ji,jj,jk,jpnpi,Kbb) * rno3 * 15. + rtrn ) 344 zrass = 1. - 0.4 - zrpho - zfuptk 345 xqppmax(ji,jj,jk) = (zrpho + zfuptk) * 0.0128 * 16. + zrass * 1./ 9. * 16. 346 xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * tr(ji,jj,jk,jpnpi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) + 0.13 347 xqppmin(ji,jj,jk) = 0.13 348 349 ! Size estimation of diatoms 350 ! -------------------------- 351 zfvn = 2. * fvduptk(ji,jj,jk) 352 sized(ji,jj,jk) = MAX(1., MIN(xsizerd, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 439 zfuptk = 0.2 + 0.12 / ( 0.8 * sizep(ji,jj,jk) + rtrn ) 440 ! Computed from Inomura et al. (2020) using a synechococcus 441 zrpho = 13.4 * tr(ji,jj,jk,jppch,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) * 12. + rtrn ) 442 zrass = MAX(0.4/4., ( 1. - zrpho - zfuptk ) * xlimnpp(ji,jj,jk) ) 443 zrassp(ji,jj,jk) = zrass 444 xqppmin(ji,jj,jk) = ( (0.0 + 0.0078 ) + 0.4/4. * 0.0517 ) * 16. 445 xqppmax(ji,jj,jk) = ( zrpho * 0.0076 + zrass * 0.0517 ) * 16. 446 xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) + (0.033 + 0.0078 ) * 16 447 xqppmax(ji,jj,jk) = MIN( qppmax, xqppmax(ji,jj,jk) ) 448 449 ! Size estimation of diatoms based on total biomass 450 ! Assumes that larger biomass implies addition of larger cells 451 ! ------------------------------------------------------------ 353 452 zcoef = tr(ji,jj,jk,jpdia,Kbb) - MIN(xsizedia, tr(ji,jj,jk,jpdia,Kbb) ) 354 sized(ji,jj,jk) = 1. + xsizerd * zcoef *1E6 / ( 1. + zcoef * 1E6 ) 355 453 sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 356 454 ! N/P ratio of diatoms 357 455 ! -------------------- 358 zfuptk = 0.2 * zfvn 359 zrpho = 2.24 * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpndi,Kbb) * rno3 * 15. + rtrn ) 360 zrass = 1. - 0.2 - zrpho - zfuptk 361 xqpdmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 362 xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * tr(ji,jj,jk,jpndi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) + 0.13 363 xqpdmin(ji,jj,jk) = 0.13 + 0.2 * 0.0128 * 16. 364 456 zfuptk = 0.2 + 0.12 / ( 5.0 * sized(ji,jj,jk) + rtrn ) 457 ! Computed from Inomura et al. (2020) using a synechococcus 458 zrpho = 8.08 * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpndi,Kbb) * 12. + rtrn ) 459 zrass = MAX(0.66/4., ( 1. - zrpho - zfuptk ) * xlimnpd(ji,jj,jk) ) 460 zrassd(ji,jj,jk)=zrass 461 xqpdmin(ji,jj,jk) = ( ( 0.0 + 0.0078 ) + 0.66/4. * 0.0783 ) * 16. 462 xqpdmax(ji,jj,jk) = ( zrpho * 0.0135 + zrass * 0.0783 ) * 16. 463 xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) + ( 0.0078 + 0.033 ) * 16. 464 xqpdmax(ji,jj,jk) = MIN(qpdmax, xqpdmax(ji,jj,jk) ) 365 465 END_3D 366 466 367 467 ! Compute the fraction of nanophytoplankton that is made of calcifiers 468 ! This is a purely adhoc formulation described in Aumont et al. (2015) 469 ! This fraction depends on nutrient limitation, light, temperature 368 470 ! -------------------------------------------------------------------- 369 471 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) … … 372 474 & / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) ) 373 475 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concnpo4 ) 374 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) + 5.E-11 )375 ztem1 = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) )476 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) + 6.E-11 ) 477 ztem1 = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) + 1.8 ) 376 478 ztem2 = ts(ji,jj,jk,jp_tem,Kmm) - 10. 377 zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) ) 378 379 ! xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 380 xfracal(ji,jj,jk) = caco3r & 381 & * ztem1 / ( 1. + ztem1 ) * MAX( 1., tr(ji,jj,jk,jpphy,Kbb)*1E6 ) & 479 zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) * 30. / ( 30. + etot_ndcy(ji,jj,jk) ) 480 481 xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk) & 482 & * ztem1 / ( 0.1 + ztem1 ) * MAX( 1., tr(ji,jj,jk,jpphy,Kbb)*1E6 ) & 382 483 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & 383 484 & * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) … … 390 491 & / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) ) ) 391 492 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 493 ! 494 ! redox factor computed from NO3 levels 495 nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - tr(ji,jj,jk,jpno3,Kbb) ) & 496 & / ( 1.E-6 + tr(ji,jj,jk,jpno3,Kbb) ) ) 497 nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) ) 392 498 END_3D 393 499 ! … … 403 509 CALL iom_put( "SIZEP" , sizep (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 404 510 CALL iom_put( "SIZED" , sized (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 511 CALL iom_put( "RASSN" , zrassn (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 512 CALL iom_put( "RASSP" , zrassp (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 513 CALL iom_put( "RASSD" , zrassd (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 405 514 ENDIF 406 515 ! … … 416 525 !! ** Purpose : Initialization of nutrient limitation parameters 417 526 !! 418 !! ** Method : Read the namp islim and nampisquota namelists and check527 !! ** Method : Read the namp5zlim and nampisquota namelists and check 419 528 !! the parameters called at the first timestep (nittrc000) 420 529 !! 421 !! ** input : Namelist namp islim530 !! ** input : Namelist namp5zlim 422 531 !! 423 532 !!---------------------------------------------------------------------- … … 436 545 ! 437 546 READ ( numnatp_ref, namp5zlim, IOSTAT = ios, ERR = 901) 438 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp islim in reference namelist' )547 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zlim in reference namelist' ) 439 548 ! 440 549 READ ( numnatp_cfg, namp5zlim, IOSTAT = ios, ERR = 902 ) 441 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp islim in configuration namelist' )550 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zlim in configuration namelist' ) 442 551 IF(lwm) WRITE ( numonp, namp5zlim ) 443 552 ! … … 505 614 ENDIF 506 615 ! 507 zpsino3 = 2.3 * rno3 508 zpsinh4 = 1.8 * rno3 509 zpsiuptk = 2.3 * rno3 616 ! Metabolic cost of nitrate and ammonium utilisation 617 zpsino3 = 2.3 * rno3 618 zpsinh4 = 1.8 * rno3 619 zpsiuptk = 1.0 / 6.625 510 620 ! 511 621 nitrfac(:,:,jpk) = 0._wp … … 537 647 & xpicopo4(jpi,jpj,jpk), xpicodop(jpi,jpj,jpk), & 538 648 & xnanodop(jpi,jpj,jpk), xdiatdop(jpi,jpj,jpk), & 539 & xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk), &540 649 & xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk), & 541 650 & fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk), & 651 & xlimphys(jpi,jpj,jpk), xlimdias(jpi,jpj,jpk), & 652 & xlimnpp (jpi,jpj,jpk), xlimnpn (jpi,jpj,jpk), & 653 & xlimnpd (jpi,jpj,jpk), & 654 & xlimpics(jpi,jpj,jpk), xqfuncfecp(jpi,jpj,jpk), & 542 655 & fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk), STAT=ierr(1) ) 543 656 ! -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p5zmeso.F90
r13295 r14385 2 2 !!====================================================================== 3 3 !! *** MODULE p5zmeso *** 4 !! TOP : PISCES Compute the sources/sinks for mesozooplankton4 !! TOP : PISCES-QUOTA Compute the sources/sinks for mesozooplankton 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2002 (O. Aumont) Original code … … 9 9 !! 3.6 ! 2015-05 (O. Aumont) PISCES quota 10 10 !!---------------------------------------------------------------------- 11 !! p5z_meso : Compute the sources/sinks for mesozooplankton 12 !! p5z_meso_init : Initialization of the parameters for mesozooplankton 11 !! p5z_meso : Compute the sources/sinks for mesozooplankton 12 !! p5z_meso_init : Initialization of the parameters for mesozooplankton 13 !! p5z_meso_alloc : Allocate variables for mesozooplankton 13 14 !!---------------------------------------------------------------------- 14 15 USE oce_trc ! shared variables between ocean and passive tracers … … 23 24 PUBLIC p5z_meso ! called in p5zbio.F90 24 25 PUBLIC p5z_meso_init ! called in trcsms_pisces.F90 26 PUBLIC p5z_meso_alloc ! called in trcini_pisces.F90 25 27 26 28 !! * Shared module variables … … 49 51 REAL(wp), PUBLIC :: srespir2 !: Active respiration 50 52 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 53 REAL(wp), PUBLIC :: xfracmig !: Fractional biomass of meso that performs DVM 54 REAL(wp), PUBLIC :: xsigma2 !: Width of the predation window 55 REAL(wp), PUBLIC :: xsigma2del !: Maximum width of the predation window at low food density 51 56 LOGICAL, PUBLIC :: bmetexc2 !: Use of excess carbon for respiration 57 LOGICAL , PUBLIC :: ln_dvm_meso !: Boolean to activate DVM of mesozooplankton 58 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig !: DVM of mesozooplankton : migration depth 59 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig !: Vertical indice of the the migration depth 52 60 53 61 !! * Substitutions … … 61 69 CONTAINS 62 70 63 SUBROUTINE p5z_meso( kt, knt, Kbb, K rhs )71 SUBROUTINE p5z_meso( kt, knt, Kbb, Kmm, Krhs ) 64 72 !!--------------------------------------------------------------------- 65 73 !! *** ROUTINE p5z_meso *** 66 74 !! 67 75 !! ** Purpose : Compute the sources/sinks for mesozooplankton 68 !! 69 !! ** Method : - ??? 76 !! This includes ingestion and assimilation, flux feeding 77 !! and mortality. We use an active prey switching 78 !! parameterization Morozov and Petrovskii (2013). 79 !! All living compartments and mesozooplankton 80 !! are potential preys of mesozooplankton as well as small 81 !! sinking particles 82 !! 70 83 !!--------------------------------------------------------------------- 71 84 INTEGER, INTENT(in) :: kt, knt ! ocean time step 72 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 73 INTEGER :: ji, jj, jk 85 INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 86 ! 87 INTEGER :: ji, jj, jk, jkt 74 88 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam, zcompames 75 REAL(wp) :: zgraze2, zdenom, zfact, zfood, zfoodlim, zproport 89 REAL(wp) :: zgraze2, zdenom, zfact, zfood, zfoodlim, zproport, zdep 76 90 REAL(wp) :: zmortzgoc, zfracc, zfracn, zfracp, zfracfe, zratio, zratio2 77 REAL(wp) :: zepsherf, zepshert, zepsher v, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi91 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 78 92 REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 79 REAL(wp) :: zgradoc, zgradon, zgradop, zgratmp, zgradoct, zgradont, zgrareft, zgradopt 80 REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz 81 REAL(wp) :: zexcess, zgrarem, zgraren, zgrarep, zgraref 93 REAL(wp) :: zgradoct, zgradont, zgrareft, zgradopt 94 REAL(wp) :: zprcaca, zmortz, zexcess 82 95 REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf 83 96 REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot … … 87 100 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 88 101 REAL(wp) :: zgrazffnp, zgrazffng, zgrazffpp, zgrazffpg 102 REAL(wp) :: zmigreltime, zrum, zcodel, zargu, zval, zmigthick 89 103 CHARACTER (len=25) :: charout 90 REAL(wp) :: zrfact2, zmetexcess 91 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2, zz2ligprod 104 REAL(wp) :: zrfact2, zmetexcess, zsigma, zdiffdn 105 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 106 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarem, zgraref, zgrapoc, zgrapof 107 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarep, zgraren, zgrapon, zgrapop 108 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgradoc, zgradon, zgradop 109 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrem, zgramigref, zgramigpoc, zgramigpof 110 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrep, zgramigren, zgramigpop, zgramigpon 111 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigdoc, zgramigdop, zgramigdon 112 92 113 93 114 !!--------------------------------------------------------------------- … … 95 116 IF( ln_timing ) CALL timing_start('p5z_meso') 96 117 ! 118 ! Initialization of local arrays 119 zgrazing(:,:,:) = 0._wp ; zfezoo2(:,:,:) = 0._wp 120 zgrarem (:,:,:) = 0._wp ; zgraren(:,:,:) = 0._wp 121 zgrarep (:,:,:) = 0._wp ; zgraref(:,:,:) = 0._wp 122 zgrapoc (:,:,:) = 0._wp ; zgrapon(:,:,:) = 0._wp 123 zgrapop (:,:,:) = 0._wp ; zgrapof(:,:,:) = 0._wp 124 zgradoc (:,:,:) = 0._wp ; zgradon(:,:,:) = 0._wp 125 zgradop (:,:,:) = 0._wp 126 ! 127 128 ! 129 ! Diurnal vertical migration of mesozooplankton 130 ! Computation of the migration depth 131 ! --------------------------------------------- 132 IF( ln_dvm_meso ) CALL p5z_meso_depmig( Kbb, Kmm ) 133 134 ! Use of excess carbon for metabolism 97 135 zmetexcess = 0.0 98 136 IF ( bmetexc2 ) zmetexcess = 1.0 … … 102 140 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 103 141 104 ! Michaelis-Menten mortality rates of mesozooplankton 105 ! --------------------------------------------------- 142 ! linear mortality of mesozooplankton 143 ! A michaelis menten modulation term is used to avoid extinction of 144 ! mesozooplankton at very low food concentrations 145 ! ----------------------------------------------------------------- 106 146 zrespz = resrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) ) & 107 147 & + 3. * nitrfac(ji,jj,jk) ) 108 148 109 ! Zooplankton mortality. A square function has been selected with 110 ! no real reason except that it seems to be more stable and may mimic predation 111 ! --------------------------------------------------------------- 149 ! Zooplankton quadratic mortality. A square function has been selected with 150 ! to mimic predation and disease (density dependent mortality). It also tends 151 ! to stabilise the model 152 ! ------------------------------------------------------------------------- 112 153 ztortz = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 113 154 … … 121 162 zcompames = MAX( ( tr(ji,jj,jk,jpmes,Kbb) - xthresh2mes ), 0.e0 ) 122 163 123 ! Mesozooplankton grazing 124 ! ------------------------ 164 ! Mesozooplankton grazing 165 ! The total amount of food is the sum of all preys accessible to mesozooplankton 166 ! multiplied by their food preference 167 ! A threshold can be specified in the namelist (xthresh2). However, when food 168 ! concentration is close to this threshold, it is decreased to avoid the 169 ! accumulation of food in the mesozoopelagic domain 170 ! ------------------------------------------------------------------------------- 125 171 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc & 126 172 & + xpref2m * zcompames … … 129 175 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 130 176 131 ! An active switching parameterization is used here. 132 ! We don't use the KTW parameterization proposed by 133 ! Vallina et al. because it tends to produce to steady biomass 134 ! composition and the variance of Chl is too low as it grazes 135 ! too strongly on winning organisms. Thus, instead of a square 136 ! a 1.5 power value is used which decreases the pressure on the 137 ! most abundant species 138 ! ------------------------------------------------------------ 139 ztmp1 = xpref2n * zcompaph**1.5 140 ztmp2 = xpref2m * zcompames**1.5 141 ztmp3 = xpref2c * zcompapoc**1.5 142 ztmp4 = xpref2d * zcompadi**1.5 143 ztmp5 = xpref2z * zcompaz**1.5 177 ! An active switching parameterization is used here. 178 ! We don't use the KTW parameterization proposed by 179 ! Vallina et al. because it tends to produce too steady biomass 180 ! composition and the variance of Chl is too low as it grazes 181 ! too strongly on winning organisms. We use a generalized 182 ! switching parameterization proposed by Morozov and 183 ! Petrovskii (2013) 184 ! ------------------------------------------------------------ 185 ! The width of the selection window is increased when preys 186 ! have low abundance, .i.e. zooplankton become less specific 187 ! to avoid starvation. 188 ! ---------------------------------------------------------- 189 zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3) 190 zsigma = xsigma2 + xsigma2del * zsigma 191 ! Nanophytoplankton and diatoms are the only preys considered 192 ! to be close enough to have potential interference 193 ! ----------------------------------------------------------- 194 zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 195 ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / (1.0 + zdiffdn) 196 ztmp2 = xpref2m * zcompames**2 197 ztmp3 = xpref2c * zcompapoc**2 198 ztmp4 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / (1.0 + zdiffdn) 199 ztmp5 = xpref2z * zcompaz**2 144 200 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 145 201 ztmp1 = ztmp1 / ztmptot … … 166 222 zgrazpof = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 167 223 168 ! Mesozooplankton flux feeding on GOC 169 ! ---------------------------------- 224 ! Mesozooplankton flux feeding on GOC and POC. The feeding pressure 225 ! is proportional to the flux 226 ! ------------------------------------------------------------------ 170 227 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 171 228 & * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & … … 183 240 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 184 241 185 ! Compute the proportion of filter feeders186 ! 242 ! Compute the proportion of filter feeders. It is assumed steady state. 243 ! --------------------------------------------------------------------- 187 244 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 188 245 … … 200 257 zfracp = zfracc * tr(ji,jj,jk,jpgop,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 201 258 259 ! Flux feeding is multiplied by the fractional biomass of flux feeders 202 260 zgrazffep = zproport * zgrazffep ; zgrazffeg = zproport * zgrazffeg 203 261 zgrazfffp = zproport * zgrazfffp ; zgrazfffg = zproport * zgrazfffg … … 206 264 207 265 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 208 zgraztotf = zgrazdf + zgraznf + ( zgrazz + zgrazm ) * ferat3+ zgrazpof &266 zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazm * feratm + zgrazpof & 209 267 & + zgrazfffp + zgrazfffg 210 268 zgraztotn = zgrazdn + (zgrazm + zgrazz) * no3rat3 + zgraznn + zgrazpon & … … 213 271 & + zgrazffpp + zgrazffpg 214 272 215 216 273 ! Total grazing ( grazing by microzoo is already computed in p5zmicro ) 217 274 zgrazing(ji,jj,jk) = zgraztotc … … 223 280 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 224 281 225 ! Growth efficiency is made a function of the quality 226 ! and the quantity of the preys 227 ! --------------------------------------------------- 228 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 282 ! Mesozooplankton efficiency. 283 ! We adopt a formulation proposed by Mitra et al. (2007) 284 ! The gross growth efficiency is controled by the most limiting nutrient. 285 ! Growth is also further decreased when the food quality is poor. This is currently 286 ! hard coded : it can be decreased by up to 50% (zepsherq) 287 ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 288 ! Fulton, 2012) 289 ! ----------------------------------------------------------------------------------- 290 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / feratm) 229 291 zbeta = MAX(0., (epsher2 - epsher2min) ) 230 292 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 231 zepsherv = zepsherf * zepshert 293 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 294 zepsherv = zepsherf * zepshert * zepsherq 232 295 233 296 ! Respiration of mesozooplankton 234 297 ! Excess carbon in the food is used preferentially 235 ! ---------------- ------------------------------ 298 ! when bmetexc2 is set to .true. 299 ! ----------------------------------------------- 236 300 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 237 301 zbasresb = MAX(0., zrespz - zexcess) … … 246 310 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 247 311 zbasresp = zbasresi * zexcess * zgrasratp 248 zexcess = ( zgrasratf/ ferat 3- zepshert ) / ( 1.0 - zepshert + rtrn)312 zexcess = ( zgrasratf/ feratm - zepshert ) / ( 1.0 - zepshert + rtrn) 249 313 zbasresf = zbasresi * zexcess * zgrasratf 250 314 … … 254 318 zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 255 319 zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 256 zgrareft = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 257 ztmp1 = ( 1. - epsher2 - unass2c ) /( 1. - 0.8 * epsher2 ) * ztortz 258 zgradoc = (zgradoct + ztmp1) * ssigma2 259 zgradon = (zgradont + no3rat3 * ztmp1) * ssigma2 260 zgradop = (zgradopt + po4rat3 * ztmp1) * ssigma2 261 zgratmp = 0.2 * epsher2 /( 1. - 0.8 * epsher2 ) * ztortz 320 zgrareft = (1. - unass2c) * zgraztotf - zepsherv * feratm * zgraztotc - zbasresf 321 ztmp1 = (1. - epsher2 - unass2c) /( 1. - epsher2 ) * ztortz 322 323 zgradoc(ji,jj,jk) = (zgradoct + ztmp1) * ssigma2 324 zgradon(ji,jj,jk) = (zgradont + no3rat3 * ztmp1) * ssigma2 325 zgradop(ji,jj,jk) = (zgradopt + po4rat3 * ztmp1) * ssigma2 326 262 327 263 328 ! Since only semilabile DOM is represented in PISCES … … 265 330 ! as dissolved inorganic compounds (ssigma2) 266 331 ! -------------------------------------------------- 267 zgrarem = zgratmp +( zgradoct + ztmp1 ) * (1.0 - ssigma2)268 zgraren = no3rat3 * zgratmp +( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2)269 zgrarep = po4rat3 * zgratmp +( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2)270 zgraref = zgrareft + ferat3 * ( ztmp1 + zgratmp )332 zgrarem(ji,jj,jk) = ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 333 zgraren(ji,jj,jk) = ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 334 zgrarep(ji,jj,jk) = ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 335 zgraref(ji,jj,jk) = zgrareft + feratm * ztmp1 271 336 272 337 ! Defecation as a result of non assimilated products 273 338 ! -------------------------------------------------- 274 zgrapoc = zgraztotc * unass2c + unass2c / ( 1. - 0.8 *epsher2 ) * ztortz275 zgrapon = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 *epsher2 ) * ztortz276 zgrapop = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 *epsher2 ) * ztortz277 zgrapof = zgraztotf * unass2c + ferat3 * unass2c / ( 1. - 0.8 *epsher2 ) * ztortz339 zgrapoc(ji,jj,jk) = zgraztotc * unass2c + unass2c / ( 1. - epsher2 ) * ztortz 340 zgrapon(ji,jj,jk) = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - epsher2 ) * ztortz 341 zgrapop(ji,jj,jk) = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - epsher2 ) * ztortz 342 zgrapof(ji,jj,jk) = zgraztotf * unass2c + feratm * unass2c / ( 1. - epsher2 ) * ztortz 278 343 279 344 ! Addition of respiration to the release of inorganic nutrients 280 345 ! ------------------------------------------------------------- 281 zgrarem = zgrarem + zbasresi + zrespirc 282 zgraren = zgraren + zbasresn + zrespirc * no3rat3 283 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 284 zgraref = zgraref + zbasresf + zrespirc * ferat3 346 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) + zbasresi + zrespirc 347 zgraren(ji,jj,jk) = zgraren(ji,jj,jk) + zbasresn + zrespirc * no3rat3 348 zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) + zbasresp + zrespirc * po4rat3 349 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) + zbasresf + zrespirc * feratm 350 285 351 286 352 ! Update the arrays TRA which contain the biological sources and 287 353 ! sinks 288 354 ! -------------------------------------------------------------- 289 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarep290 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgraren291 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgradoc292 !293 IF( ln_ligand ) THEN294 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgradoc * ldocz295 zz2ligprod(ji,jj,jk) = zgradoc * ldocz296 ENDIF297 !298 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zgradon299 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop300 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem301 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref302 zfezoo2(ji,jj,jk) = zgraref303 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem304 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgraren305 355 tr(ji,jj,jk,jpmes,Krhs) = tr(ji,jj,jk,jpmes,Krhs) + zepsherv * zgraztotc - zrespirc & 306 356 & - ztortz - zgrazm … … 324 374 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zgrazpon - zgrazffnp + zfracn 325 375 tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) - zgrazpop - zgrazffpp + zfracp 326 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg + zgrapoc - zfracc 327 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc 376 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg - zfracc 328 377 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfracc 329 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) - zgrazffng + zgrapon- zfracn330 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) - zgrazffpg + zgrapop- zfracp378 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) - zgrazffng - zfracn 379 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) - zgrazffpg - zfracp 331 380 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zgrazpof - zgrazfffp + zfracfe 332 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg + zgrapof- zfracfe381 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg - zfracfe 333 382 zfracal = tr(ji,jj,jk,jpcal,Kbb) / ( tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 334 383 zgrazcal = zgrazffeg * (1. - part2) * zfracal 335 384 336 ! calcite production 337 ! ------------------ 385 ! Calcite production 386 ! Calcite remineralization due to zooplankton activity 387 ! part2 of the ingested calcite is dissolving in the acidic gut 388 ! ------------------------------------------------------------- 338 389 zprcaca = xfracal(ji,jj,jk) * zgraznc 339 390 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) … … 343 394 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) - zgrazcal + zprcaca 344 395 END_3D 396 397 398 ! Computation of the effect of DVM by mesozooplankton 399 ! This part is only activated if ln_dvm_meso is set to true 400 ! The parameterization has been published in Gorgues et al. (2019). 401 ! ----------------------------------------------------------------- 402 IF( ln_dvm_meso ) THEN 403 ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 404 ALLOCATE( zgramigrep(jpi,jpj), zgramigren(jpi,jpj), zgramigpop(jpi,jpj), zgramigpon(jpi,jpj) ) 405 ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj) ) 406 zgramigrem(:,:) = 0.0 ; zgramigref(:,:) = 0.0 407 zgramigrep(:,:) = 0.0 ; zgramigren(:,:) = 0.0 408 zgramigpoc(:,:) = 0.0 ; zgramigpof(:,:) = 0.0 409 zgramigpop(:,:) = 0.0 ; zgramigpon(:,:) = 0.0 410 zgramigdoc(:,:) = 0.0 ; zgramigdon(:,:) = 0.0 411 zgramigdop(:,:) = 0.0 412 413 ! Compute the amount of materials that will go into vertical migration 414 ! This fraction is sumed over the euphotic zone and is removed from 415 ! the fluxes driven by mesozooplankton in the euphotic zone. 416 ! -------------------------------------------------------------------- 417 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 418 zmigreltime = (1. - strn(ji,jj)) 419 IF( gdept(ji,jj,jk,Kmm) <= heup(ji,jj) ) THEN 420 zmigthick = e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) * ( 1. - zmigreltime ) 421 zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * zmigthick 422 zgramigrep(ji,jj) = zgramigrep(ji,jj) + xfracmig * zgrarep(ji,jj,jk) * zmigthick 423 zgramigren(ji,jj) = zgramigren(ji,jj) + xfracmig * zgraren(ji,jj,jk) * zmigthick 424 zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * zmigthick 425 zgramigpoc(ji,jj) = zgramigpoc(ji,jj) + xfracmig * zgrapoc(ji,jj,jk) * zmigthick 426 zgramigpop(ji,jj) = zgramigpop(ji,jj) + xfracmig * zgrapop(ji,jj,jk) * zmigthick 427 zgramigpon(ji,jj) = zgramigpon(ji,jj) + xfracmig * zgrapon(ji,jj,jk) * zmigthick 428 zgramigpof(ji,jj) = zgramigpof(ji,jj) + xfracmig * zgrapof(ji,jj,jk) * zmigthick 429 zgramigdoc(ji,jj) = zgramigdoc(ji,jj) + xfracmig * zgradoc(ji,jj,jk) * zmigthick 430 zgramigdop(ji,jj) = zgramigdop(ji,jj) + xfracmig * zgradop(ji,jj,jk) * zmigthick 431 zgramigdon(ji,jj) = zgramigdon(ji,jj) + xfracmig * zgradon(ji,jj,jk) * zmigthick 432 433 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 434 zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 435 zgraren(ji,jj,jk) = zgraren(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 436 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 437 zgrapoc(ji,jj,jk) = zgrapoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 438 zgrapop(ji,jj,jk) = zgrapop(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 439 zgrapon(ji,jj,jk) = zgrapon(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 440 zgrapof(ji,jj,jk) = zgrapof(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 441 zgradoc(ji,jj,jk) = zgradoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 442 zgradop(ji,jj,jk) = zgradop(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 443 zgradon(ji,jj,jk) = zgradon(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 444 ENDIF 445 END_3D 446 447 ! The inorganic and organic fluxes induced by migrating organisms are added at the 448 ! the migration depth (corresponding indice is set by kmig) 449 ! -------------------------------------------------------------------------------- 450 DO_2D( 1, 1, 1, 1 ) 451 IF( tmask(ji,jj,1) == 1. ) THEN 452 jkt = kmig(ji,jj) 453 zdep = 1. / e3t(ji,jj,jkt,Kmm) 454 zgrarem(ji,jj,jkt) = zgrarem(ji,jj,jkt) + zgramigrem(ji,jj) * zdep 455 zgrarep(ji,jj,jkt) = zgrarep(ji,jj,jkt) + zgramigrep(ji,jj) * zdep 456 zgraren(ji,jj,jkt) = zgraren(ji,jj,jkt) + zgramigren(ji,jj) * zdep 457 zgraref(ji,jj,jkt) = zgraref(ji,jj,jkt) + zgramigref(ji,jj) * zdep 458 zgrapoc(ji,jj,jkt) = zgrapoc(ji,jj,jkt) + zgramigpoc(ji,jj) * zdep 459 zgrapop(ji,jj,jkt) = zgrapop(ji,jj,jkt) + zgramigpop(ji,jj) * zdep 460 zgrapon(ji,jj,jkt) = zgrapon(ji,jj,jkt) + zgramigpon(ji,jj) * zdep 461 zgrapof(ji,jj,jkt) = zgrapof(ji,jj,jkt) + zgramigpof(ji,jj) * zdep 462 zgradoc(ji,jj,jkt) = zgradoc(ji,jj,jkt) + zgramigdoc(ji,jj) * zdep 463 zgradop(ji,jj,jkt) = zgradop(ji,jj,jkt) + zgramigdop(ji,jj) * zdep 464 zgradon(ji,jj,jkt) = zgradon(ji,jj,jkt) + zgramigdon(ji,jj) * zdep 465 ENDIF 466 END_2D 467 ! 468 ! Deallocate temporary variables 469 ! ------------------------------ 470 DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof ) 471 DEALLOCATE( zgramigrep, zgramigren, zgramigpop, zgramigpon ) 472 DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop ) 473 ! End of the ln_dvm_meso part 474 ENDIF 475 476 ! Update the arrays TRA which contain the biological sources and sinks 477 ! This only concerns the variables which are affected by DVM (inorganic 478 ! nutrients, DOC agands, and particulate organic carbon). 479 ! --------------------------------------------------------------------- 480 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 481 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarep(ji,jj,jk) 482 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgraren(ji,jj,jk) 483 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgradoc(ji,jj,jk) 484 ! 485 IF( ln_ligand ) & 486 & tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgradoc(ji,jj,jk) * ldocz 487 ! 488 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zgradon(ji,jj,jk) 489 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop(ji,jj,jk) 490 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem(ji,jj,jk) 491 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref(ji,jj,jk) 492 zfezoo2(ji,jj,jk) = zgraref(ji,jj,jk) 493 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem(ji,jj,jk) 494 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgraren(ji,jj,jk) 495 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zgrapoc(ji,jj,jk) 496 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc(ji,jj,jk) 497 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) + zgrapon(ji,jj,jk) 498 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + zgrapop(ji,jj,jk) 499 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zgrapof(ji,jj,jk) 500 END_3D 345 501 ! 346 502 IF( lk_iomput .AND. knt == nrdttrc ) THEN 347 CALL iom_put( "PCAL" , prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Calcite production 348 IF( iom_use("GRAZ2") ) THEN ! Total grazing of phyto by zooplankton 349 zgrazing(:,:,jpk) = 0._wp ; CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 350 ENDIF 351 IF( iom_use("FEZOO2") ) THEN 352 zfezoo2 (:,:,jpk) = 0._wp ; CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 353 ENDIF 354 IF( ln_ligand ) THEN 355 zz2ligprod(:,:,jpk) = 0._wp ; CALL iom_put( "LPRODZ2", zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 356 ENDIF 503 CALL iom_put( "PCAL" , prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Calcite production 504 CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Total grazing of phyto by zoo 505 CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 506 IF( ln_ligand ) & 507 & CALL iom_put( "LPRODZ2", zgradoc(:,:,:) * ldocz * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 357 508 ENDIF 358 509 ! … … 374 525 !! ** Purpose : Initialization of mesozooplankton parameters 375 526 !! 376 !! ** Method : Read the namp ismes namelist and check the parameters527 !! ** Method : Read the namp5zmes namelist and check the parameters 377 528 !! called at the first timestep (nittrc000) 378 529 !! 379 !! ** input : Namelist namp ismes530 !! ** input : Namelist namp5zmes 380 531 !! 381 532 !!---------------------------------------------------------------------- 382 INTEGER :: ios 533 INTEGER :: ios ! Local integer output status for namelist read 383 534 !! 384 535 NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2n, xpref2z, & 385 536 & xpref2m, xpref2d, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 386 537 & xthresh2mes, xthresh2, xkgraz2, epsher2, epsher2min, ssigma2, unass2c, & 387 & unass2n, unass2p, srespir2, grazflux538 & unass2n, unass2p, srespir2, xsigma2, xsigma2del, grazflux, ln_dvm_meso, xfracmig 388 539 !!---------------------------------------------------------------------- 389 540 ! 390 541 READ ( numnatp_ref, namp5zmes, IOSTAT = ios, ERR = 901) 391 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp ismes in reference namelist' )542 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zmes in reference namelist' ) 392 543 ! 393 544 READ ( numnatp_cfg, namp5zmes, IOSTAT = ios, ERR = 902 ) 394 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp ismes in configuration namelist' )545 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zmes in configuration namelist' ) 395 546 IF(lwm) WRITE ( numonp, namp5zmes ) 396 547 ! … … 424 575 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 = ', xkgraz2 425 576 WRITE(numout,*) ' Use excess carbon for respiration bmetexc2 = ', bmetexc2 577 WRITE(numout,*) ' Width of the grazing window xsigma2 =', xsigma2 578 WRITE(numout,*) ' Maximum additional width of the grazing window xsigma2del =', xsigma2del 579 WRITE(numout,*) ' Diurnal vertical migration of mesozoo. ln_dvm_meso =', ln_dvm_meso 580 WRITE(numout,*) ' Fractional biomass of meso that performs DVM xfracmig =', xfracmig 426 581 ENDIF 427 582 ! 428 583 END SUBROUTINE p5z_meso_init 584 585 SUBROUTINE p5z_meso_depmig( Kbb, Kmm ) 586 !!---------------------------------------------------------------------- 587 !! *** ROUTINE p4z_meso_depmig *** 588 !! 589 !! ** Purpose : Computation the migration depth of mesozooplankton 590 !! 591 !! ** Method : Computes the DVM depth of mesozooplankton from oxygen 592 !! temperature and chlorophylle following the parameterization 593 !! proposed by Bianchi et al. (2013) 594 !!---------------------------------------------------------------------- 595 INTEGER, INTENT(in) :: Kbb, kmm ! time level indices 596 ! 597 INTEGER :: ji, jj, jk 598 ! 599 REAL(wp) :: ztotchl, z1dep 600 REAL(wp), DIMENSION(jpi,jpj) :: oxymoy, tempmoy, zdepmoy 601 602 !!--------------------------------------------------------------------- 603 ! 604 IF( ln_timing == 1 ) CALL timing_start('p5z_meso_zdepmig') 605 ! 606 oxymoy(:,:) = 0. 607 tempmoy(:,:) = 0. 608 zdepmoy(:,:) = 0. 609 depmig (:,:) = 5. 610 kmig (:,:) = 1 611 ! 612 613 ! Compute the averaged values of oxygen, temperature over the domain 614 ! 150m to 500 m depth. 615 ! ------------------------------------------------------------------ 616 DO_3D( 1, 1, 1, 1, 1, jpk ) 617 IF( tmask(ji,jj,jk) == 1.) THEN 618 IF( gdept(ji,jj,jk,Kmm) >= 150. .AND. gdept(ji,jj,jk,kmm) <= 500.) THEN 619 oxymoy(ji,jj) = oxymoy(ji,jj) + tr(ji,jj,jk,jpoxy,Kbb) * 1E6 * e3t(ji,jj,jk,Kmm) 620 tempmoy(ji,jj) = tempmoy(ji,jj) + ts(ji,jj,jk,jp_tem,kmm) * e3t(ji,jj,jk,kmm) 621 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 622 ENDIF 623 ENDIF 624 END_3D 625 626 ! Compute the difference between surface values and the mean values in the mesopelagic 627 ! domain 628 ! ------------------------------------------------------------------------------------ 629 DO_2D( 1, 1, 1, 1 ) 630 z1dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 631 oxymoy(ji,jj) = tr(ji,jj,1,jpoxy,Kbb) * 1E6 - oxymoy(ji,jj) * z1dep 632 tempmoy(ji,jj) = ts(ji,jj,1,jp_tem,Kmm) - tempmoy(ji,jj) * z1dep 633 END_2D 634 ! 635 ! Computation of the migration depth based on the parameterization of 636 ! Bianchi et al. (2013) 637 ! ------------------------------------------------------------------- 638 DO_2D( 1, 1, 1, 1 ) 639 IF( tmask(ji,jj,1) == 1. ) THEN 640 ztotchl = ( tr(ji,jj,1,jppch,Kbb) + tr(ji,jj,1,jpnch,Kbb) + tr(ji,jj,1,jpdch,Kbb) ) * 1E6 641 depmig(ji,jj) = 398. - 0.56 * oxymoy(ji,jj) -115. * log10(ztotchl) + 0.36 * hmld(ji,jj) -2.4 * tempmoy(ji,jj) 642 ENDIF 643 END_2D 644 645 ! Computation of the corresponding jk indice 646 ! ------------------------------------------ 647 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 648 IF( depmig(ji,jj) >= gdepw(ji,jj,jk,Kmm) .AND. depmig(ji,jj) < gdepw(ji,jj,jk+1,Kmm) ) THEN 649 kmig(ji,jj) = jk 650 ENDIF 651 END_3D 652 ! 653 ! Correction of the migration depth and indice based on O2 levels 654 ! If O2 is too low, imposing a migration depth at this low O2 levels 655 ! would lead to negative O2 concentrations (respiration while O2 is close 656 ! to 0. Thus, to avoid that problem, the migration depth is adjusted so 657 ! that it falls above the OMZ 658 ! ----------------------------------------------------------------------- 659 DO_2D( 1, 1, 1, 1 ) 660 IF( tr(ji,jj,kmig(ji,jj),jpoxy,Kbb) < 5E-6 ) THEN 661 DO jk = kmig(ji,jj),1,-1 662 IF( tr(ji,jj,jk,jpoxy,Kbb) >= 5E-6 .AND. tr(ji,jj,jk+1,jpoxy,Kbb) < 5E-6) THEN 663 kmig(ji,jj) = jk 664 depmig(ji,jj) = gdept(ji,jj,jk,Kmm) 665 ENDIF 666 END DO 667 ENDIF 668 END_2D 669 ! 670 IF( ln_timing ) CALL timing_stop('p5z_meso_depmig') 671 ! 672 END SUBROUTINE p5z_meso_depmig 673 674 INTEGER FUNCTION p5z_meso_alloc() 675 !!---------------------------------------------------------------------- 676 !! *** ROUTINE p5z_meso_alloc *** 677 !!---------------------------------------------------------------------- 678 ! 679 ALLOCATE( depmig(jpi,jpj), kmig(jpi,jpj), STAT= p5z_meso_alloc ) 680 ! 681 IF( p5z_meso_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p5z_meso_alloc : failed to allocate arrays.' ) 682 ! 683 END FUNCTION p5z_meso_alloc 429 684 430 685 !!====================================================================== -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p5zmicro.F90
r13295 r14385 15 15 USE trc ! passive tracers common variables 16 16 USE sms_pisces ! PISCES Source Minus Sink variables 17 USE p4zlim 17 USE p4zlim ! PISCES nutrient limitation term of PISCES std 18 18 USE p5zlim ! Phytoplankton limitation terms 19 19 USE iom ! I/O manager … … 50 50 REAL(wp), PUBLIC :: srespir !: half sturation constant for grazing 1 51 51 REAL(wp), PUBLIC :: ssigma !: Fraction excreted as semi-labile DOM 52 REAL(wp), PUBLIC :: xsigma !: Width of the grazing window 53 REAL(wp), PUBLIC :: xsigmadel !: Maximum additional width of the grazing window at low food density 52 54 LOGICAL, PUBLIC :: bmetexc !: Use of excess carbon for respiration 53 55 … … 78 80 REAL(wp) :: zcompapi, zgraze , zdenom, zfact, zfood, zfoodlim 79 81 REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot 80 REAL(wp) :: zepsherf, zepshert, zepsher v, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi82 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 81 83 REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 82 84 REAL(wp) :: zgradoc, zgradon, zgradop, zgraref, zgradoct, zgradont, zgradopt, zgrareft … … 88 90 REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess 89 91 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo, zzligprod 92 REAL(wp) :: zsigma, zdiffdn, zdiffpn, zdiffdp, zproport, zproport2 90 93 CHARACTER (len=25) :: charout 91 94 !!--------------------------------------------------------------------- … … 93 96 IF( ln_timing ) CALL timing_start('p5z_micro') 94 97 ! 98 ! Use of excess carbon for metabolism 95 99 zmetexcess = 0.0 96 100 IF ( bmetexc ) zmetexcess = 1.0 … … 99 103 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - 1.e-9 ), 0.e0 ) 100 104 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 105 ! Proportion of nano and diatoms that are within the size range 106 ! accessible to microzooplankton. 107 zproport = min(sized(ji,jj,jk),1.8)**(-0.48)*min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 )) 108 zproport2 = sizen(ji,jj,jk)**(-0.48) 109 zproport2 = 1.0 110 ! linear mortality of mesozooplankton 111 ! A michaelis menten modulation term is used to avoid extinction of 112 ! microzooplankton at very low food concentrations. Mortality is 113 ! enhanced in low O2 waters 114 ! ----------------------------------------------------------------- 101 115 102 116 ! Michaelis-Menten mortality rates of microzooplankton … … 105 119 & + 3. * nitrfac(ji,jj,jk) ) 106 120 107 ! Zooplankton mortality. A square function has been selected with 108 ! no real reason except that it seems to be more stable and may mimic predation. 109 ! ------------------------------------------------------------------------------ 121 ! Zooplankton quadratic mortality. A square function has been selected with 122 ! to mimic predation and disease (density dependent mortality). It also tends 123 ! to stabilise the model 124 ! ------------------------------------------------------------------------- 110 125 ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 111 126 112 127 ! Computation of the abundance of the preys 113 128 ! A threshold can be specified in the namelist 114 ! -------------------------------------------- 115 zcompadi = MIN( MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ), xsizedia ) 116 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 ) 129 ! Nanophyto and diatoms have a specific treatment with 130 ! teir preference decreasing with size. 131 ! -------------------------------------------------------- 132 zcompadi = zproport * MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ) 133 zcompaph = zproport2 * MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 ) 117 134 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthreshzoo ), 0.e0 ) 118 135 zcompapi = MAX( ( tr(ji,jj,jk,jppic,Kbb) - xthreshpic ), 0.e0 ) 119 136 zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthreshpoc ), 0.e0 ) 120 121 ! Microzooplankton grazing 122 ! ------------------------ 137 138 ! Microzooplankton grazing 139 ! The total amount of food is the sum of all preys accessible to mesozooplankton 140 ! multiplied by their food preference 141 ! A threshold can be specified in the namelist (xthresh). However, when food 142 ! concentration is close to this threshold, it is decreased to avoid the 143 ! accumulation of food in the mesozoopelagic domain 144 ! ------------------------------------------------------------------------------- 123 145 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi & 124 146 & + xprefz * zcompaz + xprefp * zcompapi … … 127 149 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 128 150 129 ! An active switching parameterization is used here. 130 ! We don't use the KTW parameterization proposed by 131 ! Vallina et al. because it tends to produce to steady biomass 132 ! composition and the variance of Chl is too low as it grazes 133 ! too strongly on winning organisms. Thus, instead of a square 134 ! a 1.5 power value is used which decreases the pressure on the 135 ! most abundant species 136 ! ------------------------------------------------------------ 137 ztmp1 = xprefn * zcompaph**1.5 138 ztmp2 = xprefp * zcompapi**1.5 139 ztmp3 = xprefc * zcompapoc**1.5 140 ztmp4 = xprefd * zcompadi**1.5 141 ztmp5 = xprefz * zcompaz**1.5 151 ! An active switching parameterization is used here. 152 ! We don't use the KTW parameterization proposed by 153 ! Vallina et al. because it tends to produce too steady biomass 154 ! composition and the variance of Chl is too low as it grazes 155 ! too strongly on winning organisms. We use a generalized 156 ! switching parameterization proposed by Morozov and 157 ! Petrovskii (2013) 158 ! ------------------------------------------------------------ 159 ! The width of the selection window is increased when preys 160 ! have low abundance, .i.e. zooplankton become less specific 161 ! to avoid starvation. 162 ! ---------------------------------------------------------- 163 zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3) 164 zsigma = xsigma + xsigmadel * zsigma 165 zdiffpn = exp( -ABS(log(0.7 * sizep(ji,jj,jk) / (3.0 * sizen(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 166 zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 167 zdiffdp = exp( -ABS(log(0.7 * sizep(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 168 ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi + zdiffpn * zcompapi ) / ( 1.0 + zdiffdn + zdiffpn ) 169 ztmp2 = xprefp * zcompapi * ( zcompapi + zdiffpn * zcompaph + zdiffdp * zcompadi ) / ( 1.0 + zdiffpn + zdiffdp ) 170 ztmp3 = xprefc * zcompapoc**2 171 ztmp4 = xprefd * zcompadi * ( zdiffdp * zcompapi + zdiffdn * zcompaph + zcompadi ) / ( 1.0 + zdiffdn + zdiffdp ) 172 ztmp5 = xprefz * zcompaz**2 142 173 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 143 174 ztmp1 = ztmp1 / ztmptot … … 149 180 ! Microzooplankton regular grazing on the different preys 150 181 ! ------------------------------------------------------- 182 ! Nanophytoplankton 151 183 zgraznc = zgraze * ztmp1 * zdenom 152 184 zgraznn = zgraznc * tr(ji,jj,jk,jpnph,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 153 185 zgraznp = zgraznc * tr(ji,jj,jk,jppph,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 154 186 zgraznf = zgraznc * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 187 188 ! Picophytoplankton 155 189 zgrazpc = zgraze * ztmp2 * zdenom 156 190 zgrazpn = zgrazpc * tr(ji,jj,jk,jpnpi,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn) 157 191 zgrazpp = zgrazpc * tr(ji,jj,jk,jpppi,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn) 158 192 zgrazpf = zgrazpc * tr(ji,jj,jk,jppfe,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn) 193 194 ! Microzooplankton 159 195 zgrazz = zgraze * ztmp5 * zdenom 196 197 ! small POC 160 198 zgrazpoc = zgraze * ztmp3 * zdenom 161 199 zgrazpon = zgrazpoc * tr(ji,jj,jk,jppon,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn ) 162 200 zgrazpop = zgrazpoc * tr(ji,jj,jk,jppop,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn ) 163 201 zgrazpof = zgrazpoc* tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 202 203 ! Diatoms 164 204 zgrazdc = zgraze * ztmp4 * zdenom 165 205 zgrazdn = zgrazdc * tr(ji,jj,jk,jpndi,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) … … 167 207 zgrazdf = zgrazdc * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 168 208 ! 209 ! Total ingestion rates in C, P, Fe, N 169 210 zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc 170 211 zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3 171 212 zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3 172 zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * ferat 3213 zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * feratz 173 214 ! 174 215 ! Grazing by microzooplankton … … 181 222 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 182 223 183 ! Growth efficiency is made a function of the quality 184 ! and the quantity of the preys 185 ! --------------------------------------------------- 186 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 224 ! Mesozooplankton efficiency. 225 ! We adopt a formulation proposed by Mitra et al. (2007) 226 ! The gross growth efficiency is controled by the most limiting nutrient. 227 ! Growth is also further decreased when the food quality is poor. This is currently 228 ! hard coded : it can be decreased by up to 50% (zepsherq) 229 ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 230 ! Fulton, 2012) 231 ! ----------------------------------------------------------------------------------- 232 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / feratz) 187 233 zbeta = MAX( 0., (epsher - epshermin) ) 234 ! Food density deprivation of GGE 188 235 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 189 zepsherv = zepsherf * zepshert 190 191 ! Respiration of microzooplankton 192 ! Excess carbon in the food is used preferentially 193 ! ------------------------------------------------ 236 ! Food quality deprivation of GGE 237 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 238 ! Actual GGE 239 zepsherv = zepsherf * zepshert * zepsherq 240 241 ! Respiration of microzooplankton 242 ! Excess carbon in the food is used preferentially 243 ! when activated by zmetexcess 244 ! ------------------------------------------------ 194 245 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 195 246 zbasresb = MAX(0., zrespz - zexcess) … … 197 248 zrespirc = srespir * zepsherv * zgraztotc + zbasresb 198 249 199 ! 200 ! 201 ! 250 ! When excess carbon is used, the other elements in excess 251 ! are also used proportionally to their abundance 252 ! -------------------------------------------------------- 202 253 zexcess = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 203 254 zbasresn = zbasresi * zexcess * zgrasratn 204 255 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 205 256 zbasresp = zbasresi * zexcess * zgrasratp 206 zexcess = ( zgrasratf/ ferat 3- zepshert ) / ( 1.0 - zepshert + rtrn)257 zexcess = ( zgrasratf/ feratz - zepshert ) / ( 1.0 - zepshert + rtrn) 207 258 zbasresf = zbasresi * zexcess * zgrasratf 208 259 209 ! 210 ! 260 ! Voiding of the excessive elements as DOM 261 ! ---------------------------------------- 211 262 zgradoct = (1. - unassc - zepsherv) * zgraztotc - zbasresi 212 263 zgradont = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 213 264 zgradopt = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 214 zgrareft = (1. - unassc) * zgraztotf - zepsherv * ferat 3* zgraztotc - zbasresf215 216 ! 217 ! 218 ! 219 ! 265 zgrareft = (1. - unassc) * zgraztotf - zepsherv * feratz * zgraztotc - zbasresf 266 267 ! Since only semilabile DOM is represented in PISCES 268 ! part of DOM is in fact labile and is then released 269 ! as dissolved inorganic compounds (ssigma) 270 ! -------------------------------------------------- 220 271 zgradoc = zgradoct * ssigma 221 272 zgradon = zgradont * ssigma … … 226 277 zgraref = zgrareft 227 278 228 ! 229 ! 279 ! Defecation as a result of non assimilated products 280 ! -------------------------------------------------- 230 281 zgrapoc = zgraztotc * unassc 231 282 zgrapon = zgraztotn * unassn … … 233 284 zgrapof = zgraztotf * unassc 234 285 235 ! 236 ! 286 ! Addition of respiration to the release of inorganic nutrients 287 ! ------------------------------------------------------------- 237 288 zgrarem = zgrarem + zbasresi + zrespirc 238 289 zgraren = zgraren + zbasresn + zrespirc * no3rat3 239 290 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 240 zgraref = zgraref + zbasresf + zrespirc * ferat 3291 zgraref = zgraref + zbasresf + zrespirc * feratz 241 292 242 293 ! Update of the TRA arrays … … 279 330 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + no3rat3 * ztortz + zgrapon - zgrazpon 280 331 tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + po4rat3 * ztortz + zgrapop - zgrazpop 281 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ferat 3* ztortz + zgrapof - zgrazpof332 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + feratz * ztortz + zgrapof - zgrazpof 282 333 ! 283 334 ! calcite production … … 287 338 zprcaca = part * zprcaca 288 339 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem - zprcaca 289 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca & 290 & + rno3 * zgraren 340 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca + rno3 * zgraren 291 341 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) + zprcaca 292 342 END_3D … … 321 371 !! ** Purpose : Initialization of microzooplankton parameters 322 372 !! 323 !! ** Method : Read the namp iszoo namelist and check the parameters373 !! ** Method : Read the namp5zzoo namelist and check the parameters 324 374 !! called at the first timestep (nittrc000) 325 375 !! 326 !! ** input : Namelist namp iszoo376 !! ** input : Namelist namp5zzoo 327 377 !! 328 378 !!---------------------------------------------------------------------- … … 332 382 & xprefp, xprefd, xprefz, xthreshdia, xthreshphy, & 333 383 & xthreshpic, xthreshpoc, xthreshzoo, xthresh, xkgraz, & 334 & epsher, epshermin, ssigma, srespir, unassc, unassn, unassp 384 & epsher, epshermin, ssigma, srespir, unassc, unassn, unassp, & 385 & xsigma, xsigmadel 335 386 !!---------------------------------------------------------------------- 336 387 ! … … 370 421 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 371 422 WRITE(numout,*) ' Use of excess carbon for respiration bmetexc =', bmetexc 423 WRITE(numout,*) ' Width of the grazing window xsigma =', xsigma 424 WRITE(numout,*) ' Maximum additional width of the grazing window xsigmadel =', xsigmadel 372 425 ENDIF 373 426 ! -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p5zmort.F90
r13295 r14385 2 2 !!====================================================================== 3 3 !! *** MODULE p5zmort *** 4 !! TOP : PISCES Compute the mortality terms for phytoplankton4 !! TOP : PISCES-QUOTA Compute the mortality terms for phytoplankton 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2002 (O. Aumont) Original code … … 14 14 USE trc ! passive tracers common variables 15 15 USE sms_pisces ! PISCES Source Minus Sink variables 16 USE p4zlim 17 USE p5zlim ! Phytoplankton limitation terms 16 USE p4zlim ! Phytoplankton limitation terms (p4z) 17 USE p5zlim ! Phytoplankton limitation terms (p5z) 18 18 USE prtctl ! print control for debugging 19 19 … … 21 21 PRIVATE 22 22 23 PUBLIC p5z_mort 24 PUBLIC p5z_mort_init 23 PUBLIC p5z_mort ! Called from p4zbio.F90 24 PUBLIC p5z_mort_init ! Called from trcini_pisces.F90 25 25 26 26 !! * Shared module variables 27 REAL(wp), PUBLIC :: wchln !: 28 REAL(wp), PUBLIC :: wchlp !: 29 REAL(wp), PUBLIC :: wchld !: 30 REAL(wp), PUBLIC :: wchldm !: 31 REAL(wp), PUBLIC :: mpratn !: 32 REAL(wp), PUBLIC :: mpratp !: 33 REAL(wp), PUBLIC :: mpratd !: 27 REAL(wp), PUBLIC :: wchln !! Quadratic mortality rate of nanophytoplankton 28 REAL(wp), PUBLIC :: wchlp !: Quadratic mortality rate of picophytoplankton 29 REAL(wp), PUBLIC :: wchld !: Quadratic mortality rate of diatoms 30 REAL(wp), PUBLIC :: mpratn !: Linear mortality rate of nanophytoplankton 31 REAL(wp), PUBLIC :: mpratp !: Linear mortality rate of picophytoplankton 32 REAL(wp), PUBLIC :: mpratd !: Linear mortality rate of diatoms 34 33 35 34 !! * Substitutions … … 47 46 !! *** ROUTINE p5z_mort *** 48 47 !! 49 !! ** Purpose : Calls the different subroutine to initialize andcompute48 !! ** Purpose : Calls the different subroutine to compute 50 49 !! the different phytoplankton mortality terms 51 50 !! … … 56 55 !!--------------------------------------------------------------------- 57 56 58 CALL p5z_ nano( Kbb, Krhs ) ! nanophytoplankton59 CALL p5z_ pico( Kbb, Krhs ) ! picophytoplankton60 CALL p5z_ diat( Kbb, Krhs ) ! diatoms57 CALL p5z_mort_nano( Kbb, Krhs ) ! nanophytoplankton 58 CALL p5z_mort_pico( Kbb, Krhs ) ! picophytoplankton 59 CALL p5z_mort_diat( Kbb, Krhs ) ! diatoms 61 60 62 61 END SUBROUTINE p5z_mort 63 62 64 63 65 SUBROUTINE p5z_ nano( Kbb, Krhs )66 !!--------------------------------------------------------------------- 67 !! *** ROUTINE p5z_ nano ***64 SUBROUTINE p5z_mort_nano( Kbb, Krhs ) 65 !!--------------------------------------------------------------------- 66 !! *** ROUTINE p5z_mort_nano *** 68 67 !! 69 68 !! ** Purpose : Compute the mortality terms for nanophytoplankton 70 69 !! 71 !! ** Method : - ???70 !! ** Method : - Both quadratic and simili linear mortality terms 72 71 !!--------------------------------------------------------------------- 73 72 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 74 73 INTEGER :: ji, jj, jk 75 REAL(wp) :: zcompaph 74 REAL(wp) :: zcompaph, zlim1, zlim2 76 75 REAL(wp) :: zfactfe, zfactch, zfactn, zfactp, zprcaca 77 76 REAL(wp) :: ztortp , zrespp , zmortp … … 79 78 !!--------------------------------------------------------------------- 80 79 ! 81 IF( ln_timing ) CALL timing_start('p5z_ nano')80 IF( ln_timing ) CALL timing_start('p5z_mort_nano') 82 81 ! 83 82 prodcal(:,:,:) = 0. !: calcite production variable set to zero 84 83 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 85 84 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - 1e-9 ), 0.e0 ) 86 ! Squared mortality of Phyto similar to a sedimentation term during 87 ! blooms (Doney et al. 1996) 88 ! ----------------------------------------------------------------- 89 zrespp = wchln * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * tr(ji,jj,jk,jpphy,Kbb) 90 91 ! Phytoplankton linear mortality 92 ! ------------------------------ 93 ztortp = mpratn * xstep * zcompaph 85 86 ! Quadratic mortality of nano due to aggregation during 87 ! blooms (Doney et al. 1996) 88 ! ----------------------------------------------------- 89 zlim2 = xlimphy(ji,jj,jk) * xlimphy(ji,jj,jk) 90 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) * tr(ji,jj,jk,jpphy,Kbb) 91 zrespp = wchln * 1.e6 * xstep * zlim1 * xdiss(ji,jj,jk) * zcompaph 92 93 ! Phytoplankton linear mortality 94 ! A michaelis-menten like term is introduced to avoid 95 ! extinction of nanophyto in highly limited areas 96 ! ---------------------------------------------------- 97 ztortp = mpratn * xstep * zcompaph * tr(ji,jj,jk,jpphy,Kbb) / ( xkmort + tr(ji,jj,jk,jpphy,Kbb) ) 94 98 zmortp = zrespp + ztortp 95 99 96 100 ! Update the arrays TRA which contains the biological sources and sinks 97 98 101 zfactn = tr(ji,jj,jk,jpnph,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) 99 102 zfactp = tr(ji,jj,jk,jppph,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) … … 105 108 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zmortp * zfactch 106 109 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zmortp * zfactfe 110 111 ! Production PIC particles due to mortality 107 112 zprcaca = xfracal(ji,jj,jk) * zmortp 108 !109 113 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 110 114 ! … … 125 129 ENDIF 126 130 ! 127 IF( ln_timing ) CALL timing_stop('p5z_ nano')128 ! 129 END SUBROUTINE p5z_ nano130 131 132 SUBROUTINE p5z_ pico( Kbb, Krhs )133 !!--------------------------------------------------------------------- 134 !! *** ROUTINE p5z_ pico ***131 IF( ln_timing ) CALL timing_stop('p5z_mort_nano') 132 ! 133 END SUBROUTINE p5z_mort_nano 134 135 136 SUBROUTINE p5z_mort_pico( Kbb, Krhs ) 137 !!--------------------------------------------------------------------- 138 !! *** ROUTINE p5z_mort_pico *** 135 139 !! 136 140 !! ** Purpose : Compute the mortality terms for picophytoplankton 137 141 !! 138 !! ** Method : - ???142 !! ** Method : - Both quadratic and semilininear terms are used 139 143 !!--------------------------------------------------------------------- 140 144 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 141 145 INTEGER :: ji, jj, jk 142 REAL(wp) :: zcompaph 146 REAL(wp) :: zcompaph, zlim1, zlim2 143 147 REAL(wp) :: zfactfe, zfactch, zfactn, zfactp 144 148 REAL(wp) :: ztortp , zrespp , zmortp … … 146 150 !!--------------------------------------------------------------------- 147 151 ! 148 IF( ln_timing ) CALL timing_start('p5z_ pico')152 IF( ln_timing ) CALL timing_start('p5z_mort_pico') 149 153 ! 150 154 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 151 155 zcompaph = MAX( ( tr(ji,jj,jk,jppic,Kbb) - 1e-9 ), 0.e0 ) 152 ! Squared mortality of Phyto similar to a sedimentation term during 153 ! blooms (Doney et al. 1996) 154 ! ----------------------------------------------------------------- 155 zrespp = wchlp * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * tr(ji,jj,jk,jppic,Kbb) 156 157 ! Phytoplankton mortality 158 ztortp = mpratp * xstep * zcompaph 156 157 ! Quadratic mortality of pico due to aggregation during 158 ! blooms (Doney et al. 1996) 159 ! ----------------------------------------------------- 160 zlim2 = xlimpic(ji,jj,jk) * xlimpic(ji,jj,jk) 161 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) * tr(ji,jj,jk,jppic,Kbb) 162 zrespp = wchlp * 1.e6 * xstep * zlim1 * xdiss(ji,jj,jk) * zcompaph 163 164 ! Phytoplankton linear mortality 165 ! A michaelis-menten like term is introduced to avoid 166 ! extinction of picophyto in highly limited areas 167 ! ---------------------------------------------------- 168 ztortp = mpratp * xstep * zcompaph * tr(ji,jj,jk,jppic,Kbb) / ( xkmort + tr(ji,jj,jk,jppic,Kbb) ) 159 169 zmortp = zrespp + ztortp 160 170 161 171 ! Update the arrays TRA which contains the biological sources and sinks 162 163 172 zfactn = tr(ji,jj,jk,jpnpi,Kbb)/(tr(ji,jj,jk,jppic,Kbb)+rtrn) 164 173 zfactp = tr(ji,jj,jk,jpppi,Kbb)/(tr(ji,jj,jk,jppic,Kbb)+rtrn) … … 183 192 ENDIF 184 193 ! 185 IF( ln_timing ) CALL timing_stop('p5z_ pico')186 ! 187 END SUBROUTINE p5z_ pico188 189 190 SUBROUTINE p5z_ diat( Kbb, Krhs )191 !!--------------------------------------------------------------------- 192 !! *** ROUTINE p5z_ diat ***194 IF( ln_timing ) CALL timing_stop('p5z_mort_pico') 195 ! 196 END SUBROUTINE p5z_mort_pico 197 198 199 SUBROUTINE p5z_mort_diat( Kbb, Krhs ) 200 !!--------------------------------------------------------------------- 201 !! *** ROUTINE p5z_mort_diat *** 193 202 !! 194 203 !! ** Purpose : Compute the mortality terms for diatoms … … 204 213 !!--------------------------------------------------------------------- 205 214 ! 206 IF( ln_timing ) CALL timing_start('p5z_ diat')215 IF( ln_timing ) CALL timing_start('p5z_mort_diat') 207 216 ! 208 217 … … 219 228 zlim2 = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 220 229 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) 221 zrespp2 = 1.e6 * xstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb) 222 223 ! Phytoplankton linear mortality 224 ! ------------------------------ 225 ztortp2 = mpratd * xstep * zcompadi 230 zrespp2 = 1.e6 * xstep * wchld * zlim1 * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb) 231 232 ! Phytoplankton linear mortality 233 ! A michaelis-menten like term is introduced to avoid 234 ! extinction of diatoms in highly limited areas 235 ! --------------------------------------------------- 236 ztortp2 = mpratd * xstep * zcompadi * tr(ji,jj,jk,jpdia,Kbb) / ( xkmort + tr(ji,jj,jk,jpdia,Kbb) ) 226 237 zmortp2 = zrespp2 + ztortp2 227 238 … … 250 261 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortp2 251 262 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zrespp2 263 252 264 END_3D 253 265 ! … … 258 270 ENDIF 259 271 ! 260 IF( ln_timing ) CALL timing_stop('p5z_ diat')261 ! 262 END SUBROUTINE p5z_ diat272 IF( ln_timing ) CALL timing_stop('p5z_mort_diat') 273 ! 274 END SUBROUTINE p5z_mort_diat 263 275 264 276 … … 267 279 !! *** ROUTINE p5z_mort_init *** 268 280 !! 269 !! ** Purpose : Initialization of phytoplankton parameters270 !! 271 !! ** Method : Read the namp ismort namelist and check the parameters281 !! ** Purpose : Initialization of phytoplankton mortality parameters 282 !! 283 !! ** Method : Read the namp5zmort namelist and check the parameters 272 284 !! called at the first timestep 273 285 !! 274 !! ** input : Namelist namp ismort286 !! ** input : Namelist namp5zmort 275 287 !! 276 288 !!---------------------------------------------------------------------- 277 INTEGER :: ios 278 !! 279 NAMELIST/namp5zmort/ wchln, wchlp, wchld, wchldm,mpratn, mpratp, mpratd289 INTEGER :: ios ! Local integer output status for namelist read 290 !! 291 NAMELIST/namp5zmort/ wchln, wchlp, wchld, mpratn, mpratp, mpratd 280 292 !!---------------------------------------------------------------------- 281 293 … … 294 306 WRITE(numout,*) ' quadratic mortality of picophyto. wchlp =', wchlp 295 307 WRITE(numout,*) ' quadratic mortality of diatoms wchld =', wchld 296 WRITE(numout,*) ' Additional quadratic mortality of diatoms wchldm =', wchldm297 308 WRITE(numout,*) ' nanophyto. mortality rate mpratn =', mpratn 298 309 WRITE(numout,*) ' picophyto. mortality rate mpratp =', mpratp -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p5zprod.F90
r13295 r14385 2 2 !!====================================================================== 3 3 !! *** MODULE p5zprod *** 4 !! TOP : Growth Rate of the two phytoplanktons groups 4 !! TOP : Growth Rate of the three phytoplanktons groups 5 !! PISCES-QUOTA version of the module 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 29 30 30 31 !! * Shared module variables 31 REAL(wp), PUBLIC :: pislopen !: 32 REAL(wp), PUBLIC :: pislopep !: 33 REAL(wp), PUBLIC :: pisloped !: 34 REAL(wp), PUBLIC :: xadap !: 35 REAL(wp), PUBLIC :: excretn !: 36 REAL(wp), PUBLIC :: excretp !: 37 REAL(wp), PUBLIC :: excretd !: 38 REAL(wp), PUBLIC :: bresp !: 39 REAL(wp), PUBLIC :: thetanpm !: 40 REAL(wp), PUBLIC :: thetannm !: 41 REAL(wp), PUBLIC :: thetandm !: 42 REAL(wp), PUBLIC :: chlcmin !: 43 REAL(wp), PUBLIC :: grosip !: 44 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: zdaylen 32 REAL(wp), PUBLIC :: pislopen !: P-I slope of nanophytoplankton 33 REAL(wp), PUBLIC :: pislopep !: P-I slope of picophytoplankton 34 REAL(wp), PUBLIC :: pisloped !: P-I slope of diatoms 35 REAL(wp), PUBLIC :: xadap !: Adaptation factor to low light 36 REAL(wp), PUBLIC :: excretn !: Excretion ratio of nanophyto 37 REAL(wp), PUBLIC :: excretp !: Excretion ratio of picophyto 38 REAL(wp), PUBLIC :: excretd !: Excretion ratio of diatoms 39 REAL(wp), PUBLIC :: bresp !: Basal respiration rate 40 REAL(wp), PUBLIC :: thetanpm !: Maximum Chl/N ratio of picophyto 41 REAL(wp), PUBLIC :: thetannm !: Maximum Chl/N ratio of nanophyto 42 REAL(wp), PUBLIC :: thetandm !: Maximum Chl/N ratio of diatoms 43 REAL(wp), PUBLIC :: chlcmin !: Minimum Chl/C ratio of phytoplankton 44 REAL(wp), PUBLIC :: grosip !: Mean Si/C ratio of diatoms 45 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: zdaylen ! day length 46 47 47 48 REAL(wp) :: r1_rday !: 1 / rday 48 REAL(wp) :: texcretn !: 1 - excret 49 REAL(wp) :: texcretn !: 1 - excretn 49 50 REAL(wp) :: texcretp !: 1 - excretp 50 REAL(wp) :: texcretd !: 1 - excret 251 REAL(wp) :: texcretd !: 1 - excretd 51 52 52 53 !! * Substitutions … … 66 67 !! ** Purpose : Compute the phytoplankton production depending on 67 68 !! light, temperature and nutrient availability 68 !! 69 !! ** Method : - ???69 !! Computes also the uptake of nutrients. PISCES-quota 70 !! relies on a full quota formalism 70 71 !!--------------------------------------------------------------------- 71 72 ! … … 75 76 INTEGER :: ji, jj, jk 76 77 REAL(wp) :: zsilfac, znanotot, zpicotot, zdiattot, zconctemp, zconctemp2 77 REAL(wp) :: zration, zratiop, zratiof, zmax, z max2, zsilim, ztn, zadap78 REAL(wp) :: zpronmax, zpropmax, zprofmax, zrat 78 REAL(wp) :: zration, zratiop, zratiof, zmax, ztn, zadap 79 REAL(wp) :: zpronmax, zpropmax, zprofmax, zratio 79 80 REAL(wp) :: zlim, zsilfac2, zsiborn, zprod, zprontot, zproptot, zprodtot 80 REAL(wp) :: zprnutmax, zdocprod, zprochln, zprochld, zprochlp 81 REAL(wp) :: zpislopen, zpislopep, zpisloped, thetannm_n, thetandm_n, thetanpm_n 82 REAL(wp) :: zrum, zcodel, zargu, zval, zfeup 83 REAL(wp) :: zfact, zrfact2 81 REAL(wp) :: zproddoc, zproddon, zproddop, zprodsil, zprodfer, zprodlig, zresptot 82 REAL(wp) :: zprnutmax, zprochln, zprochld, zprochlp 83 REAL(wp) :: zpislopen, zpislopep, zpisloped 84 REAL(wp) :: zval, zpptot, zpnewtot, zpregtot 85 REAL(wp) :: zqfpmax, zqfnmax, zqfdmax 86 REAL(wp) :: zfact, zrfact2, zmaxsi, zratiosi, zsizetmp, zlimfac, zsilim 84 87 CHARACTER (len=25) :: charout 85 REAL(wp), DIMENSION(jpi,jpj ) :: zmixnano, zmixpico, zmixdiat , zstrn88 REAL(wp), DIMENSION(jpi,jpj ) :: zmixnano, zmixpico, zmixdiat 86 89 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadp, zpislopeadd 87 90 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprnut, zprmaxp, zprmaxn, zprmaxd … … 95 98 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprodopn, zprodopp, zprodopd 96 99 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zrespn, zrespp, zrespd 97 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcroissn, zcroissp, zcroissd98 100 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmxl_fac, zmxl_chl 99 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpligprod1, zpligprod2101 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zpligprod 100 102 !!--------------------------------------------------------------------- 101 103 ! 102 104 IF( ln_timing ) CALL timing_start('p5z_prod') 103 ! 105 106 ! Initialize the local arrays 104 107 zprorcan(:,:,:) = 0._wp ; zprorcap(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp 105 zcroissn(:,:,:) = 0._wp ; zcroissp(:,:,:) = 0._wp ; zcroissd(:,:,:) = 0._wp106 108 zprofed (:,:,:) = 0._wp ; zprofep (:,:,:) = 0._wp ; zprofen (:,:,:) = 0._wp 107 109 zpronewn(:,:,:) = 0._wp ; zpronewp(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp … … 112 114 zysopt (:,:,:) = 0._wp 113 115 zrespn (:,:,:) = 0._wp ; zrespp (:,:,:) = 0._wp ; zrespd (:,:,:) = 0._wp 114 115 ! Computation of the optimal production 116 zprnut (:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:) 117 zprmaxn(:,:,:) = ( 0.65_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:) 118 zprmaxp(:,:,:) = 0.5 / 0.65 * zprmaxn(:,:,:) 119 zprmaxd(:,:,:) = zprmaxn(:,:,:) 120 121 ! compute the day length depending on latitude and the day 122 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 123 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) 124 125 ! day length in hours 126 zstrn(:,:) = 0. 127 DO_2D( 1, 1, 1, 1 ) 128 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 129 zargu = MAX( -1., MIN( 1., zargu ) ) 130 zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 131 END_2D 132 133 ! Impact of the day duration on phytoplankton growth 116 zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp 117 consfe3 (:,:,:) = 0._wp 118 119 ! Computation of the optimal production rates and nutrient uptake 120 ! rates. Based on a Q10 description of the thermal dependency. 121 zprnut (:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 122 zprmaxn(:,:,:) = 0.8_wp * (1. + zpsino3 * qnnmax ) * r1_rday * tgfunc(:,:,:) 123 zprmaxd(:,:,:) = 0.8_wp * (1. + zpsino3 * qndmax ) * r1_rday * tgfunc(:,:,:) 124 zprmaxp(:,:,:) = 0.6_wp * (1. + zpsino3 * qnpmax ) * r1_rday * tgfunc(:,:,:) 125 126 ! Impact of the day duration and light intermittency on phytoplankton growth 127 ! Intermittency is supposed to have a similar effect on production as 128 ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac. 129 ! zmxl_chl is the fractional day length and is used to compute the mean 130 ! PAR during daytime. The effect of mixing is computed using the 131 ! absolute light level definition of the euphotic zone 132 ! ------------------------------------------------------------------------- 134 133 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 135 134 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 136 zval = MAX( 1., zstrn(ji,jj) )135 zval = MAX( 1., strn(ji,jj) ) 137 136 IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 138 137 zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 139 138 ENDIF 140 139 zmxl_chl(ji,jj,jk) = zval / 24. 141 zmxl_fac(ji,jj,jk) = 1. 5 * zval / ( 12. +zval )140 zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 142 141 ENDIF 143 142 END_3D … … 147 146 zprpic(:,:,:) = zprmaxp(:,:,:) * zmxl_fac(:,:,:) 148 147 149 150 148 ! Maximum light intensity 151 zdaylen(:,:) = MAX(1., zstrn(:,:)) / 24. 152 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 153 149 zdaylen(:,:) = MAX(1., strn(:,:)) / 24. 150 151 ! Computation of the P-I slope for nanos, picos and diatoms 152 ! The formulation proposed by Geider et al. (1997) has been used. 154 153 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 155 154 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN … … 158 157 zadap = xadap * ztn / ( 2.+ ztn ) 159 158 ! 159 ! Nanophytoplankton 160 160 zpislopeadn(ji,jj,jk) = pislopen * tr(ji,jj,jk,jpnch,Kbb) & 161 161 & /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn) 162 163 ! Picophytoplankton 162 164 zpislopeadp(ji,jj,jk) = pislopep * ( 1. + zadap * EXP( -0.25 * epico(ji,jj,jk) ) ) & 163 165 & * tr(ji,jj,jk,jppch,Kbb) /( tr(ji,jj,jk,jppic,Kbb) * 12. + rtrn) 166 167 ! Diatoms 164 168 zpislopeadd(ji,jj,jk) = pisloped * tr(ji,jj,jk,jpdch,Kbb) & 165 169 & /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn) … … 170 174 171 175 ! Computation of production function for Carbon 176 ! Actual light levels are used here 172 177 ! --------------------------------------------- 173 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 174 zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) ) ) 175 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 176 177 ! Computation of production function for Chlorophyll 178 ! ------------------------------------------------- 178 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) / zmxl_fac(ji,jj,jk) ) ) 179 zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) / zmxl_fac(ji,jj,jk) ) ) 180 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) / zmxl_fac(ji,jj,jk) ) ) 181 182 ! Computation of production function for Chlorophyll 183 ! Mean light level in the mixed layer (when appropriate) 184 ! is used here (acclimation is in general slower than 185 ! the characteristic time scales of vertical mixing) 186 ! ------------------------------------------------------ 179 187 zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 180 188 zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) … … 187 195 188 196 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 189 190 197 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 191 ! Si/C of diatoms 192 ! ------------------------ 193 ! Si/C increases with iron stress and silicate availability 194 ! Si/C is arbitrariliy increased for very high Si concentrations 195 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 198 ! Si/C of diatoms 199 ! ------------------------ 200 ! Si/C increases with iron stress and silicate availability (zsilfac) 201 ! Si/C is arbitrariliy increased for very high Si concentrations 202 ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2) 203 ! A parameterization derived from Flynn (2003) is used for the control 204 ! when Si is not limiting which is similar to the parameterisation 205 ! proposed by Gurney and Davidson (1999). 206 ! ----------------------------------------------------------------------- 196 207 zlim = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi1 ) 197 zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 198 zsilfac = 3.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 208 zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 199 209 zsiborn = tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) 200 210 IF (gphit(ji,jj) < -30 ) THEN 201 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 )211 zsilfac2 = 1. + 1. * zsiborn / ( zsiborn + xksi2**3 ) 202 212 ELSE 203 zsilfac2 = 1. + zsiborn / ( zsiborn + xksi2**3 )213 zsilfac2 = 1. 204 214 ENDIF 205 zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 206 ENDIF 207 END_3D 208 209 ! Sea-ice effect on production 215 zratiosi = 1.0 - tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / ( zsilfac2 * grosip * 3.0 + rtrn ) 216 zratiosi = MAX(0., MIN(1.0, zratiosi) ) 217 zmaxsi = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 218 IF ( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 219 zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zmaxsi 220 ELSE 221 zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.7 * zmaxsi 222 ENDIF 223 ENDIF 224 END_3D 225 226 ! Sea-ice effect on production 227 ! No production is assumed below sea ice 228 ! -------------------------------------- 210 229 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 211 230 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) … … 215 234 END_3D 216 235 217 ! Computation of the various production terms of nanophytoplankton 236 ! Computation of the various production and uptake terms of nanophytoplankton 237 ! Interactions between N and P are modeled according to the Chain Model 238 ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 239 ! Droop kinetics. When the quota is approaching the maximum achievable 240 ! quota, uptake is downregulated according to a sigmoidal function 241 ! (power 2), as proposed by Flynn (2003) 242 ! --------------------------------------------------------------------------- 218 243 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 219 244 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 220 245 ! production terms for nanophyto. 221 246 zprorcan(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tr(ji,jj,jk,jpphy,Kbb) * rfact2 222 ! 247 248 ! Size computation 249 ! Size is made a function of the limitation of of phytoplankton growth 250 ! Strongly limited cells are supposed to be smaller. sizena is the 251 ! size at time step t+1 and is thus updated at the end of the 252 ! current time step 253 ! -------------------------------------------------------------------- 254 zlimfac = xlimphys(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 255 zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 256 sizena(ji,jj,jk) = MIN(xsizern, MAX( sizena(ji,jj,jk), zsizetmp ) ) 257 ! Maximum potential uptake rate 223 258 zration = tr(ji,jj,jk,jpnph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 224 259 zratiop = tr(ji,jj,jk,jppph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) … … 226 261 zprnutmax = zprnut(ji,jj,jk) * fvnuptk(ji,jj,jk) / rno3 * tr(ji,jj,jk,jpphy,Kbb) * rfact2 227 262 ! Uptake of nitrogen 228 zrat = MIN( 1., zration / (xqnnmax(ji,jj,jk) + rtrn) )229 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))263 zratio = 1.0 - MIN( 1., zration / (xqnnmax(ji,jj,jk) + rtrn) ) 264 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 230 265 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpnmin(ji,jj,jk) ) & 231 266 & / ( xqpnmax(ji,jj,jk) - xqpnmin(ji,jj,jk) + rtrn ), xlimnfe(ji,jj,jk) ) ) 232 zpronewn(ji,jj,jk) = zpronmax * zdaylen(ji,jj) * xnanono3(ji,jj,jk) 267 zpronmax = zpronmax * xqnnmin(ji,jj,jk) / qnnmin 268 zpronewn(ji,jj,jk) = zpronmax * xnanono3(ji,jj,jk) 233 269 zproregn(ji,jj,jk) = zpronmax * xnanonh4(ji,jj,jk) 234 ! Uptake of phosphorus 235 zrat =MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) )236 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))270 ! Uptake of phosphorus and DOP 271 zratio = 1.0 - MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) ) 272 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 237 273 zpropmax = zprnutmax * zmax * xlimnfe(ji,jj,jk) 238 274 zpropo4n(ji,jj,jk) = zpropmax * xnanopo4(ji,jj,jk) 239 275 zprodopn(ji,jj,jk) = zpropmax * xnanodop(ji,jj,jk) 240 276 ! Uptake of iron 241 zrat = MIN( 1., zratiof / qfnmax ) 242 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 243 zprofmax = zprnutmax * qfnmax * zmax 244 zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) * ( 3. - 2.4 * xlimnfe(ji,jj,jk) & 245 & / ( xlimnfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn & 277 zqfnmax = xqfuncfecn(ji,jj,jk) + ( qfnmax - xqfuncfecn(ji,jj,jk) ) * xlimnpn(ji,jj,jk) 278 zratio = 1.0 - MIN( 1., zratiof / zqfnmax ) 279 zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) ) 280 zprofmax = zprnutmax * zqfnmax * zmax 281 zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) & 282 & * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn & 246 283 & + xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) ) 247 284 ENDIF 248 285 END_3D 249 286 250 ! Computation of the various production terms of picophytoplankton 287 ! Computation of the various production and uptake terms of picophytoplankton 288 ! Interactions between N and P are modeled according to the Chain Model 289 ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 290 ! Droop kinetics. When the quota is approaching the maximum achievable 291 ! quota, uptake is downregulated according to a sigmoidal function 292 ! (power 2), as proposed by Flynn (2003) 293 ! --------------------------------------------------------------------------- 251 294 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 252 295 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 253 296 ! production terms for picophyto. 254 297 zprorcap(ji,jj,jk) = zprpic(ji,jj,jk) * xlimpic(ji,jj,jk) * tr(ji,jj,jk,jppic,Kbb) * rfact2 255 ! 298 ! Size computation 299 ! Size is made a function of the limitation of of phytoplankton growth 300 ! Strongly limited cells are supposed to be smaller. sizepa is 301 ! size at time step t+1 and is thus updated at the end of the 302 ! current time step 303 ! -------------------------------------------------------------------- 304 zlimfac = zprchlp(ji,jj,jk) * xlimpics(ji,jj,jk) / ( zprmaxp(ji,jj,jk) + rtrn ) 305 zsizetmp = 1.0 + 1.3 * ( xsizerp - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 306 sizepa(ji,jj,jk) = min(xsizerp, max( sizepa(ji,jj,jk), zsizetmp ) ) 307 ! Maximum potential uptake rate of nutrients 256 308 zration = tr(ji,jj,jk,jpnpi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) 257 309 zratiop = tr(ji,jj,jk,jpppi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) … … 259 311 zprnutmax = zprnut(ji,jj,jk) * fvpuptk(ji,jj,jk) / rno3 * tr(ji,jj,jk,jppic,Kbb) * rfact2 260 312 ! Uptake of nitrogen 261 zrat =MIN( 1., zration / (xqnpmax(ji,jj,jk) + rtrn) )262 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))313 zratio = 1.0 - MIN( 1., zration / (xqnpmax(ji,jj,jk) + rtrn) ) 314 zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) ) 263 315 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqppmin(ji,jj,jk) ) & 264 316 & / ( xqppmax(ji,jj,jk) - xqppmin(ji,jj,jk) + rtrn ), xlimpfe(ji,jj,jk) ) ) 265 zpronewp(ji,jj,jk) = zpronmax * zdaylen(ji,jj) * xpicono3(ji,jj,jk) 317 zpronmax = zpronmax * xqnpmin(ji,jj,jk) / qnnmin 318 zpronewp(ji,jj,jk) = zpronmax * xpicono3(ji,jj,jk) 266 319 zproregp(ji,jj,jk) = zpronmax * xpiconh4(ji,jj,jk) 267 320 ! Uptake of phosphorus 268 zrat =MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) )269 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))270 zpropmax = zprnutmax * zmax * xlimpfe(ji,jj,jk) 321 zratio = 1.0 - MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) ) 322 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 323 zpropmax = zprnutmax * zmax * xlimpfe(ji,jj,jk) 271 324 zpropo4p(ji,jj,jk) = zpropmax * xpicopo4(ji,jj,jk) 272 325 zprodopp(ji,jj,jk) = zpropmax * xpicodop(ji,jj,jk) 273 326 ! Uptake of iron 274 zrat = MIN( 1., zratiof / qfpmax ) 275 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 276 zprofmax = zprnutmax * qfpmax * zmax 277 zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) * ( 3. - 2.4 * xlimpfe(ji,jj,jk) & 278 & / ( xlimpfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn & 327 zqfpmax = xqfuncfecp(ji,jj,jk) + ( qfpmax - xqfuncfecp(ji,jj,jk) ) * xlimnpp(ji,jj,jk) 328 zratio = 1.0 - MIN( 1., zratiof / zqfpmax ) 329 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 330 zprofmax = zprnutmax * zqfpmax * zmax 331 zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) & 332 & * (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn & 279 333 & + xpicono3(ji,jj,jk) + xpiconh4(ji,jj,jk) ) * (1. - xpicofer(ji,jj,jk) ) ) 280 334 ENDIF 281 335 END_3D 282 336 283 ! Computation of the various production terms of diatoms 337 ! Computation of the various production and uptake terms of diatoms 338 ! Interactions between N and P are modeled according to the Chain Model 339 ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 340 ! Droop kinetics. When the quota is approaching the maximum achievable 341 ! quota, uptake is downregulated according to a sigmoidal function 342 ! (power 2), as proposed by Flynn (2003) 343 ! --------------------------------------------------------------------------- 284 344 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 285 345 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 286 346 ! production terms for diatomees 287 347 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr(ji,jj,jk,jpdia,Kbb) * rfact2 288 ! Computation of the respiration term according to pahlow 289 ! & oschlies (2013) 290 ! 348 ! Size computation 349 ! Size is made a function of the limitation of of phytoplankton growth 350 ! Strongly limited cells are supposed to be smaller. sizeda is 351 ! size at time step t+1 and is thus updated at the end of the 352 ! current time step. 353 ! -------------------------------------------------------------------- 354 zlimfac = zprchld(ji,jj,jk) * xlimdias(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 355 zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 356 sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 357 ! Maximum potential uptake rate of nutrients 291 358 zration = tr(ji,jj,jk,jpndi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 292 359 zratiop = tr(ji,jj,jk,jppdi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) … … 294 361 zprnutmax = zprnut(ji,jj,jk) * fvduptk(ji,jj,jk) / rno3 * tr(ji,jj,jk,jpdia,Kbb) * rfact2 295 362 ! Uptake of nitrogen 296 zrat =MIN( 1., zration / (xqndmax(ji,jj,jk) + rtrn) )297 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))363 zratio = 1.0 - MIN( 1., zration / (xqndmax(ji,jj,jk) + rtrn) ) 364 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 298 365 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpdmin(ji,jj,jk) ) & 299 366 & / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlimdfe(ji,jj,jk) ) ) 300 zpronewd(ji,jj,jk) = zpronmax * zdaylen(ji,jj) * xdiatno3(ji,jj,jk) 367 zpronmax = zpronmax * xqndmin(ji,jj,jk) / qnnmin 368 zpronewd(ji,jj,jk) = zpronmax * xdiatno3(ji,jj,jk) 301 369 zproregd(ji,jj,jk) = zpronmax * xdiatnh4(ji,jj,jk) 302 370 ! Uptake of phosphorus 303 zrat =MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) )304 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))371 zratio = 1.0 - MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) ) 372 zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) ) 305 373 zpropmax = zprnutmax * zmax * xlimdfe(ji,jj,jk) 306 374 zpropo4d(ji,jj,jk) = zpropmax * xdiatpo4(ji,jj,jk) 307 375 zprodopd(ji,jj,jk) = zpropmax * xdiatdop(ji,jj,jk) 308 376 ! Uptake of iron 309 zrat = MIN( 1., zratiof / qfdmax ) 310 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 311 zprofmax = zprnutmax * qfdmax * zmax 312 zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) * ( 3. - 2.4 * xlimdfe(ji,jj,jk) & 313 & / ( xlimdfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn & 377 zqfdmax = xqfuncfecd(ji,jj,jk) + ( qfdmax - xqfuncfecd(ji,jj,jk) ) * xlimnpd(ji,jj,jk) 378 zratio = 1.0 - MIN( 1., zratiof / zqfdmax ) 379 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 380 zprofmax = zprnutmax * zqfdmax * zmax 381 zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) & 382 & * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn & 314 383 & + xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) ) 315 384 ENDIF 316 385 END_3D 317 386 387 ! Production of Chlorophyll. The formulation proposed by Geider et al. 388 ! is adopted here. 389 ! -------------------------------------------------------------------- 318 390 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 319 391 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN … … 321 393 znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 322 394 zprod = rday * (zpronewn(ji,jj,jk) + zproregn(ji,jj,jk)) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 323 thetannm_n = MIN ( thetannm, ( thetannm / (1. - 1.14 / 43.4 *ts(ji,jj,jk,jp_tem,Kmm))) & 324 & * (1. - 1.14 / 43.4 * 20.)) 325 zprochln = thetannm_n * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn ) 395 zprochln = thetannm * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn ) 326 396 zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) ) 327 397 ! production terms for picophyto. ( chlorophyll ) 328 398 zpicotot = epicom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 329 399 zprod = rday * (zpronewp(ji,jj,jk) + zproregp(ji,jj,jk)) * zprchlp(ji,jj,jk) * xlimpic(ji,jj,jk) 330 thetanpm_n = MIN ( thetanpm, ( thetanpm / (1. - 1.14 / 43.4 *ts(ji,jj,jk,jp_tem,Kmm))) & 331 & * (1. - 1.14 / 43.4 * 20.)) 332 zprochlp = thetanpm_n * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 400 zprochlp = thetanpm * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 333 401 zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) ) 334 ! production terms for diatom ees ( chlorophyll )402 ! production terms for diatoms ( chlorophyll ) 335 403 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 336 404 zprod = rday * (zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 337 thetandm_n = MIN ( thetandm, ( thetandm / (1. - 1.14 / 43.4 *ts(ji,jj,jk,jp_tem,Kmm))) & 338 & * (1. - 1.14 / 43.4 * 20.)) 339 zprochld = thetandm_n * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn ) 405 zprochld = thetandm * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn ) 340 406 zprochld = MAX(zprochld, chlcmin * 12. * zprorcad(ji,jj,jk) ) 341 407 ! Update the arrays TRA which contain the Chla sources and sinks … … 348 414 ! Update the arrays TRA which contain the biological sources and sinks 349 415 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 416 zpptot = zpropo4n(ji,jj,jk) + zpropo4d(ji,jj,jk) + zpropo4p(ji,jj,jk) 417 zpnewtot = zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) + zpronewp(ji,jj,jk) 418 zpregtot = zproregn(ji,jj,jk) + zproregd(ji,jj,jk) + zproregp(ji,jj,jk) 419 350 420 zprontot = zpronewn(ji,jj,jk) + zproregn(ji,jj,jk) 351 421 zproptot = zpronewp(ji,jj,jk) + zproregp(ji,jj,jk) 352 422 zprodtot = zpronewd(ji,jj,jk) + zproregd(ji,jj,jk) 353 zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) & 354 & + excretp * zprorcap(ji,jj,jk) 355 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpropo4n(ji,jj,jk) - zpropo4d(ji,jj,jk) & 356 & - zpropo4p(ji,jj,jk) 357 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpronewn(ji,jj,jk) - zpronewd(ji,jj,jk) & 358 & - zpronewp(ji,jj,jk) 359 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zproregn(ji,jj,jk) - zproregd(ji,jj,jk) & 360 & - zproregp(ji,jj,jk) 361 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zprorcan(ji,jj,jk) * texcretn & 362 & - zpsino3 * zpronewn(ji,jj,jk) - zpsinh4 * zproregn(ji,jj,jk) & 363 & - zrespn(ji,jj,jk) 364 zcroissn(ji,jj,jk) = tr(ji,jj,jk,jpphy,Krhs) / rfact2/ (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 423 ! 424 zproddoc = excretd * zprorcad(ji,jj,jk) & 425 & + excretn * zprorcan(ji,jj,jk) & 426 & + excretp * zprorcap(ji,jj,jk) 427 ! 428 zproddop = excretd * zpropo4d(ji,jj,jk) - texcretd * zprodopd(ji,jj,jk) & 429 & + excretn * zpropo4n(ji,jj,jk) - texcretn * zprodopn(ji,jj,jk) & 430 & + excretp * zpropo4p(ji,jj,jk) - texcretp * zprodopp(ji,jj,jk) 431 432 zproddon = excretd * zprodtot + excretn * zprontot + excretp * zproptot 433 434 zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 435 zresptot = zrespn(ji,jj,jk) + zrespp(ji,jj,jk) + zrespd(ji,jj,jk) 436 437 ! 438 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpptot 439 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpnewtot 440 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zpregtot 441 ! 442 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) & 443 & + zprorcan(ji,jj,jk) * texcretn & 444 & - zpsino3 * zpronewn(ji,jj,jk) & 445 & - zpsinh4 * zproregn(ji,jj,jk) & 446 & - zrespn(ji,jj,jk) 447 365 448 tr(ji,jj,jk,jpnph,Krhs) = tr(ji,jj,jk,jpnph,Krhs) + zprontot * texcretn 366 tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) + zpropo4n(ji,jj,jk) * texcretn & 367 & + zprodopn(ji,jj,jk) * texcretn 449 tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) + ( zpropo4n(ji,jj,jk) + zprodopn(ji,jj,jk) ) * texcretn 368 450 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk) * texcretn 369 tr(ji,jj,jk,jppic,Krhs) = tr(ji,jj,jk,jppic,Krhs) + zprorcap(ji,jj,jk) * texcretp & 370 & - zpsino3 * zpronewp(ji,jj,jk) - zpsinh4 * zproregp(ji,jj,jk) & 371 & - zrespp(ji,jj,jk) 372 zcroissp(ji,jj,jk) = tr(ji,jj,jk,jppic,Krhs) / rfact2/ (tr(ji,jj,jk,jppic,Kbb) + rtrn) 451 452 ! 453 tr(ji,jj,jk,jppic,Krhs) = tr(ji,jj,jk,jppic,Krhs) & 454 & + zprorcap(ji,jj,jk) * texcretp & 455 & - zpsino3 * zpronewp(ji,jj,jk) & 456 & - zpsinh4 * zproregp(ji,jj,jk) & 457 & - zrespp(ji,jj,jk) 458 373 459 tr(ji,jj,jk,jpnpi,Krhs) = tr(ji,jj,jk,jpnpi,Krhs) + zproptot * texcretp 374 tr(ji,jj,jk,jpppi,Krhs) = tr(ji,jj,jk,jpppi,Krhs) + zpropo4p(ji,jj,jk) * texcretp & 375 & + zprodopp(ji,jj,jk) * texcretp 460 tr(ji,jj,jk,jpppi,Krhs) = tr(ji,jj,jk,jpppi,Krhs) + ( zpropo4p(ji,jj,jk) + zprodopp(ji,jj,jk) ) * texcretp 376 461 tr(ji,jj,jk,jppfe,Krhs) = tr(ji,jj,jk,jppfe,Krhs) + zprofep(ji,jj,jk) * texcretp 377 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) + zprorcad(ji,jj,jk) * texcretd & 378 & - zpsino3 * zpronewd(ji,jj,jk) - zpsinh4 * zproregd(ji,jj,jk) & 379 & - zrespd(ji,jj,jk) 380 zcroissd(ji,jj,jk) = tr(ji,jj,jk,jpdia,Krhs) / rfact2 / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 462 463 ! 464 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) & 465 & + zprorcad(ji,jj,jk) * texcretd & 466 & - zpsino3 * zpronewd(ji,jj,jk) & 467 & - zpsinh4 * zproregd(ji,jj,jk) & 468 & - zrespd(ji,jj,jk) 469 381 470 tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) + zprodtot * texcretd 382 tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) + zpropo4d(ji,jj,jk) * texcretd & 383 & + zprodopd(ji,jj,jk) * texcretd 471 tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) + ( zpropo4d(ji,jj,jk) + zprodopd(ji,jj,jk) ) * texcretd 384 472 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd 385 473 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd 386 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) & 387 & + excretp * zprorcap(ji,jj,jk) 388 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + excretd * zprodtot + excretn * zprontot & 389 & + excretp * zproptot 390 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + excretd * zpropo4d(ji,jj,jk) + excretn * zpropo4n(ji,jj,jk) & 391 & - texcretn * zprodopn(ji,jj,jk) - texcretd * zprodopd(ji,jj,jk) + excretp * zpropo4p(ji,jj,jk) & 392 & - texcretp * zprodopp(ji,jj,jk) 393 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + o2ut * ( zproregn(ji,jj,jk) + zproregd(ji,jj,jk) & 394 & + zproregp(ji,jj,jk) ) + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk) & 395 & + zpronewd(ji,jj,jk) + zpronewp(ji,jj,jk) ) & 396 & - o2ut * ( zrespn(ji,jj,jk) + zrespp(ji,jj,jk) + zrespd(ji,jj,jk) ) 397 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 398 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zfeup 399 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 400 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) - zprorcap(ji,jj,jk) & 401 & + zpsino3 * zpronewn(ji,jj,jk) + zpsinh4 * zproregn(ji,jj,jk) & 402 & + zpsino3 * zpronewp(ji,jj,jk) + zpsinh4 * zproregp(ji,jj,jk) & 403 & + zpsino3 * zpronewd(ji,jj,jk) + zpsinh4 * zproregd(ji,jj,jk) & 404 & + zrespn(ji,jj,jk) + zrespd(ji,jj,jk) + zrespp(ji,jj,jk) 405 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) & 406 & + zpronewp(ji,jj,jk) ) - rno3 * ( zproregn(ji,jj,jk) + zproregd(ji,jj,jk) & 407 & + zproregp(ji,jj,jk) ) 408 END_3D 409 ! 474 475 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zproddoc 476 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zproddon 477 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zproddop 478 479 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) & 480 & + o2ut * zpregtot + ( o2ut + o2nit ) * zpnewtot - o2ut * zresptot 481 482 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprodfer 483 consfe3(ji,jj,jk) = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) & 484 & * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2 485 486 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 487 488 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zpptot & 489 & + zpsino3 * zpronewn(ji,jj,jk) + zpsinh4 * zproregn(ji,jj,jk) & 490 & + zpsino3 * zpronewp(ji,jj,jk) + zpsinh4 * zproregp(ji,jj,jk) & 491 & + zpsino3 * zpronewd(ji,jj,jk) + zpsinh4 * zproregd(ji,jj,jk) 492 493 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpnewtot - zpregtot ) 494 ! 495 END_3D 496 497 ! Production and uptake of ligands by phytoplankton. This part is activated 498 ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small 499 ! and based on the FeL model by Morel et al. (2008) and on the study of 500 ! Shaked and Lis (2012) 501 ! ------------------------------------------------------------------------- 410 502 IF( ln_ligand ) THEN 411 zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp412 503 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 413 z docprod= excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) + excretp * zprorcap(ji,jj,jk)414 z feup= texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk)415 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet416 zpligprod1(ji,jj,jk) = zdocprod * ldocp417 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet418 504 zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) + excretp * zprorcap(ji,jj,jk) 505 zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 506 zprodlig = plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 507 ! 508 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zproddoc * ldocp - zprodfer * zprodlig 509 END_3D 419 510 ENDIF 420 421 422 ! Total primary production per year423 511 424 512 ! Total primary production per year … … 439 527 CALL iom_put( "PFeN" , zprofen(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by nanophyto 440 528 CALL iom_put( "PFeD" , zprofed(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by diatomes 441 IF( ln_ligand ) THEN 442 CALL iom_put( "LPRODP" , zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) ) 443 CALL iom_put( "LDETP" , zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) ) 529 IF( ln_ligand .AND. ( iom_use( "LPRODP" ) .OR. iom_use( "LDETP" ) ) ) THEN 530 ALLOCATE( zpligprod(jpi,jpj,jpk) ) 531 zpligprod(:,:,:) = excretd * zprorcad(:,:,:) + excretn * zprorcan(:,:,:) + excretp * zprorcap(:,:,:) 532 CALL iom_put( "LPRODP" , zpligprod(:,:,:) * ldocp * 1e9 * zfact * tmask(:,:,:) ) 533 ! 534 zpligprod(:,:,:) = ( texcretn * zprofen(:,:,:) + texcretd * zprofed(:,:,:) + texcretp * zprofep(:,:,:) ) & 535 & * plig(:,:,:) / ( rtrn + plig(:,:,:) + 75.0 * (1.0 - plig(:,:,:) ) ) 536 CALL iom_put( "LDETP" , zpligprod(:,:,:) * lthet * 1e9 * zfact * tmask(:,:,:) ) 537 DEALLOCATE( zpligprod ) 444 538 ENDIF 445 539 CALL iom_put( "Mumax" , zprmaxn(:,:,:) * tmask(:,:,:) ) ! Maximum growth rate … … 450 544 CALL iom_put( "LNlight" , zprbio(:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ) ! light limitation term 451 545 CALL iom_put( "LDlight" , zprdia(:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:) ) 452 CALL iom_put( "MunetP" , zcroissp(:,:,:) * tmask(:,:,:) ) ! Realized growth rate for picophyto453 CALL iom_put( "MunetN" , zcroissn(:,:,:) * tmask(:,:,:) ) ! Realized growth rate for nanophyto454 CALL iom_put( "MunetD" , zcroissd(:,:,:) * tmask(:,:,:) ) ! Realized growth rate for diatoms546 CALL iom_put( "MunetP" , ( tr(:,:,:,jppic,Krhs)/rfact2/(tr(:,:,:,jppic,Kbb)+ rtrn ) * tmask(:,:,:)) ) ! Realized growth rate for picophyto 547 CALL iom_put( "MunetN" , ( tr(:,:,:,jpphy,Krhs)/rfact2/(tr(:,:,:,jpphy,Kbb)+ rtrn ) * tmask(:,:,:)) ) ! Realized growth rate for picophyto 548 CALL iom_put( "MunetD" , ( tr(:,:,:,jpdia,Krhs)/rfact2/(tr(:,:,:,jpdia,Kbb)+ rtrn ) * tmask(:,:,:)) ) ! Realized growth rate for picophyto 455 549 CALL iom_put( "TPP" , ( zprorcap(:,:,:) + zprorcan(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:) ) ! total primary production 456 550 CALL iom_put( "TPNEW" , ( zpronewp(:,:,:) + zpronewn(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:) ) ! total new production … … 476 570 !! ** Purpose : Initialization of phytoplankton production parameters 477 571 !! 478 !! ** Method : Read the namp isprod namelist and check the parameters572 !! ** Method : Read the namp5zprod namelist and check the parameters 479 573 !! called at the first timestep (nittrc000) 480 574 !! 481 !! ** input : Namelist namp isprod575 !! ** input : Namelist namp5zprod 482 576 !!---------------------------------------------------------------------- 483 INTEGER :: ios 577 INTEGER :: ios ! Local integer output status for namelist read 484 578 !! 485 579 NAMELIST/namp5zprod/ pislopen, pislopep, pisloped, excretn, excretp, excretd, & -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/par_sed.F90
r14086 r14385 60 60 INTEGER, PUBLIC, PARAMETER :: & 61 61 jptrased = jpsol + jpwat , & 62 jpdia3dsed = 2, &63 jpdia2dsed = 1262 jpdia3dsed = 4 , & 63 jpdia2dsed = 20 64 64 65 65 END MODULE par_sed -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sed.F90
r14086 r14385 70 70 REAL(wp), PUBLIC, DIMENSION(:,: ), ALLOCATABLE :: fromsed !: 71 71 REAL(wp), PUBLIC, DIMENSION(:,: ), ALLOCATABLE :: tosed !: 72 REAL(wp), PUBLIC, DIMENSION(:,: ), ALLOCATABLE :: rloss !:73 REAL(wp), PUBLIC, DIMENSION(:,: ), ALLOCATABLE :: tokbot74 !75 72 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: temp !: temperature 76 73 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: salt !: salinity 77 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: press !: pressure78 74 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: raintg !: total massic flux rained in each cell (sum of sol. comp.) 79 75 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: fecratio !: Fe/C ratio in falling particles to the sediments 80 76 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: dzdep !: total thickness of solid material rained [cm] in each cell 81 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: zkbot !: total thickness of solid material rained [cm] in each cell77 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: zkbot !: Total water column depth 82 78 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: wacc !: total thickness of solid material rained [cm] in each cell 83 79 ! … … 88 84 REAL(wp), PUBLIC, DIMENSION(:,: ), ALLOCATABLE :: vols3d !: ??? 89 85 90 91 86 !! Chemistry 92 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: densSW 93 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: borats 87 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: densSW 88 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: borats 94 89 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: calcon2 95 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: akbs 96 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak1s 97 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak2s 98 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: akws 99 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak12s 100 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak1ps 101 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak2ps 102 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak3ps 103 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak12ps 90 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: akbs 91 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak1s 92 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak2s 93 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: akws 94 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak12s 95 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak1ps 96 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak2ps 97 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak3ps 98 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak12ps 104 99 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: ak123ps 105 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: aksis 106 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: aksps 100 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: aksis 101 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: aksps 107 102 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: sieqs 108 103 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: aks3s … … 127 122 REAL(wp), PUBLIC, DIMENSION(:,: ), ALLOCATABLE :: db !: bioturbation ceofficient 128 123 REAL(wp), PUBLIC, DIMENSION(:,: ), ALLOCATABLE :: irrig !: bioturbation ceofficient 129 REAL(wp), PUBLIC, DIMENSION(: ), ALLOCATABLE :: rdtsed !: sediment model time-step130 124 REAL(wp), PUBLIC, DIMENSION(:,: ), ALLOCATABLE :: sedligand 125 REAL(wp), PUBLIC, DIMENSION(:,: ), ALLOCATABLE :: saturco3 131 126 REAL(wp) :: dens !: density of solid material 132 127 !! Inputs / Outputs … … 154 149 !!------------------------------------------------------------------- 155 150 ! 156 ALLOCATE( trc_data(jpi,jpj,jpdta) , & 157 & epkbot(jpi,jpj), gdepbot(jpi,jpj) , & 158 & dz(jpksed) , por(jpksed) , por1(jpksed) , & 159 & volw(jpksed), vols(jpksed), rdtsed(jpksed) , & 160 & trcsedi (jpi,jpj,jpksed,jptrased) , & 161 & flxsedi3d(jpi,jpj,jpksed,jpdia3dsed) , & 162 & flxsedi2d(jpi,jpj,jpdia2dsed) , & 163 & mol_wgt(jpsol), STAT=sed_alloc ) 151 ALLOCATE( trc_data(jpi,jpj,jpdta), trcsedi (jpi,jpj,jpksed,jptrased) , & 152 & epkbot(jpi,jpj), gdepbot(jpi,jpj), dz(jpksed), por(jpksed) , & 153 & por1(jpksed), volw(jpksed), vols(jpksed), mol_wgt(jpsol) , & 154 & flxsedi2d(jpi,jpj,jpdia2dsed), flxsedi3d(jpi,jpj,jpksed,jpdia3dsed), STAT=sed_alloc ) 164 155 165 156 IF( sed_alloc /= 0 ) CALL ctl_stop( 'STOP', 'sed_alloc: failed to allocate arrays' ) -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedadv.F90
r10425 r14385 88 88 fromsed(:,:) = 0. 89 89 tosed (:,:) = 0. 90 rloss (:,:) = 0.91 90 ikwneg = 1 92 91 nztime = jpksed … … 254 253 255 254 ELSE IF( raintg(ji) < eps ) THEN ! rain = 0 256 !! Nadia rloss(:,:) = rainrm(:,:) bug ??????257 258 rloss(ji,1:jpsol) = rainrm(ji,1:jpsol)259 255 260 256 zfull (2) = zfilled(2) … … 300 296 IF( ikwneg == 2 ) THEN ! advection is reversed in the first sediment layer 301 297 302 zkwnup = rdtsed(ikwneg) * raintg(ji) / dz(ikwneg)298 zkwnup = dtsed * raintg(ji) / ( denssol * por1(ikwneg) * dz(ikwneg) ) 303 299 zkwnlo = ABS( zwb(ji,ikwneg) ) / dz(ikwneg) 304 300 zfull (ikwneg+1) = zfilled(ikwneg+1) - zkwnlo * dvolsm(ikwneg+1) … … 347 343 ! Heinze fromsed(ji,jsclay) = zkwnlo * 1. * denssol * por1(jpksed) / mol_wgt(jsclay) 348 344 fromsed(ji,jsclay) = zkwnlo * 1.* por1clay 349 ELSE ! 2 < ikwneg(ji) <= jpksedm1345 ELSE IF( ikwneg > 2 .AND. ikwneg < jpksed-1 ) THEN 350 346 351 347 zkwnup = ABS( zwb(ji,ikwneg-1) ) * por1(ikwneg-1) / ( dz(ikwneg) * por1(ikwneg) ) -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedarr.F90
r14086 r14385 51 51 jid = MOD( tab_ind(jn) - 1, jpi ) + 1 52 52 jjd = ( tab_ind(jn) - 1 ) / jpi + 1 53 ! IF ( mig(jid) == 112 .and. mjg(jjd) == 25) write(0,*) 'plante ',jn,ndim1d 53 54 tab1d(jn) = tab2d(jid, jjd) 54 55 END DO -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/seddiff.F90
r10225 r14385 43 43 INTEGER, INTENT(in) :: kt, knt ! number of iteration 44 44 ! --- local variables 45 INTEGER :: ji, jk, j s! dummy looop indices45 INTEGER :: ji, jk, jw ! dummy looop indices 46 46 47 47 REAL(wp), DIMENSION(jpoce,jpksed) :: zrearat1, zrearat2 ! reaction rate in pore water … … 60 60 ! Initializations 61 61 !---------------------- 62 zrearat1(:,:) 62 zrearat1(:,:) = 0. 63 63 zrearat2(:,:) = 0. 64 64 65 ! ---------------------------66 ! Solves PO4 diffusion67 ! ----------------------------65 ! -------------------------------------- 66 ! Solves solute diffusion in pore waters 67 ! -------------------------------------- 68 68 69 ! solves tridiagonal system 70 CALL sed_mat( jwpo4, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwpo4), dtsed2 / 2.0 ) 71 72 !--------------------------- 73 ! Solves NH4 diffusion 74 !---------------------------- 75 76 ! solves tridiagonal system 77 CALL sed_mat( jwnh4, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwnh4), dtsed2 / 2.0 ) 78 79 !--------------------------- 80 ! Solves Fe2+ diffusion 81 !---------------------------- 82 83 ! solves tridiagonal system 84 CALL sed_mat( jwfe2, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwfe2), dtsed2 / 2.0 ) 85 86 !--------------------------- 87 ! Solves H2S diffusion 88 !---------------------------- 89 90 ! solves tridiagonal system 91 CALL sed_mat( jwh2s, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwh2s), dtsed2 / 2.0 ) 92 93 !--------------------------- 94 ! Solves SO4 diffusion 95 !---------------------------- 96 97 ! solves tridiagonal system 98 CALL sed_mat( jwso4, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwso4), dtsed2 / 2.0 ) 99 100 !--------------------------- 101 ! Solves O2 diffusion 102 !---------------------------- 103 104 ! solves tridiagonal system 105 CALL sed_mat( jwoxy, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwoxy), dtsed2 / 2.0 ) 106 107 !--------------------------- 108 ! Solves NO3 diffusion 109 !---------------------------- 110 111 ! solves tridiagonal system 112 CALL sed_mat( jwno3, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwno3), dtsed2 / 2.0 ) 69 ! Solves tridiagonal system 70 DO jw = 1, jpwat 71 CALL sed_mat( jw, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jw), dtsed2 / 2.0 ) 72 END DO 113 73 114 74 CALL sed_mat( jwdic, jpoce, jpksed, zrearat1, zrearat2, sedligand(:,:), dtsed2 / 2.0 ) -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/seddsr.F90
r10362 r14385 55 55 REAL(wp), DIMENSION(jpoce,jpksed) :: zrearat1, zrearat2, zrearat3 ! reaction rate in pore water 56 56 REAL(wp), DIMENSION(jpoce,jpksed) :: zundsat ! undersaturation ; indice jpwatp1 is for calcite 57 REAL(wp), DIMENSION(jpoce,jpksed) :: z kpoc, zkpos, zkpor, zlimo2, zlimno3, zlimso4, zlimfeo ! undersaturation ; indice jpwatp1 is for calcite57 REAL(wp), DIMENSION(jpoce,jpksed) :: zlimo2, zlimno3, zlimso4, zlimfeo ! undersaturation ; indice jpwatp1 is for calcite 58 58 REAL(wp), DIMENSION(jpoce) :: zsumtot 59 59 REAL(wp) :: zsolid1, zsolid2, zsolid3, zvolw, zreasat 60 REAL(wp) :: zsatur, zsatur2, znusil, zkpoca, zkpocb, zkpocc 61 REAL(wp) :: zratio, zgamma, zbeta, zlimtmp, zundsat2 60 REAL(wp) :: zgamma, zbeta, zlimtmp 62 61 !! 63 62 !!---------------------------------------------------------------------- … … 75 74 !---------------------- 76 75 77 zrearat1(:,:) = 0. ; zundsat(:,:) = 0. ; zkpoc(:,:) = 0. 78 zlimo2 (:,:) = 0. ; zlimno3(:,:) = 0. ; zrearat2(:,:) = 0. 79 zlimso4(:,:) = 0. ; zkpor(:,:) = 0. ; zrearat3(:,:) = 0. 80 zkpos (:,:) = 0. 76 zrearat1(:,:) = 0. ; zundsat(:,:) = 0. 77 zlimo2 (:,:) = 0. ; zlimno3(:,:) = 0. ; zrearat2(:,:) = 0. 78 zlimso4(:,:) = 0. ; zrearat3(:,:) = 0. 81 79 zsumtot(:) = rtrn 82 80 … … 84 82 zvolc(:,:,:) = 0. 85 83 zadsnh4 = 1.0 / ( 1.0 + adsnh4 ) 86 87 ! Inhibition terms for the different redox equations88 ! --------------------------------------------------89 DO jk = 1, jpksed90 DO ji = 1, jpoce91 zkpoc(ji,jk) = reac_pocl92 zkpos(ji,jk) = reac_pocs93 zkpor(ji,jk) = reac_pocr94 END DO95 END DO96 84 97 85 ! Conversion of volume units … … 116 104 zrearat3(:,:) = 0. 117 105 118 zundsat(:,:) = pwcp(:,:,jwoxy)106 zundsat(:,:) = MAX( pwcp(:,:,jwoxy) - rtrn, 0. ) 119 107 120 108 DO jk = 2, jpksed 121 109 DO ji = 1, jpoce 122 zlimo2(ji,jk) = 1.0 / ( zundsat(ji,jk) + xksedo2 )123 110 zsolid1 = zvolc(ji,jk,jspoc) * solcp(ji,jk,jspoc) 124 111 zsolid2 = zvolc(ji,jk,jspos) * solcp(ji,jk,jspos) 125 112 zsolid3 = zvolc(ji,jk,jspor) * solcp(ji,jk,jspor) 126 zkpoca = zkpoc(ji,jk) * zlimo2(ji,jk) 127 zkpocb = zkpos(ji,jk) * zlimo2(ji,jk) 128 zkpocc = zkpor(ji,jk) * zlimo2(ji,jk) 129 zrearat1(ji,jk) = ( zkpoc(ji,jk) * dtsed2 * zsolid1 ) / & 130 & ( 1. + zkpoca * zundsat(ji,jk ) * dtsed2 ) 131 zrearat2(ji,jk) = ( zkpos(ji,jk) * dtsed2 * zsolid2 ) / & 132 & ( 1. + zkpocb * zundsat(ji,jk ) * dtsed2 ) 133 zrearat3(ji,jk) = ( zkpor(ji,jk) * dtsed2 * zsolid3 ) / & 134 & ( 1. + zkpocc * zundsat(ji,jk ) * dtsed2 ) 135 ENDDO 136 ENDDO 137 138 ! left hand side of coefficient matrix 139 ! DO jn = 1, 5 140 DO jk = 2, jpksed 141 DO ji = 1, jpoce 142 jflag1: DO jn = 1, 10 143 zsolid1 = zvolc(ji,jk,jspoc) * solcp(ji,jk,jspoc) 144 zsolid2 = zvolc(ji,jk,jspos) * solcp(ji,jk,jspos) 145 zsolid3 = zvolc(ji,jk,jspor) * solcp(ji,jk,jspor) 146 zbeta = xksedo2 - pwcp(ji,jk,jwoxy) + so2ut * ( zrearat1(ji,jk) & 147 & + zrearat2(ji,jk) + zrearat3(ji,jk) ) 148 zgamma = - xksedo2 * pwcp(ji,jk,jwoxy) 149 zundsat2 = zundsat(ji,jk) 150 zundsat(ji,jk) = ( - zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / 2.0 151 zlimo2(ji,jk) = 1.0 / ( zundsat(ji,jk) + xksedo2 ) 152 zkpoca = zkpoc(ji,jk) * zlimo2(ji,jk) 153 zkpocb = zkpos(ji,jk) * zlimo2(ji,jk) 154 zkpocc = zkpor(ji,jk) * zlimo2(ji,jk) 155 zrearat1(ji,jk) = ( zkpoc(ji,jk) * dtsed2 * zsolid1 ) / & 156 & ( 1. + zkpoca * zundsat(ji,jk ) * dtsed2 ) 157 zrearat2(ji,jk) = ( zkpos(ji,jk) * dtsed2 * zsolid2 ) / & 158 & ( 1. + zkpocb * zundsat(ji,jk ) * dtsed2 ) 159 zrearat3(ji,jk) = ( zkpor(ji,jk) * dtsed2 * zsolid3 ) / & 160 & ( 1. + zkpocc * zundsat(ji,jk ) * dtsed2 ) 161 IF ( ABS( (zundsat(ji,jk)-zundsat2)/(zundsat2+rtrn)) < 1E-8 ) THEN 162 EXIT jflag1 163 ENDIF 164 END DO jflag1 165 END DO 166 END DO 167 168 ! New solid concentration values (jk=2 to jksed) for each couple 169 DO jk = 2, jpksed 170 DO ji = 1, jpoce 171 zreasat = zrearat1(ji,jk) * zlimo2(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspoc) 172 solcp(ji,jk,jspoc) = solcp(ji,jk,jspoc) - zreasat 173 zreasat = zrearat2(ji,jk) * zlimo2(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspos) 174 solcp(ji,jk,jspos) = solcp(ji,jk,jspos) - zreasat 175 zreasat = zrearat3(ji,jk) * zlimo2(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspor) 176 solcp(ji,jk,jspor) = solcp(ji,jk,jspor) - zreasat 177 ENDDO 178 ENDDO 179 180 ! New pore water concentrations 181 DO jk = 2, jpksed 182 DO ji = 1, jpoce 183 ! Acid Silicic 184 pwcp(ji,jk,jwoxy) = zundsat(ji,jk) 185 zreasat = ( zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) ) * zlimo2(ji,jk) * zundsat(ji,jk) ! oxygen 113 zrearat1(ji,jk) = ( reac_pocl * dtsed2 * zsolid1 ) / ( 1. + reac_pocl * dtsed2 ) 114 zrearat2(ji,jk) = ( reac_pocs * dtsed2 * zsolid2 ) / ( 1. + reac_pocs * dtsed2 ) 115 zrearat3(ji,jk) = ( reac_pocr * dtsed2 * zsolid3 ) / ( 1. + reac_pocr * dtsed2 ) 116 solcp(ji,jk,jspoc) = solcp(ji,jk,jspoc) - zrearat1(ji,jk) / zvolc(ji,jk,jspoc) 117 solcp(ji,jk,jspos) = solcp(ji,jk,jspos) - zrearat2(ji,jk) / zvolc(ji,jk,jspos) 118 solcp(ji,jk,jspor) = solcp(ji,jk,jspor) - zrearat3(ji,jk) / zvolc(ji,jk,jspor) 119 zreasat = zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) 120 186 121 ! For DIC 187 122 pwcp(ji,jk,jwdic) = pwcp(ji,jk,jwdic) + zreasat 188 123 zsumtot(ji) = zsumtot(ji) + zreasat / dtsed2 * volw3d(ji,jk) * 1.e-3 * 86400. * 365. * 1E3 124 125 ! For alkalinity 126 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + zreasat * ( srno3 - 2.* spo4r ) 127 189 128 ! For Phosphate (in mol/l) 190 129 pwcp(ji,jk,jwpo4) = pwcp(ji,jk,jwpo4) + zreasat * spo4r 130 191 131 ! For iron (in mol/l) 192 132 pwcp(ji,jk,jwfe2) = pwcp(ji,jk,jwfe2) + fecratio(ji) * zreasat 193 ! For alkalinity 194 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + zreasat * ( srno3 * zadsnh4 - 2.* spo4r ) 133 195 134 ! Ammonium 196 135 pwcp(ji,jk,jwnh4) = pwcp(ji,jk,jwnh4) + zreasat * srno3 * zadsnh4 136 197 137 ! Ligands 198 sedligand(ji,jk) = sedligand(ji,jk) + ratligc * zreasat - reac_ligc * sedligand(ji,jk) 138 sedligand(ji,jk) = sedligand(ji,jk) + ratligc * zreasat 139 140 ENDDO 141 ENDDO 142 143 ! left hand side of coefficient matrix 144 DO jk = 2, jpksed 145 DO ji = 1, jpoce 146 zreasat = zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) 147 zbeta = xksedo2 - pwcp(ji,jk,jwoxy) + so2ut * zreasat 148 zgamma = - xksedo2 * pwcp(ji,jk,jwoxy) 149 zundsat(ji,jk) = ( - zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / 2.0 150 zlimo2(ji,jk) = zundsat(ji,jk) / ( zundsat(ji,jk) + xksedo2 ) 151 152 ! Oxygen 153 pwcp(ji,jk,jwoxy) = zundsat(ji,jk) + MIN( pwcp(ji,jk,jwoxy), rtrn ) 154 zreasat = zreasat * zlimo2(ji,jk) 155 156 ! Ligands 157 sedligand(ji,jk) = sedligand(ji,jk) - reac_ligc * sedligand(ji,jk) 199 158 ENDDO 200 159 ENDDO … … 205 164 !-------------------------------------------------------------------- 206 165 207 zrearat1(:,:) = 0. 208 zrearat2(:,:) = 0. 209 zrearat3(:,:) = 0. 210 211 zundsat(:,:) = pwcp(:,:,jwno3) 166 zundsat(:,:) = MAX(0., pwcp(:,:,jwno3) - rtrn) 212 167 213 168 DO jk = 2, jpksed 214 169 DO ji = 1, jpoce 215 zlimno3(ji,jk) = ( 1.0 - pwcp(ji,jk,jwoxy) * zlimo2(ji,jk) ) / ( zundsat(ji,jk) + xksedno3 ) 216 zsolid1 = zvolc(ji,jk,jspoc) * solcp(ji,jk,jspoc) 217 zsolid2 = zvolc(ji,jk,jspos) * solcp(ji,jk,jspos) 218 zsolid3 = zvolc(ji,jk,jspor) * solcp(ji,jk,jspor) 219 zkpoca = zkpoc(ji,jk) * zlimno3(ji,jk) 220 zkpocb = zkpos(ji,jk) * zlimno3(ji,jk) 221 zkpocc = zkpor(ji,jk) * zlimno3(ji,jk) 222 zrearat1(ji,jk) = ( zkpoc(ji,jk) * dtsed2 * zsolid1 ) / & 223 & ( 1. + zkpoca * zundsat(ji,jk ) * dtsed2 ) 224 zrearat2(ji,jk) = ( zkpos(ji,jk) * dtsed2 * zsolid2 ) / & 225 & ( 1. + zkpocb * zundsat(ji,jk ) * dtsed2 ) 226 zrearat3(ji,jk) = ( zkpor(ji,jk) * dtsed2 * zsolid3 ) / & 227 & ( 1. + zkpocc * zundsat(ji,jk ) * dtsed2 ) 228 END DO 229 END DO 230 231 ! DO jn = 1, 5 232 DO jk = 2, jpksed 233 DO ji = 1, jpoce 234 jflag2: DO jn = 1, 10 235 zlimtmp = ( 1.0 - pwcp(ji,jk,jwoxy) * zlimo2(ji,jk) ) 236 zsolid1 = zvolc(ji,jk,jspoc) * solcp(ji,jk,jspoc) 237 zsolid2 = zvolc(ji,jk,jspos) * solcp(ji,jk,jspos) 238 zsolid3 = zvolc(ji,jk,jspor) * solcp(ji,jk,jspor) 239 zbeta = xksedno3 - pwcp(ji,jk,jwno3) + srDnit * ( zrearat1(ji,jk) & 240 & + zrearat2(ji,jk) + zrearat3(ji,jk) ) * zlimtmp 241 zgamma = - xksedno3 * pwcp(ji,jk,jwno3) 242 zundsat2 = zundsat(ji,jk) 243 zundsat(ji,jk) = ( - zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / 2.0 244 zlimno3(ji,jk) = ( 1.0 - pwcp(ji,jk,jwoxy) * zlimo2(ji,jk) ) / ( zundsat(ji,jk) + xksedno3 ) 245 zkpoca = zkpoc(ji,jk) * zlimno3(ji,jk) 246 zkpocb = zkpos(ji,jk) * zlimno3(ji,jk) 247 zkpocc = zkpor(ji,jk) * zlimno3(ji,jk) 248 zrearat1(ji,jk) = ( zkpoc(ji,jk) * dtsed2 * zsolid1 ) / & 249 & ( 1. + zkpoca * zundsat(ji,jk ) * dtsed2 ) 250 zrearat2(ji,jk) = ( zkpos(ji,jk) * dtsed2 * zsolid2 ) / & 251 & ( 1. + zkpocb * zundsat(ji,jk ) * dtsed2 ) 252 zrearat3(ji,jk) = ( zkpor(ji,jk) * dtsed2 * zsolid3 ) / & 253 & ( 1. + zkpocc * zundsat(ji,jk ) * dtsed2 ) 254 IF ( ABS( (zundsat(ji,jk)-zundsat2)/(zundsat2+rtrn)) < 1E-8 ) THEN 255 EXIT jflag2 256 ENDIF 257 END DO jflag2 258 END DO 259 END DO 260 261 262 ! New solid concentration values (jk=2 to jksed) for each couple 263 DO jk = 2, jpksed 264 DO ji = 1, jpoce 265 zreasat = zrearat1(ji,jk) * zlimno3(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspoc) 266 solcp(ji,jk,jspoc) = solcp(ji,jk,jspoc) - zreasat 267 zreasat = zrearat2(ji,jk) * zlimno3(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspos) 268 solcp(ji,jk,jspos) = solcp(ji,jk,jspos) - zreasat 269 zreasat = zrearat3(ji,jk) * zlimno3(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspor) 270 solcp(ji,jk,jspor) = solcp(ji,jk,jspor) - zreasat 271 ENDDO 272 ENDDO 273 274 ! New dissolved concentrations 275 DO jk = 2, jpksed 276 DO ji = 1, jpoce 170 zlimtmp = ( 1.0 - zlimo2(ji,jk) ) 171 zreasat = zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) 172 zbeta = xksedno3 - pwcp(ji,jk,jwno3) + srDnit * zreasat * zlimtmp 173 zgamma = - xksedno3 * pwcp(ji,jk,jwno3) 174 zundsat(ji,jk) = ( - zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / 2.0 175 zlimno3(ji,jk) = zlimtmp * zundsat(ji,jk) / ( zundsat(ji,jk) + xksedno3 ) 176 277 177 ! For nitrates 278 pwcp(ji,jk,jwno3) = zundsat(ji,jk) 279 zreasat = ( zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) ) * zlimno3(ji,jk) * zundsat(ji,jk) 280 ! For DIC 281 pwcp(ji,jk,jwdic) = pwcp(ji,jk,jwdic) + zreasat 282 zsumtot(ji) = zsumtot(ji) + zreasat / dtsed2 * volw3d(ji,jk) * 1.e-3 * 86400. * 365. * 1E3 283 ! For Phosphate (in mol/l) 284 pwcp(ji,jk,jwpo4) = pwcp(ji,jk,jwpo4) + zreasat * spo4r 285 ! Ligands 286 sedligand(ji,jk) = sedligand(ji,jk) + ratligc * zreasat 287 ! For iron (in mol/l) 288 pwcp(ji,jk,jwfe2) = pwcp(ji,jk,jwfe2) + fecratio(ji) * zreasat 178 pwcp(ji,jk,jwno3) = zundsat(ji,jk) + MIN(pwcp(ji,jk,jwno3), rtrn) 179 zreasat = zreasat * zlimno3(ji,jk) 180 289 181 ! For alkalinity 290 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + zreasat * ( srDnit + srno3 * zadsnh4 - 2.* spo4r ) 291 ! Ammonium 292 pwcp(ji,jk,jwnh4) = pwcp(ji,jk,jwnh4) + zreasat * srno3 * zadsnh4 182 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + zreasat * srDnit 293 183 ENDDO 294 184 ENDDO … … 299 189 !-------------------------------------------------------------------- 300 190 301 zrearat1(:,:) = 0. 302 zrearat2(:,:) = 0. 303 zrearat3(:,:) = 0. 304 305 zundsat(:,:) = solcp(:,:,jsfeo) 191 zundsat(:,:) = MAX(0., solcp(:,:,jsfeo) - rtrn) 306 192 307 193 DO jk = 2, jpksed 308 194 DO ji = 1, jpoce 309 zlimfeo(ji,jk) = ( 1.0 - pwcp(ji,jk,jwoxy) * zlimo2(ji,jk) ) * ( 1.0 - pwcp(ji,jk,jwno3) & 310 & / ( pwcp(ji,jk,jwno3) + xksedno3 ) ) / ( zundsat(ji,jk) + xksedfeo ) 311 zsolid1 = zvolc(ji,jk,jspoc) * solcp(ji,jk,jspoc) 312 zsolid2 = zvolc(ji,jk,jspos) * solcp(ji,jk,jspos) 313 zsolid3 = zvolc(ji,jk,jspor) * solcp(ji,jk,jspor) 314 zkpoca = zkpoc(ji,jk) * zlimfeo(ji,jk) 315 zkpocb = zkpos(ji,jk) * zlimfeo(ji,jk) 316 zkpocc = zkpor(ji,jk) * zlimfeo(ji,jk) 317 zrearat1(ji,jk) = ( zkpoc(ji,jk) * dtsed2 * zsolid1 ) / & 318 & ( 1. + zkpoca * zundsat(ji,jk) * dtsed2 ) 319 zrearat2(ji,jk) = ( zkpos(ji,jk) * dtsed2 * zsolid2 ) / & 320 & ( 1. + zkpocb * zundsat(ji,jk) * dtsed2 ) 321 zrearat3(ji,jk) = ( zkpor(ji,jk) * dtsed2 * zsolid3 ) / & 322 & ( 1. + zkpocc * zundsat(ji,jk) * dtsed2 ) 323 END DO 324 END DO 325 326 ! DO jn = 1, 5 327 DO jk = 2, jpksed 328 DO ji = 1, jpoce 329 jflag3: DO jn = 1, 10 330 zlimtmp = ( 1.0 - pwcp(ji,jk,jwoxy) * zlimo2(ji,jk) ) * ( 1.0 - pwcp(ji,jk,jwno3) & 331 & / ( pwcp(ji,jk,jwno3) + xksedno3 ) ) 332 zsolid1 = zvolc(ji,jk,jspoc) * solcp(ji,jk,jspoc) 333 zsolid2 = zvolc(ji,jk,jspos) * solcp(ji,jk,jspos) 334 zsolid3 = zvolc(ji,jk,jspor) * solcp(ji,jk,jspor) 335 zreasat = ( zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) ) / zvolc(ji,jk,jsfeo) 336 zbeta = xksedfeo - solcp(ji,jk,jsfeo) + 4.0 * zreasat * zlimtmp 337 zgamma = -xksedfeo * solcp(ji,jk,jsfeo) 338 zundsat2 = zundsat(ji,jk) 339 zundsat(ji,jk) = ( - zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / 2.0 340 zlimfeo(ji,jk) = ( 1.0 - pwcp(ji,jk,jwoxy) * zlimo2(ji,jk) ) * ( 1.0 - pwcp(ji,jk,jwno3) & 341 & / ( pwcp(ji,jk,jwno3) + xksedno3 ) ) / ( zundsat(ji,jk) + xksedfeo ) 342 zkpoca = zkpoc(ji,jk) * zlimfeo(ji,jk) 343 zkpocb = zkpos(ji,jk) * zlimfeo(ji,jk) 344 zkpocc = zkpor(ji,jk) * zlimfeo(ji,jk) 345 zrearat1(ji,jk) = ( zkpoc(ji,jk) * dtsed2 * zsolid1 ) / & 346 & ( 1. + zkpoca * zundsat(ji,jk) * dtsed2 ) 347 zrearat2(ji,jk) = ( zkpos(ji,jk) * dtsed2 * zsolid2 ) / & 348 & ( 1. + zkpocb * zundsat(ji,jk) * dtsed2 ) 349 zrearat3(ji,jk) = ( zkpor(ji,jk) * dtsed2 * zsolid3 ) / & 350 & ( 1. + zkpocc * zundsat(ji,jk) * dtsed2 ) 351 IF ( ABS( (zundsat(ji,jk)-zundsat2)/( MAX(0.,zundsat2)+rtrn)) < 1E-8 ) THEN 352 EXIT jflag3 353 ENDIF 354 END DO jflag3 355 END DO 356 END DO 357 358 359 ! New solid concentration values (jk=2 to jksed) for each couple 360 DO jk = 2, jpksed 361 DO ji = 1, jpoce 362 zreasat = zrearat1(ji,jk) * zlimfeo(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspoc) 363 solcp(ji,jk,jspoc) = solcp(ji,jk,jspoc) - zreasat 364 zreasat = zrearat2(ji,jk) * zlimfeo(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspos) 365 solcp(ji,jk,jspos) = solcp(ji,jk,jspos) - zreasat 366 zreasat = zrearat3(ji,jk) * zlimfeo(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspor) 367 solcp(ji,jk,jspor) = solcp(ji,jk,jspor) - zreasat 368 END DO 369 END DO 370 371 ! New dissolved concentrations 372 DO jk = 2, jpksed 373 DO ji = 1, jpoce 374 zreasat = ( zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) ) * zlimfeo(ji,jk) * zundsat(ji,jk) 195 zlimtmp = 1.0 - zlimo2(ji,jk) - zlimno3(ji,jk) 196 zreasat = ( zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) ) / zvolc(ji,jk,jsfeo) 197 zbeta = xksedfeo - solcp(ji,jk,jsfeo) + 4.0 * zreasat * zlimtmp 198 zgamma = -xksedfeo * solcp(ji,jk,jsfeo) 199 zundsat(ji,jk) = ( - zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / 2.0 200 zlimfeo(ji,jk) = zlimtmp * zundsat(ji,jk) / ( zundsat(ji,jk) + xksedfeo ) 201 zreasat = ( zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) ) * zlimfeo(ji,jk) 202 375 203 ! For FEOH 376 solcp(ji,jk,jsfeo) = zundsat(ji,jk) 377 ! For DIC 378 pwcp(ji,jk,jwdic) = pwcp(ji,jk,jwdic) + zreasat 379 zsumtot(ji) = zsumtot(ji) + zreasat / dtsed2 * volw3d(ji,jk) * 1.e-3 * 86400. * 365. * 1E3 204 solcp(ji,jk,jsfeo) = zundsat(ji,jk) + MIN(solcp(ji,jk,jsfeo), rtrn) 205 380 206 ! For Phosphate (in mol/l) 381 pwcp(ji,jk,jwpo4) = pwcp(ji,jk,jwpo4) + zreasat * ( spo4r + 4.0 * redfep ) 382 ! Ligands 383 sedligand(ji,jk) = sedligand(ji,jk) + ratligc * zreasat 384 ! For iron (in mol/l) 385 pwcp(ji,jk,jwfe2) = pwcp(ji,jk,jwfe2) + fecratio(ji) * zreasat 207 pwcp(ji,jk,jwpo4) = pwcp(ji,jk,jwpo4) + zreasat * 4.0 * redfep 208 386 209 ! For alkalinity 387 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + zreasat * ( srno3 * zadsnh4 - 2.* spo4r ) +8.0 * zreasat388 ! Ammonium 389 pwcp(ji,jk,jwnh4) = pwcp(ji,jk,jwnh4) + zreasat * srno3 * zadsnh4210 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + 8.0 * zreasat 211 212 ! Iron 390 213 pwcp(ji,jk,jwfe2) = pwcp(ji,jk,jwfe2) + zreasat * 4.0 391 214 ENDDO 392 215 ENDDO 393 216 394 !-------------------------------------------------------------------- 395 ! Begining POC denitrification and NO3- diffusion 396 ! (indice n�5 for couple POC/NO3- ie solcp(:,:,jspoc)/pwcp(:,:,jwno3)) 397 !-------------------------------------------------------------------- 398 399 zrearat1(:,:) = 0. 400 zrearat2(:,:) = 0. 401 zrearat3(:,:) = 0. 402 403 zundsat(:,:) = pwcp(:,:,jwso4) 217 ! !-------------------------------------------------------------------- 218 ! ! Begining POC denitrification and NO3- diffusion 219 ! ! (indice n�5 for couple POC/NO3- ie solcp(:,:,jspoc)/pwcp(:,:,jwno3)) 220 ! !-------------------------------------------------------------------- 221 ! 222 zundsat(:,:) = MAX(0., pwcp(:,:,jwso4) - rtrn) 404 223 405 224 DO jk = 2, jpksed 406 225 DO ji = 1, jpoce 407 zlimso4(ji,jk) = ( 1.0 - pwcp(ji,jk,jwoxy) * zlimo2(ji,jk) ) * ( 1.0 - pwcp(ji,jk,jwno3) & 408 & / ( pwcp(ji,jk,jwno3) + xksedno3 ) ) * ( 1. - solcp(ji,jk,jsfeo) & 409 & / ( solcp(ji,jk,jsfeo) + xksedfeo ) ) / ( zundsat(ji,jk) + xksedso4 ) 410 zsolid1 = zvolc(ji,jk,jspoc) * solcp(ji,jk,jspoc) 411 zsolid2 = zvolc(ji,jk,jspos) * solcp(ji,jk,jspos) 412 zsolid3 = zvolc(ji,jk,jspor) * solcp(ji,jk,jspor) 413 zkpoca = zkpoc(ji,jk) * zlimso4(ji,jk) 414 zkpocb = zkpos(ji,jk) * zlimso4(ji,jk) 415 zkpocc = zkpor(ji,jk) * zlimso4(ji,jk) 416 zrearat1(ji,jk) = ( zkpoc(ji,jk) * dtsed2 * zsolid1 ) / & 417 & ( 1. + zkpoca * zundsat(ji,jk ) * dtsed2 ) 418 zrearat2(ji,jk) = ( zkpos(ji,jk) * dtsed2 * zsolid2 ) / & 419 & ( 1. + zkpocb * zundsat(ji,jk ) * dtsed2 ) 420 zrearat3(ji,jk) = ( zkpor(ji,jk) * dtsed2 * zsolid3 ) / & 421 & ( 1. + zkpocc * zundsat(ji,jk ) * dtsed2 ) 422 END DO 423 END DO 424 ! 425 ! DO jn = 1, 5 426 DO jk = 2, jpksed 427 DO ji = 1, jpoce 428 jflag4: DO jn = 1, 10 429 zlimtmp = ( 1.0 - pwcp(ji,jk,jwoxy) * zlimo2(ji,jk) ) * ( 1.0 - pwcp(ji,jk,jwno3) & 430 & / ( pwcp(ji,jk,jwno3) + xksedno3 ) ) * ( 1. - solcp(ji,jk,jsfeo) & 431 & / ( solcp(ji,jk,jsfeo) + xksedfeo ) ) 432 zsolid1 = zvolc(ji,jk,jspoc) * solcp(ji,jk,jspoc) 433 zsolid2 = zvolc(ji,jk,jspos) * solcp(ji,jk,jspos) 434 zsolid3 = zvolc(ji,jk,jspor) * solcp(ji,jk,jspor) 435 zreasat = ( zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) ) 436 zbeta = xksedso4 - pwcp(ji,jk,jwso4) + 0.5 * zreasat * zlimtmp 437 zgamma = - xksedso4 * pwcp(ji,jk,jwso4) 438 zundsat2 = zundsat(ji,jk) 439 zundsat(ji,jk) = ( - zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / 2.0 440 zlimso4(ji,jk) = ( 1.0 - pwcp(ji,jk,jwoxy) * zlimo2(ji,jk) ) * ( 1.0 - pwcp(ji,jk,jwno3) & 441 & / ( pwcp(ji,jk,jwno3) + xksedno3 ) ) * ( 1. - solcp(ji,jk,jsfeo) & 442 & / ( solcp(ji,jk,jsfeo) + xksedfeo ) ) / ( zundsat(ji,jk) + xksedso4 ) 443 zkpoca = zkpoc(ji,jk) * zlimso4(ji,jk) 444 zkpocb = zkpos(ji,jk) * zlimso4(ji,jk) 445 zkpocc = zkpor(ji,jk) * zlimso4(ji,jk) 446 zrearat1(ji,jk) = ( zkpoc(ji,jk) * dtsed2 * zsolid1 ) / & 447 & ( 1. + zkpoca * zundsat(ji,jk ) * dtsed2 ) 448 zrearat2(ji,jk) = ( zkpos(ji,jk) * dtsed2 * zsolid2 ) / & 449 & ( 1. + zkpocb * zundsat(ji,jk ) * dtsed2 ) 450 zrearat3(ji,jk) = ( zkpor(ji,jk) * dtsed2 * zsolid3 ) / & 451 & ( 1. + zkpocc * zundsat(ji,jk ) * dtsed2 ) 452 IF ( ABS( (zundsat(ji,jk)-zundsat2)/(zundsat2+rtrn)) < 1E-8 ) THEN 453 EXIT jflag4 454 ENDIF 455 END DO jflag4 456 END DO 457 END DO 458 459 ! New solid concentration values (jk=2 to jksed) for each couple 460 DO jk = 2, jpksed 461 DO ji = 1, jpoce 462 zreasat = zrearat1(ji,jk) * zlimso4(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspoc) 463 solcp(ji,jk,jspoc) = solcp(ji,jk,jspoc) - zreasat 464 zreasat = zrearat2(ji,jk) * zlimso4(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspos) 465 solcp(ji,jk,jspos) = solcp(ji,jk,jspos) - zreasat 466 zreasat = zrearat3(ji,jk) * zlimso4(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jspor) 467 solcp(ji,jk,jspor) = solcp(ji,jk,jspor) - zreasat 468 ENDDO 469 ENDDO 470 ! 471 ! New dissolved concentrations 472 DO jk = 2, jpksed 473 DO ji = 1, jpoce 226 zlimtmp = 1.0 - zlimo2(ji,jk) - zlimno3(ji,jk) - zlimfeo(ji,jk) 227 zreasat = zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) 228 zbeta = xksedso4 - pwcp(ji,jk,jwso4) + 0.5 * zreasat * zlimtmp 229 zgamma = - xksedso4 * pwcp(ji,jk,jwso4) 230 zundsat(ji,jk) = ( - zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / 2.0 231 zlimso4(ji,jk) = zlimtmp * zundsat(ji,jk) / ( zundsat(ji,jk) + xksedso4 ) 232 474 233 ! For sulfur 475 pwcp(ji,jk,jwh2s) = pwcp(ji,jk,jwh2s) - ( zundsat(ji,jk) - pwcp(ji,jk,jwso4) ) 476 pwcp(ji,jk,jwso4) = zundsat(ji,jk) 477 zreasat = ( zrearat1(ji,jk) + zrearat2(ji,jk) + zrearat3(ji,jk) ) * zlimso4(ji,jk) * zundsat(ji,jk) 478 ! For DIC 479 pwcp(ji,jk,jwdic) = pwcp(ji,jk,jwdic) + zreasat 480 zsumtot(ji) = zsumtot(ji) + zreasat / dtsed2 * volw3d(ji,jk) * 1.e-3 * 86400. * 365. * 1E3 481 ! For Phosphate (in mol/l) 482 pwcp(ji,jk,jwpo4) = pwcp(ji,jk,jwpo4) + zreasat * spo4r 483 ! Ligands 484 sedligand(ji,jk) = sedligand(ji,jk) + ratligc * zreasat 485 ! For iron (in mol/l) 486 pwcp(ji,jk,jwfe2) = pwcp(ji,jk,jwfe2) + fecratio(ji) * zreasat 234 pwcp(ji,jk,jwso4) = zundsat(ji,jk) + MIN(pwcp(ji,jk,jwso4), rtrn) 235 zreasat = zreasat * zlimso4(ji,jk) 236 pwcp(ji,jk,jwh2s) = pwcp(ji,jk,jwh2s) + 0.5 * zreasat 237 487 238 ! For alkalinity 488 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + zreasat * ( srno3 * zadsnh4 - 2.* spo4r ) + zreasat 489 ! Ammonium 490 pwcp(ji,jk,jwnh4) = pwcp(ji,jk,jwnh4) + zreasat * srno3 * zadsnh4 239 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + zreasat 491 240 ENDDO 492 241 ENDDO … … 496 245 ! Patankar scheme 497 246 ! ------------------------------------------------------------------------------ 498 499 247 call sed_dsr_redoxb 500 248 … … 564 312 !! Arguments 565 313 ! --- local variables 566 INTEGER :: ji, jk, jn ! dummy looop indices314 INTEGER :: ji, jk, jn, jw ! dummy looop indices 567 315 568 316 REAL, DIMENSION(6) :: zsedtrn, zsedtra … … 582 330 zsedtrn(5) = solcp(ji,jk,jsfeo) * zvolc(ji,jk,jsfeo) 583 331 zsedtrn(6) = solcp(ji,jk,jsfes) * zvolc(ji,jk,jsfes) 584 zsedtra(:) = zsedtrn(:)332 zsedtra(:) = MAX(0., zsedtrn(:) - rtrn ) 585 333 586 334 ! First pass of the scheme. At the end, it is 1st order … … 592 340 zdelta = pwcp(ji,jk,jwpo4) - redfep * zsedtra(4) 593 341 IF ( zalpha == 0. ) THEN 594 zsedtra(4) = zsedtra(4) / ( 1.0 + zsedtra(4) * reac_fe2 * dtsed2 / 2.0 ) 595 ELSE 596 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( 0.25 * zsedtra(4) * ( exp( reac_fe2 * zalpha * dtsed2 / 2. ) - 1.0 ) & 342 zsedtra(4) = zsedtra(4) / ( 1.0 + 0.25 * zsedtra(4) * reac_fe2 * dtsed2 / 2.0 ) 343 ELSE 344 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( 0.25 * zsedtra(4) & 345 & * ( exp( reac_fe2 * zalpha * dtsed2 / 2. ) - 1.0 ) & 597 346 & + zalpha * exp( reac_fe2 * zalpha * dtsed2 / 2. ) ) 598 347 ENDIF 599 zsedtra(1) = zalpha + 0.25 * zsedtra(4) 348 zsedtra(1) = zalpha + 0.25 * zsedtra(4) 600 349 zsedtra(5) = zbeta - zsedtra(4) 601 350 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(4) … … 606 355 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(2) 607 356 IF ( zalpha == 0. ) THEN 608 zsedtra(2) = zsedtra(2) / ( 1.0 + zsedtra(2) * reac_h2s * dtsed2 / 2.0 )357 zsedtra(2) = zsedtra(2) / ( 1.0 + 2.0 * zsedtra(2) * reac_h2s * dtsed2 / 2.0 ) 609 358 ELSE 610 359 zsedtra(2) = ( zsedtra(2) * zalpha ) / ( 2.0 * zsedtra(2) * ( exp( reac_h2s * zalpha * dtsed2 / 2. ) - 1.0 ) & … … 615 364 pwcp(ji,jk,jwso4) = zbeta - zsedtra(2) 616 365 ! NH4 + O2 617 zalpha = zsedtra(1) - 2.0 * zsedtra(3) 618 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(3) 619 IF ( zalpha == 0. ) THEN 620 zsedtra(3) = zsedtra(3) / ( 1.0 + zsedtra(3) * reac_nh4 *zadsnh4 * dtsed2 / 2.0 )621 ELSE 622 zsedtra(3) = ( zsedtra(3) * zalpha ) / ( 2.0 * zsedtra(3) * ( exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 / 2. ) - 1.0 ) &623 & + zalpha * exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 /2. ) )624 ENDIF 625 zsedtra(1) = zalpha + 2.0 * zsedtra(3) 626 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(3) 366 zalpha = zsedtra(1) - 2.0 * zsedtra(3) / zadsnh4 367 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(3) /zadsnh4 368 IF ( zalpha == 0. ) THEN 369 zsedtra(3) = zsedtra(3) / ( 1.0 + 2.0 * zsedtra(3) * reac_nh4 / zadsnh4 * dtsed2 / 2.0 ) 370 ELSE 371 zsedtra(3) = ( zsedtra(3) * zalpha * zadsnh4 ) / ( 2.0 * zsedtra(3) * ( exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 / 2. ) - 1.0 ) & 372 & + zalpha * zadsnh4 * exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 /2. ) ) 373 ENDIF 374 zsedtra(1) = zalpha + 2.0 * zsedtra(3) / zadsnh4 375 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(3) / zadsnh4 627 376 ! FeS - O2 628 377 zalpha = zsedtra(1) - 2.0 * zsedtra(6) … … 630 379 zgamma = pwcp(ji,jk,jwso4) + zsedtra(6) 631 380 IF ( zalpha == 0. ) THEN 632 zsedtra(6) = zsedtra(6) / ( 1.0 + zsedtra(6) * reac_feso * dtsed2 / 2.0 )381 zsedtra(6) = zsedtra(6) / ( 1.0 + 2.0 * zsedtra(6) * reac_feso * dtsed2 / 2.0 ) 633 382 ELSE 634 383 zsedtra(6) = ( zsedtra(6) * zalpha ) / ( 2.0 * zsedtra(6) * ( exp( reac_feso * zalpha * dtsed2 / 2. ) - 1.0 ) & … … 658 407 zepsi = pwcp(ji,jk,jwpo4) + redfep * zsedtra(5) 659 408 IF ( zalpha == 0. ) THEN 660 zsedtra(2) = zsedtra(2) / ( 1.0 + zsedtra(2) * reac_feh2s * dtsed2 )409 zsedtra(2) = zsedtra(2) / ( 1.0 + 2.0 * zsedtra(2) * reac_feh2s * dtsed2 ) 661 410 ELSE 662 411 zsedtra(2) = ( zsedtra(2) * zalpha ) / ( 2.0 * zsedtra(2) * ( exp( reac_feh2s * zalpha * dtsed2 ) - 1.0 ) & … … 668 417 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(4) 669 418 pwcp(ji,jk,jwpo4) = zepsi - redfep * zsedtra(5) 670 419 ! Fe - H2S 671 420 zalpha = zsedtra(2) - zsedtra(4) 672 421 zbeta = zsedtra(4) + zsedtra(6) … … 686 435 zgamma = pwcp(ji,jk,jwso4) + zsedtra(6) 687 436 IF (zalpha == 0.) THEN 688 zsedtra(6) = zsedtra(6) / ( 1.0 + zsedtra(6) * reac_feso * dtsed2 / 2. )437 zsedtra(6) = zsedtra(6) / ( 1.0 + 2.0 * zsedtra(6) * reac_feso * dtsed2 / 2. ) 689 438 ELSE 690 439 zsedtra(6) = ( zsedtra(6) * zalpha ) / ( 2.0 * zsedtra(6) * ( exp( reac_feso * zalpha * dtsed2 / 2. ) - 1.0 ) & … … 694 443 zsedtra(4) = zbeta - zsedtra(6) 695 444 pwcp(ji,jk,jwso4) = zgamma - zsedtra(6) 445 696 446 ! NH4 + O2 697 zalpha = zsedtra(1) - 2.0 * zsedtra(3) 698 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(3) 699 IF ( zalpha == 0.) THEN700 zsedtra(3) = zsedtra(3) / ( 1.0 + zsedtra(3) * reac_nh4 * zadsnh4 * dtsed2 / 2.0)701 ELSE 702 zsedtra(3) = ( zsedtra(3) * zalpha ) / ( 2.0 * zsedtra(3) * ( exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 / 2. ) - 1.0 ) &703 & + zalpha * exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 /2. ) )704 ENDIF 705 zsedtra(1) = zalpha + 2.0 * zsedtra(3) 706 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(3) 447 zalpha = zsedtra(1) - 2.0 * zsedtra(3) / zadsnh4 448 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(3) / zadsnh4 449 IF ( zalpha == 0. ) THEN 450 zsedtra(3) = zsedtra(3) / ( 1.0 + 2.0 * zsedtra(3) * reac_nh4 / zadsnh4 * dtsed2 / 2.0 ) 451 ELSE 452 zsedtra(3) = ( zsedtra(3) * zalpha * zadsnh4 ) / ( 2.0 * zsedtra(3) * ( exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 / 2. ) - 1.0 ) & 453 & + zalpha * zadsnh4 * exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 /2. ) ) 454 ENDIF 455 zsedtra(1) = zalpha + 2.0 * zsedtra(3) / zadsnh4 456 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(3) / zadsnh4 707 457 ! H2S + O2 708 458 zalpha = zsedtra(1) - 2.0 * zsedtra(2) … … 710 460 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(2) 711 461 IF ( zalpha == 0. ) THEN 712 zsedtra(2) = zsedtra(2) / ( 1.0 + zsedtra(2) * reac_h2s * dtsed2 / 2.0 )462 zsedtra(2) = zsedtra(2) / ( 1.0 + 2.0 * zsedtra(2) * reac_h2s * dtsed2 / 2.0 ) 713 463 ELSE 714 464 zsedtra(2) = ( zsedtra(2) * zalpha ) / ( 2.0 * zsedtra(2) * ( exp( reac_h2s * zalpha * dtsed2 / 2. ) - 1.0 ) & … … 718 468 pwcp(ji,jk,jwso4) = zbeta - zsedtra(2) 719 469 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(2) 470 720 471 ! Fe + O2 721 472 zalpha = zsedtra(1) - 0.25 * zsedtra(4) … … 724 475 zdelta = pwcp(ji,jk,jwpo4) - redfep * zsedtra(4) 725 476 IF ( zalpha == 0. ) THEN 726 zsedtra(4) = zsedtra(4) / ( 1.0 + zsedtra(4) * reac_fe2 * dtsed2 / 2.0 ) 727 ELSE 728 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( 0.25 * zsedtra(4) * ( exp( reac_fe2 * zalpha * dtsed2 / 2. ) - 1.0 ) & 477 zsedtra(4) = zsedtra(4) / ( 1.0 + 0.25 * zsedtra(4) * reac_fe2 * dtsed2 / 2.0 ) 478 ELSE 479 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( 0.25 * zsedtra(4) & 480 & * ( exp( reac_fe2 * zalpha * dtsed2 / 2. ) - 1.0 ) & 729 481 & + zalpha * exp( reac_fe2 * zalpha * dtsed2 / 2. ) ) 730 482 ENDIF … … 733 485 pwcp(ji,jk,jwpo4) = zdelta + redfep * zsedtra(4) 734 486 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(4) 487 488 ! Update the concentrations after the secondary reactions 489 zsedtra(:) = zsedtra(:) + MIN( zsedtrn(:), rtrn ) 735 490 pwcp(ji,jk,jwoxy) = zsedtra(1) 736 491 pwcp(ji,jk,jwh2s) = zsedtra(2) -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/seddta.F90
r13295 r14385 53 53 54 54 REAL(wp), DIMENSION(jpoce) :: zdtap, zdtag 55 REAL(wp), DIMENSION(jpi,jpj) :: zwsbio4, zwsbio3 55 REAL(wp), DIMENSION(jpi,jpj) :: zwsbio4, zwsbio3, zddust 56 56 REAL(wp) :: zf0, zf1, zf2, zkapp, zratio, zdep 57 57 … … 80 80 ! conv2 = 1.0e+3 / ( 1.0e+4 * rsecday * 30. ) 81 81 conv2 = 1.0e+3 / 1.0e+4 82 rdtsed(2:jpksed) = dtsed / ( denssol * por1(2:jpksed) )83 82 ENDIF 84 83 … … 86 85 zdtap(:) = 0. 87 86 zdtag(:) = 0. 87 zddust(:,:) = 0.0 88 88 89 89 ! reading variables … … 156 156 ! zf1 = MIN(0.98, MAX(0., zf1 ) ) 157 157 zf1 = 0.48 158 zf0 = 1.0 - 0.02 - zf1159 158 zf2 = 0.02 159 zf0 = 1.0 - zf2 - zf1 160 160 rainrm_dta(ji,jspoc) = ( zdtap(ji) + zdtag(ji) ) * 1e-4 * zf0 161 161 rainrm_dta(ji,jspos) = ( zdtap(ji) + zdtag(ji) ) * 1e-4 * zf1 162 162 rainrm_dta(ji,jspor) = ( zdtap(ji) + zdtag(ji) ) * 1e-4 * zf2 163 163 END DO 164 164 165 ! Sinking fluxes for Calcite in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 165 166 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jscal), trc_data(1:jpi,1:jpj,14), iarroce(1:jpoce) ) … … 175 176 rainrm_dta(1:jpoce,jsclay) = rainrm_dta(1:jpoce,jsclay) * conv2 / mol_wgt(jsclay) & 176 177 & + wacc(1:jpoce) * por1(2) * denssol / mol_wgt(jsclay) / ( rsecday * 365.0 ) 177 rainrm_dta(1:jpoce,jsclay) = rainrm_dta(1:jpoce,jsclay) * 0.965 178 rainrm_dta(1:jpoce,jsfeo) = rainrm_dta(1:jpoce,jsclay) * mol_wgt(jsclay) / mol_wgt(jsfeo) * 0.035 / 0.965 178 rainrm_dta(1:jpoce,jsfeo) = rainrm_dta(1:jpoce,jsclay) * mol_wgt(jsclay) / mol_wgt(jsfeo) * 0.035 * 0.5 * 0.333 179 rainrm_dta(1:jpoce,jsclay) = rainrm_dta(1:jpoce,jsclay) * (1.0 - 0.035 * 0.5 * 0.333 ) 180 CALL unpack_arr ( jpoce, zddust(1:jpi,1:jpj), iarroce(1:jpoce), wacc(1:jpoce) ) 181 zddust(:,:) = dust(:,:) + zddust(:,:) / ( rsecday * 365.0 ) * por1(2) * denssol / conv2 182 179 183 ! rainrm_dta(1:jpoce,jsclay) = 1.0E-4 * conv2 / mol_wgt(jsclay) 180 184 … … 209 213 210 214 ! computation of dzdep = total thickness of solid material rained [cm] in each cell 211 dzdep(1:jpoce) = raintg(1:jpoce) * rdtsed(2)215 dzdep(1:jpoce) = raintg(1:jpoce) * dtsed / ( denssol * por1(2) ) 212 216 213 217 IF( lk_iomput ) THEN 214 IF( iom_use("sflxclay" ) ) CALL iom_put( "sflxclay", dust(:,:) * conv2 * 1E4 )215 IF( iom_use("sflxcal" ) ) CALL iom_put( "sflxcal", trc_data(:,:,1 3))216 IF( iom_use("sflxbsi" ) ) CALL iom_put( "sflxbsi", trc_data(:,:,1 0))217 IF( iom_use("sflxpoc" ) ) CALL iom_put( "sflxpoc", trc_data(:,:,11) + trc_data(:,:,12))218 IF( iom_use("sflxclay" ) ) CALL iom_put( "sflxclay", zddust(:,:) * 1E3 / 1.E4 ) 219 IF( iom_use("sflxcal" ) ) CALL iom_put( "sflxcal", trc_data(:,:,14) / 1.E4 ) 220 IF( iom_use("sflxbsi" ) ) CALL iom_put( "sflxbsi", trc_data(:,:,11) / 1.E4 ) 221 IF( iom_use("sflxpoc" ) ) CALL iom_put( "sflxpoc", ( trc_data(:,:,12) + trc_data(:,:,13) ) / 1.E4 ) 218 222 ENDIF 219 223 -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedini.F90
r14086 r14385 43 43 44 44 REAL(wp), PUBLIC :: & 45 redO2 = 1 72. , & !: Redfield coef for Oxygen45 redO2 = 133. , & !: Redfield coef for Oxygen 46 46 redNo3 = 16. , & !: Redfield coef for Nitrate 47 47 redPo4 = 1. , & !: Redfield coef for Phosphate … … 73 73 74 74 REAL(wp), DIMENSION(jpwat), PUBLIC :: diff1 75 DATA diff1/4.59E-6, 1.104E-5, 4.81E-6 , 9.78E-6, 3.58E-6, 4. 01E-6, 9.8E-6, 9.73E-6, 5.0E-6, 3.31E-6 /75 DATA diff1/4.59E-6, 1.104E-5, 4.81E-6 , 9.78E-6, 3.58E-6, 4.81E-6, 9.8E-6, 9.73E-6, 5.0E-6, 3.31E-6 / 76 76 77 77 REAL(wp), DIMENSION(jpwat), PUBLIC :: diff2 78 DATA diff2/1.74E-7, 4.47E-7, 2.51E-7, 3.89E-7, 1.77E-7, 2.5 E-7, 3.89E-7, 3.06E-7, 2.5E-7, 1.5E-7 /78 DATA diff2/1.74E-7, 4.47E-7, 2.51E-7, 3.89E-7, 1.77E-7, 2.51E-7, 3.89E-7, 3.06E-7, 2.5E-7, 1.5E-7 / 79 79 80 80 … … 162 162 ALLOCATE( diff(jpoce,jpksed,jpwat ) ) ; ALLOCATE( irrig(jpoce, jpksed) ) 163 163 ALLOCATE( wacc(jpoce) ) ; ALLOCATE( fecratio(jpoce) ) 164 ALLOCATE( press(jpoce) ) ; ALLOCATE( densSW(jpoce) )165 164 ALLOCATE( hipor(jpoce,jpksed) ) ; ALLOCATE( co3por(jpoce,jpksed) ) 166 165 ALLOCATE( dz3d(jpoce,jpksed) ) ; ALLOCATE( volw3d(jpoce,jpksed) ) ; ALLOCATE( vols3d(jpoce,jpksed) ) 167 ALLOCATE( sedligand(jpoce, jpksed) ) 166 ALLOCATE( sedligand(jpoce, jpksed) ) ; ALLOCATE( saturco3(jpoce,jpksed) ) ; ALLOCATE( densSW(jpoce) ) 168 167 169 168 ! Initialization of global variables 170 pwcp (:,:,:) = 0. ; pwcp0 (:,:,:) = 0. ; pwcp_dta (:,:) = 0.171 solcp (:,:,:) = 0. ; solcp0 (:,:,:) = 0. ; rainrm_dta(:,:) = 0.172 rainrm(:,: ) = 0. ; rainrg (:,: ) = 0. ; raintg (: ) = 0.173 dzdep (: ) = 0. ; iarroce(: ) = 0 ; dzkbot (: ) = 0.174 temp (: ) = 0. ; salt (: ) = 0. ; zkbot (: ) = 0.175 press (: ) = 0. ; densSW (: ) = 0. ; db (:,:)= 0.176 hipor (:,: ) = 0. ; co3por (:,: ) = 0. ; irrig (:,:) = 0.177 dz3d (:,: ) = 0. ; volw3d (:,: ) = 0. ; vols3d (:,:) = 0.169 pwcp (:,:,:) = 0. ; pwcp0 (:,:,:) = 0. ; pwcp_dta (:,:) = 0. 170 solcp (:,:,:) = 0. ; solcp0 (:,:,:) = 0. ; rainrm_dta(:,:) = 0. 171 rainrm(:,: ) = 0. ; rainrg (:,: ) = 0. ; raintg (: ) = 0. 172 dzdep (: ) = 0. ; iarroce(: ) = 0 ; dzkbot (: ) = 0. 173 temp (: ) = 0. ; salt (: ) = 0. ; zkbot (: ) = 0. 174 db (:,: ) = 0. ; densSW (: ) = 0. 175 hipor (:,: ) = 0. ; co3por (:,: ) = 0. ; irrig (:,:) = 0. 176 dz3d (:,: ) = 0. ; volw3d (:,: ) = 0. ; vols3d (:,:) = 0. 178 177 fecratio(:) = 1E-5 179 178 sedligand(:,:) = 0.6E-9 180 179 181 180 ! Chemical variables 182 ALLOCATE( akbs (jpoce) ) ; ALLOCATE( ak1s (jpoce) ) ; ALLOCATE( ak2s (jpoce) ) ; ALLOCATE( akws (jpoce) ) 183 ALLOCATE( ak1ps (jpoce) ) ; ALLOCATE( ak2ps (jpoce) ) ; ALLOCATE( ak3ps (jpoce) ) ; ALLOCATE( aksis (jpoce) ) 184 ALLOCATE( aksps (jpoce) ) ; ALLOCATE( ak12s (jpoce) ) ; ALLOCATE( ak12ps(jpoce) ) ; ALLOCATE( ak123ps(jpoce) ) 185 ALLOCATE( borats(jpoce) ) ; ALLOCATE( calcon2(jpoce) ) ; ALLOCATE( sieqs (jpoce) ) 181 ALLOCATE( akbs (jpoce) ) ; ALLOCATE( ak1s (jpoce) ) ; ALLOCATE( ak2s (jpoce) ) ; ALLOCATE( akws (jpoce) ) 182 ALLOCATE( ak1ps (jpoce) ) ; ALLOCATE( ak2ps (jpoce) ) ; ALLOCATE( ak3ps (jpoce) ) ; ALLOCATE( aksis (jpoce) ) 183 ALLOCATE( aksps (jpoce) ) ; ALLOCATE( ak12s (jpoce) ) ; ALLOCATE( ak12ps(jpoce) ) ; ALLOCATE( ak123ps(jpoce) ) 184 ALLOCATE( borats(jpoce) ) ; ALLOCATE( calcon2(jpoce) ) ; ALLOCATE( sieqs (jpoce) ) 186 185 ALLOCATE( aks3s(jpoce) ) ; ALLOCATE( akf3s(jpoce) ) ; ALLOCATE( sulfats(jpoce) ) 187 186 ALLOCATE( fluorids(jpoce) ) … … 194 193 195 194 ! Mass balance calculation 196 ALLOCATE( fromsed(jpoce, jpsol) ) ; ALLOCATE( tosed(jpoce, jpsol) ) ; ALLOCATE( rloss(jpoce, jpsol) ) 197 ALLOCATE( tokbot (jpoce, jpwat) ) 198 199 fromsed(:,:) = 0. ; tosed(:,:) = 0. ; rloss(:,:) = 0. ; tokbot(:,:) = 0. 195 ALLOCATE( fromsed(jpoce, jpsol) ) ; ALLOCATE( tosed(jpoce, jpsol) ) 196 197 fromsed(:,:) = 0. ; tosed(:,:) = 0. 200 198 201 199 ! Initialization of sediment geometry … … 218 216 ! -------------------------------- 219 217 IF (ln_sediment_offline) THEN 220 CALL trc_dta_ini(jptra)221 218 CALL trc_dmp_sed_ini 222 219 ENDIF … … 370 367 denssol = 2.6 371 368 372 ! Initialization of diffusion coefficient as function of porosity [cm**2/s]373 !--------------------------------------------------------------------374 ! DO jn = 1, jpsol375 ! DO jk = 1, jpksed376 ! DO ji = 1, jpoce377 ! diff(ji,jk,jn) = dcoef / ( 1.0 - 2.0 * log(por(jk)) )378 ! END DO379 ! END DO380 ! END DO381 382 369 ! Accumulation rate from Burwicz et al. (2011). This is used to 383 370 ! compute the flux of clays and minerals … … 386 373 ztmp1 = 0.117 / ( 1.0 + ( zkbot(ji) / 200.)**3 ) 387 374 ztmp2 = 0.006 / ( 1.0 + ( zkbot(ji) / 4000.)**10 ) 388 wacc(ji) = ztmp1 + ztmp2 375 wacc(ji) = (ztmp1 + ztmp2)/10.0 376 wacc(ji) = ztmp2 / 10.0 389 377 END DO 390 378 -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedinorg.F90
r12839 r14385 23 23 CONTAINS 24 24 25 SUBROUTINE sed_inorg( kt )25 SUBROUTINE sed_inorg( kt, knt ) 26 26 !!---------------------------------------------------------------------- 27 27 !! *** ROUTINE sed_inorg *** … … 46 46 !!---------------------------------------------------------------------- 47 47 !! Arguments 48 INTEGER, INTENT(in) :: kt ! number of iteration48 INTEGER, INTENT(in) :: kt, knt ! number of iteration 49 49 ! --- local variables 50 50 INTEGER :: ji, jk, js, jw ! dummy looop indices … … 54 54 REAL(wp), DIMENSION(jpoce,jpksed,jpsol) :: zvolc ! temp. variables 55 55 REAL(wp), DIMENSION(jpoce) :: zsieq 56 REAL(wp) :: zsolid1, zvolw, zreasat 56 REAL(wp) :: zsolid1, zvolw, zreasat, zbeta, zgamma 57 57 REAL(wp) :: zsatur, zsatur2, znusil, zsolcpcl, zsolcpsi 58 58 !! … … 61 61 IF( ln_timing ) CALL timing_start('sed_inorg') 62 62 ! 63 IF( kt == nitsed000 ) THEN63 IF( kt == nitsed000 .AND. knt == 1 ) THEN 64 64 IF (lwp) THEN 65 65 WRITE(numsed,*) ' sed_inorg : Dissolution reaction ' … … 73 73 74 74 zrearat1(:,:) = 0. ; zundsat(:,:) = 0. 75 zrearat2(:,:) = 0. ; zrearat2(:,:) = 0.75 zrearat2(:,:) = 0. 76 76 zco3eq(:) = rtrn 77 77 zvolc(:,:,:) = 0. … … 86 86 zsolcpsi = 0.0 87 87 DO jk = 1, jpksed 88 zsolcpsi = zsolcpsi + solcp(ji,jk,jsopal) * dz(jk)89 zsolcpcl = zsolcpcl + solcp(ji,jk,jsclay) * dz(jk)88 zsolcpsi = zsolcpsi + solcp(ji,jk,jsopal) * vols3d(ji,jk) 89 zsolcpcl = zsolcpcl + solcp(ji,jk,jsclay) * vols3d(ji,jk) 90 90 END DO 91 91 zsolcpsi = MAX( zsolcpsi, rtrn ) … … 135 135 DO jk = 2, jpksed 136 136 DO ji = 1, jpoce 137 zsolid1 = zvolc(ji,jk,jsopal) * solcp(ji,jk,jsopal) 138 zsatur = MAX(0., zundsat(ji,jk) / zsieq(ji) ) 139 zsatur2 = (1.0 + temp(ji) / 400.0 )**37 140 znusil = ( 0.225 * ( 1.0 + temp(ji) / 15.) + 0.775 * zsatur2 * zsatur**2.25 ) / zsieq(ji) 141 zrearat1(ji,jk) = ( reac_sil * znusil * dtsed * zsolid1 ) / & 142 & ( 1. + reac_sil * znusil * dtsed * zundsat(ji,jk) ) 143 ENDDO 144 ENDDO 145 146 CALL sed_mat( jwsil, jpoce, jpksed, zrearat1, zrearat2, zundsat, dtsed ) 147 148 ! New solid concentration values (jk=2 to jksed) for each couple 149 DO jk = 2, jpksed 150 DO ji = 1, jpoce 151 zreasat = zrearat1(ji,jk) * zundsat(ji,jk) / ( zvolc(ji,jk,jsopal) ) 152 solcp(ji,jk,jsopal) = solcp(ji,jk,jsopal) - zreasat 153 ENDDO 154 ENDDO 155 156 ! New pore water concentrations 157 DO jk = 1, jpksed 158 DO ji = 1, jpoce 159 ! Acid Silicic 160 pwcp(ji,jk,jwsil) = zsieq(ji) - zundsat(ji,jk) 137 IF ( zundsat(ji,jk) > 0. ) THEN 138 zsolid1 = zvolc(ji,jk,jsopal) * solcp(ji,jk,jsopal) 139 zsatur = zundsat(ji,jk) / zsieq(ji) 140 zsatur2 = (1.0 + temp(ji) / 400.0 )**37 141 znusil = ( 0.225 * ( 1.0 + temp(ji) / 15.) + 0.775 * zsatur2 * zsatur**8.25 ) / zsieq(ji) 142 zbeta = 1.0 - reac_sil * znusil * dtsed2 * zundsat(ji,jk) + reac_sil * znusil * dtsed2 * zsolid1 143 zgamma = - reac_sil * znusil * dtsed2 * zundsat(ji,jk) 144 zundsat(ji,jk) = ( - zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / ( 2.0 * reac_sil * znusil * dtsed2 ) 145 solcp(ji,jk,jsopal ) = zsolid1 / ( 1. + reac_sil * znusil * dtsed2 * zundsat(ji,jk) ) / zvolc(ji,jk,jsopal) 146 pwcp(ji,jk,jwsil) = zsieq(ji) - zundsat(ji,jk) 147 ENDIF 161 148 ENDDO 162 149 ENDDO … … 175 162 zco3eq(ji) = aksps(ji) * densSW(ji) * densSW(ji) / ( calcon2(ji) + rtrn ) 176 163 zco3eq(ji) = MAX( rtrn, zco3eq(ji) ) 177 zundsat(ji,jk) = MAX(0., zco3eq(ji) - co3por(ji,jk) ) 164 zundsat(ji,jk) = ( zco3eq(ji) - co3por(ji,jk) ) / zco3eq(ji) 165 saturco3(ji,jk) = zundsat(ji,jk) 178 166 ENDDO 179 167 ENDDO … … 181 169 DO jk = 2, jpksed 182 170 DO ji = 1, jpoce 183 zsolid1 = zvolc(ji,jk,jscal) * solcp(ji,jk,jscal) 184 zrearat1(ji,jk) = ( reac_cal * dtsed * zsolid1 / zco3eq(ji) ) / & 185 & ( 1. + reac_cal * dtsed * zundsat(ji,jk) / zco3eq(ji) ) 171 IF ( zundsat(ji,jk) > 0. ) THEN 172 zsolid1 = zvolc(ji,jk,jscal) * solcp(ji,jk,jscal) 173 zbeta = 1.0 - reac_cal * dtsed2 * zundsat(ji,jk) + reac_cal * dtsed2 * zsolid1 174 zgamma = -reac_cal * dtsed2 * zundsat(ji,jk) 175 zundsat(ji,jk) = ( -zbeta + SQRT( zbeta**2 - 4.0 * zgamma ) ) / ( 2.0 * reac_cal * dtsed2 ) 176 saturco3(ji,jk) = zundsat(ji,jk) 177 zreasat = reac_cal * dtsed2 * zundsat(ji,jk) * zsolid1 / ( 1. + reac_cal * dtsed2 * zundsat(ji,jk) ) 178 solcp(ji,jk,jscal) = solcp(ji,jk,jscal) - zreasat / zvolc(ji,jk,jscal) 179 ! For DIC 180 pwcp(ji,jk,jwdic) = pwcp(ji,jk,jwdic) + zreasat 181 ! For alkalinity 182 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + 2.0 * zreasat 183 ENDIF 186 184 END DO 187 185 END DO 188 189 ! solves tridiagonal system190 CALL sed_mat( jwdic, jpoce, jpksed, zrearat1, zrearat2, zundsat, dtsed )191 192 ! New solid concentration values (jk=2 to jksed) for cacO3193 DO jk = 2, jpksed194 DO ji = 1, jpoce195 zreasat = zrearat1(ji,jk) * zundsat(ji,jk) / zvolc(ji,jk,jscal)196 solcp(ji,jk,jscal) = solcp(ji,jk,jscal) - zreasat197 ENDDO198 ENDDO199 200 ! New dissolved concentrations201 DO jk = 1, jpksed202 DO ji = 1, jpoce203 zreasat = zrearat1(ji,jk) * zundsat(ji,jk)204 ! For DIC205 pwcp(ji,jk,jwdic) = pwcp(ji,jk,jwdic) + zreasat206 ! For alkalinity207 pwcp(ji,jk,jwalk) = pwcp(ji,jk,jwalk) + 2.0 * zreasat208 ENDDO209 ENDDO210 211 !-------------------------------------------------212 ! Beginning DIC, Alkalinity213 !-------------------------------------------------214 215 DO jk = 1, jpksed216 DO ji = 1, jpoce217 zundsat(ji,jk) = pwcp(ji,jk,jwdic)218 zrearat1(ji,jk) = 0.219 ENDDO220 ENDDO221 222 ! solves tridiagonal system223 CALL sed_mat( jwdic, jpoce, jpksed, zrearat1, zrearat2, zundsat, dtsed )224 225 ! New dissolved concentrations226 DO jk = 1, jpksed227 DO ji = 1, jpoce228 pwcp(ji,jk,jwdic) = zundsat(ji,jk)229 ENDDO230 ENDDO231 232 !-------------------------------------------------233 ! Beginning DIC, Alkalinity234 !-------------------------------------------------235 236 DO jk = 1, jpksed237 DO ji = 1, jpoce238 zundsat(ji,jk) = pwcp(ji,jk,jwalk)239 zrearat1(ji,jk) = 0.240 ENDDO241 ENDDO242 !243 ! ! solves tridiagonal system244 CALL sed_mat( jwalk, jpoce, jpksed, zrearat1, zrearat2, zundsat, dtsed )245 !246 ! ! New dissolved concentrations247 DO jk = 1, jpksed248 DO ji = 1, jpoce249 pwcp(ji,jk,jwalk) = zundsat(ji,jk)250 ENDDO251 ENDDO252 253 !----------------------------------254 ! Back to initial geometry255 !-----------------------------256 257 !---------------------------------------------------------------------258 ! 1/ Compensation for ajustement of the bottom water concentrations259 ! (see note n° 1 about *por(2))260 !--------------------------------------------------------------------261 DO jw = 1, jpwat262 DO ji = 1, jpoce263 pwcp(ji,1,jw) = pwcp(ji,1,jw) + &264 & pwcp(ji,2,jw) * dzdep(ji) * por(2) / dzkbot(ji)265 END DO266 ENDDO267 268 !-----------------------------------------------------------------------269 ! 2/ Det of new rainrg taking account of the new weight fraction obtained270 ! in dz3d(2) after diffusion/reaction (react/diffu are also in dzdep!)271 ! This new rain (rgntg rm) will be used in advection/burial routine272 !------------------------------------------------------------------------273 DO js = 1, jpsol274 DO ji = 1, jpoce275 rainrg(ji,js) = raintg(ji) * solcp(ji,2,js)276 rainrm(ji,js) = rainrg(ji,js) / mol_wgt(js)277 END DO278 ENDDO279 280 ! New raintg281 raintg(:) = 0.282 DO js = 1, jpsol283 DO ji = 1, jpoce284 raintg(ji) = raintg(ji) + rainrg(ji,js)285 END DO286 ENDDO287 288 !--------------------------------289 ! 3/ back to initial geometry290 !--------------------------------291 DO ji = 1, jpoce292 dz3d (ji,2) = dz(2)293 volw3d(ji,2) = dz3d(ji,2) * por(2)294 vols3d(ji,2) = dz3d(ji,2) * por1(2)295 ENDDO296 186 297 187 IF( ln_timing ) CALL timing_stop('sed_inorg') -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedstp.F90
r13970 r14385 8 8 USE sedchem ! chemical constant 9 9 USE sedco3 ! carbonate in sediment pore water 10 USE sedorg ! Organic reactions and diffusion 11 USE sedinorg ! Inorganic dissolution 10 USE sedsol ! Organic reactions and diffusion 12 11 USE sedbtb ! bioturbation 13 12 USE sedadv ! vertical advection 14 USE sedmbc ! mass balance calculation15 13 USE sedsfc ! sediment surface data 16 14 USE sedrst ! restart … … 46 44 INTEGER, INTENT(in) :: kt ! number of iteration 47 45 INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 48 INTEGER :: ji,jk,js,jn,jw49 46 !!---------------------------------------------------------------------- 50 IF( ln_timing ) CALL timing_start('sed_stp')47 IF( ln_timing ) CALL timing_start('sed_stp') 51 48 ! 52 49 CALL sed_rst_opn ( kt ) ! Open tracer restart file … … 66 63 ENDIF 67 64 68 CALL sed_btb( kt ) ! 1st pass of bioturbation at t+1/2 69 CALL sed_org( kt ) ! Organic related reactions and diffusion 70 CALL sed_inorg( kt ) ! Dissolution reaction 71 CALL sed_btb( kt ) ! 2nd pass of bioturbation at t+1 72 tokbot(:,:) = 0.0 73 DO jw = 1, jpwat 74 DO ji = 1, jpoce 75 tokbot(ji,jw) = pwcp(ji,1,jw) * 1.e-3 * dzkbot(ji) 76 END DO 77 ENDDO 65 CALL sed_btb( kt ) ! 1st pass of bioturbation at t+1/2 66 CALL sed_sol( kt ) ! Solute diffusion and reactions 67 CALL sed_btb( kt ) ! 2nd pass of bioturbation at t+1 78 68 CALL sed_adv( kt ) ! advection 79 69 CALL sed_co3( kt ) ! pH actualization for saving 80 ! This routine is commented out since it does not work at all81 CALL sed_mbc( kt ) ! cumulation for mass balance calculation82 83 70 IF (ln_sed_2way) CALL sed_sfc( kt, Kbb ) ! Give back new bottom wat chem to tracer model 84 71 ENDIF -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedwri.F90
r14086 r14385 54 54 IF (lwp) WRITE(numsed,*) ' ' 55 55 56 ALLOCATE( zdta(jpoce,jpksed) ) ; ALLOCATE( zflx(jpoce,jp watp1) )56 ALLOCATE( zdta(jpoce,jpksed) ) ; ALLOCATE( zflx(jpoce,jptrased+1) ) 57 57 58 58 ! Initialize variables … … 88 88 CALL unpack_arr( jpoce, flxsedi3d(1:jpi,1:jpj,1:jpksed,2) , iarroce(1:jpoce), & 89 89 & co3por(1:jpoce,1:jpksed) ) 90 91 CALL unpack_arr( jpoce, flxsedi3d(1:jpi,1:jpj,1:jpksed,3) , iarroce(1:jpoce), & 92 & sedligand(1:jpoce,1:jpksed) ) 93 94 CALL unpack_arr( jpoce, flxsedi3d(1:jpi,1:jpj,1:jpksed,4) , iarroce(1:jpoce), & 95 & saturco3(1:jpoce,1:jpksed) ) 96 90 97 91 98 ! flxsedi3d = 0. … … 95 102 DO ji = 1, jpoce 96 103 zflx(ji,jw) = ( pwcp(ji,1,jw) - pwcp_dta(ji,jw) ) & 97 & * 1.e3 / 1.e2 * dzkbot(ji) / rDt_trc 104 & * 1.e3 * ( 1.e-2 * dzkbot(ji) ) / 1.E4 / rDt_trc 105 ENDDO 106 ENDDO 107 108 ! Calculation of fluxes g/cm2/s 109 DO js = 1, jpsol 110 zrate = 1.0 / rDt_trc 111 DO ji = 1, jpoce 112 zflx(ji,jpwat+js) = zflx(ji,jpwat+js) + ( tosed(ji,js) - fromsed(ji,js) ) * zrate 98 113 ENDDO 99 114 ENDDO … … 101 116 ! Calculation of accumulation rate per dt 102 117 DO js = 1, jpsol 103 zrate = 1.0 / ( denssol * por1(jpksed) ) /rDt_trc118 zrate = 1.0 / rDt_trc 104 119 DO ji = 1, jpoce 105 zflx(ji,jp watp1) = zflx(ji,jpwatp1) + ( tosed(ji,js) - fromsed(ji,js) ) * zrate120 zflx(ji,jptrased+1) = zflx(ji,jptrased+1) + ( tosed(ji,js) - fromsed(ji,js) ) * zrate 106 121 ENDDO 107 122 ENDDO … … 110 125 CALL unpack_arr( jpoce, flxsedi2d(1:jpi,1:jpj,jn), iarroce(1:jpoce), zflx(1:jpoce,jn) ) 111 126 END DO 127 112 128 zflx(:,1) = dzdep(:) / dtsed 113 129 CALL unpack_arr( jpoce, flxsedi2d(1:jpi,1:jpj,jpdia2dsed), iarroce(1:jpoce), zflx(1:jpoce,1) ) 114 130 115 116 117 118 119 120 131 ! Start writing data 132 ! --------------------- 133 DO jn = 1, jptrased 134 cltra = sedtrcd(jn) ! short title for 3D diagnostic 135 CALL iom_put( cltra, trcsedi(:,:,:,jn) ) 136 END DO 121 137 122 123 124 125 138 DO jn = 1, jpdia3dsed 139 cltra = seddia3d(jn) ! short title for 3D diagnostic 140 CALL iom_put( cltra, flxsedi3d(:,:,:,jn) ) 141 END DO 126 142 127 128 129 130 143 DO jn = 1, jpdia2dsed 144 cltra = seddia2d(jn) ! short title for 2D diagnostic 145 CALL iom_put( cltra, flxsedi2d(:,:,jn) ) 146 END DO 131 147 132 148 -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/par_pisces.F90
r12377 r14385 11 11 12 12 ! productive layer depth 13 INTEGER, PUBLIC :: jpkb 14 INTEGER, PUBLIC :: jpkbm1 13 INTEGER, PUBLIC :: jpkb !: first vertical layers where biology is active 14 INTEGER, PUBLIC :: jpkbm1 !: first vertical layers where biology is active 15 15 16 16 ! assign an index in trc arrays for each LOBSTER prognostic variables -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/sms_pisces.F90
r12377 r14385 2 2 !!---------------------------------------------------------------------- 3 3 !! *** sms_pisces.F90 *** 4 !! TOP : PISCES Source Minus Sink variables 4 !! TOP : PISCES Source Minus Sink variables are declared and allocated 5 5 !!---------------------------------------------------------------------- 6 6 !! History : 1.0 ! 2000-02 (O. Aumont) original code … … 17 17 INTEGER :: numonp = -1 !! Logical unit for namelist pisces output 18 18 19 ! !: PISCES : silicon dependant half saturation20 21 19 !!* Model used 22 20 LOGICAL :: ln_p2z !: Flag to use LOBSTER model … … 27 25 28 26 !!* Time variables 29 INTEGER :: nrdttrc !: ??? 30 REAL(wp) :: rfact , rfactr !: ??? 31 REAL(wp) :: rfact2, rfact2r !: ??? 32 REAL(wp) :: xstep !: Time step duration for biology 33 REAL(wp) :: ryyss !: number of seconds per year 34 REAL(wp) :: r1_ryyss !: inverse number of seconds per year 35 27 INTEGER :: nrdttrc !: ??? 28 REAL(wp) :: rfact , rfactr !: time step duration (in seconds) 29 REAL(wp) :: rfact2, rfact2r !: time step duration (in seconds) when timesplitting is activated for PISCES 30 REAL(wp) :: xstep !: Time step duration for biology 31 REAL(wp) :: ryyss !: number of seconds per year 32 REAL(wp) :: r1_ryyss !: inverse number of seconds per year 36 33 37 34 !!* Biological parameters 38 REAL(wp) :: rno3 !: ???39 REAL(wp) :: o2ut !: ???40 REAL(wp) :: po4r !: ???41 REAL(wp) :: rdenit !: ???42 REAL(wp) :: rdenita !: ???43 REAL(wp) :: o2nit !: ???44 REAL(wp) :: wsbio, wsbio2 !: ???45 REAL(wp) :: wsbio2max !: ???46 REAL(wp) :: wsbio2scale !: ???47 REAL(wp) :: xkmort !: ???48 REAL(wp) :: ferat 3 !: ???49 REAL(wp) :: ldocp !: ???50 REAL(wp) :: ldoc z !: ???51 REAL(wp) :: l thet !: ???52 REAL(wp) :: no3rat3 !: ???53 REAL(wp) :: po4rat3 !: ???54 35 REAL(wp) :: rno3 !: C/N stoichiometric ratio 36 REAL(wp) :: o2ut !: O2/N stoichiometric ratio for ammonification 37 REAL(wp) :: po4r !: C/P stoichiometric ratio 38 REAL(wp) :: rdenit !: C/N ratio for denitrification 39 REAL(wp) :: rdenita !: C/N ratio for denitrification 40 REAL(wp) :: o2nit !: O2/N ratio for nitrification 41 REAL(wp) :: wsbio, wsbio2 !: Sinking speeds of particles 42 REAL(wp) :: wsbio2max !: Maximum sinking speed of the largest particles 43 REAL(wp) :: wsbio2scale !: Length scale for the variations of wsbio2 44 REAL(wp) :: xkmort !: Mortality half-saturation constant 45 REAL(wp) :: feratz !: Fe/C in microzooplankton 46 REAL(wp) :: feratm !: Fe/C in mesozooplankton 47 REAL(wp) :: ldocp !: Ligand production ratio during PP 48 REAL(wp) :: ldocz !: Ligand production ratio by grazing 49 REAL(wp) :: lthet !: Uptake of ligand by phytoplankton 50 REAL(wp) :: no3rat3 !: C/N ratio of zooplankton 51 REAL(wp) :: po4rat3 !: C/P ratio of zooplankton 55 52 56 53 !!* diagnostic parameters 57 REAL(wp) :: tpp 58 REAL(wp) :: t_oce_co2_exp 59 REAL(wp) :: t_oce_co2_flx 60 REAL(wp) :: t_oce_co2_flx_cum 61 REAL(wp) :: t_atm_co2_flx 54 REAL(wp) :: tpp !: total primary production 55 REAL(wp) :: t_oce_co2_exp !: total carbon export 56 REAL(wp) :: t_oce_co2_flx !: Total ocean carbon flux 57 REAL(wp) :: t_oce_co2_flx_cum !: Cumulative Total ocean carbon flux 58 REAL(wp) :: t_atm_co2_flx !: global mean of atmospheric pco2 62 59 63 60 !!* restoring 64 LOGICAL :: ln_pisdmp 65 INTEGER :: nn_pisdmp 61 LOGICAL :: ln_pisdmp !: restoring or not of nutrients to a mean value 62 INTEGER :: nn_pisdmp !: frequency of relaxation or not of nutrients to a mean value 66 63 67 64 !!* Mass conservation 68 LOGICAL :: ln_check_mass 69 LOGICAL 65 LOGICAL :: ln_check_mass !: Flag to check mass conservation 66 LOGICAL, PUBLIC :: ln_ironice !: boolean for Fe input from sea ice 70 67 71 68 !!* Biological fluxes for light : variables shared by pisces & lobster 72 69 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: neln !: number of T-levels + 1 in the euphotic layer 73 70 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: heup !: euphotic layer depth 71 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,: ) :: strn !: Day duration in hours 74 72 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot !: par (photosynthetic available radiation) 75 73 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy !: PAR over 24h in case of diurnal cycle 76 74 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat !: PAR for phyto, nano and diat 77 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enanom, ediatm !: PAR for phyto, nano and diat75 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enanom, ediatm !: mean PAR for phyto, nano and diat 78 76 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epico !: PAR for pico 79 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epicom !: PAR for pico80 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy 77 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epicom !: mean PAR for pico 78 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy, etotm !: averaged PAR in the mixed layer 81 79 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: heup_01 !: Absolute euphotic layer depth 82 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksi !: LOBSTER : zooplakton closure80 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksi !: Half-saturation con,stant for diatoms 83 81 84 82 !!* Biological fluxes for primary production 85 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksimax !: ???83 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksimax !: Maximum half-saturation constant over the year (Si) 86 84 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: biron !: bioavailable fraction of iron 87 85 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: plig !: proportion of iron organically complexed … … 92 90 93 91 !!* SMS for the organic matter 94 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xfracal !: ??95 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac !: ??96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac2 !: ??97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: orem !: ??98 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiss !: ??92 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xfracal !: Fraction of nanophytoplankton that are calcifying organisms 93 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac !: OMZ 94 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac2 !: N depleted indice 95 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: orem !: oxic remineralisation 96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiss !: Shear rate 99 97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodcal !: Calcite production 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodpoc !: Calcite production 101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: conspoc !: Calcite production 102 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodgoc !: Calcite production 103 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consgoc !: Calcite production 98 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodpoc !: POC production 99 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: conspoc !: POC consumption 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodgoc !: GOC production 101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consgoc !: GOC consumption 102 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consfe3 !: GOC consumption 104 103 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: blim !: bacterial production factor 105 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizen !: size of diatoms106 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizep !: size of diatoms104 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizen !: size of nanophyto 105 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizep !: size of picophyto 107 106 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sized !: size of diatoms 108 107 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizena !: size of nanophytoplankton, after 108 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizepa !: size of picophyto, after 109 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizeda !: size of diatomss, after 109 110 110 111 !!* Variable for chemistry of the CO2 cycle 111 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak13 !: ???112 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak23 !: ???113 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aksp !: ???114 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hi !: ???115 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: excess !: ???112 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak13 !: Carbonate chemistry constant 113 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak23 !: Carbonate chemistry constant 114 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aksp !: Solubility product of CaCO3 115 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hi !: Proton concentration 116 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: excess !: CO3 saturation 116 117 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aphscale !: 117 118 … … 135 136 !!---------------------------------------------------------------------- 136 137 USE lib_mpp , ONLY: ctl_stop 137 INTEGER :: ierr(1 0) ! Local variables138 INTEGER :: ierr(11) ! Local variables 138 139 !!---------------------------------------------------------------------- 139 140 ierr(:) = 0 140 !* Biological fluxes for light : shared variables for pisces & lobster 141 ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj), & 142 & heup_01(jpi,jpj) , xksi(jpi,jpj) , STAT=ierr(1) ) 143 ! 144 141 ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj), & 142 & heup_01(jpi,jpj) , xksi(jpi,jpj), strn(jpi,jpj), STAT=ierr(1) ) 143 145 144 IF( ln_p4z .OR. ln_p5z ) THEN 146 !* Biological fluxes for light 145 146 !* Optics 147 147 ALLOCATE( enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk) , & 148 148 & enanom(jpi,jpj,jpk) , ediatm(jpi,jpj,jpk), & 149 & etot_ndcy(jpi,jpj,jpk), emoy(jpi,jpj,jpk) , STAT=ierr(2) ) 149 & etot_ndcy(jpi,jpj,jpk), emoy(jpi,jpj,jpk) , & 150 & etotm(jpi,jpj,jpk), STAT=ierr(2) ) 150 151 151 !* Biological fluxes for primary production152 !* Biological SMS 152 153 ALLOCATE( xksimax(jpi,jpj) , biron(jpi,jpj,jpk) , STAT=ierr(3) ) 153 ! 154 ! * SMS for the organic matter154 155 ! Biological SMS 155 156 ALLOCATE( xfracal (jpi,jpj,jpk), orem(jpi,jpj,jpk) , & 156 & nitrfac(jpi,jpj,jpk) , nitrfac2(jpi,jpj,jpk), &157 & nitrfac(jpi,jpj,jpk) , nitrfac2(jpi,jpj,jpk), & 157 158 & prodcal(jpi,jpj,jpk) , xdiss (jpi,jpj,jpk), & 158 159 & prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) , & 159 160 & prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) , & 160 & blim (jpi,jpj,jpk) , 161 & blim (jpi,jpj,jpk) , consfe3(jpi,jpj,jpk) , STAT=ierr(4) ) 161 162 162 !* Variable for chemistry of the CO2 cycle163 ALLOCATE( ak13 (jpi,jpj,jpk) ,&163 !* Carbonate chemistry 164 ALLOCATE( ak13 (jpi,jpj,jpk) , & 164 165 & ak23(jpi,jpj,jpk) , aksp (jpi,jpj,jpk) , & 165 166 & hi (jpi,jpj,jpk) , excess(jpi,jpj,jpk) , & 166 167 & aphscale(jpi,jpj,jpk), STAT=ierr(5) ) 167 168 ! 168 !* Temperature depend ancy of SMS terms169 ALLOCATE( tgfunc (jpi,jpj,jpk), tgfunc2(jpi,jpj,jpk), STAT=ierr(6) )169 !* Temperature dependency of SMS terms 170 ALLOCATE( tgfunc (jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk), STAT=ierr(6) ) 170 171 ! 171 !* Sinkong speed 172 ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk), & 173 & STAT=ierr(7) ) 172 !* Sinking speed 173 ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk), STAT=ierr(7) ) 174 175 !* Size of phytoplankton cells 176 ALLOCATE( sizen (jpi,jpj,jpk), sized (jpi,jpj,jpk), & 177 & sizena(jpi,jpj,jpk), sizeda(jpi,jpj,jpk), STAT=ierr(8) ) 174 178 ! 175 IF( ln_ligand ) THEN 176 ALLOCATE( plig(jpi,jpj,jpk) , STAT=ierr(8) ) 177 ENDIF 179 ALLOCATE( plig(jpi,jpj,jpk) , STAT=ierr(9) ) 178 180 ENDIF 179 181 ! 180 182 IF( ln_p5z ) THEN 181 ! 182 ALLOCATE( epico(jpi,jpj,jpk) , epicom(jpi,jpj,jpk) , STAT=ierr( 9) )183 ! PISCES-QUOTA specific part 184 ALLOCATE( epico(jpi,jpj,jpk) , epicom(jpi,jpj,jpk) , STAT=ierr(10) ) 183 185 184 186 !* Size of phytoplankton cells 185 ALLOCATE( sizen(jpi,jpj,jpk), sizep(jpi,jpj,jpk), & 186 & sized(jpi,jpj,jpk), STAT=ierr(10) ) 187 ALLOCATE( sizep(jpi,jpj,jpk), sizepa(jpi,jpj,jpk), STAT=ierr(11) ) 187 188 ENDIF 188 189 ! -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/trcini_pisces.F90
r14086 r14385 3 3 !! *** MODULE trcini_pisces *** 4 4 !! TOP : initialisation of the PISCES biochemical model 5 !! This module is for LOBSTER, PISCES and PISCES-QUOTA 5 6 !!====================================================================== 6 7 !! History : - ! 1988-07 (E. Maier-Reiner) Original code … … 37 38 !! 38 39 !! ** Purpose : Initialisation of the PISCES biochemical model 40 !! Allocation of the dynamic arrays 39 41 !!---------------------------------------------------------------------- 40 42 INTEGER, INTENT(in) :: Kmm ! time level indices 41 43 ! 44 ! Read the PISCES namelist 42 45 CALL trc_nam_pisces 43 46 ! … … 55 58 !! ** Purpose : Initialisation of the PISCES biochemical model 56 59 !!---------------------------------------------------------------------- 57 USE p4zsms ! Main P4Z routine60 USE p4zsms ! Main P4Z routine 58 61 USE p4zche ! Chemical model 59 62 USE p4zsink ! vertical flux of particulate matter due to sinking … … 72 75 USE p4zpoc ! Remineralization of organic particles 73 76 USE p4zligand ! Remineralization of organic ligands 74 USE p5zlim ! Co-limitations of differents nutrients 75 USE p5zprod ! Growth rate of the 2 phyto groups76 USE p5zmicro ! Sources and sinks of microzooplankton 77 USE p5zmeso ! Sources and sinks of mesozooplankton 78 USE p5zmort ! Mortality terms for phytoplankton 77 USE p5zlim ! Co-limitations of differents nutrients (QUOTA) 78 USE p5zprod ! Growth rate of the 3 phyto groups (QUOTA) 79 USE p5zmicro ! Sources and sinks of microzooplankton (QUOTA) 80 USE p5zmeso ! Sources and sinks of mesozooplankton (QUOTA) 81 USE p5zmort ! Mortality terms for phytoplankton (QUOTA) 79 82 ! 80 83 INTEGER, INTENT(in) :: Kmm ! time level indices … … 115 118 ierr = ierr + p4z_lim_alloc() 116 119 IF( ln_p4z ) THEN 120 ! PISCES part 117 121 ierr = ierr + p4z_prod_alloc() 122 ierr = ierr + p4z_meso_alloc() 118 123 ELSE 124 ! PISCES-QUOTA part 119 125 ierr = ierr + p5z_lim_alloc() 120 126 ierr = ierr + p5z_prod_alloc() 127 ierr = ierr + p5z_meso_alloc() 121 128 ENDIF 122 129 ierr = ierr + p4z_rem_alloc() … … 130 137 131 138 ! assign an index in trc arrays for each prognostic variables 139 ! This is based on the information read in the namelist_top 132 140 DO jn = 1, jptra 133 141 cltra = ctrcnm(jn) … … 179 187 ! Set biological ratios 180 188 ! --------------------- 181 rno3 = 16._wp / 122._wp 182 po4r = 1._wp / 122._wp 183 o2nit = 32._wp / 122._wp 184 o2ut = 133._wp / 122._wp 185 rdenit = ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3 186 rdenita = 3._wp / 5._wp 189 rno3 = 16._wp / 122._wp ! C/N 190 po4r = 1._wp / 122._wp ! C/P 191 o2nit = 32._wp / 122._wp ! O2/C for nitrification 192 o2ut = 133._wp / 122._wp ! O2/C for ammonification 193 rdenit = ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3 ! Denitrification 194 rdenita = 3._wp / 5._wp ! Denitrification 187 195 IF( ln_p5z ) THEN 188 no3rat3 = no3rat3 / rno3 189 po4rat3 = po4rat3 / po4r 196 no3rat3 = no3rat3 / rno3 ! C/N ratio in zooplankton 197 po4rat3 = po4rat3 / po4r ! C/P ratio in zooplankton 190 198 ENDIF 191 199 … … 249 257 250 258 259 ! Initialization of the different PISCES modules 260 ! Mainly corresponds to the namelist use 261 ! ---------------------------------------------- 251 262 CALL p4z_sink_init ! vertical flux of particulate organic matter 252 263 CALL p4z_opt_init ! Optic: PAR in the water column 253 264 IF( ln_p4z ) THEN 265 ! PISCES part 254 266 CALL p4z_lim_init ! co-limitations by the various nutrients 255 267 CALL p4z_prod_init ! phytoplankton growth rate over the global ocean. 256 268 ELSE 269 ! PISCES-QUOTA part 257 270 CALL p5z_lim_init ! co-limitations by the various nutrients 258 271 CALL p5z_prod_init ! phytoplankton growth rate over the global ocean. … … 265 278 & CALL p4z_ligand_init ! remineralisation of organic ligands 266 279 267 IF( ln_p4z ) THEN 280 IF( ln_p4z ) THEN ! PISCES-std 268 281 CALL p4z_mort_init ! phytoplankton mortality 269 282 CALL p4z_micro_init ! microzooplankton 270 283 CALL p4z_meso_init ! mesozooplankton 271 ELSE 284 ELSE ! PISCES-QUOTA 272 285 CALL p5z_mort_init ! phytoplankton mortality 273 286 CALL p5z_micro_init ! microzooplankton -
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/trcsms_pisces.F90
r12377 r14385 3 3 !! *** MODULE trcsms_pisces *** 4 4 !! TOP : PISCES Source Minus Sink manager 5 !! This module is for LOBSTER, PISCES and PISCES-QUOTA 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004-03 (O. Aumont) Original code … … 30 31 !! 31 32 !! ** Purpose : Managment of the call to Biological sources and sinks 32 !! routines of PISCES or LOBSTER bio-model33 !! routines of PISCES/PISCES-QUOTA or LOBSTER bio-model 33 34 !! 34 35 !!---------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.