- Timestamp:
- 2011-08-09T13:11:24+02:00 (13 years ago)
- Location:
- branches/2011/dev_r2787_PISCES_improvment/NEMOGCM
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_pisces
r2567 r2823 15 15 &nampisext ! air-sea exchange 16 16 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 17 atcco2 = 287. ! atmospheric pCO2 17 ln_co2int = .false. ! read atm pco2 from a file (T) or constant (F) 18 atcco2 = 287. ! Constant value atmospheric pCO2 - ln_co2int = F 19 clname = 'atcco2.txt' ! Name of atm pCO2 file - ln_co2int = T 20 nn_offset = 0 ! Offset model-data start year - ln_co2int = T 21 ! ! If your model year is iyy, nn_offset=(years(1)-iyy) 22 ! ! then the first atmospheric CO2 record read is at years(1) 23 / 24 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 25 &nampisatm ! Atmospheric prrssure 26 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 27 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! 28 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! 29 sn_patm = 'presatm' , -1 , 'patm' , .true. , .true. , 'yearly' , '' , '' 30 cn_dir = './' ! root directory for the location of the dynamical files 18 31 / 19 32 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 20 33 &nampisbio ! biological parameters 21 34 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 22 part = 0.85 ! part of calcite not dissolved in guts23 35 nrdttrc = 1 ! time step frequency for biology 24 36 wsbio = 2. ! POC sinking speed 25 37 xkmort = 1.E-7 ! half saturation constant for mortality 26 ferat3 = 3.E-6! Fe/C in zooplankton38 ferat3 = 10.E-6 ! Fe/C in zooplankton 27 39 wsbio2 = 30. ! Big particles sinking speed 28 40 / … … 31 43 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 32 44 conc0 = 2.e-6 ! Phosphate half saturation 33 conc1 = 10E-6! Phosphate half saturation for diatoms34 conc2 = 0.01E-9! Iron half saturation for phyto35 conc2m = 0.08E-9! Max iron half saturation for phyto36 conc3 = 0.1E-9! Iron half saturation for diatoms37 conc3m = 0.4E-9! Maxi iron half saturation for diatoms45 conc1 = 8E-6 ! Phosphate half saturation for diatoms 46 conc2 = 1E-9 ! Iron half saturation for phyto 47 conc2m = 3E-9 ! Max iron half saturation for phyto 48 conc3 = 2E-9 ! Iron half saturation for diatoms 49 conc3m = 8E-9 ! Maxi iron half saturation for diatoms 38 50 concnnh4 = 1.E-7 ! NH4 half saturation for phyto 39 concdnh4 = 5.E-7 ! NH4 half saturation for diatoms51 concdnh4 = 4.E-7 ! NH4 half saturation for diatoms 40 52 xksi1 = 2.E-6 ! half saturation constant for Si uptake 41 53 xksi2 = 3.33E-6 ! half saturation constant for Si/C 42 54 xkdoc = 417.E-6 ! half-saturation constant of DOC remineralization 43 caco3r = 0.15 ! mean rain ratio 55 concfebac = 3.E-11 ! Half-saturation for Fe limitation of Bacteria 56 qnfelim = 7.E-6 ! Optimal quota of phyto 57 qdfelim = 7.E-6 ! Optimal quota of diatoms 58 caco3r = 0.16 ! mean rain ratio 44 59 / 45 60 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 46 61 &nampisprod ! parameters for phytoplankton growth 47 62 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 48 pislope = 3. ! P-I slope49 pislope2 = 3. ! P-I slope for diatoms63 pislope = 2. ! P-I slope 64 pislope2 = 2. ! P-I slope for diatoms 50 65 excret = 0.05 ! excretion ratio of phytoplankton 51 66 excret2 = 0.05 ! excretion ratio of diatoms 67 bresp = 0.00333 ! Basal respiration rate 52 68 chlcnm = 0.033 ! Minimum Chl/C in nanophytoplankton 53 chlcdm = 0.05 ! Minimum Chl/C in diatoms 54 fecnm = 10E-6 ! Maximum Fe/C in nanophytoplankton 55 fecdm = 15E-6 ! Minimum Fe/C in diatoms 69 chlcdm = 0.04 ! Minimum Chl/C in diatoms 70 chlcmin = 0.0033 ! Maximum Chl/c in phytoplankton 71 fecnm = 40E-6 ! Maximum Fe/C in nanophytoplankton 72 fecdm = 40E-6 ! Minimum Fe/C in diatoms 56 73 grosip = 0.151 ! mean Si/C ratio 57 74 / … … 68 85 &nampismes ! parameters for mesozooplankton 69 86 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 70 grazrat2 = 0.7 ! maximal mesozoo grazing rate 87 part2 = 0.75 ! part of calcite not dissolved in mesozoo guts 88 grazrat2 = 0.9 ! maximal mesozoo grazing rate 71 89 resrat2 = 0.005 ! exsudation rate of mesozooplankton 72 mzrat2 = 0.0 3! mesozooplankton mortality rate90 mzrat2 = 0.04 ! mesozooplankton mortality rate 73 91 xprefc = 1. ! zoo preference for phyto 74 xprefp = 0. 2! zoo preference for POC92 xprefp = 0.3 ! zoo preference for POC 75 93 xprefz = 1. ! zoo preference for zoo 76 xprefpoc = 0.2 ! zoo preference for poc 94 xprefpoc = 0.3 ! zoo preference for poc 95 xthresh2 = 2E-7 ! Food threshold for grazing 77 96 xkgraz2 = 20.E-6 ! half sturation constant for meso grazing 78 epsher2 = 0.3 3 ! Efficicency of Mesozoo growth97 epsher2 = 0.3 ! Efficicency of Mesozoo growth 79 98 sigma2 = 0.6 ! Fraction of mesozoo excretion as DOM 80 99 unass2 = 0.3 ! non assimilated fraction of P by mesozoo 81 grazflux = 5.e3 ! flux-feeding rate100 grazflux = 3.e3 ! flux-feeding rate 82 101 / 83 102 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 84 103 &nampiszoo ! parameters for microzooplankton 85 104 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 86 grazrat = 4.0 ! maximal zoo grazing rate 105 part = 0.5 ! part of calcite not dissolved in microzoo gutsa 106 grazrat = 3.0 ! maximal zoo grazing rate 87 107 resrat = 0.03 ! exsudation rate of zooplankton 88 108 mzrat = 0.0 ! zooplankton mortality rate 89 xpref2c = 0.1 ! Microzoo preference for POM 90 xpref2p = 0.45 ! Microzoo preference for Nanophyto 91 xpref2d = 0.45 ! Microzoo preference for Diatoms 92 xkgraz = 20.E-6 ! half sturation constant for grazing 93 epsher = 0.33 ! Efficiency of microzoo growth 109 xpref2c = 0.2 ! Microzoo preference for POM 110 xpref2p = 1. ! Microzoo preference for Nanophyto 111 xpref2d = 0.6 ! Microzoo preference for Diatoms 112 xthresh = 2E-7 ! Food threshold for feeding 113 xkgraz = 20.E-6 ! half sturation constant for grazing 114 epsher = 0.3 ! Efficiency of microzoo growth 94 115 sigma1 = 0.6 ! Fraction of microzoo excretion as DOM 95 116 unass = 0.3 ! non assimilated fraction of phyto by zoo … … 98 119 &nampisrem ! parameters for remineralization 99 120 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 100 xremik = 0. 3! remineralization rate of DOC121 xremik = 0.25 ! remineralization rate of DOC 101 122 xremip = 0.025 ! remineralisation rate of POC 102 123 nitrif = 0.05 ! NH4 nitrification rate 103 xsirem = 0.015 ! remineralization rate of Si 124 xsirem = 0.003 ! remineralization rate of Si 125 xsiremlab = 0.025 ! fast remineralization rate of Si 126 xsilab = 0.31 ! Fraction of labile biogenic silica 104 127 xlam1 = 0.005 ! scavenging rate of Iron 105 oxymin = 1.E-6 ! Half-saturation constant for anoxia 128 oxymin = 1.E-6 ! Half-saturation constant for anoxia 129 ligand = 0.6E-9 ! Ligands concentration 106 130 / 107 131 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 108 132 &nampiscal ! parameters for Calcite chemistry 109 133 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 110 kdca = 0.327e3! calcite dissolution rate constant (1/time)134 kdca = 6. ! calcite dissolution rate constant (1/time) 111 135 nca = 1. ! order of dissolution reaction (dimensionless) 112 136 / … … 114 138 &nampissed ! parameters for inputs deposition 115 139 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 116 ln_dustfer = .true. ! boolean for dust input from the atmosphere 117 ln_river = .true. ! boolean for river input of nutrients 140 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! 141 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! 142 sn_dust = 'dust.orca' , -1 , 'dust' , .true. , .true. , 'yearly' , '' , '' 143 sn_riverdic = 'river.orca' , -12 , 'riverdic' , .false. , .true. , 'yearly' , '' , '' 144 sn_riverdoc = 'river.orca' , -12 , 'riverdoc' , .false. , .true. , 'yearly' , '' , '' 145 sn_ndepo = 'ndeposition.orca', -12 , 'ndep' , .false. , .true. , 'yearly' , '' , '' 146 sn_ironsed = 'bathy.orca' , -12 , 'bathy' , .false. , .true. , 'yearly' , '' , '' 147 ! 148 cn_dir = './' ! root directory for the location of the dynamical files 149 ln_dust = .true. ! boolean for dust input from the atmosphere 150 ln_river = .false. ! boolean for river input of nutrients 118 151 ln_ndepo = .true. ! boolean for atmospheric deposition of N 119 ln_ sedinput= .true. ! boolean for Fe input from sediments152 ln_ironsed = .true. ! boolean for Fe input from sediments 120 153 sedfeinput = 1E-9 ! Coastal release of Iron 121 dustsolub = 0.014 ! Solubility of the dust 154 dustsolub = 0.02 ! Solubility of the dust 155 wdust = 2.0 ! Dust sinking speed 156 nitrfix = 1E-7 ! Nitrogen fixation rate 157 diazolight = 50. ! Diazotrophs sensitivity to light (W/m2) 158 concfediaz = 1.E-10 ! Diazotrophs half-saturation Cste for Iron 122 159 / 123 160 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' … … 140 177 / 141 178 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 142 &nampisdia ! additional 2D/3D tracers diagnostics ("key_trc_diaadd")179 &nampisdia ! additional 2D/3D tracers diagnostics 143 180 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 144 181 nn_writedia = 5475 ! time step frequency for tracers diagnostics 145 !146 182 ! ! name ! title of the field ! units ! 147 183 ! ! ! ! ! -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_pisces
r2567 r2823 15 15 &nampisext ! air-sea exchange 16 16 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 17 atcco2 = 287. ! atmospheric pCO2 17 ln_co2int = .false. ! read atm pco2 from a file (T) or constant (F) 18 atcco2 = 287. ! Constant value atmospheric pCO2 - ln_co2int = F 19 clname = 'atcco2.txt' ! Name of atm pCO2 file - ln_co2int = T 20 nn_offset = 0 ! Offset model-data start year - ln_co2int = T 21 ! ! If your model year is iyy, nn_offset=(years(1)-iyy) 22 ! ! then the first atmospheric CO2 record read is at years(1) 23 / 24 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 25 &nampisatm ! Atmospheric prrssure 26 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 27 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! 28 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! 29 sn_patm = 'presatm' , -1 , 'patm' , .true. , .true. , 'yearly' , '' , '' 30 cn_dir = './' ! root directory for the location of the dynamical files 18 31 / 19 32 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 20 33 &nampisbio ! biological parameters 21 34 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 22 part = 0.85 ! part of calcite not dissolved in guts23 35 nrdttrc = 4 ! time step frequency for biology 24 36 wsbio = 2. ! POC sinking speed 25 37 xkmort = 1.E-7 ! half saturation constant for mortality 26 ferat3 = 3.E-6! Fe/C in zooplankton38 ferat3 = 10.E-6 ! Fe/C in zooplankton 27 39 wsbio2 = 30. ! Big particles sinking speed 28 40 / … … 31 43 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 32 44 conc0 = 2.e-6 ! Phosphate half saturation 33 conc1 = 10E-6! Phosphate half saturation for diatoms34 conc2 = 0.01E-9! Iron half saturation for phyto35 conc2m = 0.08E-9! Max iron half saturation for phyto36 conc3 = 0.1E-9! Iron half saturation for diatoms37 conc3m = 0.4E-9! Maxi iron half saturation for diatoms45 conc1 = 8E-6 ! Phosphate half saturation for diatoms 46 conc2 = 1E-9 ! Iron half saturation for phyto 47 conc2m = 3E-9 ! Max iron half saturation for phyto 48 conc3 = 2E-9 ! Iron half saturation for diatoms 49 conc3m = 8E-9 ! Maxi iron half saturation for diatoms 38 50 concnnh4 = 1.E-7 ! NH4 half saturation for phyto 39 concdnh4 = 5.E-7 ! NH4 half saturation for diatoms51 concdnh4 = 4.E-7 ! NH4 half saturation for diatoms 40 52 xksi1 = 2.E-6 ! half saturation constant for Si uptake 41 53 xksi2 = 3.33E-6 ! half saturation constant for Si/C 42 54 xkdoc = 417.E-6 ! half-saturation constant of DOC remineralization 43 caco3r = 0.15 ! mean rain ratio 55 concfebac = 3.E-11 ! Half-saturation for Fe limitation of Bacteria 56 qnfelim = 7.E-6 ! Optimal quota of phyto 57 qdfelim = 7.E-6 ! Optimal quota of diatoms 58 caco3r = 0.16 ! mean rain ratio 44 59 / 45 60 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 46 61 &nampisprod ! parameters for phytoplankton growth 47 62 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 48 pislope = 3. ! P-I slope49 pislope2 = 3. ! P-I slope for diatoms63 pislope = 2. ! P-I slope 64 pislope2 = 2. ! P-I slope for diatoms 50 65 excret = 0.05 ! excretion ratio of phytoplankton 51 66 excret2 = 0.05 ! excretion ratio of diatoms 67 bresp = 0.00333 ! Basal respiration rate 52 68 chlcnm = 0.033 ! Minimum Chl/C in nanophytoplankton 53 chlcdm = 0.05 ! Minimum Chl/C in diatoms 54 fecnm = 10E-6 ! Maximum Fe/C in nanophytoplankton 55 fecdm = 15E-6 ! Minimum Fe/C in diatoms 69 chlcdm = 0.04 ! Minimum Chl/C in diatoms 70 chlcmin = 0.0033 ! Maximum Chl/c in phytoplankton 71 fecnm = 40E-6 ! Maximum Fe/C in nanophytoplankton 72 fecdm = 40E-6 ! Minimum Fe/C in diatoms 56 73 grosip = 0.151 ! mean Si/C ratio 57 74 / … … 68 85 &nampismes ! parameters for mesozooplankton 69 86 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 70 grazrat2 = 0.7 ! maximal mesozoo grazing rate 87 part2 = 0.75 ! part of calcite not dissolved in mesozoo guts 88 grazrat2 = 0.9 ! maximal mesozoo grazing rate 71 89 resrat2 = 0.005 ! exsudation rate of mesozooplankton 72 mzrat2 = 0.0 3! mesozooplankton mortality rate90 mzrat2 = 0.04 ! mesozooplankton mortality rate 73 91 xprefc = 1. ! zoo preference for phyto 74 xprefp = 0. 2! zoo preference for POC92 xprefp = 0.3 ! zoo preference for POC 75 93 xprefz = 1. ! zoo preference for zoo 76 xprefpoc = 0.2 ! zoo preference for poc 94 xprefpoc = 0.3 ! zoo preference for poc 95 xthresh2 = 2E-7 ! Food threshold for grazing 77 96 xkgraz2 = 20.E-6 ! half sturation constant for meso grazing 78 epsher2 = 0.3 3 ! Efficicency of Mesozoo growth97 epsher2 = 0.3 ! Efficicency of Mesozoo growth 79 98 sigma2 = 0.6 ! Fraction of mesozoo excretion as DOM 80 99 unass2 = 0.3 ! non assimilated fraction of P by mesozoo 81 grazflux = 5.e3 ! flux-feeding rate100 grazflux = 3.e3 ! flux-feeding rate 82 101 / 83 102 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 84 103 &nampiszoo ! parameters for microzooplankton 85 104 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 86 grazrat = 4.0 ! maximal zoo grazing rate 105 part = 0.5 ! part of calcite not dissolved in microzoo gutsa 106 grazrat = 3.0 ! maximal zoo grazing rate 87 107 resrat = 0.03 ! exsudation rate of zooplankton 88 108 mzrat = 0.0 ! zooplankton mortality rate 89 xpref2c = 0.1 ! Microzoo preference for POM 90 xpref2p = 0.45 ! Microzoo preference for Nanophyto 91 xpref2d = 0.45 ! Microzoo preference for Diatoms 92 xkgraz = 20.E-6 ! half sturation constant for grazing 93 epsher = 0.33 ! Efficiency of microzoo growth 109 xpref2c = 0.2 ! Microzoo preference for POM 110 xpref2p = 1. ! Microzoo preference for Nanophyto 111 xpref2d = 0.6 ! Microzoo preference for Diatoms 112 xthresh = 2E-7 ! Food threshold for feeding 113 xkgraz = 20.E-6 ! half sturation constant for grazing 114 epsher = 0.3 ! Efficiency of microzoo growth 94 115 sigma1 = 0.6 ! Fraction of microzoo excretion as DOM 95 116 unass = 0.3 ! non assimilated fraction of phyto by zoo … … 98 119 &nampisrem ! parameters for remineralization 99 120 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 100 xremik = 0. 3! remineralization rate of DOC121 xremik = 0.25 ! remineralization rate of DOC 101 122 xremip = 0.025 ! remineralisation rate of POC 102 123 nitrif = 0.05 ! NH4 nitrification rate 103 xsirem = 0.015 ! remineralization rate of Si 124 xsirem = 0.003 ! remineralization rate of Si 125 xsiremlab = 0.025 ! fast remineralization rate of Si 126 xsilab = 0.31 ! Fraction of labile biogenic silica 104 127 xlam1 = 0.005 ! scavenging rate of Iron 105 oxymin = 1.E-6 ! Half-saturation constant for anoxia 128 oxymin = 1.E-6 ! Half-saturation constant for anoxia 129 ligand = 0.6E-9 ! Ligands concentration 106 130 / 107 131 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 108 132 &nampiscal ! parameters for Calcite chemistry 109 133 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 110 kdca = 0.327e3! calcite dissolution rate constant (1/time)134 kdca = 6. ! calcite dissolution rate constant (1/time) 111 135 nca = 1. ! order of dissolution reaction (dimensionless) 112 136 / … … 114 138 &nampissed ! parameters for inputs deposition 115 139 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 116 ln_dustfer = .true. ! boolean for dust input from the atmosphere 117 ln_river = .true. ! boolean for river input of nutrients 140 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! 141 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! 142 sn_dust = 'dust.orca' , -1 , 'dust' , .true. , .true. , 'yearly' , '' , '' 143 sn_riverdic = 'river.orca' , -12 , 'riverdic' , .false. , .true. , 'yearly' , '' , '' 144 sn_riverdoc = 'river.orca' , -12 , 'riverdoc' , .false. , .true. , 'yearly' , '' , '' 145 sn_ndepo = 'ndeposition.orca', -12 , 'ndep' , .false. , .true. , 'yearly' , '' , '' 146 sn_ironsed = 'bathy.orca' , -12 , 'bathy' , .false. , .true. , 'yearly' , '' , '' 147 ! 148 cn_dir = './' ! root directory for the location of the dynamical files 149 ln_dust = .true. ! boolean for dust input from the atmosphere 150 ln_river = .false. ! boolean for river input of nutrients 118 151 ln_ndepo = .true. ! boolean for atmospheric deposition of N 119 ln_ sedinput= .true. ! boolean for Fe input from sediments152 ln_ironsed = .true. ! boolean for Fe input from sediments 120 153 sedfeinput = 1E-9 ! Coastal release of Iron 121 dustsolub = 0.014 ! Solubility of the dust 154 dustsolub = 0.02 ! Solubility of the dust 155 wdust = 2.0 ! Dust sinking speed 156 nitrfix = 1E-7 ! Nitrogen fixation rate 157 diazolight = 50. ! Diazotrophs sensitivity to light (W/m2) 158 concfediaz = 1.E-10 ! Diazotrophs half-saturation Cste for Iron 122 159 / 123 160 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' … … 140 177 / 141 178 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 142 &nampisdia ! additional 2D/3D tracers diagnostics ("key_trc_diaadd")179 &nampisdia ! additional 2D/3D tracers diagnostics 143 180 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 144 181 nn_writedia = 1460 ! time step frequency for tracers diagnostics 145 !146 182 ! ! name ! title of the field ! units ! 147 183 ! ! ! ! ! … … 175 211 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 176 212 ln_pisdmp = .true. ! Relaxation fo some tracers to a mean value 177 ln_pisclo = .false. ! Restoring of tracer to initial value on closed sea ("key_dtatrc") 178 / 213 / -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zbio.F90
r2715 r2823 14 14 !! compartments of PISCES 15 15 !!---------------------------------------------------------------------- 16 USE oce_trc ! 17 USE trc !18 USE sms_pisces ! 19 USE p4zsink ! 20 USE p4zopt ! 21 USE p4zlim ! 22 USE p4zprod ! 23 USE p4zmort ! 24 USE p4zmicro ! 25 USE p4zmeso ! 26 USE p4zrem ! 27 USE prtctl_trc 28 USE iom 16 USE oce_trc ! shared variables between ocean and passive tracers 17 USE trc ! passive tracers common variables 18 USE sms_pisces ! PISCES Source Minus Sink variables 19 USE p4zsink ! vertical flux of particulate matter due to sinking 20 USE p4zopt ! optical model 21 USE p4zlim ! Co-limitations of differents nutrients 22 USE p4zprod ! Growth rate of the 2 phyto groups 23 USE p4zmort ! Mortality terms for phytoplankton 24 USE p4zmicro ! Sources and sinks of microzooplankton 25 USE p4zmeso ! Sources and sinks of mesozooplankton 26 USE p4zrem ! Remineralisation of organic matter 27 USE prtctl_trc ! print control for debugging 28 USE iom ! I/O manager 29 29 30 30 IMPLICIT NONE -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zche.F90
r2715 r2823 10 10 !! - ! 2006 (R. Gangsto) modification 11 11 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 12 !! ! 2011-02 (J. Simeon, J.Orr ) update O2 solubility constants 12 13 !!---------------------------------------------------------------------- 13 14 #if defined key_pisces … … 17 18 !! p4z_che : Sea water chemistry computed following OCMIP protocol 18 19 !!---------------------------------------------------------------------- 19 USE oce_trc ! 20 USE trc ! 21 USE sms_pisces ! 22 USE lib_mpp ! MPP library20 USE oce_trc ! shared variables between ocean and passive tracers 21 USE trc ! passive tracers common variables 22 USE sms_pisces ! PISCES Source Minus Sink variables 23 USE lib_mpp ! MPP library 23 24 24 25 IMPLICIT NONE … … 32 33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: chemc ! Solubilities of O2 and CO2 33 34 34 REAL(wp) :: salchl = 1._wp / 1.80655_wp ! conversion factor for salinity --> chlorinity (Wooster et al. 1969) 35 36 REAL(wp) :: akcc1 = -171.9065_wp ! coeff. for apparent solubility equilibrium 37 REAL(wp) :: akcc2 = -0.077993_wp ! Millero et al. 1995 from Mucci 1983 38 REAL(wp) :: akcc3 = 2839.319_wp ! 39 REAL(wp) :: akcc4 = 71.595_wp ! 40 REAL(wp) :: akcc5 = -0.77712_wp ! 41 REAL(wp) :: akcc6 = 0.0028426_wp ! 42 REAL(wp) :: akcc7 = 178.34_wp ! 43 REAL(wp) :: akcc8 = -0.07711_wp ! 44 REAL(wp) :: akcc9 = 0.0041249_wp ! 45 46 REAL(wp) :: rgas = 83.143_wp ! universal gas constants 47 REAL(wp) :: oxyco = 1._wp / 22.4144_wp 48 49 REAL(wp) :: bor1 = 0.00023_wp ! borat constants 50 REAL(wp) :: bor2 = 1._wp / 10.82_wp 51 52 REAL(wp) :: ca0 = -162.8301_wp 53 REAL(wp) :: ca1 = 218.2968_wp 54 REAL(wp) :: ca2 = 90.9241_wp 55 REAL(wp) :: ca3 = -1.47696_wp 56 REAL(wp) :: ca4 = 0.025695_wp 57 REAL(wp) :: ca5 = -0.025225_wp 58 REAL(wp) :: ca6 = 0.0049867_wp 59 60 REAL(wp) :: c10 = -3670.7_wp ! coeff. for 1. dissoc. of carbonic acid (Edmond and Gieskes, 1970) 61 REAL(wp) :: c11 = 62.008_wp 62 REAL(wp) :: c12 = -9.7944_wp 63 REAL(wp) :: c13 = 0.0118_wp 64 REAL(wp) :: c14 = -0.000116_wp 65 66 REAL(wp) :: & ! coeff. for 2. dissoc. of carbonic acid (Millero, 1995) 67 c20 = -1394.7 , & 68 c21 = -4.777 , & 69 c22 = 0.0184 , & 70 c23 = -0.000118 71 72 REAL(wp) :: & ! constants for calculate concentrations 73 st1 = 0.14 , & ! for sulfate (Morris & Riley 1966) 74 st2 = 1./96.062, & 75 ks0 = 141.328 , & 76 ks1 = -4276.1 , & 77 ks2 = -23.093 , & 78 ks3 = -13856. , & 79 ks4 = 324.57 , & 80 ks5 = -47.986 , & 81 ks6 = 35474. , & 82 ks7 = -771.54 , & 83 ks8 = 114.723 , & 84 ks9 = -2698. , & 85 ks10 = 1776. , & 86 ks11 = 1. , & 87 ks12 = -0.001005 88 89 REAL(wp) :: & ! constants for calculate concentrations 90 ft1 = 0.000067 , & ! fluorides (Dickson & Riley 1979 ) 91 ft2 = 1./18.9984 , & 92 kf0 = -12.641 , & 93 kf1 = 1590.2 , & 94 kf2 = 1.525 , & 95 kf3 = 1.0 , & 96 kf4 =-0.001005 97 98 REAL(wp) :: & ! coeff. for 1. dissoc. of boric acid (Dickson and Goyet, 1994) 99 cb0 = -8966.90, & 100 cb1 = -2890.53, & 101 cb2 = -77.942 , & 102 cb3 = 1.728 , & 103 cb4 = -0.0996 , & 104 cb5 = 148.0248, & 105 cb6 = 137.1942, & 106 cb7 = 1.62142 , & 107 cb8 = -24.4344, & 108 cb9 = -25.085 , & 109 cb10 = -0.2474 , & 110 cb11 = 0.053105 111 112 REAL(wp) :: & ! coeff. for dissoc. of water (Dickson and Riley, 1979 ) 113 cw0 = -13847.26 , & 114 cw1 = 148.9652 , & 115 cw2 = -23.6521 , & 116 cw3 = 118.67 , & 117 cw4 = -5.977 , & 118 cw5 = 1.0495 , & 119 cw6 = -0.01615 120 121 REAL(wp) :: & ! volumetric solubility constants for o2 in ml/l (Weiss, 1974) 122 ox0 = -58.3877 , & 123 ox1 = 85.8079 , & 124 ox2 = 23.8439 , & 125 ox3 = -0.034892 , & 126 ox4 = 0.015568 , & 127 ox5 = -0.0019387 128 129 REAL(wp), DIMENSION(5) :: & ! coeff. for seawater pressure correction 130 devk1, devk2, devk3, & ! (millero 95) 131 devk4, devk5 132 35 REAL(wp), PUBLIC :: atcox = 0.20946 ! units atm 36 37 REAL(wp) :: salchl = 1. / 1.80655 ! conversion factor for salinity --> chlorinity (Wooster et al. 1969) 38 REAL(wp) :: o2atm = 1. / ( 1000. * 0.20946 ) 39 40 REAL(wp) :: akcc1 = -171.9065 ! coeff. for apparent solubility equilibrium 41 REAL(wp) :: akcc2 = -0.077993 ! Millero et al. 1995 from Mucci 1983 42 REAL(wp) :: akcc3 = 2839.319 43 REAL(wp) :: akcc4 = 71.595 44 REAL(wp) :: akcc5 = -0.77712 45 REAL(wp) :: akcc6 = 0.00284263 46 REAL(wp) :: akcc7 = 178.34 47 REAL(wp) :: akcc8 = -0.07711 48 REAL(wp) :: akcc9 = 0.0041249 49 50 REAL(wp) :: rgas = 83.143 ! universal gas constants 51 REAL(wp) :: oxyco = 1. / 22.4144 ! converts from liters of an ideal gas to moles 52 53 REAL(wp) :: bor1 = 0.00023 ! borat constants 54 REAL(wp) :: bor2 = 1. / 10.82 55 56 REAL(wp) :: ca0 = -162.8301 ! WEISS & PRICE 1980, units mol/(kg atm) 57 REAL(wp) :: ca1 = 218.2968 58 REAL(wp) :: ca2 = 90.9241 59 REAL(wp) :: ca3 = -1.47696 60 REAL(wp) :: ca4 = 0.025695 61 REAL(wp) :: ca5 = -0.025225 62 REAL(wp) :: ca6 = 0.0049867 63 64 REAL(wp) :: c10 = -3670.7 ! Coeff. for 1. dissoc. of carbonic acid (Edmond and Gieskes, 1970) 65 REAL(wp) :: c11 = 62.008 66 REAL(wp) :: c12 = -9.7944 67 REAL(wp) :: c13 = 0.0118 68 REAL(wp) :: c14 = -0.000116 69 70 REAL(wp) :: c20 = -1394.7 ! coeff. for 2. dissoc. of carbonic acid (Millero, 1995) 71 REAL(wp) :: c21 = -4.777 72 REAL(wp) :: c22 = 0.0184 73 REAL(wp) :: c23 = -0.000118 74 75 REAL(wp) :: st1 = 0.14 ! constants for calculate concentrations for sulfate 76 REAL(wp) :: st2 = 1./96.062 ! (Morris & Riley 1966) 77 REAL(wp) :: ks0 = 141.328 78 REAL(wp) :: ks1 = -4276.1 79 REAL(wp) :: ks2 = -23.093 80 REAL(wp) :: ks3 = -13856. 81 REAL(wp) :: ks4 = 324.57 82 REAL(wp) :: ks5 = -47.986 83 REAL(wp) :: ks6 = 35474. 84 REAL(wp) :: ks7 = -771.54 85 REAL(wp) :: ks8 = 114.723 86 REAL(wp) :: ks9 = -2698. 87 REAL(wp) :: ks10 = 1776. 88 REAL(wp) :: ks11 = 1. 89 REAL(wp) :: ks12 = -0.001005 90 91 REAL(wp) :: ft1 = 0.000067 ! constants for calculate concentrations for fluorides 92 REAL(wp) :: ft2 = 1./18.9984 ! (Dickson & Riley 1979 ) 93 REAL(wp) :: kf0 = -12.641 94 REAL(wp) :: kf1 = 1590.2 95 REAL(wp) :: kf2 = 1.525 96 REAL(wp) :: kf3 = 1.0 97 REAL(wp) :: kf4 = -0.001005 98 99 REAL(wp) :: cb0 = -8966.90 ! Coeff. for 1. dissoc. of boric acid 100 REAL(wp) :: cb1 = -2890.53 ! (Dickson and Goyet, 1994) 101 REAL(wp) :: cb2 = -77.942 102 REAL(wp) :: cb3 = 1.728 103 REAL(wp) :: cb4 = -0.0996 104 REAL(wp) :: cb5 = 148.0248 105 REAL(wp) :: cb6 = 137.1942 106 REAL(wp) :: cb7 = 1.62142 107 REAL(wp) :: cb8 = -24.4344 108 REAL(wp) :: cb9 = -25.085 109 REAL(wp) :: cb10 = -0.2474 110 REAL(wp) :: cb11 = 0.053105 111 112 REAL(wp) :: cw0 = -13847.26 ! Coeff. for dissoc. of water (Dickson and Riley, 1979 ) 113 REAL(wp) :: cw1 = 148.9652 114 REAL(wp) :: cw2 = -23.6521 115 REAL(wp) :: cw3 = 118.67 116 REAL(wp) :: cw4 = -5.977 117 REAL(wp) :: cw5 = 1.0495 118 REAL(wp) :: cw6 = -0.01615 119 120 ! ! volumetric solubility constants for o2 in ml/L 121 REAL(wp) :: ox0 = 2.00856 ! from Table 1 for Eq 8 of Garcia and Gordon, 1992. 122 REAL(wp) :: ox1 = 3.22400 ! corrects for moisture and fugacity, but not total atmospheric pressure 123 REAL(wp) :: ox2 = 3.99063 ! Original PISCES code noted this was a solubility, but 124 REAL(wp) :: ox3 = 4.80299 ! was in fact a bunsen coefficient with units L-O2/(Lsw atm-O2) 125 REAL(wp) :: ox4 = 9.78188e-1 ! Hence, need to divide EXP( zoxy ) by 1000, ml-O2 => L-O2 126 REAL(wp) :: ox5 = 1.71069 ! and atcox = 0.20946 to add the 1/atm dimension. 127 REAL(wp) :: ox6 = -6.24097e-3 128 REAL(wp) :: ox7 = -6.93498e-3 129 REAL(wp) :: ox8 = -6.90358e-3 130 REAL(wp) :: ox9 = -4.29155e-3 131 REAL(wp) :: ox10 = -3.11680e-7 132 133 REAL(wp), DIMENSION(5) :: devk1, devk2, devk3, devk4, devk5 ! coeff. for seawater pressure correction 134 ! ! (millero 95) 133 135 DATA devk1 / -25.5 , -15.82 , -29.48 , -25.60 , -48.76 / 134 136 DATA devk2 / 0.1271 , -0.0219 , 0.1622 , 0.2324 , 0.5304 / … … 155 157 !!--------------------------------------------------------------------- 156 158 INTEGER :: ji, jj, jk 157 REAL(wp) :: ztkel, zsal , zqtt , zbuf1 , zbuf2 159 REAL(wp) :: ztkel, zt , zt2 , zsal , zsal2 , zbuf1 , zbuf2 160 REAL(wp) :: ztgg , ztgg2, ztgg3 , ztgg4 , ztgg5 158 161 REAL(wp) :: zpres, ztc , zcl , zcpexp, zoxy , zcpexp2 159 162 REAL(wp) :: zsqrt, ztr , zlogt , zcek1 160 REAL(wp) :: z lqtt, zqtt2, zsal15, zis , zis2, zisqrt163 REAL(wp) :: zis , zis2 , zsal15, zisqrt 161 164 REAL(wp) :: zckb , zck1 , zck2 , zckw , zak1 , zak2 , zakb , zaksp0, zakw 162 165 REAL(wp) :: zst , zft , zcks , zckf , zaksp1 … … 171 174 ! ! SET ABSOLUTE TEMPERATURE 172 175 ztkel = tsn(ji,jj,1,jp_tem) + 273.16 173 z qtt= ztkel * 0.01174 z qtt2 = zqtt * zqtt175 zsal = tsn(ji,jj,1,jp_sal) + ( 1.- tmask(ji,jj,1) ) * 35.176 z lqtt = LOG( zqtt )177 176 zt = ztkel * 0.01 177 zt2 = zt * zt 178 zsal = tsn(ji,jj,1,jp_sal) + ( 1.- tmask(ji,jj,1) ) * 35. 179 zsal2 = zsal * zsal 180 zlogt = LOG( zt ) 178 181 ! ! LN(K0) OF SOLUBILITY OF CO2 (EQ. 12, WEISS, 1980) 179 182 ! ! AND FOR THE ATMOSPHERE FOR NON IDEAL GAS 180 zcek1 = ca0 + ca1 / zqtt + ca2 * zlqtt + ca3 * zqtt2 + zsal*( ca4 + ca5 * zqtt + ca6 * zqtt2 ) 181 182 ! ! LN(K0) OF SOLUBILITY OF O2 and N2 (EQ. 4, WEISS, 1970) 183 zoxy = ox0 + ox1 / zqtt + ox2 * zlqtt + zsal * ( ox3 + ox4 * zqtt + ox5 * zqtt2 ) 184 185 ! ! SET SOLUBILITIES OF O2 AND CO2 186 chemc(ji,jj,1) = EXP( zcek1 ) * 1.e-6 * rhop(ji,jj,1) / 1000. 187 chemc(ji,jj,2) = EXP( zoxy ) * oxyco 188 183 zcek1 = ca0 + ca1 / zt + ca2 * zlogt + ca3 * zt2 + zsal * ( ca4 + ca5 * zt + ca6 * zt2 ) 184 ! ! LN(K0) OF SOLUBILITY OF O2 and N2 in ml/L (EQ. 8, GARCIA AND GORDON, 1992) 185 ztgg = LOG( ( 298.15 - tsn(ji,jj,1,jp_tem) ) / ztkel ) ! Set the GORDON & GARCIA scaled temperature 186 ztgg2 = ztgg * ztgg 187 ztgg3 = ztgg2 * ztgg 188 ztgg4 = ztgg3 * ztgg 189 ztgg5 = ztgg4 * ztgg 190 zoxy = ox0 + ox1 * ztgg + ox2 * ztgg2 + ox3 * ztgg3 + ox4 * ztgg4 + ox5 * ztgg5 & 191 + zsal * ( ox6 + ox7 * ztgg + ox8 * ztgg2 + ox9 * ztgg3 ) + ox10 * zsal2 192 193 ! ! SET SOLUBILITIES OF O2 AND CO2 194 chemc(ji,jj,1) = EXP( zcek1 ) * 1.e-6 * rhop(ji,jj,1) / 1000. ! mol/(L uatm) 195 chemc(ji,jj,2) = ( EXP( zoxy ) * o2atm ) * oxyco ! mol/(L atm) 196 ! 189 197 END DO 190 198 END DO … … 204 212 ! SET ABSOLUTE TEMPERATURE 205 213 ztkel = tsn(ji,jj,jk,jp_tem) + 273.16 206 zqtt = ztkel * 0.01207 214 zsal = tsn(ji,jj,jk,jp_sal) + ( 1.-tmask(ji,jj,jk) ) * 35. 208 215 zsqrt = SQRT( zsal ) -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zflx.F90
r2715 r2823 9 9 !! 1.0 ! 2004 (O. Aumont) modifications 10 10 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 11 !! ! 2011-02 (J. Simeon, J. Orr) Include total atm P correction 11 12 !!---------------------------------------------------------------------- 12 13 #if defined key_pisces … … 16 17 !! p4z_flx : CALCULATES GAS EXCHANGE AND CHEMISTRY AT SEA SURFACE 17 18 !! p4z_flx_init : Read the namelist 18 !!---------------------------------------------------------------------- 19 USE trc 20 USE oce_trc ! 21 USE trc 22 USE sms_pisces 23 USE prtctl_trc 24 USE p4zche 25 USE iom 19 !! p4z_patm : Read sfc atm pressure [atm] for each grid cell 20 !!---------------------------------------------------------------------- 21 USE oce_trc ! shared variables between ocean and passive tracers 22 USE trc ! passive tracers common variables 23 USE sms_pisces ! PISCES Source Minus Sink variables 24 USE p4zche ! Chemical model 25 USE prtctl_trc ! print control for debugging 26 USE iom ! I/O manager 27 USE fldread ! read input fields 26 28 #if defined key_cpl_carbon_cycle 27 USE sbc_oce , ONLY : atm_co229 USE sbc_oce, ONLY : atm_co2 ! atmospheric pCO2 28 30 #endif 29 31 … … 35 37 PUBLIC p4z_flx_alloc 36 38 39 ! !!** Namelist nampisext ** 40 REAL(wp) :: atcco2 = 278._wp !: pre-industrial atmospheric [co2] (ppm) 41 LOGICAL :: ln_co2int = .FALSE. !: flag to read in a file and interpolate atmospheric pco2 or not 42 CHARACTER(len=34) :: clname = 'atcco2.txt' !: filename of pco2 values 43 INTEGER :: nn_offset = 0 !: Offset model-data start year (default = 0) 44 45 !! Variables related to reading atmospheric CO2 time history 46 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: atcco2h, years 47 INTEGER :: nmaxrec, numco2 48 49 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) :: patm ! atmospheric pressure at kt [N/m2] 50 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_patm ! structure of input fields (file informations, fields read) 51 52 37 53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: oce_co2 !: ocean carbon flux 38 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: satmco2 !: atmospheric pco2 … … 41 57 REAL(wp) :: t_atm_co2_flx !: global mean of atmospheric pco2 42 58 REAL(wp) :: area !: ocean surface 43 REAL(wp) :: atcco2 = 278._wp !: pre-industrial atmospheric [co2] (ppm)44 REAL(wp) :: atcox = 0.20946_wp !:45 59 REAL(wp) :: xconv = 0.01_wp / 3600._wp !: coefficients for conversion 46 60 … … 60 74 !! ** Purpose : CALCULATES GAS EXCHANGE AND CHEMISTRY AT SEA SURFACE 61 75 !! 62 !! ** Method : - ??? 76 !! ** Method : 77 !! - Include total atm P correction via Esbensen & Kushnir (1981) 78 !! - Pressure correction NOT done for key_cpl_carbon_cycle 79 !! - Remove Wanninkhof chemical enhancement; 80 !! - Add option for time-interpolation of atcco2.txt 63 81 !!--------------------------------------------------------------------- 64 82 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 65 USE wrk_nemo, ONLY: zkgco2 => wrk_2d_1 , zkgo2 => wrk_2d_2 , zh2co3 => wrk_2d_366 USE wrk_nemo, ONLY: zoflx => wrk_2d_ 4 , zkg => wrk_2d_567 USE wrk_nemo, ONLY: zdpco2 => wrk_2d_ 6 , zdpo2 => wrk_2d_783 USE wrk_nemo, ONLY: zkgco2 => wrk_2d_11 , zkgo2 => wrk_2d_12 , zh2co3 => wrk_2d_13 84 USE wrk_nemo, ONLY: zoflx => wrk_2d_14 , zkg => wrk_2d_15 85 USE wrk_nemo, ONLY: zdpco2 => wrk_2d_16 , zdpo2 => wrk_2d_17 68 86 ! 69 87 INTEGER, INTENT(in) :: kt ! 70 88 ! 71 INTEGER :: ji, jj, j rorr89 INTEGER :: ji, jj, jm, iind, iindm1 72 90 REAL(wp) :: ztc, ztc2, ztc3, zws, zkgwan 73 91 REAL(wp) :: zfld, zflu, zfld16, zflu16, zfact 74 92 REAL(wp) :: zph, zah2, zbot, zdic, zalk, zsch_o2, zalka, zsch_co2 93 REAL(wp) :: zyr_dec, zdco2dt 75 94 CHARACTER (len=25) :: charout 76 95 !!--------------------------------------------------------------------- 77 96 78 IF( wrk_in_use(2, 1 ,2,3,4,5,6,7) ) THEN97 IF( wrk_in_use(2, 11,12,13,14,15,16,17) ) THEN 79 98 CALL ctl_stop('p4z_flx: requested workspace arrays unavailable') ; RETURN 80 99 ENDIF … … 84 103 ! IS USED TO COMPUTE AIR-SEA FLUX OF CO2 85 104 105 CALL p4z_patm( kt ) ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 106 107 IF( ln_co2int ) THEN 108 ! Linear temporal interpolation of atmospheric pco2. atcco2.txt has annual values. 109 ! Caveats: First column of .txt must be in years, decimal years preferably. 110 ! For nn_offset, if your model year is iyy, nn_offset=(years(1)-iyy) 111 ! then the first atmospheric CO2 record read is at years(1) 112 zyr_dec = REAL( nyear + nn_offset, wp ) + REAL( nday_year, wp ) / REAL( nyear_len(1), wp ) 113 jm = 2 114 DO WHILE( jm <= nmaxrec .AND. years(jm-1) < zyr_dec .AND. years(jm) >= zyr_dec ) ; jm = jm + 1 ; END DO 115 iind = jm ; iindm1 = jm - 1 116 zdco2dt = ( atcco2h(iind) - atcco2h(iindm1) ) / ( years(iind) - years(iindm1) + rtrn ) 117 atcco2 = zdco2dt * ( zyr_dec - years(iindm1) ) + atcco2h(iindm1) 118 satmco2(:,:) = atcco2 119 ENDIF 120 86 121 #if defined key_cpl_carbon_cycle 87 122 satmco2(:,:) = atm_co2(:,:) 88 123 #endif 89 124 90 DO jrorr = 1, 10 91 125 DO jm = 1, 10 92 126 !CDIR NOVERRCHK 93 127 DO jj = 1, jpj … … 151 185 DO ji = 1, jpi 152 186 ! Compute CO2 flux for the sea and air 153 zfld = satmco2(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj)154 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) 187 zfld = satmco2(ji,jj) * patm(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) * (m/s) 188 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) (m/s) ? 155 189 oce_co2(ji,jj) = ( zfld - zflu ) * rfact * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 156 190 ! compute the trend … … 158 192 159 193 ! Compute O2 flux 160 zfld16 = atcox * chemc(ji,jj,2) * tmask(ji,jj,1) * zkgo2(ji,jj)194 zfld16 = atcox * patm(ji,jj) * chemc(ji,jj,2) * tmask(ji,jj,1) * zkgo2(ji,jj) ! (mol/L) * (m/s) 161 195 zflu16 = trn(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 162 196 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + ( zfld16 - zflu16 ) / fse3t(ji,jj,1) 163 197 164 #if defined key_diatrc 165 ! Save diagnostics 166 # if ! defined key_iomput 198 #if defined key_diatrc 199 # if defined key_iomput 200 zoflx(ji,jj) = ( zfld16 - zflu16 ) * 1000. * tmask(ji,jj,1) 201 zkg (ji,jj) = zkgco2(ji,jj) * tmask(ji,jj,1) 202 zdpco2(ji,jj) = ( satmco2(ji,jj) * patm(ji,jj) - zh2co3(ji,jj) / ( chemc(ji,jj,1) + rtrn ) ) * tmask(ji,jj,1) 203 zdpo2 (ji,jj) = ( atcox * patm(ji,jj) - trn(ji,jj,1,jpoxy) / ( chemc(ji,jj,2) + rtrn ) ) * tmask(ji,jj,1) 204 #else 167 205 zfact = 1. / e1e2t(ji,jj) / rfact 168 206 trc2d(ji,jj,jp_pcs0_2d ) = oce_co2(ji,jj) * zfact 169 207 trc2d(ji,jj,jp_pcs0_2d + 1) = ( zfld16 - zflu16 ) * 1000. * tmask(ji,jj,1) 170 208 trc2d(ji,jj,jp_pcs0_2d + 2) = zkgco2(ji,jj) * tmask(ji,jj,1) 171 trc2d(ji,jj,jp_pcs0_2d + 3) = ( satmco2(ji,jj) - zh2co3(ji,jj) / ( chemc(ji,jj,1) + rtrn ) ) &209 trc2d(ji,jj,jp_pcs0_2d + 3) = ( satmco2(ji,jj) * patm(ji,jj) - zh2co3(ji,jj) / ( chemc(ji,jj,1) + rtrn ) ) & 172 210 & * tmask(ji,jj,1) 173 # else 174 zoflx(ji,jj) = ( zfld16 - zflu16 ) * 1000. * tmask(ji,jj,1) 175 zkg (ji,jj) = zkgco2(ji,jj) * tmask(ji,jj,1) 176 zdpco2(ji,jj) = ( satmco2(ji,jj) - zh2co3(ji,jj) / ( chemc(ji,jj,1) + rtrn ) ) * tmask(ji,jj,1) 177 zdpo2 (ji,jj) = ( atcox - trn(ji,jj,1,jpoxy) / ( chemc(ji,jj,2) + rtrn ) ) * tmask(ji,jj,1) 178 # endif 211 #endif 179 212 #endif 180 213 END DO … … 183 216 t_oce_co2_flx = t_oce_co2_flx + glob_sum( oce_co2(:,:) ) ! Cumulative Total Flux of Carbon 184 217 IF( kt == nitend ) THEN 185 t_atm_co2_flx = glob_sum( satmco2(:,:) * e1e2t(:,:) ) ! Total atmospheric pCO2218 t_atm_co2_flx = glob_sum( satmco2(:,:) * patm(:,:) * e1e2t(:,:) ) ! Total atmospheric pCO2 186 219 ! 187 220 t_oce_co2_flx = (-1.) * t_oce_co2_flx * 12. / 1.e15 ! Conversion in PgC ; negative for out of the ocean … … 213 246 #endif 214 247 ! 215 IF( wrk_not_released(2, 1,2,3,4,5,6,7) ) CALL ctl_stop('p4z_flx: failed to release workspace arrays') 248 IF( wrk_not_released(2, 11,12,13,14,15,16,17) ) & 249 & CALL ctl_stop('p4z_flx: failed to release workspace arrays') 216 250 ! 217 251 END SUBROUTINE p4z_flx … … 228 262 !! ** input : Namelist nampisext 229 263 !!---------------------------------------------------------------------- 230 NAMELIST/nampisext/ atcco2 231 !!---------------------------------------------------------------------- 232 ! 233 REWIND( numnat ) ! read numnat 234 READ ( numnat, nampisext ) 264 NAMELIST/nampisext/ln_co2int, atcco2, clname, nn_offset 265 INTEGER :: jm 266 !!---------------------------------------------------------------------- 267 ! 268 REWIND( numnatp ) ! read numnatp 269 READ ( numnatp, nampisext ) 235 270 ! 236 271 IF(lwp) THEN ! control print … … 238 273 WRITE(numout,*) ' Namelist parameters for air-sea exchange, nampisext' 239 274 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 240 WRITE(numout,*) ' Atmospheric pCO2 atcco2 =', atcco2 275 WRITE(numout,*) ' Choice for reading in the atm pCO2 file or constant value, ln_co2int =', ln_co2int 276 WRITE(numout,*) ' ' 277 ENDIF 278 IF( .NOT.ln_co2int ) THEN 279 IF(lwp) THEN ! control print 280 WRITE(numout,*) ' Constant Atmospheric pCO2 value atcco2 =', atcco2 281 WRITE(numout,*) ' ' 282 ENDIF 283 satmco2(:,:) = atcco2 ! Initialisation of atmospheric pco2 284 ELSE 285 IF(lwp) THEN 286 WRITE(numout,*) ' Atmospheric pCO2 value from file clname =', TRIM( clname ) 287 WRITE(numout,*) ' Offset model-data start year nn_offset =', nn_offset 288 WRITE(numout,*) ' ' 289 ENDIF 290 CALL ctl_opn( numco2, TRIM( clname) , 'OLD', 'FORMATTED', 'SEQUENTIAL', -1 , numout, lwp ) 291 jm = 0 ! Count the number of record in co2 file 292 DO 293 READ(numco2,*,END=100) 294 jm = jm + 1 295 END DO 296 100 nmaxrec = jm - 1 297 ALLOCATE( years (nmaxrec) ) ; years (:) = 0._wp 298 ALLOCATE( atcco2h(nmaxrec) ) ; atcco2h(:) = 0._wp 299 300 REWIND(numco2) 301 DO jm = 1, nmaxrec ! get xCO2 data 302 READ(numco2, *) years(jm), atcco2h(jm) 303 IF(lwp) WRITE(numout, '(f6.0,f7.2)') years(jm), atcco2h(jm) 304 END DO 305 CLOSE(numco2) 241 306 ENDIF 242 307 ! … … 245 310 oce_co2(:,:) = 0._wp ! Initialization of Flux of Carbon 246 311 t_atm_co2_flx = 0._wp 247 !248 satmco2(:,:) = atcco2 ! Initialisation of atmospheric pco2249 312 t_oce_co2_flx = 0._wp 250 313 ! 251 314 END SUBROUTINE p4z_flx_init 252 315 316 SUBROUTINE p4z_patm( kt ) 317 318 !!---------------------------------------------------------------------- 319 !! *** ROUTINE p4z_atm *** 320 !! 321 !! ** Purpose : Read and interpolate the external atmospheric sea-levl pressure 322 !! ** Method : Read the files and interpolate the appropriate variables 323 !! 324 !!---------------------------------------------------------------------- 325 !! * arguments 326 INTEGER, INTENT( in ) :: kt ! ocean time step 327 ! 328 INTEGER :: ierr 329 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 330 TYPE(FLD_N) :: sn_patm ! informations about the fields to be read 331 !! 332 NAMELIST/nampisatm/ sn_patm, cn_dir 333 334 ! ! -------------------- ! 335 IF( kt == nit000 ) THEN ! First call kt=nit000 ! 336 ! ! -------------------- ! 337 ! !* set file information (default values) 338 ! ... default values (NB: frequency positive => hours, negative => months) 339 ! ! file ! frequency ! variable ! time intep ! clim ! 'yearly' or ! weights ! rotation ! 340 ! ! name ! (hours) ! name ! (T/F) ! (T/F) ! 'monthly' ! filename ! pairs ! 341 sn_patm = FLD_N( 'pres' , 24 , 'patm' , .false. , .true. , 'yearly' , '' , '' ) 342 cn_dir = './' ! directory in which the Patm data are 343 344 REWIND( numnatp ) !* read in namlist nampisatm 345 READ ( numnatp, nampisatm ) 346 ! 347 ALLOCATE( sf_patm(1), STAT=ierr ) !* allocate and fill sf_patm (forcing structure) with sn_patm 348 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'p4z_flx: unable to allocate sf_patm structure' ) 349 ! 350 CALL fld_fill( sf_patm, (/ sn_patm /), cn_dir, 'p4z_flx', 'Atmospheric pressure ', 'nampisatm' ) 351 ALLOCATE( sf_patm(1)%fnow(jpi,jpj,1) ) 352 IF( sn_patm%ln_tint ) ALLOCATE( sf_patm(1)%fdta(jpi,jpj,1,2) ) 353 ! 354 ENDIF 355 ! 356 CALL fld_read( kt, 1, sf_patm ) !* input Patm provided at kt + 1/2 357 patm(:,:) = sf_patm(1)%fnow(:,:,1) ! atmospheric pressure 358 359 END SUBROUTINE p4z_patm 253 360 254 361 INTEGER FUNCTION p4z_flx_alloc() … … 256 363 !! *** ROUTINE p4z_flx_alloc *** 257 364 !!---------------------------------------------------------------------- 258 ALLOCATE( oce_co2(jpi,jpj), satmco2(jpi,jpj), STAT=p4z_flx_alloc )365 ALLOCATE( oce_co2(jpi,jpj), satmco2(jpi,jpj), patm(jpi,jpj), STAT=p4z_flx_alloc ) 259 366 ! 260 367 IF( p4z_flx_alloc /= 0 ) CALL ctl_warn('p4z_flx_alloc : failed to allocate arrays') -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zint.F90
r2715 r2823 13 13 !! p4z_int : interpolation and computation of various accessory fields 14 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trc 17 USE sms_pisces 15 USE oce_trc ! shared variables between ocean and passive tracers 16 USE trc ! passive tracers common variables 17 USE sms_pisces ! PISCES Source Minus Sink variables 18 18 19 19 IMPLICIT NONE … … 21 21 22 22 PUBLIC p4z_int 23 PUBLIC p4z_int_alloc24 25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc !: Temp. dependancy of various biological rates26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates27 23 28 24 REAL(wp) :: xksilim = 16.5e-6_wp ! Half-saturation constant for the Si half-saturation constant computation … … 44 40 !!--------------------------------------------------------------------- 45 41 INTEGER :: ji, jj 46 REAL(wp) :: z dum42 REAL(wp) :: zvar 47 43 !!--------------------------------------------------------------------- 48 44 … … 57 53 DO ji = 1, jpi 58 54 DO jj = 1, jpj 59 z dum= trn(ji,jj,1,jpsil) * trn(ji,jj,1,jpsil)60 xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* z dum / ( xksilim * xksilim + zdum) ) * 1e-6 )55 zvar = trn(ji,jj,1,jpsil) * trn(ji,jj,1,jpsil) 56 xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 ) 61 57 END DO 62 58 END DO … … 68 64 ! 69 65 END SUBROUTINE p4z_int 70 71 72 INTEGER FUNCTION p4z_int_alloc()73 !!----------------------------------------------------------------------74 !! *** ROUTINE p4z_int_alloc ***75 !!----------------------------------------------------------------------76 ALLOCATE( tgfunc(jpi,jpj,jpk), tgfunc2(jpi,jpj,jpk), STAT=p4z_int_alloc )77 !78 IF( p4z_int_alloc /= 0 ) CALL ctl_warn('p4z_int_alloc : failed to allocate arrays.')79 !80 END FUNCTION p4z_int_alloc81 66 82 67 #else -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zlim.F90
r2528 r2823 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.4 ! 2011-04 (O. Aumont, C. Ethe) Limitation for iron modelled in quota 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_pisces … … 14 15 !! p4z_lim_init : Read the namelist 15 16 !!---------------------------------------------------------------------- 16 USE trc17 USE oce_trc !18 USE trc !19 USE sms_pisces !17 USE oce_trc ! Shared ocean-passive tracers variables 18 USE trc ! Tracers defined 19 USE sms_pisces ! PISCES variables 20 USE p4zopt ! Optical 20 21 21 22 IMPLICIT NONE … … 26 27 27 28 !! * Shared module variables 28 REAL(wp), PUBLIC :: & 29 conc0 = 2.e-6_wp , & !: 30 conc1 = 10.e-6_wp , & !: 31 conc2 = 2.e-11_wp , & !: 32 conc2m = 8.E-11_wp , & !: 33 conc3 = 1.e-10_wp , & !: 34 conc3m = 4.e-10_wp , & !: 35 concnnh4 = 1.e-7_wp , & !: 36 concdnh4 = 5.e-7_wp , & !: 37 xksi1 = 2.E-6_wp , & !: 38 xksi2 = 3.33E-6_wp , & !: 39 xkdoc = 417.E-6_wp , & !: 40 caco3r = 0.3_wp !: 41 42 29 REAL(wp), PUBLIC :: conc0 = 2.e-6_wp !: NO3, PO4 half saturation 30 REAL(wp), PUBLIC :: conc1 = 8.e-6_wp !: Phosphate half saturation for diatoms 31 REAL(wp), PUBLIC :: conc2 = 1.e-9_wp !: Iron half saturation for nanophyto 32 REAL(wp), PUBLIC :: conc2m = 3.e-9_wp !: Max iron half saturation for nanophyto 33 REAL(wp), PUBLIC :: conc3 = 2.e-9_wp !: Iron half saturation for diatoms 34 REAL(wp), PUBLIC :: conc3m = 8.e-9_wp !: Max iron half saturation for diatoms 35 REAL(wp), PUBLIC :: concnnh4 = 1.e-7_wp !: NH4 half saturation for phyto 36 REAL(wp), PUBLIC :: concdnh4 = 4.e-7_wp !: NH4 half saturation for diatoms 37 REAL(wp), PUBLIC :: xksi1 = 2.E-6_wp !: half saturation constant for Si uptake 38 REAL(wp), PUBLIC :: xksi2 = 3.33e-6_wp !: half saturation constant for Si/C 39 REAL(wp), PUBLIC :: xkdoc = 417.e-6_wp !: 2nd half-sat. of DOC remineralization 40 REAL(wp), PUBLIC :: concfebac = 1.E-11_wp !: Fe half saturation for bacteria 41 REAL(wp), PUBLIC :: qnfelim = 7.E-6_wp !: optimal Fe quota for nanophyto 42 REAL(wp), PUBLIC :: qdfelim = 7.E-6_wp !: optimal Fe quota for diatoms 43 REAL(wp), PUBLIC :: caco3r = 0.16_wp !: mean rainratio 44 45 ! Coefficient for iron limitation 46 ! REAL(wp) :: xcoef1 = 0.0016 47 ! REAL(wp) :: xcoef2 = 1.21E-5 * 1.5 48 ! REAL(wp) :: xcoef3 = 1.15E-4 / 7.625 / 55.85 49 REAL(wp) :: xcoef1 = 0.0016 / 55.85 50 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 51 REAL(wp) :: xcoef3 = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5 43 52 !!* Substitution 44 53 # include "top_substitute.h90" … … 60 69 !! ** Method : - ??? 61 70 !!--------------------------------------------------------------------- 71 ! 62 72 INTEGER, INTENT(in) :: kt 73 ! 63 74 INTEGER :: ji, jj, jk 64 75 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 65 REAL(wp) :: zconctemp, zconctemp2, zconctempn, zconctempn2 66 REAL(wp) :: ztemp, zdenom 76 REAL(wp) :: zconcd, zconcd2, zconcn, zconcn2 77 REAL(wp) :: z1_trndia, z1_trnphy, ztem1, ztem2, zetot1, zetot2 78 REAL(wp) :: zdenom, zratio, zironmin 79 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4 67 80 !!--------------------------------------------------------------------- 68 69 70 ! Tuning of the iron concentration to a minimum71 ! level that is set to the detection limit72 ! -------------------------------------73 81 74 82 DO jk = 1, jpkm1 75 83 DO jj = 1, jpj 76 84 DO ji = 1, jpi 77 zno3=trn(ji,jj,jk,jpno3) 78 zferlim = MAX( 1.5e-11*(zno3/40E-6)**2, 3e-12 ) 79 zferlim = MIN( zferlim, 1.5e-11 ) 85 86 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 87 !------------------------------------- 88 zno3 = trn(ji,jj,jk,jpno3) / 40.e-6 89 zferlim = MAX( 2e-11 * zno3 * zno3, 5e-12 ) 90 zferlim = MIN( zferlim, 3e-11 ) 80 91 trn(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim ) 81 END DO 92 93 ! Computation of a variable Ks for iron on diatoms taking into account 94 ! that increasing biomass is made of generally bigger cells 95 !------------------------------------------------ 96 zconcd = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - 5.e-7 ) 97 zconcd2 = trn(ji,jj,jk,jpdia) - zconcd 98 zconcn = MAX( 0.e0 , trn(ji,jj,jk,jpphy) - 1.e-6 ) 99 zconcn2 = trn(ji,jj,jk,jpphy) - zconcn 100 z1_trnphy = 1. / ( trn(ji,jj,jk,jpphy) + rtrn ) 101 z1_trndia = 1. / ( trn(ji,jj,jk,jpdia) + rtrn ) 102 103 concdfe(ji,jj,jk) = MAX( conc3 , ( zconcd2 * conc3 + conc3m * zconcd ) * z1_trndia ) 104 zconc1d = MAX( 2.* conc0 , ( zconcd2 * 2. * conc0 + conc1 * zconcd ) * z1_trndia ) 105 zconc1dnh4 = MAX( 2.* concnnh4, ( zconcd2 * 2. * concnnh4 + concdnh4 * zconcd ) * z1_trndia ) 106 107 concnfe(ji,jj,jk) = MAX( conc2 , ( zconcn2 * conc2 + conc2m * zconcn ) * z1_trnphy ) 108 zconc0n = MAX( conc0 , ( zconcn2 * conc0 + 2. * conc0 * zconcn ) * z1_trnphy ) 109 zconc0nnh4 = MAX( concnnh4 , ( zconcn2 * concnnh4 + 2. * concnnh4 * zconcn ) * z1_trnphy ) 110 111 ! Michaelis-Menten Limitation term for nutrients Small flagellates 112 ! ----------------------------------------------- 113 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * trn(ji,jj,jk,jpno3) + zconc0n * trn(ji,jj,jk,jpnh4) ) 114 xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 115 xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * zconc0n * zdenom 116 ! 117 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 118 zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc0nnh4 ) 119 zratio = trn(ji,jj,jk,jpnfe) * z1_trnphy 120 zironmin = xcoef1 * trn(ji,jj,jk,jpnch) * z1_trnphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 121 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 122 xlimnfe(ji,jj,jk) = MIN( 1., zlim3 ) 123 xlimphy(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 124 ! 125 zlim1 = trn(ji,jj,jk,jpnh4) / ( concnnh4 + trn(ji,jj,jk,jpnh4) ) 126 zlim3 = trn(ji,jj,jk,jpfer) / ( concfebac+ trn(ji,jj,jk,jpfer) ) 127 zlim4 = trn(ji,jj,jk,jpdoc) / ( xkdoc + trn(ji,jj,jk,jpdoc) ) 128 xlimbac(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 129 130 ! Michaelis-Menten Limitation term for nutrients Diatoms 131 ! ---------------------------------------------- 132 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trn(ji,jj,jk,jpno3) + zconc1d * trn(ji,jj,jk,jpnh4) ) 133 xdiatno3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 134 xdiatnh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * zconc1d * zdenom 135 ! 136 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 137 zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc1dnh4 ) 138 zlim3 = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi(ji,jj) ) 139 zratio = trn(ji,jj,jk,jpdfe)/(trn(ji,jj,jk,jpdia)+rtrn) 140 zironmin = xcoef1 * trn(ji,jj,jk,jpdch) * z1_trndia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 141 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 142 xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 143 xlimdia(ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 144 xlimsi(ji,jj,jk) = MIN( zlim1, zlim2, zlim4 ) 145 END DO 82 146 END DO 83 147 END DO 84 148 85 ! Computation of a variable Ks for iron on diatoms taking into account 86 ! that increasing biomass is made of generally bigger cells 87 ! ------------------------------------------------ 88 149 ! Compute the fraction of nanophytoplankton that is made of calcifiers 150 ! -------------------------------------------------------------------- 89 151 DO jk = 1, jpkm1 90 152 DO jj = 1, jpj 91 153 DO ji = 1, jpi 92 zconctemp = MAX( 0.e0 , trn(ji,jj,jk,jpdia)-5e-7 ) 93 zconctemp2 = trn(ji,jj,jk,jpdia) - zconctemp 94 zconctempn = MAX( 0.e0 , trn(ji,jj,jk,jpphy)-1e-6 ) 95 zconctempn2 = trn(ji,jj,jk,jpphy) - zconctempn 96 concdfe(ji,jj,jk) = ( zconctemp2 * conc3 + conc3m * zconctemp) & 97 & / ( trn(ji,jj,jk,jpdia) + rtrn ) 98 concdfe(ji,jj,jk) = MAX( conc3, concdfe(ji,jj,jk) ) 99 concnfe(ji,jj,jk) = ( zconctempn2 * conc2 + conc2m * zconctempn) & 100 & / ( trn(ji,jj,jk,jpphy) + rtrn ) 101 concnfe(ji,jj,jk) = MAX( conc2, concnfe(ji,jj,jk) ) 102 END DO 103 END DO 104 END DO 105 106 ! Michaelis-Menten Limitation term for nutrients Small flagellates 107 ! ----------------------------------------------- 108 DO jk = 1, jpkm1 109 DO jj = 1, jpj 110 DO ji = 1, jpi 111 zdenom = 1. / & 112 & ( conc0 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3) + conc0 * trn(ji,jj,jk,jpnh4) ) 113 xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concnnh4 * zdenom 114 xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * conc0 * zdenom 115 116 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 117 zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 ) 118 zlim3 = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concnfe(ji,jj,jk) ) 119 xlimphy(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 120 zlim1 = trn(ji,jj,jk,jpnh4) / ( concnnh4 + trn(ji,jj,jk,jpnh4) ) 121 zlim3 = trn(ji,jj,jk,jpfer) / ( conc2 + trn(ji,jj,jk,jpfer) ) 122 zlim4 = trn(ji,jj,jk,jpdoc) / ( xkdoc + trn(ji,jj,jk,jpdoc) ) 123 xlimbac(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 124 125 END DO 126 END DO 127 END DO 128 129 ! Michaelis-Menten Limitation term for nutrients Diatoms 130 ! ---------------------------------------------- 131 DO jk = 1, jpkm1 132 DO jj = 1, jpj 133 DO ji = 1, jpi 134 zdenom = 1. / & 135 & ( conc1 * concdnh4 + concdnh4 * trn(ji,jj,jk,jpno3) + conc1 * trn(ji,jj,jk,jpnh4) ) 136 137 xdiatno3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concdnh4 * zdenom 138 xdiatnh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * conc1 * zdenom 139 140 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 141 zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concdnh4 ) 142 zlim3 = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi (ji,jj) ) 143 zlim4 = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concdfe(ji,jj,jk) ) 144 xlimdia(ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 145 146 END DO 147 END DO 148 END DO 149 150 151 ! Compute the fraction of nanophytoplankton that is made of calcifiers 152 ! -------------------------------------------------------------------- 153 154 DO jk = 1, jpkm1 155 DO jj = 1, jpj 156 DO ji = 1, jpi 157 ztemp = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 158 xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk) & 159 & * MAX( 0.0001, ztemp / ( 2.+ ztemp ) ) & 160 & * MAX( 1., trn(ji,jj,jk,jpphy) * 1.e6 / 2. ) 154 zlim1 = ( trn(ji,jj,jk,jpno3) * concnnh4 + trn(ji,jj,jk,jpnh4) * conc0 ) & 155 & / ( conc0 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3) + conc0 * trn(ji,jj,jk,jpnh4) ) 156 zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 ) 157 zlim3 = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concfebac ) 158 ztem1 = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 159 ztem2 = tsn(ji,jj,jk,jp_tem) - 10. 160 zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) 161 zetot2 = 1. / ( 30. + etot(ji,jj,jk) ) 162 163 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 164 & * ztem1 / ( 0.1 + ztem1 ) & 165 & * MAX( 1., trn(ji,jj,jk,jpphy) * 1.e6 / 2. ) & 166 & * 2.325 * zetot1 * 30. * zetot2 & 167 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & 168 & * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 161 169 xfracal(ji,jj,jk) = MIN( 0.8 , xfracal(ji,jj,jk) ) 162 xfracal(ji,jj,jk) = MAX( 0.0 1, xfracal(ji,jj,jk) )170 xfracal(ji,jj,jk) = MAX( 0.02, xfracal(ji,jj,jk) ) 163 171 END DO 164 172 END DO … … 182 190 183 191 NAMELIST/nampislim/ conc0, conc1, conc2, conc2m, conc3, conc3m, & 184 & concnnh4, concdnh4, xksi1, xksi2, xkdoc, caco3r 185 186 REWIND( numnat ) ! read numnat 187 READ ( numnat, nampislim ) 192 & concnnh4, concdnh4, xksi1, xksi2, xkdoc, & 193 & concfebac, qnfelim, qdfelim, caco3r 194 195 REWIND( numnatp ) ! read numnat 196 READ ( numnatp, nampislim ) 188 197 189 198 IF(lwp) THEN ! control print … … 192 201 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 193 202 WRITE(numout,*) ' mean rainratio caco3r =', caco3r 194 WRITE(numout,*) ' NO3, PO4 half saturation conc0 203 WRITE(numout,*) ' NO3, PO4 half saturation conc0 =', conc0 195 204 WRITE(numout,*) ' half saturation constant for Si uptake xksi1 =', xksi1 196 205 WRITE(numout,*) ' half saturation constant for Si/C xksi2 =', xksi2 197 WRITE(numout,*) ' 2nd half-sat. of DOC remineralization xkdoc =', xkdoc206 WRITE(numout,*) ' 2nd half-sat. of DOC remineralization xkdoc =', xkdoc 198 207 WRITE(numout,*) ' Phosphate half saturation for diatoms conc1 =', conc1 199 208 WRITE(numout,*) ' Iron half saturation for phyto conc2 =', conc2 … … 203 212 WRITE(numout,*) ' NH4 half saturation for phyto concnnh4 =', concnnh4 204 213 WRITE(numout,*) ' NH4 half saturation for diatoms concdnh4 =', concdnh4 214 WRITE(numout,*) ' Fe half saturation for bacteria concfebac =', concfebac 215 WRITE(numout,*) ' optimal Fe quota for nano. qnfelim =', qnfelim 216 WRITE(numout,*) ' Optimal Fe quota for diatoms qdfelim =', qdfelim 205 217 ENDIF 206 218 -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zlys.F90
r2715 r2823 9 9 !! 1.0 ! 2004 (O. Aumont) modifications 10 10 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 11 !! ! 2011-02 (J. Simeon, J. Orr) Calcon salinity dependence 12 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Improvment of calcite dissolution 11 13 !!---------------------------------------------------------------------- 12 14 #if defined key_pisces … … 17 19 !! p4z_lys_init : Read the namelist parameters 18 20 !!---------------------------------------------------------------------- 19 USE trc 20 USE oce_trc ! 21 USE trc 22 USE sms_pisces 23 USE prtctl_trc 24 USE iom 21 USE oce_trc ! shared variables between ocean and passive tracers 22 USE trc ! passive tracers common variables 23 USE sms_pisces ! PISCES Source Minus Sink variables 24 USE prtctl_trc ! print control for debugging 25 USE iom ! I/O manager 25 26 26 27 IMPLICIT NONE … … 62 63 INTEGER, INTENT(in) :: kt ! ocean time step 63 64 INTEGER :: ji, jj, jk, jn 64 REAL(wp) :: z bot, zalk, zdic, zph, zremco3, zah265 REAL(wp) :: zdispot, zfact, z alka65 REAL(wp) :: zalk, zdic, zph, zremco3, zah2 66 REAL(wp) :: zdispot, zfact, zcalcon, zalka, zaldi 66 67 REAL(wp) :: zomegaca, zexcess, zexcess0 67 #if defined key_diatrc && defined key_iomput68 68 REAL(wp) :: zrfact2 69 #endif70 69 CHARACTER (len=25) :: charout 71 70 !!--------------------------------------------------------------------- … … 91 90 !CDIR NOVERRCHK 92 91 DO ji = 1, jpi 93 94 ! SET DUMMY VARIABLE FOR TOTAL BORATE 95 zbot = borat(ji,jj,jk) 96 97 ! SET DUMMY VARIABLE FOR TOTAL BORATE 98 zbot = borat(ji,jj,jk) 99 zfact = rhop (ji,jj,jk) / 1000. + rtrn 100 101 ! SET DUMMY VARIABLE FOR [H+] 102 zph = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 103 104 ! SET DUMMY VARIABLE FOR [SUM(CO2)]GIVEN 92 zfact = rhop(ji,jj,jk) / 1000. + rtrn 93 zph = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 105 94 zdic = trn(ji,jj,jk,jpdic) / zfact 106 95 zalka = trn(ji,jj,jk,jptal) / zfact 107 96 108 97 ! CALCULATE [ALK]([CO3--], [HCO3-]) 109 zalk = zalka - ( akw3(ji,jj,jk) / zph - zph & 110 & + zbot / (1.+ zph / akb3(ji,jj,jk) ) ) 98 zalk = zalka - ( akw3(ji,jj,jk) / zph - zph + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) 111 99 112 100 ! CALCULATE [H+] and [CO3--] 113 zah2 = SQRT( (zdic-zalk)*(zdic-zalk)+ & 114 & 4.*(zalk*ak23(ji,jj,jk)/ak13(ji,jj,jk)) & 115 & *(2*zdic-zalk)) 116 117 zah2=0.5*ak13(ji,jj,jk)/zalk*((zdic-zalk)+zah2) 118 zco3(ji,jj,jk) = zalk/(2.+zah2/ak23(ji,jj,jk))*zfact 119 120 hi(ji,jj,jk) = zah2*zfact 121 101 zaldi = zdic - zalk 102 zah2 = SQRT( zaldi * zaldi + 4.* ( zalk * ak23(ji,jj,jk) / ak13(ji,jj,jk) ) * ( zdic + zaldi ) ) 103 zah2 = 0.5 * ak13(ji,jj,jk) / zalk * ( zaldi + zah2 ) 104 ! 105 zco3(ji,jj,jk) = zalk / ( 2. + zah2 / ak23(ji,jj,jk) ) * zfact 106 hi(ji,jj,jk) = zah2 * zfact 122 107 END DO 123 108 END DO … … 137 122 138 123 ! DEVIATION OF [CO3--] FROM SATURATION VALUE 139 zomegaca = ( calcon * zco3(ji,jj,jk) ) / aksp(ji,jj,jk) 124 ! Salinity dependance in zomegaca and divide by rhop/1000 to have good units 125 zcalcon = calcon * ( tsn(ji,jj,jk,jp_sal) / 35._wp ) 126 zfact = rhop(ji,jj,jk) / 1000._wp 127 zomegaca = ( zcalcon * zco3(ji,jj,jk) * zfact ) / aksp(ji,jj,jk) 140 128 141 129 ! SET DEGREE OF UNDER-/SUPERSATURATION 142 zexcess0 = MAX( 0., ( 1.- zomegaca ) ) 130 excess(ji,jj,jk) = 1._wp - zomegaca 131 zexcess0 = MAX( 0., excess(ji,jj,jk) ) 143 132 zexcess = zexcess0**nca 144 133 … … 166 155 END DO 167 156 END DO 168 157 ! 169 158 # if defined key_diatrc 170 # if !defined key_iomput171 trc3d(:,:,:,jp_pcs0_3d ) = hi (:,:,:) * tmask(:,:,:)172 trc3d(:,:,:,jp_pcs0_3d + 1) = zco3(:,:,:) * tmask(:,:,:)173 trc3d(:,:,:,jp_pcs0_3d + 2) = aksp(:,:,:) / calcon * tmask(:,:,:)174 # else 175 zrfact2 = 1.e3 * rfact2r176 CALL iom_put( "PH" , hi (:,:,:) * tmask(:,:,:) ) 177 CALL iom_put( "CO3" , zco3 (:,:,:) * tmask(:,:,:))178 CALL iom_put( "CO3sat", aksp (:,:,:) / calcon * tmask(:,:,:))179 CALL iom_put( "DCAL" , zcaldiss(:,:,:) * zrfact2 * tmask(:,:,:))180 # 181 # 159 # if defined key_iomput 160 zrfact2 = 1.e3 * rfact2r 161 CALL iom_put( "PH" , hi (:,:,:) * tmask(:,:,:) ) 162 CALL iom_put( "CO3" , zco3 (:,:,:) * tmask(:,:,:) ) 163 CALL iom_put( "CO3sat", aksp (:,:,:) / calcon * tmask(:,:,:) ) 164 CALL iom_put( "DCAL" , zcaldiss(:,:,:) * zrfact2 * tmask(:,:,:) ) 165 #else 166 trc3d(:,:,:,jp_pcs0_3d ) = hi (:,:,:) * tmask(:,:,:) 167 trc3d(:,:,:,jp_pcs0_3d + 1) = zco3(:,:,:) * tmask(:,:,:) 168 trc3d(:,:,:,jp_pcs0_3d + 2) = aksp(:,:,:) / calcon * tmask(:,:,:) 169 #endif 170 #endif 182 171 ! 183 172 IF(ln_ctl) THEN ! print mean trends (used for debugging) … … 207 196 NAMELIST/nampiscal/ kdca, nca 208 197 209 REWIND( numnat ) ! read numnat210 READ ( numnat , nampiscal )198 REWIND( numnatp ) ! read numnatp 199 READ ( numnatp, nampiscal ) 211 200 212 201 IF(lwp) THEN ! control print -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zmeso.F90
r2528 r2823 6 6 !! History : 1.0 ! 2002 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_pisces … … 14 15 !! p4z_meso_init : Initialization of the parameters for mesozooplankton 15 16 !!---------------------------------------------------------------------- 16 USE trc17 USE oce_trc !18 USE trc !19 USE sms_pisces !20 USE p rtctl_trc21 USE p4z int22 USE p 4zsink23 USE iom 17 USE oce_trc ! shared variables between ocean and passive tracers 18 USE trc ! passive tracers common variables 19 USE sms_pisces ! PISCES Source Minus Sink variables 20 USE p4zsink ! vertical flux of particulate matter due to sinking 21 USE p4zint ! interpolation and computation of various fields 22 USE p4zprod ! production 23 USE prtctl_trc ! print control for debugging 24 USE iom ! I/O manager 24 25 25 26 IMPLICIT NONE … … 30 31 31 32 !! * Shared module variables 32 REAL(wp), PUBLIC :: &33 xprefc = 1.0_wp , & !:34 xprefp = 0.2_wp , & !:35 xprefz = 1.0_wp , & !:36 xprefpoc = 0.0_wp , & !:37 resrat2 = 0.005_wp , & !:38 mzrat2 = 0.03_wp , & !:39 grazrat2 = 0.7_wp , & !:40 xkgraz2 = 20E-6_wp , & !:41 unass2 = 0.3_wp , & !:42 sigma2 = 0.6_wp , & !:43 epsher2 = 0.33_wp , & !:44 grazflux = 5.E3_wp45 33 REAL(wp), PUBLIC :: part2 = 0.5_wp !: part of calcite not dissolved in mesozoo guts 34 REAL(wp), PUBLIC :: xprefc = 1.0_wp !: mesozoo preference for POC 35 REAL(wp), PUBLIC :: xprefp = 0.3_wp !: mesozoo preference for nanophyto 36 REAL(wp), PUBLIC :: xprefz = 1.0_wp !: mesozoo preference for diatoms 37 REAL(wp), PUBLIC :: xprefpoc = 0.3_wp !: mesozoo preference for POC 38 REAL(wp), PUBLIC :: xthresh2 = 2E-7_wp !: feeding threshold for mesozooplankton 39 REAL(wp), PUBLIC :: resrat2 = 0.005_wp !: exsudation rate of mesozooplankton 40 REAL(wp), PUBLIC :: mzrat2 = 0.04_wp !: microzooplankton mortality rate 41 REAL(wp), PUBLIC :: grazrat2 = 0.9_wp !: maximal mesozoo grazing rate 42 REAL(wp), PUBLIC :: xkgraz2 = 20E-6_wp !: non assimilated fraction of P by mesozoo 43 REAL(wp), PUBLIC :: unass2 = 0.3_wp !: Efficicency of mesozoo growth 44 REAL(wp), PUBLIC :: sigma2 = 0.6_wp !: Fraction of mesozoo excretion as DOM 45 REAL(wp), PUBLIC :: epsher2 = 0.3_wp !: half sturation constant for grazing 2 46 REAL(wp), PUBLIC :: grazflux = 3.E3_wp !: mesozoo flux feeding rate 46 47 47 48 !!* Substitution … … 65 66 INTEGER, INTENT(in) :: kt, jnt ! ocean time step 66 67 INTEGER :: ji, jj, jk 67 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz 68 REAL(wp) :: zfact, zcompam, zdenom, zgraze2, zstep 69 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz2 68 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 69 REAL(wp) :: zgraze2 , zdenom, zncratio 70 REAL(wp) :: zfact , zstep, zfood, zfoodlim 71 REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotf 72 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz2, zgrasrat 70 73 #if defined key_kriest 71 74 REAL znumpoc 72 75 #endif 73 REAL(wp) :: zrespz2, ztortz2,zgrazd,zgrazz,zgrazpof74 REAL(wp) :: zgrazn, zgrazpoc,zgraznf,zgrazf75 REAL(wp) :: zgrazfff, zgrazffe76 REAL(wp) :: zrespz2, ztortz2, zgrazd, zgrazz, zgrazpof 77 REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 78 REAL(wp) :: zgrazfff, zgrazffe 76 79 CHARACTER (len=25) :: charout 77 #if defined key_diatrc && defined key_iomput78 80 REAL(wp) :: zrfact2 79 #endif80 81 81 82 !!--------------------------------------------------------------------- … … 84 85 DO jj = 1, jpj 85 86 DO ji = 1, jpi 86 87 zcompam = MAX( ( trn(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 87 zcompam = MAX( ( trn(ji,jj,jk,jpmes) - 1.e-8 ), 0.e0 ) 88 88 # if defined key_degrad 89 zstep = xstep * facvol(ji,jj,jk)89 zstep = xstep * facvol(ji,jj,jk) 90 90 # else 91 zstep = xstep91 zstep = xstep 92 92 # endif 93 zfact = zstep * tgfunc(ji,jj,jk) * zcompam93 zfact = zstep * tgfunc(ji,jj,jk) * zcompam 94 94 95 95 ! Respiration rates of both zooplankton 96 96 ! ------------------------------------- 97 zrespz2 = resrat2 * zfact * ( 1. + 3. * nitrfac(ji,jj,jk) )&98 & * trn(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes))97 zrespz2 = resrat2 * zfact * trn(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) ) & 98 & + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 99 99 100 100 ! Zooplankton mortality. A square function has been selected with 101 101 ! no real reason except that it seems to be more stable and may mimic predation 102 102 ! --------------------------------------------------------------- 103 ztortz2 = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes)103 ztortz2 = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes) 104 104 ! 105 105 106 106 zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ) 107 107 zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-8 ), 0.e0 ) 108 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 2.e-7), 0.e0 )108 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1.e-8 ), 0.e0 ) 109 109 zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - 1.e-8 ), 0.e0 ) 110 110 111 ! Microzooplankton grazing 112 ! ------------------------ 113 zdenom = 1. / ( xkgraz2 + xprefc * trn(ji,jj,jk,jpdia) & 114 & + xprefz * trn(ji,jj,jk,jpzoo) & 115 & + xprefp * trn(ji,jj,jk,jpphy) & 116 & + xprefpoc * trn(ji,jj,jk,jppoc) ) 117 118 zgraze2 = grazrat2 * zstep * Tgfunc2(ji,jj,jk) * zdenom * trn(ji,jj,jk,jpmes) 119 120 zgrazd = zgraze2 * xprefc * zcompadi 121 zgrazz = zgraze2 * xprefz * zcompaz 122 zgrazn = zgraze2 * xprefp * zcompaph 123 zgrazpoc = zgraze2 * xprefpoc * zcompapoc 124 125 zgraznf = zgrazn * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 126 zgrazf = zgrazd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 127 zgrazpof = zgrazpoc * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 128 111 zfood = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc + rtrn 112 zfoodlim = MAX( 0., zfood - xthresh2 ) 113 zdenom = zfoodlim / zfood / (xkgraz2 + zfoodlim) 114 115 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpmes) * zdenom 116 zgrazd = zgraze2 * xprefc * zcompadi 117 zgrazz = zgraze2 * xprefz * zcompaz 118 zgrazn = zgraze2 * xprefp * zcompaph 119 zgrazpoc = zgraze2 * xprefpoc * zcompapoc 120 121 zgraznf = zgrazn * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 122 zgrazf = zgrazd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 123 zgrazpof = zgrazpoc * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 124 129 125 ! Mesozooplankton flux feeding on GOC 130 126 ! ---------------------------------- 131 127 # if ! defined key_kriest 132 zgrazffe = grazflux * zstep * wsbio4(ji,jj,jk) &133 134 zgrazfff = zgrazffe * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)128 zgrazffe = grazflux * zstep * wsbio4(ji,jj,jk) & 129 & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 130 zgrazfff = zgrazffe * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 135 131 # else 136 132 !!--------------------------- KRIEST3 ------------------------------------------- … … 143 139 !!--------------------------- KRIEST3 ------------------------------------------- 144 140 145 zgrazffe = grazflux * zstep * wsbio3(ji,jj,jk) &141 zgrazffe = grazflux * zstep * wsbio3(ji,jj,jk) & 146 142 & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 147 zgrazfff = zgrazffe * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)143 zgrazfff = zgrazffe * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 148 144 # endif 149 145 ! 146 zgraztot = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffe 147 zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfff 150 148 #if defined key_diatrc 151 149 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 152 grazing(ji,jj,jk) = grazing(ji,jj,jk) + ( zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffe ) 153 #endif 154 150 grazing(ji,jj,jk) = grazing(ji,jj,jk) + zgraztot 151 #endif 155 152 ! Mesozooplankton efficiency 156 153 ! -------------------------- 157 zgrarem2 = ( zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffe ) * ( 1. - epsher2 - unass2 ) 158 #if ! defined key_kriest 159 zgrafer2 = ( zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfff ) * ( 1.- epsher2 - unass2 ) & 160 & + epsher2 * ( zgrazd * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)-ferat3),0.) & 161 & + zgrazn * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)-ferat3),0.) & 162 & + zgrazpoc * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)-ferat3),0.) & 163 & + zgrazffe * MAX((trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)-ferat3),0.) ) 154 zgrasrat = zgraztotf / ( zgraztot + rtrn ) 155 zncratio = ( xprefc * zcompadi * quotad(ji,jj,jk) & 156 & + xprefp * zcompaph * quotan(ji,jj,jk) & 157 & + xprefz * zcompaz & 158 & + xprefpoc * zcompapoc ) / zfood 159 zepshert = epsher2 * MIN( 1., zncratio ) 160 zepsherv = zepshert * MIN( 1., zgrasrat / ferat3 ) 161 zgrarem2 = zgraztot * ( 1. - zepsherv - unass2 ) 162 zgrafer2 = zgraztot * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepshert ) 163 zgrapoc2 = zgraztot * unass2 164 165 ! Update the arrays TRA which contain the biological sources and sinks 166 zgrarsig = zgrarem2 * sigma2 167 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarsig 168 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig 169 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 - zgrarsig 170 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 171 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer2 172 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 173 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 174 #if defined key_kriest 175 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc2 176 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc2 * xkr_dmeso 177 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass2 164 178 #else 165 zgrafer2 = ( zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfff ) * ( 1. - epsher2 - unass2 ) & 166 & + epsher2 * ( zgrazd * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)-ferat3),0.) & 167 & + zgrazn * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)-ferat3),0.) & 168 & + zgrazpoc * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)-ferat3),0.) & 169 & + zgrazffe * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)-ferat3),0.) ) 170 171 #endif 172 ! Update the arrays TRA which contain the biological sources and sinks 173 174 zgrapoc2 = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffe 175 176 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarem2 * sigma2 177 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarem2 * sigma2 178 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 * ( 1. - sigma2 ) 179 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem2 * sigma2 180 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer2 181 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem2 * sigma2 182 183 #if defined key_kriest 184 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc2 * unass2 185 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc2 * unass2 * xkr_dmeso 186 #else 187 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zgrapoc2 * unass2 179 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zgrapoc2 180 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zgraztotf * unass2 188 181 #endif 189 182 zmortz2 = ztortz2 + zrespz2 190 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz2 + epsher2 * zgrapoc2183 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz2 + zepsherv * zgraztot 191 184 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazd 192 185 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz … … 199 192 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 200 193 201 zprcaca = xfracal(ji,jj,jk) * unass2 * zgrazn 194 zprcaca = xfracal(ji,jj,jk) * zgrazn 195 ! calcite production 202 196 #if defined key_diatrc 203 197 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 204 198 #endif 205 zprcaca = part * zprcaca199 zprcaca = part2 * zprcaca 206 200 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca 207 201 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca … … 212 206 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc & 213 207 & + zmortz2 * xkr_dmeso - zgrazffe * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn ) 214 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz2 & 215 & + unass2 * ( ferat3 * zgrazz + zgraznf + zgrazf + zgrazpof + zgrazfff ) - zgrazfff - zgrazpof 208 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz2 - zgrazfff - zgrazpof 216 209 #else 217 210 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc 218 211 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortz2 - zgrazffe 219 212 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof 220 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortz2 & 221 & + unass2 * ( ferat3 * zgrazz + zgraznf + zgrazf + zgrazpof + zgrazfff ) - zgrazfff 213 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortz2 - zgrazfff 222 214 #endif 223 215 … … 228 220 #if defined key_diatrc && defined key_iomput 229 221 zrfact2 = 1.e3 * rfact2r 230 ! Total grazing of phyto by zoo 231 grazing(:,:,:) = grazing(:,:,:) * zrfact2 * tmask(:,:,:) 232 ! Calcite production 233 prodcal(:,:,:) = prodcal(:,:,:) * zrfact2 * tmask(:,:,:) 234 IF( jnt == nrdttrc ) then 222 grazing(:,:,:) = grazing(:,:,:) * zrfact2 * tmask(:,:,:) ! Total grazing of phyto by zoo 223 prodcal(:,:,:) = prodcal(:,:,:) * zrfact2 * tmask(:,:,:) ! Calcite production 224 IF( jnt == nrdttrc ) THEN 235 225 CALL iom_put( "GRAZ" , grazing ) ! Total grazing of phyto by zooplankton 236 226 CALL iom_put( "PCAL" , prodcal ) ! Calcite production 237 227 ENDIF 238 228 #endif 239 240 IF(ln_ctl) THEN ! print mean trends (used for debugging) 241 WRITE(charout, FMT="('meso')") 242 CALL prt_ctl_trc_info(charout) 243 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 244 ENDIF 229 IF(ln_ctl) THEN ! print mean trends (used for debugging) 230 WRITE(charout, FMT="('meso')") 231 CALL prt_ctl_trc_info(charout) 232 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 233 ENDIF 245 234 246 235 END SUBROUTINE p4z_meso … … 260 249 !!---------------------------------------------------------------------- 261 250 262 NAMELIST/nampismes/ grazrat2,resrat2,mzrat2,xprefc, xprefp,&263 & xprefz, xprefpoc, xkgraz2, epsher2, sigma2, unass2, grazflux264 265 REWIND( numnat ) ! read numnat266 READ ( numnat , nampismes )251 NAMELIST/nampismes/ part2, grazrat2, resrat2, mzrat2, xprefc, xprefp, xprefz, & 252 & xprefpoc, xthresh2, xkgraz2, epsher2, sigma2, unass2, grazflux 253 254 REWIND( numnatp ) ! read numnat 255 READ ( numnatp, nampismes ) 267 256 268 257 … … 271 260 WRITE(numout,*) ' Namelist parameters for mesozooplankton, nampismes' 272 261 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 273 WRITE(numout,*) ' zoo preference for phyto xprefc =', xprefc 274 WRITE(numout,*) ' zoo preference for POC xprefp =', xprefp 275 WRITE(numout,*) ' zoo preference for zoo xprefz =', xprefz 276 WRITE(numout,*) ' zoo preference for poc xprefpoc =', xprefpoc 277 WRITE(numout,*) ' exsudation rate of mesozooplankton resrat2 =', resrat2 278 WRITE(numout,*) ' mesozooplankton mortality rate mzrat2 =', mzrat2 279 WRITE(numout,*) ' maximal mesozoo grazing rate grazrat2 =', grazrat2 280 WRITE(numout,*) ' mesozoo flux feeding rate grazflux =', grazflux 281 WRITE(numout,*) ' non assimilated fraction of P by mesozoo unass2 =', unass2 282 WRITE(numout,*) ' Efficicency of Mesozoo growth epsher2 =', epsher2 283 WRITE(numout,*) ' Fraction of mesozoo excretion as DOM sigma2 =', sigma2 284 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 =', xkgraz2 262 WRITE(numout,*) ' part of calcite not dissolved in mesozoo guts part2 =', part2 263 WRITE(numout,*) ' mesozoo preference for phyto xprefc =', xprefc 264 WRITE(numout,*) ' mesozoo preference for POC xprefp =', xprefp 265 WRITE(numout,*) ' mesozoo preference for zoo xprefz =', xprefz 266 WRITE(numout,*) ' mesozoo preference for poc xprefpoc =', xprefpoc 267 WRITE(numout,*) ' feeding threshold for mesozooplankton xthresh2 =', xthresh2 268 WRITE(numout,*) ' exsudation rate of mesozooplankton resrat2 =', resrat2 269 WRITE(numout,*) ' mesozooplankton mortality rate mzrat2 =', mzrat2 270 WRITE(numout,*) ' maximal mesozoo grazing rate grazrat2 =', grazrat2 271 WRITE(numout,*) ' mesozoo flux feeding rate grazflux =', grazflux 272 WRITE(numout,*) ' non assimilated fraction of P by mesozoo unass2 =', unass2 273 WRITE(numout,*) ' Efficicency of Mesozoo growth epsher2 =', epsher2 274 WRITE(numout,*) ' Fraction of mesozoo excretion as DOM sigma2 =', sigma2 275 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 =', xkgraz2 285 276 ENDIF 286 277 -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zmicro.F90
r2528 r2823 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_pisces … … 14 15 !! p4z_micro_init : Initialize and read the appropriate namelist 15 16 !!---------------------------------------------------------------------- 16 USE trc 17 USE oce_trc ! 18 USE trc ! 19 USE sms_pisces ! 20 USE prtctl_trc 21 USE p4zint 22 USE p4zsink 23 USE iom 17 USE oce_trc ! shared variables between ocean and passive tracers 18 USE trc ! passive tracers common variables 19 USE sms_pisces ! PISCES Source Minus Sink variables 20 USE p4zsink ! vertical flux of particulate matter due to sinking 21 USE p4zint ! interpolation and computation of various fields 22 USE p4zprod ! production 23 USE prtctl_trc ! print control for debugging 24 24 25 25 IMPLICIT NONE … … 30 30 31 31 !! * Shared module variables 32 REAL(wp), PUBLIC :: & 33 xpref2c = 0.0_wp , & !: 34 xpref2p = 0.5_wp , & !: 35 xpref2d = 0.5_wp , & !: 36 resrat = 0.03_wp , & !: 37 mzrat = 0.0_wp , & !: 38 grazrat = 4.0_wp , & !: 39 xkgraz = 20E-6_wp , & !: 40 unass = 0.3_wp , & !: 41 sigma1 = 0.6_wp , & !: 42 epsher = 0.33_wp 32 REAL(wp), PUBLIC :: part = 0.5_wp !: part of calcite not dissolved in microzoo guts 33 REAL(wp), PUBLIC :: xpref2c = 0.2_wp !: microzoo preference for POC 34 REAL(wp), PUBLIC :: xpref2p = 1.0_wp !: microzoo preference for nanophyto 35 REAL(wp), PUBLIC :: xpref2d = 0.6_wp !: microzoo preference for diatoms 36 REAL(wp), PUBLIC :: xthresh = 2E-7_wp !: feeding threshold for microzooplankton 37 REAL(wp), PUBLIC :: resrat = 0.03_wp !: exsudation rate of microzooplankton 38 REAL(wp), PUBLIC :: mzrat = 0.0_wp !: microzooplankton mortality rate 39 REAL(wp), PUBLIC :: grazrat = 3.0_wp !: maximal microzoo grazing rate 40 REAL(wp), PUBLIC :: xkgraz = 20E-6_wp !: non assimilated fraction of P by microzoo 41 REAL(wp), PUBLIC :: unass = 0.3_wp !: Efficicency of microzoo growth 42 REAL(wp), PUBLIC :: sigma1 = 0.6_wp !: Fraction of microzoo excretion as DOM 43 REAL(wp), PUBLIC :: epsher = 0.3_wp !: half sturation constant for grazing 1 43 44 44 45 … … 63 64 INTEGER, INTENT(in) :: kt ! ocean time step 64 65 INTEGER :: ji, jj, jk 65 REAL(wp) :: zcompadi, zcompadi2, zcompaz , zcompaph, zcompapoc 66 REAL(wp) :: zgraze , zdenom , zdenom2, zstep 67 REAL(wp) :: zfact , zinano , zidiat, zipoc 66 REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 67 REAL(wp) :: zgraze , zdenom, zncratio 68 REAL(wp) :: zfact , zstep, zfood, zfoodlim 69 REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotf 68 70 REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 69 REAL(wp) :: zrespz, ztortz 71 REAL(wp) :: zrespz, ztortz, zgrasrat 70 72 REAL(wp) :: zgrazp, zgrazm, zgrazsd 71 73 REAL(wp) :: zgrazmf, zgrazsf, zgrazpf … … 74 76 !!--------------------------------------------------------------------- 75 77 76 77 78 #if defined key_diatrc 78 79 grazing(:,:,:) = 0. !: Initialisation of grazing 79 80 #endif 80 81 zstep = rfact2 / rday ! Time step duration for biology82 81 83 82 DO jk = 1, jpkm1 84 83 DO jj = 1, jpj 85 84 DO ji = 1, jpi 86 zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e- 9), 0.e0 )85 zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-8 ), 0.e0 ) 87 86 # if defined key_degrad 88 87 zstep = xstep * facvol(ji,jj,jk) … … 90 89 zstep = xstep 91 90 # endif 92 zfact = zstep * tgfunc (ji,jj,jk) * zcompaz91 zfact = zstep * tgfunc2(ji,jj,jk) * zcompaz 93 92 94 93 ! Respiration rates of both zooplankton 95 94 ! ------------------------------------- 96 zrespz = resrat * zfact * ( 1.+ 3.* nitrfac(ji,jj,jk) )&97 & * trn(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo))95 zrespz = resrat * zfact * trn(ji,jj,jk,jpzoo) / ( 2. * xkmort + trn(ji,jj,jk,jpzoo) ) & 96 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 98 97 99 98 ! Zooplankton mortality. A square function has been selected with … … 102 101 ztortz = mzrat * 1.e6 * zfact * trn(ji,jj,jk,jpzoo) 103 102 104 zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ) 105 zcompadi2 = MIN( zcompadi, 5.e-7 ) 106 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 2.e-7 ), 0.e0 ) 103 zcompadi = MIN( MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ), 5.e-7 ) 104 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1.e-8 ), 0.e0 ) 107 105 zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - 1.e-8 ), 0.e0 ) 108 106 109 107 ! Microzooplankton grazing 110 108 ! ------------------------ 111 zdenom2 = 1./ ( xpref2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi2 + rtrn ) 112 113 zgraze = grazrat * zstep * tgfunc(ji,jj,jk) * trn(ji,jj,jk,jpzoo) 114 115 zinano = xpref2p * zcompaph * zdenom2 116 zipoc = xpref2c * zcompapoc * zdenom2 117 zidiat = xpref2d * zcompadi2 * zdenom2 118 119 zdenom = 1./ ( xkgraz + zinano * zcompaph + zipoc * zcompapoc + zidiat * zcompadi2 ) 120 121 zgrazp = zgraze * zinano * zcompaph * zdenom 122 zgrazm = zgraze * zipoc * zcompapoc * zdenom 123 zgrazsd = zgraze * zidiat * zcompadi2 * zdenom 124 125 zgrazpf = zgrazp * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 126 zgrazmf = zgrazm * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 127 zgrazsf = zgrazsd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 109 zfood = xpref2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi + rtrn 110 zfoodlim = MAX( 0. , zfood - xthresh ) 111 zdenom = zfoodlim / zfood / ( xkgraz + zfoodlim ) 112 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpzoo) * zdenom 113 zgrazp = zgraze * xpref2p * zcompaph 114 zgrazm = zgraze * xpref2c * zcompapoc 115 zgrazsd = zgraze * xpref2d * zcompadi 116 117 zgrazpf = zgrazp * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 118 zgrazmf = zgrazm * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 119 zgrazsf = zgrazsd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 120 ! 121 zgraztot = zgrazp + zgrazm + zgrazsd 122 zgraztotf = zgrazpf + zgrazsf + zgrazmf 128 123 #if defined key_diatrc 129 124 ! Grazing by microzooplankton 130 grazing(ji,jj,jk) = grazing(ji,jj,jk) + zgraz p + zgrazm + zgrazsd125 grazing(ji,jj,jk) = grazing(ji,jj,jk) + zgraztot 131 126 #endif 132 127 133 128 ! Various remineralization and excretion terms 134 129 ! -------------------------------------------- 135 zgrarem = ( zgrazp + zgrazm + zgrazsd ) * ( 1.- epsher - unass ) 136 zgrafer = ( zgrazpf + zgrazsf + zgrazmf ) * ( 1.- epsher - unass ) & 137 & + epsher * ( zgrazm * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc)+ rtrn)-ferat3),0.e0) & 138 & + zgrazp * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy)+ rtrn)-ferat3),0.e0) & 139 & + zgrazsd * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia)+ rtrn)-ferat3),0.e0 ) ) 140 141 zgrapoc = ( zgrazp + zgrazm + zgrazsd ) 130 zgrasrat = zgraztotf / ( zgraztot + rtrn ) 131 zncratio = ( xpref2p * zcompaph * quotan(ji,jj,jk) & 132 & + xpref2d * zcompadi * quotad(ji,jj,jk) + xpref2c * zcompapoc ) / zfood 133 zepshert = epsher * MIN( 1., zncratio ) 134 zepsherv = zepshert * MIN( 1., zgrasrat / ferat3 ) 135 zgrafer = zgraztot * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepshert ) 136 zgrarem = zgraztot * ( 1. - zepsherv - unass ) 137 zgrapoc = zgraztot * unass 142 138 143 139 ! Update of the TRA arrays 144 140 ! ------------------------ 145 146 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrar em * sigma1147 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrar em * sigma1148 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem * (1.-sigma1)149 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrar em * sigma1141 zgrarsig = zgrarem * sigma1 142 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarsig 143 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig 144 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 145 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 150 146 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 151 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc * unass 152 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem * sigma1 147 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 148 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass 149 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 150 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 153 151 #if defined key_kriest 154 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * unass * xkr_ddiat 155 #endif 156 157 ! 152 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_ddiat 153 #endif 158 154 ! Update the arrays TRA which contain the biological sources and sinks 159 155 ! -------------------------------------------------------------------- 160 161 156 zmortz = ztortz + zrespz 162 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + epsher * zgrapoc157 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztot 163 158 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 164 159 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd … … 170 165 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 171 166 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm 172 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz + unass * ( zgrazpf + zgrazsf ) - (1.-unass) *zgrazmf173 zprcaca = xfracal(ji,jj,jk) * unass *zgrazp167 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf 168 zprcaca = xfracal(ji,jj,jk) * zgrazp 174 169 #if defined key_diatrc 170 ! calcite production 175 171 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 176 172 #endif … … 209 205 !!---------------------------------------------------------------------- 210 206 211 NAMELIST/nampiszoo/ grazrat,resrat,mzrat,xpref2c, xpref2p, &212 & xpref2d, xkgraz, epsher, sigma1, unass213 214 REWIND( numnat ) ! read numnat215 READ ( numnat , nampiszoo )207 NAMELIST/nampiszoo/ part, grazrat, resrat, mzrat, xpref2c, xpref2p, & 208 & xpref2d, xthresh, xkgraz, epsher, sigma1, unass 209 210 REWIND( numnatp ) ! read numnat 211 READ ( numnatp, nampiszoo ) 216 212 217 213 IF(lwp) THEN ! control print … … 219 215 WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszoo' 220 216 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 221 WRITE(numout,*) ' zoo preference for POC xpref2c =', xpref2c 222 WRITE(numout,*) ' zoo preference for nano xpref2p =', xpref2p 223 WRITE(numout,*) ' zoo preference for diatoms xpref2d =', xpref2d 224 WRITE(numout,*) ' exsudation rate of microzooplankton resrat =', resrat 225 WRITE(numout,*) ' microzooplankton mortality rate mzrat =', mzrat 226 WRITE(numout,*) ' maximal microzoo grazing rate grazrat =', grazrat 227 WRITE(numout,*) ' non assimilated fraction of P by microzoo unass =', unass 228 WRITE(numout,*) ' Efficicency of microzoo growth epsher =', epsher 229 WRITE(numout,*) ' Fraction of microzoo excretion as DOM sigma1 =', sigma1 230 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 217 WRITE(numout,*) ' part of calcite not dissolved in microzoo guts part =', part 218 WRITE(numout,*) ' microzoo preference for POC xpref2c =', xpref2c 219 WRITE(numout,*) ' microzoo preference for nano xpref2p =', xpref2p 220 WRITE(numout,*) ' microzoo preference for diatoms xpref2d =', xpref2d 221 WRITE(numout,*) ' feeding threshold for microzooplankton xthresh =', xthresh 222 WRITE(numout,*) ' exsudation rate of microzooplankton resrat =', resrat 223 WRITE(numout,*) ' microzooplankton mortality rate mzrat =', mzrat 224 WRITE(numout,*) ' maximal microzoo grazing rate grazrat =', grazrat 225 WRITE(numout,*) ' non assimilated fraction of P by microzoo unass =', unass 226 WRITE(numout,*) ' Efficicency of microzoo growth epsher =', epsher 227 WRITE(numout,*) ' Fraction of microzoo excretion as DOM sigma1 =', sigma1 228 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 231 229 ENDIF 232 230 -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zmort.F90
r2528 r2823 14 14 !! p4z_mort_init : Initialize the mortality params for phytoplankton 15 15 !!---------------------------------------------------------------------- 16 USE trc 17 USE oce_trc ! 18 USE trc ! 19 USE sms_pisces ! 20 USE p4zsink 21 USE prtctl_trc 16 USE oce_trc ! shared variables between ocean and passive tracers 17 USE trc ! passive tracers common variables 18 USE sms_pisces ! PISCES Source Minus Sink variables 19 USE p4zsink ! vertical flux of particulate matter due to sinking 20 USE prtctl_trc ! print control for debugging 22 21 23 22 IMPLICIT NONE … … 29 28 30 29 !! * Shared module variables 31 REAL(wp), PUBLIC :: & 32 wchl = 0.001_wp , & !: 33 wchld = 0.02_wp , & !: 34 mprat = 0.01_wp , & !: 35 mprat2 = 0.01_wp , & !: 36 mpratm = 0.01_wp !: 30 REAL(wp), PUBLIC :: wchl = 0.001_wp !: 31 REAL(wp), PUBLIC :: wchld = 0.02_wp !: 32 REAL(wp), PUBLIC :: mprat = 0.01_wp !: 33 REAL(wp), PUBLIC :: mprat2 = 0.01_wp !: 34 REAL(wp), PUBLIC :: mpratm = 0.01_wp !: 37 35 38 36 … … 81 79 !!--------------------------------------------------------------------- 82 80 83 84 81 #if defined key_diatrc 85 82 prodcal(:,:,:) = 0. !: Initialisation of calcite production variable … … 91 88 92 89 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 93 94 90 # if defined key_degrad 95 91 zstep = xstep * facvol(ji,jj,jk) … … 117 113 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zmortp * zfactfe 118 114 zprcaca = xfracal(ji,jj,jk) * zmortp 115 ! 119 116 #if defined key_diatrc 120 117 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 121 118 #endif 119 ! 122 120 zfracal = 0.5 * xfracal(ji,jj,jk) 123 121 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca … … 243 241 NAMELIST/nampismort/ wchl, wchld, mprat, mprat2, mpratm 244 242 245 REWIND( numnat ) ! read numnat246 READ ( numnat , nampismort )243 REWIND( numnatp ) ! read numnat 244 READ ( numnatp, nampismort ) 247 245 248 246 IF(lwp) THEN ! control print -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zopt.F90
r2715 r2823 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 8 !! 3.2 ! 2009-04 (C. Ethe, G. Madec) optimisation 9 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Improve light availability of nano & diat 9 10 !!---------------------------------------------------------------------- 10 11 #if defined key_pisces … … 17 18 USE oce_trc ! tracer-ocean share variables 18 19 USE sms_pisces ! Source Minus Sink of PISCES 19 USE iom 20 USE iom ! I/O manager 20 21 21 22 IMPLICIT NONE … … 53 54 !!--------------------------------------------------------------------- 54 55 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 55 USE wrk_nemo, ONLY: zdepmoy => wrk_2d_1 , zetmp => wrk_2d_2 56 USE wrk_nemo, ONLY: zekg => wrk_3d_2 , zekr => wrk_3d_3 , zekb => wrk_3d_4 57 USE wrk_nemo, ONLY: ze0 => wrk_3d_5 , ze1 => wrk_3d_6 58 USE wrk_nemo, ONLY: ze2 => wrk_3d_7 , ze3 => wrk_3d_8 56 USE wrk_nemo, ONLY: zdepmoy => wrk_2d_1 , zetmp => wrk_2d_2 57 USE wrk_nemo, ONLY: zetmp1 => wrk_2d_3 , zetmp2 => wrk_2d_4 58 USE wrk_nemo, ONLY: zekg => wrk_3d_2 , zekr => wrk_3d_3 , zekb => wrk_3d_4 59 USE wrk_nemo, ONLY: ze0 => wrk_3d_5 , ze1 => wrk_3d_6 60 USE wrk_nemo, ONLY: ze2 => wrk_3d_7 , ze3 => wrk_3d_8 59 61 ! 60 62 INTEGER, INTENT(in) :: kt, jnt ! ocean time step … … 63 65 INTEGER :: irgb 64 66 REAL(wp) :: zchl, zxsi0r 65 REAL(wp) :: zc0 , zc1 , zc2, zc3 67 REAL(wp) :: zc0 , zc1 , zc2, zc3, z1_dep 66 68 !!--------------------------------------------------------------------- 67 69 68 IF( wrk_in_use(2, 1,2 ) .OR. wrk_in_use(3, 2,3,4,5,6,7,8) ) THEN70 IF( wrk_in_use(2, 1,2,3,4) .OR. wrk_in_use(3, 2,3,4,5,6,7,8) ) THEN 69 71 CALL ctl_stop('p4z_opt: requested workspace arrays unavailable') ; RETURN 70 72 ENDIF … … 83 85 DO ji = 1, jpi 84 86 zchl = ( trn(ji,jj,jk,jpnch) + trn(ji,jj,jk,jpdch) + rtrn ) * 1.e6 85 zchl = MIN( 10. , MAX( 0.0 3, zchl ) )87 zchl = MIN( 10. , MAX( 0.05, zchl ) ) 86 88 irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 87 89 ! … … 92 94 END DO 93 95 END DO 94 95 !!gm Potential BUG must discuss with Olivier about this implementation....96 !!gm the questions are : - PAR at T-point or mean PAR over T-level....97 !!gm - shallow water: no penetration of light through the bottom....98 96 99 97 … … 145 143 etot3(:,:,1) = qsr(:,:) * tmask(:,:,1) 146 144 ! 147 DO jk = 2, nksrp +1145 DO jk = 2, nksrp + 1 148 146 !CDIR NOVERRCHK 149 147 DO jj = 1, jpj … … 188 186 zdepmoy(:,:) = 0.e0 ! ------------------------------- 189 187 zetmp (:,:) = 0.e0 190 emoy (:,:,:) = 0.e0 188 zetmp1 (:,:) = 0.e0 189 zetmp2 (:,:) = 0.e0 191 190 192 191 DO jk = 1, nksrp … … 196 195 DO ji = 1, jpi 197 196 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 198 zetmp (ji,jj) = zetmp (ji,jj) + etot(ji,jj,jk) * fse3t(ji,jj,jk) 197 zetmp (ji,jj) = zetmp (ji,jj) + etot (ji,jj,jk) * fse3t(ji,jj,jk) 198 zetmp1 (ji,jj) = zetmp1 (ji,jj) + enano(ji,jj,jk) * fse3t(ji,jj,jk) 199 zetmp2 (ji,jj) = zetmp2 (ji,jj) + ediat(ji,jj,jk) * fse3t(ji,jj,jk) 199 200 zdepmoy(ji,jj) = zdepmoy(ji,jj) + fse3t(ji,jj,jk) 200 201 ENDIF … … 210 211 !CDIR NOVERRCHK 211 212 DO ji = 1, jpi 212 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) emoy(ji,jj,jk) = zetmp(ji,jj) / ( zdepmoy(ji,jj) + rtrn ) 213 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 214 z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 215 emoy (ji,jj,jk) = zetmp (ji,jj) * z1_dep 216 enano(ji,jj,jk) = zetmp1(ji,jj) * z1_dep 217 ediat(ji,jj,jk) = zetmp2(ji,jj) * z1_dep 218 ENDIF 213 219 END DO 214 220 END DO … … 218 224 # if ! defined key_iomput 219 225 ! save for outputs 220 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1) 226 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1) 221 227 trc3d(:,:,:,jp_pcs0_3d + 3) = etot(:,:,:) * tmask(:,:,:) 222 228 # else 223 229 ! write diagnostics 224 IF( jnt == nrdttrc ) then 230 IF( jnt == nrdttrc ) then 225 231 CALL iom_put( "Heup", heup(:,: ) * tmask(:,:,1) ) ! euphotic layer deptht 226 232 CALL iom_put( "PAR" , etot(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation … … 229 235 #endif 230 236 ! 231 IF( wrk_not_released(2, 1,2) .OR. &232 237 IF( wrk_not_released(2, 1,2,3,4) .OR. & 238 wrk_not_released(3, 2,3,4,5,6,7,8) ) CALL ctl_stop('p4z_opt: failed to release workspace arrays') 233 239 ! 234 240 END SUBROUTINE p4z_opt -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90
r2730 r2823 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.4 ! 2011-05 (O. Aumont, C. Ethe) New parameterization of light limitation 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_pisces … … 11 12 !! 'key_pisces' PISCES bio-model 12 13 !!---------------------------------------------------------------------- 13 !! p4z_prod : 14 !!---------------------------------------------------------------------- 15 USE trc 16 USE oce_trc ! 17 USE sms_pisces ! 18 USE prtctl_trc 19 USE p4zopt 20 USE p4zint 21 USE p4zlim 22 USE iom 14 !!---------------------------------------------------------------------- 15 !! p4z_prod : Compute the growth Rate of the two phytoplanktons groups 16 !! p4z_prod_init : Initialization of the parameters for growth 17 !! p4z_prod_alloc : Allocate variables for growth 18 !!---------------------------------------------------------------------- 19 USE oce_trc ! shared variables between ocean and passive tracers 20 USE trc ! passive tracers common variables 21 USE sms_pisces ! PISCES Source Minus Sink variables 22 USE p4zopt ! optical model 23 USE p4zlim ! Co-limitations of differents nutrients 24 USE prtctl_trc ! print control for debugging 25 USE iom ! I/O manager 23 26 24 27 IMPLICIT NONE … … 29 32 PUBLIC p4z_prod_alloc 30 33 31 REAL(wp), PUBLIC :: & 32 pislope = 3.0_wp , & !: 33 pislope2 = 3.0_wp , & !: 34 excret = 10.e-5_wp , & !: 35 excret2 = 0.05_wp , & !: 36 chlcnm = 0.033_wp , & !: 37 chlcdm = 0.05_wp , & !: 38 fecnm = 10.E-6_wp , & !: 39 fecdm = 15.E-6_wp , & !: 40 grosip = 0.151_wp 41 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: 34 !! * Shared module variables 35 REAL(wp), PUBLIC :: pislope = 3.0_wp !: 36 REAL(wp), PUBLIC :: pislope2 = 3.0_wp !: 37 REAL(wp), PUBLIC :: excret = 10.e-5_wp !: 38 REAL(wp), PUBLIC :: excret2 = 0.05_wp !: 39 REAL(wp), PUBLIC :: bresp = 0.00333_wp !: 40 REAL(wp), PUBLIC :: chlcnm = 0.033_wp !: 41 REAL(wp), PUBLIC :: chlcdm = 0.05_wp !: 42 REAL(wp), PUBLIC :: chlcmin = 0.00333_wp !: 43 REAL(wp), PUBLIC :: fecnm = 10.E-6_wp !: 44 REAL(wp), PUBLIC :: fecdm = 15.E-6_wp !: 45 REAL(wp), PUBLIC :: grosip = 0.151_wp !: 46 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: optimal prduction = f(temperature) 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotan !: proxy of N quota in Nanophyto 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotad !: proxy of N quota in diatomee 43 50 44 REAL(wp) :: & 45 rday1 , & !: 0.6 / rday 46 texcret , & !: 1 - excret 47 texcret2 , & !: 1 - excret2 48 tpp !: Total primary production 51 REAL(wp) :: r1_rday !: 1 / rday 52 REAL(wp) :: r1_bresp !: 1 / bresp 53 REAL(wp) :: texcret !: 1 - excret 54 REAL(wp) :: texcret2 !: 1 - excret2 55 REAL(wp) :: tpp !: Total primary production 56 49 57 50 58 !!* Substitution … … 67 75 !!--------------------------------------------------------------------- 68 76 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 69 USE wrk_nemo, ONLY: zmixnano => wrk_2d_1 , zmixdiat => wrk_2d_2 , zstrn => wrk_2d_3 70 USE wrk_nemo, ONLY: zpislopead => wrk_3d_2 , zpislopead2 => wrk_3d_3 71 USE wrk_nemo, ONLY: zprdia => wrk_3d_4 , zprbio => wrk_3d_5 , zysopt => wrk_3d_6 72 USE wrk_nemo, ONLY: zprorca => wrk_3d_7 , zprorcad => wrk_3d_8 73 USE wrk_nemo, ONLY: zprofed => wrk_3d_9 , zprofen => wrk_3d_10 74 USE wrk_nemo, ONLY: zprochln => wrk_3d_11 , zprochld => wrk_3d_12 75 USE wrk_nemo, ONLY: zpronew => wrk_3d_13 , zpronewd => wrk_3d_14 77 USE wrk_nemo, ONLY: zmixnano => wrk_2d_1 , zmixdiat => wrk_2d_2, zstrn => wrk_2d_3 78 USE wrk_nemo, ONLY: zpislopead => wrk_3d_2 , zpislopead2 => wrk_3d_3 79 USE wrk_nemo, ONLY: zprdia => wrk_3d_4 , zprbio => wrk_3d_5 80 USE wrk_nemo, ONLY: zprdch => wrk_3d_6 , zprnch => wrk_3d_7 81 USE wrk_nemo, ONLY: zprorca => wrk_3d_8 , zprorcad => wrk_3d_9 82 USE wrk_nemo, ONLY: zprofed => wrk_3d_10, zprofen => wrk_3d_11 83 USE wrk_nemo, ONLY: zprochln => wrk_3d_12, zprochld => wrk_3d_13 84 USE wrk_nemo, ONLY: zpronew => wrk_3d_14, zpronewd => wrk_3d_15 76 85 ! 77 86 INTEGER, INTENT(in) :: kt, jnt 78 87 ! 79 88 INTEGER :: ji, jj, jk 80 REAL(wp) :: zsilfac, zfact 81 REAL(wp) :: z prdiachl, zprbiochl, zsilim, ztn, zadap, zadap282 REAL(wp) :: zlim, zsilfac2, zsiborn, zprod, zetot2, z max, zproreg, zproreg283 REAL(wp) :: zmxltst, zmxlday , zlim189 REAL(wp) :: zsilfac, zfact, znanotot, zdiattot, zconctemp, zconctemp2 90 REAL(wp) :: zratio, zmax, zsilim, ztn, zadap 91 REAL(wp) :: zlim, zsilfac2, zsiborn, zprod, zetot2, zproreg, zproreg2 92 REAL(wp) :: zmxltst, zmxlday 84 93 REAL(wp) :: zpislopen , zpislope2n 85 REAL(wp) :: zrum, zcodel, zargu, zval , zvol86 #if defined key_diatrc 94 REAL(wp) :: zrum, zcodel, zargu, zval 95 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zysopt 87 96 REAL(wp) :: zrfact2 88 #endif89 97 CHARACTER (len=25) :: charout 90 98 !!--------------------------------------------------------------------- 91 99 92 100 IF( wrk_in_use(2, 1,2,3) .OR. & 93 wrk_in_use(3, 2,3,4,5,6,7,8,9,10,11,12,13,14 ) ) THEN101 wrk_in_use(3, 2,3,4,5,6,7,8,9,10,11,12,13,14,15) ) THEN 94 102 CALL ctl_stop('p4z_prod: requested workspace arrays unavailable') ; RETURN 95 103 ENDIF 104 105 ALLOCATE( zysopt(jpi,jpj,jpk) ) 96 106 97 107 zprorca (:,:,:) = 0._wp … … 105 115 zprdia (:,:,:) = 0._wp 106 116 zprbio (:,:,:) = 0._wp 117 zprdch (:,:,:) = 0._wp 118 zprnch (:,:,:) = 0._wp 107 119 zysopt (:,:,:) = 0._wp 108 120 109 121 ! Computation of the optimal production 110 # if defined key_degrad 111 prmax(:,:,:) = rday1 * tgfunc(:,:,:) * facvol(:,:,:) 112 # else 113 prmax(:,:,:) = rday1 * tgfunc(:,:,:) 114 # endif 122 prmax(:,:,:) = 0.6_wp * r1_rday * tgfunc(:,:,:) 123 IF( lk_degrad ) THEN 124 prmax(:,:,:) = prmax(:,:,:) * facvol(:,:,:) 125 ENDIF 115 126 116 127 ! compute the day length depending on latitude and the day … … 119 130 120 131 ! day length in hours 121 zstrn(:,:) = 0. _wp132 zstrn(:,:) = 0. 122 133 DO jj = 1, jpj 123 134 DO ji = 1, jpi 124 135 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 125 136 zargu = MAX( -1., MIN( 1., zargu ) ) 126 zval = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 127 IF( zval < 1.e0 ) zval = 24. 128 zstrn(ji,jj) = 24. / zval 129 END DO 130 END DO 131 137 zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 138 END DO 139 END DO 140 141 ! Impact of the day duration on phytoplankton growth 142 DO jk = 1, jpkm1 143 DO jj = 1 ,jpj 144 DO ji = 1, jpi 145 zval = MAX( 1., zstrn(ji,jj) ) 146 zval = 1.5 * zval / ( 12. + zval ) 147 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 148 zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 149 END DO 150 END DO 151 END DO 152 153 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 154 zstrn(:,:) = 24. / zstrn(:,:) 132 155 133 156 !CDIR NOVERRCHK … … 141 164 IF( etot(ji,jj,jk) > 1.E-3 ) THEN 142 165 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 143 zadap = 0.+ 1.* ztn / ( 2.+ ztn ) 144 zadap2 = 0.e0 145 146 zfact = EXP( -0.21 * emoy(ji,jj,jk) ) 147 148 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * zfact ) 149 zpislopead2(ji,jj,jk) = pislope2 * ( 1.+ zadap2 * zfact ) 150 151 zpislopen = zpislopead(ji,jj,jk) * trn(ji,jj,jk,jpnch) & 152 & / ( trn(ji,jj,jk,jpphy) * 12. + rtrn ) & 153 & / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 154 155 zpislope2n = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch) & 156 & / ( trn(ji,jj,jk,jpdia) * 12. + rtrn ) & 157 & / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 158 159 ! Computation of production function 160 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * & 161 & ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 162 zprdia(ji,jj,jk) = prmax(ji,jj,jk) * & 163 & ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 166 zadap = ztn / ( 2.+ ztn ) 167 168 zconctemp = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - 5e-7 ) 169 zconctemp2 = trn(ji,jj,jk,jpdia) - zconctemp 170 171 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 172 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 173 zfact = EXP( -0.21 * znanotot ) 174 175 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * zfact ) & 176 & * trn(ji,jj,jk,jpnch) /( trn(ji,jj,jk,jpphy) * 12. + rtrn) 177 178 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) & 179 & / ( trn(ji,jj,jk,jpdia) + rtrn ) & 180 & * trn(ji,jj,jk,jpdch) /( trn(ji,jj,jk,jpdia) * 12. + rtrn) 181 182 ! Computation of production function for Chlorophyll 183 !-------------------------------------------------- 184 zpislopen = zpislopead (ji,jj,jk) / ( prmax(ji,jj,jk) * rday + rtrn ) 185 zpislope2n = zpislopead2(ji,jj,jk) / ( prmax(ji,jj,jk) * rday + rtrn ) 186 zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * znanotot ) ) 187 zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 188 189 ! Computation of production function for Carbon 190 ! --------------------------------------------- 191 zpislopen = zpislopead (ji,jj,jk) / ( ( r1_rday + r1_bresp / chlcnm ) * rday + rtrn) 192 zpislope2n = zpislopead2(ji,jj,jk) / ( ( r1_rday + r1_bresp / chlcdm ) * rday + rtrn) 193 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * znanotot ) ) 194 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 164 195 ENDIF 196 END DO 197 END DO 198 END DO 199 200 ! Computation of a proxy of the N/C ratio 201 ! --------------------------------------- 202 !CDIR NOVERRCHK 203 DO jk = 1, jpkm1 204 !CDIR NOVERRCHK 205 DO jj = 1, jpj 206 !CDIR NOVERRCHK 207 DO ji = 1, jpi 208 zval = ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) * prmax(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 209 quotan(ji,jj,jk) = MIN( 1., 0.5 + 0.5 * zval ) 210 zval = ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) * prmax(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 211 quotad(ji,jj,jk) = MIN( 1., 0.5 + 0.5 * zval ) 165 212 END DO 166 213 END DO … … 178 225 ! Si/C is arbitrariliy increased for very high Si concentrations 179 226 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 180 181 zlim1 = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) 182 zlim = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 183 184 zsilim = MIN( zprdia(ji,jj,jk) / ( rtrn + prmax(ji,jj,jk) ), & 185 & trn(ji,jj,jk,jpfer) / ( concdfe(ji,jj,jk) + trn(ji,jj,jk,jpfer) ), & 186 & trn(ji,jj,jk,jppo4) / ( concdnh4 + trn(ji,jj,jk,jppo4) ), & 187 & zlim ) 188 zsilfac = 5.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim1 - 0.5 ) ) ) + 1.e0 227 zlim = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) 228 zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 229 zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 189 230 zsiborn = MAX( 0.e0, ( trn(ji,jj,jk,jpsil) - 15.e-6 ) ) 190 zsilfac2 = 1.+ 3.* zsiborn / ( zsiborn + xksi2 )191 zsilfac = MIN( 6.4,zsilfac * zsilfac2)192 zysopt(ji,jj,jk) = grosip * zlim 1* zsilfac231 zsilfac2 = 1.+ 2.* zsiborn / ( zsiborn + xksi2 ) 232 zsilfac = MIN( 5.4, zsilfac * zsilfac2) 233 zysopt(ji,jj,jk) = grosip * zlim * zsilfac 193 234 ENDIF 194 235 END DO … … 201 242 DO ji = 1, jpi 202 243 zmxltst = MAX( 0.e0, hmld(ji,jj) - heup(ji,jj) ) 203 zmxlday = zmxltst **2 /rday204 zmixnano(ji,jj) = 1. - zmxlday / ( 1.+ zmxlday )205 zmixdiat(ji,jj) = 1. - zmxlday / ( 3.+ zmxlday )244 zmxlday = zmxltst * zmxltst * r1_rday 245 zmixnano(ji,jj) = 1. - zmxlday / ( 3. + zmxlday ) 246 zmixdiat(ji,jj) = 1. - zmxlday / ( 4. + zmxlday ) 206 247 END DO 207 248 END DO … … 214 255 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * zmixnano(ji,jj) 215 256 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * zmixdiat(ji,jj) 257 zprnch(ji,jj,jk) = zprnch(ji,jj,jk) * zmixnano(ji,jj) 258 zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj) 216 259 ENDIF 217 260 END DO 218 261 END DO 219 262 END DO 220 221 263 222 264 !CDIR NOVERRCHK … … 230 272 ! Computation of the various production terms for nanophyto. 231 273 zetot2 = enano(ji,jj,jk) * zstrn(ji,jj) 232 zmax = MAX( 0.1, xlimphy(ji,jj,jk) )233 zpislopen = zpislopead(ji,jj,jk) &234 & * trn(ji,jj,jk,jpnch) / ( rtrn + trn(ji,jj,jk,jpphy) * 12.) &235 & / ( prmax(ji,jj,jk) * rday * zmax + rtrn )236 237 zprbiochl = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * zetot2 ) )238 239 274 zprorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trn(ji,jj,jk,jpphy) * rfact2 240 241 zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) & 242 & / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 243 zprod = rday * zprorca(ji,jj,jk) * zprbiochl * trn(ji,jj,jk,jpphy) *zmax 244 245 zprofen(ji,jj,jk) = (fecnm)**2 * zprod / chlcnm & 246 & / ( zpislopead(ji,jj,jk) * zetot2 * trn(ji,jj,jk,jpnfe) + rtrn ) 247 248 zprochln(ji,jj,jk) = chlcnm * 144. * zprod & 249 & / ( zpislopead(ji,jj,jk) * zetot2 * trn(ji,jj,jk,jpnch) + rtrn ) 275 zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 276 ! 277 zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 278 zprochln(ji,jj,jk) = chlcmin * 12. * zprorca(ji,jj,jk) 279 zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + chlcnm * 12. * zprod / ( zpislopead(ji,jj,jk) * zetot2 +rtrn) 280 ! 281 zratio = trn(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn ) 282 zratio = zratio / fecnm 283 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 284 zprofen(ji,jj,jk) = fecnm * prmax(ji,jj,jk) & 285 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 286 & * trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concnfe(ji,jj,jk) ) & 287 & * zmax * trn(ji,jj,jk,jpphy) * rfact2 250 288 ENDIF 251 289 END DO … … 262 300 ! Computation of the various production terms for diatoms 263 301 zetot2 = ediat(ji,jj,jk) * zstrn(ji,jj) 264 zmax = MAX( 0.1, xlimdia(ji,jj,jk) )265 zpislope2n = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch) &266 & / ( rtrn + trn(ji,jj,jk,jpdia) * 12.) &267 & / ( prmax(ji,jj,jk) * rday * zmax + rtrn )268 269 zprdiachl = prmax(ji,jj,jk) * ( 1.- EXP( -zetot2 * zpislope2n ) )270 271 302 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trn(ji,jj,jk,jpdia) * rfact2 272 273 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) & 274 & / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 275 276 zprod = rday * zprorcad(ji,jj,jk) * zprdiachl * trn(ji,jj,jk,jpdia) * zmax 277 278 zprofed(ji,jj,jk) = (fecdm)**2 * zprod / chlcdm & 279 & / ( zpislopead2(ji,jj,jk) * zetot2 * trn(ji,jj,jk,jpdfe) + rtrn ) 280 281 zprochld(ji,jj,jk) = chlcdm * 144. * zprod & 282 & / ( zpislopead2(ji,jj,jk) * zetot2 * trn(ji,jj,jk,jpdch) + rtrn ) 283 303 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 304 ! 305 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 306 zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 307 zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + chlcdm * 12. * zprod / ( zpislopead2(ji,jj,jk) * zetot2 +rtrn ) 308 ! 309 zratio = trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn ) 310 zratio = zratio / fecdm 311 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 312 zprofed(ji,jj,jk) = fecdm * prmax(ji,jj,jk) & 313 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 314 & * trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concdfe(ji,jj,jk) ) & 315 & * zmax * trn(ji,jj,jk,jpdia) * rfact2 284 316 ENDIF 285 317 END DO 286 318 END DO 287 319 END DO 288 !289 320 290 321 ! Update the arrays TRA which contain the biological sources and sinks … … 304 335 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcret2 305 336 tra(ji,jj,jk,jpbsi) = tra(ji,jj,jk,jpbsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcret2 306 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + & 307 & excret2 * zprorcad(ji,jj,jk) + excret * zprorca(ji,jj,jk) 337 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + excret2 * zprorcad(ji,jj,jk) + excret * zprorca(ji,jj,jk) 308 338 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproreg + zproreg2) & 309 & + ( o2ut + o2nit ) * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) 310 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) & 311 & - texcret * zprofen(ji,jj,jk) - texcret2 * zprofed(ji,jj,jk) 312 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) & 313 & - texcret2 * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 339 & + ( o2ut + o2nit ) * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) 340 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - texcret * zprofen(ji,jj,jk) - texcret2 * zprofed(ji,jj,jk) 341 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcret2 * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 314 342 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorca(ji,jj,jk) - zprorcad(ji,jj,jk) 315 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) &316 & + rno3 * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk))343 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 344 & - rno3 * ( zproreg + zproreg2 ) 317 345 END DO 318 346 END DO … … 320 348 321 349 ! Total primary production per year 322 323 #if defined key_degrad 324 tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) * facvol(:,:,:) ) 325 #else 326 tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 327 #endif 350 IF( lk_degrad ) THEN 351 tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) * facvol(:,:,:) ) 352 ELSE 353 tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 354 ENDIF 328 355 329 356 IF( kt == nitend .AND. jnt == nrdttrc .AND. lwp ) THEN … … 333 360 ENDIF 334 361 335 #if defined key_diatrc && ! defined key_iomput 336 ! Supplementary diagnostics 362 #if defined key_diatrc 337 363 zrfact2 = 1.e3 * rfact2r 338 trc3d(:,:,:,jp_pcs0_3d + 4) = zprorca (:,:,:) * zrfact2 * tmask(:,:,:) 339 trc3d(:,:,:,jp_pcs0_3d + 5) = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) 340 trc3d(:,:,:,jp_pcs0_3d + 6) = zpronew (:,:,:) * zrfact2 * tmask(:,:,:) 341 trc3d(:,:,:,jp_pcs0_3d + 7) = zpronewd(:,:,:) * zrfact2 * tmask(:,:,:) 342 trc3d(:,:,:,jp_pcs0_3d + 8) = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) * zysopt(:,:,:) 343 trc3d(:,:,:,jp_pcs0_3d + 9) = zprofed (:,:,:) * zrfact2 * tmask(:,:,:) 344 # if ! defined key_kriest 345 trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zrfact2 * tmask(:,:,:) 346 # endif 347 #endif 348 349 #if defined key_diatrc && defined key_iomput 350 zrfact2 = 1.e3 * rfact2r 351 IF ( jnt == nrdttrc ) then 364 #if defined key_iomput 365 IF( jnt == nrdttrc ) THEN 352 366 CALL iom_put( "PPPHY" , zprorca (:,:,:) * zrfact2 * tmask(:,:,:) ) ! primary production by nanophyto 353 367 CALL iom_put( "PPPHY2", zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) ) ! primary production by diatom … … 357 371 CALL iom_put( "PFeD" , zprofed (:,:,:) * zrfact2 * tmask(:,:,:) ) ! biogenic iron production by diatom 358 372 CALL iom_put( "PFeN" , zprofen (:,:,:) * zrfact2 * tmask(:,:,:) ) ! biogenic iron production by nanophyto 359 ENDIF 373 #else 374 trc3d(:,:,:,jp_pcs0_3d + 4) = zprorca (:,:,:) * zrfact2 * tmask(:,:,:) 375 trc3d(:,:,:,jp_pcs0_3d + 5) = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) 376 trc3d(:,:,:,jp_pcs0_3d + 6) = zpronew (:,:,:) * zrfact2 * tmask(:,:,:) 377 trc3d(:,:,:,jp_pcs0_3d + 7) = zpronewd(:,:,:) * zrfact2 * tmask(:,:,:) 378 trc3d(:,:,:,jp_pcs0_3d + 8) = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) * zysopt(:,:,:) 379 trc3d(:,:,:,jp_pcs0_3d + 9) = zprofed (:,:,:) * zrfact2 * tmask(:,:,:) 380 # if ! defined key_kriest 381 trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zrfact2 * tmask(:,:,:) 382 # endif 383 #endif 360 384 #endif 361 385 … … 367 391 368 392 IF( wrk_not_released(2, 1,2,3) .OR. & 369 wrk_not_released(3, 2,3,4,5,6,7,8,9,10,11,12,13,14 ) ) &393 wrk_not_released(3, 2,3,4,5,6,7,8,9,10,11,12,13,14,15) ) & 370 394 CALL ctl_stop('p4z_prod: failed to release workspace arrays') 395 ! 396 DEALLOCATE( zysopt ) 371 397 ! 372 398 END SUBROUTINE p4z_prod … … 384 410 !! ** input : Namelist nampisprod 385 411 !!---------------------------------------------------------------------- 386 NAMELIST/nampisprod/ pislope, pislope2, excret, excret2, chlcnm, chlcdm, & 387 & fecnm, fecdm, grosip 412 ! 413 NAMELIST/nampisprod/ pislope, pislope2, bresp, excret, excret2, & 414 & chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip 388 415 !!---------------------------------------------------------------------- 389 416 390 REWIND( numnat ) ! read numnat391 READ ( numnat , nampisprod )417 REWIND( numnatp ) ! read numnat 418 READ ( numnatp, nampisprod ) 392 419 393 420 IF(lwp) THEN ! control print … … 399 426 WRITE(numout,*) ' excretion ratio of nanophytoplankton excret =', excret 400 427 WRITE(numout,*) ' excretion ratio of diatoms excret2 =', excret2 428 WRITE(numout,*) ' basal respiration in phytoplankton bresp =', bresp 401 429 WRITE(numout,*) ' P-I slope for diatoms pislope2 =', pislope2 402 430 WRITE(numout,*) ' Minimum Chl/C in nanophytoplankton chlcnm =', chlcnm 403 431 WRITE(numout,*) ' Minimum Chl/C in diatoms chlcdm =', chlcdm 432 WRITE(numout,*) ' Maximum Chl/C in phytoplankton chlcmin =', chlcmin 404 433 WRITE(numout,*) ' Maximum Fe/C in nanophytoplankton fecnm =', fecnm 405 434 WRITE(numout,*) ' Minimum Fe/C in diatoms fecdm =', fecdm 406 435 ENDIF 407 436 ! 408 rday1 = 0.6 / rday 409 texcret = 1.0 - excret 410 texcret2 = 1.0 - excret2 411 tpp = 0. 437 r1_rday = 1._wp / rday 438 r1_bresp = bresp * r1_rday 439 texcret = 1._wp - excret 440 texcret2 = 1._wp - excret2 441 tpp = 0._wp 412 442 ! 413 443 END SUBROUTINE p4z_prod_init … … 418 448 !! *** ROUTINE p4z_prod_alloc *** 419 449 !!---------------------------------------------------------------------- 420 ALLOCATE( prmax(jpi,jpj,jpk), STAT=p4z_prod_alloc )450 ALLOCATE( prmax(jpi,jpj,jpk), quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc ) 421 451 ! 422 452 IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.') -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zrem.F90
r2773 r2823 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_pisces … … 12 13 !! 'key_pisces' PISCES bio-model 13 14 !!---------------------------------------------------------------------- 14 !! p4z_rem : Compute remineralization/scavenging of organic compounds 15 !!---------------------------------------------------------------------- 16 USE trc 17 USE oce_trc ! 18 USE sms_pisces ! 19 USE prtctl_trc 20 USE p4zint 21 USE p4zopt 22 USE p4zmeso 23 USE p4zprod 24 USE p4zche 15 !! p4z_rem : Compute remineralization/scavenging of organic compounds 16 !! p4z_rem_init : Initialisation of parameters for remineralisation 17 !! p4z_rem_alloc : Allocate remineralisation variables 18 !!---------------------------------------------------------------------- 19 USE oce_trc ! shared variables between ocean and passive tracers 20 USE trc ! passive tracers common variables 21 USE sms_pisces ! PISCES Source Minus Sink variables 22 USE p4zopt ! optical model 23 USE p4zche ! chemical model 24 USE p4zprod ! Growth rate of the 2 phyto groups 25 USE p4zmeso ! Sources and sinks of mesozooplankton 26 USE p4zint ! interpolation and computation of various fields 27 USE prtctl_trc ! print control for debugging 25 28 26 29 IMPLICIT NONE … … 31 34 PUBLIC p4z_rem_alloc 32 35 33 REAL(wp), PUBLIC :: & 34 xremik = 0.3_wp , & !: 35 xremip = 0.025_wp , & !: 36 nitrif = 0.05_wp , & !: 37 xsirem = 0.015_wp , & !: 38 xlam1 = 0.005_wp , & !: 39 oxymin = 1.e-6_wp !: 40 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array 36 !! * Shared module variables 37 REAL(wp), PUBLIC :: xremik = 0.3_wp !: remineralisation rate of POC 38 REAL(wp), PUBLIC :: xremip = 0.025_wp !: remineralisation rate of DOC 39 REAL(wp), PUBLIC :: nitrif = 0.05_wp !: NH4 nitrification rate 40 REAL(wp), PUBLIC :: xsirem = 0.003_wp !: remineralisation rate of POC 41 REAL(wp), PUBLIC :: xsiremlab = 0.025_wp !: fast remineralisation rate of POC 42 REAL(wp), PUBLIC :: xsilab = 0.31_wp !: fraction of labile biogenic silica 43 REAL(wp), PUBLIC :: xlam1 = 0.005_wp !: scavenging rate of Iron 44 REAL(wp), PUBLIC :: oxymin = 1.e-6_wp !: halk saturation constant for anoxia 45 REAL(wp), PUBLIC :: ligand = 0.6E-9_wp !: ligand concentration in the ocean 46 47 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitnh4 !: - - - - - 42 50 43 51 … … 61 69 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 62 70 USE wrk_nemo, ONLY: ztempbac => wrk_2d_1 63 USE wrk_nemo, ONLY: zdepbac => wrk_3d_2 , zolimi => wrk_3d_371 USE wrk_nemo, ONLY: zdepbac => wrk_3d_2, zolimi => wrk_3d_3, zolimi2 => wrk_3d_4 64 72 ! 65 73 INTEGER, INTENT(in) :: kt ! ocean time step 66 74 ! 67 75 INTEGER :: ji, jj, jk 68 REAL(wp) :: zremip, zremik , zlam1b 76 REAL(wp) :: zremip, zremik , zlam1b, zdepbac2 69 77 REAL(wp) :: zkeq , zfeequi, zsiremin, zfesatur 70 REAL(wp) :: zsatur, zsatur2, znusil 78 REAL(wp) :: zsatur, zsatur2, znusil, zdep, zfactdep 71 79 REAL(wp) :: zbactfer, zorem, zorem2, zofer 72 REAL(wp) :: zosil, zdenom1, zscave, zaggdfe 80 REAL(wp) :: zosil, zdenom1, zscave, zaggdfe, zcoag 73 81 #if ! defined key_kriest 74 82 REAL(wp) :: zofer2, zdenom, zdenom2 … … 78 86 !!--------------------------------------------------------------------- 79 87 80 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 2,3 ) ) THEN88 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 2,3,4) ) THEN 81 89 CALL ctl_stop('p4z_rem: requested workspace arrays unavailable') ; RETURN 82 90 ENDIF … … 85 93 zdepbac (:,:,:) = 0._wp 86 94 zolimi (:,:,:) = 0._wp 95 zolimi2 (:,:,:) = 0._wp 87 96 ztempbac(:,:) = 0._wp 88 97 … … 93 102 DO jj = 1, jpj 94 103 DO ji = 1, jpi 95 IF( fsdept(ji,jj,jk) < 120. ) THEN 104 zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 105 IF( fsdept(ji,jj,jk) < zdep ) THEN 96 106 zdepbac(ji,jj,jk) = MIN( 0.7 * ( trn(ji,jj,jk,jpzoo) + 2.* trn(ji,jj,jk,jpmes) ), 4.e-6 ) 97 107 ztempbac(ji,jj) = zdepbac(ji,jj,jk) 98 108 ELSE 99 zdepbac(ji,jj,jk) = MIN( 1., 120./ fsdept(ji,jj,jk) ) * ztempbac(ji,jj)109 zdepbac(ji,jj,jk) = MIN( 1., zdep / fsdept(ji,jj,jk) ) * ztempbac(ji,jj) 100 110 ENDIF 101 111 END DO … … 126 136 ! of the bacterial activity. 127 137 zremik = xremik * zstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk) 128 zremik = MAX( zremik, 5.5e-4 * xstep ) 129 138 zremik = MAX( zremik, 2.e-4 * xstep ) 130 139 ! Ammonification in oxic waters with oxygen consumption 131 140 ! ----------------------------------------------------- 132 zolimi(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpoxy) - rtrn ) / o2ut, & 133 & zremik * ( 1.- nitrfac(ji,jj,jk) ) * trn(ji,jj,jk,jpdoc) ) 134 141 zolimi (ji,jj,jk) = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trn(ji,jj,jk,jpdoc) 142 zolimi2(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimi(ji,jj,jk) ) 135 143 ! Ammonification in suboxic waters with denitrification 136 144 ! ------------------------------------------------------- 137 denitr(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpno3) - rtrn ) / rdenit, &145 denitr(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpno3) - rtrn ) / rdenit, & 138 146 & zremik * nitrfac(ji,jj,jk) * trn(ji,jj,jk,jpdoc) ) 139 END DO 140 END DO 141 END DO 142 143 DO jk = 1, jpkm1 144 DO jj = 1, jpj 145 DO ji = 1, jpi 147 ! 146 148 zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 149 zolimi2(ji,jj,jk) = MAX( 0.e0, zolimi2(ji,jj,jk) ) 147 150 denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 148 END DO 149 END DO 150 END DO 151 ! 152 END DO 153 END DO 154 END DO 155 151 156 152 157 DO jk = 1, jpkm1 … … 161 166 ! below 2 umol/L. Inhibited at strong light 162 167 ! ---------------------------------------------------------- 163 zonitr = 164 168 zonitr =nitrif * zstep * trn(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) ) 169 denitnh4(ji,jj,jk) = nitrif * zstep * trn(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 165 170 ! Update of the tracers trends 166 171 ! ---------------------------- 167 168 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr 169 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr 172 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr - denitnh4(ji,jj,jk) 173 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * denitnh4(ji,jj,jk) 170 174 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 171 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - rno3 * zonitr 172 175 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * denitnh4(ji,jj,jk) 173 176 END DO 174 177 END DO … … 189 192 ! studies (especially at Papa) have shown this uptake to be significant 190 193 ! ---------------------------------------------------------- 191 z bactfer = 15.e-6 * rfact2 * 4.* 0.4 * prmax(ji,jj,jk) &192 & * ( xlimphy(ji,jj,jk) * zdepbac(ji,jj,jk))&193 & * ( xlimphy(ji,jj,jk) * zdepbac(ji,jj,jk))&194 & / ( xkgraz2 + zdepbac(ji,jj,jk) )&195 & 194 zdepbac2 = zdepbac(ji,jj,jk) * zdepbac(ji,jj,jk) 195 zbactfer = 20.e-6 * rfact2 * prmax(ji,jj,jk) & 196 & * trn(ji,jj,jk,jpfer) / ( 5E-10 + trn(ji,jj,jk,jpfer) ) & 197 & * zdepbac2 / ( xkgraz2 + zdepbac(ji,jj,jk) ) & 198 & * ( 0.5 + SIGN( 0.5, trn(ji,jj,jk,jpfer) -2.e-11 ) ) 196 199 197 200 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer … … 221 224 ! POC disaggregation by turbulence and bacterial activity. 222 225 ! ------------------------------------------------------------- 223 zremip = xremip * zstep * tgfunc(ji,jj,jk) * ( 1.- 0. 5* nitrfac(ji,jj,jk) )226 zremip = xremip * zstep * tgfunc(ji,jj,jk) * ( 1.- 0.7 * nitrfac(ji,jj,jk) ) 224 227 225 228 ! POC disaggregation rate is reduced in anoxic zone as shown by … … 273 276 ! Remineralization rate of BSi depedant on T and saturation 274 277 ! --------------------------------------------------------- 275 zsatur = ( sio3eq(ji,jj,jk) - trn(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 276 zsatur = MAX( rtrn, zsatur ) 277 zsatur2 = zsatur * ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**4 278 znusil = 0.225 * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2**9 279 zsiremin = xsirem * zstep * znusil 280 zosil = zsiremin * trn(ji,jj,jk,jpdsi) 281 278 zsatur = ( sio3eq(ji,jj,jk) - trn(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 279 zsatur = MAX( rtrn, zsatur ) 280 zsatur2 = zsatur * ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**4 281 znusil = 0.225 * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2**9.25 282 zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 283 zdep = MAX( 0., fsdept(ji,jj,jk) - zdep ) 284 zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * zdep / wsbio2 ) 285 zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * zstep * znusil 286 zosil = zsiremin * trn(ji,jj,jk,jpdsi) 287 ! 282 288 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zosil 283 289 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + zosil … … 293 299 ENDIF 294 300 295 zfesatur = 0.6e-9301 zfesatur = ligand 296 302 !CDIR NOVERRCHK 297 303 DO jk = 1, jpkm1 … … 312 318 & ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpdsi) + trn(ji,jj,jk,jpcal) + rtrn ) 313 319 #else 314 zdenom = 1. / ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) & 315 & + trn(ji,jj,jk,jpdsi) + trn(ji,jj,jk,jpcal) + rtrn ) 316 320 zdenom = 1. / ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) + trn(ji,jj,jk,jpdsi) + trn(ji,jj,jk,jpcal) + rtrn ) 317 321 zdenom1 = trn(ji,jj,jk,jppoc) * zdenom 318 322 zdenom2 = trn(ji,jj,jk,jpgoc) * zdenom … … 337 341 ! Increased scavenging for very high iron concentrations 338 342 ! found near the coasts due to increased lithogenic particles 339 ! and let s say itunknown processes (precipitation, ...)343 ! and let say it is unknown processes (precipitation, ...) 340 344 ! ----------------------------------------------------------- 345 zlam1b = xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - 1. ) ) 346 zcoag = zfeequi * zlam1b * zstep 341 347 zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 342 348 zlamfac = MIN( 1. , zlamfac ) 349 zdep = MIN(1., 1000. / fsdept(ji,jj,jk) ) 343 350 #if ! defined key_kriest 344 351 zlam1b = ( 80.* ( trn(ji,jj,jk,jpdoc) + 35.e-6 ) & 345 & + 698.* trn(ji,jj,jk,jppoc) + 1.05e4 * trn(ji,jj,jk,jpgoc) ) & 346 & * xdiss(ji,jj,jk) + 1E-4 * (1.-zlamfac) & 347 & + xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - 1.) ) 348 #else 349 zlam1b = ( 80.* (trn(ji,jj,jk,jpdoc) + 35E-6) & 352 & + 698.* trn(ji,jj,jk,jppoc) + 1.05e4 * trn(ji,jj,jk,jpgoc) ) & 353 & * xdiss(ji,jj,jk) + 1E-4 * ( 1. - zlamfac ) * zdep 354 #else 355 zlam1b = ( 80.* (trn(ji,jj,jk,jpdoc) + 35E-6) & 350 356 & + 698.* trn(ji,jj,jk,jppoc) ) & 351 & * xdiss(ji,jj,jk) + 1E-4 * (1.-zlamfac) & 352 & + xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - 1.) ) 353 #endif 354 357 & * xdiss(ji,jj,jk) + 1E-4 * ( 1. - zlamfac ) * zdep 358 #endif 355 359 zaggdfe = zlam1b * zstep * 0.5 * ( trn(ji,jj,jk,jpfer) - zfeequi ) 356 357 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfe 358 360 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfe - zcoag 359 361 #if defined key_kriest 360 362 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 … … 378 380 379 381 DO jk = 1, jpkm1 380 tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk)381 tra(:,:,jk,jpnh4) = tra(:,:,jk,jpnh4) + zolimi (:,:,jk) + denitr(:,:,jk)382 tra(:,:,jk,jpno3) = tra(:,:,jk,jpno3) - denitr (:,:,jk) * rdenit383 tra(:,:,jk,jpdoc) = tra(:,:,jk,jpdoc) - zolimi (:,:,jk) - denitr(:,:,jk)384 tra(:,:,jk,jpoxy) = tra(:,:,jk,jpoxy) - zolimi (:,:,jk) * o2ut385 tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi (:,:,jk) + denitr(:,:,jk)386 tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + denitr(:,:,jk) * rno3 * rdenit382 tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk) 383 tra(:,:,jk,jpnh4) = tra(:,:,jk,jpnh4) + zolimi (:,:,jk) + denitr(:,:,jk) 384 tra(:,:,jk,jpno3) = tra(:,:,jk,jpno3) - denitr (:,:,jk) * rdenit 385 tra(:,:,jk,jpdoc) = tra(:,:,jk,jpdoc) - zolimi (:,:,jk) - denitr(:,:,jk) 386 tra(:,:,jk,jpoxy) = tra(:,:,jk,jpoxy) - zolimi2(:,:,jk) * o2ut 387 tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi (:,:,jk) + denitr(:,:,jk) 388 tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + rno3 * ( zolimi(:,:,jk) + ( rdenit + 1.) * denitr(:,:,jk) ) 387 389 END DO 388 390 … … 394 396 ! 395 397 IF( wrk_not_released(2, 1) .OR. & 396 wrk_not_released(3, 2,3 ) ) CALL ctl_stop('p4z_rem: failed to release workspace arrays')398 wrk_not_released(3, 2,3,4) ) CALL ctl_stop('p4z_rem: failed to release workspace arrays') 397 399 ! 398 400 END SUBROUTINE p4z_rem … … 411 413 !! 412 414 !!---------------------------------------------------------------------- 413 NAMELIST/nampisrem/ xremik, xremip, nitrif, xsirem, x lam1, oxymin414 !!----------------------------------------------------------------------415 416 REWIND( numnat ) ! read numnat417 READ ( numnat , nampisrem )415 NAMELIST/nampisrem/ xremik, xremip, nitrif, xsirem, xsiremlab, xsilab, & 416 & xlam1, oxymin, ligand 417 418 REWIND( numnatp ) ! read numnat 419 READ ( numnatp, nampisrem ) 418 420 419 421 IF(lwp) THEN ! control print … … 424 426 WRITE(numout,*) ' remineralization rate of DOC xremik =', xremik 425 427 WRITE(numout,*) ' remineralization rate of Si xsirem =', xsirem 428 WRITE(numout,*) ' fast remineralization rate of Si xsiremlab =', xsiremlab 429 WRITE(numout,*) ' fraction of labile biogenic silica xsilab =', xsilab 426 430 WRITE(numout,*) ' scavenging rate of Iron xlam1 =', xlam1 427 431 WRITE(numout,*) ' NH4 nitrification rate nitrif =', nitrif 428 432 WRITE(numout,*) ' halk saturation constant for anoxia oxymin =', oxymin 433 WRITE(numout,*) ' ligand concentration in the ocean ligand =', ligand 429 434 ENDIF 430 435 ! 431 nitrfac(:,:,:) = 0._wp 432 denitr (:,:,:) = 0._wp 436 nitrfac (:,:,:) = 0._wp 437 denitr (:,:,:) = 0._wp 438 denitnh4(:,:,:) = 0._wp 433 439 ! 434 440 END SUBROUTINE p4z_rem_init … … 439 445 !! *** ROUTINE p4z_rem_alloc *** 440 446 !!---------------------------------------------------------------------- 441 ALLOCATE( denitr(jpi,jpj,jpk), STAT=p4z_rem_alloc )447 ALLOCATE( denitr(jpi,jpj,jpk), denitnh4(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 442 448 ! 443 449 IF( p4z_rem_alloc /= 0 ) CALL ctl_warn('p4z_rem_alloc: failed to allocate arrays') -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsed.F90
r2774 r2823 6 6 !! History : 1.0 ! 2004-03 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) USE of fldread 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_pisces … … 15 16 !! p4z_sed_init : Initialization of p4z_sed 16 17 !!---------------------------------------------------------------------- 17 USE trc 18 USE oce_trc ! 19 USE sms_pisces 20 USE prtctl_trc 21 USE p4zbio 22 USE p4zint 23 USE p4zopt 24 USE p4zsink 25 USE p4zrem 26 USE p4zlim 27 USE iom 18 USE oce_trc ! shared variables between ocean and passive tracers 19 USE trc ! passive tracers common variables 20 USE sms_pisces ! PISCES Source Minus Sink variables 21 USE p4zsink ! vertical flux of particulate matter due to sinking 22 USE p4zopt ! optical model 23 USE p4zlim ! Co-limitations of differents nutrients 24 USE p4zrem ! Remineralisation of organic matter 25 USE p4zint ! interpolation and computation of various fields 26 USE iom ! I/O manager 27 USE fldread ! time interpolation 28 USE prtctl_trc ! print control for debugging 29 28 30 29 31 … … 36 38 37 39 !! * Shared module variables 38 LOGICAL, PUBLIC :: ln_dustfer = .FALSE. !: boolean for dust input from the atmosphere 39 LOGICAL, PUBLIC :: ln_river = .FALSE. !: boolean for river input of nutrients 40 LOGICAL, PUBLIC :: ln_ndepo = .FALSE. !: boolean for atmospheric deposition of N 41 LOGICAL, PUBLIC :: ln_sedinput = .FALSE. !: boolean for Fe input from sediments 42 43 REAL(wp), PUBLIC :: sedfeinput = 1.E-9_wp !: Coastal release of Iron 44 REAL(wp), PUBLIC :: dustsolub = 0.014_wp !: Solubility of the dust 40 LOGICAL :: ln_dust = .FALSE. !: boolean for dust input from the atmosphere 41 LOGICAL :: ln_river = .FALSE. !: boolean for river input of nutrients 42 LOGICAL :: ln_ndepo = .FALSE. !: boolean for atmospheric deposition of N 43 LOGICAL :: ln_ironsed = .FALSE. !: boolean for Fe input from sediments 44 45 REAL(wp) :: sedfeinput = 1.E-9_wp !: Coastal release of Iron 46 REAL(wp) :: dustsolub = 0.014_wp !: Solubility of the dust 47 REAL(wp) :: wdust = 2.0_wp !: Sinking speed of the dust 48 REAL(wp) :: nitrfix = 1E-7_wp !: Nitrogen fixation rate 49 REAL(wp) :: diazolight = 50._wp !: Nitrogen fixation sensitivty to light 50 REAL(wp) :: concfediaz = 1.E-10_wp !: Fe half-saturation Cste for diazotrophs 51 45 52 46 53 !! * Module variables 47 54 REAL(wp) :: ryyss !: number of seconds per year 48 REAL(wp) :: r yyss1!: inverse of ryyss55 REAL(wp) :: r1_ryyss !: inverse of ryyss 49 56 REAL(wp) :: rmtss !: number of seconds per month 50 REAL(wp) :: rday1 !: inverse of rday 51 52 INTEGER , PARAMETER :: jpmth = 12 !: number of months per year 53 INTEGER , PARAMETER :: jpyr = 1 !: one year 54 55 INTEGER :: numdust !: logical unit for surface fluxes data 56 INTEGER :: nflx1 , nflx2 !: first and second record used 57 INTEGER :: nflx11, nflx12 58 59 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dustmo !: set of dust fields 57 REAL(wp) :: r1_rday !: inverse of rday 58 LOGICAL :: ll_sbc 59 60 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_dust ! structure of input dust 61 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_riverdic ! structure of input riverdic 62 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_riverdoc ! structure of input riverdoc 63 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_ndepo ! structure of input nitrogen deposition 64 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_ironsed ! structure of input iron from sediment 65 66 INTEGER , PARAMETER :: nbtimes = 365 !: maximum number of times record in a file 67 INTEGER :: ntimes_dust, ntimes_riv, ntimes_ndep ! number of time steps in a file 68 60 69 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dust !: dust fields 61 70 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivinp, cotdep !: river input fields … … 86 95 !! ** Method : - ??? 87 96 !!--------------------------------------------------------------------- 88 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 89 USE wrk_nemo, ONLY: zsidep => wrk_2d_1, zwork => wrk_2d_2, zwork1 => wrk_2d_3 97 USE wrk_nemo, ONLY: wrk_in_USE, wrk_not_released 98 USE wrk_nemo, ONLY: zsidep => wrk_2d_11 99 USE wrk_nemo, ONLY: zwork1 => wrk_2d_12, zwork2 => wrk_2d_13, zwork3 => wrk_2d_14 90 100 USE wrk_nemo, ONLY: znitrpot => wrk_3d_2, zirondep => wrk_3d_3 91 101 ! … … 96 106 REAL(wp) :: zrivalk, zrivsil, zrivpo4 97 107 #endif 98 REAL(wp) :: zdenitot, znitrpottot, zlim, zfact 99 REAL(wp) :: z wsbio3, zwsbio4, zwscal108 REAL(wp) :: zdenitot, znitrpottot, zlim, zfact, zfactcal 109 REAL(wp) :: zsiloss, zcaloss, zwsbio3, zwsbio4, zwscal, zdep 100 110 CHARACTER (len=25) :: charout 101 111 !!--------------------------------------------------------------------- 102 112 103 IF( ( wrk_in_ use(2, 1,2,3) ) .OR. ( wrk_in_use(3, 2,3) ) ) THEN113 IF( ( wrk_in_USE(2, 11,12,13,14) ) .OR. ( wrk_in_USE(3, 2,3) ) ) THEN 104 114 CALL ctl_stop('p4z_sed: requested workspace arrays unavailable') ; RETURN 105 115 END IF 106 116 107 IF( jnt == 1 .AND. ln_dustfer ) CALL p4z_sbc( kt ) 117 IF( jnt == 1 .AND. ll_sbc ) CALL p4z_sbc( kt ) 118 119 zirondep(:,:,:) = 0.e0 ! Initialisation of variables USEd to compute deposition 120 zsidep (:,:) = 0.e0 108 121 109 122 ! Iron and Si deposition at the surface 110 123 ! ------------------------------------- 111 112 124 DO jj = 1, jpj 113 125 DO ji = 1, jpi 114 z irondep(ji,jj,1) = ( dustsolub * dust(ji,jj) / ( 55.85 * rmtss ) + 3.e-10 * ryyss1 ) &115 & * rfact2 / fse3t(ji,jj,1)116 zsidep (ji,jj) = 8.8 * 0.075 * dust(ji,jj) * rfact2 / ( fse3t(ji,jj,1) *28.1 * rmtss )126 zdep = rfact2 / fse3t(ji,jj,1) 127 zirondep(ji,jj,1) = ( dustsolub * dust(ji,jj) / ( 55.85 * rmtss ) + 3.e-10 * r1_ryyss ) * zdep 128 zsidep (ji,jj) = 8.8 * 0.075 * dust(ji,jj) * zdep / ( 28.1 * rmtss ) 117 129 END DO 118 130 END DO … … 120 132 ! Iron solubilization of particles in the water column 121 133 ! ---------------------------------------------------- 122 123 134 DO jk = 2, jpkm1 124 zirondep(:,:,jk) = dust(:,:) / ( 10. * 55.85 * rmtss ) * rfact2 * 1.e-4135 zirondep(:,:,jk) = dust(:,:) / ( wdust * 55.85 * rmtss ) * rfact2 * 1.e-4 * EXP( -fsdept(:,:,jk) / 1000. ) 125 136 END DO 126 137 127 138 ! Add the external input of nutrients, carbon and alkalinity 128 139 ! ---------------------------------------------------------- 129 130 140 trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + rivinp(:,:) * rfact2 131 141 trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + (rivinp(:,:) + nitdep(:,:)) * rfact2 … … 139 149 ! (dust, river and sediment mobilization) 140 150 ! ------------------------------------------------------ 141 142 151 DO jk = 1, jpkm1 143 152 trn(:,:,jk,jpfer) = trn(:,:,jk,jpfer) + zirondep(:,:,jk) + ironsed(:,:,jk) * rfact2 144 153 END DO 145 146 154 147 155 #if ! defined key_sed … … 154 162 ikt = mbkt(ji,jj) 155 163 # if defined key_kriest 156 zwork 157 zwork 1(ji,jj) = trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt)164 zwork1(ji,jj) = trn(ji,jj,ikt,jpdsi) * wscal (ji,jj,ikt) 165 zwork2(ji,jj) = trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt) 158 166 # else 159 zwork 160 zwork 1(ji,jj) = trn(ji,jj,ikt,jpgoc) * wsbio4(ji,jj,ikt) + trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt)167 zwork1(ji,jj) = trn(ji,jj,ikt,jpdsi) * wsbio4(ji,jj,ikt) 168 zwork2(ji,jj) = trn(ji,jj,ikt,jpgoc) * wsbio4(ji,jj,ikt) + trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt) 161 169 # endif 162 END DO 163 END DO 164 zsumsedsi = glob_sum( zwork (:,:) * e1e2t(:,:) ) * rday1 165 zsumsedpo4 = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * rday1 166 DO jj = 1, jpj 167 DO ji = 1, jpi 168 ikt = mbkt(ji,jj) 169 zwork (ji,jj) = trn(ji,jj,ikt,jpcal) * wscal (ji,jj,ikt) 170 END DO 171 END DO 172 zsumsedcal = glob_sum( zwork (:,:) * e1e2t(:,:) ) * 2.0 * rday1 173 #endif 174 175 ! Then this loss is scaled at each bottom grid cell for 170 ! For calcite, burial efficiency is made a function of saturation 171 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 172 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 173 zwork3(ji,jj) = trn(ji,jj,ikt,jpcal) * wscal (ji,jj,ikt) * 2.e0 * zfactcal 174 END DO 175 END DO 176 zsumsedsi = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * r1_rday 177 zsumsedpo4 = glob_sum( zwork2(:,:) * e1e2t(:,:) ) * r1_rday 178 zsumsedcal = glob_sum( zwork3(:,:) * e1e2t(:,:) ) * r1_rday 179 #endif 180 181 ! THEN this loss is scaled at each bottom grid cell for 176 182 ! equilibrating the total budget of silica in the ocean. 177 183 ! Thus, the amount of silica lost in the sediments equal 178 184 ! the supply at the surface (dust+rivers) 179 185 ! ------------------------------------------------------ 186 #if ! defined key_sed 187 zrivsil = 1._wp - ( sumdepsi + rivalkinput * r1_ryyss / 6. ) / zsumsedsi 188 zrivpo4 = 1._wp - ( rivpo4input * r1_ryyss ) / zsumsedpo4 189 #endif 180 190 181 191 DO jj = 1, jpj 182 192 DO ji = 1, jpi 183 ikt = mbkt(ji,jj) 184 zfact = xstep / fse3t(ji,jj,ikt) 185 zwsbio3 = 1._wp - zfact * wsbio3(ji,jj,ikt) 186 zwsbio4 = 1._wp - zfact * wsbio4(ji,jj,ikt) 187 zwscal = 1._wp - zfact * wscal (ji,jj,ikt) 193 ikt = mbkt(ji,jj) 194 zdep = xstep / fse3t(ji,jj,ikt) 195 zwsbio4 = wsbio4(ji,jj,ikt) * zdep 196 zwscal = wscal (ji,jj,ikt) * zdep 197 # if defined key_kriest 198 zsiloss = trn(ji,jj,ikt,jpdsi) * zwsbio4 199 # else 200 zsiloss = trn(ji,jj,ikt,jpdsi) * zwscal 201 # endif 202 zcaloss = trn(ji,jj,ikt,jpcal) * zwscal 188 203 ! 189 # if defined key_kriest 190 trn(ji,jj,ikt,jpdsi) = trn(ji,jj,ikt,jpdsi) * zwsbio4 191 trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) * zwsbio4 192 trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) * zwsbio3 193 trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) * zwsbio3 194 # else 195 trn(ji,jj,ikt,jpdsi) = trn(ji,jj,ikt,jpdsi) * zwscal 196 trn(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) * zwsbio4 197 trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) * zwsbio3 198 trn(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) * zwsbio4 199 trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) * zwsbio3 200 # endif 201 trn(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) * zwscal 202 END DO 203 END DO 204 204 trn(ji,jj,ikt,jpdsi) = trn(ji,jj,ikt,jpdsi) - zsiloss 205 trn(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zcaloss 205 206 #if ! defined key_sed 206 zrivsil = 1._wp - ( sumdepsi + rivalkinput * ryyss1 / 6. ) / zsumsedsi 207 zrivalk = 1._wp - ( rivalkinput * ryyss1 ) / zsumsedcal 208 zrivpo4 = 1._wp - ( rivpo4input * ryyss1 ) / zsumsedpo4 207 trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zsiloss * zrivsil 208 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 209 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 210 zrivalk = 1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / zsumsedcal 211 trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 212 trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zcaloss * zrivalk 213 #endif 214 END DO 215 END DO 216 209 217 DO jj = 1, jpj 210 218 DO ji = 1, jpi 211 ikt = mbkt(ji,jj) 212 zfact = xstep / fse3t(ji,jj,ikt) 213 zwsbio3 = zfact * wsbio3(ji,jj,ikt) 214 zwsbio4 = zfact * wsbio4(ji,jj,ikt) 215 zwscal = zfact * wscal (ji,jj,ikt) 216 trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + trn(ji,jj,ikt,jpcal) * zwscal * zrivalk * 2.0 217 trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + trn(ji,jj,ikt,jpcal) * zwscal * zrivalk 218 # if defined key_kriest 219 trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + trn(ji,jj,ikt,jpdsi) * zwsbio4 * zrivsil 220 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + trn(ji,jj,ikt,jppoc) * zwsbio3 * zrivpo4 219 ikt = mbkt(ji,jj) 220 zdep = xstep / fse3t(ji,jj,ikt) 221 zwsbio4 = wsbio4(ji,jj,ikt) * zdep 222 zwsbio3 = wsbio3(ji,jj,ikt) * zdep 223 # if ! defined key_kriest 224 trn(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - trn(ji,jj,ikt,jpgoc) * zwsbio4 225 trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zwsbio3 226 trn(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * zwsbio4 227 trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zwsbio3 228 #if ! defined key_sed 229 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) & 230 & + ( trn(ji,jj,ikt,jpgoc) * zwsbio4 + trn(ji,jj,ikt,jppoc) * zwsbio3 ) * zrivpo4 231 #endif 232 221 233 # else 222 trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + trn(ji,jj,ikt,jpdsi) * zwscal * zrivsil 223 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) & 224 & + ( trn(ji,jj,ikt,jppoc) * zwsbio3 + trn(ji,jj,ikt,jpgoc) * zwsbio4 ) * zrivpo4 234 trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - trn(ji,jj,ikt,jpnum) * zwsbio4 235 trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zwsbio3 236 trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zwsbio3 237 #if ! defined key_sed 238 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) & 239 & + ( trn(ji,jj,ikt,jpnum) * zwsbio4 + trn(ji,jj,ikt,jppoc) * zwsbio3 ) * zrivpo4 240 #endif 241 225 242 # endif 226 243 END DO 227 244 END DO 228 # endif 245 229 246 230 247 ! Nitrogen fixation (simple parameterization). The total gain … … 233 250 ! ------------------------------------------------------------- 234 251 235 zdenitot = glob_sum( denitr(:,:,:) * cvol(:,:,:) * xnegtr(:,:,:) ) * rdenit252 zdenitot = glob_sum( ( denitr(:,:,:) * rdenit + denitnh4(:,:,:) * rdenita ) * cvol(:,:,:) * xnegtr(:,:,:) ) 236 253 237 254 ! Potential nitrogen fixation dependant on temperature and iron … … 246 263 zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 247 264 IF( zlim <= 0.2 ) zlim = 0.01 248 znitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * rday1 ) & 249 # if defined key_degrad 250 & * facvol(ji,jj,jk) & 251 # endif 252 & * zlim * rfact2 * trn(ji,jj,jk,jpfer) & 253 & / ( conc3 + trn(ji,jj,jk,jpfer) ) * ( 1.- EXP( -etot(ji,jj,jk) / 50.) ) 265 #if defined key_degrad 266 zfact = zlim * rfact2 * facvol(ji,jj,jk) 267 #else 268 zfact = zlim * rfact2 269 #endif 270 znitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) & 271 & * zfact * trn(ji,jj,jk,jpfer) / ( concfediaz + trn(ji,jj,jk,jpfer) ) & 272 & * ( 1.- EXP( -etot(ji,jj,jk) / diazolight ) ) 254 273 END DO 255 274 END DO … … 260 279 ! Nitrogen change due to nitrogen fixation 261 280 ! ---------------------------------------- 262 263 281 DO jk = 1, jpk 264 282 DO jj = 1, jpj 265 283 DO ji = 1, jpi 266 zfact = znitrpot(ji,jj,jk) * 1.e-7284 zfact = znitrpot(ji,jj,jk) * nitrfix 267 285 trn(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) + zfact 286 trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3 * zfact 268 287 trn(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + zfact * o2nit 269 trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + 30./ 46.* zfact 270 END DO 271 END DO 288 trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + 30. / 46. * zfact 289 ! trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + zfact 290 END DO 291 END DO 272 292 END DO 273 293 274 294 #if defined key_diatrc 275 295 zfact = 1.e+3 * rfact2r 276 # if ! defined key_iomput 277 trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1) * zfact * fse3t(:,:,1) * tmask(:,:,1) 278 trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * 1.e-7 * zfact * fse3t(:,:,1) * tmask(:,:,1) 279 # else 280 zwork (:,:) = ( zirondep(:,:,1) + ironsed(:,:,1) * rfact2 ) * zfact * fse3t(:,:,1) * tmask(:,:,1) 281 zwork1(:,:) = znitrpot(:,:,1) * 1.e-7 * zfact * fse3t(:,:,1) * tmask(:,:,1) 296 #if defined key_iomput 297 zwork1(:,:) = ( zirondep(:,:,1) + ironsed(:,:,1) * rfact2 ) * zfact * fse3t(:,:,1) * tmask(:,:,1) 298 zwork2(:,:) = znitrpot(:,:,1) * nitrif * zfact * fse3t(:,:,1) * tmask(:,:,1) 282 299 IF( jnt == nrdttrc ) THEN 283 CALL iom_put( "Irondep", zwork ) ! surface downward net flux of iron 284 CALL iom_put( "Nfix" , zwork1 ) ! nitrogen fixation at surface 285 ENDIF 286 # endif 300 CALL iom_put( "Irondep", zwork1 ) ! surface downward net flux of iron 301 CALL iom_put( "Nfix" , zwork2 ) ! nitrogen fixation at surface 302 ENDIF 303 #else 304 trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1) * zfact * fse3t(:,:,1) * tmask(:,:,1) 305 trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * nitrif * zfact * fse3t(:,:,1) * tmask(:,:,1) 287 306 #endif 288 307 ! 289 IF(ln_ctl) THEN ! print mean trends (used for debugging)290 WRITE(charout, FMT="('sed ')")308 IF(ln_ctl) THEN ! print mean trends (USEd for debugging) 309 WRITE(charout, fmt="('sed ')") 291 310 CALL prt_ctl_trc_info(charout) 292 311 CALL prt_ctl_trc(tab4d=trn, mask=tmask, clinfo=ctrcnm) 293 294 295 IF( ( wrk_not_released(2, 1 ,2,3) ) .OR. ( wrk_not_released(3, 2,3) ) ) &312 ENDIF 313 314 IF( ( wrk_not_released(2, 11,12,13,14) ) .OR. ( wrk_not_released(3, 2,3) ) ) & 296 315 & CALL ctl_stop('p4z_sed: failed to release workspace arrays') 297 316 … … 299 318 300 319 SUBROUTINE p4z_sbc( kt ) 301 302 320 !!---------------------------------------------------------------------- 303 !! *** ROUTINEp4z_sbc ***304 !! 305 !! ** Purpose : Read and interpolate the external sources of321 !! *** routine p4z_sbc *** 322 !! 323 !! ** purpose : read and interpolate the external sources of 306 324 !! nutrients 307 325 !! 308 !! ** Method : Read the files and interpolate the appropriate variables326 !! ** method : read the files and interpolate the appropriate variables 309 327 !! 310 328 !! ** input : external netcdf files … … 314 332 INTEGER, INTENT( in ) :: kt ! ocean time step 315 333 316 !! * Local declarations317 INTEGER :: imois, i15, iman318 REAL(wp) :: z xy334 !! * local declarations 335 INTEGER :: ji,jj 336 REAL(wp) :: zcoef 319 337 320 338 !!--------------------------------------------------------------------- 321 339 322 ! Initialization 323 ! -------------- 324 325 i15 = nday / 16 326 iman = INT( raamo ) 327 imois = nmonth + i15 - 1 328 IF( imois == 0 ) imois = iman 329 330 ! Calendar computation 331 IF( kt == nit000 .OR. imois /= nflx1 ) THEN 332 333 IF( kt == nit000 ) nflx1 = 0 334 335 ! nflx1 number of the first file record used in the simulation 336 ! nflx2 number of the last file record 337 338 nflx1 = imois 339 nflx2 = nflx1 + 1 340 nflx1 = MOD( nflx1, iman ) 341 nflx2 = MOD( nflx2, iman ) 342 IF( nflx1 == 0 ) nflx1 = iman 343 IF( nflx2 == 0 ) nflx2 = iman 344 IF(lwp) WRITE(numout,*) 345 IF(lwp) WRITE(numout,*) ' p4z_sbc : first record file used nflx1 ',nflx1 346 IF(lwp) WRITE(numout,*) ' p4z_sbc : last record file used nflx2 ',nflx2 347 348 ENDIF 349 350 ! 3. at every time step interpolation of fluxes 351 ! --------------------------------------------- 352 353 zxy = FLOAT( nday + 15 - 30 * i15 ) / 30 354 dust(:,:) = ( (1.-zxy) * dustmo(:,:,nflx1) + zxy * dustmo(:,:,nflx2) ) 355 340 ! Compute dust at nit000 or only if there is more than 1 time record in dust file 341 IF( ln_dust ) THEN 342 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_dust > 1 ) ) THEN 343 CALL fld_read( kt, 1, sf_dust ) 344 dust(:,:) = sf_dust(1)%fnow(:,:,1) 345 ENDIF 346 ENDIF 347 348 ! N/P and Si releases due to coastal rivers 349 ! Compute river at nit000 or only if there is more than 1 time record in river file 350 ! ----------------------------------------- 351 IF( ln_river ) THEN 352 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_riv > 1 ) ) THEN 353 CALL fld_read( kt, 1, sf_riverdic ) 354 CALL fld_read( kt, 1, sf_riverdoc ) 355 DO jj = 1, jpj 356 DO ji = 1, jpi 357 zcoef = ryyss * cvol(ji,jj,1) 358 cotdep(ji,jj) = sf_riverdic(1)%fnow(ji,jj,1) * 1E9 / ( 12. * zcoef + rtrn ) 359 rivinp(ji,jj) = ( sf_riverdic(1)%fnow(ji,jj,1) + sf_riverdoc(1)%fnow(ji,jj,1) ) * 1E9 / ( 31.6* zcoef + rtrn ) 360 END DO 361 END DO 362 ENDIF 363 ENDIF 364 365 ! Compute N deposition at nit000 or only if there is more than 1 time record in N deposition file 366 IF( ln_ndepo ) THEN 367 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_ndep > 1 ) ) THEN 368 CALL fld_read( kt, 1, sf_ndepo ) 369 DO jj = 1, jpj 370 DO ji = 1, jpi 371 nitdep(ji,jj) = 7.6 * sf_ndepo(1)%fnow(ji,jj,1) / ( 14E6 * ryyss * fse3t(ji,jj,1) + rtrn ) 372 END DO 373 END DO 374 ENDIF 375 ENDIF 376 ! 356 377 END SUBROUTINE p4z_sbc 357 378 … … 360 381 361 382 !!---------------------------------------------------------------------- 362 !! *** ROUTINEp4z_sed_init ***363 !! 364 !! ** Purpose : Initialization of the external sources of nutrients365 !! 366 !! ** Method : Read the files and compute the budget367 !! called at the first timestep (nit000)383 !! *** routine p4z_sed_init *** 384 !! 385 !! ** purpose : initialization of the external sources of nutrients 386 !! 387 !! ** method : read the files and compute the budget 388 !! called at the first timestep (nit000) 368 389 !! 369 390 !! ** input : external netcdf files 370 391 !! 371 392 !!---------------------------------------------------------------------- 372 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released373 USE wrk_nemo, ONLY: zriverdoc => wrk_2d_1, zriver => wrk_2d_2, zndepo => wrk_2d_3374 USE wrk_nemo, ONLY: zcmask => wrk_3d_2375 393 ! 376 INTEGER :: ji, jj, jk, jm 377 INTEGER :: numriv, numbath, numdep 378 REAL(wp) :: zcoef 379 REAL(wp) :: expide, denitide,zmaskt 394 INTEGER :: ji, jj, jk, jm 395 INTEGER :: numdust, numriv, numiron, numdepo 396 INTEGER :: ierr, ierr1, ierr2, ierr3 397 REAL(wp) :: zexpide, zdenitide, zmaskt 398 REAL(wp), DIMENSION(nbtimes) :: zsteps ! times records 399 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zdust, zndepo, zriverdic, zriverdoc, zcmask 380 400 ! 381 NAMELIST/nampissed/ ln_dustfer, ln_river, ln_ndepo, ln_sedinput, sedfeinput, dustsolub 401 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 402 TYPE(FLD_N) :: sn_dust, sn_riverdoc, sn_riverdic, sn_ndepo, sn_ironsed ! informations about the fields to be read 403 NAMELIST/nampissed/cn_dir, sn_dust, sn_riverdic, sn_riverdoc, sn_ndepo, sn_ironsed, & 404 & ln_dust, ln_river, ln_ndepo, ln_ironsed, & 405 & sedfeinput, dustsolub, wdust, nitrfix, diazolight, concfediaz 382 406 !!---------------------------------------------------------------------- 383 384 IF( ( wrk_in_use(2, 1,2,3) ) .OR. ( wrk_in_use(3, 2) ) ) THEN 385 CALL ctl_stop('p4z_sed_init: requested workspace arrays unavailable') ; RETURN 386 END IF 387 ! 388 REWIND( numnat ) ! read numnat 389 READ ( numnat, nampissed ) 407 ! ! number of seconds per year and per month 408 ryyss = nyear_len(1) * rday 409 rmtss = ryyss / raamo 410 r1_rday = 1. / rday 411 r1_ryyss = 1. / ryyss 412 ! !* set file information 413 cn_dir = './' ! directory in which the model is executed 414 ! ... default values (NB: frequency positive => hours, negative => months) 415 ! ! file ! frequency ! variable ! time intep ! clim ! 'yearly' or ! weights ! rotation ! 416 ! ! name ! (hours) ! name ! (T/F) ! (T/F) ! 'monthly' ! filename ! pairs ! 417 sn_dust = FLD_N( 'dust' , -1 , 'dust' , .true. , .true. , 'yearly' , '' , '' ) 418 sn_riverdic = FLD_N( 'river' , -12 , 'riverdic' , .false. , .true. , 'yearly' , '' , '' ) 419 sn_riverdoc = FLD_N( 'river' , -12 , 'riverdoc' , .false. , .true. , 'yearly' , '' , '' ) 420 sn_ndepo = FLD_N( 'ndeposition', -12 , 'ndep' , .false. , .true. , 'yearly' , '' , '' ) 421 sn_ironsed = FLD_N( 'ironsed' , -12 , 'bathy' , .false. , .true. , 'yearly' , '' , '' ) 422 423 424 REWIND( numnatp ) ! read numnat 425 READ ( numnatp, nampissed ) 390 426 391 427 IF(lwp) THEN 392 428 WRITE(numout,*) ' ' 393 WRITE(numout,*) ' Namelist : nampissed '429 WRITE(numout,*) ' namelist : nampissed ' 394 430 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~ ' 395 WRITE(numout,*) ' Dust input from the atmosphere ln_dustfer = ', ln_dustfer 396 WRITE(numout,*) ' River input of nutrients ln_river = ', ln_river 397 WRITE(numout,*) ' Atmospheric deposition of N ln_ndepo = ', ln_ndepo 398 WRITE(numout,*) ' Fe input from sediments ln_sedinput = ', ln_sedinput 399 WRITE(numout,*) ' Coastal release of Iron sedfeinput =', sedfeinput 400 WRITE(numout,*) ' Solubility of the dust dustsolub =', dustsolub 401 ENDIF 402 403 ! Dust input from the atmosphere 431 WRITE(numout,*) ' dust input from the atmosphere ln_dust = ', ln_dust 432 WRITE(numout,*) ' river input of nutrients ln_river = ', ln_river 433 WRITE(numout,*) ' atmospheric deposition of n ln_ndepo = ', ln_ndepo 434 WRITE(numout,*) ' fe input from sediments ln_sedinput = ', ln_ironsed 435 WRITE(numout,*) ' coastal release of iron sedfeinput = ', sedfeinput 436 WRITE(numout,*) ' solubility of the dust dustsolub = ', dustsolub 437 WRITE(numout,*) ' sinking speed of the dust wdust = ', wdust 438 WRITE(numout,*) ' nitrogen fixation rate nitrfix = ', nitrfix 439 WRITE(numout,*) ' nitrogen fixation sensitivty to light diazolight = ', diazolight 440 WRITE(numout,*) ' fe half-saturation cste for diazotrophs concfediaz = ', concfediaz 441 END IF 442 443 IF( ln_dust .OR. ln_river .OR. ln_ndepo ) THEN 444 ll_sbc = .TRUE. 445 ELSE 446 ll_sbc = .FALSE. 447 ENDIF 448 449 ! dust input from the atmosphere 404 450 ! ------------------------------ 405 IF( ln_dust fer) THEN406 IF(lwp) WRITE(numout,*) ' Initialize dust input from atmosphere '451 IF( ln_dust ) THEN 452 IF(lwp) WRITE(numout,*) ' initialize dust input from atmosphere ' 407 453 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' 408 CALL iom_open ( 'dust.orca.nc', numdust ) 409 DO jm = 1, jpmth 410 CALL iom_get( numdust, jpdom_data, 'dust', dustmo(:,:,jm), jm ) 454 ! 455 ALLOCATE( sf_dust(1), STAT=ierr ) !* allocate and fill sf_sst (forcing structure) with sn_sst 456 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'p4z_sed_init: unable to allocate sf_apr structure' ) 457 ! 458 CALL fld_fill( sf_dust, (/ sn_dust /), cn_dir, 'p4z_sed_init', 'Iron from sediment ', 'nampissed' ) 459 ALLOCATE( sf_dust(1)%fnow(jpi,jpj,1) ) 460 IF( sn_dust%ln_tint ) ALLOCATE( sf_dust(1)%fdta(jpi,jpj,1,2) ) 461 ! 462 ! Get total input dust ; need to compute total atmospheric supply of Si in a year 463 CALL iom_open ( TRIM( sn_dust%clname ) , numdust ) 464 CALL iom_gettime( numdust, zsteps, kntime=ntimes_dust) ! get number of record in file 465 ALLOCATE( zdust(jpi,jpj,ntimes_dust) ) 466 DO jm = 1, ntimes_dust 467 CALL iom_get( numdust, jpdom_data, TRIM( sn_dust%clvar ), zdust(:,:,jm), jm ) 411 468 END DO 412 469 CALL iom_close( numdust ) 470 sumdepsi = 0.e0 471 DO jm = 1, ntimes_dust 472 sumdepsi = sumdepsi + glob_sum( zdust(:,:,jm) * e1e2t(:,:) * tmask(:,:,1) ) 473 ENDDO 474 sumdepsi = sumdepsi * r1_ryyss * 8.8 * 0.075 / 28.1 475 DEALLOCATE( zdust) 413 476 ELSE 414 dust mo(:,:,:) = 0.e0415 dust(:,:) = 0.0416 END IF417 418 ! Nutrient input from rivers477 dust(:,:) = 0._wp 478 sumdepsi = 0._wp 479 END IF 480 481 ! nutrient input from rivers 419 482 ! -------------------------- 420 483 IF( ln_river ) THEN 421 IF(lwp) WRITE(numout,*) ' Initialize the nutrient input by rivers from river.orca.nc file' 422 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 423 CALL iom_open ( 'river.orca.nc', numriv ) 424 CALL iom_get ( numriv, jpdom_data, 'riverdic', zriver (:,:), jpyr ) 425 CALL iom_get ( numriv, jpdom_data, 'riverdoc', zriverdoc(:,:), jpyr ) 484 ALLOCATE( sf_riverdic(1), STAT=ierr1 ) !* allocate and fill sf_sst (forcing structure) with sn_sst 485 ALLOCATE( sf_riverdoc(1), STAT=ierr2 ) !* allocate and fill sf_sst (forcing structure) with sn_sst 486 IF( ierr1 + ierr2 > 0 ) CALL ctl_stop( 'STOP', 'p4z_sed_init: unable to allocate sf_apr structure' ) 487 ! 488 CALL fld_fill( sf_riverdic, (/ sn_riverdic /), cn_dir, 'p4z_sed_init', 'Input DOC from river ', 'nampissed' ) 489 CALL fld_fill( sf_riverdoc, (/ sn_riverdoc /), cn_dir, 'p4z_sed_init', 'Input DOC from river ', 'nampissed' ) 490 ALLOCATE( sf_riverdic(1)%fnow(jpi,jpj,1) ) 491 ALLOCATE( sf_riverdoc(1)%fnow(jpi,jpj,1) ) 492 IF( sn_riverdic%ln_tint ) ALLOCATE( sf_riverdic(1)%fdta(jpi,jpj,1,2) ) 493 IF( sn_riverdoc%ln_tint ) ALLOCATE( sf_riverdoc(1)%fdta(jpi,jpj,1,2) ) 494 ! Get total input rivers ; need to compute total river supply in a year 495 CALL iom_open ( TRIM( sn_riverdic%clname ), numriv ) 496 CALL iom_gettime( numriv, zsteps, kntime=ntimes_riv) 497 ALLOCATE( zriverdic(jpi,jpj,ntimes_riv) ) ; ALLOCATE( zriverdoc(jpi,jpj,ntimes_riv) ) 498 DO jm = 1, ntimes_riv 499 CALL iom_get( numriv, jpdom_data, TRIM( sn_riverdic%clvar ), zriverdic(:,:,jm), jm ) 500 CALL iom_get( numriv, jpdom_data, TRIM( sn_riverdoc%clvar ), zriverdoc(:,:,jm), jm ) 501 END DO 426 502 CALL iom_close( numriv ) 503 ! N/P and Si releases due to coastal rivers 504 ! ----------------------------------------- 505 rivpo4input = 0._wp 506 rivalkinput = 0._wp 507 DO jm = 1, ntimes_riv 508 rivpo4input = rivpo4input + glob_sum( ( zriverdic(:,:,jm) + zriverdoc(:,:,jm) ) * tmask(:,:,1) ) 509 rivalkinput = rivalkinput + glob_sum( zriverdic(:,:,jm) * tmask(:,:,1) ) 510 END DO 511 rivpo4input = rivpo4input * 1E9 / 31.6_wp 512 rivalkinput = rivalkinput * 1E9 / 12._wp 513 DEALLOCATE( zriverdic) ; DEALLOCATE( zriverdoc) 427 514 ELSE 428 zriver (:,:) = 0.e0 429 zriverdoc(:,:) = 0.e0 430 endif 431 432 ! Nutrient input from dust 515 rivinp(:,:) = 0._wp 516 cotdep(:,:) = 0._wp 517 rivpo4input = 0._wp 518 rivalkinput = 0._wp 519 END IF 520 521 ! nutrient input from dust 433 522 ! ------------------------ 434 523 IF( ln_ndepo ) THEN 435 IF(lwp) WRITE(numout,*) ' Initialize the nutrient input by dust from ndeposition.orca.nc'524 IF(lwp) WRITE(numout,*) ' initialize the nutrient input by dust from ndeposition.orca.nc' 436 525 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 437 CALL iom_open ( 'ndeposition.orca.nc', numdep ) 438 CALL iom_get ( numdep, jpdom_data, 'ndep', zndepo(:,:), jpyr ) 439 CALL iom_close( numdep ) 526 ALLOCATE( sf_ndepo(1), STAT=ierr3 ) !* allocate and fill sf_sst (forcing structure) with sn_sst 527 IF( ierr3 > 0 ) CALL ctl_stop( 'STOP', 'p4z_sed_init: unable to allocate sf_apr structure' ) 528 ! 529 CALL fld_fill( sf_ndepo, (/ sn_ndepo /), cn_dir, 'p4z_sed_init', 'Iron from sediment ', 'nampissed' ) 530 ALLOCATE( sf_ndepo(1)%fnow(jpi,jpj,1) ) 531 IF( sn_ndepo%ln_tint ) ALLOCATE( sf_ndepo(1)%fdta(jpi,jpj,1,2) ) 532 ! 533 ! Get total input dust ; need to compute total atmospheric supply of N in a year 534 CALL iom_open ( TRIM( sn_ndepo%clname ), numdepo ) 535 CALL iom_gettime( numdepo, zsteps, kntime=ntimes_ndep) 536 ALLOCATE( zndepo(jpi,jpj,ntimes_ndep) ) 537 DO jm = 1, ntimes_ndep 538 CALL iom_get( numdepo, jpdom_data, TRIM( sn_ndepo%clvar ), zndepo(:,:,jm), jm ) 539 END DO 540 CALL iom_close( numdepo ) 541 nitdepinput = 0._wp 542 DO jm = 1, ntimes_ndep 543 nitdepinput = nitdepinput + glob_sum( zndepo(:,:,jm) * e1e2t(:,:) * tmask(:,:,1) ) 544 ENDDO 545 nitdepinput = nitdepinput * 7.6 / 14E6 546 DEALLOCATE( zndepo) 440 547 ELSE 441 zndepo(:,:) = 0.e0 442 ENDIF 443 444 ! Coastal and island masks 548 nitdep(:,:) = 0._wp 549 nitdepinput = 0._wp 550 ENDIF 551 552 ! coastal and island masks 445 553 ! ------------------------ 446 IF( ln_ sedinput) THEN447 IF(lwp) WRITE(numout,*) ' Computation of an island mask to enhance coastal supply of iron'554 IF( ln_ironsed ) THEN 555 IF(lwp) WRITE(numout,*) ' computation of an island mask to enhance coastal supply of iron' 448 556 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 449 IF(lwp) WRITE(numout,*) ' from bathy.orca.nc file '450 CALL iom_open ( 'bathy.orca.nc', numbath)451 CALL iom_get ( num bath, jpdom_data, 'bathy', zcmask(:,:,:), jpyr)452 CALL iom_close( num bath)557 CALL iom_open ( TRIM( sn_ironsed%clname ), numiron ) 558 ALLOCATE( zcmask(jpi,jpj,jpk) ) 559 CALL iom_get ( numiron, jpdom_data, TRIM( sn_ironsed%clvar ), zcmask(:,:,:), 1 ) 560 CALL iom_close( numiron ) 453 561 ! 454 562 DO jk = 1, 5 … … 459 567 & * tmask(ji,jj-1,jk) * tmask(ji,jj,jk+1) 460 568 IF( zmaskt == 0. ) zcmask(ji,jj,jk ) = MAX( 0.1, zcmask(ji,jj,jk) ) 461 END IF569 END IF 462 570 END DO 463 571 END DO 464 572 END DO 573 CALL lbc_lnk( zcmask , 'T', 1. ) ! lateral boundary conditions on cmask (sign unchanged) 465 574 DO jk = 1, jpk 466 575 DO jj = 1, jpj 467 576 DO ji = 1, jpi 468 expide = MIN( 8.,( fsdept(ji,jj,jk) / 500. )**(-1.5) )469 denitide = -0.9543 + 0.7662 * LOG( expide ) - 0.235 * LOG(expide )**2470 zcmask(ji,jj,jk) = zcmask(ji,jj,jk) * MIN( 1., EXP( denitide ) / 0.5 )577 zexpide = MIN( 8.,( fsdept(ji,jj,jk) / 500. )**(-1.5) ) 578 zdenitide = -0.9543 + 0.7662 * LOG( zexpide ) - 0.235 * LOG( zexpide )**2 579 zcmask(ji,jj,jk) = zcmask(ji,jj,jk) * MIN( 1., EXP( zdenitide ) / 0.5 ) 471 580 END DO 472 581 END DO 473 582 END DO 583 ! Coastal supply of iron 584 ! ------------------------- 585 ironsed(:,:,jpk) = 0._wp 586 DO jk = 1, jpkm1 587 ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( fse3t(:,:,jk) * rday ) 588 END DO 589 DEALLOCATE( zcmask) 474 590 ELSE 475 zcmask(:,:,:) = 0.e0 476 ENDIF 477 478 CALL lbc_lnk( zcmask , 'T', 1. ) ! Lateral boundary conditions on zcmask (sign unchanged) 479 480 481 ! ! Number of seconds per year and per month 482 ryyss = nyear_len(1) * rday 483 rmtss = ryyss / raamo 484 rday1 = 1. / rday 485 ryyss1 = 1. / ryyss 486 ! ! ocean surface cell 487 488 ! total atmospheric supply of Si 489 ! ------------------------------ 490 sumdepsi = 0.e0 491 DO jm = 1, jpmth 492 zcoef = 1. / ( 12. * rmtss ) * 8.8 * 0.075 / 28.1 493 sumdepsi = sumdepsi + glob_sum( dustmo(:,:,jm) * e1e2t(:,:) ) * zcoef 494 ENDDO 495 496 ! N/P and Si releases due to coastal rivers 497 ! ----------------------------------------- 498 DO jj = 1, jpj 499 DO ji = 1, jpi 500 zcoef = ryyss * e1e2t(ji,jj) * fse3t(ji,jj,1) * tmask(ji,jj,1) 501 cotdep(ji,jj) = zriver(ji,jj) *1E9 / ( 12. * zcoef + rtrn ) 502 rivinp(ji,jj) = (zriver(ji,jj)+zriverdoc(ji,jj)) *1E9 / ( 31.6* zcoef + rtrn ) 503 nitdep(ji,jj) = 7.6 * zndepo(ji,jj) / ( 14E6*ryyss*fse3t(ji,jj,1) + rtrn ) 504 END DO 505 END DO 506 ! Lateral boundary conditions on ( cotdep, rivinp, nitdep ) (sign unchanged) 507 CALL lbc_lnk( cotdep , 'T', 1. ) ; CALL lbc_lnk( rivinp , 'T', 1. ) ; CALL lbc_lnk( nitdep , 'T', 1. ) 508 509 rivpo4input = glob_sum( rivinp(:,:) * cvol(:,:,1) ) * ryyss 510 rivalkinput = glob_sum( cotdep(:,:) * cvol(:,:,1) ) * ryyss 511 nitdepinput = glob_sum( nitdep(:,:) * cvol(:,:,1) ) * ryyss 512 513 514 ! Coastal supply of iron 515 ! ------------------------- 516 DO jk = 1, jpkm1 517 ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( fse3t(:,:,jk) * rday ) 518 END DO 519 CALL lbc_lnk( ironsed , 'T', 1. ) ! Lateral boundary conditions on ( ironsed ) (sign unchanged) 520 521 IF( ( wrk_not_released(2, 1,2,3) ) .OR. ( wrk_not_released(3, 2) ) ) & 522 & CALL ctl_stop('p4z_sed_init: failed to release workspace arrays') 523 591 ironsed(:,:,:) = 0._wp 592 ENDIF 593 ! 594 IF(lwp) THEN 595 WRITE(numout,*) 596 WRITE(numout,*) ' Total input of elements from river supply' 597 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 598 WRITE(numout,*) ' N Supply : ', rivpo4input/7.6*1E3/1E12*14.,' TgN/yr' 599 WRITE(numout,*) ' Si Supply : ', rivalkinput/6.*1E3/1E12*32.,' TgSi/yr' 600 WRITE(numout,*) ' Alk Supply : ', rivalkinput*1E3/1E12,' Teq/yr' 601 WRITE(numout,*) ' DIC Supply : ', rivpo4input*2.631*1E3*12./1E12,'TgC/yr' 602 WRITE(numout,*) 603 WRITE(numout,*) ' Total input of elements from atmospheric supply' 604 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 605 WRITE(numout,*) ' N Supply : ', nitdepinput/7.6*1E3/1E12*14.,' TgN/yr' 606 WRITE(numout,*) 607 ENDIF 608 ! 524 609 END SUBROUTINE p4z_sed_init 525 610 … … 529 614 !!---------------------------------------------------------------------- 530 615 531 ALLOCATE( dustmo(jpi,jpj,jpmth), dust(jpi,jpj) , & 532 & rivinp(jpi,jpj) , cotdep(jpi,jpj) , & 533 & nitdep(jpi,jpj) , ironsed(jpi,jpj,jpk), STAT=p4z_sed_alloc ) 616 ALLOCATE( dust (jpi,jpj), rivinp(jpi,jpj) , cotdep(jpi,jpj), & 617 & nitdep(jpi,jpj), ironsed(jpi,jpj,jpk), STAT=p4z_sed_alloc ) 534 618 535 619 IF( p4z_sed_alloc /= 0 ) CALL ctl_warn('p4z_sed_alloc : failed to allocate arrays.') -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsink.F90
r2715 r2823 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Change aggregation formula 9 !!---------------------------------------------------------------------- 8 10 #if defined key_pisces 9 11 !!---------------------------------------------------------------------- 10 12 !! p4z_sink : Compute vertical flux of particulate matter due to gravitational sinking 11 13 !!---------------------------------------------------------------------- 12 USE trc13 USE oce_trc !14 USE sms_pisces 15 USE prtctl_trc 16 USE iom 14 USE oce_trc ! shared variables between ocean and passive tracers 15 USE trc ! passive tracers common variables 16 USE sms_pisces ! PISCES Source Minus Sink variables 17 USE prtctl_trc ! print control for debugging 18 USE iom ! I/O manager 17 19 18 20 IMPLICIT NONE … … 91 93 REAL(wp) :: zdiv , zdiv1, zdiv2, zdiv3, zdiv4, zdiv5 92 94 REAL(wp) :: zval1, zval2, zval3, zval4 93 #if defined key_diatrc94 95 REAL(wp) :: zrfact2 95 96 INTEGER :: ik1 96 #endif97 97 CHARACTER (len=25) :: charout 98 98 !!--------------------------------------------------------------------- … … 193 193 & * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min) & 194 194 & * (zfm*xkr_mass_max**2-xkr_mass_min**2) & 195 & * (zeps-1.)**2/(zdiv2*zdiv3)) & 196 # if defined key_degrad 197 & *facvol(ji,jj,jk) & 198 # endif 199 & ) 200 201 zagg2 = ( 2*0.163*trn(ji,jj,jk,jpnum)**2*zfm* & 195 & * (zeps-1.)**2/(zdiv2*zdiv3)) 196 197 zagg2 = 2*0.163*trn(ji,jj,jk,jpnum)**2*zfm* & 202 198 & ((xkr_mass_max**3+3.*(xkr_mass_max**2 & 203 199 & *xkr_mass_min*(zeps-1.)/zdiv2 & … … 205 201 & +xkr_mass_min**3*(zeps-1)/zdiv1) & 206 202 & -zfm*xkr_mass_max**3*(1.+3.*((zeps-1.)/ & 207 & (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1)) & 208 # if defined key_degrad 209 & *facvol(ji,jj,jk) & 210 # endif 211 & ) 212 213 zagg3 = ( 0.163*trn(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3 & 214 # if defined key_degrad 215 & *facvol(ji,jj,jk) & 216 # endif 217 & ) 218 219 zaggsh = ( zagg1 + zagg2 + zagg3 ) * rfact2 * xdiss(ji,jj,jk) / 1000. 203 & (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1)) 204 205 zagg3 = 0.163*trn(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3 220 206 221 207 ! Aggregation of small into large particles … … 223 209 ! ---------------------------------------------- 224 210 225 zagg4 = (2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2* &211 zagg4 = 2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2* & 226 212 & xkr_wsbio_min*(zeps-1.)**2 & 227 213 & *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4) & 228 214 & -(1.-zfm)/(zdiv*(zeps-1.)))- & 229 215 & ((zfm*zfm*xkr_mass_max**2*zsm-xkr_mass_min**2) & 230 & *xkr_eta)/(zdiv*zdiv3*zdiv5) ) & 231 # if defined key_degrad 232 & *facvol(ji,jj,jk) & 233 # endif 234 & ) 235 236 zagg5 = ( 2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2 & 216 & *xkr_eta)/(zdiv*zdiv3*zdiv5) ) 217 218 zagg5 = 2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2 & 237 219 & *(zeps-1.)*zfm*xkr_wsbio_min & 238 220 & *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2) & 239 221 & /zdiv3-(xkr_mass_min**2-zfm*zsm*xkr_mass_max**2) & 240 & /zdiv) & 241 # if defined key_degrad 242 & *facvol(ji,jj,jk) & 243 # endif 244 & ) 222 & /zdiv) 245 223 246 224 zaggsi = ( zagg4 + zagg5 ) * xstep / 10. … … 253 231 zaggdoc = ( 0.4 * trn(ji,jj,jk,jpdoc) & 254 232 & + 1018. * trn(ji,jj,jk,jppoc) ) * xstep & 233 & * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc) 234 255 235 # if defined key_degrad 256 & * facvol(ji,jj,jk) & 236 zagg1 = zagg1 * facvol(ji,jj,jk) 237 zagg2 = zagg2 * facvol(ji,jj,jk) 238 zagg3 = zagg3 * facvol(ji,jj,jk) 239 zagg4 = zagg4 * facvol(ji,jj,jk) 240 zagg5 = zagg5 * facvol(ji,jj,jk) 241 zaggdoc = zaggdoc * facvol(ji,jj,jk) 257 242 # endif 258 & * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc) 259 243 zaggsh = ( zagg1 + zagg2 + zagg3 ) * rfact2 * xdiss(ji,jj,jk) / 1000. 244 zaggsi = ( zagg4 + zagg5 ) * xstep / 10. 245 zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi ) 246 ! 260 247 znumdoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 261 248 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc … … 335 322 !!---------------------------------------------------------------------- 336 323 ! 337 REWIND( numnat ) ! read nampiskrs338 READ ( numnat, nampiskrs )324 REWIND( numnatp ) ! read nampiskrs 325 READ ( numnat,( nampiskrs ) 339 326 340 327 IF(lwp) THEN … … 457 444 INTEGER :: ji, jj, jk 458 445 REAL(wp) :: zagg1, zagg2, zagg3, zagg4 459 REAL(wp) :: zagg , zaggfe, zaggdoc, zaggdoc2 460 REAL(wp) :: zfact, zwsmax, zstep 461 #if defined key_diatrc 446 REAL(wp) :: zagg , zaggfe, zaggdoc, zaggdoc2, zaggdoc3 447 REAL(wp) :: zfact, zwsmax, zmax, zstep 462 448 REAL(wp) :: zrfact2 463 449 INTEGER :: ik1 464 #endif465 450 CHARACTER (len=25) :: charout 466 451 !!--------------------------------------------------------------------- … … 471 456 DO jk = 1, jpkm1 472 457 DO jj = 1, jpj 473 DO ji=1,jpi 474 zfact = MAX( 0., fsdepw(ji,jj,jk+1) - hmld(ji,jj) ) / 4000._wp 458 DO ji = 1,jpi 459 zmax = MAX( heup(ji,jj), hmld(ji,jj) ) 460 zfact = MAX( 0., fsdepw(ji,jj,jk+1) - zmax ) / 5000._wp 475 461 wsbio4(ji,jj,jk) = wsbio2 + ( 200.- wsbio2 ) * zfact 476 462 END DO … … 533 519 zfact = zstep * xdiss(ji,jj,jk) 534 520 ! Part I : Coagulation dependent on turbulence 535 zagg1 = 940.* zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc)536 zagg2 = 1.054e4* zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc)521 zagg1 = 354. * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 522 zagg2 = 4452. * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 537 523 538 524 ! Part II : Differential settling 539 525 540 526 ! Aggregation of small into large particles 541 zagg3 = 0.66* zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc)542 zagg4 = 0.e0* zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc)527 zagg3 = 4.7 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 528 zagg4 = 0.4 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 543 529 544 530 zagg = zagg1 + zagg2 + zagg3 + zagg4 … … 546 532 547 533 ! Aggregation of DOC to small particles 548 zaggdoc = ( 80.* trn(ji,jj,jk,jpdoc) + 698. * trn(ji,jj,jk,jppoc) ) * zfact * trn(ji,jj,jk,jpdoc) 549 zaggdoc2 = 1.05e4 * zfact * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpdoc) 534 zaggdoc = ( 0.83 * trn(ji,jj,jk,jpdoc) + 271. * trn(ji,jj,jk,jppoc) ) * zfact * trn(ji,jj,jk,jpdoc) 535 zaggdoc2 = 1.07e4 * zfact * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpdoc) 536 zaggdoc3 = 0.02 * ( 16706. * trn(ji,jj,jk,jppoc) + 231. * trn(ji,jj,jk,jpdoc) ) * zstep * trn(ji,jj,jk,jpdoc) 550 537 551 538 ! Update the trends 552 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc 539 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc + zaggdoc3 553 540 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zagg + zaggdoc2 554 541 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe 555 542 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe 556 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 543 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3 557 544 ! 558 545 END DO -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r2715 r2823 17 17 PUBLIC 18 18 19 INTEGER :: numnatp 20 19 21 !!* Time variables 20 22 INTEGER :: nrdttrc !: ??? … … 25 27 26 28 !!* Biological parameters 27 REAL(wp) :: part !: ???28 29 REAL(wp) :: rno3 !: ??? 29 30 REAL(wp) :: o2ut !: ??? 30 31 REAL(wp) :: po4r !: ??? 31 32 REAL(wp) :: rdenit !: ??? 33 REAL(wp) :: rdenita !: ??? 32 34 REAL(wp) :: o2nit !: ??? 33 35 REAL(wp) :: wsbio, wsbio2 !: ??? … … 55 57 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concdfe !: ??? 56 58 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concnfe !: ??? 59 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimnfe !: ??? 60 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdfe !: ??? 61 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimsi !: ??? 62 57 63 58 64 !!* SMS for the organic matter … … 62 68 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiss !: ?? 63 69 #if defined key_diatrc 64 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodcal !: Calcite production65 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: grazing !: Total zooplankton grazing70 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodcal !: Calcite production 71 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: grazing !: Total zooplankton grazing 66 72 #endif 67 73 … … 74 80 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: borat !: ??? 75 81 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hi !: ??? 82 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: excess !: ??? 83 84 !!* Temperature dependancy of SMS terms 85 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc !: Temp. dependancy of various biological rates 86 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates 76 87 77 88 !!* Array used to indicate negative tracer values … … 98 109 !!---------------------------------------------------------------------- 99 110 USE lib_mpp , ONLY: ctl_warn 100 INTEGER :: ierr( 5) ! Local variables111 INTEGER :: ierr(6) ! Local variables 101 112 !!---------------------------------------------------------------------- 102 113 ierr(:) = 0 103 !104 114 !* Biological fluxes for light 105 ALLOCATE( neln(jpi,jpj), heup(jpi,jpj), 115 ALLOCATE( neln(jpi,jpj), heup(jpi,jpj), STAT=ierr(1) ) 106 116 ! 107 117 !* Biological fluxes for primary production 108 ALLOCATE( xksimax(jpi,jpj) , xksi(jpi,jpj) , & 109 & xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk), & 110 & xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk), & 111 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), & 112 & concdfe (jpi,jpj,jpk), concnfe (jpi,jpj,jpk), STAT=ierr(2) ) 118 ALLOCATE( xksimax(jpi,jpj) , xksi(jpi,jpj) , & 119 & xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk), & 120 & xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk), & 121 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), & 122 & xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk), & 123 & xlimsi (jpi,jpj,jpk), concdfe (jpi,jpj,jpk), & 124 & concnfe (jpi,jpj,jpk), STAT=ierr(2) ) 113 125 ! 114 !* SMS for the organic matter126 !* SMS for the organic matter 115 127 ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac (jpi,jpj,jpk), & 116 128 #if defined key_diatrc 117 129 & prodcal(jpi,jpj,jpk) , grazing(jpi,jpj,jpk) , & 118 130 #endif 119 & xlimbac (jpi,jpj,jpk), xdiss(jpi,jpj,jpk) , STAT=ierr(3) ) 131 & xlimbac (jpi,jpj,jpk), xdiss(jpi,jpj,jpk) , STAT=ierr(3) ) 132 133 !* Variable for chemistry of the CO2 cycle 134 ALLOCATE( akb3(jpi,jpj,jpk) , ak13 (jpi,jpj,jpk) , & 135 & ak23(jpi,jpj,jpk) , aksp (jpi,jpj,jpk) , & 136 & akw3(jpi,jpj,jpk) , borat (jpi,jpj,jpk) , & 137 & hi (jpi,jpj,jpk) , excess(jpi,jpj,jpk) , STAT=ierr(4) ) 120 138 ! 121 !* Variable for chemistry of the CO2 cycle 122 ALLOCATE( akb3(jpi,jpj,jpk), ak13(jpi,jpj,jpk) , & 123 & ak23(jpi,jpj,jpk), aksp(jpi,jpj,jpk) , & 124 & akw3(jpi,jpj,jpk), borat(jpi,jpj,jpk), hi(jpi,jpj,jpk), STAT=ierr(4) ) 139 !* Temperature dependancy of SMS terms 140 ALLOCATE( tgfunc(jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk) , STAT=ierr(5) ) 125 141 ! 126 142 !* Array used to indicate negative tracer values 127 ALLOCATE( xnegtr(jpi,jpj,jpk) , STAT=ierr(5) )143 ALLOCATE( xnegtr(jpi,jpj,jpk) , STAT=ierr(6) ) 128 144 ! 129 145 sms_pisces_alloc = MAXVAL( ierr ) -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r2715 r2823 17 17 !!---------------------------------------------------------------------- 18 18 USE par_trc ! TOP parameters 19 USE sms_pisces ! Source Minus Sink variables 20 USE trc 21 USE oce_trc ! ocean variables 22 USE p4zche 23 USE p4zche ! 24 USE p4zsink ! 25 USE p4zopt ! 26 USE p4zprod ! 27 USE p4zrem ! 28 USE p4zsed ! 29 USE p4zflx ! 19 USE oce_trc ! shared variables between ocean and passive tracers 20 USE trc ! passive tracers common variables 21 USE sms_pisces ! PISCES Source Minus Sink variables 22 USE p4zche ! Chemical model 23 USE p4zsink ! vertical flux of particulate matter due to sinking 24 USE p4zopt ! optical model 25 USE p4zrem ! Remineralisation of organic matter 26 USE p4zflx ! Gas exchange 27 USE p4zsed ! Sedimentation 30 28 31 29 IMPLICIT NONE … … 40 38 REAL(wp) :: bioma0 = 1.000e-8_wp 41 39 REAL(wp) :: silic1 = 91.65e-6_wp 42 REAL(wp) :: no3 = 31.04e-6_wp * 7.6 _wp40 REAL(wp) :: no3 = 31.04e-6_wp * 7.625_wp 43 41 44 42 # include "top_substitute.h90" … … 76 74 ! Set biological ratios 77 75 ! --------------------- 78 rno3 = (16.+2.) / 122. 79 po4r = 1.e0 / 122. 80 o2nit = 32. / 122. 81 rdenit = 97.6 / 16. 82 o2ut = 140. / 122. 76 rno3 = 16._wp / 122._wp 77 po4r = 1._wp / 122._wp 78 o2nit = 32._wp / 122._wp 79 rdenit = 105._wp / 16._wp 80 rdenita = 3._wp / 5._wp 81 o2ut = 131._wp / 122._wp 83 82 84 83 CALL p4z_che ! initialize the chemical constants … … 136 135 !! ** Purpose : Allocate all the dynamic arrays of PISCES 137 136 !!---------------------------------------------------------------------- 138 USE p4zint , ONLY : p4z_int_alloc 139 USE p4zsink, ONLY : p4z_sink_alloc 140 USE p4zopt , ONLY : p4z_opt_alloc 141 USE p4zprod, ONLY : p4z_prod_alloc 142 USE p4zrem , ONLY : p4z_rem_alloc 143 USE p4zsed , ONLY : p4z_sed_alloc 144 USE p4zflx , ONLY : p4z_flx_alloc 137 USE p4zsink , ONLY : p4z_sink_alloc 138 USE p4zopt , ONLY : p4z_opt_alloc 139 USE p4zprod , ONLY : p4z_prod_alloc 140 USE p4zrem , ONLY : p4z_rem_alloc 141 USE p4zsed , ONLY : p4z_sed_alloc 142 USE p4zflx , ONLY : p4z_flx_alloc 145 143 ! 146 144 INTEGER :: ierr … … 148 146 ! 149 147 ierr = sms_pisces_alloc() ! Start of PISCES-related alloc routines... 150 ierr = ierr + p4z_che_alloc() 151 ierr = ierr + p4z_int_alloc() 152 ierr = ierr + p4z_sink_alloc() 153 ierr = ierr + p4z_opt_alloc() 154 ierr = ierr + p4z_prod_alloc() 155 ierr = ierr + p4z_rem_alloc() 156 ierr = ierr + p4z_sed_alloc() 157 ierr = ierr + p4z_flx_alloc() 148 ierr = ierr + p4z_che_alloc() 149 ierr = ierr + p4z_sink_alloc() 150 ierr = ierr + p4z_opt_alloc() 151 ierr = ierr + p4z_prod_alloc() 152 ierr = ierr + p4z_rem_alloc() 153 ierr = ierr + p4z_sed_alloc() 154 ierr = ierr + p4z_flx_alloc() 158 155 ! 159 156 IF( lk_mpp ) CALL mpp_sum( ierr ) -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/trcnam_pisces.F90
r2715 r2823 19 19 USE trc ! TOP variables 20 20 USE sms_pisces ! sms trends 21 USE in_out_manager ! I/O manager 21 22 22 23 -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/trcrst_pisces.F90
r2715 r2823 43 43 44 44 ! 45 IF( l k_dtatrc.AND. ln_pisclo ) CALL pis_dmp_clo ! restoring of nutrients on close seas45 IF( ln_trcdta .AND. ln_pisclo ) CALL pis_dmp_clo ! restoring of nutrients on close seas 46 46 IF( ln_pisdmp ) CALL pis_dmp_ini ! relaxation of some tracers 47 47 ! … … 120 120 121 121 zarea = 1. / areatot * 1.e6 122 # if defined key_degrad 123 zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) * facvol(:,:,:) ) * zarea124 zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) * facvol(:,:,:) ) * zarea / 122.125 zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) * facvol(:,:,:) ) * zarea / 7.6126 zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) * facvol(:,:,:) ) * zarea127 # else 128 zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea129 zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea / 122.130 zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea / 7.6131 zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea132 # endif 122 IF( lk_degrad ) THEN 123 zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) * facvol(:,:,:) ) * zarea 124 zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) * facvol(:,:,:) ) * zarea / 122. 125 zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) * facvol(:,:,:) ) * zarea / 7.6 126 zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) * facvol(:,:,:) ) * zarea 127 ELSE 128 zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea 129 zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea / 122. 130 zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea / 7.6 131 zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 132 ENDIF 133 133 134 134 IF(lwp) WRITE(numout,*) ' TALK mean : ', zalksum … … 168 168 !! ictsi2(), ictsj2() : north-east Closed sea limits (i,j) 169 169 !!---------------------------------------------------------------------- 170 INTEGER, PARAMETER :: npicts = 4 !: number of closed sea 171 INTEGER, DIMENSION(npicts) :: ictsi1, ictsj1 !: south-west closed sea limits (i,j) 172 INTEGER, DIMENSION(npicts) :: ictsi2, ictsj2 !: north-east closed sea limits (i,j) 173 INTEGER :: ji, jj, jk, jn, jc ! dummy loop indices 170 INTEGER, PARAMETER :: npicts = 4 ! number of closed sea 171 INTEGER, DIMENSION(npicts) :: ictsi1, ictsj1 ! south-west closed sea limits (i,j) 172 INTEGER, DIMENSION(npicts) :: ictsi2, ictsj2 ! north-east closed sea limits (i,j) 173 INTEGER :: ji, jj, jk, jn, jl, jc ! dummy loop indices 174 INTEGER :: ierr ! local integer 175 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztrcdta ! 4D workspace 174 176 !!---------------------------------------------------------------------- 175 177 … … 243 245 END DO 244 246 245 #if defined key_dtatrc246 247 ! Restore close seas values to initial data 247 CALL trc_dta( nit000 ) 248 DO jn = 1, jptra 249 IF( lutini(jn) ) THEN 250 DO jc = 1, npicts 251 DO jk = 1, jpkm1 252 DO jj = ictsj1(jc), ictsj2(jc) 253 DO ji = ictsi1(jc), ictsi2(jc) 254 trn(ji,jj,jk,jn) = trdta(ji,jj,jk,jn) * tmask(ji,jj,jk) 255 trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 256 ENDDO 257 ENDDO 258 ENDDO 259 ENDDO 260 ENDIF 261 ENDDO 262 #endif 263 ! 248 IF( nb_trcdta > 0 ) THEN ! Initialisation of tracer from a file that may also be used for damping 249 ALLOCATE( ztrcdta(jpi,jpj,jpk,nb_trcdta), STAT=ierr ) 250 IF( ierr > 0 ) THEN 251 CALL ctl_stop( 'trc_ini: unable to allocate ztrcdta array' ) ; RETURN 252 ENDIF 253 ! 254 CALL trc_dta( nit000, ztrcdta ) ! read tracer data at nit000 255 ! 256 DO jn = 1, jptra 257 IF( ln_trc_ini(jn) ) THEN ! update passive tracers arrays with input data read from file 258 jl = n_trc_index(jn) 259 DO jc = 1, npicts 260 DO jk = 1, jpkm1 261 DO jj = ictsj1(jc), ictsj2(jc) 262 DO ji = ictsi1(jc), ictsi2(jc) 263 trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk,jl) * tmask(ji,jj,jk) 264 trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 265 ENDDO 266 ENDDO 267 ENDDO 268 ENDDO 269 ENDIF 270 ENDDO 271 DEALLOCATE( ztrcdta ) 272 ENDIF 273 ! 264 274 END SUBROUTINE pis_dmp_clo 265 275 -
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90
r2715 r2823 13 13 !! trcsms_pisces : Time loop of passive tracers sms 14 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trc 17 USE sms_pisces 18 19 USE p4zint ! 20 USE p4zche ! 21 USE p4zbio ! 22 USE p4zsink ! 23 USE p4zopt ! 24 USE p4zlim ! 25 USE p4zprod ! 26 USE p4zmort ! 27 USE p4zmicro ! 28 USE p4zmeso ! 29 USE p4zrem ! 30 USE p4zsed ! 31 USE p4zlys ! 32 USE p4zflx ! 33 34 USE prtctl_trc 35 36 USE trdmod_oce 37 USE trdmod_trc 38 39 USE sedmodel 15 USE oce_trc ! shared variables between ocean and passive tracers 16 USE trc ! passive tracers common variables 17 USE sms_pisces ! PISCES Source Minus Sink variables 18 USE p4zbio ! Biological model 19 USE p4zche ! Chemical model 20 USE p4zsink ! vertical flux of particulate matter due to sinking 21 USE p4zopt ! optical model 22 USE p4zlim ! Co-limitations of differents nutrients 23 USE p4zprod ! Growth rate of the 2 phyto groups 24 USE p4zmort ! Mortality terms for phytoplankton 25 USE p4zmicro ! Sources and sinks of microzooplankton 26 USE p4zmeso ! Sources and sinks of mesozooplankton 27 USE p4zrem ! Remineralisation of organic matter 28 USE p4zlys ! Calcite saturation 29 USE p4zflx ! Gas exchange 30 USE p4zsed ! Sedimentation 31 USE p4zint ! time interpolation 32 USE trdmod_oce ! Ocean trends variables 33 USE trdmod_trc ! TOP trends variables 34 USE sedmodel ! Sediment model 35 USE prtctl_trc ! print control for debugging 40 36 41 37 IMPLICIT NONE … … 86 82 IF(lwp) write(numout,*) '~~~~~~' 87 83 88 CALL p4z_che ! computation of chemical constants89 CALL p4z_int ! computation of various rates for biogeochemistry84 CALL p4z_che ! computation of chemical constants 85 CALL p4z_int ! computation of various rates for biogeochemistry 90 86 ! 91 87 ENDIF … … 128 124 ENDIF 129 125 130 IF( wrk_not_released(3, 1) ) CALL ctl_stop('trc_sms_pisces : failed to release workspace array.')126 IF( wrk_not_released(3, 1) ) CALL ctl_stop('trc_sms_pisces : failed to release workspace array.') 131 127 132 128 END SUBROUTINE trc_sms_pisces … … 164 160 xstep = rfact2 / rday 165 161 166 CALL p4z_sink_init ! vertical flux of particulate organic matter167 CALL p4z_opt_init ! Optic: PAR in the water column168 CALL p4z_lim_init ! co-limitations by the various nutrients169 CALL p4z_prod_init ! phytoplankton growth rate over the global ocean.170 CALL p4z_rem_init ! remineralisation171 CALL p4z_mort_init ! phytoplankton mortality172 CALL p4z_micro_init ! microzooplankton173 CALL p4z_meso_init ! mesozooplankton174 CALL p4z_sed_init ! sedimentation175 CALL p4z_lys_init ! calcite saturation176 CALL p4z_flx_init ! gas exchange162 CALL p4z_sink_init ! vertical flux of particulate organic matter 163 CALL p4z_opt_init ! Optic: PAR in the water column 164 CALL p4z_lim_init ! co-limitations by the various nutrients 165 CALL p4z_prod_init ! phytoplankton growth rate over the global ocean. 166 CALL p4z_rem_init ! remineralisation 167 CALL p4z_mort_init ! phytoplankton mortality 168 CALL p4z_micro_init ! microzooplankton 169 CALL p4z_meso_init ! mesozooplankton 170 CALL p4z_sed_init ! sedimentation 171 CALL p4z_lys_init ! calcite saturation 172 CALL p4z_flx_init ! gas exchange 177 173 178 174 ndayflxtr = 0
Note: See TracChangeset
for help on using the changeset viewer.