Changeset 15459
- Timestamp:
- 2021-10-29T10:19:18+02:00 (2 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 1 added
- 31 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/cfgs/SHARED/axis_def_nemo.xml
r14072 r15459 29 29 <axis id="section_ice" n_glo="4" /> 30 30 <axis id="gau" /> 31 <!-- PISCES Sediment vertical axis definition --> 32 <axis id="profsed" long_name="Vertical S levels" unit="cm" positive="down"/> 31 33 </axis_definition> -
NEMO/trunk/cfgs/SHARED/field_def_nemo-oce.xml
r15457 r15459 1122 1122 <!-- shared variables available with TOP interface --> 1123 1123 <field_group id="top_shared" grid_ref="grid_T_3D"> 1124 <field id="x bla" long_name="Broadband light attenuation" unit="-" />1124 <field id="xeps" long_name="Broadband light attenuation" unit="-" /> 1125 1125 <field id="Heup" long_name="Euphotic layer depth" unit="m" grid_ref="grid_T_2D" /> 1126 1126 </field_group> -
NEMO/trunk/cfgs/SHARED/field_def_nemo-pisces.xml
r14209 r15459 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="FlxLig" long_name="Ligand sediment flux" unit="mol/cm2/s" /> 155 <field id="dzdep" long_name="Sedimentation rate" unit="cm/s" /> 156 <field id="sflxclay" long_name="Clay sedimentation rate" unit="g/cm2/s" /> 157 <field id="sflxbsi" long_name="BSi sedimentation rate" unit="g/cm2/s" /> 158 <field id="sflxpoc" long_name="POC sedimentation rate" unit="g/cm2/s" /> 159 <field id="sflxcal" long_name="Calcite sedimentation rate" unit="g/cm2/s" /> 160 <field id="sflxfeo" long_name="Fe(OH)3 Sedimentation rate" unit="mol/cm2/s" /> 161 <field id="FlxClay" long_name="Clay burial rate" unit="g/cm2/s" /> 162 <field id="FlxCaCO3" long_name="Calcite burial rate" unit="g/cm2/s" /> 163 <field id="FlxBSi" long_name="BSi burial rate" unit="g/cm2/s" /> 164 <field id="FlxPOC" long_name="POC burial rate" unit="g/cm2/s" /> 165 <field id="FlxFeO" long_name="Fe(OH)3 burial rate" unit="g/cm2/s" /> 166 <field id="FlxFeS" long_name="FeS burial rate" unit="g/cm2/s" /> 167 <field id="FlxPOR" long_name="POR burial rate" unit="g/cm2/s" /> 168 <field id="FlxPOS" long_name="POS burial rate" unit="g/cm2/s" /> 169 <field id="Flxtot" long_name="total burial flux" unit="g/cm2/s" /> 170 <field id="Rstepros" long_name="Number of iterations" unit="-" /> 159 171 </field_group> 160 172 … … 205 217 <field id="SIZEP" long_name="Mean relative size of picophyto." unit="-" grid_ref="grid_T_3D" /> 206 218 <field id="SIZED" long_name="Mean relative size of diatoms" unit="-" grid_ref="grid_T_3D" /> 219 <field id="RASSD" long_name="Size of the protein machinery (Diat.)" unit="-" grid_ref="grid_T_3D" /> 220 <field id="RASSN" long_name="Size of the protein machinery (Nano.)" unit="-" grid_ref="grid_T_3D" /> 221 <field id="RASSP" long_name="Size of the protein machinery (Pico.)" unit="-" grid_ref="grid_T_3D" /> 207 222 <field id="Fe3" long_name="Iron III concentration" unit="nmol/m3" grid_ref="grid_T_3D" /> 208 223 <field id="FeL1" long_name="Complexed Iron concentration with L1" unit="nmol/m3" grid_ref="grid_T_3D" /> … … 241 256 <field id="BACT" long_name="Bacterial Biomass" unit="mmol/m3" grid_ref="grid_T_3D" /> 242 257 <field id="FEBACT" long_name="Bacterial uptake of Fe" unit="molFe/m3/s" grid_ref="grid_T_3D" /> 258 <field id="FEPREC" long_name="Precipitation of Fe" unit="molFe/m3/s" grid_ref="grid_T_3D" /> 243 259 <field id="LPRODR" long_name="OM remineralisation ligand production rate" unit="nmol-L/m3/s" grid_ref="grid_T_3D" /> 244 260 <field id="LPRODP" long_name="phytoplankton ligand production rate" unit="nmol-L/m3/s" grid_ref="grid_T_3D" /> -
NEMO/trunk/cfgs/SHARED/namelist_pisces_ref
r15287 r15459 14 14 !----------------------------------------------------------------------- 15 15 ln_p2z = .false. ! LOBSTER model used 16 ln_p4z = .true. 17 ln_p5z = .false. ! PISCES QUOTA model used16 ln_p4z = .true. ! PISCES model used 17 ln_p5z = .false. ! 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 , 'patm' , .true. , .true. , 'yearly' , '' , '' , ''37 sn_atmco2 = 'presatmco2' , -1 36 sn_patm = 'presatm.orca2' , 24. , 'presatm' , .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 = 1.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.00943 ! 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 = 1.7E-9 ! Iron half saturation for phyto 70 concdfer = 5.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 phyto 81 qdfelim = 7.E-6 ! Optimal quota of diatoms 81 qnfelim = 10.E-6 ! Optimal quota of phyto 82 qdfelim = 10.E-6 ! Optimal quota of diatoms 83 caco3r = 0.2 ! mean rain ratio 84 oxymin = 1.E-6 ! Half-saturation constant for anoxia 85 / 86 !----------------------------------------------------------------------- 87 &namp5zlim ! parameters for nutrient limitations PISCES QUOTA - ln_p5z 88 !----------------------------------------------------------------------- 89 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 = 3E-9 ! Iron half saturation for phyto 99 concpfer = 1E-9 ! Iron half saturation for picophytoplankton 100 concdfer = 4.5E-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 105 xsizedia = 1.E-6 ! Minimum size criteria for diatoms 106 xsizephy = 1.E-6 ! Minimum size criteria for phyto 107 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 110 xsizerd = 4.0 ! Size ratio for diatoms 111 xksi1 = 8.E-6 ! half saturation constant for Si uptake 112 xksi2 = 20E-6 ! half saturation constant for Si/C 113 xkdoc = 417.E-6 ! half-saturation constant of DOC remineralization 82 114 caco3r = 0.3 ! mean rain ratio 83 115 oxymin = 1.E-6 ! Half-saturation constant for anoxia 84 116 / 85 117 !----------------------------------------------------------------------- 86 &namp5zlim ! parameters for nutrient limitations PISCES QUOTA - ln_p5z87 !-----------------------------------------------------------------------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 bacteria104 xsizedia = 1.E-6 ! Minimum size criteria for diatoms105 xsizephy = 1.E-6 ! Minimum size criteria for phyto106 xsizepic = 1.E-6107 xsizern = 1.0 ! Size ratio for nanophytoplankton108 xsizerp = 1.0109 xsizerd = 4.0 ! Size ratio for diatoms110 xksi1 = 2.E-6 ! half saturation constant for Si uptake111 xksi2 = 20E-6 ! half saturation constant for Si/C112 xkdoc = 417.E-6 ! half-saturation constant of DOC remineralization113 caco3r = 0.35 ! mean rain ratio114 oxymin = 1.E-6 ! Half-saturation constant for anoxia115 /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 = 12.E-6 ! Optimal Fe quota of nanophyto 121 qfpopt = 12.E-6 ! Optimal Fe quota of picophyto 122 qfdopt = 12.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 146 147 parlux = 0.43 ! Fraction of shortwave as PAR 148 ln_p4z_dcyc = .false. ! Diurnal cycle in PISCES 147 149 / 148 150 !----------------------------------------------------------------------- … … 157 159 chlcnm = 0.033 ! Maximum Chl/C in nanophytoplankton 158 160 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 ratio161 chlcmin = 0.003 ! Minimum Chl/c in phytoplankton 162 fecnm = 60E-6 ! Maximum Fe/C in nanophytoplankton 163 fecdm = 60E-6 ! Maximum Fe/C in diatoms 164 grosip = 0.13 ! mean Si/C ratio 163 165 / 164 166 !----------------------------------------------------------------------- 165 167 &namp5zprod ! parameters for phytoplankton growth for PISCES quota- ln_p5z 166 168 !----------------------------------------------------------------------- 167 pislopen = 3. ! P-I slope168 pislopep = 3.! P-I slope for picophytoplankton169 pisloped = 3.! P-I slope for diatoms169 pislopen = 5 ! P-I slope of nanophytoplankton 170 pislopep = 5 ! P-I slope for picophytoplankton 171 pisloped = 5 ! P-I slope for diatoms 170 172 excretn = 0.05 ! excretion ratio of phytoplankton 171 173 excretp = 0.05 ! excretion ratio of picophytoplankton … … 173 175 xadap = 0. ! Adaptation factor to low light 174 176 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 ratio177 thetannm = 0.3 ! Maximum Chl/N in nanophytoplankton 178 thetanpm = 0.3 ! Maximum Chl/N in picophytoplankton 179 thetandm = 0.4 ! Maximum Chl/N in diatoms 180 chlcmin = 0.003 ! Minimum Chl/c in phytoplankton 181 grosip = 0.12 ! mean Si/C ratio 180 182 / 181 183 !----------------------------------------------------------------------- 182 184 &namp4zmort ! parameters for phytoplankton sinks for PISCES std - ln_p4z 183 185 !----------------------------------------------------------------------- 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 186 wchln = 0.01 ! quadratic mortality of phytoplankton 187 wchld = 0.03 ! maximum quadratic mortality of diatoms 188 mpratn = 0.01 ! phytoplankton mortality rate 189 mpratd = 0.01 ! Diatoms mortality rate 189 190 / 190 191 !----------------------------------------------------------------------- … … 193 194 wchln = 0.01 ! quadratic mortality of nanophytoplankton 194 195 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 196 wchld = 0.03 ! maximum quadratic mortality of diatoms 197 197 mpratn = 0.01 ! nanophytoplankton mortality rate 198 198 mpratp = 0.01 ! picophytoplankton mortality rate 199 mprat 2= 0.01 ! Diatoms mortality rate199 mpratd = 0.01 ! Diatoms mortality rate 200 200 / 201 201 !----------------------------------------------------------------------- 202 202 &namp4zmes ! parameters for mesozooplankton for PISCES std - ln_p4z 203 203 !----------------------------------------------------------------------- 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 204 part2 = 0.75 ! part of calcite not dissolved in mesozoo guts 205 grazrat2 = 0.5 ! maximal mesozoo grazing rate 206 resrat2 = 0.005 ! exsudation rate of mesozooplankton 207 mzrat2 = 0.01 ! 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.4 ! Efficicency of Mesozoo growth 219 epsher2min = 0.4 ! 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 223 xsigma2 = 0.5 ! Predation window size 224 xsigma2del = 1.0 ! Predation window size scaling 225 ln_dvm_meso = .false. ! Activates DVM for mesozooplankton 226 xfracmig = 0.3 ! Fraction of mesozooplankton performing DVM 223 227 / 224 228 !----------------------------------------------------------------------- 225 229 &namp5zmes ! parameters for mesozooplankton 226 230 !----------------------------------------------------------------------- 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 mesozooplankton231 part2 = 0.75 ! part of calcite not dissolved in mesozoo guts 232 grazrat2 = 0.5 ! maximal mesozoo grazing rate 233 bmetexc2 = .true. ! Metabolic use of excess carbon 234 resrat2 = 0.005 ! exsudation rate of mesozooplankton 235 mzrat2 = 0.01 ! mesozooplankton mortality rate 236 xpref2d = 1. ! meso preference for diatoms 237 xpref2n = 0.3 ! meso preference for nano 238 xpref2z = 1. ! meso preference for zoo 239 xpref2m = 0. ! meso preference for zoo 240 xpref2c = 0.3 ! meso preference for poc 241 xthresh2zoo = 1E-8 ! zoo feeding threshold for mesozooplankton 242 xthresh2dia = 1E-8 ! diatoms feeding threshold for mesozooplankton 243 xthresh2phy = 1E-8 ! nanophyto feeding threshold for mesozooplankton 244 xthresh2mes = 1E-8 ! meso feeding threshold for mesozooplankton 245 xthresh2poc = 1E-8 ! poc feeding threshold for mesozooplankton 242 246 xthresh2 = 3E-7 ! Food threshold for grazing 243 247 xkgraz2 = 20.E-6 ! half sturation constant for meso grazing 244 248 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 249 epsher2min = 0.5 ! Minimum efficiency of mesozoo growth 250 ssigma2 = 0.5 ! Fraction excreted as semi-labile DOM 251 srespir2 = 0.2 ! Active respiration 252 unass2c = 0.3 ! non assimilated fraction of C by mesozoo 253 unass2n = 0.3 ! non assimilated fraction of N by mesozoo 254 unass2p = 0.3 ! non assimilated fraction of P by mesozoo 255 xsigma2 = 0.5 ! Predation window size 256 xsigma2del = 1.0 ! Predation window size scaling 257 grazflux = 3.e3 ! flux-feeding rate 258 ln_dvm_meso = .false. ! Activates DVM for mesozooplankton 259 xfracmig = 0.25 ! Fraction of mesozooplankton performing DVM 252 260 / 253 261 !----------------------------------------------------------------------- 254 262 &namp4zzoo ! parameters for microzooplankton for PISCES std - ln_p4z 255 263 !----------------------------------------------------------------------- 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 rate260 xprefc = 0.1 ! Microzoo preference for POM264 part = 0.75 ! part of calcite not dissolved in microzoo guts 265 grazrat = 2.0 ! maximal zoo grazing rate 266 resrat = 0.02 ! Linear mortality rate of zooplankton 267 mzrat = 0.005 ! zooplankton mortality rate 268 xprefc = 0.15 ! Microzoo preference for POM 261 269 xprefn = 1. ! Microzoo preference for Nanophyto 262 xprefd = 0. 6! Microzoo preference for Diatoms270 xprefd = 0.8 ! Microzoo preference for Diatoms 263 271 xthreshdia = 1.E-8 ! Diatoms feeding threshold for microzooplankton 264 272 xthreshphy = 1.E-8 ! Nanophyto feeding threshold for microzooplankton … … 266 274 xthresh = 3.E-7 ! Food threshold for feeding 267 275 xkgraz = 20.E-6 ! half sturation constant for grazing 268 epsher = 0. 3! Efficiency of microzoo growth269 epshermin = 0. 3! Minimum efficiency of microzoo growth276 epsher = 0.4 ! Efficiency of microzoo growth 277 epshermin = 0.4 ! Minimum efficiency of microzoo growth 270 278 sigma1 = 0.6 ! Fraction of microzoo excretion as DOM 271 279 unass = 0.3 ! non assimilated fraction of phyto by zoo 280 xsigma = 0.5 ! Predation window size 281 xsigmadel = 1.0 ! Predation window size scaling 272 282 / 273 283 !----------------------------------------------------------------------- 274 284 &namp5zzoo ! parameters for microzooplankton 275 285 !----------------------------------------------------------------------- 276 part = 0. 5! part of calcite not dissolved in microzoo gutsa277 grazrat = 2. 75! maximal zoo grazing rate286 part = 0.75 ! part of calcite not dissolved in microzoo gutsa 287 grazrat = 2.0 ! maximal zoo grazing rate 278 288 bmetexc = .true. ! Metabolic use of excess carbon 279 resrat = 0.0 3! exsudation rate of zooplankton289 resrat = 0.02 ! exsudation rate of zooplankton 280 290 mzrat = 0.005 ! zooplankton mortality rate 281 xprefc = 0.1 282 xprefn = 1. 283 xprefp = 1. 6! Microzoo preference for picophyto291 xprefc = 0.15 ! Microzoo preference for POM 292 xprefn = 1.0 ! Microzoo preference for Nanophyto 293 xprefp = 1.0 ! Microzoo preference for picophyto 284 294 xprefd = 1.0 ! Microzoo preference for Diatoms 285 xprefz = 0. 3! Microzoo preference for microzooplankton295 xprefz = 0. ! Microzoo preference for microzooplankton 286 296 xthreshdia = 1.E-8 ! Diatoms feeding threshold for microzooplankton 287 297 xthreshphy = 1.E-8 ! Nanophyto feeding threshold for microzooplankton 288 xthreshpic = 1.E-8 289 xthreshzoo = 1.E-8 ! Nanophyto feeding threshold for microzooplankton298 xthreshpic = 1.E-8 ! Picophyto feeding threshold for microzooplankton 299 xthreshzoo = 1.E-8 ! Microzoo feeding threshold for microzooplankton 290 300 xthreshpoc = 1.E-8 ! POC feeding threshold for microzooplankton 291 301 xthresh = 3.E-7 ! Food threshold for feeding 292 xkgraz = 20.E-6 ! half s turation constant for grazing302 xkgraz = 20.E-6 ! half saturation constant for grazing 293 303 epsher = 0.5 ! Efficiency of microzoo growth 294 epshermin = 0. 2! Minimum efficiency of microzoo growth304 epshermin = 0.5 ! Minimum efficiency of microzoo growth 295 305 ssigma = 0.5 ! Fraction excreted as semi-labile DOM 296 306 srespir = 0.2 ! Active respiration 297 307 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 308 unassn = 0.3 ! non assimilated fraction of N by zoo 309 unassp = 0.3 ! non assimilated fraction of P by zoo 310 xsigma = 0.5 ! Predation window size 311 xsigmadel = 1.0 ! Predation window size scaling 300 312 / 301 313 !----------------------------------------------------------------------- 302 314 &nampisfer ! parameters for iron chemistry 303 315 !----------------------------------------------------------------------- 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 concentration316 ln_ligvar = .false. ! variable ligand concentration 317 xlam1 = 0.02 ! scavenging rate of Iron by biogenic particles 318 xlamdust = 150.0 ! Scavenging rate of Iron by dust 319 ligand = 1E-9 ! Ligands concentration 308 320 kfep = 0.01 ! Nanoparticle formation rate constant 321 scaveff = 1.0 ! Fraction of scavenged Fe that goes to POFe 309 322 / 310 323 !----------------------------------------------------------------------- 311 324 &nampisrem ! parameters for remineralization 312 325 !----------------------------------------------------------------------- 313 xremik = 0.3 ! remineralization rate of DOC314 326 nitrif = 0.05 ! NH4 nitrification rate 315 327 xsirem = 0.003 ! remineralization rate of Si 316 328 xsiremlab = 0.03 ! fast remineralization rate of Si 317 329 xsilab = 0.5 ! Fraction of labile biogenic silica 318 feratb = 10.E-6 ! Fe/C quota in bacteria319 xkferb = 3E-10 ! Half-saturation constant for bacteria Fe/C330 feratb = 60.E-6 ! Fe/C quota in bacteria 331 xkferb = 4E-10 ! Half-saturation constant for bacteria Fe/C 320 332 ! ! 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 333 xremikc = 0.4 ! remineralization rate of DOC 334 xremikn = 0.4 ! remineralization rate of DON 335 xremikp = 0.5 ! remineralization rate of DOP 326 336 / 327 337 !----------------------------------------------------------------------- 328 338 &nampispoc ! parameters for organic particles 329 339 !----------------------------------------------------------------------- 330 xremip = 0.035 ! remineralisation rate of PO N340 xremip = 0.035 ! remineralisation rate of POC 331 341 jcpoc = 15 ! Number of lability classes 332 342 rshape = 1.0 ! Shape of the gamma function 333 343 ! ! ln_p5z 334 xremipc = 0.02 335 xremipn = 0.0 25! remineralisation rate of PON336 xremipp = 0.03 344 xremipc = 0.028 ! remineralisation rate of POC 345 xremipn = 0.03 ! remineralisation rate of PON 346 xremipp = 0.035 ! remineralisation rate of POP 337 347 / 338 348 !----------------------------------------------------------------------- … … 358 368 distcoast = 5.e3 ! Distance off the coast for Iron from sediments 359 369 mfrac = 0.035 ! Fe mineral fraction of dust 360 wdust = 2.0 ! Dust sinking speed 370 wdust = 2.0 ! Dust sinking speed 361 371 icefeinput = 15.e-9 ! Iron concentration in sea ice 362 hratio = 1.e+7 ! Fe to 3He ratio assumed for vent iron supply 372 hratio = 1.e+7 ! Fe to 3He ratio assumed for vent iron supply 363 373 ! ! 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) 374 lgw_rath = 0.2 ! Weak ligand ratio from sed hydro sources 375 / 376 !----------------------------------------------------------------------- 377 &nampislig ! Namelist parameters for ligands, nampislig 378 !----------------------------------------------------------------------- 379 rlgw = 300. ! Lifetime (years) of weak ligands 380 rlig = 1.E-4 ! Remin ligand production per unit C 381 prlgw = 3.E-4 ! Photolysis of weak ligand 382 rlgs = 1. ! Lifetime (years) of strong ligands 383 xklig = 1.E-9 ! 1/2 saturation constant of photolysis 384 / 385 !----------------------------------------------------------------------- 386 &nampissed ! Namelist parameters for sediment mobilisation 387 !----------------------------------------------------------------------- 388 nitrfix = 2.e-7 ! Nitrogen fixation rate 389 diazolight = 30. ! Diazotrophs sensitivity to light (W/m2) 371 390 concfediaz = 1.e-10 ! Diazotrophs half-saturation Cste for Iron 372 /373 !-----------------------------------------------------------------------374 &nampislig ! Namelist parameters for ligands, nampislig375 !-----------------------------------------------------------------------376 rlgw = 100. ! Lifetime (years) of weak ligands377 rlig = 1.E-4 ! Remin ligand production per unit C378 prlgw = 1.E-4 ! Photolysis of weak ligand379 rlgs = 1. ! Lifetime (years) of strong ligands380 391 / 381 392 !----------------------------------------------------------------------- -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zagg.F90
r15090 r15459 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( nn_hls, nn_hls, nn_hls, nn_hls, 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/trunk/src/TOP/PISCES/P4Z/p4zbc.F90
r15090 r15459 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 100 ! Atmospheric input of Iron dissolves in the water column 101 IF ( ln_trc_sbc(jpfer) ) THEN 102 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1 ) 103 zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) ) 104 ! 105 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zdustdep * mfrac / mMass_Fe 106 END_3D 107 108 IF( lk_iomput ) THEN 109 ! surface downward dust depo of iron 110 jl = n_trc_indsbc(jpfer) 111 CALL iom_put( "Irondep", ( rf_trsfac(jl) * sf_trcsbc(jl)%fnow(:,:,1) / rn_sbc_time ) * 1.e+3 * tmask(:,:,1) ) 112 113 ENDIF 114 115 ENDIF 116 117 ! Atmospheric input of PO4 dissolves in the water column 118 IF ( ln_trc_sbc(jppo4) ) THEN 119 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1 ) 120 zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) ) 121 ! 122 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zdustdep * 1.e-3 / mMass_P 123 END_3D 124 ENDIF 125 126 ! Atmospheric input of Si dissolves in the water column 127 IF ( ln_trc_sbc(jpsil) ) THEN 128 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1 ) 129 zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) ) 130 ! 131 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) + zdustdep * 0.269 / mMass_Si 132 END_3D 133 ENDIF 134 99 135 ! 100 136 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 102 CALL iom_put( "pdust" , dust(:,:) / ( wdust * rday ) * tmask(:,:,1) ) ! dust concentration at surface 103 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 137 ! dust concentration at surface 138 CALL iom_put( "pdust" , dust(:,:) / ( wdust / rday ) * tmask(:,:,1) ) ! dust concentration at surface 139 ENDIF 140 ENDIF 141 109 142 ! ----------------------------------------- 110 143 ! Add the external input of nutrients from river 111 144 ! ---------------------------------------------------------- 112 145 IF( ll_river ) THEN … … 124 157 ! ---------------------------------------------------------- 125 158 IF( ll_ndepo ) THEN 126 ALLOCATE( zndep(jpi,jpj) )127 159 IF( ln_trc_sbc(jpno3) ) THEN 128 160 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 161 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 162 zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time 163 tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) - rno3 * zndep * rfact 164 END_2D 131 165 ENDIF 132 166 IF( ln_trc_sbc(jpnh4) ) THEN 133 167 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. 168 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 169 zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time 170 tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) + rno3 * zndep * rfact 171 END_2D 172 ENDIF 173 ENDIF 174 ! 175 ! Iron input/uptake due to sea ice : Crude parameterization based on 176 ! Lancelot et al. Iron concentration in sea-ice is constant and set 177 ! in the namelist_pisces (icefeinput). ln_ironice is forced to false 178 ! when nn_ice_tr = 1 142 179 ! ---------------------------------------------------- 143 180 IF( ln_ironice ) THEN 144 181 ! 145 ALLOCATE( zironice(jpi,jpj) ) 146 ! 182 ! Compute the iron flux between sea ice and sea water 183 ! Simple parameterization assuming a fixed constant concentration in 184 ! sea-ice (icefeinput) 185 ! ------------------------------------------------------------------ 147 186 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 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 ) 187 zdep = rfact / e3t(ji,jj,1,Kmm) 188 zwflux = fmmflx(ji,jj) / 1000._wp 189 zironice = MAX( -0.99 * tr(ji,jj,1,jpfer,Kbb), -zwflux * icefeinput * zdep ) 190 tr(ji,jj,1,jpfer,Krhs) = tr(ji,jj,1,jpfer,Krhs) + zironice 151 191 END_2D 152 192 ! 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 ) 193 ! iron flux from ice 194 IF( lk_iomput ) & 195 & CALL iom_put( "Ironice", MAX( -0.99 * tr(:,:,1,jpfer,Kbb), (-1.*fmmflx(:,:)/1000._wp )*icefeinput*1.e+3*tmask(:,:,1)) ) 158 196 ! 159 197 ENDIF … … 212 250 !! 213 251 NAMELIST/nampisbc/cn_dir, sn_dust, sn_ironsed, sn_hydrofe, & 214 & ln_ironsed, ln_ironice, ln_hydrofe, &215 & sedfeinput, distcoast, icefeinput, wdust, mfrac, &252 & ln_ironsed, ln_ironice, ln_hydrofe, & 253 & sedfeinput, distcoast, icefeinput, wdust, mfrac, & 216 254 & hratio, lgw_rath 217 255 !!---------------------------------------------------------------------- … … 254 292 END IF 255 293 256 ll_bc = ( ln_trcbc .AND. lltrcbc ) .OR. ln_hydrofe .OR. ln_ironsed .OR. ln_ironice 257 ll_dust = ln_trc_sbc(jpfer) 294 ll_bc = ( ln_trcbc .AND. lltrcbc ) .OR. ln_hydrofe .OR. ln_ironsed .OR. ln_ironice 295 ll_dust = ln_trc_sbc(jpfer) .OR. ln_trc_sbc(jppo4) .OR. ln_trc_sbc(jpsil) .OR. ln_sediment 258 296 ll_ndepo = ln_trc_sbc(jpno3) .OR. ln_trc_sbc(jpnh4) 259 297 ll_river = ln_trc_cbc(jpno3) … … 269 307 ! 270 308 ALLOCATE( sf_dust(1), STAT=ierr ) !* allocate and fill sf_sst (forcing structure) with sn_sst 271 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'p4z_ sed_init: unable to allocate sf_dust structure' )272 ! 273 CALL fld_fill( sf_dust, (/ sn_dust /), cn_dir, 'p4z_ sed_init', 'Atmospheric dust deposition', 'nampissed' )309 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'p4z_bc_init: unable to allocate sf_dust structure' ) 310 ! 311 CALL fld_fill( sf_dust, (/ sn_dust /), cn_dir, 'p4z_bc_init', 'Atmospheric dust deposition', 'nampisbc' ) 274 312 ALLOCATE( sf_dust(1)%fnow(jpi,jpj,1) ) 275 313 IF( sn_dust%ln_tint ) ALLOCATE( sf_dust(1)%fdta(jpi,jpj,1,2) ) … … 337 375 ! 338 376 ALLOCATE( sf_hydrofe(1), STAT=ierr ) !* allocate and fill sf_sst (forcing structure) with sn_sst 339 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'p4z_ sed_init: unable to allocate sf_hydro structure' )340 ! 341 CALL fld_fill( sf_hydrofe, (/ sn_hydrofe /), cn_dir, 'p4z_ sed_init', 'Input of iron from hydrothermal vents', 'nampisbc' )377 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'p4z_bc_init: unable to allocate sf_hydro structure' ) 378 ! 379 CALL fld_fill( sf_hydrofe, (/ sn_hydrofe /), cn_dir, 'p4z_bc_init', 'Input of iron from hydrothermal vents', 'nampisbc' ) 342 380 ALLOCATE( sf_hydrofe(1)%fnow(jpi,jpj,jpk) ) 343 381 IF( sn_hydrofe%ln_tint ) ALLOCATE( sf_hydrofe(1)%fdta(jpi,jpj,jpk,2) ) -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zbio.F90
r15090 r15459 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( nn_hls, nn_hls, nn_hls, nn_hls, 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/trunk/src/TOP/PISCES/P4Z/p4zche.F90
r15090 r15459 195 195 ! ! LN(K0) OF SOLUBILITY OF CO2 (EQ. 12, WEISS, 1980) 196 196 ! ! AND FOR THE ATMOSPHERE FOR NON IDEAL GAS 197 zcek1 = 9 345.17/ztkel - 60.2409 + 23.3585 * LOG(zt) + zsal*(0.023517 - 0.00023656*ztkel &198 & + 0.00 47036e-4*ztkel**2)199 chemc(ji,jj,1) = EXP( zcek1 ) * 1E-6 * rhop(ji,jj,1) / 1000.! mol/(L atm)197 zcek1 = 9050.69/ztkel - 58.0931 + 22.2940 * LOG(zt) + zsal*(0.027766 - 0.00025888*ztkel & 198 & + 0.0050578e-4*ztkel**2) 199 chemc(ji,jj,1) = EXP( zcek1 ) * 1E-6 ! mol/(L atm) 200 200 chemc(ji,jj,2) = -1636.75 + 12.0408*ztkel - 0.0327957*ztkel**2 + 0.0000316528*ztkel**3 201 201 chemc(ji,jj,3) = 57.7 - 0.118*ztkel -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zfechem.F90
r15090 r15459 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, fe3sol, zligco 59 REAL(wp) :: zscave, zaggdfea, zaggdfeb, ztrc, zdust, zklight 60 REAL(wp) :: ztfe, zhplus, zxlam, zaggliga, zaggligb 61 REAL(wp) :: zprecip, zprecipno3, zconsfe, za1 62 REAL(wp) :: zrfact2 70 63 CHARACTER (len=25) :: charout 71 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zTL1, zFe3, ztotlig, precip, zFeL164 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zTL1, zFe3, ztotlig, zfeprecip, zFeL1, zfecoll 72 65 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcoll3d, zscav3d, zlcoll3d 73 66 !!--------------------------------------------------------------------- … … 75 68 IF( ln_timing ) CALL timing_start('p4z_fechem') 76 69 ! 70 zFe3 (:,:,jpk) = 0. 71 zFeL1 (:,:,jpk) = 0. 72 zTL1 (:,:,jpk) = 0. 73 zfeprecip(:,:,jpk) = 0. 74 zcoll3d (:,:,jpk) = 0. 75 zscav3d (:,:,jpk) = 0. 76 zlcoll3d (:,:,jpk) = 0. 77 zfecoll (:,:,jpk) = 0. 78 xfecolagg(:,:,jpk) = 0. 79 xcoagfe (:,:,jpk) = 0. 80 ! 77 81 ! Total ligand concentration : Ligands can be chosen to be constant or variable 78 ! Parameterization from Tagliabue and Voelker (2011)82 ! Parameterization from Pham and Ito (2018) 79 83 ! ------------------------------------------------- 84 xfecolagg(:,:,:) = ligand * 1E9 + MAX(0., chemo2(:,:,:) - tr(:,:,:,jpoxy,Kbb) ) / 400.E-6 80 85 IF( ln_ligvar ) THEN 81 ztotlig(:,:,:) = 0.09 * tr(:,:,:,jpdoc,Kbb) * 1E6 + ligand * 1E986 ztotlig(:,:,:) = 0.09 * 0.667 * tr(:,:,:,jpdoc,Kbb) * 1E6 + xfecolagg(:,:,:) 82 87 ztotlig(:,:,:) = MIN( ztotlig(:,:,:), 10. ) 83 88 ELSE 84 89 IF( ln_ligand ) THEN ; ztotlig(:,:,:) = tr(:,:,:,jplgw,Kbb) * 1E9 85 ELSE ; ztotlig(:,:,:) = ligand * 1E9 90 ELSE ; ztotlig(:,:,:) = ligand * 1E9 86 91 ENDIF 87 92 ENDIF … … 89 94 ! ------------------------------------------------------------ 90 95 ! from Aumont and Bopp (2006) 91 ! This model is based on one ligand and Fe'96 ! This model is based on one ligand, Fe2+ and Fe3+ 92 97 ! Chemistry is supposed to be fast enough to be at equilibrium 93 98 ! ------------------------------------------------------------ 94 99 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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) )100 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk) 101 zkeq = fekeq(ji,jj,jk) 102 zklight = 4.77E-7 * etot(ji,jj,jk) * 0.5 / ( 10**(-6.3) ) 103 zconsfe = consfe3(ji,jj,jk) / ( 10**(-6.3) ) 104 zfesatur = zTL1(ji,jj,jk) * 1E-9 105 ztfe = (1.0 + zklight) * tr(ji,jj,jk,jpfer,Kbb) 106 ! Fe' is the root of a 2nd order polynom 107 za1 = 1. + zfesatur * zkeq + zklight + zconsfe - zkeq * tr(ji,jj,jk,jpfer,Kbb) 108 zFe3 (ji,jj,jk) = ( -1 * za1 + SQRT( za1**2 + 4. * ztfe * zkeq) ) / ( 2. * zkeq + rtrn ) 109 zFeL1(ji,jj,jk) = MAX( 0., tr(ji,jj,jk,jpfer,Kbb) - zFe3(ji,jj,jk) ) 105 110 END_3D 106 ! 107 111 ! 112 plig(:,:,:) = MAX( 0., ( zFeL1(:,:,:) / ( tr(:,:,:,jpfer,Kbb) + rtrn ) ) ) 113 ! 108 114 zdust = 0. ! if no dust available 115 116 ! Computation of the colloidal fraction that is subjecto to coagulation 117 ! The assumption is that 50% of complexed iron is colloidal. Furthermore 118 ! The refractory part is supposed to be non sticky. The refractory 119 ! fraction is supposed to equal to the background concentration + 120 ! the fraction that accumulates in the deep ocean. AOU is taken as a 121 ! proxy of that accumulation following numerous studies showing 122 ! some relationship between weak ligands and AOU. 123 ! An issue with that parameterization is that when ligands are not 124 ! prognostic or non variable, all the colloidal fraction is supposed 125 ! to coagulate 126 ! ---------------------------------------------------------------------- 127 IF (ln_ligand) THEN 128 zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) * MAX(0., tr(:,:,:,jplgw,Kbb) - xfecolagg(:,:,:) * 1.0E-9 ) / ( tr(:,:,:,jplgw,Kbb) + rtrn ) 129 ELSE 130 IF (ln_ligvar) THEN 131 zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) * MAX(0., tr(:,:,:,jplgw,Kbb) - xfecolagg(:,:,:) * 1.0E-9 ) / ( tr(:,:,:,jplgw,Kbb) + rtrn ) 132 ELSE 133 zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) 134 ENDIF 135 ENDIF 136 109 137 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 110 138 ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water. … … 117 145 & + fesol(ji,jj,jk,5) / zhplus ) 118 146 ! 119 zfeequi = zFe3(ji,jj,jk) * 1E-9120 zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9121 147 ! precipitation of Fe3+, creation of nanoparticles 122 precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 148 zprecip = MAX( 0., ( zFe3(ji,jj,jk) - fe3sol ) ) * kfep * xstep * ( 1.0 - nitrfac(ji,jj,jk) ) 149 ! Precipitation of Fe2+ due to oxidation by NO3 (Croot et al., 2019) 150 ! This occurs in anoxic waters only 151 zprecipno3 = 2.0 * 130.0 * tr(ji,jj,jk,jpno3,Kbb) * nitrfac(ji,jj,jk) * xstep * zFe3(ji,jj,jk) 152 ! 153 zfeprecip(ji,jj,jk) = zprecip + zprecipno3 123 154 ! 124 155 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) 156 ztrc = MAX( rtrn, ztrc ) 157 IF( ll_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) 158 zxlam = MAX( 1.E-3, (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) )) 159 zlam1b = 3.e-5 + ( xlamdust * zdust + xlam1 * ztrc ) * zxlam 160 zscave = zFe3(ji,jj,jk) * zlam1b * xstep 148 161 149 162 ! Compute the coagulation of colloidal iron. This parameterization … … 151 164 ! It requires certainly some more work as it is very poorly constrained. 152 165 ! ---------------------------------------------------------------- 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) ) 155 zaggdfea = zlam1a * xstep * zfecoll 156 ! 157 zlam1b = 3.53E3 * tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk) 158 zaggdfeb = zlam1b * xstep * zfecoll 166 zlam1a = ( 12.0 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05 * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk) & 167 & + ( 2.49 * tr(ji,jj,jk,jppoc,Kbb) ) & 168 & + ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) 169 zaggdfea = zlam1a * xstep * zfecoll(ji,jj,jk) 170 ! 171 zlam1b = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb) 172 zaggdfeb = zlam1b * xstep * zfecoll(ji,jj,jk) 173 xcoagfe(ji,jj,jk) = zlam1a + zlam1b 159 174 ! 160 175 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 176 & - zfeprecip(ji,jj,jk) 177 178 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc 179 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc 180 181 182 ! Precipitated iron is supposed to be permanently lost. 183 ! Scavenged iron is supposed to be released back to seawater 184 ! when POM is solubilized. This is highly uncertain as probably 185 ! a significant part of it may be rescavenged back onto 186 ! the particles. An efficiency factor is applied that is read 187 ! in the namelist. 188 ! See for instance Tagliabue et al. (2019). 189 ! Aggregated FeL is considered as biogenic Fe as it 190 ! probably remains complexed when the particle is solubilized. 191 ! ------------------------------------------------------------- 192 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zaggdfea 193 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zaggdfeb 194 ! 195 zscav3d(ji,jj,jk) = zscave 196 zcoll3d(ji,jj,jk) = zaggdfea + zaggdfeb 166 197 ! 167 198 END_3D … … 171 202 biron(:,:,:) = tr(:,:,:,jpfer,Kbb) 172 203 ! 173 IF( ln_ligand ) THEN174 !175 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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 * zligco182 zaggligb = zlam1b * xstep * zligco183 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) - zaggliga - zaggligb184 zlcoll3d(ji,jj,jk) = zaggliga + zaggligb185 END_3D186 !187 plig(:,:,:) = MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( tr(:,:,:,jpfer,Kbb) +rtrn ) ) )188 !189 ENDIF190 204 ! Output of some diagnostics variables 191 205 ! --------------------------------- 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 206 IF( lk_iomput .AND. knt == nrdttrc ) THEN 207 zrfact2 = 1.e3 * rfact2r ! conversion from mol/L/timestep into mol/m3/s 208 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 209 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 210 IF( iom_use("TL1") ) CALL iom_put("TL1" , zTL1 (:,:,:) * tmask(:,:,:) ) ! TL1 211 IF( iom_use("Totlig") ) CALL iom_put("Totlig" , ztotlig(:,:,:) * tmask(:,:,:) ) ! TL 212 IF( iom_use("Biron") ) CALL iom_put("Biron" , biron (:,:,:) * 1e9 * tmask(:,:,:) ) ! biron 213 IF( iom_use("FESCAV") ) CALL iom_put("FESCAV" , zscav3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 214 IF( iom_use("FECOLL") ) CALL iom_put("FECOLL" , zcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 215 IF( iom_use("FEPREC") ) CALL iom_put("FEPREC" , zfeprecip(:,:,:) *1e9*tmask(:,:,:)*zrfact2 ) 216 216 ENDIF 217 217 … … 241 241 INTEGER :: ios ! Local integer 242 242 !! 243 NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep 243 NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep, scaveff 244 244 !!---------------------------------------------------------------------- 245 245 ! … … 263 263 WRITE(numout,*) ' ligand concentration in the ocean ligand =', ligand 264 264 WRITE(numout,*) ' rate constant for nanoparticle formation kfep =', kfep 265 ENDIF 266 ! 265 WRITE(numout,*) ' Scavenged iron that is added to POFe scaveff =', scaveff 266 ENDIF 267 ! 267 268 END SUBROUTINE p4z_fechem_init 268 269 -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zflx.F90
r15090 r15459 83 83 REAL(wp) :: zyr_dec, zdco2dt 84 84 CHARACTER (len=25) :: charout 85 REAL(wp), DIMENSION(jpi,jpj) :: zkgco2, zkgo2, zh2co3, zoflx, zpco2atm 85 REAL(wp), DIMENSION(jpi,jpj) :: zkgco2, zkgo2, zh2co3, zoflx, zpco2atm, zpco2oce 86 86 !!--------------------------------------------------------------------- 87 87 ! … … 158 158 zfld = zfco2 * chemc(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) * (m/s) 159 159 zflu = zh2co3(ji,jj) * zkgco2(ji,jj) ! (mol/L) (m/s) ? 160 oce_co2(ji,jj) = ( zfld - zflu ) * tmask(ji,jj,1) 160 zpco2oce(ji,jj) = zh2co3(ji,jj) / ( chemc(ji,jj,1) * zfugcoeff + rtrn ) 161 oce_co2(ji,jj) = ( zfld - zflu ) * tmask(ji,jj,1) 161 162 ! compute the trend 162 163 tr(ji,jj,1,jpdic,Krhs) = tr(ji,jj,1,jpdic,Krhs) + oce_co2(ji,jj) * rfact2 / e3t(ji,jj,1,Kmm) … … 187 188 CALL iom_put( "Oflx" , zoflx(:,:) * 1000. ) 188 189 CALL iom_put( "Kg" , zkgco2(:,:) * tmask(:,:,1) ) 189 CALL iom_put( "Dpco2" , ( zpco2atm(:,:) - z h2co3(:,:) / ( chemc(:,:,1) + rtrn) ) * tmask(:,:,1) )190 CALL iom_put( "pCO2sea" , ( zh2co3(:,:) / ( chemc(:,:,1) + rtrn )) * tmask(:,:,1) )190 CALL iom_put( "Dpco2" , ( zpco2atm(:,:) - zpco2oce(:,:) ) * tmask(:,:,1) ) 191 CALL iom_put( "pCO2sea" , zpco2oce(:,:) * tmask(:,:,1) ) 191 192 CALL iom_put( "Dpo2" , ( atcox * patm(:,:) - atcox * tr(:,:,1,jpoxy,Kbb) / ( chemo2(:,:,1) + rtrn ) ) * tmask(:,:,1) ) 192 193 CALL iom_put( "tcflx" , t_oce_co2_flx ) ! molC/s … … 336 337 IF( ln_presatm ) THEN 337 338 CALL fld_read( kt, 1, sf_patm ) !* input Patm provided at kt + 1/2 338 patm(:,:) = sf_patm(1)%fnow(:,:,1) 339 patm(:,:) = sf_patm(1)%fnow(:,:,1)/101325.0 ! atmospheric pressure 339 340 ENDIF 340 341 ! -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zint.F90
r15090 r15459 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 … … 37 37 INTEGER, INTENT( in ) :: Kbb, Kmm ! time level indices 38 38 ! 39 INTEGER :: ji, jj 40 REAL(wp) :: z var ! local variable39 INTEGER :: ji, jj, jk ! dummy loop indices 40 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( nn_hls, nn_hls, nn_hls, nn_hls ) 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_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 78 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 79 zargu = MAX( -1., MIN( 1., zargu ) ) 80 strn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 81 END_2D 82 ! 83 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1 ) 84 ! denitrification factor computed from O2 levels 85 ! This factor diagnoses below which level of O2 denitrification 86 ! is active 87 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - tr(ji,jj,jk,jpoxy,Kbb) ) & 88 & / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) ) ) 89 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 90 ! 91 ! redox factor computed from NO3 levels 92 ! This factor diagnoses below which level of NO3 additional redox 93 ! reactions are taking place. 94 nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - tr(ji,jj,jk,jpno3,Kbb) ) & 95 & / ( 1.E-6 + tr(ji,jj,jk,jpno3,Kbb) ) ) 96 nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) ) 97 END_3D 61 98 ! 62 99 IF( ln_timing ) CALL timing_stop('p4z_int') -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zligand.F90
r15090 r15459 25 25 REAL(wp), PUBLIC :: rlig !: Remin ligand production 26 26 REAL(wp), PUBLIC :: prlgw !: Photochemical of weak ligand 27 REAL(wp), PUBLIC :: xklig !: 1/2 saturation constant of photolysis 27 28 28 29 !! * Substitutions … … 45 46 ! 46 47 INTEGER :: ji, jj, jk 47 REAL(wp) :: zlgwp, zlgwpr, zlgwr, zlablgw 48 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zligrem, zligpr, zligprod 48 REAL(wp) :: zlgwp, zlgwpr, zlgwr, zlablgw 49 REAL(wp) :: zlam1a, zlam1b, zaggliga, zligco 50 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zligrem, zligpr, zligprod, zlcoll3d 49 51 CHARACTER (len=25) :: charout 50 52 !!--------------------------------------------------------------------- … … 62 64 ! This is based on the idea that as LGW is lower 63 65 ! there is a larger fraction of refractory OM 64 zlgwr = max( rlgs , rlgw * exp( -2 * (tr(ji,jj,jk,jplgw,Kbb)*1e9) ) ) ! years 65 zlgwr = 1. / zlgwr * tgfunc(ji,jj,jk) * ( xstep / nyear_len(1) ) * blim(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb) 66 zlgwr = ( 1.0 / rlgs * MAX(0., tr(ji,jj,jk,jplgw,Kbb) - xfecolagg(ji,jj,jk) * 1.0E-9 ) & 67 & + 1.0 / rlgw * xfecolagg(ji,jj,jk) * 1.0E-9 ) / ( rtrn + tr(ji,jj,jk,jplgw,Kbb) ) 68 zlgwr = zlgwr * tgfunc(ji,jj,jk) * ( xstep / nyear_len(1) ) * blim(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb) 66 69 ! photochem loss of weak ligand 67 zlgwpr = prlgw * xstep * etot(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb) * (1. - fr_i(ji,jj)) 68 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zlgwp - zlgwr - zlgwpr 70 zlgwpr = prlgw * xstep * etot(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb)**3 * (1. - fr_i(ji,jj)) & 71 & / ( tr(ji,jj,jk,jplgw,Kbb)**2 + (xklig)**2) 72 ! Coagulation of ligands due to various processes (Brownian, shear, diff. sedimentation 73 ! xcoagfe is computed in p4zfechem 74 ! ------------------------------------------------------------------------------------- 75 ! 50% of the ligands are supposed to be in the colloidal size fraction 76 ! as for FeL 77 zligco = 0.5 * MAX(0., tr(ji,jj,jk,jplgw,Kbb) - xfecolagg(ji,jj,jk) * 1.0E-9 ) 78 zaggliga = xcoagfe(ji,jj,jk) * xstep * zligco 79 80 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zlgwp - zlgwr - zlgwpr - zaggliga 81 ! 69 82 zligrem(ji,jj,jk) = zlgwr 70 83 zligpr(ji,jj,jk) = zlgwpr 71 zligprod(ji,jj,jk) = zlgwp72 !84 zligprod(ji,jj,jk) = zlgwp 85 zlcoll3d(ji,jj,jk) = zaggliga 73 86 END_3D 74 87 ! … … 84 97 IF( iom_use( "LPRODR" ) ) THEN 85 98 zligprod(:,:,jpk) = 0. ; CALL iom_put( "LPRODR", zligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 99 ENDIF 100 IF( iom_use( "LGWCOLL" ) ) THEN 101 zlcoll3d(:,:,jpk) = 0. ; CALL iom_put( "LGWCOLL", zlcoll3d(:,:,:) * 1.e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 86 102 ENDIF 87 103 ENDIF … … 110 126 INTEGER :: ios ! Local integer 111 127 ! 112 NAMELIST/nampislig/ rlgw, prlgw, rlgs, rlig 128 NAMELIST/nampislig/ rlgw, prlgw, rlgs, rlig, xklig 113 129 !!---------------------------------------------------------------------- 114 130 ! … … 130 146 WRITE(numout,*) ' Photolysis of weak ligand prlgw =', prlgw 131 147 WRITE(numout,*) ' Lifetime (years) of strong ligands rlgs =', rlgs 148 WRITE(numout,*) ' 1/2 saturation for photolysis xklig =', xklig 132 149 ENDIF 133 150 ! -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zlim.F90
r15090 r15459 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 … … 40 40 REAL(wp), PUBLIC :: xkdoc !: 2nd half-sat. of DOC remineralization 41 41 REAL(wp), PUBLIC :: concbfe !: Fe half saturation for bacteria 42 REAL(wp), PUBLIC :: oxymin !: half saturation constant for anoxia43 42 REAL(wp), PUBLIC :: qnfelim !: optimal Fe quota for nanophyto 44 43 REAL(wp), PUBLIC :: qdfelim !: optimal Fe quota for diatoms … … 46 45 47 46 !!* 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 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanono3 !: Nanophyto limitation by NO3 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatno3 !: Diatoms limitation by NO3 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanonh4 !: Nanophyto limitation by NH4 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatnh4 !: Diatoms limitation by NH4 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanopo4 !: Nanophyto limitation by PO4 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatpo4 !: Diatoms limitation by PO4 53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphy !: Nutrient limitation term of nanophytoplankton 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdia !: Nutrient limitation term of diatoms 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimnfe !: Nanophyto limitation by Iron 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdfe !: Diatoms limitation by iron 57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimsi !: Diatoms limitation by Si 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbac !: Bacterial limitation term 59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbacl !: Bacterial limitation term 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concdfe !: Limitation of diatoms uptake of Fe 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concnfe !: Limitation of Nano uptake of Fe 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanofer !: Limitation of Fe uptake by nanophyto 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatfer !: Limitation of Fe uptake by diatoms 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqfuncfecd, xqfuncfecn 65 66 ! Coefficient for iron limitation following Flynn and Hipkin (1999) 65 67 REAL(wp) :: xcoef1 = 0.0016 / 55.85 66 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7. 625 * 0.5 * 1.567 REAL(wp) :: xcoef3 = 1.15E-4 * 14. / 55.85 / 7. 625 * 0.568 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.3125 * 0.5 * 1.5 69 REAL(wp) :: xcoef3 = 1.15E-4 * 14. / 55.85 / 7.3125 * 0.5 68 70 69 71 !! * Substitutions … … 81 83 !! 82 84 !! ** Purpose : Compute the co-limitations by the various nutrients 83 !! for the various phytoplankton species 84 !! 85 !! ** Method : - ??? 85 !! for the various phytoplankton species 86 !! 87 !! ** Method : - Limitation follows the Liebieg law of the minimum 88 !! - Monod approach for N, P and Si. Quota approach 89 !! for Iron 86 90 !!--------------------------------------------------------------------- 87 91 INTEGER, INTENT(in) :: kt, knt … … 89 93 ! 90 94 INTEGER :: ji, jj, jk 91 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 92 REAL(wp) :: zconcd, zconcd2, zconcn, zconcn2 95 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zcoef 93 96 REAL(wp) :: z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 94 REAL(wp) :: zdenom, zratio, zironmin 97 REAL(wp) :: zdenom, zratio, zironmin, zbactno3, zbactnh4 95 98 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4 99 REAL(wp) :: fananof, fadiatf, znutlim, zfalim 100 REAL(wp) :: znutlimtot, zlimno3, zlimnh4, zbiron 96 101 !!--------------------------------------------------------------------- 97 102 ! 98 103 IF( ln_timing ) CALL timing_start('p4z_lim') 104 ! 105 sizena(:,:,:) = 1.0 ; sizeda(:,:,:) = 1.0 99 106 ! 100 107 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 101 108 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 109 ! Computation of a variable Ks for iron on diatoms taking into account 110 110 ! that increasing biomass is made of generally bigger cells 111 ! The allometric relationship is classical. 111 112 !------------------------------------------------ 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 113 z1_trbphy = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 117 114 z1_trbdia = 1. / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 118 115 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 ) 116 concnfe(ji,jj,jk) = concnfer * sizen(ji,jj,jk)**0.81 117 zconc0n = concnno3 * sizen(ji,jj,jk)**0.81 118 zconc0nnh4 = concnnh4 * sizen(ji,jj,jk)**0.81 119 120 concdfe(ji,jj,jk) = concdfer * sized(ji,jj,jk)**0.81 121 zconc1d = concdno3 * sized(ji,jj,jk)**0.81 122 zconc1dnh4 = concdnh4 * sized(ji,jj,jk)**0.81 123 124 ! Computation of the optimal allocation parameters 125 ! Based on the different papers by Pahlow et al., and 126 ! Smith et al. 127 ! --------------------------------------------------- 128 129 ! Nanophytoplankton 130 zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk) 131 znutlim = zbiron / concnfe(ji,jj,jk) 132 fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 133 134 ! Diatoms 135 znutlim = zbiron / concdfe(ji,jj,jk) 136 fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 137 138 ! Michaelis-Menten Limitation term by nutrients of 139 ! heterotrophic bacteria 140 ! ------------------------------------------------- 141 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) ) 142 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) 143 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) ) 144 zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 145 zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 146 ! 147 zlim1 = zbactno3 + zbactnh4 148 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbnh4 ) 149 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( concbfe + tr(ji,jj,jk,jpfer,Kbb) ) 150 zlim4 = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc + tr(ji,jj,jk,jpdoc,Kbb) ) 151 ! Xlimbac is used for DOC solubilization whereas xlimbacl 152 ! is used for all the other bacterial-dependent terms 153 ! ------------------------------------------------------- 154 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 155 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 156 157 ! Michaelis-Menten Limitation term by nutrients: Nanophyto 158 ! Optimal parameterization by Smith and Pahlow series of 159 ! papers is used. Optimal allocation is supposed independant 160 ! for all nutrients. 161 ! -------------------------------------------------------- 162 163 ! Limitation of Fe uptake (Quota formalism) 164 zfalim = (1.-fananof) / fananof 165 xnanofer(ji,jj,jk) = (1. - fananof) * zbiron / ( zbiron + zfalim * concnfe(ji,jj,jk) ) 166 167 ! Limitation of nanophytoplankton growth 168 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) ) 169 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) 170 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) ) 171 xnanonh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 172 xnanono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 173 ! 174 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 175 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0nnh4 ) 176 zratio = tr(ji,jj,jk,jpnfe,Kbb) * z1_trbphy 177 178 ! The minimum iron quota depends on the size of PSU, respiration 179 ! and the reduction of nitrate following the parameterization 180 ! proposed by Flynn and Hipkin (1999) 181 zironmin = xcoef1 * tr(ji,jj,jk,jpnch,Kbb) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 182 xqfuncfecn(ji,jj,jk) = zironmin + qnfelim 183 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 184 xnanopo4(ji,jj,jk) = zlim2 185 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 186 xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 187 188 ! Michaelis-Menten Limitation term by nutrients : Diatoms 189 ! ------------------------------------------------------- 190 ! Limitation of Fe uptake (Quota formalism) 191 zfalim = (1.-fadiatf) / fadiatf 192 xdiatfer(ji,jj,jk) = (1. - fadiatf) * zbiron / ( zbiron + zfalim * concdfe(ji,jj,jk) ) 193 194 ! Limitation of diatoms growth 195 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc1d + tr(ji,jj,jk,jpnh4,Kbb) ) 196 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) 197 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) ) 198 xdiatnh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 199 xdiatno3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 200 ! 201 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 202 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc1dnh4 ) 203 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) + rtrn ) 204 zratio = tr(ji,jj,jk,jpdfe,Kbb) * z1_trbdia 205 206 ! The minimum iron quota depends on the size of PSU, respiration 207 ! and the reduction of nitrate following the parameterization 208 ! proposed by Flynn and Hipkin (1999) 209 zironmin = xcoef1 * tr(ji,jj,jk,jpdch,Kbb) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 210 xqfuncfecd(ji,jj,jk) = zironmin + qdfelim 211 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 212 xdiatpo4(ji,jj,jk) = zlim2 213 xlimdfe (ji,jj,jk) = MIN( 1., zlim4 ) 214 xlimdia (ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 215 xlimsi (ji,jj,jk) = MIN( zlim1, zlim2, zlim4 ) 171 216 END_3D 172 217 218 219 ! Size estimation of phytoplankton based on total biomass 220 ! Assumes that larger biomass implies addition of larger cells 221 ! ------------------------------------------------------------ 222 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 223 zcoef = tr(ji,jj,jk,jpphy,Kbb) - MIN(xsizephy, tr(ji,jj,jk,jpphy,Kbb) ) 224 sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 225 zcoef = tr(ji,jj,jk,jpdia,Kbb) - MIN(xsizedia, tr(ji,jj,jk,jpdia,Kbb) ) 226 sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 227 END_3D 228 229 173 230 ! Compute the fraction of nanophytoplankton that is made of calcifiers 231 ! This is a purely adhoc formulation described in Aumont et al. (2015) 232 ! This fraction depends on nutrient limitation, light, temperature 174 233 ! -------------------------------------------------------------------- 175 234 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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) ) 235 zlim1 = xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) 178 236 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) )237 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) + 6.E-11 ) 238 ztem1 = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) + 1.8) 181 239 ztem2 = ts(ji,jj,jk,jp_tem,Kmm) - 10. 182 240 zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) 183 zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) )241 zetot2 = 30. / ( 30.0 + etot_ndcy(ji,jj,jk) ) 184 242 185 243 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & … … 211 269 CALL iom_put( "LNFe" , xlimnfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 212 270 CALL iom_put( "LDFe" , xlimdfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 271 CALL iom_put( "SIZEN" , sizen (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 272 CALL iom_put( "SIZED" , sized (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 213 273 ENDIF 214 274 ! … … 222 282 !! *** ROUTINE p4z_lim_init *** 223 283 !! 224 !! ** Purpose : Initialization of nutrient limitation parameters225 !! 226 !! ** Method : Read the namp islim namelist and check the parameters284 !! ** Purpose : Initialization of the nutrient limitation parameters 285 !! 286 !! ** Method : Read the namp4zlim namelist and check the parameters 227 287 !! called at the first timestep (nittrc000) 228 288 !! 229 !! ** input : Namelist namp islim289 !! ** input : Namelist namp4zlim 230 290 !! 231 291 !!---------------------------------------------------------------------- 232 292 INTEGER :: ios ! Local integer 233 ! 293 294 ! Namelist block 234 295 NAMELIST/namp4zlim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe, & 235 296 & concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd, & … … 248 309 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zlim in configuration namelist' ) 249 310 IF(lwm) WRITE( numonp, namp4zlim ) 311 250 312 ! 251 313 IF(lwp) THEN ! control print … … 287 349 !!---------------------------------------------------------------------- 288 350 !! *** ROUTINE p5z_lim_alloc *** 351 !! 352 ! Allocation of the arrays used in this module 289 353 !!---------------------------------------------------------------------- 290 354 USE lib_mpp , ONLY: ctl_stop … … 295 359 & xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk), & 296 360 & xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk), & 361 & xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk), & 297 362 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), & 298 363 & xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk), & 299 364 & xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk), & 300 365 & concnfe (jpi,jpj,jpk), concdfe (jpi,jpj,jpk), & 366 & xqfuncfecn(jpi,jpj,jpk), xqfuncfecd(jpi,jpj,jpk), & 301 367 & xlimsi (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 302 368 ! -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zmeso.F90
r15090 r15459 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 47 56 # include "do_loop_substitute.h90" 57 # include "domzgr_substitute.h90" 48 58 !!---------------------------------------------------------------------- 49 59 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 53 63 CONTAINS 54 64 55 SUBROUTINE p4z_meso( kt, knt, Kbb, K rhs )65 SUBROUTINE p4z_meso( kt, knt, Kbb, Kmm, Krhs ) 56 66 !!--------------------------------------------------------------------- 57 67 !! *** ROUTINE p4z_meso *** 58 68 !! 59 69 !! ** Purpose : Compute the sources/sinks for mesozooplankton 70 !! This includes ingestion and assimilation, flux feeding 71 !! and mortality. We use a passive prey switching 72 !! parameterization. 73 !! All living compartments smaller than mesozooplankton 74 !! are potential preys of mesozooplankton as well as small 75 !! sinking particles 60 76 !! 61 77 !! ** Method : - ??? 62 78 !!--------------------------------------------------------------------- 63 79 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? 64 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices65 ! 66 INTEGER :: ji, jj, jk 80 INTEGER, INTENT(in) :: Kbb, kmm, Krhs ! time level indices 81 ! 82 INTEGER :: ji, jj, jk, jkt 67 83 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 68 REAL(wp) :: zgraze2 , zdenom, zdenom2 69 REAL(wp) :: zfact , zfood, zfoodlim, zproport, zbeta 84 REAL(wp) :: zgraze2 , zdenom, zdenom2, zfact , zfood, zfoodlim, zproport, zbeta 70 85 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 86 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgraztotc, zgraztotn, zgraztotf 87 REAL(wp) :: zmigreltime, zprcaca, zmortz, zgrasratf, zgrasratn 88 REAL(wp) :: zrespz, ztortz, zgrazdc, zgrazz, zgrazpof, zgraznc, zgrazpoc, zgraznf, zgrazdf 89 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg, zrum, zcodel, zargu, zval, zdep 90 REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmp4, ztmptot, zmigthick 78 91 CHARACTER (len=25) :: charout 92 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 93 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarem, zgraref, zgrapoc, zgrapof, zgrabsi 94 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrem, zgramigref, zgramigpoc, zgramigpof 95 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigbsi 79 96 !!--------------------------------------------------------------------- 80 97 ! 81 98 IF( ln_timing ) CALL timing_start('p4z_meso') 99 ! 100 zgrazing(:,:,:) = 0._wp ; zgrapoc(:,:,:) = 0._wp 101 zfezoo2 (:,:,:) = 0._wp ; zgrarem(:,:,:) = 0._wp 102 zgraref (:,:,:) = 0._wp ; zgrapof(:,:,:) = 0._wp 103 zgrabsi (:,:,:) = 0._wp 104 ! 105 ! 106 ! Diurnal vertical migration of mesozooplankton 107 ! Computation of the migration depth 108 ! --------------------------------------------- 109 IF (ln_dvm_meso) CALL p4z_meso_depmig( Kbb, Kmm ) 82 110 ! 83 111 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) … … 85 113 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 86 114 87 ! Respiration rates of both zooplankton 88 ! ------------------------------------- 115 116 ! linear mortality of mesozooplankton 117 ! A michaelis menten modulation term is used to avoid extinction of 118 ! mesozooplankton at very low food concentration. Mortality is 119 120 ! enhanced in low O2 waters 121 ! ----------------------------------------------------------------- 89 122 zrespz = resrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) ) & 90 123 & + 3. * nitrfac(ji,jj,jk) ) 91 124 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 ! --------------------------------------------------------------- 125 ! Zooplankton quadratic mortality. A square function has been selected with 126 ! to mimic predation and disease (density dependent mortality). It also tends 127 ! to stabilise the model 128 ! ------------------------------------------------------------------------- 95 129 ztortz = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk) ) 96 130 ! 131 132 ! Computation of the abundance of the preys 133 ! A threshold can be specified in the namelist 134 ! -------------------------------------------- 97 135 zcompadi = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthresh2dia ), 0.e0 ) 98 136 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthresh2zoo ), 0.e0 ) 99 137 zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthresh2poc ), 0.e0 ) 138 100 139 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 101 ! it is to predation by mesozooplankton 140 ! it is to predation by mesozooplankton. We use a quota dependant parameterization 141 ! as a low quota indicates oligotrophic conditions which are charatcerized by 142 ! small cells 102 143 ! ------------------------------------------------------------------------------- 103 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthresh2phy ), 0.e0 ) & 104 & * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 105 106 ! Mesozooplankton grazing 107 ! ------------------------ 144 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthresh2phy ), 0.e0 ) 145 146 ! Mesozooplankton grazing 147 ! The total amount of food is the sum of all preys accessible to mesozooplankton 148 ! multiplied by their food preference 149 ! A threshold can be specified in the namelist (xthresh2). However, when food 150 ! concentration is close to this threshold, it is decreased to avoid the 151 ! accumulation of food in the mesozoopelagic domain 152 ! ------------------------------------------------------------------------------- 108 153 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc 109 154 zfoodlim = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) … … 112 157 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 113 158 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) 159 160 ! An active switching parameterization is used here. 161 ! We don't use the KTW parameterization proposed by 162 ! Vallina et al. because it tends to produce too steady biomass 163 ! composition and the variance of Chl is too low as it grazes 164 ! too strongly on winning organisms. We use a generalized 165 ! switching parameterization proposed by Morozov and 166 ! Petrovskii (2013) 167 ! ------------------------------------------------------------ 168 ! The width of the selection window is increased when preys 169 ! have low abundance, .i.e. zooplankton become less specific 170 ! to avoid starvation. 171 ! ---------------------------------------------------------- 172 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 173 zsigma = xsigma2 + xsigma2del * zsigma 174 ! Nanophytoplankton and diatoms are the only preys considered 175 ! to be close enough to have potential interference 176 ! ----------------------------------------------------------- 177 zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 178 ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn ) 179 ztmp2 = xpref2c * zcompapoc**2 180 ztmp3 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / ( 1.0 + zdiffdn ) 181 ztmp4 = xpref2z * zcompaz**2 182 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + rtrn 183 ztmp1 = ztmp1 / ztmptot 184 ztmp2 = ztmp2 / ztmptot 185 ztmp3 = ztmp3 / ztmptot 186 ztmp4 = ztmp4 / ztmptot 187 188 ! Mesozooplankton regular grazing on the different preys 189 ! ------------------------------------------------------ 190 zgrazdc = zgraze2 * ztmp3 * zdenom ! diatoms 191 zgraznc = zgraze2 * ztmp1 * zdenom ! nanophytoplankton 192 zgrazpoc = zgraze2 * ztmp2 * zdenom ! small POC 193 zgrazz = zgraze2 * ztmp4 * zdenom ! microzooplankton 194 195 ! Ingestion rates of the Fe content of the different preys 196 zgraznf = zgraznc * tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn) 197 zgrazdf = zgrazdc * tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn) 121 198 zgrazpof = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 122 199 123 ! Mesozooplankton flux feeding on GOC 124 ! ---------------------------------- 200 ! Mesozooplankton flux feeding on GOC and POC. The feeding pressure 201 ! is proportional to the flux 202 ! ------------------------------------------------------------------ 125 203 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 126 204 & * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & … … 132 210 zgrazfffp = zgrazffep * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 133 211 ! 134 zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 135 ! Compute the proportion of filter feeders 136 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 212 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg 213 ! Compute the proportion of filter feeders. It is assumed steady state. 214 ! --------------------------------------------------------------------- 215 zproport = 0._wp 216 IF( gdepw(ji,jj,jk+1,Kmm) > MAX(hmld(ji,jj), heup_01(ji,jj) ) ) THEN 217 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 218 ENDIF 219 220 ! Compute fractionation of aggregates. It is assumed that 221 ! diatoms based aggregates are more prone to fractionation 222 ! since they are more porous (marine snow instead of fecal pellets) 223 ! ----------------------------------------------------------------- 224 137 225 ! Compute fractionation of aggregates. It is assumed that 138 226 ! diatoms based aggregates are more prone to fractionation … … 142 230 zfrac = zproport * grazflux * xstep * wsbio4(ji,jj,jk) & 143 231 & * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & 144 & * ( 0. 2 + 3.8* zratio2 / ( 1.**2 + zratio2 ) )232 & * ( 0.4 + 3.6 * zratio2 / ( 1.**2 + zratio2 ) ) 145 233 zfracfe = zfrac * tr(ji,jj,jk,jpbfe,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 146 234 235 ! Flux feeding is multiplied by the fractional biomass of flux feeders 147 236 zgrazffep = zproport * zgrazffep 148 237 zgrazffeg = zproport * zgrazffeg 149 238 zgrazfffp = zproport * zgrazfffp 150 239 zgrazfffg = zproport * zgrazfffg 151 zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 152 zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk) & 240 zgrazdc = (1.0 - zproport) * zgrazdc 241 zgraznc = (1.0 - zproport) * zgraznc 242 zgrazz = (1.0 - zproport) * zgrazz 243 zgrazpoc = (1.0 - zproport) * zgrazpoc 244 zgrazdf = (1.0 - zproport) * zgrazdf 245 zgraznf = (1.0 - zproport) * zgraznf 246 zgrazpof = (1.0 - zproport) * zgrazpof 247 248 249 ! Total ingestion rates in C, N, Fe 250 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg 251 zgraztotn = zgrazdc * quotad(ji,jj,jk) + zgrazz + zgraznc * quotan(ji,jj,jk) & 153 252 & + zgrazpoc + zgrazffep + zgrazffeg 154 zgraztotf = zgraz f + zgraznf + zgrazz * ferat3+ zgrazpof + zgrazfffp + zgrazfffg253 zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazpof + zgrazfffp + zgrazfffg 155 254 156 255 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 157 zgrazing 2(ji,jj,jk) = zgraztotc256 zgrazing(ji,jj,jk) = zgraztotc 158 257 159 258 ! Mesozooplankton efficiency. … … 165 264 ! Fulton, 2012) 166 265 ! ----------------------------------------------------------------------------------- 167 zgrasrat = ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 266 267 zgrasratf = ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 168 268 zgrasratn = ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) 169 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3)269 zepshert = MIN( 1., zgrasratn, zgrasratf / feratm) 170 270 zbeta = MAX(0., (epsher2 - epsher2min) ) 271 ! Food quantity deprivation of GGE 171 272 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 273 ! Food quality deprivation of GGE 172 274 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 275 ! Actual GGE 276 zepsherv = zepsherf * zepshert * zepsherq 277 ! 278 ! Impact of grazing on the prognostic variables 279 ! --------------------------------------------- 199 280 zmortz = ztortz + zrespz 281 ! Mortality induced by the upper trophic levels, ztortz, is allocated 282 ! according to a infinite chain of predators (ANderson et al., 2013) 200 283 zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz 284 201 285 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 286 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc 203 287 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 ) 288 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc 289 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 ) 290 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 ) 291 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 ) 292 zgrabsi(ji,jj,jk) = zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 293 ! 209 294 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 295 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf 296 ! 212 297 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zgrazpoc - zgrazffep + zfrac 213 298 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac 214 299 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 + zgrapoc2300 ! 301 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg - zfrac 217 302 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac 303 ! 218 304 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 305 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg - zfracfe 306 307 ! Calcite remineralization due to zooplankton activity 308 ! part2 of the ingested calcite is not dissolving in the 309 ! acidic gut 310 ! ------------------------------------------------------ 311 zfracal = tr(ji,jj,jk,jpcal,Kbb) / ( tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 312 zgrazcal = zgrazffeg * (1. - part2) * zfracal 313 ! calcite production by zooplankton activity 314 zprcaca = xfracal(ji,jj,jk) * zgraznc 225 315 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 226 316 ! 227 317 zprcaca = part2 * zprcaca 228 318 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 )319 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + 2. * ( zgrazcal - zprcaca ) 230 320 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) - zgrazcal + zprcaca 321 322 ! Computation of total excretion and egestion by mesozoo. 323 ! --------------------------------------------------------- 324 zgrarem(ji,jj,jk) = zgraztotc * ( 1. - zepsherv - unass2 ) & 325 & + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz 326 zgraref(ji,jj,jk) = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasratf - feratm * zepsherv ) & 327 & + feratm * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 328 zgrapoc(ji,jj,jk) = zgraztotc * unass2 + zmortzgoc 329 zgrapof(ji,jj,jk) = zgraztotf * unass2 + feratm * zmortzgoc 330 ! 231 331 END_3D 232 ! 332 333 ! Computation of the effect of DVM by mesozooplankton 334 ! This part is only activated if ln_dvm_meso is set to true 335 ! The parameterization has been published in Gorgues et al. (2019). 336 ! ----------------------------------------------------------------- 337 IF (ln_dvm_meso) THEN 338 ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 339 ALLOCATE( zgramigbsi(jpi,jpj) ) 340 zgramigrem(:,:) = 0.0 ; zgramigref(:,:) = 0.0 341 zgramigpoc(:,:) = 0.0 ; zgramigpof(:,:) = 0.0 342 zgramigbsi(:,:) = 0.0 343 344 ! Compute the amount of materials that will go into vertical migration 345 ! This fraction is sumed over the euphotic zone and is removed from 346 ! the fluxes driven by mesozooplankton in the euphotic zone. 347 ! -------------------------------------------------------------------- 348 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpk) 349 zmigreltime = (1. - strn(ji,jj)) 350 zmigthick = (1. - zmigreltime ) * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 351 IF ( gdept(ji,jj,jk,Kmm) <= heup(ji,jj) ) THEN 352 zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * zmigthick 353 zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * zmigthick 354 zgramigpoc(ji,jj) = zgramigpoc(ji,jj) + xfracmig * zgrapoc(ji,jj,jk) * zmigthick 355 zgramigpof(ji,jj) = zgramigpof(ji,jj) + xfracmig * zgrapof(ji,jj,jk) * zmigthick 356 zgramigbsi(ji,jj) = zgramigbsi(ji,jj) + xfracmig * zgrabsi(ji,jj,jk) * zmigthick 357 358 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 359 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 360 zgrapoc(ji,jj,jk) = zgrapoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 361 zgrapof(ji,jj,jk) = zgrapof(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 362 zgrabsi(ji,jj,jk) = zgrabsi(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 363 ENDIF 364 END_3D 365 366 ! The inorganic and organic fluxes induced by migrating organisms are added at the 367 ! the migration depth (corresponding indice is set by kmig) 368 ! -------------------------------------------------------------------------------- 369 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 370 IF( tmask(ji,jj,1) == 1.) THEN 371 jkt = kmig(ji,jj) 372 zdep = 1. / e3t(ji,jj,jkt,Kmm) 373 zgrarem(ji,jj,jkt) = zgrarem(ji,jj,jkt) + zgramigrem(ji,jj) * zdep 374 zgraref(ji,jj,jkt) = zgraref(ji,jj,jkt) + zgramigref(ji,jj) * zdep 375 zgrapoc(ji,jj,jkt) = zgrapoc(ji,jj,jkt) + zgramigpoc(ji,jj) * zdep 376 zgrapof(ji,jj,jkt) = zgrapof(ji,jj,jkt) + zgramigpof(ji,jj) * zdep 377 zgrabsi(ji,jj,jkt) = zgrabsi(ji,jj,jkt) + zgramigbsi(ji,jj) * zdep 378 ENDIF 379 END_2D 380 ! 381 ! Deallocate temporary variables 382 ! ------------------------------ 383 DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof, zgramigbsi ) 384 ! End of the ln_dvm_meso part 385 ENDIF 386 387 ! Update the arrays TRA which contain the biological sources and sinks 388 ! This only concerns the variables which are affected by DVM (inorganic 389 ! nutrients, DOC agands, and particulate organic carbon). 390 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpk) 391 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarem(ji,jj,jk) * sigma2 392 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgrarem(ji,jj,jk) * sigma2 393 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgrarem(ji,jj,jk) * ( 1. - sigma2 ) 394 ! 395 IF( ln_ligand ) & 396 & tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgrarem(ji,jj,jk) * ( 1. - sigma2 ) * ldocz 397 ! 398 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem(ji,jj,jk) * sigma2 399 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref(ji,jj,jk) 400 zfezoo2(ji,jj,jk) = zgraref(ji,jj,jk) 401 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem(ji,jj,jk) * sigma2 402 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgrarem(ji,jj,jk) * sigma2 403 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zgrapoc(ji,jj,jk) 404 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc(ji,jj,jk) 405 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zgrapof(ji,jj,jk) 406 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrabsi(ji,jj,jk) 407 END_3D 408 ! 409 ! Write the output 233 410 IF( lk_iomput .AND. knt == nrdttrc ) THEN 234 411 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 412 CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Total grazing of phyto by zoo 413 CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 414 IF( ln_ligand ) & 415 & CALL iom_put( "LPRODZ2", zgrarem(ji,jj,jk) * ( 1. - sigma2 ) * ldocz * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 244 416 ENDIF 245 417 ! … … 261 433 !! ** Purpose : Initialization of mesozooplankton parameters 262 434 !! 263 !! ** Method : Read the namp ismes namelist and check the parameters435 !! ** Method : Read the namp4zmes namelist and check the parameters 264 436 !! called at the first timestep (nittrc000) 265 437 !! … … 270 442 NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xpref2n, xpref2d, xpref2z, & 271 443 & xpref2c, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 272 & xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux 444 & xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux, ln_dvm_meso, & 445 & xsigma2, xsigma2del, xfracmig 273 446 !!---------------------------------------------------------------------- 274 447 ! … … 281 454 READ ( numnatp_ref, namp4zmes, IOSTAT = ios, ERR = 901) 282 455 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmes in reference namelist' ) 456 283 457 READ ( numnatp_cfg, namp4zmes, IOSTAT = ios, ERR = 902 ) 284 458 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmes in configuration namelist' ) … … 303 477 WRITE(numout,*) ' non assimilated fraction of P by mesozoo unass2 =', unass2 304 478 WRITE(numout,*) ' Efficiency of Mesozoo growth epsher2 =', epsher2 305 WRITE(numout,*) ' Minimum Efficiency of Mesozoo growth epsher2min =', epsher2min479 WRITE(numout,*) ' Minimum Efficiency of Mesozoo growth epsher2min =', epsher2min 306 480 WRITE(numout,*) ' Fraction of mesozoo excretion as DOM sigma2 =', sigma2 307 481 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 =', xkgraz2 482 WRITE(numout,*) ' Width of the grazing window xsigma2 =', xsigma2 483 WRITE(numout,*) ' Maximum additional width of the grazing window xsigma2del =', xsigma2del 484 WRITE(numout,*) ' Diurnal vertical migration of mesozoo. ln_dvm_meso =', ln_dvm_meso 485 WRITE(numout,*) ' Fractional biomass of meso that performs DVM xfracmig =', xfracmig 308 486 ENDIF 309 487 ! 310 488 END SUBROUTINE p4z_meso_init 489 490 SUBROUTINE p4z_meso_depmig( Kbb, Kmm ) 491 !!---------------------------------------------------------------------- 492 !! *** ROUTINE p4z_meso_depmig *** 493 !! 494 !! ** Purpose : Computation the migration depth of mesozooplankton 495 !! 496 !! ** Method : Computes the DVM depth of mesozooplankton from oxygen 497 !! temperature and chlorophylle following the parameterization 498 !! proposed by Bianchi et al. (2013) 499 !!---------------------------------------------------------------------- 500 INTEGER, INTENT(in) :: Kbb, kmm ! time level indices 501 ! 502 INTEGER :: ji, jj, jk 503 ! 504 REAL(wp) :: ztotchl, z1dep 505 REAL(wp), DIMENSION(jpi,jpj) :: oxymoy, tempmoy, zdepmoy 506 507 !!--------------------------------------------------------------------- 508 ! 509 IF( ln_timing == 1 ) CALL timing_start('p4z_meso_zdepmig') 510 ! 511 oxymoy(:,:) = 0. 512 tempmoy(:,:) = 0. 513 zdepmoy(:,:) = 0. 514 depmig (:,:) = 5. 515 kmig (:,:) = 1 516 ! 517 ! Compute the averaged values of oxygen, temperature over the domain 518 ! 150m to 500 m depth. 519 ! ------------------------------------------------------------------ 520 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpk) 521 IF( tmask(ji,jj,jk) == 1.) THEN 522 IF( gdept(ji,jj,jk,Kmm) >= 150. .AND. gdept(ji,jj,jk,kmm) <= 500.) THEN 523 oxymoy(ji,jj) = oxymoy(ji,jj) + tr(ji,jj,jk,jpoxy,Kbb) * 1E6 * e3t(ji,jj,jk,Kmm) 524 tempmoy(ji,jj) = tempmoy(ji,jj) + ts(ji,jj,jk,jp_tem,kmm) * e3t(ji,jj,jk,kmm) 525 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 526 ENDIF 527 ENDIF 528 END_3D 529 530 ! Compute the difference between surface values and the mean values in the mesopelagic 531 ! domain 532 ! ------------------------------------------------------------------------------------ 533 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 534 z1dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 535 oxymoy(ji,jj) = tr(ji,jj,1,jpoxy,Kbb) * 1E6 - oxymoy(ji,jj) * z1dep 536 tempmoy(ji,jj) = ts(ji,jj,1,jp_tem,Kmm) - tempmoy(ji,jj) * z1dep 537 END_2D 538 ! 539 ! Computation of the migration depth based on the parameterization of 540 ! Bianchi et al. (2013) 541 ! ------------------------------------------------------------------- 542 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 543 IF( tmask(ji,jj,1) == 1. ) THEN 544 ztotchl = ( tr(ji,jj,1,jpnch,Kbb) + tr(ji,jj,1,jpdch,Kbb) ) * 1E6 545 depmig(ji,jj) = 398. - 0.56 * oxymoy(ji,jj) -115. * log10(ztotchl) + 0.36 * hmld(ji,jj) -2.4 * tempmoy(ji,jj) 546 ENDIF 547 END_2D 548 ! 549 ! Computation of the corresponding jk indice 550 ! ------------------------------------------ 551 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 552 IF( depmig(ji,jj) >= gdepw(ji,jj,jk,Kmm) .AND. depmig(ji,jj) < gdepw(ji,jj,jk+1,Kmm) ) THEN 553 kmig(ji,jj) = jk 554 ENDIF 555 END_3D 556 ! 557 ! Correction of the migration depth and indice based on O2 levels 558 ! If O2 is too low, imposing a migration depth at this low O2 levels 559 ! would lead to negative O2 concentrations (respiration while O2 is close 560 ! to 0. Thus, to avoid that problem, the migration depth is adjusted so 561 ! that it falls above the OMZ 562 ! ----------------------------------------------------------------------- 563 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 564 IF( tr(ji,jj,kmig(ji,jj),jpoxy,Kbb) < 5E-6 ) THEN 565 DO jk = kmig(ji,jj),1,-1 566 IF( tr(ji,jj,jk,jpoxy,Kbb) >= 5E-6 .AND. tr(ji,jj,jk+1,jpoxy,Kbb) < 5E-6) THEN 567 kmig(ji,jj) = jk 568 depmig(ji,jj) = gdept(ji,jj,jk,Kmm) 569 ENDIF 570 END DO 571 ENDIF 572 END_2D 573 ! 574 IF( ln_timing ) CALL timing_stop('p4z_meso_depmig') 575 ! 576 END SUBROUTINE p4z_meso_depmig 577 578 INTEGER FUNCTION p4z_meso_alloc() 579 !!---------------------------------------------------------------------- 580 !! *** ROUTINE p4z_meso_alloc *** 581 !!---------------------------------------------------------------------- 582 ! 583 ALLOCATE( depmig(jpi,jpj), kmig(jpi,jpj), STAT= p4z_meso_alloc ) 584 ! 585 IF( p4z_meso_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p4z_meso_alloc : failed to allocate arrays.' ) 586 ! 587 END FUNCTION p4z_meso_alloc 311 588 312 589 !!====================================================================== -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zmicro.F90
r15090 r15459 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( nn_hls, nn_hls, nn_hls, nn_hls, 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/trunk/src/TOP/PISCES/P4Z/p4zmort.F90
r15090 r15459 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( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 80 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) ) * zsizerat78 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - 1e-9 ), 0.e0 ) 79 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 110 110 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca 111 111 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) + zprcaca 112 tr(ji,jj,jk,jp goc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zfracal *zmortp113 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ( 1. - zfracal ) *zmortp114 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ( 1. - zfracal ) * zmortp 115 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zfracal * zmortp116 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ( 1. - zfracal ) *zmortp * zfactfe117 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zfracal * zmortp * zfactfe112 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zmortp 113 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortp 114 115 ! Update the arrays TRA which contains the biological sources and sinks 116 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zmortp * zfactfe 117 ! 118 118 END_3D 119 119 ! … … 124 124 ENDIF 125 125 ! 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 ***126 IF( ln_timing ) CALL timing_stop('p4z_mort_nano') 127 ! 128 END SUBROUTINE p4z_mort_nano 129 130 131 SUBROUTINE p4z_mort_diat( Kbb, Krhs ) 132 !!--------------------------------------------------------------------- 133 !! *** ROUTINE p4z_mort_diat *** 134 134 !! 135 135 !! ** Purpose : Compute the mortality terms for diatoms 136 136 !! 137 !! ** Method : - ???137 !! ** Method : - Both quadratic and simili linear mortality terms 138 138 !!--------------------------------------------------------------------- 139 139 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices … … 145 145 !!--------------------------------------------------------------------- 146 146 ! 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 ! ------------------------------------------------------------ 147 IF( ln_timing ) CALL timing_start('p4z_mort_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 ! This is due to the production of EPS by stressed cells 153 ! ------------------------------------------------------------- 153 154 154 155 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) … … 156 157 zcompadi = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - 1e-9), 0. ) 157 158 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 ! ------------------------ 159 ! Aggregation term for diatoms is increased in case of nutrient 160 ! stress as observed in reality. The stressed cells become more 161 ! sticky and coagulate to sink quickly out of the euphotic zone 162 ! ------------------------------------------------------------ 164 163 zlim2 = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 165 164 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 165 zrespp2 = 1.e6 * xstep * wchld * zlim1 * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb) 166 167 ! Phytoplankton linear mortality 168 ! A michaelis-menten like term is introduced to avoid 169 ! extinction of diatoms in highly limited areas 170 ! --------------------------------------------------- 171 ztortp2 = mpratd * xstep * tr(ji,jj,jk,jpdia,Kbb) / ( xkmort + tr(ji,jj,jk,jpdia,Kbb) ) * zcompadi 171 172 172 173 zmortp2 = zrespp2 + ztortp2 173 174 174 ! Update the arrays tr (:,:,:,:,Krhs)which contains the biological sources and sinks175 ! Update the arrays trends which contains the biological sources and sinks 175 176 ! --------------------------------------------------------------------- 176 177 zfactch = tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) … … 182 183 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zmortp2 * zfactsi 183 184 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zmortp2 * zfactsi 184 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zrespp2 + 0.5 * ztortp2 185 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + 0.5 * ztortp2 186 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + 0.5 * ztortp2 187 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zrespp2 + 0.5 * ztortp2 188 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 0.5 * ztortp2 * zfactfe 189 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + ( zrespp2 + 0.5 * ztortp2 ) * zfactfe 185 186 ! Half of the linear mortality term is routed to big particles 187 ! becaue of the ballasting effect 188 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zrespp2 189 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ztortp2 190 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortp2 191 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zrespp2 192 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ztortp2 * zfactfe 193 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zrespp2 * zfactfe 190 194 END_3D 191 195 ! … … 196 200 ENDIF 197 201 ! 198 IF( ln_timing ) CALL timing_stop('p4z_ diat')199 ! 200 END SUBROUTINE p4z_ diat202 IF( ln_timing ) CALL timing_stop('p4z_mort_diat') 203 ! 204 END SUBROUTINE p4z_mort_diat 201 205 202 206 … … 207 211 !! ** Purpose : Initialization of phytoplankton parameters 208 212 !! 209 !! ** Method : Read the namp ismort namelist and check the parameters213 !! ** Method : Read the namp4zmort namelist and check the parameters 210 214 !! called at the first timestep 211 215 !! 212 !! ** input : Namelist namp ismort216 !! ** input : Namelist namp4zmort 213 217 !! 214 218 !!---------------------------------------------------------------------- 215 219 INTEGER :: ios ! Local integer 216 220 ! 217 NAMELIST/namp4zmort/ wchl , wchld, wchldm, mprat, mprat2221 NAMELIST/namp4zmort/ wchln, wchld, mpratn, mpratd 218 222 !!---------------------------------------------------------------------- 219 223 ! … … 226 230 READ ( numnatp_ref, namp4zmort, IOSTAT = ios, ERR = 901) 227 231 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmort in reference namelist' ) 232 228 233 READ ( numnatp_cfg, namp4zmort, IOSTAT = ios, ERR = 902 ) 229 234 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmort in configuration namelist' ) … … 232 237 IF(lwp) THEN ! control print 233 238 WRITE(numout,*) ' Namelist : namp4zmort' 234 WRITE(numout,*) ' quadratic mortality of phytoplankton wchl =', wchl239 WRITE(numout,*) ' quadratic mortality of phytoplankton wchln =', wchln 235 240 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 241 WRITE(numout,*) ' phytoplankton mortality rate mpratn =', mpratn 242 WRITE(numout,*) ' Diatoms mortality rate mpratd =', mpratd 239 243 ENDIF 240 244 ! -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zopt.F90
r15090 r15459 67 67 REAL(wp), DIMENSION(jpi,jpj ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 68 68 REAL(wp), DIMENSION(jpi,jpj ) :: zqsr100, zqsr_corr 69 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpar, ze0, ze1, ze2, ze3 , zchl3d69 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpar, ze0, ze1, ze2, ze3 70 70 !!--------------------------------------------------------------------- 71 71 ! … … 79 79 ze2(:,:,:) = 0._wp 80 80 ze3(:,:,:) = 0._wp 81 ! 82 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 83 ! ! -------------------------------------------------------- 84 zchl3d(:,:,:) = tr(:,:,:,jpnch,Kbb) + tr(:,:,:,jpdch,Kbb) 85 IF( ln_p5z ) zchl3d(:,:,:) = zchl3d(:,:,:) + tr(:,:,:,jppch,Kbb) 86 ! 81 82 ! 83 ! Attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 84 ! Thus the light penetration scheme is based on a decomposition of PAR 85 ! into three wave length domains. This was first officially published 86 ! in Lengaigne et al. (2007). 87 ! -------------------------------------------------------- 88 ! 89 ! Computation of the light attenuation parameters based on a 90 ! look-up table 87 91 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 88 zchl = ( zchl3d(ji,jj,jk) + rtrn ) * 1.e6 92 zchl = ( tr(ji,jj,jk,jpnch,Kbb) + tr(ji,jj,jk,jpdch,Kbb) + rtrn ) * 1.e6 93 IF( ln_p5z ) zchl = zchl + tr(ji,jj,jk,jppch,Kbb) * 1.e6 89 94 zchl = MIN( 10. , MAX( 0.05, zchl ) ) 90 95 irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) … … 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 103 ! Photosynthetically Available Radiation (PAR) 104 ! Two cases are considered in the following : 105 ! (1) An explicit diunal cycle is activated. In that case, mean 106 ! QSR is used as PISCES in its current state has not been parameterized 107 ! for an explicit diurnal cycle 108 ! (2) no diurnal cycle of SW is active and in that case, QSR is used. 109 ! -------------------------------------------- 98 110 IF( l_trcdm2dc ) THEN ! diurnal cycle 99 ! 100 zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 101 ! 102 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 103 ! 111 IF ( ln_p4z_dcyc ) THEN ! Diurnal cycle in PISCES 112 ! 113 ! 114 ! SW over the ice free zone of the grid cell. This assumes that 115 ! SW is zero below sea ice which is a very crude assumption that is 116 ! not fully correct with LIM3 and SI3 but no information is 117 ! currently available to do a better job. SHould be improved in the 118 ! (near) future. 119 zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 120 ! 121 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 122 ! 123 ! Used PAR is computed for each phytoplankton species 124 ! etot_ndcy is PAR at level jk averaged over 24h. 125 ! Due to their size, they have different light absorption characteristics 126 DO jk = 1, nksr 127 etot_ndcy(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 128 END DO 129 ! 130 ! SW over the ice free zone of the grid cell. This assumes that 131 ! SW is zero below sea ice which is a very crude assumption that is 132 ! not fully correct with LIM3 and SI3 but no information is 133 ! currently available to do a better job. SHould be improved in the 134 ! (near) future. 135 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 136 ! 137 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3 ) 138 ! 139 ! Total PAR computation at level jk that includes the diurnal cycle 140 DO jk = 1, nksr 141 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 142 enano(:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 143 ediat(:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 144 END DO 145 IF( ln_p5z ) THEN 146 DO jk = 1, nksr 147 epico (:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 148 END DO 149 ENDIF 150 151 ELSE ! No diurnal cycle in PISCES 152 153 ! 154 ! 155 ! SW over the ice free zone of the grid cell. This assumes that 156 ! SW is zero below sea ice which is a very crude assumption that is 157 ! not fully correct with LIM3 and SI3 but no information is 158 ! currently available to do a better job. SHould be improved in the 159 ! (near) future. 160 zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 161 ! 162 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 163 ! 164 ! Used PAR is computed for each phytoplankton species 165 ! etot_ndcy is PAR at level jk averaged over 24h. 166 ! Due to their size, they have different light absorption characteristics 167 DO jk = 1, nksr 168 etot_ndcy(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 169 enano (:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 170 ediat (:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 171 END DO 172 IF( ln_p5z ) THEN 173 DO jk = 1, nksr 174 epico (:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 175 END DO 176 ENDIF 177 ! 178 ! SW over the ice free zone of the grid cell. This assumes that 179 ! SW is zero below sea ice which is a very crude assumption that is 180 ! not fully correct with LIM3 and SI3 but no information is 181 ! currently available to do a better job. SHould be improved in the 182 ! (near) future. 183 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 184 ! 185 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3 ) 186 ! 187 ! Total PAR computation at level jk that includes the diurnal cycle 188 DO jk = 1, nksr 189 etot(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 190 END DO 191 ENDIF 192 ! 193 ELSE ! no diurnal cycle 194 ! 195 ! 196 ! SW over the ice free zone of the grid cell. This assumes that 197 ! SW is zero below sea ice which is a very crude assumption that is 198 ! not fully correct with LIM3 and SI3 but no information is 199 ! currently available to do a better job. SHould be improved in the 200 ! (near) future. 201 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 202 ! 203 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 204 ! 205 206 ! Used PAR is computed for each phytoplankton species 207 ! Due to their size, they have different light absorption characteristics 104 208 DO jk = 1, nksr 105 etot _ndcy(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk)106 enano (:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk)107 ediat (:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk)209 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ! Total PAR 210 enano(:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) ! Nanophytoplankton 211 ediat(:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) ! Diatoms 108 212 END DO 109 213 IF( ln_p5z ) THEN 110 214 DO jk = 1, nksr 111 epico (:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk)215 epico(:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) ! Picophytoplankton (PISCES-QUOTA) 112 216 END DO 113 217 ENDIF 114 !115 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn )116 !117 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3 )118 !119 DO jk = 1, nksr120 etot(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk)121 END DO122 !123 ELSE124 !125 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn )126 !127 CALL p4z_opt_par( kt, Kmm, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 )128 !129 DO jk = 1, nksr130 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)133 END DO134 IF( ln_p5z ) THEN135 DO jk = 1, nksr136 epico(:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk)137 END DO138 ENDIF139 218 etot_ndcy(:,:,:) = etot(:,:,:) 140 219 ENDIF 141 220 142 221 222 ! Biophysical feedback part (computation of vertical penetration of SW) 143 223 IF( ln_qsr_bio ) THEN !* heat flux accros w-level (used in the dynamics) 144 224 ! ! ------------------------ … … 151 231 ! ! ------------------------ 152 232 ENDIF 153 ! !* Euphotic depth and level 154 neln (:,:) = 1 ! ------------------------ 233 234 ! Euphotic depth and level 235 ! Two definitions of the euphotic zone are used here. 236 ! (1) The classical definition based on the relative threshold value 237 ! (2) An alternative definition based on a absolute threshold value. 238 ! ------------------------------------------------------------------- 239 neln(:,:) = 1 155 240 heup (:,:) = gdepw(:,:,2,Kmm) 156 241 heup_01(:,:) = gdepw(:,:,2,Kmm) … … 162 247 heup(ji,jj) = gdepw(ji,jj,jk+1,Kmm) ! Euphotic layer depth 163 248 ENDIF 164 IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0. 50 ) THEN249 IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.10 ) THEN 165 250 heup_01(ji,jj) = gdepw(ji,jj,jk+1,Kmm) ! Euphotic layer depth (light level definition) 166 251 ENDIF 167 252 END_3D 168 253 ! 254 ! The euphotic depth can not exceed 300 meters. 169 255 heup (:,:) = MIN( 300., heup (:,:) ) 170 256 heup_01(:,:) = MIN( 300., heup_01(:,:) ) 171 ! !* mean light over the mixed layer 172 zdepmoy(:,:) = 0.e0 ! ------------------------------- 257 258 ! Mean PAR over the mixed layer 259 ! ----------------------------- 260 zdepmoy(:,:) = 0.e0 173 261 zetmp1 (:,:) = 0.e0 174 262 zetmp2 (:,:) = 0.e0 … … 176 264 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, nksr) 177 265 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) ! production266 zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Actual PAR for remineralisation 267 zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Par averaged over 24h for production 180 268 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 181 269 ENDIF … … 192 280 ENDIF 193 281 END_3D 194 ! 282 283 ! Computation of the mean usable light for the different phytoplankton 284 ! groups based on their absorption characteristics. 195 285 zdepmoy(:,:) = 0.e0 196 286 zetmp3 (:,:) = 0.e0 … … 199 289 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, nksr) 200 290 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) ! production291 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Nanophytoplankton 292 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Diatoms 203 293 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 204 294 ENDIF … … 216 306 ! 217 307 IF( ln_p5z ) THEN 308 ! Picophytoplankton when using PISCES-QUOTA 218 309 ALLOCATE( zetmp5(jpi,jpj) ) ; zetmp5 (:,:) = 0.e0 219 310 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, nksr) 220 311 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) ! production312 zetmp5(ji,jj) = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t(ji,jj,jk,Kmm) 222 313 ENDIF 223 314 END_3D … … 281 372 pe3(:,:,1) = zqsr(:,:) 282 373 ! 283 DO jk = 2, nksr + 1 284 DO jj = 1, jpj 285 DO ji = 1, jpi 286 pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -e3t(ji,jj,jk-1,Kmm) * xsi0r ) 287 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb (ji,jj,jk-1 ) ) 288 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg (ji,jj,jk-1 ) ) 289 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr (ji,jj,jk-1 ) ) 290 END DO 291 ! 292 END DO 293 ! 294 END DO 374 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, nksr + 1) 375 pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -e3t(ji,jj,jk-1,Kmm) * xsi0r ) 376 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb (ji,jj,jk-1 ) ) 377 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg (ji,jj,jk-1 ) ) 378 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr (ji,jj,jk-1 ) ) 379 END_3D 295 380 ! 296 381 ELSE ! T- level … … 358 443 TYPE(FLD_N) :: sn_par ! informations about the fields to be read 359 444 ! 360 NAMELIST/nampisopt/cn_dir, sn_par, ln_varpar, parlux 445 NAMELIST/nampisopt/cn_dir, sn_par, ln_varpar, parlux, ln_p4z_dcyc 361 446 !!---------------------------------------------------------------------- 362 447 IF(lwp) THEN … … 373 458 IF(lwp) THEN 374 459 WRITE(numout,*) ' Namelist : nampisopt ' 375 WRITE(numout,*) ' PAR as a variable fraction of SW ln_varpar = ', ln_varpar 376 WRITE(numout,*) ' Default value for the PAR fraction parlux = ', parlux 460 WRITE(numout,*) ' PAR as a variable fraction of SW ln_varpar = ', ln_varpar 461 WRITE(numout,*) ' Default value for the PAR fraction parlux = ', parlux 462 WRITE(numout,*) ' Activate the diurnal cycle in PISCES ln_p4z_dcyc = ', ln_p4z_dcyc 377 463 ENDIF 378 464 ! 379 465 xparsw = parlux / 3.0 380 466 xsi0r = 1.e0 / rn_si0 467 468 ! Warning : activate the diurnal cycle with no diurnal cycle in the forcing fields makes no sense 469 ! That does not produce a bug because the model does not use the flag but a warning is necessary 470 ! ---------------------------------------------------------------------------------------------- 471 IF ( ln_p4z_dcyc .AND. l_trcdm2dc ) THEN 472 IF (lwp) WRITE(numout,*) 'No diurnal cycle in the PAR forcing field ' 473 IF (lwp) WRITE(numout,*) 'Activating the diurnal cycle in PISCES has no effect' 474 ENDIF 381 475 ! 382 476 ! Variable PAR at the surface of the ocean -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zpoc.F90
r15090 r15459 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( nn_hls, nn_hls, nn_hls, nn_hls, 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) … … 213 228 ELSE 214 229 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 215 ! POC disaggregation by turbulence and bacterial activity. 230 ! POC degradation by bacterial activity. It is a function 231 ! of the mean lability and of temperature. This also includes 232 ! shrinking of particles due to the bacterial activity 216 233 ! -------------------------------------------------------- 217 234 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) … … 223 240 zofer2 = xremipn / xremipc * zremig * tr(ji,jj,jk,jpbfe,Kbb) 224 241 225 ! -------------------------------------242 ! update of the TRA arrays 226 243 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk) 227 244 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + solgoc * zopon2 … … 246 263 ENDIF 247 264 248 ! ------------------------------------------------------------------249 265 ! Lability parameterization for the small OM particles. This param 250 266 ! is based on the same theoretical background as the big particles. 251 267 ! However, because of its low sinking speed, lability is not supposed 252 268 ! 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 ! 269 ! organic matter) in the MLD. It is however uniform in the mixed layer. 270 ! --------------------------------------------------------------------- 256 271 totprod (:,:) = 0. 257 272 totthick(:,:) = 0. 258 273 totcons (:,:) = 0. 274 259 275 ! intregrated production and consumption of POC in the mixed layer 260 276 ! ---------------------------------------------------------------- 261 !262 277 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 263 278 zdep = hmld(ji,jj) … … 272 287 273 288 ! Computation of the lability spectrum in the mixed layer. In the mixed 274 ! layer, this spectrum is supposed to be uniform. 289 ! layer, this spectrum is supposed to be uniform as a result of intense 290 ! mixing. 275 291 ! --------------------------------------------------------------------- 276 292 ztremint(:,:,:) = zremipoc(:,:,:) … … 302 318 ENDIF 303 319 304 ! -----------------------------------------------------------------------305 320 ! The lability parameterization is used here. The code is here 306 321 ! almost identical to what is done for big particles. The only difference … … 309 324 ! should be determined before. 310 325 ! ----------------------------------------------------------------------- 311 !312 326 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1) 313 327 IF (tmask(ji,jj,jk) == 1.) THEN … … 386 400 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 387 401 IF (tmask(ji,jj,jk) == 1.) THEN 388 ! POC disaggregation by turbulence and bacterial activity. 402 ! POC disaggregation by turbulence and bacterial activity.It is a function 403 ! of the mean lability and of temperature 389 404 ! -------------------------------------------------------- 390 405 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 391 406 zorem = zremip * tr(ji,jj,jk,jppoc,Kbb) 392 407 zofer = zremip * tr(ji,jj,jk,jpsfe,Kbb) 393 408 409 ! Update of the TRA arrays 394 410 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem 395 411 orem(ji,jj,jk) = orem(ji,jj,jk) + zorem … … 402 418 ELSE 403 419 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 404 ! POC disaggregation by turbulence and bacterial activity. 405 ! -------------------------------------------------------- 420 ! POC disaggregation by turbulence and bacterial activity.It is a function 421 ! of the mean lability and of temperature 422 !-------------------------------------------------------- 406 423 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 407 424 zopoc = zremip * tr(ji,jj,jk,jppoc,Kbb) … … 410 427 zopop = xremipp / xremipc * zremip * tr(ji,jj,jk,jppop,Kbb) 411 428 zofer = xremipn / xremipc * zremip * tr(ji,jj,jk,jpsfe,Kbb) 412 429 430 ! Update of the TRA arrays 413 431 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zopoc 414 432 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zopon … … 426 444 IF( knt == nrdttrc ) THEN 427 445 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 rate446 CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate of small particles 447 CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate of large particles 448 CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:) * 1.e+9 * zrfact2 ) ! Remineralisation of biogenic particulate iron 431 449 ENDIF 432 450 ENDIF … … 493 511 ALLOCATE( alphan(jcpoc) , reminp(jcpoc) , alphap(jpi,jpj,jpk,jcpoc) ) 494 512 ! 495 IF (jcpoc > 1) THEN 513 IF (jcpoc > 1) THEN ! Case when more than one lability class is used 496 514 ! 497 515 remindelta = LOG(4. * 1000. ) / REAL(jcpoc-1, wp) … … 517 535 reminp(jcpoc) = reminp(jcpoc) * xremip / alphan(jcpoc) 518 536 519 ELSE 537 ELSE ! Only one lability class is used 520 538 alphan(jcpoc) = 1. 521 539 reminp(jcpoc) = xremip -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zprod.F90
r15090 r15459 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, zpr dch, zprnch82 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdia, zprbio, zprchld, zprchln 85 83 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprorcan, zprorcad, zprofed, zprofen 86 84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpronewn, zpronewd 87 85 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmxl_fac, zmxl_chl 88 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpligprod1, zpligprod286 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zpligprod 89 87 !!--------------------------------------------------------------------- 90 88 ! … … 93 91 ! Allocate temporary workspace 94 92 ! 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 103 zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 93 zprorcan(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp ; zprofed(:,:,:) = 0._wp 94 zprofen (:,:,:) = 0._wp ; zysopt (:,:,:) = 0._wp 95 zpronewn(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp ; zprdia(:,:,:) = 0._wp 96 zprbio (:,:,:) = 0._wp ; zprchld (:,:,:) = 0._wp ; zprchln(:,:,:) = 0._wp 97 zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp 98 99 ! Computation of the maximimum production. Based on a Q10 description 100 ! of the thermal dependency 101 ! Parameters are taken from Bissinger et al. (2008) 102 zprmaxn(:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:) 104 103 zprmaxd(:,:,:) = zprmaxn(:,:,:) 105 104 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( nn_hls, nn_hls, nn_hls, nn_hls ) 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( nn_hls, nn_hls, nn_hls, nn_hls, 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 )) 105 ! Intermittency is supposed to have a similar effect on production as 106 ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac. 107 ! zmxl_chl is the fractional day length and is used to compute the mean 108 ! PAR during daytime. The effect of mixing is computed using the 109 ! absolute light level definition of the euphotic zone 110 ! ------------------------------------------------------------------------- 111 IF ( ln_p4z_dcyc ) THEN ! Diurnal cycle in PISCES 112 113 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 114 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 115 IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 116 zval = MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 117 ENDIF 118 zmxl_chl(ji,jj,jk) = zval / 24. 119 zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 124 120 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 121 END_3D 122 123 ELSE ! No diurnal cycle in PISCES 124 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 125 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 126 zval = MAX( 1., strn(ji,jj) ) 127 IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 128 zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 129 ENDIF 130 zmxl_chl(ji,jj,jk) = zval / 24. 131 zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 132 ENDIF 133 END_3D 134 135 ENDIF 129 136 130 137 zprbio(:,:,:) = zprmaxn(:,:,:) * zmxl_fac(:,:,:) 131 138 zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:) 132 139 133 ! Maximum light intensity134 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24.135 136 ! Computation of the P-I slope for nanos and diatoms140 ! The formulation proposed by Geider et al. (1997) has been modified 141 ! to exclude the effect of nutrient limitation and temperature in the PI 142 ! curve following Vichi et al. (2007) 143 ! ----------------------------------------------------------------------- 137 144 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 138 145 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN … … 142 149 zconctemp2 = tr(ji,jj,jk,jpdia,Kbb) - zconctemp 143 150 ! 151 ! The initial slope of the PI curve can be increased for nano 152 ! to account for photadaptation, for instance in the DCM 153 ! This parameterization is adhoc and should be either 154 ! improved or removed in future versions of the model 155 156 ! Nanophytoplankton 144 157 zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap * EXP( -0.25 * enano(ji,jj,jk) ) ) & 145 158 & * tr(ji,jj,jk,jpnch,Kbb) /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn) 146 ! 159 160 ! Diatoms 147 161 zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) & 148 162 & * tr(ji,jj,jk,jpdch,Kbb) /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn) … … 153 167 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 154 168 ! Computation of production function for Carbon 155 ! --------------------------------------------- 169 ! Actual light levels are used here 170 ! ---------------------------------------------- 156 171 zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 157 172 & * zmxl_fac(ji,jj,jk) * rday + rtrn) … … 160 175 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 161 176 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 177 162 178 ! Computation of production function for Chlorophyll 163 !-------------------------------------------------- 179 ! Mean light level in the mixed layer (when appropriate) 180 ! is used here (acclimation is in general slower than 181 ! the characteristic time scales of vertical mixing) 182 ! ------------------------------------------------------ 164 183 zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 165 184 zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 166 zpr nch(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) )167 zpr dch(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) )185 zprchln(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 186 zprchld(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 168 187 ENDIF 169 188 END_3D 170 189 171 ! Computation of a proxy of the N/C ratio 172 ! --------------------------------------- 190 ! Computation of a proxy of the N/C quota from nutrient limitation 191 ! and light limitation. Steady state is assumed to allow the computation 192 ! ---------------------------------------------------------------------- 173 193 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 174 194 zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) ) & 175 195 & * zprmaxn(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 176 quotan(ji,jj,jk) = MIN( 1., 0. 2 + 0.8* zval )196 quotan(ji,jj,jk) = MIN( 1., 0.3 + 0.7 * zval ) 177 197 zval = MIN( xdiatpo4(ji,jj,jk), ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) ) & 178 198 & * zprmaxd(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 179 quotad(ji,jj,jk) = MIN( 1., 0. 2 + 0.8* zval )199 quotad(ji,jj,jk) = MIN( 1., 0.3 + 0.7 * zval ) 180 200 END_3D 181 201 … … 184 204 185 205 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) 206 ! Si/C of diatoms 207 ! ------------------------ 208 ! Si/C increases with iron stress and silicate availability 209 ! Si/C is arbitrariliy increased for very high Si concentrations 210 ! to mimic the very high ratios observed in the Southern Ocean (zsilfac) 211 ! A parameterization derived from Flynn (2003) is used for the control 212 ! when Si is not limiting which is similar to the parameterisation 213 ! proposed by Gurney and Davidson (1999). 214 ! ----------------------------------------------------------------------- 191 215 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 216 zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 194 217 zsiborn = tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) 195 218 IF (gphit(ji,jj) < -30 ) THEN 196 zsilfac 2= 1. + 2. * zsiborn / ( zsiborn + xksi2**3 )219 zsilfac = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 197 220 ELSE 198 zsilfac 2= 1. + zsiborn / ( zsiborn + xksi2**3 )221 zsilfac = 1. + zsiborn / ( zsiborn + xksi2**3 ) 199 222 ENDIF 200 zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 223 zratiosi = 1.0 - tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / ( zsilfac * grosip * 3.0 + rtrn ) 224 zratiosi = MAX(0., MIN(1.0, zratiosi) ) 225 zmaxsi = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 226 IF( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 227 zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zmaxsi 228 ELSE 229 zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zsilim**0.7 * zmaxsi 230 ENDIF 201 231 ENDIF 202 232 END_3D 203 233 204 ! Mixed-layer effect on production205 ! Sea-ice effect on production206 234 ! Sea-ice effect on production 235 ! No production is assumed below sea ice 236 ! -------------------------------------- 207 237 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 208 238 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) … … 210 240 END_3D 211 241 212 ! Computation of the various production terms 242 ! Computation of the various production and nutrient uptake terms 243 ! --------------------------------------------------------------- 213 244 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 214 245 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 215 246 ! production terms for nanophyto. (C) 216 247 zprorcan(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tr(ji,jj,jk,jpphy,Kbb) * rfact2 248 249 ! New production (uptake of NO3) 217 250 zpronewn(ji,jj,jk) = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 218 251 ! 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) 252 ! Size computation 253 ! Size is made a function of the limitation of of phytoplankton growth 254 ! Strongly limited cells are supposed to be smaller. sizena is the 255 ! size at time step t+1 and is thus updated at the end of the 256 ! current time step 257 ! -------------------------------------------------------------------- 258 zlimfac = xlimphy(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 259 zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 260 sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 261 262 ! Iron uptake rates of nanophytoplankton. Upregulation is 263 ! not parameterized at low iron concentrations as observations 264 ! do not suggest it for accimated cells. Uptake is 265 ! downregulated when the quota is close to the maximum quota 266 zfecnm = xqfuncfecn(ji,jj,jk) + ( fecnm - xqfuncfecn(ji,jj,jk) ) * ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) 267 zratio = 1.0 - MIN(1.0,tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * zfecnm + rtrn ) ) 268 zmax = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) ) 269 zprofen(ji,jj,jk) = zfecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 270 & * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn + xnanono3(ji,jj,jk) & 271 & + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) ) & 272 & * xnanofer(ji,jj,jk) * zmax * tr(ji,jj,jk,jpphy,Kbb) * rfact2 273 ! production terms of diatoms (C) 226 274 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr(ji,jj,jk,jpdia,Kbb) * rfact2 275 276 ! New production (uptake of NO3) 227 277 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 278 279 ! Size computation 280 ! Size is made a function of the limitation of of phytoplankton growth 281 ! Strongly limited cells are supposed to be smaller. sizeda is 282 ! size at time step t+1 and is thus updated at the end of the 283 ! current time step. 284 ! -------------------------------------------------------------------- 285 zlimfac = zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 286 zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 287 sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 288 289 ! Iron uptake rates of diatoms. Upregulation is 290 ! not parameterized at low iron concentrations as observations 291 ! do not suggest it for accimated cells. Uptake is 292 ! downregulated when the quota is close to the maximum quota 293 zfecdm = xqfuncfecd(ji,jj,jk) + ( fecdm - xqfuncfecd(ji,jj,jk) ) * ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) 294 zratio = 1.0 - MIN(1.0, tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) * zfecdm + rtrn ) ) 295 zmax = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) ) 296 zprofed(ji,jj,jk) = zfecdm * zprmaxd(ji,jj,jk) * (1.0 - fr_i(ji,jj) ) & 297 & * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn + xdiatno3(ji,jj,jk) & 298 & + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) ) & 299 & * xdiatfer(ji,jj,jk) * zmax * tr(ji,jj,jk,jpdia,Kbb) * rfact2 235 300 ENDIF 236 301 END_3D 237 302 238 303 ! Computation of the chlorophyll production terms 304 ! The parameterization is taken from Geider et al. (1997) 305 ! ------------------------------------------------------- 239 306 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 240 307 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 241 308 ! production terms for nanophyto. ( chlorophyll ) 242 309 znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 243 zprod = rday * zprorcan(ji,jj,jk) * zpr nch(ji,jj,jk) * xlimphy(ji,jj,jk)310 zprod = rday * zprorcan(ji,jj,jk) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 244 311 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 / & 312 zprochln = zprochln + (chlcnm - chlcmin) * 12. * zprod / & 247 313 & ( zpislopeadn(ji,jj,jk) * znanotot +rtrn) 314 248 315 ! production terms for diatoms ( chlorophyll ) 249 316 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 250 zprod = rday * zprorcad(ji,jj,jk) * zpr dch(ji,jj,jk) * xlimdia(ji,jj,jk)317 zprod = rday * zprorcad(ji,jj,jk) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 251 318 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 / & 319 zprochld = zprochld + (chlcdm - chlcmin) * 12. * zprod / & 254 320 & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 321 255 322 ! Update the arrays TRA which contain the Chla sources and sinks 256 323 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln * texcretn … … 262 329 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 263 330 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 331 zpptot = zprorcan(ji,jj,jk) + zprorcad(ji,jj,jk) 332 zpnewtot = zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) 333 zpregtot = zpptot - zpnewtot 334 zprodsil = zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb) 335 zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 336 zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 337 ! 338 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpptot 339 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpnewtot 340 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zpregtot 270 341 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) * texcretn342 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk) * texcretn 272 343 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) )344 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd 345 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprodsil 346 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - zprodsil 347 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zproddoc 348 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + o2ut * zpregtot + ( o2ut + o2nit ) * zpnewtot 278 349 ! 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) - zfeup281 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,jp tal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) &284 & - rno3 * ( zproreg + zproreg2)350 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprodfer 351 consfe3(ji,jj,jk) = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) & 352 & * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2 353 ! 354 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zpptot 355 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpnewtot - zpregtot ) 285 356 ENDIF 286 357 END_3D 287 ! 358 359 ! Production and uptake of ligands by phytoplankton. This part is activated 360 ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small 361 ! and based on the FeL model by Morel et al. (2008) and on the study of 362 ! Shaked et al. (2020) 363 ! ------------------------------------------------------------------------- 288 364 IF( ln_ligand ) THEN 289 zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp290 365 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 291 366 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) * lthet367 zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 368 zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 369 zprodlig = plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 370 ! 371 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zproddoc * ldocp - zprodfer * zprodlig 297 372 ENDIF 298 373 END_3D … … 300 375 301 376 377 ! Output of the diagnostics 302 378 ! Total primary production per year 303 379 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & … … 312 388 CALL iom_put( "PPNEWD" , zpronewd(:,:,:) * zfact * tmask(:,:,:) ) ! new primary production by diatomes 313 389 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(:,:,:) ) 390 CALL iom_put( "PFeN" , zprofen(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by nanophyto 391 CALL iom_put( "PFeD" , zprofed(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by diatomes 392 IF( ln_ligand .AND. ( iom_use( "LPRODP" ) .OR. iom_use( "LDETP" ) ) ) THEN 393 ALLOCATE( zpligprod(jpi,jpj,jpk) ) 394 zpligprod(:,:,:) = excretd * zprorcad(:,:,:) + excretn * zprorcan(:,:,:) 395 CALL iom_put( "LPRODP" , zpligprod(:,:,:) * ldocp * 1e9 * zfact * tmask(:,:,:) ) 396 ! 397 zpligprod(:,:,:) = ( texcretn * zprofen(:,:,:) + texcretd * zprofed(:,:,:) ) & 398 & * plig(:,:,:) / ( rtrn + plig(:,:,:) + 75.0 * (1.0 - plig(:,:,:) ) ) 399 CALL iom_put( "LDETP" , zpligprod(:,:,:) * lthet * 1e9 * zfact * tmask(:,:,:) ) 400 DEALLOCATE( zpligprod ) 319 401 ENDIF 320 402 CALL iom_put( "Mumax" , zprmaxn(:,:,:) * tmask(:,:,:) ) ! Maximum growth rate … … 346 428 !! ** Purpose : Initialization of phytoplankton production parameters 347 429 !! 348 !! ** Method : Read the namp isprod namelist and check the parameters430 !! ** Method : Read the namp4zprod namelist and check the parameters 349 431 !! called at the first timestep (nittrc000) 350 432 !! 351 !! ** input : Namelist namp isprod433 !! ** input : Namelist namp4zprod 352 434 !!---------------------------------------------------------------------- 353 435 INTEGER :: ios ! Local integer 354 436 ! 437 ! Namelist block 355 438 NAMELIST/namp4zprod/ pislopen, pisloped, xadap, bresp, excretn, excretd, & 356 439 & chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip … … 365 448 READ ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 366 449 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in reference namelist' ) 450 367 451 READ ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 368 452 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zprod in configuration namelist' ) -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zrem.F90
r15090 r15459 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 79 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zfacsi, zfacsib, zdepeff, zfebact 72 80 REAL(wp), DIMENSION(jpi,jpj ) :: ztempbac 73 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zdepprod, zfacsi, zfacsib, zdepeff, zfebact74 81 !!--------------------------------------------------------------------- 75 82 ! 76 83 IF( ln_timing ) CALL timing_start('p4z_rem') 77 84 ! 78 ! Initialisation of arrys 79 zdepprod(:,:,:) = 1._wp 85 ! Initialisation of arrays 80 86 zdepeff (:,:,:) = 0.3_wp 81 ztempbac(:,:) = 0._wp82 87 zfacsib(:,:,:) = xsilab / ( 1.0 - xsilab ) 83 88 zfebact(:,:,:) = 0._wp 84 89 zfacsi(:,:,:) = xsilab 85 90 86 ! Computation of the mean phytoplankton concentration as 87 ! a crude estimate of the bacterial biomass 91 ! Computation of the mean bacterial concentration 88 92 ! this parameterization has been deduced from a model version 89 ! that was modeling explicitely bacteria 90 ! ------------------------------------------------------- 91 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 92 zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 93 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 ) 93 ! that was modeling explicitely bacteria. This is a very old param 94 ! that will be very soon updated based on results from a much more 95 ! recent version of PISCES with bacteria. 96 ! ---------------------------------------------------------------- 97 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 98 zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 99 IF ( gdept(ji,jj,jk,Kmm) < zdep ) THEN 100 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 95 101 ztempbac(ji,jj) = zdepbac(ji,jj,jk) 102 ! IF( gdept(ji,jj,jk,Kmm) >= zdep ) THEN 96 103 ELSE 97 104 zdepmin = MIN( 1., zdep / gdept(ji,jj,jk,Kmm) ) 98 105 zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 99 zdepprod(ji,jj,jk) = zdepmin**0.273100 zdepeff (ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3106 ! zdepeff(ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 107 zdepeff(ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.6 101 108 ENDIF 102 109 END_3D 103 110 104 IF( ln_p4z ) THEN 105 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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( nn_hls, nn_hls, nn_hls, nn_hls, 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 111 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 112 ! DOC ammonification. Depends on depth, phytoplankton biomass 113 ! and a limitation term which is supposed to be a parameterization of the bacterial activity. 114 ! -------------------------------------------------------------------------- 115 zremik = xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk) 116 zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 117 zremikc = xremikc * zremik 118 ! Ammonification in oxic waters with oxygen consumption 119 ! ----------------------------------------------------- 120 zolimic = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * tr(ji,jj,jk,jpdoc,Kbb) 121 zolimic = MAX(0., MIN( ( tr(ji,jj,jk,jpoxy,Kbb) - rtrn ) / o2ut, zolimic ) ) 122 zolimi(ji,jj,jk) = zolimic 123 124 ! Ammonification in suboxic waters with denitrification 125 ! ----------------------------------------------------- 126 zammonic = zremikc * nitrfac(ji,jj,jk) * tr(ji,jj,jk,jpdoc,Kbb) 127 denitr(ji,jj,jk) = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 128 denitr(ji,jj,jk) = MAX(0., MIN( ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 129 130 ! Ammonification in waters depleted in O2 and NO3 based on 131 ! other redox processes 132 ! -------------------------------------------------------- 133 zoxyremc = MAX(0., zammonic - denitr(ji,jj,jk) ) 134 135 ! Update of the the trends arrays 136 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - denitr (ji,jj,jk) * rdenit 137 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) - ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 138 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - zolimic * o2ut 139 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 140 IF( ln_p4z ) THEN ! PISCES-std 141 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 142 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc 143 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 144 ELSE ! PISCES-QUOTA (p5z) 145 zremikn = xremikn / xremikc * tr(ji,jj,jk,jpdon,kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 146 zremikp = xremikp / xremikc * tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdoc,Kbb) + rtrn ) 147 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 148 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 149 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) - zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 150 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) - zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 151 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zremikn * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 152 ENDIF 153 END_3D 179 154 180 155 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) … … 185 160 & / ( 1.+ emoy(ji,jj,jk) ) * ( 1. + fr_i(ji,jj) * emoy(ji,jj,jk) ) 186 161 zdenitnh4 = nitrif * xstep * tr(ji,jj,jk,jpnh4,Kbb) * nitrfac(ji,jj,jk) 187 zdenitnh4 = M IN( ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenita, zdenitnh4 )162 zdenitnh4 = MAX(0., MIN( ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenita, zdenitnh4 ) ) 188 163 ! Update of the tracers trends 189 164 ! ---------------------------- … … 194 169 END_3D 195 170 196 171 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 197 172 WRITE(charout, FMT="('rem1')") 198 173 CALL prt_ctl_info( charout, cdcomp = 'top' ) 199 174 CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm) 200 175 ENDIF 201 176 202 177 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) … … 206 181 ! studies (especially at Papa) have shown this uptake to be significant 207 182 ! ---------------------------------------------------------- 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) 183 zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * tr(ji,jj,jk,jpfer,Kbb) & 184 & / ( xkferb + tr(ji,jj,jk,jpfer,Kbb) ) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 185 186 ! Only the transfer of iron from its dissolved form to particles 187 ! is treated here. The GGE of bacteria supposed to be equal to 188 ! 0.33. This is hard-coded. 189 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zbactfer*0.1 190 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zbactfer*0.08 191 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zbactfer*0.02 192 zfebact(ji,jj,jk) = zbactfer * 0.1 193 blim(ji,jj,jk) = xlimbacl(ji,jj,jk) * zdepbac(ji,jj,jk) / 1.e-6 216 194 END_3D 217 195 … … 225 203 ! of bSi. Set to a constant in the upper ocean 226 204 ! --------------------------------------------------------------- 227 228 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 205 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 206 ! Remineralization rate of BSi dependent on T and saturation 207 ! The parameterization is taken from Ridgwell et al. (2002) 208 ! --------------------------------------------------------- 229 209 zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 230 210 zsatur = MAX( rtrn, ( sio3eq(ji,jj,jk) - tr(ji,jj,jk,jpsil,Kbb) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) 231 211 zsatur2 = ( 1. + ts(ji,jj,jk,jp_tem,Kmm) / 400.)**37 232 212 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 ! --------------------------------------------------------- 213 214 ! Two fractions of bSi are considered : a labile one and a more 215 ! refractory one based on the commonly observed two step 216 ! dissolution of bSi (initial rapid dissolution followed by 217 ! more slowly dissolution). 218 ! Computation of the vertical evolution of the labile fraction 219 ! of bSi. This is computed assuming steady state. 220 ! -------------------------------------------------------------- 235 221 IF ( gdept(ji,jj,jk,Kmm) > zdep ) THEN 236 222 zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem ) & … … 283 269 !! 284 270 !!---------------------------------------------------------------------- 285 NAMELIST/nampisrem/ xremik,nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &271 NAMELIST/nampisrem/ nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, & 286 272 & xremikc, xremikn, xremikp 287 273 INTEGER :: ios ! Local integer output status for namelist read … … 303 289 WRITE(numout,*) ' Namelist parameters for remineralization, nampisrem' 304 290 IF( ln_p4z ) THEN 305 WRITE(numout,*) ' remineralization rate of DOC xremik =', xremik291 WRITE(numout,*) ' remineralization rate of DOC xremikc =', xremikc 306 292 ELSE 307 293 WRITE(numout,*) ' remineralization rate of DOC xremikc =', xremikc -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zsink.F90
r15090 r15459 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( nn_hls, nn_hls, nn_hls, nn_hls, 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/trunk/src/TOP/PISCES/P4Z/p4zsms.F90
r15182 r15459 30 30 PRIVATE 31 31 32 PUBLIC p4z_sms_init ! called in p4zsms.F9033 PUBLIC p4z_sms ! called in p4zsms.F9032 PUBLIC p4z_sms_init ! called in trcini_pisces.F90 33 PUBLIC p4z_sms ! called in trcsms_pisces.F90 34 34 35 35 INTEGER :: numco2, numnut, numnit ! logical unit for co2 budget 36 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 36 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget ! total budget of the different conservative elements 37 37 REAL(wp) :: xfact, xfact1, xfact2, xfact3 38 38 … … 56 56 !! routines of PISCES bio-model 57 57 !! 58 !! ** Method : - at each new day ... 59 !! - several calls of bio and sed ??? 60 !! - ... 58 !! ** Method : - calls the various SMS subroutines 59 !! - calls the sediment module (if ln_sediment) 60 !! - several calls of bio and sed (possible time-splitting) 61 !! - handles the potential negative concentrations (xnegtr) 61 62 !!--------------------------------------------------------------------- 62 63 ! … … 91 92 IF( ln_pisdmp .AND. MOD( kt - 1, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt, Kbb, Kmm ) ! Relaxation of some tracers 92 93 ! 93 rfact = rDt_trc 94 rfact = rDt_trc ! time step of PISCES 94 95 ! 95 96 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + 1 ) ) THEN 96 rfactr = 1. / rfact 97 rfact2 = rfact / REAL( nrdttrc, wp ) 98 rfact2r = 1. / rfact2 99 xstep = rfact2 / rday ! Time step duration for biology 97 rfactr = 1. / rfact ! inverse of the time step 98 rfact2 = rfact / REAL( nrdttrc, wp ) ! time step of the biological SMS 99 rfact2r = 1. / rfact2 ! Inverse of the biological time step 100 xstep = rfact2 / rday ! Time step duration for biology relative to a day 100 101 xfact = 1.e+3 * rfact2r 101 102 IF(lwp) WRITE(numout,*) … … 131 132 CALL p4z_flx( kt, jnt, Kbb, Kmm, Krhs ) ! Compute surface fluxes 132 133 ! 134 ! Handling of the negative concentrations 135 ! The biological SMS may generate negative concentrations 136 ! Trends are tested at each grid cell. If a negative concentrations 137 ! is created at a grid cell, all the sources and sinks at that grid 138 ! cell are scale to avoid that negative concentration. This approach 139 ! is quite simplistic but it conserves mass. 140 ! ------------------------------------------------------------------ 133 141 xnegtr(:,:,:) = 1.e0 134 142 DO jn = jp_pcs0, jp_pcs1 … … 142 150 ! ! where at least 1 tracer concentration becomes negative 143 151 ! ! 152 ! Concentrations are updated 144 153 DO jn = jp_pcs0, jp_pcs1 145 154 tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kbb) + xnegtr(:,:,:) * tr(:,:,:,jn,Krhs) … … 194 203 ENDIF 195 204 ! 205 ! Trends are are reset to 0 196 206 DO jn = jp_pcs0, jp_pcs1 197 207 tr(:,:,:,jn,Krhs) = 0._wp … … 202 212 #endif 203 213 ! 214 ! If ln_sediment is set to .true. then the sediment module is called 204 215 IF( ln_sediment ) THEN 205 216 ! … … 213 224 ztrbbio(:,:,:,jn) = 0._wp 214 225 END DO 226 ! 215 227 ! 216 228 IF( l_trdtrc ) THEN … … 236 248 !! *** p4z_sms_init *** 237 249 !! 238 !! ** Purpose : read PISCES namelist239 !! 240 !! ** input : file 'namelist .trc.s' containing the following241 !! namelist: natext, natbio, natsms250 !! ** Purpose : read the general PISCES namelist 251 !! 252 !! ** input : file 'namelist_pisces' containing the following 253 !! namelist: nampisbio, nampisdmp, nampismass 242 254 !!---------------------------------------------------------------------- 243 255 INTEGER :: ios ! Local integer output status for namelist read 244 256 !! 245 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat 3, wsbio2, wsbio2max, wsbio2scale, &246 & 257 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, feratz, feratm, wsbio2, wsbio2max, & 258 & wsbio2scale, ldocp, ldocz, lthet, no3rat3, po4rat3 247 259 ! 248 260 NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp … … 268 280 WRITE(numout,*) ' half saturation constant for mortality xkmort =', xkmort 269 281 IF( ln_p5z ) THEN 270 WRITE(numout,*) ' N/C in zooplankton no3rat3 =', no3rat3 271 WRITE(numout,*) ' P/C in zooplankton po4rat3 =', po4rat3 272 ENDIF 273 WRITE(numout,*) ' Fe/C in zooplankton ferat3 =', ferat3 282 WRITE(numout,*) ' N/C in zooplankton no3rat3 =', no3rat3 283 WRITE(numout,*) ' P/C in zooplankton po4rat3 =', po4rat3 284 ENDIF 285 WRITE(numout,*) ' Fe/C in microzooplankton feratz =', feratz 286 WRITE(numout,*) ' Fe/C in microzooplankton feratz =', feratm 274 287 WRITE(numout,*) ' Big particles sinking speed wsbio2 =', wsbio2 275 288 WRITE(numout,*) ' Big particles maximum sinking speed wsbio2max =', wsbio2max … … 317 330 !! *** ROUTINE p4z_rst *** 318 331 !! 319 !! ** Purpose : Read or write variables in restart file:332 !! ** Purpose : Read or write specific PISCES variables in restart file: 320 333 !! 321 334 !! WRITE(READ) mode: … … 330 343 IF( TRIM(cdrw) == 'READ' ) THEN 331 344 ! 345 ! Read the specific variable of PISCES 332 346 IF(lwp) WRITE(numout,*) 333 347 IF(lwp) WRITE(numout,*) ' p4z_rst : Read specific variables from pisces model ' 334 348 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 335 349 ! 350 ! Read the pH. If not in the restart file, then it is initialized from 351 ! the initial conditions 336 352 IF( iom_varid( numrtr, 'PH', ldstop = .FALSE. ) > 0 ) THEN 337 353 CALL iom_get( numrtr, jpdom_auto, 'PH' , hi(:,:,:) ) … … 341 357 ENDIF 342 358 CALL iom_get( numrtr, jpdom_auto, 'Silicalim', xksi(:,:) ) 359 360 ! Read the Si half saturation constant and the maximum Silica concentration 343 361 IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN 344 362 CALL iom_get( numrtr, jpdom_auto, 'Silicamax' , xksimax(:,:) ) … … 346 364 xksimax(:,:) = xksi(:,:) 347 365 ENDIF 348 ! 366 367 ! Read the Fe3 consumption term by phytoplankton 368 IF( iom_varid( numrtr, 'Consfe3', ldstop = .FALSE. ) > 0 ) THEN 369 CALL iom_get( numrtr, jpdom_auto, 'Consfe3' , consfe3(:,:,:) ) 370 ELSE 371 consfe3(:,:,:) = 0._wp 372 ENDIF 373 374 375 ! Read the cumulative total flux. If not in the restart file, it is set to 0 349 376 IF( iom_varid( numrtr, 'tcflxcum', ldstop = .FALSE. ) > 0 ) THEN ! cumulative total flux of carbon 350 377 CALL iom_get( numrtr, 'tcflxcum' , t_oce_co2_flx_cum ) … … 353 380 ENDIF 354 381 ! 382 ! PISCES size proxy 383 IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 384 CALL iom_get( numrtr, jpdom_auto, 'sized' , sized(:,:,:) ) 385 sized(:,:,:) = MAX( 1.0, sized(:,:,:) ) 386 ELSE 387 sized(:,:,:) = 1. 388 ENDIF 389 ! 390 IF( iom_varid( numrtr, 'sizen', ldstop = .FALSE. ) > 0 ) THEN 391 CALL iom_get( numrtr, jpdom_auto, 'sizen' , sizen(:,:,:) ) 392 sizen(:,:,:) = MAX( 1.0, sizen(:,:,:) ) 393 ELSE 394 sizen(:,:,:) = 1. 395 ENDIF 396 397 ! PISCES-QUOTA specific part 355 398 IF( ln_p5z ) THEN 356 IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 399 ! Read the size of the different phytoplankton groups 400 ! If not in the restart file, they are set to 1 401 IF( iom_varid( numrtr, 'sizep', ldstop = .FALSE. ) > 0 ) THEN 357 402 CALL iom_get( numrtr, jpdom_auto, 'sizep' , sizep(:,:,:) ) 358 CALL iom_get( numrtr, jpdom_auto, 'sizen' , sizen(:,:,:) ) 359 CALL iom_get( numrtr, jpdom_auto, 'sized' , sized(:,:,:) ) 403 sizep(:,:,:) = MAX( 1.0, sizep(:,:,:) ) 360 404 ELSE 361 405 sizep(:,:,:) = 1. 362 sizen(:,:,:) = 1.363 sized(:,:,:) = 1.364 406 ENDIF 365 407 ENDIF 366 408 ! 367 409 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 410 ! write the specific variables of PISCES 368 411 IF( kt == nitrst ) THEN 369 412 IF(lwp) WRITE(numout,*) … … 375 418 CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 376 419 CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) 377 IF( ln_p5z ) THEN378 CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) )379 CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) )380 CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) )381 ENDIF420 CALL iom_rstput( kt, nitrst, numrtw, 'Consfe3', consfe3(:,:,:) ) ! Si max concentration 421 CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) ! Cumulative CO2 flux 422 CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) ) ! Size of nanophytoplankton 423 CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) ) ! Size of diatoms 424 IF( ln_p5z ) CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) ) ! Size of picophytoplankton 382 425 ENDIF 383 426 ! … … 389 432 !! *** p4z_dmp *** 390 433 !! 391 !! ** purpose : Relaxation of some tracers 434 !! ** purpose : Relaxation of the total budget of some elements 435 !! This routine avoids the model to drift far from the 436 !! observed content in various elements 437 !! Elements that may be relaxed : Alk, P, N, Si 392 438 !!---------------------------------------------------------------------- 393 439 ! … … 396 442 ! 397 443 REAL(wp) :: alkmean = 2426. ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 398 REAL(wp) :: po4mean = 2.1 65 ! mean value of phosphates399 REAL(wp) :: no3mean = 3 0.90 ! mean value of nitrate400 REAL(wp) :: silmean = 9 1.51! mean value of silicate444 REAL(wp) :: po4mean = 2.174 ! mean value of phosphate 445 REAL(wp) :: no3mean = 31.00 ! mean value of nitrate 446 REAL(wp) :: silmean = 90.33 ! mean value of silicate 401 447 ! 402 448 REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn … … 419 465 zsilsumn = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kmm) * cvol(:,:,:) ) * zarea 420 466 467 ! Correct the trn mean content of alkalinity 421 468 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 422 469 tr(:,:,:,jptal,Kmm) = tr(:,:,:,jptal,Kmm) * alkmean / zalksumn 423 470 471 ! Correct the trn mean content of PO4 424 472 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 425 473 tr(:,:,:,jppo4,Kmm) = tr(:,:,:,jppo4,Kmm) * po4mean / zpo4sumn 426 474 475 ! Correct the trn mean content of NO3 427 476 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 428 477 tr(:,:,:,jpno3,Kmm) = tr(:,:,:,jpno3,Kmm) * no3mean / zno3sumn 429 478 479 ! Correct the trn mean content of SiO3 430 480 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 431 481 tr(:,:,:,jpsil,Kmm) = MIN( 400.e-6,tr(:,:,:,jpsil,Kmm) * silmean / zsilsumn ) … … 439 489 440 490 IF(lwp) WRITE(numout,*) ' ' 491 ! Correct the trb mean content of alkalinity 441 492 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 442 493 tr(:,:,:,jptal,Kbb) = tr(:,:,:,jptal,Kbb) * alkmean / zalksumb 443 494 495 ! Correct the trb mean content of PO4 444 496 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 445 497 tr(:,:,:,jppo4,Kbb) = tr(:,:,:,jppo4,Kbb) * po4mean / zpo4sumb 446 498 499 ! Correct the trb mean content of NO3 447 500 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 448 501 tr(:,:,:,jpno3,Kbb) = tr(:,:,:,jpno3,Kbb) * no3mean / zno3sumb 449 502 503 ! Correct the trb mean content of SiO3 450 504 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 451 505 tr(:,:,:,jpsil,Kbb) = MIN( 400.e-6,tr(:,:,:,jpsil,Kbb) * silmean / zsilsumb ) … … 487 541 ENDIF 488 542 543 ! Compute the budget of NO3 489 544 IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 490 ! Compute the budget of NO3, ALK, Si, Fer491 545 IF( ln_p4z ) THEN 492 546 zwork(:,:,:) = tr(:,:,:,jpno3,Kmm) + tr(:,:,:,jpnh4,Kmm) & … … 506 560 ENDIF 507 561 ! 562 ! Compute the budget of PO4 508 563 IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 509 564 IF( ln_p4z ) THEN … … 524 579 ENDIF 525 580 ! 581 ! Compute the budget of SiO3 526 582 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 527 583 zwork(:,:,:) = tr(:,:,:,jpsil,Kmm) + tr(:,:,:,jpgsi,Kmm) + tr(:,:,:,jpdsi,Kmm) … … 540 596 ENDIF 541 597 ! 598 ! Compute the budget of Iron 542 599 IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 543 600 zwork(:,:,:) = tr(:,:,:,jpfer,Kmm) + tr(:,:,:,jpnfe,Kmm) + tr(:,:,:,jpdfe,Kmm) & 544 601 & + tr(:,:,:,jpbfe,Kmm) + tr(:,:,:,jpsfe,Kmm) & 545 & + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * ferat3602 & + ( tr(:,:,:,jpzoo,Kmm) * feratz + tr(:,:,:,jpmes,Kmm) ) * feratm 546 603 ! 547 604 ferbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:) ) -
NEMO/trunk/src/TOP/PISCES/P4Z/p5zlim.F90
r15090 r15459 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 :: zpsinh456 REAL(wp), PUBLIC :: zpsino357 REAL(wp), PUBLIC :: zpsiuptk41 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 :: xpsinh4 !: respiration cost of NH4 assimilation 57 REAL(wp), PUBLIC :: xpsino3 !: respiration cost of NO3 assimilation 58 REAL(wp), PUBLIC :: xpsiuptk !: 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, zxpsiuptk 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), DIMENSION(jpi,jpj,jpk) :: zrassn, zrassp, zrassd 127 140 !!--------------------------------------------------------------------- 128 141 ! … … 130 143 ! 131 144 zratchl = 6.0 145 sizena(:,:,:) = 0.0 ; sizepa(:,:,:) = 0.0 ; sizeda(:,:,:) = 0.0 132 146 ! 133 147 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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 148 ! Computation of the Chl/C ratio of each phytoplankton group 143 149 ! ------------------------------------------------------- 144 150 z1_trnphy = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) … … 149 155 zdiatchl = tr(ji,jj,jk,jpdch,Kbb) * z1_trndia 150 156 151 ! Computation of a variable Ks for iron on diatoms taking into account 152 ! that increasing biomass is made of generally bigger cells 157 ! Computation of a variable Ks for the different phytoplankton 158 ! group as a function of their relative size. Allometry 159 ! from Edwards et al. (2012) 153 160 !------------------------------------------------ 161 162 ! diatoms 154 163 zsized = sized(ji,jj,jk)**0.81 155 164 zconcdfe = concdfer * zsized … … 158 167 zconc0dpo4 = concdpo4 * zsized 159 168 160 zsizep = 1. 169 ! picophytoplankton 170 zsizep = sizep(ji,jj,jk)**0.81 161 171 zconcpfe = concpfer * zsizep 162 172 zconc0p = concpno3 * zsizep … … 164 174 zconc0ppo4 = concppo4 * zsizep 165 175 166 zsizen = 1. 176 ! nanophytoplankton 177 zsizen = sizen(ji,jj,jk)**0.81 167 178 zconcnfe = concnfer * zsizen 168 179 zconc0n = concnno3 * zsizen … … 173 184 ! From Talmy et al. (2014) and Maranon et al. (2013) 174 185 ! ------------------------------------------------------- 175 xqnnmin(ji,jj,jk) = qnnmin 186 xqnnmin(ji,jj,jk) = qnnmin * sizen(ji,jj,jk)**(-0.36) 176 187 xqnnmax(ji,jj,jk) = qnnmax 177 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0. 27)188 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.36) 178 189 xqndmax(ji,jj,jk) = qndmax 179 xqnpmin(ji,jj,jk) = qnpmin 190 xqnpmin(ji,jj,jk) = qnpmin * sizep(ji,jj,jk)**(-0.36) 180 191 xqnpmax(ji,jj,jk) = qnpmax 181 192 … … 183 194 ! Based on the different papers by Pahlow et al., and Smith et al. 184 195 ! ----------------------------------------------------------------- 196 zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk) 197 198 ! Nanophytoplankton 185 199 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0nnh4, & 186 200 & tr(ji,jj,jk,jpno3,Kbb) / zconc0n) … … 188 202 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0npo4 189 203 fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 190 znutlim = biron(ji,jj,jk)/ zconcnfe204 znutlim = zbiron / zconcnfe 191 205 fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 206 207 ! Picophytoplankton 192 208 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0pnh4, & 193 209 & tr(ji,jj,jk,jpno3,Kbb) / zconc0p) … … 195 211 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0ppo4 196 212 fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 197 znutlim = biron(ji,jj,jk)/ zconcpfe213 znutlim = zbiron / zconcpfe 198 214 fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 215 216 ! Diatoms 199 217 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc1dnh4, & 200 218 & tr(ji,jj,jk,jpno3,Kbb) / zconc1d ) … … 202 220 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0dpo4 203 221 fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 204 znutlim = biron(ji,jj,jk)/ zconcdfe222 znutlim = zbiron / zconcdfe 205 223 fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 206 ! 207 ! Michaelis-Menten Limitation term for nutrients Small bacteria 224 225 ! 226 ! Michaelis-Menten Limitation term by nutrients of 227 ! heterotrophic bacteria 208 228 ! ------------------------------------------------------------- 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) 229 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 230 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) 231 znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) & 232 & / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) 233 zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 234 zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 211 235 ! 212 236 zlim1 = zbactno3 + zbactnh4 … … 214 238 zlim3 = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 215 239 zlim4 = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc + tr(ji,jj,jk,jpdoc,Kbb) ) 240 241 ! Xlimbac is used for DOC solubilization whereas xlimbacl 242 ! is used for all the other bacterial-dependent term 243 ! ------------------------------------------------------- 216 244 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 217 245 xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 … … 219 247 ! Michaelis-Menten Limitation term for nutrients Small flagellates 220 248 ! ----------------------------------------------- 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 ! 249 ztrn = tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) 250 ztrp = tr(ji,jj,jk,jppo4,Kbb) + tr(ji,jj,jk,jpdop,Kbb) 251 ! 252 ! Limitation of N based nutrients uptake (NO3 and NH4) 253 zfalim = (1.-fanano) / fanano 254 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) ) 255 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) 256 znutlimtot = (1. - fanano) * ztrn / ( zfalim * zconc0n + ztrn ) 257 xnanonh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 258 xnanono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 259 ! 260 ! Limitation of P based nutrients (PO4 and DOP) 261 zfalim = (1.-fananop) / fananop 262 zlimpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0npo4 ) 263 zlimdop = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + zconc0npo4 ) 264 znutlimtot = (1. - fananop) * ztrp / ( zfalim * zconc0npo4 + ztrp ) 265 xnanopo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 266 xnanodop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 267 ! 268 ! Limitation of Fe uptake 232 269 zfalim = (1.-fananof) / fananof 233 xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 234 ! 270 xnanofer(ji,jj,jk) = (1. - fananof) * zbiron / ( zbiron + zfalim * zconcnfe ) 271 ! 272 ! The minimum iron quota depends on the size of PSU, respiration 273 ! and the reduction of nitrate following the parameterization 274 ! proposed by Flynn and Hipkin (1999) 235 275 zratiof = tr(ji,jj,jk,jpnfe,Kbb) * z1_trnphy 236 276 zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 277 xqfuncfecn(ji,jj,jk) = zqfemn + qfnopt 237 278 ! 238 279 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) &280 zration = MIN(xqnnmax(ji,jj,jk), MAX( xqnnmin(ji,jj,jk), zration )) 281 fvnuptk(ji,jj,jk) = 2.5 * xpsiuptk * xqnnmin(ji,jj,jk) / (zration + rtrn) & 241 282 & * MAX(0., (1. - zratchl * znanochl / 12. ) ) 242 283 ! 243 zlim1 = max(0., (zration - 2. *xqnnmin(ji,jj,jk) ) &244 & / (xqnnmax(ji,jj,jk) - 2. *xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) &284 zlim1 = max(0., (zration - xqnnmin(ji,jj,jk) ) & 285 & / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) & 245 286 & / (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 ) 287 ! The value of the optimal quota in the formulation below 288 ! has been found by solving a non linear equation 289 zlim1f = max(0., ( 1.13 - xqnnmin(ji,jj,jk) ) & 290 & / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) 291 zlim3 = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 292 ! computation of the various limitation terms of nanophyto 293 ! growth and PP 294 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 295 xlimphy (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 296 xlimphys(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 297 xlimnpn (ji,jj,jk) = MIN( 1., zlim1) 249 298 ! 250 299 ! Michaelis-Menten Limitation term for nutrients picophytoplankton 251 300 ! ---------------------------------------------------------------- 301 ! Limitation of N based nutrients uptake (NO3 and NH4) 252 302 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 ! 303 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0p + tr(ji,jj,jk,jpnh4,Kbb) ) 304 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0p + tr(ji,jj,jk,jpno3,Kbb) ) 305 znutlimtot = (1. - fapico) * ztrn / ( zfalim * zconc0p + ztrn ) 306 xpiconh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 307 xpicono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 308 ! 309 ! Limitation of P based nutrients uptake (PO4 and DOP) 257 310 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. 311 zlimpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0ppo4 ) 312 zlimdop = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + zconc0ppo4 ) 313 znutlimtot = (1. - fapicop) * ztrp / ( zfalim * zconc0ppo4 + ztrp) 314 xpicopo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 315 xpicodop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 262 316 ! 263 317 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 318 xpicofer(ji,jj,jk) = (1. - fapicof) * zbiron / ( zbiron + zfalim * zconcpfe ) 319 ! 320 ! The minimum iron quota depends on the size of PSU, respiration 321 ! and the reduction of nitrate following the parameterization 322 ! proposed by Flynn and Hipkin (1999) 323 zratiof = tr(ji,jj,jk,jppfe,Kbb) * z1_trnpic 267 324 zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 325 xqfuncfecp(ji,jj,jk) = zqfemp + qfpopt 268 326 ! 269 327 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) &328 zration = MIN(xqnpmax(ji,jj,jk), MAX( xqnpmin(ji,jj,jk), zration )) 329 fvpuptk(ji,jj,jk) = 2.5 * xpsiuptk * xqnpmin(ji,jj,jk) / (zration + rtrn) & 272 330 & * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 273 331 ! 274 zlim1 = max(0., (zration - 2. *xqnpmin(ji,jj,jk) ) &275 & / (xqnpmax(ji,jj,jk) - 2. *xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) &332 zlim1 = max(0., (zration - xqnpmin(ji,jj,jk) ) & 333 & / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) & 276 334 & / (zration + rtrn) 335 ! The value of the optimal quota in the formulation below 336 ! has been found by solving a non linear equation 337 zlim1f = max(0., (1.29 - xqnpmin(ji,jj,jk) ) & 338 & / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) 277 339 zlim3 = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 278 xlimpfe(ji,jj,jk) = MIN( 1., zlim3 ) 279 xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 340 341 ! computation of the various limitation terms of picophyto 342 ! growth and PP 343 xlimpfe (ji,jj,jk) = MIN( 1., zlim3 ) 344 xlimpic (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 345 xlimnpp (ji,jj,jk) = MIN( 1., zlim1 ) 346 xlimpics(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 347 348 280 349 ! 281 350 ! Michaelis-Menten Limitation term for nutrients Diatoms 282 351 ! ------------------------------------------------------ 352 ! 353 ! Limitation of N based nutrients uptake (NO3 and NH4) 283 354 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 ! 355 zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc1d + tr(ji,jj,jk,jpnh4,Kbb) ) 356 zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) 357 znutlimtot = (1.0 - fadiat) * ztrn / ( zfalim * zconc1d + ztrn ) 358 xdiatnh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 359 xdiatno3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 360 ! 361 ! Limitation of P based nutrients uptake (PO4 and DOP) 288 362 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 ! 363 zlimpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0dpo4 ) 364 zlimdop = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + zconc0dpo4 ) 365 znutlimtot = (1. - fadiatp) * ztrp / ( zfalim * zconc0dpo4 + ztrp ) 366 xdiatpo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 367 xdiatdop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 368 ! 369 ! Limitation of Fe uptake 294 370 zfalim = (1.-fadiatf) / fadiatf 295 xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 296 ! 371 xdiatfer(ji,jj,jk) = (1. - fadiatf) * zbiron / ( zbiron + zfalim * zconcdfe ) 372 ! 373 ! The minimum iron quota depends on the size of PSU, respiration 374 ! and the reduction of nitrate following the parameterization 375 ! proposed by Flynn and Hipkin (1999) 297 376 zratiof = tr(ji,jj,jk,jpdfe,Kbb) * z1_trndia 298 377 zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 378 xqfuncfecd(ji,jj,jk) = zqfemd + qfdopt 299 379 ! 300 380 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) &381 zration = MIN(xqndmax(ji,jj,jk), MAX( xqndmin(ji,jj,jk), zration )) 382 fvduptk(ji,jj,jk) = 2.5 * xpsiuptk * xqndmin(ji,jj,jk) / (zration + rtrn) & 303 383 & * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 304 384 ! 305 zlim1 = max(0., (zration - 2. *xqndmin(ji,jj,jk) ) &306 & / (xqndmax(ji,jj,jk) - 2. *xqndmin(ji,jj,jk) ) ) &385 zlim1 = max(0., (zration - xqndmin(ji,jj,jk) ) & 386 & / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) ) & 307 387 & * xqndmax(ji,jj,jk) / (zration + rtrn) 308 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) + rtrn ) 388 ! The value of the optimal quota in the formulation below 389 ! has been found by solving a non linear equation 390 zlim1f = max(0., (1.13 - xqndmin(ji,jj,jk) ) & 391 & / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) ) & 392 & * xqndmax(ji,jj,jk) 393 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) ) 309 394 zlim4 = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 395 ! computation of the various limitation terms of diatoms 396 ! growth and PP 310 397 xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 311 398 xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 399 xlimdias(ji,jj,jk) = MIN (1.0, zlim1 / (zlim1f + rtrn ), zlim3, zlim4 ) 312 400 xlimsi(ji,jj,jk) = MIN( zlim1, zlim4 ) 401 xlimnpd(ji,jj,jk) = MIN( 1., zlim1 ) 313 402 END_3D 403 314 404 ! 315 405 ! Compute the phosphorus quota values. It is based on Litchmann et al., 2004 and Daines et al, 2013. … … 319 409 ! -------------------------------------------------------------------------------------------------- 320 410 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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 411 ! Size estimation of nanophytoplankton based on total biomass 412 ! Assumes that larger biomass implies addition of larger cells 413 ! ------------------------------------------------------------ 414 zcoef = tr(ji,jj,jk,jpphy,Kbb) - MIN(xsizephy, tr(ji,jj,jk,jpphy,Kbb) ) 415 sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 326 416 ! N/P ratio of nanophytoplankton 327 417 ! ------------------------------ 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) ) ) ) 418 zfuptk = 0.2 + 0.12 / ( 3.0 * sizen(ji,jj,jk) + rtrn ) 419 ! Computed from Inomura et al. (2020) using Pavlova Lutheri 420 zrpho = 11.55 * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn ) 421 zrass = MAX(0.62/4., ( 1. - zrpho - zfuptk ) * xlimnpn(ji,jj,jk) ) 422 zrassn(ji,jj,jk) = zrass 423 xqpnmin(ji,jj,jk) = ( 0.0 + 0.0078 + 0.62/4. * 0.0783 ) * 16. 424 xqpnmax(ji,jj,jk) = ( zrpho * 0.0089 + zrass * 0.0783 ) * 16. 425 xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) + (0.033 + 0.0078 ) * 16. 426 xqpnmax(ji,jj,jk) = MIN( qpnmax, xqpnmax(ji,jj,jk) ) 427 428 ! Size estimation of picophytoplankton based on total biomass 429 ! Assumes that larger biomass implies addition of larger cells 430 ! ------------------------------------------------------------ 431 zcoef = tr(ji,jj,jk,jppic,Kbb) - MIN(xsizepic, tr(ji,jj,jk,jppic,Kbb) ) 432 sizepa(ji,jj,jk) = 1. + ( xsizerp -1.0 ) * zcoef / ( xsizepic + zcoef ) 339 433 340 434 ! N/P ratio of picophytoplankton 341 435 ! ------------------------------ 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) ) ) ) 436 zfuptk = 0.2 + 0.12 / ( 0.8 * sizep(ji,jj,jk) + rtrn ) 437 ! Computed from Inomura et al. (2020) using a synechococcus 438 zrpho = 13.4 * tr(ji,jj,jk,jppch,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) * 12. + rtrn ) 439 zrass = MAX(0.4/4., ( 1. - zrpho - zfuptk ) * xlimnpp(ji,jj,jk) ) 440 zrassp(ji,jj,jk) = zrass 441 xqppmin(ji,jj,jk) = ( (0.0 + 0.0078 ) + 0.4/4. * 0.0517 ) * 16. 442 xqppmax(ji,jj,jk) = ( zrpho * 0.0076 + zrass * 0.0517 ) * 16. 443 xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) + (0.033 + 0.0078 ) * 16 444 xqppmax(ji,jj,jk) = MIN( qppmax, xqppmax(ji,jj,jk) ) 445 446 ! Size estimation of diatoms based on total biomass 447 ! Assumes that larger biomass implies addition of larger cells 448 ! ------------------------------------------------------------ 353 449 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 450 sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 356 451 ! N/P ratio of diatoms 357 452 ! -------------------- 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 453 zfuptk = 0.2 + 0.12 / ( 5.0 * sized(ji,jj,jk) + rtrn ) 454 ! Computed from Inomura et al. (2020) using a synechococcus 455 zrpho = 8.08 * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpndi,Kbb) * 12. + rtrn ) 456 zrass = MAX(0.66/4., ( 1. - zrpho - zfuptk ) * xlimnpd(ji,jj,jk) ) 457 zrassd(ji,jj,jk)=zrass 458 xqpdmin(ji,jj,jk) = ( ( 0.0 + 0.0078 ) + 0.66/4. * 0.0783 ) * 16. 459 xqpdmax(ji,jj,jk) = ( zrpho * 0.0135 + zrass * 0.0783 ) * 16. 460 xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) + ( 0.0078 + 0.033 ) * 16. 461 xqpdmax(ji,jj,jk) = MIN(qpdmax, xqpdmax(ji,jj,jk) ) 365 462 END_3D 366 463 367 464 ! Compute the fraction of nanophytoplankton that is made of calcifiers 465 ! This is a purely adhoc formulation described in Aumont et al. (2015) 466 ! This fraction depends on nutrient limitation, light, temperature 368 467 ! -------------------------------------------------------------------- 369 468 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) … … 372 471 & / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) ) 373 472 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) )473 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) + 6.E-11 ) 474 ztem1 = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) + 1.8 ) 376 475 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 ) & 476 zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) * 30. / ( 30. + etot_ndcy(ji,jj,jk) ) 477 478 xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk) & 479 & * ztem1 / ( 0.1 + ztem1 ) * MAX( 1., tr(ji,jj,jk,jpphy,Kbb)*1E6 ) & 382 480 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & 383 481 & * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) … … 403 501 CALL iom_put( "SIZEP" , sizep (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 404 502 CALL iom_put( "SIZED" , sized (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 503 CALL iom_put( "RASSN" , zrassn (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 504 CALL iom_put( "RASSP" , zrassp (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 505 CALL iom_put( "RASSD" , zrassd (:,:,:) * tmask(:,:,:) ) ! Iron limitation term 405 506 ENDIF 406 507 ! … … 416 517 !! ** Purpose : Initialization of nutrient limitation parameters 417 518 !! 418 !! ** Method : Read the namp islim and nampisquota namelists and check519 !! ** Method : Read the namp5zlim and nampisquota namelists and check 419 520 !! the parameters called at the first timestep (nittrc000) 420 521 !! 421 !! ** input : Namelist namp islim522 !! ** input : Namelist namp5zlim 422 523 !! 423 524 !!---------------------------------------------------------------------- … … 436 537 ! 437 538 READ ( numnatp_ref, namp5zlim, IOSTAT = ios, ERR = 901) 438 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp islim in reference namelist' )539 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zlim in reference namelist' ) 439 540 ! 440 541 READ ( numnatp_cfg, namp5zlim, IOSTAT = ios, ERR = 902 ) 441 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp islim in configuration namelist' )542 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zlim in configuration namelist' ) 442 543 IF(lwm) WRITE ( numonp, namp5zlim ) 443 544 ! … … 505 606 ENDIF 506 607 ! 507 zpsino3 = 2.3 * rno3 508 zpsinh4 = 1.8 * rno3 509 zpsiuptk = 2.3 * rno3 608 ! Metabolic cost of nitrate and ammonium utilisation 609 xpsino3 = 2.3 * rno3 610 xpsinh4 = 1.8 * rno3 611 xpsiuptk = 1.0 / 6.625 510 612 ! 511 613 nitrfac(:,:,jpk) = 0._wp … … 537 639 & xpicopo4(jpi,jpj,jpk), xpicodop(jpi,jpj,jpk), & 538 640 & xnanodop(jpi,jpj,jpk), xdiatdop(jpi,jpj,jpk), & 539 & xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk), &540 641 & xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk), & 541 642 & fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk), & 643 & xlimphys(jpi,jpj,jpk), xlimdias(jpi,jpj,jpk), & 644 & xlimnpp (jpi,jpj,jpk), xlimnpn (jpi,jpj,jpk), & 645 & xlimnpd (jpi,jpj,jpk), & 646 & xlimpics(jpi,jpj,jpk), xqfuncfecp(jpi,jpj,jpk), & 542 647 & fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk), STAT=ierr(1) ) 543 648 ! -
NEMO/trunk/src/TOP/PISCES/P4Z/p5zmeso.F90
r15090 r15459 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 54 62 # include "do_loop_substitute.h90" 63 # include "domzgr_substitute.h90" 55 64 !!---------------------------------------------------------------------- 56 65 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 61 70 CONTAINS 62 71 63 SUBROUTINE p5z_meso( kt, knt, Kbb, K rhs )72 SUBROUTINE p5z_meso( kt, knt, Kbb, Kmm, Krhs ) 64 73 !!--------------------------------------------------------------------- 65 74 !! *** ROUTINE p5z_meso *** 66 75 !! 67 76 !! ** Purpose : Compute the sources/sinks for mesozooplankton 68 !! 69 !! ** Method : - ??? 77 !! This includes ingestion and assimilation, flux feeding 78 !! and mortality. We use an active prey switching 79 !! parameterization Morozov and Petrovskii (2013). 80 !! All living compartments and mesozooplankton 81 !! are potential preys of mesozooplankton as well as small 82 !! sinking particles 83 !! 70 84 !!--------------------------------------------------------------------- 71 85 INTEGER, INTENT(in) :: kt, knt ! ocean time step 72 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 73 INTEGER :: ji, jj, jk 86 INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 87 ! 88 INTEGER :: ji, jj, jk, jkt 74 89 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam, zcompames 75 REAL(wp) :: zgraze2, zdenom, zfact, zfood, zfoodlim, zproport 90 REAL(wp) :: zgraze2, zdenom, zfact, zfood, zfoodlim, zproport, zdep 76 91 REAL(wp) :: zmortzgoc, zfracc, zfracn, zfracp, zfracfe, zratio, zratio2 77 REAL(wp) :: zepsherf, zepshert, zepsher v, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi92 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 78 93 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 94 REAL(wp) :: zgradoct, zgradont, zgrareft, zgradopt 95 REAL(wp) :: zprcaca, zmortz, zexcess 82 96 REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf 83 97 REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot … … 87 101 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 88 102 REAL(wp) :: zgrazffnp, zgrazffng, zgrazffpp, zgrazffpg 103 REAL(wp) :: zmigreltime, zrum, zcodel, zargu, zval, zmigthick 89 104 CHARACTER (len=25) :: charout 90 REAL(wp) :: zrfact2, zmetexcess 91 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2, zz2ligprod 105 REAL(wp) :: zrfact2, zmetexcess, zsigma, zdiffdn 106 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 107 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarem, zgraref, zgrapoc, zgrapof 108 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarep, zgraren, zgrapon, zgrapop 109 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgradoc, zgradon, zgradop 110 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrem, zgramigref, zgramigpoc, zgramigpof 111 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrep, zgramigren, zgramigpop, zgramigpon 112 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigdoc, zgramigdop, zgramigdon 113 92 114 93 115 !!--------------------------------------------------------------------- … … 95 117 IF( ln_timing ) CALL timing_start('p5z_meso') 96 118 ! 119 ! Initialization of local arrays 120 zgrazing(:,:,:) = 0._wp ; zfezoo2(:,:,:) = 0._wp 121 zgrarem (:,:,:) = 0._wp ; zgraren(:,:,:) = 0._wp 122 zgrarep (:,:,:) = 0._wp ; zgraref(:,:,:) = 0._wp 123 zgrapoc (:,:,:) = 0._wp ; zgrapon(:,:,:) = 0._wp 124 zgrapop (:,:,:) = 0._wp ; zgrapof(:,:,:) = 0._wp 125 zgradoc (:,:,:) = 0._wp ; zgradon(:,:,:) = 0._wp 126 zgradop (:,:,:) = 0._wp 127 ! 128 129 ! 130 ! Diurnal vertical migration of mesozooplankton 131 ! Computation of the migration depth 132 ! --------------------------------------------- 133 IF( ln_dvm_meso ) CALL p5z_meso_depmig( Kbb, Kmm ) 134 135 ! Use of excess carbon for metabolism 97 136 zmetexcess = 0.0 98 137 IF ( bmetexc2 ) zmetexcess = 1.0 … … 102 141 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 103 142 104 ! Michaelis-Menten mortality rates of mesozooplankton 105 ! --------------------------------------------------- 143 ! linear mortality of mesozooplankton 144 ! A michaelis menten modulation term is used to avoid extinction of 145 ! mesozooplankton at very low food concentrations 146 ! ----------------------------------------------------------------- 106 147 zrespz = resrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) ) & 107 148 & + 3. * nitrfac(ji,jj,jk) ) 108 149 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 ! --------------------------------------------------------------- 150 ! Zooplankton quadratic mortality. A square function has been selected with 151 ! to mimic predation and disease (density dependent mortality). It also tends 152 ! to stabilise the model 153 ! ------------------------------------------------------------------------- 112 154 ztortz = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 113 155 … … 121 163 zcompames = MAX( ( tr(ji,jj,jk,jpmes,Kbb) - xthresh2mes ), 0.e0 ) 122 164 123 ! Mesozooplankton grazing 124 ! ------------------------ 165 ! Mesozooplankton grazing 166 ! The total amount of food is the sum of all preys accessible to mesozooplankton 167 ! multiplied by their food preference 168 ! A threshold can be specified in the namelist (xthresh2). However, when food 169 ! concentration is close to this threshold, it is decreased to avoid the 170 ! accumulation of food in the mesozoopelagic domain 171 ! ------------------------------------------------------------------------------- 125 172 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc & 126 173 & + xpref2m * zcompames … … 129 176 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 130 177 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 178 ! An active switching parameterization is used here. 179 ! We don't use the KTW parameterization proposed by 180 ! Vallina et al. because it tends to produce too steady biomass 181 ! composition and the variance of Chl is too low as it grazes 182 ! too strongly on winning organisms. We use a generalized 183 ! switching parameterization proposed by Morozov and 184 ! Petrovskii (2013) 185 ! ------------------------------------------------------------ 186 ! The width of the selection window is increased when preys 187 ! have low abundance, .i.e. zooplankton become less specific 188 ! to avoid starvation. 189 ! ---------------------------------------------------------- 190 zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3) 191 zsigma = xsigma2 + xsigma2del * zsigma 192 ! Nanophytoplankton and diatoms are the only preys considered 193 ! to be close enough to have potential interference 194 ! ----------------------------------------------------------- 195 zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 196 ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / (1.0 + zdiffdn) 197 ztmp2 = xpref2m * zcompames**2 198 ztmp3 = xpref2c * zcompapoc**2 199 ztmp4 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / (1.0 + zdiffdn) 200 ztmp5 = xpref2z * zcompaz**2 144 201 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 145 202 ztmp1 = ztmp1 / ztmptot … … 166 223 zgrazpof = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 167 224 168 ! Mesozooplankton flux feeding on GOC 169 ! ---------------------------------- 225 ! Mesozooplankton flux feeding on GOC and POC. The feeding pressure 226 ! is proportional to the flux 227 ! ------------------------------------------------------------------ 170 228 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 171 229 & * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & … … 183 241 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 184 242 185 ! Compute the proportion of filter feeders 186 ! ---------------------------------------- 187 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 243 ! Compute the proportion of filter feeders. It is assumed steady state. 244 ! --------------------------------------------------------------------- 245 zproport = 0._wp 246 IF( gdepw(ji,jj,jk+1,Kmm) > MAX(hmld(ji,jj), heup_01(ji,jj) ) ) THEN 247 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 248 ENDIF 188 249 189 250 ! Compute fractionation of aggregates. It is assumed that … … 195 256 zfracc = zproport * grazflux * xstep * wsbio4(ji,jj,jk) & 196 257 & * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & 197 & * ( 0. 2 + 3.8* zratio2 / ( 1.**2 + zratio2 ) )258 & * ( 0.4 + 3.6 * zratio2 / ( 1.**2 + zratio2 ) ) 198 259 zfracfe = zfracc * tr(ji,jj,jk,jpbfe,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 199 260 zfracn = zfracc * tr(ji,jj,jk,jpgon,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 200 261 zfracp = zfracc * tr(ji,jj,jk,jpgop,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 201 262 202 zgrazffep = zproport * zgrazffep ; zgrazffeg = zproport * zgrazffeg 203 zgrazfffp = zproport * zgrazfffp ; zgrazfffg = zproport * zgrazfffg 204 zgrazffnp = zproport * zgrazffnp ; zgrazffng = zproport * zgrazffng 205 zgrazffpp = zproport * zgrazffpp ; zgrazffpg = zproport * zgrazffpg 263 ! Flux feeding is multiplied by the fractional biomass of flux feeders 264 zgrazffep = zproport * zgrazffep ; zgrazffeg = zproport * zgrazffeg 265 zgrazfffp = zproport * zgrazfffp ; zgrazfffg = zproport * zgrazfffg 266 zgrazffnp = zproport * zgrazffnp ; zgrazffng = zproport * zgrazffng 267 zgrazffpp = zproport * zgrazffpp ; zgrazffpg = zproport * zgrazffpg 268 zgrazdc = (1.0 - zproport) * zgrazdc ; zgraznc = (1.0 - zproport) * zgraznc 269 zgrazz = (1.0 - zproport) * zgrazz ; zgrazpoc = (1.0 - zproport) * zgrazpoc 270 zgrazm = (1.0 - zproport) * zgrazm 271 zgrazdn = (1.0 - zproport) * zgrazdn ; zgraznn = (1.0 - zproport) * zgraznn 272 zgrazpon = (1.0 - zproport) * zgrazpon 273 zgrazdp = (1.0 - zproport) * zgrazdp ; zgraznp = (1.0 - zproport) * zgraznp 274 zgrazpop = (1.0 - zproport) * zgrazpop 275 zgrazdf = (1.0 - zproport) * zgrazdf ; zgraznf = (1.0 - zproport) * zgraznf 276 zgrazpof = (1.0 - zproport) * zgrazpof 206 277 207 278 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 208 zgraztotf = zgrazdf + zgraznf + ( zgrazz + zgrazm ) * ferat3+ zgrazpof &279 zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazm * feratm + zgrazpof & 209 280 & + zgrazfffp + zgrazfffg 210 281 zgraztotn = zgrazdn + (zgrazm + zgrazz) * no3rat3 + zgraznn + zgrazpon & … … 213 284 & + zgrazffpp + zgrazffpg 214 285 215 216 286 ! Total grazing ( grazing by microzoo is already computed in p5zmicro ) 217 287 zgrazing(ji,jj,jk) = zgraztotc … … 223 293 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 224 294 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) 295 ! Mesozooplankton efficiency. 296 ! We adopt a formulation proposed by Mitra et al. (2007) 297 ! The gross growth efficiency is controled by the most limiting nutrient. 298 ! Growth is also further decreased when the food quality is poor. This is currently 299 ! hard coded : it can be decreased by up to 50% (zepsherq) 300 ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 301 ! Fulton, 2012) 302 ! ----------------------------------------------------------------------------------- 303 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / feratm) 229 304 zbeta = MAX(0., (epsher2 - epsher2min) ) 230 305 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 231 zepsherv = zepsherf * zepshert 306 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 307 zepsherv = zepsherf * zepshert * zepsherq 232 308 233 309 ! Respiration of mesozooplankton 234 310 ! Excess carbon in the food is used preferentially 235 ! ---------------- ------------------------------ 311 ! when bmetexc2 is set to .true. 312 ! ----------------------------------------------- 236 313 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 237 314 zbasresb = MAX(0., zrespz - zexcess) … … 246 323 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 247 324 zbasresp = zbasresi * zexcess * zgrasratp 248 zexcess = ( zgrasratf/ ferat 3- zepshert ) / ( 1.0 - zepshert + rtrn)325 zexcess = ( zgrasratf/ feratm - zepshert ) / ( 1.0 - zepshert + rtrn) 249 326 zbasresf = zbasresi * zexcess * zgrasratf 250 327 … … 254 331 zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 255 332 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 333 zgrareft = (1. - unass2c) * zgraztotf - zepsherv * feratm * zgraztotc - zbasresf 334 ztmp1 = (1. - epsher2 - unass2c) /( 1. - epsher2 ) * ztortz 335 336 zgradoc(ji,jj,jk) = (zgradoct + ztmp1) * ssigma2 337 zgradon(ji,jj,jk) = (zgradont + no3rat3 * ztmp1) * ssigma2 338 zgradop(ji,jj,jk) = (zgradopt + po4rat3 * ztmp1) * ssigma2 339 262 340 263 341 ! Since only semilabile DOM is represented in PISCES … … 265 343 ! as dissolved inorganic compounds (ssigma2) 266 344 ! -------------------------------------------------- 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 )345 zgrarem(ji,jj,jk) = ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 346 zgraren(ji,jj,jk) = ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 347 zgrarep(ji,jj,jk) = ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 348 zgraref(ji,jj,jk) = zgrareft + feratm * ztmp1 271 349 272 350 ! Defecation as a result of non assimilated products 273 351 ! -------------------------------------------------- 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 ) * ztortz352 zgrapoc(ji,jj,jk) = zgraztotc * unass2c + unass2c / ( 1. - epsher2 ) * ztortz 353 zgrapon(ji,jj,jk) = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - epsher2 ) * ztortz 354 zgrapop(ji,jj,jk) = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - epsher2 ) * ztortz 355 zgrapof(ji,jj,jk) = zgraztotf * unass2c + feratm * unass2c / ( 1. - epsher2 ) * ztortz 278 356 279 357 ! Addition of respiration to the release of inorganic nutrients 280 358 ! ------------------------------------------------------------- 281 zgrarem = zgrarem + zbasresi + zrespirc 282 zgraren = zgraren + zbasresn + zrespirc * no3rat3 283 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 284 zgraref = zgraref + zbasresf + zrespirc * ferat3 359 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) + zbasresi + zrespirc 360 zgraren(ji,jj,jk) = zgraren(ji,jj,jk) + zbasresn + zrespirc * no3rat3 361 zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) + zbasresp + zrespirc * po4rat3 362 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) + zbasresf + zrespirc * feratm 363 285 364 286 365 ! Update the arrays TRA which contain the biological sources and 287 366 ! sinks 288 367 ! -------------------------------------------------------------- 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 368 tr(ji,jj,jk,jpmes,Krhs) = tr(ji,jj,jk,jpmes,Krhs) + zepsherv * zgraztotc - zrespirc & 306 369 & - ztortz - zgrazm … … 324 387 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zgrazpon - zgrazffnp + zfracn 325 388 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 389 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg - zfracc 328 390 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- zfracp391 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) - zgrazffng - zfracn 392 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) - zgrazffpg - zfracp 331 393 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- zfracfe394 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg - zfracfe 333 395 zfracal = tr(ji,jj,jk,jpcal,Kbb) / ( tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 334 396 zgrazcal = zgrazffeg * (1. - part2) * zfracal 335 397 336 ! calcite production 337 ! ------------------ 398 ! Calcite production 399 ! Calcite remineralization due to zooplankton activity 400 ! part2 of the ingested calcite is dissolving in the acidic gut 401 ! ------------------------------------------------------------- 338 402 zprcaca = xfracal(ji,jj,jk) * zgraznc 339 403 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) … … 343 407 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) - zgrazcal + zprcaca 344 408 END_3D 409 410 411 ! Computation of the effect of DVM by mesozooplankton 412 ! This part is only activated if ln_dvm_meso is set to true 413 ! The parameterization has been published in Gorgues et al. (2019). 414 ! ----------------------------------------------------------------- 415 IF( ln_dvm_meso ) THEN 416 ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 417 ALLOCATE( zgramigrep(jpi,jpj), zgramigren(jpi,jpj), zgramigpop(jpi,jpj), zgramigpon(jpi,jpj) ) 418 ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj) ) 419 zgramigrem(:,:) = 0.0 ; zgramigref(:,:) = 0.0 420 zgramigrep(:,:) = 0.0 ; zgramigren(:,:) = 0.0 421 zgramigpoc(:,:) = 0.0 ; zgramigpof(:,:) = 0.0 422 zgramigpop(:,:) = 0.0 ; zgramigpon(:,:) = 0.0 423 zgramigdoc(:,:) = 0.0 ; zgramigdon(:,:) = 0.0 424 zgramigdop(:,:) = 0.0 425 426 ! Compute the amount of materials that will go into vertical migration 427 ! This fraction is sumed over the euphotic zone and is removed from 428 ! the fluxes driven by mesozooplankton in the euphotic zone. 429 ! -------------------------------------------------------------------- 430 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 431 zmigreltime = (1. - strn(ji,jj)) 432 IF( gdept(ji,jj,jk,Kmm) <= heup(ji,jj) ) THEN 433 zmigthick = e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) * ( 1. - zmigreltime ) 434 zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * zmigthick 435 zgramigrep(ji,jj) = zgramigrep(ji,jj) + xfracmig * zgrarep(ji,jj,jk) * zmigthick 436 zgramigren(ji,jj) = zgramigren(ji,jj) + xfracmig * zgraren(ji,jj,jk) * zmigthick 437 zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * zmigthick 438 zgramigpoc(ji,jj) = zgramigpoc(ji,jj) + xfracmig * zgrapoc(ji,jj,jk) * zmigthick 439 zgramigpop(ji,jj) = zgramigpop(ji,jj) + xfracmig * zgrapop(ji,jj,jk) * zmigthick 440 zgramigpon(ji,jj) = zgramigpon(ji,jj) + xfracmig * zgrapon(ji,jj,jk) * zmigthick 441 zgramigpof(ji,jj) = zgramigpof(ji,jj) + xfracmig * zgrapof(ji,jj,jk) * zmigthick 442 zgramigdoc(ji,jj) = zgramigdoc(ji,jj) + xfracmig * zgradoc(ji,jj,jk) * zmigthick 443 zgramigdop(ji,jj) = zgramigdop(ji,jj) + xfracmig * zgradop(ji,jj,jk) * zmigthick 444 zgramigdon(ji,jj) = zgramigdon(ji,jj) + xfracmig * zgradon(ji,jj,jk) * zmigthick 445 446 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 447 zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 448 zgraren(ji,jj,jk) = zgraren(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 449 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 450 zgrapoc(ji,jj,jk) = zgrapoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 451 zgrapop(ji,jj,jk) = zgrapop(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 452 zgrapon(ji,jj,jk) = zgrapon(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 453 zgrapof(ji,jj,jk) = zgrapof(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 454 zgradoc(ji,jj,jk) = zgradoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 455 zgradop(ji,jj,jk) = zgradop(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 456 zgradon(ji,jj,jk) = zgradon(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 457 ENDIF 458 END_3D 459 460 ! The inorganic and organic fluxes induced by migrating organisms are added at the 461 ! the migration depth (corresponding indice is set by kmig) 462 ! -------------------------------------------------------------------------------- 463 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 464 IF( tmask(ji,jj,1) == 1. ) THEN 465 jkt = kmig(ji,jj) 466 zdep = 1. / e3t(ji,jj,jkt,Kmm) 467 zgrarem(ji,jj,jkt) = zgrarem(ji,jj,jkt) + zgramigrem(ji,jj) * zdep 468 zgrarep(ji,jj,jkt) = zgrarep(ji,jj,jkt) + zgramigrep(ji,jj) * zdep 469 zgraren(ji,jj,jkt) = zgraren(ji,jj,jkt) + zgramigren(ji,jj) * zdep 470 zgraref(ji,jj,jkt) = zgraref(ji,jj,jkt) + zgramigref(ji,jj) * zdep 471 zgrapoc(ji,jj,jkt) = zgrapoc(ji,jj,jkt) + zgramigpoc(ji,jj) * zdep 472 zgrapop(ji,jj,jkt) = zgrapop(ji,jj,jkt) + zgramigpop(ji,jj) * zdep 473 zgrapon(ji,jj,jkt) = zgrapon(ji,jj,jkt) + zgramigpon(ji,jj) * zdep 474 zgrapof(ji,jj,jkt) = zgrapof(ji,jj,jkt) + zgramigpof(ji,jj) * zdep 475 zgradoc(ji,jj,jkt) = zgradoc(ji,jj,jkt) + zgramigdoc(ji,jj) * zdep 476 zgradop(ji,jj,jkt) = zgradop(ji,jj,jkt) + zgramigdop(ji,jj) * zdep 477 zgradon(ji,jj,jkt) = zgradon(ji,jj,jkt) + zgramigdon(ji,jj) * zdep 478 ENDIF 479 END_2D 480 ! 481 ! Deallocate temporary variables 482 ! ------------------------------ 483 DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof ) 484 DEALLOCATE( zgramigrep, zgramigren, zgramigpop, zgramigpon ) 485 DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop ) 486 ! End of the ln_dvm_meso part 487 ENDIF 488 489 ! Update the arrays TRA which contain the biological sources and sinks 490 ! This only concerns the variables which are affected by DVM (inorganic 491 ! nutrients, DOC agands, and particulate organic carbon). 492 ! --------------------------------------------------------------------- 493 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 494 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarep(ji,jj,jk) 495 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgraren(ji,jj,jk) 496 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgradoc(ji,jj,jk) 497 ! 498 IF( ln_ligand ) & 499 & tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgradoc(ji,jj,jk) * ldocz 500 ! 501 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zgradon(ji,jj,jk) 502 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop(ji,jj,jk) 503 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem(ji,jj,jk) 504 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref(ji,jj,jk) 505 zfezoo2(ji,jj,jk) = zgraref(ji,jj,jk) 506 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem(ji,jj,jk) 507 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgraren(ji,jj,jk) 508 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zgrapoc(ji,jj,jk) 509 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc(ji,jj,jk) 510 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) + zgrapon(ji,jj,jk) 511 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + zgrapop(ji,jj,jk) 512 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zgrapof(ji,jj,jk) 513 END_3D 345 514 ! 346 515 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 516 CALL iom_put( "PCAL" , prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Calcite production 517 CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Total grazing of phyto by zoo 518 CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 519 IF( ln_ligand ) & 520 & CALL iom_put( "LPRODZ2", zgradoc(:,:,:) * ldocz * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 357 521 ENDIF 358 522 ! … … 374 538 !! ** Purpose : Initialization of mesozooplankton parameters 375 539 !! 376 !! ** Method : Read the namp ismes namelist and check the parameters540 !! ** Method : Read the namp5zmes namelist and check the parameters 377 541 !! called at the first timestep (nittrc000) 378 542 !! 379 !! ** input : Namelist namp ismes543 !! ** input : Namelist namp5zmes 380 544 !! 381 545 !!---------------------------------------------------------------------- 382 INTEGER :: ios 546 INTEGER :: ios ! Local integer output status for namelist read 383 547 !! 384 548 NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2n, xpref2z, & 385 549 & xpref2m, xpref2d, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 386 550 & xthresh2mes, xthresh2, xkgraz2, epsher2, epsher2min, ssigma2, unass2c, & 387 & unass2n, unass2p, srespir2, grazflux551 & unass2n, unass2p, srespir2, xsigma2, xsigma2del, grazflux, ln_dvm_meso, xfracmig 388 552 !!---------------------------------------------------------------------- 389 553 ! 390 554 READ ( numnatp_ref, namp5zmes, IOSTAT = ios, ERR = 901) 391 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp ismes in reference namelist' )555 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zmes in reference namelist' ) 392 556 ! 393 557 READ ( numnatp_cfg, namp5zmes, IOSTAT = ios, ERR = 902 ) 394 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp ismes in configuration namelist' )558 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zmes in configuration namelist' ) 395 559 IF(lwm) WRITE ( numonp, namp5zmes ) 396 560 ! … … 424 588 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 = ', xkgraz2 425 589 WRITE(numout,*) ' Use excess carbon for respiration bmetexc2 = ', bmetexc2 590 WRITE(numout,*) ' Width of the grazing window xsigma2 =', xsigma2 591 WRITE(numout,*) ' Maximum additional width of the grazing window xsigma2del =', xsigma2del 592 WRITE(numout,*) ' Diurnal vertical migration of mesozoo. ln_dvm_meso =', ln_dvm_meso 593 WRITE(numout,*) ' Fractional biomass of meso that performs DVM xfracmig =', xfracmig 426 594 ENDIF 427 595 ! 428 596 END SUBROUTINE p5z_meso_init 597 598 SUBROUTINE p5z_meso_depmig( Kbb, Kmm ) 599 !!---------------------------------------------------------------------- 600 !! *** ROUTINE p4z_meso_depmig *** 601 !! 602 !! ** Purpose : Computation the migration depth of mesozooplankton 603 !! 604 !! ** Method : Computes the DVM depth of mesozooplankton from oxygen 605 !! temperature and chlorophylle following the parameterization 606 !! proposed by Bianchi et al. (2013) 607 !!---------------------------------------------------------------------- 608 INTEGER, INTENT(in) :: Kbb, kmm ! time level indices 609 ! 610 INTEGER :: ji, jj, jk 611 ! 612 REAL(wp) :: ztotchl, z1dep 613 REAL(wp), DIMENSION(jpi,jpj) :: oxymoy, tempmoy, zdepmoy 614 615 !!--------------------------------------------------------------------- 616 ! 617 IF( ln_timing == 1 ) CALL timing_start('p5z_meso_zdepmig') 618 ! 619 oxymoy(:,:) = 0. 620 tempmoy(:,:) = 0. 621 zdepmoy(:,:) = 0. 622 depmig (:,:) = 5. 623 kmig (:,:) = 1 624 ! 625 626 ! Compute the averaged values of oxygen, temperature over the domain 627 ! 150m to 500 m depth. 628 ! ------------------------------------------------------------------ 629 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpk ) 630 IF( tmask(ji,jj,jk) == 1.) THEN 631 IF( gdept(ji,jj,jk,Kmm) >= 150. .AND. gdept(ji,jj,jk,kmm) <= 500.) THEN 632 oxymoy(ji,jj) = oxymoy(ji,jj) + tr(ji,jj,jk,jpoxy,Kbb) * 1E6 * e3t(ji,jj,jk,Kmm) 633 tempmoy(ji,jj) = tempmoy(ji,jj) + ts(ji,jj,jk,jp_tem,kmm) * e3t(ji,jj,jk,kmm) 634 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 635 ENDIF 636 ENDIF 637 END_3D 638 639 ! Compute the difference between surface values and the mean values in the mesopelagic 640 ! domain 641 ! ------------------------------------------------------------------------------------ 642 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 643 z1dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 644 oxymoy(ji,jj) = tr(ji,jj,1,jpoxy,Kbb) * 1E6 - oxymoy(ji,jj) * z1dep 645 tempmoy(ji,jj) = ts(ji,jj,1,jp_tem,Kmm) - tempmoy(ji,jj) * z1dep 646 END_2D 647 ! 648 ! Computation of the migration depth based on the parameterization of 649 ! Bianchi et al. (2013) 650 ! ------------------------------------------------------------------- 651 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 652 IF( tmask(ji,jj,1) == 1. ) THEN 653 ztotchl = ( tr(ji,jj,1,jppch,Kbb) + tr(ji,jj,1,jpnch,Kbb) + tr(ji,jj,1,jpdch,Kbb) ) * 1E6 654 depmig(ji,jj) = 398. - 0.56 * oxymoy(ji,jj) -115. * log10(ztotchl) + 0.36 * hmld(ji,jj) -2.4 * tempmoy(ji,jj) 655 ENDIF 656 END_2D 657 658 ! Computation of the corresponding jk indice 659 ! ------------------------------------------ 660 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1 ) 661 IF( depmig(ji,jj) >= gdepw(ji,jj,jk,Kmm) .AND. depmig(ji,jj) < gdepw(ji,jj,jk+1,Kmm) ) THEN 662 kmig(ji,jj) = jk 663 ENDIF 664 END_3D 665 ! 666 ! Correction of the migration depth and indice based on O2 levels 667 ! If O2 is too low, imposing a migration depth at this low O2 levels 668 ! would lead to negative O2 concentrations (respiration while O2 is close 669 ! to 0. Thus, to avoid that problem, the migration depth is adjusted so 670 ! that it falls above the OMZ 671 ! ----------------------------------------------------------------------- 672 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 673 IF( tr(ji,jj,kmig(ji,jj),jpoxy,Kbb) < 5E-6 ) THEN 674 DO jk = kmig(ji,jj),1,-1 675 IF( tr(ji,jj,jk,jpoxy,Kbb) >= 5E-6 .AND. tr(ji,jj,jk+1,jpoxy,Kbb) < 5E-6) THEN 676 kmig(ji,jj) = jk 677 depmig(ji,jj) = gdept(ji,jj,jk,Kmm) 678 ENDIF 679 END DO 680 ENDIF 681 END_2D 682 ! 683 IF( ln_timing ) CALL timing_stop('p5z_meso_depmig') 684 ! 685 END SUBROUTINE p5z_meso_depmig 686 687 INTEGER FUNCTION p5z_meso_alloc() 688 !!---------------------------------------------------------------------- 689 !! *** ROUTINE p5z_meso_alloc *** 690 !!---------------------------------------------------------------------- 691 ! 692 ALLOCATE( depmig(jpi,jpj), kmig(jpi,jpj), STAT= p5z_meso_alloc ) 693 ! 694 IF( p5z_meso_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p5z_meso_alloc : failed to allocate arrays.' ) 695 ! 696 END FUNCTION p5z_meso_alloc 429 697 430 698 !!====================================================================== -
NEMO/trunk/src/TOP/PISCES/P4Z/p5zmicro.F90
r15090 r15459 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/trunk/src/TOP/PISCES/P4Z/p5zmort.F90
r15090 r15459 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( nn_hls, nn_hls, nn_hls, nn_hls, 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( nn_hls, nn_hls, nn_hls, nn_hls, 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/trunk/src/TOP/PISCES/P4Z/p5zprod.F90
r15090 r15459 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( nn_hls, nn_hls, nn_hls, nn_hls ) 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 134 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 135 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 136 zval = MAX( 1., zstrn(ji,jj) ) 137 IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 138 zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 116 zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp 117 118 ! Computation of the optimal production rates and nutrient uptake 119 ! rates. Based on a Q10 description of the thermal dependency. 120 zprnut (:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 121 zprmaxn(:,:,:) = 0.8_wp * (1. + xpsino3 * qnnmax ) * r1_rday * tgfunc(:,:,:) 122 zprmaxd(:,:,:) = 0.8_wp * (1. + xpsino3 * qndmax ) * r1_rday * tgfunc(:,:,:) 123 zprmaxp(:,:,:) = 0.6_wp * (1. + xpsino3 * qnpmax ) * r1_rday * tgfunc(:,:,:) 124 125 ! Impact of the day duration and light intermittency on phytoplankton growth 126 ! Intermittency is supposed to have a similar effect on production as 127 ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac. 128 ! zmxl_chl is the fractional day length and is used to compute the mean 129 ! PAR during daytime. The effect of mixing is computed using the 130 ! absolute light level definition of the euphotic zone 131 ! ------------------------------------------------------------------------- 132 133 IF ( ln_p4z_dcyc ) THEN ! Diurnal cycle in PISCES 134 135 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 136 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 137 IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 138 zval = MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 139 ENDIF 140 zmxl_chl(ji,jj,jk) = zval / 24. 141 zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 139 142 ENDIF 140 zmxl_chl(ji,jj,jk) = zval / 24. 141 zmxl_fac(ji,jj,jk) = 1.5 * zval / ( 12. + zval ) 142 ENDIF 143 END_3D 143 END_3D 144 145 ELSE ! No diurnal cycle in PISCES 146 147 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 148 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 149 zval = MAX( 1., strn(ji,jj) ) 150 IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN 151 zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 152 ENDIF 153 zmxl_chl(ji,jj,jk) = zval / 24. 154 zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 155 ENDIF 156 END_3D 157 158 ENDIF 144 159 145 160 zprbio(:,:,:) = zprmaxn(:,:,:) * zmxl_fac(:,:,:) … … 147 162 zprpic(:,:,:) = zprmaxp(:,:,:) * zmxl_fac(:,:,:) 148 163 149 150 164 ! Maximum light intensity 151 zdaylen(:,:) = MAX(1., zstrn(:,:)) / 24. 152 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 153 165 zdaylen(:,:) = MAX(1., strn(:,:)) / 24. 166 167 ! Computation of the P-I slope for nanos, picos and diatoms 168 ! The formulation proposed by Geider et al. (1997) has been used. 154 169 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 155 170 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN … … 158 173 zadap = xadap * ztn / ( 2.+ ztn ) 159 174 ! 175 ! Nanophytoplankton 160 176 zpislopeadn(ji,jj,jk) = pislopen * tr(ji,jj,jk,jpnch,Kbb) & 161 177 & /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn) 178 179 ! Picophytoplankton 162 180 zpislopeadp(ji,jj,jk) = pislopep * ( 1. + zadap * EXP( -0.25 * epico(ji,jj,jk) ) ) & 163 181 & * tr(ji,jj,jk,jppch,Kbb) /( tr(ji,jj,jk,jppic,Kbb) * 12. + rtrn) 182 183 ! Diatoms 164 184 zpislopeadd(ji,jj,jk) = pisloped * tr(ji,jj,jk,jpdch,Kbb) & 165 185 & /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn) … … 170 190 171 191 ! Computation of production function for Carbon 192 ! Actual light levels are used here 172 193 ! --------------------------------------------- 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 ! ------------------------------------------------- 194 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) / zmxl_fac(ji,jj,jk) ) ) 195 zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) / zmxl_fac(ji,jj,jk) ) ) 196 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) / zmxl_fac(ji,jj,jk) ) ) 197 198 ! Computation of production function for Chlorophyll 199 ! Mean light level in the mixed layer (when appropriate) 200 ! is used here (acclimation is in general slower than 201 ! the characteristic time scales of vertical mixing) 202 ! ------------------------------------------------------ 179 203 zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 180 204 zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) … … 187 211 188 212 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 189 190 213 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) 214 ! Si/C of diatoms 215 ! ------------------------ 216 ! Si/C increases with iron stress and silicate availability (zsilfac) 217 ! Si/C is arbitrariliy increased for very high Si concentrations 218 ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2) 219 ! A parameterization derived from Flynn (2003) is used for the control 220 ! when Si is not limiting which is similar to the parameterisation 221 ! proposed by Gurney and Davidson (1999). 222 ! ----------------------------------------------------------------------- 196 223 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 224 zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 199 225 zsiborn = tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) 200 226 IF (gphit(ji,jj) < -30 ) THEN 201 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 )227 zsilfac2 = 1. + 1. * zsiborn / ( zsiborn + xksi2**3 ) 202 228 ELSE 203 zsilfac2 = 1. + zsiborn / ( zsiborn + xksi2**3 )229 zsilfac2 = 1. 204 230 ENDIF 205 zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 206 ENDIF 207 END_3D 208 209 ! Sea-ice effect on production 231 zratiosi = 1.0 - tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / ( zsilfac2 * grosip * 3.0 + rtrn ) 232 zratiosi = MAX(0., MIN(1.0, zratiosi) ) 233 zmaxsi = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 234 IF ( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 235 zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zmaxsi 236 ELSE 237 zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.7 * zmaxsi 238 ENDIF 239 ENDIF 240 END_3D 241 242 ! Sea-ice effect on production 243 ! No production is assumed below sea ice 244 ! -------------------------------------- 210 245 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 211 246 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) … … 215 250 END_3D 216 251 217 ! Computation of the various production terms of nanophytoplankton 252 ! Computation of the various production and uptake terms of nanophytoplankton 253 ! Interactions between N and P are modeled according to the Chain Model 254 ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 255 ! Droop kinetics. When the quota is approaching the maximum achievable 256 ! quota, uptake is downregulated according to a sigmoidal function 257 ! (power 2), as proposed by Flynn (2003) 258 ! --------------------------------------------------------------------------- 218 259 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 219 260 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 220 261 ! production terms for nanophyto. 221 262 zprorcan(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tr(ji,jj,jk,jpphy,Kbb) * rfact2 222 ! 263 264 ! Size computation 265 ! Size is made a function of the limitation of of phytoplankton growth 266 ! Strongly limited cells are supposed to be smaller. sizena is the 267 ! size at time step t+1 and is thus updated at the end of the 268 ! current time step 269 ! -------------------------------------------------------------------- 270 zlimfac = xlimphys(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 271 zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 272 sizena(ji,jj,jk) = MIN(xsizern, MAX( sizena(ji,jj,jk), zsizetmp ) ) 273 ! Maximum potential uptake rate 223 274 zration = tr(ji,jj,jk,jpnph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 224 275 zratiop = tr(ji,jj,jk,jppph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) … … 226 277 zprnutmax = zprnut(ji,jj,jk) * fvnuptk(ji,jj,jk) / rno3 * tr(ji,jj,jk,jpphy,Kbb) * rfact2 227 278 ! 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))279 zratio = 1.0 - MIN( 1., zration / (xqnnmax(ji,jj,jk) + rtrn) ) 280 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 230 281 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpnmin(ji,jj,jk) ) & 231 282 & / ( 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) 283 zpronmax = zpronmax * xqnnmin(ji,jj,jk) / qnnmin 284 zpronewn(ji,jj,jk) = zpronmax * xnanono3(ji,jj,jk) 233 285 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))286 ! Uptake of phosphorus and DOP 287 zratio = 1.0 - MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) ) 288 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 237 289 zpropmax = zprnutmax * zmax * xlimnfe(ji,jj,jk) 238 290 zpropo4n(ji,jj,jk) = zpropmax * xnanopo4(ji,jj,jk) 239 291 zprodopn(ji,jj,jk) = zpropmax * xnanodop(ji,jj,jk) 240 292 ! 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 & 293 zqfnmax = xqfuncfecn(ji,jj,jk) + ( qfnmax - xqfuncfecn(ji,jj,jk) ) * xlimnpn(ji,jj,jk) 294 zratio = 1.0 - MIN( 1., zratiof / zqfnmax ) 295 zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) ) 296 zprofmax = zprnutmax * zqfnmax * zmax 297 zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) & 298 & * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn & 246 299 & + xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) ) 247 300 ENDIF 248 301 END_3D 249 302 250 ! Computation of the various production terms of picophytoplankton 303 ! Computation of the various production and uptake terms of picophytoplankton 304 ! Interactions between N and P are modeled according to the Chain Model 305 ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 306 ! Droop kinetics. When the quota is approaching the maximum achievable 307 ! quota, uptake is downregulated according to a sigmoidal function 308 ! (power 2), as proposed by Flynn (2003) 309 ! --------------------------------------------------------------------------- 251 310 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 252 311 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 253 312 ! production terms for picophyto. 254 313 zprorcap(ji,jj,jk) = zprpic(ji,jj,jk) * xlimpic(ji,jj,jk) * tr(ji,jj,jk,jppic,Kbb) * rfact2 255 ! 314 ! Size computation 315 ! Size is made a function of the limitation of of phytoplankton growth 316 ! Strongly limited cells are supposed to be smaller. sizepa is 317 ! size at time step t+1 and is thus updated at the end of the 318 ! current time step 319 ! -------------------------------------------------------------------- 320 zlimfac = zprchlp(ji,jj,jk) * xlimpics(ji,jj,jk) / ( zprmaxp(ji,jj,jk) + rtrn ) 321 zsizetmp = 1.0 + 1.3 * ( xsizerp - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 322 sizepa(ji,jj,jk) = min(xsizerp, max( sizepa(ji,jj,jk), zsizetmp ) ) 323 ! Maximum potential uptake rate of nutrients 256 324 zration = tr(ji,jj,jk,jpnpi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) 257 325 zratiop = tr(ji,jj,jk,jpppi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) … … 259 327 zprnutmax = zprnut(ji,jj,jk) * fvpuptk(ji,jj,jk) / rno3 * tr(ji,jj,jk,jppic,Kbb) * rfact2 260 328 ! 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))329 zratio = 1.0 - MIN( 1., zration / (xqnpmax(ji,jj,jk) + rtrn) ) 330 zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) ) 263 331 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqppmin(ji,jj,jk) ) & 264 332 & / ( 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) 333 zpronmax = zpronmax * xqnpmin(ji,jj,jk) / qnnmin 334 zpronewp(ji,jj,jk) = zpronmax * xpicono3(ji,jj,jk) 266 335 zproregp(ji,jj,jk) = zpronmax * xpiconh4(ji,jj,jk) 267 336 ! 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) 337 zratio = 1.0 - MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) ) 338 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 339 zpropmax = zprnutmax * zmax * xlimpfe(ji,jj,jk) 271 340 zpropo4p(ji,jj,jk) = zpropmax * xpicopo4(ji,jj,jk) 272 341 zprodopp(ji,jj,jk) = zpropmax * xpicodop(ji,jj,jk) 273 342 ! 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 & 343 zqfpmax = xqfuncfecp(ji,jj,jk) + ( qfpmax - xqfuncfecp(ji,jj,jk) ) * xlimnpp(ji,jj,jk) 344 zratio = 1.0 - MIN( 1., zratiof / zqfpmax ) 345 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 346 zprofmax = zprnutmax * zqfpmax * zmax 347 zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) & 348 & * (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn & 279 349 & + xpicono3(ji,jj,jk) + xpiconh4(ji,jj,jk) ) * (1. - xpicofer(ji,jj,jk) ) ) 280 350 ENDIF 281 351 END_3D 282 352 283 ! Computation of the various production terms of diatoms 353 ! Computation of the various production and uptake terms of diatoms 354 ! Interactions between N and P are modeled according to the Chain Model 355 ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 356 ! Droop kinetics. When the quota is approaching the maximum achievable 357 ! quota, uptake is downregulated according to a sigmoidal function 358 ! (power 2), as proposed by Flynn (2003) 359 ! --------------------------------------------------------------------------- 284 360 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 285 361 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 286 362 ! production terms for diatomees 287 363 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 ! 364 ! Size computation 365 ! Size is made a function of the limitation of of phytoplankton growth 366 ! Strongly limited cells are supposed to be smaller. sizeda is 367 ! size at time step t+1 and is thus updated at the end of the 368 ! current time step. 369 ! -------------------------------------------------------------------- 370 zlimfac = zprchld(ji,jj,jk) * xlimdias(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 371 zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 372 sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 373 ! Maximum potential uptake rate of nutrients 291 374 zration = tr(ji,jj,jk,jpndi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 292 375 zratiop = tr(ji,jj,jk,jppdi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) … … 294 377 zprnutmax = zprnut(ji,jj,jk) * fvduptk(ji,jj,jk) / rno3 * tr(ji,jj,jk,jpdia,Kbb) * rfact2 295 378 ! 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))379 zratio = 1.0 - MIN( 1., zration / (xqndmax(ji,jj,jk) + rtrn) ) 380 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 298 381 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpdmin(ji,jj,jk) ) & 299 382 & / ( 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) 383 zpronmax = zpronmax * xqndmin(ji,jj,jk) / qnnmin 384 zpronewd(ji,jj,jk) = zpronmax * xdiatno3(ji,jj,jk) 301 385 zproregd(ji,jj,jk) = zpronmax * xdiatnh4(ji,jj,jk) 302 386 ! 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))387 zratio = 1.0 - MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) ) 388 zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) ) 305 389 zpropmax = zprnutmax * zmax * xlimdfe(ji,jj,jk) 306 390 zpropo4d(ji,jj,jk) = zpropmax * xdiatpo4(ji,jj,jk) 307 391 zprodopd(ji,jj,jk) = zpropmax * xdiatdop(ji,jj,jk) 308 392 ! 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 & 393 zqfdmax = xqfuncfecd(ji,jj,jk) + ( qfdmax - xqfuncfecd(ji,jj,jk) ) * xlimnpd(ji,jj,jk) 394 zratio = 1.0 - MIN( 1., zratiof / zqfdmax ) 395 zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 396 zprofmax = zprnutmax * zqfdmax * zmax 397 zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) & 398 & * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn & 314 399 & + xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) ) 315 400 ENDIF 316 401 END_3D 317 402 403 ! Production of Chlorophyll. The formulation proposed by Geider et al. 404 ! is adopted here. 405 ! -------------------------------------------------------------------- 318 406 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 319 407 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN … … 321 409 znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 322 410 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 ) 411 zprochln = thetannm * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn ) 326 412 zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) ) 327 413 ! production terms for picophyto. ( chlorophyll ) 328 414 zpicotot = epicom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 329 415 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 ) 416 zprochlp = thetanpm * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 333 417 zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) ) 334 ! production terms for diatom ees ( chlorophyll )418 ! production terms for diatoms ( chlorophyll ) 335 419 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 336 420 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 ) 421 zprochld = thetandm * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn ) 340 422 zprochld = MAX(zprochld, chlcmin * 12. * zprorcad(ji,jj,jk) ) 341 423 ! Update the arrays TRA which contain the Chla sources and sinks … … 348 430 ! Update the arrays TRA which contain the biological sources and sinks 349 431 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 432 zpptot = zpropo4n(ji,jj,jk) + zpropo4d(ji,jj,jk) + zpropo4p(ji,jj,jk) 433 zpnewtot = zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) + zpronewp(ji,jj,jk) 434 zpregtot = zproregn(ji,jj,jk) + zproregd(ji,jj,jk) + zproregp(ji,jj,jk) 435 350 436 zprontot = zpronewn(ji,jj,jk) + zproregn(ji,jj,jk) 351 437 zproptot = zpronewp(ji,jj,jk) + zproregp(ji,jj,jk) 352 438 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) 439 ! 440 zproddoc = excretd * zprorcad(ji,jj,jk) & 441 & + excretn * zprorcan(ji,jj,jk) & 442 & + excretp * zprorcap(ji,jj,jk) 443 ! 444 zproddop = excretd * zpropo4d(ji,jj,jk) - texcretd * zprodopd(ji,jj,jk) & 445 & + excretn * zpropo4n(ji,jj,jk) - texcretn * zprodopn(ji,jj,jk) & 446 & + excretp * zpropo4p(ji,jj,jk) - texcretp * zprodopp(ji,jj,jk) 447 448 zproddon = excretd * zprodtot + excretn * zprontot + excretp * zproptot 449 450 zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 451 zresptot = zrespn(ji,jj,jk) + zrespp(ji,jj,jk) + zrespd(ji,jj,jk) 452 ! 453 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpptot 454 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpnewtot 455 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zpregtot 456 ! 457 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) & 458 & + zprorcan(ji,jj,jk) * texcretn & 459 & - xpsino3 * zpronewn(ji,jj,jk) & 460 & - xpsinh4 * zproregn(ji,jj,jk) & 461 & - zrespn(ji,jj,jk) 462 365 463 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 464 tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) + ( zpropo4n(ji,jj,jk) + zprodopn(ji,jj,jk) ) * texcretn 368 465 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) 466 467 ! 468 tr(ji,jj,jk,jppic,Krhs) = tr(ji,jj,jk,jppic,Krhs) & 469 & + zprorcap(ji,jj,jk) * texcretp & 470 & - xpsino3 * zpronewp(ji,jj,jk) & 471 & - xpsinh4 * zproregp(ji,jj,jk) & 472 & - zrespp(ji,jj,jk) 473 373 474 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 475 tr(ji,jj,jk,jpppi,Krhs) = tr(ji,jj,jk,jpppi,Krhs) + ( zpropo4p(ji,jj,jk) + zprodopp(ji,jj,jk) ) * texcretp 376 476 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) 477 478 ! 479 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) & 480 & + zprorcad(ji,jj,jk) * texcretd & 481 & - xpsino3 * zpronewd(ji,jj,jk) & 482 & - xpsinh4 * zproregd(ji,jj,jk) & 483 & - zrespd(ji,jj,jk) 484 381 485 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 486 tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) + ( zpropo4d(ji,jj,jk) + zprodopd(ji,jj,jk) ) * texcretd 384 487 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd 385 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 ! 488 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb) 489 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zproddoc 490 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zproddon 491 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zproddop 492 493 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) & 494 & + o2ut * zpregtot + ( o2ut + o2nit ) * zpnewtot - o2ut * zresptot 495 496 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprodfer 497 consfe3(ji,jj,jk) = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) & 498 & * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2 499 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb) 500 501 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zpptot & 502 & + xpsino3 * zpronewn(ji,jj,jk) + xpsinh4 * zproregn(ji,jj,jk) & 503 & + xpsino3 * zpronewp(ji,jj,jk) + xpsinh4 * zproregp(ji,jj,jk) & 504 & + xpsino3 * zpronewd(ji,jj,jk) + xpsinh4 * zproregd(ji,jj,jk) 505 506 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpnewtot - zpregtot ) 507 ! 508 END_3D 509 510 ! Production and uptake of ligands by phytoplankton. This part is activated 511 ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small 512 ! and based on the FeL model by Morel et al. (2008) and on the study of 513 ! Shaked and Lis (2012) 514 ! ------------------------------------------------------------------------- 410 515 IF( ln_ligand ) THEN 411 zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp412 516 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 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 517 zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) + excretp * zprorcap(ji,jj,jk) 518 zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 519 zprodlig = plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 520 ! 521 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zproddoc * ldocp - zprodfer * zprodlig 522 END_3D 419 523 ENDIF 420 421 422 ! Total primary production per year423 524 424 525 ! Total primary production per year … … 435 536 CALL iom_put( "PPNEWN" , zpronewn(:,:,:) * zfact * tmask(:,:,:) ) ! new primary production by nanophyto 436 537 CALL iom_put( "PPNEWD" , zpronewd(:,:,:) * zfact * tmask(:,:,:) ) ! new primary production by diatomes 437 CALL iom_put( "PBSi" , zpr orcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ) ! biogenic silica production438 CALL iom_put( "PFeP" , zprofep (:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by picophyto538 CALL iom_put( "PBSi" , zprmaxd (:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ) ! biogenic silica production 539 CALL iom_put( "PFeP" , zprofep (:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by picophyto 439 540 CALL iom_put( "PFeN" , zprofen(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by nanophyto 440 541 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(:,:,:) ) 542 IF( ln_ligand .AND. ( iom_use( "LPRODP" ) .OR. iom_use( "LDETP" ) ) ) THEN 543 ALLOCATE( zpligprod(jpi,jpj,jpk) ) 544 zpligprod(:,:,:) = excretd * zprorcad(:,:,:) + excretn * zprorcan(:,:,:) + excretp * zprorcap(:,:,:) 545 CALL iom_put( "LPRODP" , zpligprod(:,:,:) * ldocp * 1e9 * zfact * tmask(:,:,:) ) 546 ! 547 zpligprod(:,:,:) = ( texcretn * zprofen(:,:,:) + texcretd * zprofed(:,:,:) + texcretp * zprofep(:,:,:) ) & 548 & * plig(:,:,:) / ( rtrn + plig(:,:,:) + 75.0 * (1.0 - plig(:,:,:) ) ) 549 CALL iom_put( "LDETP" , zpligprod(:,:,:) * lthet * 1e9 * zfact * tmask(:,:,:) ) 550 DEALLOCATE( zpligprod ) 444 551 ENDIF 445 552 CALL iom_put( "Mumax" , zprmaxn(:,:,:) * tmask(:,:,:) ) ! Maximum growth rate … … 450 557 CALL iom_put( "LNlight" , zprbio(:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ) ! light limitation term 451 558 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 diatoms559 CALL iom_put( "MunetP" , ( tr(:,:,:,jppic,Krhs)/rfact2/(tr(:,:,:,jppic,Kbb)+ rtrn ) * tmask(:,:,:)) ) ! Realized growth rate for picophyto 560 CALL iom_put( "MunetN" , ( tr(:,:,:,jpphy,Krhs)/rfact2/(tr(:,:,:,jpphy,Kbb)+ rtrn ) * tmask(:,:,:)) ) ! Realized growth rate for picophyto 561 CALL iom_put( "MunetD" , ( tr(:,:,:,jpdia,Krhs)/rfact2/(tr(:,:,:,jpdia,Kbb)+ rtrn ) * tmask(:,:,:)) ) ! Realized growth rate for picophyto 455 562 CALL iom_put( "TPP" , ( zprorcap(:,:,:) + zprorcan(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:) ) ! total primary production 456 563 CALL iom_put( "TPNEW" , ( zpronewp(:,:,:) + zpronewn(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:) ) ! total new production … … 476 583 !! ** Purpose : Initialization of phytoplankton production parameters 477 584 !! 478 !! ** Method : Read the namp isprod namelist and check the parameters585 !! ** Method : Read the namp5zprod namelist and check the parameters 479 586 !! called at the first timestep (nittrc000) 480 587 !! 481 !! ** input : Namelist namp isprod588 !! ** input : Namelist namp5zprod 482 589 !!---------------------------------------------------------------------- 483 INTEGER :: ios 590 INTEGER :: ios ! Local integer output status for namelist read 484 591 !! 485 592 NAMELIST/namp5zprod/ pislopen, pislopep, pisloped, excretn, excretp, excretd, & -
NEMO/trunk/src/TOP/PISCES/par_pisces.F90
r12377 r15459 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/trunk/src/TOP/PISCES/sms_pisces.F90
r14558 r15459 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) :: ferat3 !: ??? 49 REAL(wp) :: ldocp !: ??? 50 REAL(wp) :: ldocz !: ??? 51 REAL(wp) :: lthet !: ??? 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) :: oxymin !: half saturation constant for anoxia 45 REAL(wp) :: xkmort !: Mortality half-saturation constant 46 REAL(wp) :: feratz !: Fe/C in microzooplankton 47 REAL(wp) :: feratm !: Fe/C in mesozooplankton 48 REAL(wp) :: ldocp !: Ligand production ratio during PP 49 REAL(wp) :: ldocz !: Ligand production ratio by grazing 50 REAL(wp) :: lthet !: Uptake of ligand by phytoplankton 51 REAL(wp) :: no3rat3 !: C/N ratio of zooplankton 52 REAL(wp) :: po4rat3 !: C/P ratio of zooplankton 55 53 56 54 !!* 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 55 REAL(wp) :: tpp !: total primary production 56 REAL(wp) :: t_oce_co2_exp !: total carbon export 57 REAL(wp) :: t_oce_co2_flx !: Total ocean carbon flux 58 REAL(wp) :: t_oce_co2_flx_cum !: Cumulative Total ocean carbon flux 59 REAL(wp) :: t_atm_co2_flx !: global mean of atmospheric pco2 62 60 63 61 !!* restoring 64 LOGICAL :: ln_pisdmp 65 INTEGER :: nn_pisdmp 62 LOGICAL :: ln_pisdmp !: restoring or not of nutrients to a mean value 63 INTEGER :: nn_pisdmp !: frequency of relaxation or not of nutrients to a mean value 66 64 67 65 !!* Mass conservation 68 LOGICAL :: ln_check_mass !: Flag to check mass conservation 69 LOGICAL , PUBLIC :: ln_ironice !: boolean for Fe input from sea ice 66 LOGICAL :: ln_check_mass !: Flag to check mass conservation 67 LOGICAL, PUBLIC :: ln_ironice !: boolean for Fe input from sea ice 68 69 !!* Diurnal cycle in PISCES 70 LOGICAL :: ln_p4z_dcyc !: Flag to activate diurnal cycle in PISCES 70 71 71 72 !!* Biological fluxes for light : variables shared by pisces & lobster 73 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,: ) :: strn !: Day duration in hours 72 74 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat !: PAR for phyto, nano and diat 73 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 74 76 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epico !: PAR for pico 75 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epicom !: PAR for pico76 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy 77 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksi !: LOBSTER : zooplakton closure77 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epicom !: mean PAR for pico 78 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy, etotm !: averaged PAR in the mixed layer 79 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksi !: Half-saturation con,stant for diatoms 78 80 79 81 !!* Biological fluxes for primary production 80 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksimax !: ???82 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksimax !: Maximum half-saturation constant over the year (Si) 81 83 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: biron !: bioavailable fraction of iron 82 84 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: plig !: proportion of iron organically complexed … … 87 89 88 90 !!* SMS for the organic matter 89 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xfracal !: ??90 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac !: ??91 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac2 !: ??92 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: orem !: ??93 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiss !: ??91 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xfracal !: Fraction of nanophytoplankton that are calcifying organisms 92 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac !: OMZ 93 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac2 !: N depleted indice 94 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: orem !: oxic remineralisation 95 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiss !: Shear rate 94 96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodcal !: Calcite production 95 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodpoc !: Calcite production 96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: conspoc !: Calcite production 97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodgoc !: Calcite production 98 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consgoc !: Calcite production 97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodpoc !: POC production 98 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: conspoc !: POC consumption 99 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodgoc !: GOC production 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consgoc !: GOC consumption 101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consfe3 !: GOC consumption 99 102 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: blim !: bacterial production factor 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizen !: size of diatoms101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizep !: size of diatoms103 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizen !: size of nanophyto 104 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizep !: size of picophyto 102 105 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sized !: size of diatoms 103 106 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizena !: size of nanophytoplankton, after 107 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizepa !: size of picophyto, after 108 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizeda !: size of diatomss, after 109 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xfecolagg !: Refractory diagnostic concentration of ligands 110 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xcoagfe !: Coagulation rate of colloidal Fe/ligands 104 111 105 112 !!* Variable for chemistry of the CO2 cycle 106 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak13 !: ???107 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak23 !: ???108 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aksp !: ???109 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hi !: ???110 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: excess !: ???113 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak13 !: Carbonate chemistry constant 114 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak23 !: Carbonate chemistry constant 115 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aksp !: Solubility product of CaCO3 116 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hi !: Proton concentration 117 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: excess !: CO3 saturation 111 118 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aphscale !: 112 119 … … 130 137 !!---------------------------------------------------------------------- 131 138 USE lib_mpp , ONLY: ctl_stop 132 INTEGER :: ierr(1 0) ! Local variables139 INTEGER :: ierr(11) ! Local variables 133 140 !!---------------------------------------------------------------------- 134 141 ierr(:) = 0 135 142 !* Biological fluxes for light : shared variables for pisces & lobster 136 ALLOCATE( xksi(jpi,jpj) , STAT=ierr(1) ) 137 ! 138 143 ALLOCATE( xksi(jpi,jpj), strn(jpi,jpj), STAT=ierr(1) ) 144 139 145 IF( ln_p4z .OR. ln_p5z ) THEN 140 !* Biological fluxes for light141 ALLOCATE( enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk) , &142 & enanom(jpi,jpj,jpk) , ediatm(jpi,jpj,jpk), &143 & emoy(jpi,jpj,jpk) , STAT=ierr(2) )144 146 145 !* Biological fluxes for primary production 147 !* Optics 148 ALLOCATE( enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk) , & 149 & enanom(jpi,jpj,jpk), ediatm(jpi,jpj,jpk), & 150 & emoy(jpi,jpj,jpk) , etotm(jpi,jpj,jpk), STAT=ierr(2) ) 151 152 !* Biological SMS 146 153 ALLOCATE( xksimax(jpi,jpj) , biron(jpi,jpj,jpk) , STAT=ierr(3) ) 147 !148 !* SMS for the organic matter149 ALLOCATE( xfracal (jpi,jpj,jpk), orem(jpi,jpj,jpk) , &150 & nitrfac(jpi,jpj,jpk), nitrfac2(jpi,jpj,jpk) , &151 & prodcal(jpi,jpj,jpk) , xdiss (jpi,jpj,jpk), &152 & prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) , &153 & prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) , &154 & blim (jpi,jpj,jpk) , STAT=ierr(4) )155 154 156 !* Variable for chemistry of the CO2 cycle 157 ALLOCATE( ak13 (jpi,jpj,jpk) , & 158 & ak23(jpi,jpj,jpk) , aksp (jpi,jpj,jpk) , & 159 & hi (jpi,jpj,jpk) , excess(jpi,jpj,jpk) , & 155 ! Biological SMS 156 ALLOCATE( xfracal (jpi,jpj,jpk), orem (jpi,jpj,jpk), & 157 & nitrfac (jpi,jpj,jpk), nitrfac2(jpi,jpj,jpk), & 158 & prodcal (jpi,jpj,jpk), xdiss (jpi,jpj,jpk), & 159 & prodpoc (jpi,jpj,jpk), conspoc (jpi,jpj,jpk), & 160 & prodgoc (jpi,jpj,jpk), consgoc (jpi,jpj,jpk), & 161 & blim (jpi,jpj,jpk), consfe3 (jpi,jpj,jpk), & 162 & xfecolagg(jpi,jpj,jpk), xcoagfe (jpi,jpj,jpk), STAT=ierr(4) ) 163 164 !* Carbonate chemistry 165 ALLOCATE( ak13 (jpi,jpj,jpk) , & 166 & ak23(jpi,jpj,jpk) , aksp (jpi,jpj,jpk) , & 167 & hi (jpi,jpj,jpk) , excess(jpi,jpj,jpk) , & 160 168 & aphscale(jpi,jpj,jpk), STAT=ierr(5) ) 161 169 ! 162 !* Temperature depend ancy of SMS terms163 ALLOCATE( tgfunc (jpi,jpj,jpk), tgfunc2(jpi,jpj,jpk), STAT=ierr(6) )170 !* Temperature dependency of SMS terms 171 ALLOCATE( tgfunc (jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk), STAT=ierr(6) ) 164 172 ! 165 !* Sinkong speed 166 ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk), & 167 & STAT=ierr(7) ) 173 !* Sinking speed 174 ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk), STAT=ierr(7) ) 175 176 !* Size of phytoplankton cells 177 ALLOCATE( sizen (jpi,jpj,jpk), sized (jpi,jpj,jpk), & 178 & sizena(jpi,jpj,jpk), sizeda(jpi,jpj,jpk), STAT=ierr(8) ) 168 179 ! 169 IF( ln_ligand ) THEN 170 ALLOCATE( plig(jpi,jpj,jpk) , STAT=ierr(8) ) 171 ENDIF 180 ALLOCATE( plig(jpi,jpj,jpk) , STAT=ierr(9) ) 172 181 ENDIF 173 182 ! 174 183 IF( ln_p5z ) THEN 175 ! 176 ALLOCATE( epico(jpi,jpj,jpk) , epicom(jpi,jpj,jpk) , STAT=ierr( 9) )184 ! PISCES-QUOTA specific part 185 ALLOCATE( epico(jpi,jpj,jpk) , epicom(jpi,jpj,jpk) , STAT=ierr(10) ) 177 186 178 187 !* Size of phytoplankton cells 179 ALLOCATE( sizen(jpi,jpj,jpk), sizep(jpi,jpj,jpk), & 180 & sized(jpi,jpj,jpk), STAT=ierr(10) ) 188 ALLOCATE( sizep(jpi,jpj,jpk), sizepa(jpi,jpj,jpk), STAT=ierr(11) ) 181 189 ENDIF 182 190 ! -
NEMO/trunk/src/TOP/PISCES/trcini_pisces.F90
r15450 r15459 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 … … 104 107 bioma0 = 1.000e-8_wp 105 108 silic1 = 91.51e-6_wp 106 no3 = 30.9e-6_wp * 7. 625_wp109 no3 = 30.9e-6_wp * 7.3125_wp 107 110 ! 108 111 ! Allocate PISCES arrays … … 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 / 1 22._wp182 po4r = 1._wp / 1 22._wp183 o2nit = 32._wp / 1 22._wp184 o2ut = 13 3._wp / 122._wp185 rdenit = ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3 186 rdenita = 3._wp / 5._wp 189 rno3 = 16._wp / 117._wp ! C/N 190 po4r = 1._wp / 117._wp ! C/P 191 o2nit = 32._wp / 117._wp ! O2/C for nitrification 192 o2ut = 138._wp / 117._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 … … 239 247 ! initialize the half saturation constant for silicate 240 248 ! ---------------------------------------------------- 241 xksi(:,:) = 2.e-6242 xksimax(:,:) = xksi(:,:)243 IF( ln_p5z ) THEN244 sized(:,:,:) = 1.0245 sizen(:,:,:) = 1.0246 sized(:,:,:) = 1.0247 ENDIF249 xksi(:,:) = 2.e-6 250 xksimax(:,:) = xksi(:,:) 251 consfe3(:,:,:) = 0._wp 252 ! 253 sized(:,:,:) = 1.0 254 sizen(:,:,:) = 1.0 255 IF( ln_p5z ) sizep(:,:,:) = 1.0 248 256 END IF 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 … … 280 293 ! Initialization of the sediment model 281 294 IF( ln_sediment) & 282 & CALL sed_ini ! Initialization of the sediment model295 & CALL sed_ini ! Initialization of the sediment model 283 296 284 297 CALL p4z_sed_init ! loss of organic matter in the sediments -
NEMO/trunk/src/TOP/PISCES/trcsms_pisces.F90
r12377 r15459 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.