Source code for armi.physics.neutronics.energyGroups

# Copyright 2019 TerraPower, LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Energy group structures for multigroup neutronics calculations."""

import copy
import itertools
import math

import numpy

from armi import runLog
from armi.utils.mathematics import findNearestValue
from armi.physics.neutronics.const import (
    FAST_FLUX_THRESHOLD_EV,
    MAXIMUM_XS_LIBRARY_ENERGY,
    ULTRA_FINE_GROUP_LETHARGY_WIDTH,
    HIGH_ENERGY_EV,
)


[docs]def getFastFluxGroupCutoff(eGrpStruc): """ Given a constant "fast" energy threshold, return which ARMI energy group index contains this threshold. .. impl:: Return the energy group index which contains a given energy threshold. :id: I_ARMI_EG_FE :implements: R_ARMI_EG_FE This function returns the energy group within a given group structure that contains the fast flux threshold energy. The threshold energy is imported from the :py:mod:`constants <armi.physics.neutronics.const>` in the neutronics module, where it is defined as 100 keV. This is a standard definition for fast flux. This function also calculates and returns the fraction of the threshold energy group that is above the 100 keV threshold. """ gThres = -1 for g, eV in enumerate(eGrpStruc): if eV < FAST_FLUX_THRESHOLD_EV: gThres = g break dE = eGrpStruc[gThres - 1] - eGrpStruc[gThres] # eV fastFluxFracInG = (eGrpStruc[gThres - 1] - FAST_FLUX_THRESHOLD_EV) / dE return gThres - 1, fastFluxFracInG
def _flatten(*numbers): result = [] for item in numbers: if isinstance(item, int): result.append(item) else: result.extend(item) return result def _create_anl_energies_with_group_lethargies(*group_lethargies): anl_energy_max = MAXIMUM_XS_LIBRARY_ENERGY en = anl_energy_max energies = [] for ee in _flatten(*group_lethargies): energies.append(en) en *= math.e ** (-ee * ULTRA_FINE_GROUP_LETHARGY_WIDTH) return energies
[docs]def getGroupStructure(name): """ Return descending neutron energy group upper bounds in eV for a given structure name. .. impl:: Provide the neutron energy group bounds for a given group structure. :id: I_ARMI_EG_NE :implements: R_ARMI_EG_NE There are several built-in group structures that are defined in this module, which are stored in a dictionary. This function takes a group structure name as an input parameter, which it uses as a key for the group structure dictionary. If the group structure name is valid, it returns a copy of the energy group structure resulting from the dictionary lookup. Otherwise, it throws an error. Notes ----- Copy of the group structure is return so that modifications of the energy bounds does not propagate back to the `GROUP_STRUCTURE` dictionary. """ try: return copy.copy(GROUP_STRUCTURE[name]) except KeyError as ke: runLog.error( 'Could not find groupStructure with the name "{}".\n' "Choose one of: {}".format(name, ", ".join(GROUP_STRUCTURE.keys())) ) raise ke
[docs]def getGroupStructureType(neutronEnergyBoundsInEv): """Return neutron energy group structure name for a given set of neutron energy group bounds in eV.""" neutronEnergyBoundsInEv = numpy.array(neutronEnergyBoundsInEv) for groupStructureType in GROUP_STRUCTURE: refNeutronEnergyBoundsInEv = numpy.array(getGroupStructure(groupStructureType)) if len(refNeutronEnergyBoundsInEv) != len(neutronEnergyBoundsInEv): continue if numpy.allclose(refNeutronEnergyBoundsInEv, neutronEnergyBoundsInEv, 1e-5): return groupStructureType raise ValueError( "Neutron energy group structure type does not exist for the given neutron energy bounds: {}".format( neutronEnergyBoundsInEv ) )
GROUP_STRUCTURE = {} """ Energy groups for use in multigroup neutronics. Values are the upper bound of each energy in eV from highest energy to lowest (because neutrons typically downscatter...) :meta hide-value: """ GROUP_STRUCTURE["2"] = [HIGH_ENERGY_EV, 6.25e-01] # Nuclear Reactor Engineering: Reactor Systems Engineering, Vol. 1 GROUP_STRUCTURE["4gGlasstoneSesonske"] = [HIGH_ENERGY_EV, 5.00e04, 5.00e02, 6.25e-01] # http://serpent.vtt.fi/mediawiki/index.php/CASMO_4-group_structure GROUP_STRUCTURE["CASMO4"] = [HIGH_ENERGY_EV, 8.21e05, 5.53e03, 6.25e-01] GROUP_STRUCTURE["CASMO12"] = [ HIGH_ENERGY_EV, 2.23e06, 8.21e05, 5.53e03, 4.81e01, 4.00e00, 6.25e-01, 3.50e-01, 2.80e-01, 1.40e-01, 5.80e-02, 3.00e-02, ] # For typically for use with MCNP will need conversion to MeV, # and ordering from low to high. GROUP_STRUCTURE["CINDER63"] = [ 2.5000e07, 2.0000e07, 1.6905e07, 1.4918e07, 1.0000e07, 6.0650e06, 4.9658e06, 3.6788e06, 2.8651e06, 2.2313e06, 1.7377e06, 1.3534e06, 1.1080e06, 8.2085e05, 6.3928e05, 4.9790e05, 3.8870e05, 3.0200e05, 1.8320e05, 1.1110e05, 6.7380e04, 4.0870e04, 2.5540e04, 1.9890e04, 1.5030e04, 9.1190e03, 5.5310e03, 3.3550e03, 2.8400e03, 2.4040e03, 2.0350e03, 1.2340e03, 7.4850e02, 4.5400e02, 2.7540e02, 1.6700e02, 1.0130e02, 6.1440e01, 3.7270e01, 2.2600e01, 1.3710e01, 8.3150e00, 5.0430e00, 3.0590e00, 1.8550e00, 1.1250e00, 6.8300e-01, 4.1400e-01, 2.5100e-01, 1.5200e-01, 1.0000e-01, 8.0000e-02, 6.7000e-02, 5.8000e-02, 5.0000e-02, 4.2000e-02, 3.5000e-02, 3.0000e-02, 2.5000e-02, 2.0000e-02, 1.5000e-02, 1.0000e-02, 5.0000e-03, ] # fmt: off # Group structures below here are derived from Appendix E in # https://www.osti.gov/biblio/1483949-mc2-multigroup-cross-section-generation-code-fast-reactor-analysis-nuclear GROUP_STRUCTURE["ANL9"] = _create_anl_energies_with_group_lethargies( 222, 120, itertools.repeat(180, 5), 540, 300 ) GROUP_STRUCTURE["ANL33"] = _create_anl_energies_with_group_lethargies( 42, itertools.repeat(60, 28), 90, 240, 29, 1 ) GROUP_STRUCTURE["ANL70"] = _create_anl_energies_with_group_lethargies( 42, itertools.repeat(30, 67), 29, 1 ) GROUP_STRUCTURE["ANL116"] = _create_anl_energies_with_group_lethargies( 15*[6] + [3] + 2*[6] + [3] + [12] + 3*[6] + 3*[12] + 2*[6] + 2*[12] + [4] + [6] + [2] + [12] + 2*[6] + [12] + 2*[6] +2*[12] + [6] + [12] + 2*[6] + 6*[12] + [6] + 4*[12] + 4*[6] + 5*[12] + [6] + 3*[12] + [6] + 2*[30] + 2*[15] + [30] + 4*[15] + [18] + [12] + 5*[30] + [24] + [12] + [24] + [19] + [11] + [18] + [24] + 3*[18] + 2*[12] + 14*[60] + 2*[30] + [29] + [1] ) GROUP_STRUCTURE["ANL230"] = _create_anl_energies_with_group_lethargies( [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 6, 6, 6, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 6, 6, 6, 6, 2, 2, 1, 1, 2, 2, 2, 6, 6, 3, 3, 3, 3, 6, 6, 3, 3, 3, 3, 6, 6, 6, 6, 3, 3, 6, 6, 6, 3, 2, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 15, 15, 15, 15, 9, 6, 6, 9, 15, 15, 15, 3, 3, 9, 15, 9, 6, 3, 3, 9, 3, 12, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 12, 12, 6, 6, 12, 12, 12, 7, 5, 6, 6, 12, 12, 12, 12, 6, 6, 12, 12, 6, 6, 6, 6, 6, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 6, 24, 10, 20, 29, 1, ] ) # Reactor agnostic. Similar to ANL1041 but with 6 UFGs grouped together. # More likely to not error out on memory than 703 GROUP_STRUCTURE["348"] = _create_anl_energies_with_group_lethargies( itertools.repeat(6, 346), 5, 1 ) # Note that at one point the MC2 manual was inconsistent with the code itself GROUP_STRUCTURE["ANL703"] = _create_anl_energies_with_group_lethargies( [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, ] ) GROUP_STRUCTURE["ANL1041"] = _create_anl_energies_with_group_lethargies( itertools.repeat(2, 1041) ) GROUP_STRUCTURE["ANL2082"] = _create_anl_energies_with_group_lethargies( itertools.repeat(1, 2082) ) # fmt: on def _create_multigroup_structures_on_finegroup_energies( multigroup_energy_bounds, finegroup_energy_bounds ): """Set energy group bounds to the nearest ultra-fine group boundaries.""" modifiedEnergyBounds = set() modifiedEnergyBounds.add(max(finegroup_energy_bounds)) for energyBound in multigroup_energy_bounds[1:]: modifiedEnergyBounds.add(findNearestValue(finegroup_energy_bounds, energyBound)) return sorted(modifiedEnergyBounds, reverse=True) def _create_anl_energies_with_group_energies(group_energy_bounds): """Set energy group bounds to the nearest ultra-fine group boundaries.""" ufgEnergies = _create_anl_energies_with_group_lethargies(itertools.repeat(1, 2082)) return _create_multigroup_structures_on_finegroup_energies( group_energy_bounds, ufgEnergies ) """ Taken from Section A3.1 SHEM-361 in Ngeleka, Tholakele Prisca. "Examination and improvement of the SHEM energy group structure for HTR and deep burn HTR design and analysis." (2012). """ GROUP_STRUCTURE["SHEM361"] = [ 19640300, 14918200, 13840300, 11618300, 9999990, 9048360, 8187300, 7408170, 6703190, 6065300, 4965850, 4065690, 3328710, 2725310, 2231300, 1901390, 1636540, 1405770, 1336940, 1286960, 1162050, 1051150, 951119, 860006, 706511, 578443, 494002, 456021, 412501, 383884, 320646, 267826, 230014, 195008, 164999, 140000, 122773, 115624, 94664.5, 82297.4, 67379.4, 55165.6, 49915.9, 40867.7, 36978.6, 33459.6, 29281, 27394.4, 26100.1, 24999.1, 22699.4, 18584.7, 16200.5, 14899.7, 13603.7, 11137.7, 9118.81, 7465.85, 6112.52, 5004.51, 4097.35, 3481.07, 2996.18, 2700.24, 2397.29, 2084.1, 1811.83, 1586.2, 1343.58, 1134.67, 1064.32, 982.494, 909.681, 832.218, 748.517, 677.287, 646.837, 612.834, 600.099, 592.941, 577.146, 539.204, 501.746, 453.999, 419.094, 390.76, 371.703, 353.575, 335.323, 319.928, 295.922, 288.327, 284.888, 276.468, 268.297, 256.748, 241.796, 235.59, 224.325, 212.108, 200.958, 195.996, 193.078, 190.204, 188.877, 187.559, 186.251, 184.952, 183.295, 175.229, 167.519, 163.056, 154.176, 146.657, 139.504, 132.701, 126.229, 120.554, 117.577, 116.524, 115.48, 112.854, 110.288, 105.646, 103.038, 102.115, 101.605, 101.098, 100.594, 97.3287, 93.3256, 88.7741, 83.9393, 79.3679, 76.3322, 73.5595, 71.8869, 69.0682, 66.8261, 66.4929, 66.1612, 65.8312, 65.5029, 65.046, 64.5923, 63.6306, 62.3083, 59.925, 57.0595, 54.06, 52.9895, 51.7847, 49.2591, 47.5173, 46.2053, 45.2904, 44.1721, 43.1246, 42.1441, 41.227, 39.7295, 38.7874, 37.7919, 37.3038, 36.8588, 36.4191, 36.0568, 35.698, 34.5392, 33.0855, 31.693, 27.8852, 24.6578, 22.5356, 22.3788, 22.1557, 22.0011, 21.7018, 21.4859, 21.336, 21.2296, 21.1448, 21.0604, 20.9763, 20.7676, 20.6847, 20.6021, 20.5199, 20.4175, 20.2751, 20.0734, 19.5974, 19.3927, 19.1997, 19.0848, 17.9591, 17.759, 17.5648, 17.4457, 16.8305, 16.5501, 16.0498, 15.7792, 14.8662, 14.7301, 14.5952, 14.4702, 14.2505, 14.0496, 13.546, 13.3297, 12.6, 12.4721, 12.3086, 12.1302, 11.9795, 11.8153, 11.7094, 11.5894, 11.2694, 11.0529, 10.8038, 10.5793, 9.50002, 9.14031, 8.97995, 8.80038, 8.67369, 8.52407, 8.30032, 8.13027, 7.97008, 7.83965, 7.73994, 7.60035, 7.38015, 7.13987, 6.99429, 6.91778, 6.87021, 6.83526, 6.8107, 6.79165, 6.77605, 6.75981, 6.74225, 6.71668, 6.63126, 6.60611, 6.58829, 6.57184, 6.55609, 6.53907, 6.51492, 6.48178, 6.43206, 6.35978, 6.28016, 6.16011, 6.05991, 5.96014, 5.80021, 5.72015, 5.61979, 5.53004, 5.48817, 5.41025, 5.38003, 5.32011, 5.21008, 5.10997, 4.93323, 4.76785, 4.4198, 4.30981, 4.21983, 4, 3.88217, 3.71209, 3.54307, 3.14211, 2.88405, 2.77512, 2.74092, 2.7199, 2.70012, 2.64004, 2.62005, 2.59009, 2.55, 2.46994, 2.33006, 2.27299, 2.21709, 2.15695, 2.0701, 1.98992, 1.90008, 1.77997, 1.66895, 1.58803, 1.51998, 1.44397, 1.41001, 1.38098, 1.33095, 1.29304, 1.25094, 1.21397, 1.16999, 1.14797, 1.12997, 1.11605, 1.10395, 1.09198, 1.07799, 1.03499, 1.02101, 1.00904, 0.996501, 0.981959, 0.96396, 0.944022, 0.919978, 0.880024, 0.800371, 0.719999, 0.624999, 0.594993, 0.55499, 0.520011, 0.475017, 0.431579, 0.390001, 0.352994, 0.325008, 0.305012, 0.279989, 0.254997, 0.231192, 0.20961, 0.190005, 0.161895, 0.137999, 0.119995, 0.104298, 0.0897968, 0.0764969, 0.0651999, 0.0554982, 0.0473019, 0.0402999, 0.0343998, 0.0292989, 0.0249394, 0.0200104, 0.01483, 0.0104505, 0.00714526, 0.00455602, 0.0024999, ] # Energy bounds of ARMI33 and ARMI45 are modified to the nearest ultra-fine group boundaries GROUP_STRUCTURE["ARMI33"] = _create_anl_energies_with_group_energies( [ 1.4190e07, 1.0000e07, 6.0650e06, 3.6780e06, 2.2313e06, 1.3530e06, 8.2080e05, 4.9787e05, 3.0190e05, 1.8310e05, 1.1109e05, 6.7370e04, 4.0860e04, 2.4788e04, 1.5030e04, 9.1180e03, 5.5308e03, 3.3540e03, 2.0340e03, 1.2341e03, 7.4850e02, 4.5390e02, 3.0432e02, 1.4860e02, 9.1660e01, 6.7904e01, 4.0160e01, 2.2600e01, 1.3709e01, 8.3150e00, 4.0000e00, 5.4000e-01, 4.1400e-01, ] ) # Energy bounds of SHEM33_361 is ANL33 modified to the nearest SHEM361 fine group boundaries GROUP_STRUCTURE["SHEM33_361"] = _create_multigroup_structures_on_finegroup_energies( GROUP_STRUCTURE["ANL33"], GROUP_STRUCTURE["SHEM361"] ) GROUP_STRUCTURE["ARMI45"] = _create_anl_energies_with_group_energies( [ 1.419e07, 1.000e07, 6.065e06, 4.966e06, 3.679e06, 2.865e06, 2.231e06, 1.738e06, 1.353e06, 1.108e06, 8.209e05, 6.393e05, 4.979e05, 3.887e05, 3.020e05, 1.832e05, 1.111e05, 6.738e04, 4.087e04, 2.554e04, 1.989e04, 1.503e04, 9.119e03, 5.531e03, 3.355e03, 2.840e03, 2.404e03, 2.035e03, 1.234e03, 7.485e02, 4.540e02, 2.754e02, 1.670e02, 1.013e02, 6.144e01, 3.727e01, 2.260e01, 1.371e01, 8.315e00, 5.043e00, 3.059e00, 1.855e00, 1.125e00, 6.830e-01, 4.140e-01, ] ) """ Taken from Table 5.1 of "GAMSOR: Gamma Souce Preparation and DIF3D Flux Solution", ANL/NE-16/50 Rev 2.0, M.A. Smith, C.H. Lee, R.N. Hill, Aug 30 2022. """ GROUP_STRUCTURE["ANL21G"] = [ 2.0e7, 1.0e7, 8.0e6, 7.0e6, 6.0e6, 5.0e6, 4.0e6, 3.0e6, 2.5e6, 2.0e6, 1.5e6, 1.0e6, 7.0e5, 4.5e5, 3.0e5, 1.5e5, 1.0e5, 7.5e4, 4.5e4, 3.0e4, 2.0e4, ] """ Taken from Table 5.2 of "GAMSOR: Gamma Souce Preparation and DIF3D Flux Solution", ANL/NE-16/50 Rev 2.0, M.A. Smith, C.H. Lee, R.N. Hill, Aug 30 2022. """ GROUP_STRUCTURE["ANL94G"] = [ 2.000e07, 1.400e07, 1.200e07, 1.100e07, 1.060e07, 1.000e07, 9.500e06, 9.000e06, 8.500e06, 8.000e06, 7.750e06, 7.500e06, 7.250e06, 7.000e06, 6.750e06, 6.500e06, 6.250e06, 6.000e06, 5.750e06, 5.500e06, 5.400e06, 5.200e06, 5.000e06, 4.700e06, 4.500e06, 4.400e06, 4.200e06, 4.000e06, 3.900e06, 3.800e06, 3.650e06, 3.500e06, 3.333e06, 3.166e06, 3.000e06, 2.833e06, 2.666e06, 2.500e06, 2.333e06, 2.166e06, 2.000e06, 1.875e06, 1.750e06, 1.660e06, 1.600e06, 1.500e06, 1.420e06, 1.330e06, 1.250e06, 1.200e06, 1.125e06, 1.000e06, 9.000e05, 8.650e05, 8.250e05, 8.000e05, 7.500e05, 7.000e05, 6.750e05, 6.500e05, 6.250e05, 6.000e05, 5.750e05, 5.500e05, 5.250e05, 5.000e05, 4.500e05, 4.250e05, 4.000e05, 3.750e05, 3.500e05, 3.250e05, 3.000e05, 2.600e05, 2.200e05, 1.900e05, 1.600e05, 1.500e05, 1.400e05, 1.200e05, 1.000e05, 9.000e04, 8.000e04, 7.500e04, 6.500e04, 6.000e04, 5.500e04, 4.500e04, 4.000e04, 3.500e04, 3.000e04, 2.000e04, 1.500e04, 1.000e04, ]