From 9b5678b5f03d87a54dea9a8a2d2d20d850206ec6 Mon Sep 17 00:00:00 2001 From: John Tramm Date: Thu, 6 Mar 2025 20:48:31 -0600 Subject: [PATCH] Random Ray Source Region Mesh Subdivision (Cell-Under-Voxel Geometry) (#3333) Co-authored-by: Paul Romano --- docs/source/_images/2x2_sr_mesh.png | Bin 0 -> 109424 bytes docs/source/io_formats/settings.rst | 18 + docs/source/usersguide/random_ray.rst | 100 +- docs/source/usersguide/variance_reduction.rst | 12 +- include/openmc/constants.h | 4 + .../openmc/random_ray/flat_source_domain.h | 51 +- include/openmc/random_ray/parallel_map.h | 193 + include/openmc/random_ray/random_ray.h | 19 +- .../openmc/random_ray/random_ray_simulation.h | 10 +- include/openmc/random_ray/source_region.h | 326 +- openmc/settings.py | 55 +- src/finalize.cpp | 3 + src/random_ray/flat_source_domain.cpp | 466 +- src/random_ray/linear_source_domain.cpp | 35 +- src/random_ray/random_ray.cpp | 315 +- src/random_ray/random_ray_simulation.cpp | 185 +- src/random_ray/source_region.cpp | 229 +- src/settings.cpp | 26 + src/weight_windows.cpp | 13 +- .../random_ray_fixed_source_mesh/__init__.py | 0 .../flat/inputs_true.dat | 271 + .../flat/results_true.dat | 9 + .../linear/inputs_true.dat | 271 + .../linear/results_true.dat | 9 + .../random_ray_fixed_source_mesh/test.py | 53 + .../random_ray_k_eff_mesh/__init__.py | 0 .../random_ray_k_eff_mesh/inputs_true.dat | 119 + .../random_ray_k_eff_mesh/results_true.dat | 171 + .../random_ray_k_eff_mesh/test.py | 36 + .../weightwindows_fw_cadis_mesh/__init__.py | 0 .../flat/inputs_true.dat | 265 + .../flat/results_true.dat | 6760 +++++++++++++++++ .../linear/inputs_true.dat | 265 + .../linear/results_true.dat | 6760 +++++++++++++++++ .../weightwindows_fw_cadis_mesh/test.py | 49 + 35 files changed, 16638 insertions(+), 460 deletions(-) create mode 100644 docs/source/_images/2x2_sr_mesh.png create mode 100644 include/openmc/random_ray/parallel_map.h create mode 100644 tests/regression_tests/random_ray_fixed_source_mesh/__init__.py create mode 100644 tests/regression_tests/random_ray_fixed_source_mesh/flat/inputs_true.dat create mode 100644 tests/regression_tests/random_ray_fixed_source_mesh/flat/results_true.dat create mode 100644 tests/regression_tests/random_ray_fixed_source_mesh/linear/inputs_true.dat create mode 100644 tests/regression_tests/random_ray_fixed_source_mesh/linear/results_true.dat create mode 100644 tests/regression_tests/random_ray_fixed_source_mesh/test.py create mode 100644 tests/regression_tests/random_ray_k_eff_mesh/__init__.py create mode 100644 tests/regression_tests/random_ray_k_eff_mesh/inputs_true.dat create mode 100644 tests/regression_tests/random_ray_k_eff_mesh/results_true.dat create mode 100644 tests/regression_tests/random_ray_k_eff_mesh/test.py create mode 100644 tests/regression_tests/weightwindows_fw_cadis_mesh/__init__.py create mode 100644 tests/regression_tests/weightwindows_fw_cadis_mesh/flat/inputs_true.dat create mode 100644 tests/regression_tests/weightwindows_fw_cadis_mesh/flat/results_true.dat create mode 100644 tests/regression_tests/weightwindows_fw_cadis_mesh/linear/inputs_true.dat create mode 100644 tests/regression_tests/weightwindows_fw_cadis_mesh/linear/results_true.dat create mode 100644 tests/regression_tests/weightwindows_fw_cadis_mesh/test.py diff --git a/docs/source/_images/2x2_sr_mesh.png b/docs/source/_images/2x2_sr_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..5cdc684d3b94c2e4f92032b0a8ee284e024c2519 GIT binary patch literal 109424 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\O3+|R```>Do86nkp25zPfJVHq@R|dY7^MW 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. *Default*: prng + :source_region_meshes: + Relates meshes to spatial domains for subdividing source regions with each domain. + + :mesh: + Contains an ``id`` attribute and one or more ```` sub-elements. + + :id: + The unique identifier for the mesh. + + :domain: + Each domain element has an ``id`` attribute and a ``type`` attribute. + + :id: + The unique identifier for the domain. + + :type: + The type of the domain. Can be ``material``, ``cell``, or ``universe``. + ---------------------------------- ```` Element ---------------------------------- diff --git a/docs/source/usersguide/random_ray.rst b/docs/source/usersguide/random_ray.rst index eff1764d4..f28aed784 100644 --- a/docs/source/usersguide/random_ray.rst +++ b/docs/source/usersguide/random_ray.rst @@ -319,20 +319,24 @@ Default behavior using OpenMC's native PRNG can be manually specified as:: .. _subdivision_fsr: ----------------------------------- -Subdivision of Flat Source Regions ----------------------------------- +----------------------------- +Subdivision of Source Regions +----------------------------- -While the scattering and fission sources in Monte Carlo -are treated continuously, they are assumed to be invariant (flat) within a -MOC or random ray flat source region (FSR). This introduces bias into the -simulation, which can be remedied by reducing the physical size of the FSR -to dimensions below that of typical mean free paths of particles. +While the scattering and fission sources in Monte Carlo are treated +continuously, they are assumed to have a shape (flat or linear) within a MOC or +random ray source region (SR). This introduces bias into the simulation that can +be remedied by reducing the physical size of the SR to be smaller than the +typical mean free paths of particles. While use of linear sources in OpenMC +greatly reduces the error stemming from this approximation, subdivision is still +typically required. -In OpenMC, this subdivision currently must be done manually. The level of +In OpenMC, this subdivision can be done either manually by the user (by defining +additional surfaces and cells in the geometry) or automatically by assigning a +mesh to one or more cells, universes, or material types. The level of subdivision needed will be dependent on the fidelity the user requires. For -typical light water reactor analysis, consider the following example subdivision -of a two-dimensional 2x2 reflective pincell lattice: +typical light water reactor analysis, consider the following example of manual +subdivision of a two-dimensional 2x2 reflective pincell lattice: .. figure:: ../_images/2x2_materials.jpeg :class: with-border @@ -344,9 +348,79 @@ of a two-dimensional 2x2 reflective pincell lattice: :class: with-border :width: 400 - FSR decomposition for an asymmetrical 2x2 lattice (1.26 cm pitch) + Manual decomposition for an asymmetrical 2x2 lattice (1.26 cm pitch) -In the future, automated subdivision of FSRs via mesh overlay may be supported. +Geometry cells can also be subdivided into small source regions by assigning a +mesh to a list of domains, with each domain being of type +:class:`openmc.Material`, :class:`openmc.Cell`, or :class:`openmc.Universe`. The +idea of defining a source region as a combination of a base geometry cell and a +mesh element is known as "cell-under-voxel" style geometry, although in OpenMC +the mesh can be any kind and is not restricted to 3D regular voxels. An example +of overlaying a simple 2D mesh over a geometry is given as:: + + sr_mesh = openmc.RegularMesh() + sr_mesh.dimension = (n, n) + sr_mesh.lower_left = (0.0, 0.0) + sr_mesh.upper_right = (x, y) + domain = geometry.root_universe + settings.random_ray['source_region_meshes'] = [(sr_mesh, [domain])] + +In the above example, we apply a single :math:`n \times n` uniform mesh over the +entire domain by assigning it to the root universe of the geometry. +Alternatively, we might want to apply a finer or coarser mesh to different +regions of a 3D problem, for instance, as:: + + fuel = openmc.Material(name='UO2 fuel') + ... + water = openmc.Material(name='hot borated water') + ... + clad = openmc.Material(name='Zr cladding') + ... + + coarse_mesh = openmc.RegularMesh() + coarse_mesh.dimension = (n, n, n) + coarse_mesh.lower_left = (0.0, 0.0, 0.0) + coarse_mesh.upper_right = (x, y, z) + + fine_mesh = openmc.RegularMesh() + fine_mesh.dimension = (2*n, 2*n, 2*n) + fine_mesh.lower_left = (0.0, 0.0, 0.0) + fine_mesh.upper_right = (x, y, z) + + settings.random_ray['source_region_meshes'] = [(fine_mesh, [fuel, clad]), (coarse_mesh, [water])] + +Note that we don't need to adjust the outer bounds of the mesh to tightly wrap +the domain we assign the mesh to. Rather, OpenMC will dynamically generate +source regions based on the mesh bins rays actually visit, such that no +additional memory is wasted even if a domain only intersects a few mesh bins. +Going back to our 2x2 lattice example, if using a mesh-based subdivision, this +might look as below: + +.. figure:: ../_images/2x2_sr_mesh.png + :class: with-border + :width: 400 + + 20x20 overlaid "cell-under-voxel" mesh decomposition for an asymmetrical 2x2 lattice (1.26 cm pitch) + +Note that mesh-bashed subdivision is much easier for a user to implement but +does have a few downsides compared to manual subdivision. Manual subdivision can +be done with the specifics of the geometry in mind. As in the pincell example, +it is more efficient to subdivide the fuel region into azimuthal sectors and +radial rings as opposed to a Cartesian mesh. This is more efficient because the +regions are a more uniform size and follow the material boundaries closer, +resulting in the need for fewer source regions. Fewer source regions tends to +equate to a faster computational speed and/or the need for fewer rays per batch +to achieve good statistics. Additionally, applying a mesh often tends to create +a few very small source regions, as shown in the above picture where corners of +the mesh happen to intersect close to the actual fuel-moderator interface. These +small regions are rarely visited by rays, which can result in inaccurate +estimates of the source within those small regions and, thereby, numerical +instability. However, OpenMC utilizes several techniques to detect these small +source regions and mitigate instabilities that are associated with them. In +conclusion, mesh overlay is a great way to subdivide any geometry into smaller +source regions. It can be used while retaining stability, though typically at +the cost of generating more source regions relative to an optimal manual +subdivision. .. _usersguide_flux_norm: diff --git a/docs/source/usersguide/variance_reduction.rst b/docs/source/usersguide/variance_reduction.rst index 124f34203..f8ee9c35c 100644 --- a/docs/source/usersguide/variance_reduction.rst +++ b/docs/source/usersguide/variance_reduction.rst @@ -130,9 +130,15 @@ random ray mode can be found in the :ref:`Random Ray User Guide `. .. warning:: If using FW-CADIS weight window generation, ensure that the selected weight - window mesh does not subdivide any cells in the problem. In the future, this - restriction is intended to be relaxed, but for now subdivision of cells by a - mesh tally will result in undefined behavior. + window mesh does not subdivide any source regions in the problem. This can + be ensured by assigning the weight window tally mesh to the root universe so + as to create source region boundaries that conform to the mesh, as in the + example below. + +:: + + root = model.geometry.root_universe + settings.random_ray['source_region_meshes'] = [(ww_mesh, [root])] 6. When running your multigroup random ray input deck, OpenMC will automatically run a forward solve followed by an adjoint solve, with a diff --git a/include/openmc/constants.h b/include/openmc/constants.h index cfcacbabf..2a7ce1990 100644 --- a/include/openmc/constants.h +++ b/include/openmc/constants.h @@ -59,6 +59,10 @@ constexpr double RADIAL_MESH_TOL {1e-10}; // Maximum number of random samples per history constexpr int MAX_SAMPLE {100000}; +// Avg. number of hits per batch to be defined as a "small" +// source region in the random ray solver +constexpr double MIN_HITS_PER_BATCH {1.5}; + // ============================================================================ // MATH AND PHYSICAL CONSTANTS diff --git a/include/openmc/random_ray/flat_source_domain.h b/include/openmc/random_ray/flat_source_domain.h index 011ff7ccd..39d87d663 100644 --- a/include/openmc/random_ray/flat_source_domain.h +++ b/include/openmc/random_ray/flat_source_domain.h @@ -4,8 +4,10 @@ #include "openmc/constants.h" #include "openmc/openmp_interface.h" #include "openmc/position.h" +#include "openmc/random_ray/parallel_map.h" #include "openmc/random_ray/source_region.h" #include "openmc/source.h" +#include #include namespace openmc { @@ -37,7 +39,6 @@ public: void random_ray_tally(); virtual void accumulate_iteration_flux(); void output_to_vtk() const; - void all_reduce_replicated_source_regions(); void convert_external_sources(); void count_external_source_regions(); void set_adjoint_sources(const vector& forward_flux); @@ -47,12 +48,34 @@ public: void flatten_xs(); void transpose_scattering_matrix(); void serialize_final_fluxes(vector& flux); + void apply_meshes(); + void apply_mesh_to_cell_instances(int32_t i_cell, int32_t mesh_idx, + int target_material_id, const vector& instances, + bool is_target_void); + void apply_mesh_to_cell_and_children(int32_t i_cell, int32_t mesh_idx, + int32_t target_material_id, bool is_target_void); + void prepare_base_source_regions(); + SourceRegionHandle get_subdivided_source_region_handle( + int64_t sr, int mesh_bin, Position r, double dist, Direction u); + void finalize_discovered_source_regions(); + int64_t n_source_regions() const + { + return source_regions_.n_source_regions(); + } + int64_t n_source_elements() const + { + return source_regions_.n_source_regions() * negroups_; + } //---------------------------------------------------------------------------- // Static Data members static bool volume_normalized_flux_tallies_; static bool adjoint_; // If the user wants outputs based on the adjoint flux + // Static variables to store source region meshes and domains + static std::unordered_map>> + mesh_domain_map_; + //---------------------------------------------------------------------------- // Static data members static RandomRayVolumeEstimator volume_estimator_; @@ -61,7 +84,6 @@ public: // Public Data members bool mapped_all_tallies_ {false}; // If all source regions have been visited - int64_t n_source_regions_ {0}; // Total number of source regions in the model int64_t n_external_source_regions_ {0}; // Total number of source regions with // non-zero external source terms @@ -84,6 +106,27 @@ public: // The abstract container holding all source region-specific data SourceRegionContainer source_regions_; + // Base source region container. When source region subdivision via mesh + // is in use, this container holds the original (non-subdivided) material + // filled cell instance source regions. These are useful as they can be + // initialized with external source and mesh domain information ahead of time. + // Then, dynamically discovered source regions can be initialized by cloning + // their base region. + SourceRegionContainer base_source_regions_; + + // Parallel hash map holding all source regions discovered during + // a single iteration. This is a threadsafe data structure that is cleaned + // out after each iteration and stored in the "source_regions_" container. + // It is keyed with a SourceRegionKey, which combines the base source + // region index and the mesh bin. + ParallelMap + discovered_source_regions_; + + // Map that relates a SourceRegionKey to the index at which the source + // region can be found in the "source_regions_" container. + std::unordered_map + source_region_map_; + protected: //---------------------------------------------------------------------------- // Methods @@ -100,9 +143,7 @@ protected: //---------------------------------------------------------------------------- // Private data members - int negroups_; // Number of energy groups in simulation - int64_t n_source_elements_ {0}; // Total number of source regions in the model - // times the number of energy groups + int negroups_; // Number of energy groups in simulation double simulation_volume_; // Total physical volume of the simulation domain, as diff --git a/include/openmc/random_ray/parallel_map.h b/include/openmc/random_ray/parallel_map.h new file mode 100644 index 000000000..7f4f06d99 --- /dev/null +++ b/include/openmc/random_ray/parallel_map.h @@ -0,0 +1,193 @@ +#ifndef OPENMC_RANDOM_RAY_PARALLEL_HASH_MAP_H +#define OPENMC_RANDOM_RAY_PARALLEL_HASH_MAP_H + +#include "openmc/openmp_interface.h" + +#include +#include + +namespace openmc { + +/* + * The ParallelMap class allows for threadsafe access to a map-like data + * structure. It is implemented as a hash table with a fixed number of buckets, + * each of which contains a mutex lock and an unordered_map. The class provides + * a subset of the functionality of std::unordered_map. Users must first lock + * the object (using the key) before accessing or modifying the map. The object + * is locked by bucket, allowing for multiple threads to manipulate different + * keys simultaneously, though sometimes threads will need to wait if keys + * happen to be in the same bucket. The ParallelMap will generate pointers to + * hold values, rather than direct storage of values, so as to allow for + * pointers to values to remain valid even after the lock has been released + * (though locking of those values is then left to the user). Iterators to the + * class are provided but are not threadsafe, and are meant to be used only in a + * serial context (e.g., to dump the contents of the map to another data + * structure). + */ + +template +class ParallelMap { + + //---------------------------------------------------------------------------- + // Helper structs and classes + + struct Bucket { + OpenMPMutex lock_; + std::unordered_map, HashFunctor> map_; + }; + + // The iterator yields a pair: (const KeyType&, ValueType&) + class iterator { + public: + using iterator_category = std::forward_iterator_tag; + using value_type = std::pair; + using difference_type = std::ptrdiff_t; + using pointer = void; // Not providing pointer semantics. + using reference = value_type; + + iterator(std::vector* buckets, std::size_t bucket_index, + typename std::unordered_map, + HashFunctor>::iterator inner_it) + : buckets_(buckets), bucket_index_(bucket_index), inner_it_(inner_it) + { + // Advance to the first valid element if necessary. + advance_to_valid(); + } + + // Dereference returns a pair of (key, value). + reference operator*() const + { + return {inner_it_->first, *inner_it_->second}; + } + + iterator& operator++() + { + ++inner_it_; + advance_to_valid(); + return *this; + } + + iterator operator++(int) + { + iterator tmp = *this; + ++(*this); + return tmp; + } + + bool operator==(const iterator& other) const + { + // Two iterators are equal if they refer to the same bucket vector and are + // both at end, or if they have the same bucket index and inner iterator. + return buckets_ == other.buckets_ && + bucket_index_ == other.bucket_index_ && + (bucket_index_ == buckets_->size() || + inner_it_ == other.inner_it_); + } + + bool operator!=(const iterator& other) const { return !(*this == other); } + + private: + // Helper function: if we are at the end of the current bucket, advance to + // the next non-empty bucket. + void advance_to_valid() + { + while (bucket_index_ < buckets_->size() && + inner_it_ == (*buckets_)[bucket_index_].map_.end()) { + ++bucket_index_; + if (bucket_index_ < buckets_->size()) + inner_it_ = (*buckets_)[bucket_index_].map_.begin(); + } + } + + std::vector* buckets_; + std::size_t bucket_index_; + typename std::unordered_map, + HashFunctor>::iterator inner_it_; + }; + +public: + //---------------------------------------------------------------------------- + // Constructor + ParallelMap(int n_buckets = 1000) : buckets_(n_buckets) {} + + //---------------------------------------------------------------------------- + // Public Methods + void lock(const KeyType& key) + { + Bucket& bucket = get_bucket(key); + bucket.lock_.lock(); + } + + void unlock(const KeyType& key) + { + Bucket& bucket = get_bucket(key); + bucket.lock_.unlock(); + } + + void clear() + { + for (auto& bucket : buckets_) { + bucket.map_.clear(); + } + } + + bool contains(const KeyType& key) + { + Bucket& bucket = get_bucket(key); + // C++20 + // return bucket.map_.contains(key); + return bucket.map_.find(key) != bucket.map_.end(); + } + + ValueType& operator[](const KeyType& key) + { + Bucket& bucket = get_bucket(key); + return *bucket.map_[key].get(); + } + + ValueType* emplace(KeyType key, const ValueType& value) + { + Bucket& bucket = get_bucket(key); + // Attempt to emplace the new element into the unordered_map within the + auto result = bucket.map_.emplace(key, std::make_unique(value)); + auto it = result.first; + return it->second.get(); + } + + // Return iterator to first element. + iterator begin() + { + std::size_t bucket_index = 0; + auto inner_it = buckets_.empty() + ? typename std::unordered_map, HashFunctor>::iterator() + : buckets_[0].map_.begin(); + return iterator(&buckets_, bucket_index, inner_it); + } + + // Return iterator to one-past-last element. + iterator end() + { + // End is signaled by bucket_index_ equal to buckets_.size() + return iterator(&buckets_, buckets_.size(), + typename std::unordered_map, + HashFunctor>::iterator()); + } + +private: + //---------------------------------------------------------------------------- + // Private Methods + Bucket& get_bucket(const KeyType& key) + { + return buckets_[hash(key) % buckets_.size()]; + } + + //---------------------------------------------------------------------------- + // Private Data Fields + HashFunctor hash; + vector buckets_; +}; + +} // namespace openmc + +#endif // OPENMC_RANDOM_RAY_PARALLEL_HASH_MAP_H diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index df1ad70bc..abf2a2688 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -25,11 +25,17 @@ public: //---------------------------------------------------------------------------- // Methods void event_advance_ray(); - void attenuate_flux(double distance, bool is_active); - void attenuate_flux_flat_source(double distance, bool is_active); - void attenuate_flux_flat_source_void(double distance, bool is_active); - void attenuate_flux_linear_source(double distance, bool is_active); - void attenuate_flux_linear_source_void(double distance, bool is_active); + void attenuate_flux(double distance, bool is_active, double offset = 0.0); + void attenuate_flux_inner( + double distance, bool is_active, int64_t sr, int mesh_bin, Position r); + void attenuate_flux_flat_source( + SourceRegionHandle& srh, double distance, bool is_active, Position r); + void attenuate_flux_flat_source_void( + SourceRegionHandle& srh, double distance, bool is_active, Position r); + void attenuate_flux_linear_source( + SourceRegionHandle& srh, double distance, bool is_active, Position r); + void attenuate_flux_linear_source_void( + SourceRegionHandle& srh, double distance, bool is_active, Position r); void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); uint64_t transport_history_based_single_ray(); @@ -42,6 +48,7 @@ public: static double distance_active_; // Active ray length static unique_ptr ray_source_; // Starting source for ray sampling static RandomRaySourceShape source_shape_; // Flag for linear source + static bool mesh_subdivision_enabled_; // Flag for mesh subdivision static RandomRaySampleMethod sample_method_; // Flag for sampling method //---------------------------------------------------------------------------- @@ -55,6 +62,8 @@ private: // Private data members vector delta_psi_; vector delta_moments_; + vector mesh_bins_; + vector mesh_fractional_lengths_; int negroups_; FlatSourceDomain* domain_ {nullptr}; // pointer to domain that has flat source diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 01f12bffb..b94e7401b 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -20,10 +20,13 @@ public: //---------------------------------------------------------------------------- // Methods void compute_segment_correction_factors(); - void prepare_fixed_sources(); - void prepare_fixed_sources_adjoint(vector& forward_flux); + void apply_fixed_sources_and_mesh_domains(); + void prepare_fixed_sources_adjoint(vector& forward_flux, + SourceRegionContainer& forward_source_regions, + SourceRegionContainer& forward_base_source_regions, + std::unordered_map& + forward_source_region_map); void simulate(); - void reduce_simulation_statistics(); void output_simulation_results() const; void instability_check( int64_t n_hits, double k_eff, double& avg_miss_rate) const; @@ -63,6 +66,7 @@ private: void openmc_run_random_ray(); void validate_random_ray_inputs(); +void openmc_reset_random_ray(); } // namespace openmc diff --git a/include/openmc/random_ray/source_region.h b/include/openmc/random_ray/source_region.h index e41d6b824..5c5b31f39 100644 --- a/include/openmc/random_ray/source_region.h +++ b/include/openmc/random_ray/source_region.h @@ -44,7 +44,7 @@ inline void hash_combine(size_t& seed, const size_t v) } //---------------------------------------------------------------------------- -// Helper Structs +// Helper Structs and Classes // A mapping object that is used to map between a specific random ray // source region and an OpenMC native tally bin that it should score to @@ -81,11 +81,234 @@ struct TallyTask { }; }; +// The SourceRegionKey combines a base source region (i.e., a material +// filled cell instance) with a mesh bin. This key is used as a handle +// for dynamically discovered source regions when subdividing source +// regions with meshes. +class SourceRegionKey { +public: + int64_t base_source_region_id; + int64_t mesh_bin; + SourceRegionKey() = default; + SourceRegionKey(int64_t source_region, int64_t bin) + : base_source_region_id(source_region), mesh_bin(bin) + {} + + // Equality operator required by the unordered_map + bool operator==(const SourceRegionKey& other) const + { + return base_source_region_id == other.base_source_region_id && + mesh_bin == other.mesh_bin; + } + + // Less than operator required by std::sort + bool operator<(const SourceRegionKey& other) const + { + if (base_source_region_id < other.base_source_region_id) { + return true; + } else if (base_source_region_id > other.base_source_region_id) { + return false; + } else { + return mesh_bin < other.mesh_bin; + } + } + + // Hashing functor required by the unordered_map + struct HashFunctor { + size_t operator()(const SourceRegionKey& key) const + { + size_t seed = 0; + hash_combine(seed, key.base_source_region_id); + hash_combine(seed, key.mesh_bin); + return seed; + } + }; +}; + +// Forward declaration of SourceRegion +class SourceRegion; + +class SourceRegionHandle { +public: + //---------------------------------------------------------------------------- + // Constructors + SourceRegionHandle(SourceRegion& sr); + SourceRegionHandle() = default; + + // All fields are commented/described in the SourceRegion class definition + // below + + //---------------------------------------------------------------------------- + // Public Data members + int negroups_; + bool is_numerical_fp_artifact_ {false}; + bool is_linear_ {false}; + + // Scalar fields + int* material_; + int* is_small_; + int* n_hits_; + int* birthday_; + OpenMPMutex* lock_; + double* volume_; + double* volume_t_; + double* volume_sq_; + double* volume_sq_t_; + double* volume_naive_; + int* position_recorded_; + int* external_source_present_; + Position* position_; + Position* centroid_; + Position* centroid_iteration_; + Position* centroid_t_; + MomentMatrix* mom_matrix_; + MomentMatrix* mom_matrix_t_; + // A set of volume tally tasks. This more complicated data structure is + // convenient for ensuring that volumes are only tallied once per source + // region, regardless of how many energy groups are used for tallying. + std::unordered_set* volume_task_; + + // Mesh that subdivides this source region + int* mesh_; + int64_t* parent_sr_; + + // Energy group-wise 1D arrays + double* scalar_flux_old_; + double* scalar_flux_new_; + float* source_; + float* external_source_; + double* scalar_flux_final_; + + MomentArray* source_gradients_; + MomentArray* flux_moments_old_; + MomentArray* flux_moments_new_; + MomentArray* flux_moments_t_; + + // 2D array representing values for all energy groups x tally + // tasks. Each group may have a different number of tally tasks + // associated with it, necessitating the use of a jagged array. + vector* tally_task_; + + //---------------------------------------------------------------------------- + // Public Accessors + + int& material() { return *material_; } + const int material() const { return *material_; } + + int& is_small() { return *is_small_; } + const int is_small() const { return *is_small_; } + + int& n_hits() { return *n_hits_; } + const int n_hits() const { return *n_hits_; } + + void lock() { lock_->lock(); } + void unlock() { lock_->unlock(); } + + double& volume() { return *volume_; } + const double volume() const { return *volume_; } + + double& volume_t() { return *volume_t_; } + const double volume_t() const { return *volume_t_; } + + double& volume_sq() { return *volume_sq_; } + const double volume_sq() const { return *volume_sq_; } + + double& volume_sq_t() { return *volume_sq_t_; } + const double volume_sq_t() const { return *volume_sq_t_; } + + double& volume_naive() { return *volume_naive_; } + const double volume_naive() const { return *volume_naive_; } + + int& position_recorded() { return *position_recorded_; } + const int position_recorded() const { return *position_recorded_; } + + int& external_source_present() { return *external_source_present_; } + const int external_source_present() const + { + return *external_source_present_; + } + + Position& position() { return *position_; } + const Position position() const { return *position_; } + + Position& centroid() { return *centroid_; } + const Position centroid() const { return *centroid_; } + + Position& centroid_iteration() { return *centroid_iteration_; } + const Position centroid_iteration() const { return *centroid_iteration_; } + + Position& centroid_t() { return *centroid_t_; } + const Position centroid_t() const { return *centroid_t_; } + + MomentMatrix& mom_matrix() { return *mom_matrix_; } + const MomentMatrix mom_matrix() const { return *mom_matrix_; } + + MomentMatrix& mom_matrix_t() { return *mom_matrix_t_; } + const MomentMatrix mom_matrix_t() const { return *mom_matrix_t_; } + + std::unordered_set& volume_task() + { + return *volume_task_; + } + const std::unordered_set& volume_task() + const + { + return *volume_task_; + } + + int& mesh() { return *mesh_; } + const int mesh() const { return *mesh_; } + + int64_t& parent_sr() { return *parent_sr_; } + const int64_t parent_sr() const { return *parent_sr_; } + + double& scalar_flux_old(int g) { return scalar_flux_old_[g]; } + const double scalar_flux_old(int g) const { return scalar_flux_old_[g]; } + + double& scalar_flux_new(int g) { return scalar_flux_new_[g]; } + const double scalar_flux_new(int g) const { return scalar_flux_new_[g]; } + + double& scalar_flux_final(int g) { return scalar_flux_final_[g]; } + const double scalar_flux_final(int g) const { return scalar_flux_final_[g]; } + + float& source(int g) { return source_[g]; } + const float source(int g) const { return source_[g]; } + + float& external_source(int g) { return external_source_[g]; } + const float external_source(int g) const { return external_source_[g]; } + + MomentArray& source_gradients(int g) { return source_gradients_[g]; } + const MomentArray source_gradients(int g) const + { + return source_gradients_[g]; + } + + MomentArray& flux_moments_old(int g) { return flux_moments_old_[g]; } + const MomentArray flux_moments_old(int g) const + { + return flux_moments_old_[g]; + } + + MomentArray& flux_moments_new(int g) { return flux_moments_new_[g]; } + const MomentArray flux_moments_new(int g) const + { + return flux_moments_new_[g]; + } + + MomentArray& flux_moments_t(int g) { return flux_moments_t_[g]; } + const MomentArray flux_moments_t(int g) const { return flux_moments_t_[g]; } + + vector& tally_task(int g) { return tally_task_[g]; } + const vector& tally_task(int g) const { return tally_task_[g]; } + +}; // class SourceRegionHandle + class SourceRegion { public: //---------------------------------------------------------------------------- // Constructors SourceRegion(int negroups, bool is_linear); + SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr); SourceRegion() = default; //---------------------------------------------------------------------------- @@ -104,7 +327,13 @@ public: double volume_naive_ {0.0}; //!< Volume as integrated from this iteration only int position_recorded_ {0}; //!< Has the position been recorded yet? int external_source_present_ { - 0}; //!< Is an external source present in this region? + 0}; //!< Is an external source present in this region? + int is_small_ {0}; //!< Is it "small", receiving < 1.5 hits per iteration? + int n_hits_ {0}; //!< Number of total hits (ray crossings) + // Mesh that subdivides this source region + int mesh_ {C_NONE}; //!< Index in openmc::model::meshes array that subdivides + //!< this source region + int64_t parent_sr_ {C_NONE}; //!< Index of a parent source region Position position_ { 0.0, 0.0, 0.0}; //!< A position somewhere inside the region Position centroid_ {0.0, 0.0, 0.0}; //!< The centroid @@ -150,7 +379,6 @@ public: // tasks. Each group may have a different number of tally tasks // associated with it, necessitating the use of a jagged array. vector> tally_task_; - }; // class SourceRegion class SourceRegionContainer { @@ -165,28 +393,34 @@ public: //---------------------------------------------------------------------------- // Public Accessors int& material(int64_t sr) { return material_[sr]; } - const int& material(int64_t sr) const { return material_[sr]; } + const int material(int64_t sr) const { return material_[sr]; } + + int& is_small(int64_t sr) { return is_small_[sr]; } + const int is_small(int64_t sr) const { return is_small_[sr]; } + + int& n_hits(int64_t sr) { return n_hits_[sr]; } + const int n_hits(int64_t sr) const { return n_hits_[sr]; } OpenMPMutex& lock(int64_t sr) { return lock_[sr]; } const OpenMPMutex& lock(int64_t sr) const { return lock_[sr]; } double& volume(int64_t sr) { return volume_[sr]; } - const double& volume(int64_t sr) const { return volume_[sr]; } + const double volume(int64_t sr) const { return volume_[sr]; } double& volume_t(int64_t sr) { return volume_t_[sr]; } - const double& volume_t(int64_t sr) const { return volume_t_[sr]; } + const double volume_t(int64_t sr) const { return volume_t_[sr]; } double& volume_sq(int64_t sr) { return volume_sq_[sr]; } - const double& volume_sq(int64_t sr) const { return volume_sq_[sr]; } + const double volume_sq(int64_t sr) const { return volume_sq_[sr]; } double& volume_sq_t(int64_t sr) { return volume_sq_t_[sr]; } - const double& volume_sq_t(int64_t sr) const { return volume_sq_t_[sr]; } + const double volume_sq_t(int64_t sr) const { return volume_sq_t_[sr]; } double& volume_naive(int64_t sr) { return volume_naive_[sr]; } - const double& volume_naive(int64_t sr) const { return volume_naive_[sr]; } + const double volume_naive(int64_t sr) const { return volume_naive_[sr]; } int& position_recorded(int64_t sr) { return position_recorded_[sr]; } - const int& position_recorded(int64_t sr) const + const int position_recorded(int64_t sr) const { return position_recorded_[sr]; } @@ -195,31 +429,31 @@ public: { return external_source_present_[sr]; } - const int& external_source_present(int64_t sr) const + const int external_source_present(int64_t sr) const { return external_source_present_[sr]; } Position& position(int64_t sr) { return position_[sr]; } - const Position& position(int64_t sr) const { return position_[sr]; } + const Position position(int64_t sr) const { return position_[sr]; } Position& centroid(int64_t sr) { return centroid_[sr]; } - const Position& centroid(int64_t sr) const { return centroid_[sr]; } + const Position centroid(int64_t sr) const { return centroid_[sr]; } Position& centroid_iteration(int64_t sr) { return centroid_iteration_[sr]; } - const Position& centroid_iteration(int64_t sr) const + const Position centroid_iteration(int64_t sr) const { return centroid_iteration_[sr]; } Position& centroid_t(int64_t sr) { return centroid_t_[sr]; } - const Position& centroid_t(int64_t sr) const { return centroid_t_[sr]; } + const Position centroid_t(int64_t sr) const { return centroid_t_[sr]; } MomentMatrix& mom_matrix(int64_t sr) { return mom_matrix_[sr]; } - const MomentMatrix& mom_matrix(int64_t sr) const { return mom_matrix_[sr]; } + const MomentMatrix mom_matrix(int64_t sr) const { return mom_matrix_[sr]; } MomentMatrix& mom_matrix_t(int64_t sr) { return mom_matrix_t_[sr]; } - const MomentMatrix& mom_matrix_t(int64_t sr) const + const MomentMatrix mom_matrix_t(int64_t sr) const { return mom_matrix_t_[sr]; } @@ -228,12 +462,12 @@ public: { return source_gradients_[index(sr, g)]; } - const MomentArray& source_gradients(int64_t sr, int g) const + const MomentArray source_gradients(int64_t sr, int g) const { return source_gradients_[index(sr, g)]; } MomentArray& source_gradients(int64_t se) { return source_gradients_[se]; } - const MomentArray& source_gradients(int64_t se) const + const MomentArray source_gradients(int64_t se) const { return source_gradients_[se]; } @@ -242,12 +476,12 @@ public: { return flux_moments_old_[index(sr, g)]; } - const MomentArray& flux_moments_old(int64_t sr, int g) const + const MomentArray flux_moments_old(int64_t sr, int g) const { return flux_moments_old_[index(sr, g)]; } MomentArray& flux_moments_old(int64_t se) { return flux_moments_old_[se]; } - const MomentArray& flux_moments_old(int64_t se) const + const MomentArray flux_moments_old(int64_t se) const { return flux_moments_old_[se]; } @@ -256,12 +490,12 @@ public: { return flux_moments_new_[index(sr, g)]; } - const MomentArray& flux_moments_new(int64_t sr, int g) const + const MomentArray flux_moments_new(int64_t sr, int g) const { return flux_moments_new_[index(sr, g)]; } MomentArray& flux_moments_new(int64_t se) { return flux_moments_new_[se]; } - const MomentArray& flux_moments_new(int64_t se) const + const MomentArray flux_moments_new(int64_t se) const { return flux_moments_new_[se]; } @@ -270,12 +504,12 @@ public: { return flux_moments_t_[index(sr, g)]; } - const MomentArray& flux_moments_t(int64_t sr, int g) const + const MomentArray flux_moments_t(int64_t sr, int g) const { return flux_moments_t_[index(sr, g)]; } MomentArray& flux_moments_t(int64_t se) { return flux_moments_t_[se]; } - const MomentArray& flux_moments_t(int64_t se) const + const MomentArray flux_moments_t(int64_t se) const { return flux_moments_t_[se]; } @@ -284,12 +518,12 @@ public: { return scalar_flux_old_[index(sr, g)]; } - const double& scalar_flux_old(int64_t sr, int g) const + const double scalar_flux_old(int64_t sr, int g) const { return scalar_flux_old_[index(sr, g)]; } double& scalar_flux_old(int64_t se) { return scalar_flux_old_[se]; } - const double& scalar_flux_old(int64_t se) const + const double scalar_flux_old(int64_t se) const { return scalar_flux_old_[se]; } @@ -298,12 +532,12 @@ public: { return scalar_flux_new_[index(sr, g)]; } - const double& scalar_flux_new(int64_t sr, int g) const + const double scalar_flux_new(int64_t sr, int g) const { return scalar_flux_new_[index(sr, g)]; } double& scalar_flux_new(int64_t se) { return scalar_flux_new_[se]; } - const double& scalar_flux_new(int64_t se) const + const double scalar_flux_new(int64_t se) const { return scalar_flux_new_[se]; } @@ -312,34 +546,31 @@ public: { return scalar_flux_final_[index(sr, g)]; } - const double& scalar_flux_final(int64_t sr, int g) const + const double scalar_flux_final(int64_t sr, int g) const { return scalar_flux_final_[index(sr, g)]; } double& scalar_flux_final(int64_t se) { return scalar_flux_final_[se]; } - const double& scalar_flux_final(int64_t se) const + const double scalar_flux_final(int64_t se) const { return scalar_flux_final_[se]; } float& source(int64_t sr, int g) { return source_[index(sr, g)]; } - const float& source(int64_t sr, int g) const { return source_[index(sr, g)]; } + const float source(int64_t sr, int g) const { return source_[index(sr, g)]; } float& source(int64_t se) { return source_[se]; } - const float& source(int64_t se) const { return source_[se]; } + const float source(int64_t se) const { return source_[se]; } float& external_source(int64_t sr, int g) { return external_source_[index(sr, g)]; } - const float& external_source(int64_t sr, int g) const + const float external_source(int64_t sr, int g) const { return external_source_[index(sr, g)]; } float& external_source(int64_t se) { return external_source_[se]; } - const float& external_source(int64_t se) const - { - return external_source_[se]; - } + const float external_source(int64_t se) const { return external_source_[se]; } vector& tally_task(int64_t sr, int g) { @@ -365,13 +596,26 @@ public: return volume_task_[sr]; } + int& mesh(int64_t sr) { return mesh_[sr]; } + const int mesh(int64_t sr) const { return mesh_[sr]; } + + int64_t& parent_sr(int64_t sr) { return parent_sr_[sr]; } + const int64_t parent_sr(int64_t sr) const { return parent_sr_[sr]; } + //---------------------------------------------------------------------------- // Public Methods void push_back(const SourceRegion& sr); void assign(int n_source_regions, const SourceRegion& source_region); void flux_swap(); - void mpi_sync_ranks(bool reduce_position); + int64_t n_source_regions() const { return n_source_regions_; } + int64_t n_source_elements() const { return n_source_regions_ * negroups_; } + int& negroups() { return negroups_; } + const int negroups() const { return negroups_; } + bool& is_linear() { return is_linear_; } + const bool is_linear() const { return is_linear_; } + SourceRegionHandle get_source_region_handle(int64_t sr); + void adjoint_reset(); private: //---------------------------------------------------------------------------- @@ -382,6 +626,10 @@ private: // SoA storage for scalar fields (one item per source region) vector material_; + vector is_small_; + vector n_hits_; + vector mesh_; + vector parent_sr_; vector lock_; vector volume_; vector volume_t_; diff --git a/openmc/settings.py b/openmc/settings.py index 2f054ebd1..ead2c0d00 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -7,11 +7,12 @@ from pathlib import Path import lxml.etree as ET +import openmc import openmc.checkvalue as cv from openmc.checkvalue import PathLike from openmc.stats.multivariate import MeshSpatial from ._xml import clean_indentation, get_text, reorder_attributes -from .mesh import _read_meshes, RegularMesh +from .mesh import _read_meshes, RegularMesh, MeshBase from .source import SourceBase, MeshSource, IndependentSource from .utility_funcs import input_path from .volume import VolumeCalculation @@ -180,6 +181,12 @@ class Settings: :sample_method: Sampling method for the ray starting location and direction of travel. Options are `prng` (default) or 'halton`. + :source_region_meshes: + List of tuples where each tuple contains a mesh and a list of + domains. Each domain is an instance of openmc.Material, openmc.Cell, + or openmc.Universe. The mesh will be applied to the listed domains + to subdivide source regions so as to improve accuracy and/or conform + with tally meshes. .. versionadded:: 0.15.0 resonance_scattering : dict @@ -1156,6 +1163,18 @@ class Settings: cv.check_type('volume normalized flux tallies', value, bool) elif key == 'adjoint': cv.check_type('adjoint', value, bool) + elif key == 'source_region_meshes': + cv.check_type('source region meshes', value, Iterable) + for mesh, domains in value: + cv.check_type('mesh', mesh, MeshBase) + cv.check_type('domains', domains, Iterable) + valid_types = (openmc.Material, openmc.Cell, openmc.Universe) + for domain in domains: + if not isinstance(domain, valid_types): + raise ValueError( + f'Invalid domain type: {type(domain)}. Expected ' + 'openmc.Material, openmc.Cell, or openmc.Universe.') + cv.check_type('adjoint', value, bool) elif key == 'sample_method': cv.check_value('sample method', value, ('prng', 'halton')) @@ -1573,7 +1592,7 @@ class Settings: root.append(wwg.mesh.to_xml_element()) if mesh_memo is not None: - mesh_memo.add(wwg.mesh) + mesh_memo.add(wwg.mesh.id) def _create_weight_windows_file_element(self, root): if self.weight_windows_file is not None: @@ -1604,13 +1623,25 @@ class Settings: elem = ET.SubElement(root, "max_tracks") elem.text = str(self._max_tracks) - def _create_random_ray_subelement(self, root): + def _create_random_ray_subelement(self, root, mesh_memo=None): if self._random_ray: element = ET.SubElement(root, "random_ray") for key, value in self._random_ray.items(): if key == 'ray_source' and isinstance(value, SourceBase): source_element = value.to_xml_element() element.append(source_element) + elif key == 'source_region_meshes': + subelement = ET.SubElement(element, 'source_region_meshes') + for mesh, domains in value: + mesh_elem = ET.SubElement(subelement, 'mesh') + mesh_elem.set('id', str(mesh.id)) + for domain in domains: + domain_elem = ET.SubElement(mesh_elem, 'domain') + domain_elem.set('id', str(domain.id)) + domain_elem.set('type', domain.__class__.__name__.lower()) + if mesh_memo is not None and mesh.id not in mesh_memo: + root.append(mesh.to_xml_element()) + mesh_memo.add(mesh.id) else: subelement = ET.SubElement(element, key) subelement.text = str(value) @@ -2007,6 +2038,22 @@ class Settings: ) elif child.tag == 'sample_method': self.random_ray['sample_method'] = child.text + elif child.tag == 'source_region_meshes': + self.random_ray['source_region_meshes'] = [] + for mesh_elem in child.findall('mesh'): + mesh = MeshBase.from_xml_element(mesh_elem) + domains = [] + for domain_elem in mesh_elem.findall('domain'): + domain_id = int(domain_elem.get('id')) + domain_type = domain_elem.get('type') + if domain_type == 'material': + domain = openmc.Material(domain_id) + elif domain_type == 'cell': + domain = openmc.Cell(domain_id) + elif domain_type == 'universe': + domain = openmc.Universe(domain_id) + domains.append(domain) + self.random_ray['source_region_meshes'].append((mesh, domains)) def _use_decay_photons_from_xml_element(self, root): text = get_text(root, 'use_decay_photons') @@ -2077,7 +2124,7 @@ class Settings: self._create_weight_window_checkpoints_subelement(element) self._create_max_history_splits_subelement(element) self._create_max_tracks_subelement(element) - self._create_random_ray_subelement(element) + self._create_random_ray_subelement(element, mesh_memo) self._create_use_decay_photons_subelement(element) # Clean the indentation in the file to be user-readable diff --git a/src/finalize.cpp b/src/finalize.cpp index ad6f0cf62..ed3d0e7f4 100644 --- a/src/finalize.cpp +++ b/src/finalize.cpp @@ -17,6 +17,7 @@ #include "openmc/photon.h" #include "openmc/plot.h" #include "openmc/random_lcg.h" +#include "openmc/random_ray/random_ray_simulation.h" #include "openmc/settings.h" #include "openmc/simulation.h" #include "openmc/source.h" @@ -174,6 +175,8 @@ int openmc_finalize() MPI_Type_free(&mpi::source_site); #endif + openmc_reset_random_ray(); + return 0; } diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index ae0ecb824..33651574f 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -1,6 +1,7 @@ #include "openmc/random_ray/flat_source_domain.h" #include "openmc/cell.h" +#include "openmc/constants.h" #include "openmc/eigenvalue.h" #include "openmc/geometry.h" #include "openmc/material.h" @@ -14,6 +15,7 @@ #include "openmc/tallies/tally.h" #include "openmc/tallies/tally_scoring.h" #include "openmc/timer.h" +#include "openmc/weight_windows.h" #include @@ -28,6 +30,8 @@ RandomRayVolumeEstimator FlatSourceDomain::volume_estimator_ { RandomRayVolumeEstimator::HYBRID}; bool FlatSourceDomain::volume_normalized_flux_tallies_ {false}; bool FlatSourceDomain::adjoint_ {false}; +std::unordered_map>> + FlatSourceDomain::mesh_domain_map_; FlatSourceDomain::FlatSourceDomain() : negroups_(data::mg.num_energy_groups_) { @@ -35,20 +39,21 @@ FlatSourceDomain::FlatSourceDomain() : negroups_(data::mg.num_energy_groups_) // indices, and store the material type The reason for the offsets is that // some cell types may not have material fills, and therefore do not // produce FSRs. Thus, we cannot index into the global arrays directly + int base_source_regions = 0; for (const auto& c : model::cells) { if (c->type_ != Fill::MATERIAL) { source_region_offsets_.push_back(-1); } else { - source_region_offsets_.push_back(n_source_regions_); - n_source_regions_ += c->n_instances_; - n_source_elements_ += c->n_instances_ * negroups_; + source_region_offsets_.push_back(base_source_regions); + base_source_regions += c->n_instances_; } } - // Initialize cell-wise arrays + // Initialize source regions. bool is_linear = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; source_regions_ = SourceRegionContainer(negroups_, is_linear); - source_regions_.assign(n_source_regions_, SourceRegion(negroups_, is_linear)); + source_regions_.assign( + base_source_regions, SourceRegion(negroups_, is_linear)); // Initialize materials int64_t source_region_id = 0; @@ -62,7 +67,7 @@ FlatSourceDomain::FlatSourceDomain() : negroups_(data::mg.num_energy_groups_) } // Sanity check - if (source_region_id != n_source_regions_) { + if (source_region_id != base_source_regions) { fatal_error("Unexpected number of source regions"); } @@ -92,12 +97,13 @@ void FlatSourceDomain::batch_reset() { // Reset scalar fluxes and iteration volume tallies to zero #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { source_regions_.volume(sr) = 0.0; source_regions_.volume_sq(sr) = 0.0; } + #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { source_regions_.scalar_flux_new(se) = 0.0; } } @@ -105,7 +111,7 @@ void FlatSourceDomain::batch_reset() void FlatSourceDomain::accumulate_iteration_flux() { #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { source_regions_.scalar_flux_final(se) += source_regions_.scalar_flux_new(se); } @@ -121,13 +127,13 @@ void FlatSourceDomain::update_neutron_source(double k_eff) // Reset all source regions to zero (important for void regions) #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { source_regions_.source(se) = 0.0; } // Add scattering + fission source #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { int material = source_regions_.material(sr); if (material == MATERIAL_VOID) { continue; @@ -155,7 +161,7 @@ void FlatSourceDomain::update_neutron_source(double k_eff) // Add external source if in fixed source mode if (settings::run_mode == RunMode::FIXED_SOURCE) { #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { source_regions_.source(se) += source_regions_.external_source(se); } } @@ -174,14 +180,14 @@ void FlatSourceDomain::normalize_scalar_flux_and_volumes( // Normalize scalar flux to total distance travelled by all rays this // iteration #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { source_regions_.scalar_flux_new(se) *= normalization_factor; } // Accumulate cell-wise ray length tallies collected this iteration, then // update the simulation-averaged cell-wise volume estimates #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { source_regions_.volume_t(sr) += source_regions_.volume(sr); source_regions_.volume_sq_t(sr) += source_regions_.volume_sq(sr); source_regions_.volume_naive(sr) = @@ -225,9 +231,10 @@ void FlatSourceDomain::set_flux_to_source(int64_t sr, int g) int64_t FlatSourceDomain::add_source_to_scalar_flux() { int64_t n_hits = 0; + double inverse_batch = 1.0 / simulation::current_batch; #pragma omp parallel for reduction(+ : n_hits) - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { double volume_simulation_avg = source_regions_.volume(sr); double volume_iteration = source_regions_.volume_naive(sr); @@ -237,6 +244,14 @@ int64_t FlatSourceDomain::add_source_to_scalar_flux() n_hits++; } + // Set the SR to small status if its expected number of hits + // per iteration is less than 1.5 + if (source_regions_.n_hits(sr) * inverse_batch < MIN_HITS_PER_BATCH) { + source_regions_.is_small(sr) = 1; + } else { + source_regions_.is_small(sr) = 0; + } + // The volume treatment depends on the volume estimator type // and whether or not an external source is present in the cell. double volume; @@ -248,7 +263,8 @@ int64_t FlatSourceDomain::add_source_to_scalar_flux() volume = volume_simulation_avg; break; case RandomRayVolumeEstimator::HYBRID: - if (source_regions_.external_source_present(sr)) { + if (source_regions_.external_source_present(sr) || + source_regions_.is_small(sr)) { volume = volume_iteration; } else { volume = volume_simulation_avg; @@ -279,16 +295,12 @@ int64_t FlatSourceDomain::add_source_to_scalar_flux() // in the cell we will use the previous iteration's flux estimate. This // injects a small degree of correlation into the simulation, but this // is going to be trivial when the miss rate is a few percent or less. - if (source_regions_.external_source_present(sr)) { + if (source_regions_.external_source_present(sr) && !adjoint_) { set_flux_to_old_flux(sr, g); } else { set_flux_to_source(sr, g); } } - // If the FSR was not hit this iteration, and it has never been hit in - // any iteration (i.e., volume is zero), then we want to set this to 0 - // to avoid dividing anything by a zero volume. This happens implicitly - // given that the new scalar flux arrays are set to zero each iteration. } } @@ -304,10 +316,10 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const double fission_rate_new = 0; // Vector for gathering fission source terms for Shannon entropy calculation - vector p(n_source_regions_, 0.0f); + vector p(n_source_regions(), 0.0f); #pragma omp parallel for reduction(+ : fission_rate_old, fission_rate_new) - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { // If simulation averaged volume is zero, don't include this cell double volume = source_regions_.volume(sr); @@ -350,7 +362,7 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const double inverse_sum = 1 / fission_rate_new; #pragma omp parallel for reduction(+ : H) - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { // Only if FSR has non-negative and non-zero fission source if (p[sr] > 0.0f) { // Normalize to total weight of bank sites. p_i for better performance @@ -408,7 +420,7 @@ void FlatSourceDomain::convert_source_regions_to_tallies() // Attempt to generate mapping for all source regions #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { // If this source region has not been hit by a ray yet, then // we aren't going to be able to map it, so skip it. @@ -423,6 +435,7 @@ void FlatSourceDomain::convert_source_regions_to_tallies() Particle p; p.r() = source_regions_.position(sr); p.r_last() = source_regions_.position(sr); + p.u() = {1.0, 0.0, 0.0}; bool found = exhaustive_find_cell(p); // Loop over energy groups (so as to support energy filters) @@ -517,7 +530,7 @@ double FlatSourceDomain::compute_fixed_source_normalization_factor() const // total external source strength in the simulation. double simulation_external_source_strength = 0.0; #pragma omp parallel for reduction(+ : simulation_external_source_strength) - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { int material = source_regions_.material(sr); double volume = source_regions_.volume(sr) * simulation_volume_; for (int g = 0; g < negroups_; g++) { @@ -570,7 +583,7 @@ void FlatSourceDomain::random_ray_tally() // element, we check if there are any scores needed and apply // them. #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { // The fsr.volume_ is the unitless fractional simulation averaged volume // (i.e., it is the FSR's fraction of the overall simulation volume). The // simulation_volume_ is the total 3D physical volume in cm^3 of the @@ -673,30 +686,6 @@ void FlatSourceDomain::random_ray_tally() openmc::simulation::time_tallies.stop(); } -void FlatSourceDomain::all_reduce_replicated_source_regions() -{ -#ifdef OPENMC_MPI - // If we only have 1 MPI rank, no need - // to reduce anything. - if (mpi::n_procs <= 1) - return; - - simulation::time_bank_sendrecv.start(); - - // First, we broadcast the fully mapped tally status variable so that - // all ranks are on the same page - int mapped_all_tallies_i = static_cast(mapped_all_tallies_); - MPI_Bcast(&mapped_all_tallies_i, 1, MPI_INT, 0, mpi::intracomm); - - bool reduce_position = - simulation::current_batch > settings::n_inactive && !mapped_all_tallies_i; - - source_regions_.mpi_sync_ranks(reduce_position); - - simulation::time_bank_sendrecv.stop(); -#endif -} - double FlatSourceDomain::evaluate_flux_at_point( Position r, int64_t sr, int g) const { @@ -765,8 +754,9 @@ void FlatSourceDomain::output_to_vtk() const // Relate voxel spatial locations to random ray source regions vector voxel_indices(Nx * Ny * Nz); vector voxel_positions(Nx * Ny * Nz); - -#pragma omp parallel for collapse(3) + vector weight_windows(Nx * Ny * Nz); + float min_weight = 1e20; +#pragma omp parallel for collapse(3) reduction(min : min_weight) for (int z = 0; z < Nz; z++) { for (int y = 0; y < Ny; y++) { for (int x = 0; x < Nx; x++) { @@ -776,12 +766,49 @@ void FlatSourceDomain::output_to_vtk() const sample.x = ll.x + x_delta / 2.0 + x * x_delta; Particle p; p.r() = sample; + p.r_last() = sample; + p.E() = 1.0; + p.E_last() = 1.0; + p.u() = {1.0, 0.0, 0.0}; + bool found = exhaustive_find_cell(p); + if (!found) { + voxel_indices[z * Ny * Nx + y * Nx + x] = -1; + voxel_positions[z * Ny * Nx + y * Nx + x] = sample; + weight_windows[z * Ny * Nx + y * Nx + x] = 0.0; + continue; + } + int i_cell = p.lowest_coord().cell; - int64_t source_region_idx = - source_region_offsets_[i_cell] + p.cell_instance(); - voxel_indices[z * Ny * Nx + y * Nx + x] = source_region_idx; + int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); + if (RandomRay::mesh_subdivision_enabled_) { + int mesh_idx = base_source_regions_.mesh(sr); + int mesh_bin; + if (mesh_idx == C_NONE) { + mesh_bin = 0; + } else { + mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); + } + SourceRegionKey sr_key {sr, mesh_bin}; + auto it = source_region_map_.find(sr_key); + if (it != source_region_map_.end()) { + sr = it->second; + } else { + sr = -1; + } + } + + voxel_indices[z * Ny * Nx + y * Nx + x] = sr; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; + + if (variance_reduction::weight_windows.size() == 1) { + WeightWindow ww = + variance_reduction::weight_windows[0]->get_weight_window(p); + float weight = ww.lower_weight; + weight_windows[z * Ny * Nx + y * Nx + x] = weight; + if (weight < min_weight) + min_weight = weight; + } } } } @@ -798,10 +825,14 @@ void FlatSourceDomain::output_to_vtk() const std::fprintf(plot, "BINARY\n"); std::fprintf(plot, "DATASET STRUCTURED_POINTS\n"); std::fprintf(plot, "DIMENSIONS %d %d %d\n", Nx, Ny, Nz); - std::fprintf(plot, "ORIGIN 0 0 0\n"); + std::fprintf(plot, "ORIGIN %lf %lf %lf\n", ll.x, ll.y, ll.z); std::fprintf(plot, "SPACING %lf %lf %lf\n", x_delta, y_delta, z_delta); std::fprintf(plot, "POINT_DATA %d\n", Nx * Ny * Nz); + int64_t num_neg = 0; + int64_t num_samples = 0; + float min_flux = 0.0; + float max_flux = -1.0e20; // Plot multigroup flux data for (int g = 0; g < negroups_; g++) { std::fprintf(plot, "SCALARS flux_group_%d float\n", g); @@ -809,12 +840,36 @@ void FlatSourceDomain::output_to_vtk() const for (int i = 0; i < Nx * Ny * Nz; i++) { int64_t fsr = voxel_indices[i]; int64_t source_element = fsr * negroups_ + g; - float flux = evaluate_flux_at_point(voxel_positions[i], fsr, g); + float flux = 0; + if (fsr >= 0) { + flux = evaluate_flux_at_point(voxel_positions[i], fsr, g); + if (flux < 0.0) + flux = FlatSourceDomain::evaluate_flux_at_point( + voxel_positions[i], fsr, g); + } + if (flux < 0.0) { + num_neg++; + if (flux < min_flux) { + min_flux = flux; + } + } + if (flux > max_flux) + max_flux = flux; + num_samples++; flux = convert_to_big_endian(flux); std::fwrite(&flux, sizeof(float), 1, plot); } } + // Slightly negative fluxes can be normal when sampling corners of linear + // source regions. However, very common and high magnitude negative fluxes + // may indicate numerical instability. + if (num_neg > 0) { + warning(fmt::format("{} plot samples ({:.4f}%) contained negative fluxes " + "(minumum found = {:.2e} maximum_found = {:.2e})", + num_neg, (100.0 * num_neg) / num_samples, min_flux, max_flux)); + } + // Plot FSRs std::fprintf(plot, "SCALARS FSRs float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); @@ -828,7 +883,9 @@ void FlatSourceDomain::output_to_vtk() const std::fprintf(plot, "SCALARS Materials int\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); for (int fsr : voxel_indices) { - int mat = source_regions_.material(fsr); + int mat = -1; + if (fsr >= 0) + mat = source_regions_.material(fsr); mat = convert_to_big_endian(mat); std::fwrite(&mat, sizeof(int), 1, plot); } @@ -839,15 +896,16 @@ void FlatSourceDomain::output_to_vtk() const std::fprintf(plot, "LOOKUP_TABLE default\n"); for (int i = 0; i < Nx * Ny * Nz; i++) { int64_t fsr = voxel_indices[i]; - float total_fission = 0.0; - int mat = source_regions_.material(fsr); - if (mat != MATERIAL_VOID) { - for (int g = 0; g < negroups_; g++) { - int64_t source_element = fsr * negroups_ + g; - float flux = evaluate_flux_at_point(voxel_positions[i], fsr, g); - double sigma_f = sigma_f_[mat * negroups_ + g]; - total_fission += sigma_f * flux; + if (fsr >= 0) { + int mat = source_regions_.material(fsr); + if (mat != MATERIAL_VOID) { + for (int g = 0; g < negroups_; g++) { + int64_t source_element = fsr * negroups_ + g; + float flux = evaluate_flux_at_point(voxel_positions[i], fsr, g); + double sigma_f = sigma_f_[mat * negroups_ + g]; + total_fission += sigma_f * flux; + } } } total_fission = convert_to_big_endian(total_fission); @@ -859,14 +917,29 @@ void FlatSourceDomain::output_to_vtk() const for (int i = 0; i < Nx * Ny * Nz; i++) { int64_t fsr = voxel_indices[i]; float total_external = 0.0f; - for (int g = 0; g < negroups_; g++) { - total_external += source_regions_.external_source(fsr, g); + if (fsr >= 0) { + for (int g = 0; g < negroups_; g++) { + total_external += source_regions_.external_source(fsr, g); + } } total_external = convert_to_big_endian(total_external); std::fwrite(&total_external, sizeof(float), 1, plot); } } + // Plot weight window data + if (variance_reduction::weight_windows.size() == 1) { + std::fprintf(plot, "SCALARS weight_window_lower float\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + for (int i = 0; i < Nx * Ny * Nz; i++) { + float weight = weight_windows[i]; + if (weight == 0.0) + weight = min_weight; + weight = convert_to_big_endian(weight); + std::fwrite(&weight, sizeof(float), 1, plot); + } + } + std::fclose(plot); } } @@ -938,7 +1011,7 @@ void FlatSourceDomain::count_external_source_regions() { n_external_source_regions_ = 0; #pragma omp parallel for reduction(+ : n_external_source_regions_) - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { if (source_regions_.external_source_present(sr)) { n_external_source_regions_++; } @@ -984,7 +1057,7 @@ void FlatSourceDomain::convert_external_sources() // Divide the fixed source term by sigma t (to save time when applying each // iteration) #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { int material = source_regions_.material(sr); if (material == MATERIAL_VOID) { continue; @@ -1056,7 +1129,7 @@ void FlatSourceDomain::set_adjoint_sources(const vector& forward_flux) // small in magnitude, but rather due to the source region being physically // small in volume and thus having a noisy flux estimate. #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { for (int g = 0; g < negroups_; g++) { double flux = forward_flux[sr * negroups_ + g]; if (flux <= 0.0) { @@ -1064,13 +1137,16 @@ void FlatSourceDomain::set_adjoint_sources(const vector& forward_flux) } else { source_regions_.external_source(sr, g) = 1.0 / flux; } + if (flux > 0.0) { + source_regions_.external_source_present(sr) = 1; + } } } // Divide the fixed source term by sigma t (to save time when applying each // iteration) #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { int material = source_regions_.material(sr); if (material == MATERIAL_VOID) { continue; @@ -1103,12 +1179,252 @@ void FlatSourceDomain::transpose_scattering_matrix() void FlatSourceDomain::serialize_final_fluxes(vector& flux) { // Ensure array is correct size - flux.resize(n_source_regions_ * negroups_); + flux.resize(n_source_regions() * negroups_); // Serialize the final fluxes for output #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { flux[se] = source_regions_.scalar_flux_final(se); } } +void FlatSourceDomain::apply_mesh_to_cell_instances(int32_t i_cell, + int32_t mesh_idx, int target_material_id, const vector& instances, + bool is_target_void) +{ + Cell& cell = *model::cells[i_cell]; + if (cell.type_ != Fill::MATERIAL) + return; + for (int32_t j : instances) { + int cell_material_idx = cell.material(j); + int cell_material_id = (cell_material_idx == C_NONE) + ? C_NONE + : model::materials[cell_material_idx]->id(); + + if ((target_material_id == C_NONE && !is_target_void) || + cell_material_id == target_material_id) { + int64_t sr = source_region_offsets_[i_cell] + j; + if (source_regions_.mesh(sr) != C_NONE) { + // print out the source region that is broken: + fatal_error(fmt::format("Source region {} already has mesh idx {} " + "applied, but trying to apply mesh idx {}", + sr, source_regions_.mesh(sr), mesh_idx)); + } + source_regions_.mesh(sr) = mesh_idx; + } + } +} + +void FlatSourceDomain::apply_mesh_to_cell_and_children(int32_t i_cell, + int32_t mesh_idx, int32_t target_material_id, bool is_target_void) +{ + Cell& cell = *model::cells[i_cell]; + + if (cell.type_ == Fill::MATERIAL) { + vector instances(cell.n_instances_); + std::iota(instances.begin(), instances.end(), 0); + apply_mesh_to_cell_instances( + i_cell, mesh_idx, target_material_id, instances, is_target_void); + } else if (target_material_id == C_NONE && !is_target_void) { + for (int j = 0; j < cell.n_instances_; j++) { + std::unordered_map> cell_instance_list = + cell.get_contained_cells(j, nullptr); + for (const auto& pair : cell_instance_list) { + int32_t i_child_cell = pair.first; + apply_mesh_to_cell_instances(i_child_cell, mesh_idx, target_material_id, + pair.second, is_target_void); + } + } + } +} + +void FlatSourceDomain::apply_meshes() +{ + // Skip if there are no mappings between mesh IDs and domains + if (mesh_domain_map_.empty()) + return; + + // Loop over meshes + for (int mesh_idx = 0; mesh_idx < model::meshes.size(); mesh_idx++) { + Mesh* mesh = model::meshes[mesh_idx].get(); + int mesh_id = mesh->id(); + + // Skip if mesh id is not present in the map + if (mesh_domain_map_.find(mesh_id) == mesh_domain_map_.end()) + continue; + + // Loop over domains associated with the mesh + for (auto& domain : mesh_domain_map_[mesh_id]) { + Source::DomainType domain_type = domain.first; + int domain_id = domain.second; + + if (domain_type == Source::DomainType::MATERIAL) { + for (int i_cell = 0; i_cell < model::cells.size(); i_cell++) { + if (domain_id == C_NONE) { + apply_mesh_to_cell_and_children(i_cell, mesh_idx, domain_id, true); + } else { + apply_mesh_to_cell_and_children(i_cell, mesh_idx, domain_id, false); + } + } + } else if (domain_type == Source::DomainType::CELL) { + int32_t i_cell = model::cell_map[domain_id]; + apply_mesh_to_cell_and_children(i_cell, mesh_idx, C_NONE, false); + } else if (domain_type == Source::DomainType::UNIVERSE) { + int32_t i_universe = model::universe_map[domain_id]; + Universe& universe = *model::universes[i_universe]; + for (int32_t i_cell : universe.cells_) { + apply_mesh_to_cell_and_children(i_cell, mesh_idx, C_NONE, false); + } + } + } + } +} + +void FlatSourceDomain::prepare_base_source_regions() +{ + std::swap(source_regions_, base_source_regions_); + source_regions_.negroups() = base_source_regions_.negroups(); + source_regions_.is_linear() = base_source_regions_.is_linear(); +} + +SourceRegionHandle FlatSourceDomain::get_subdivided_source_region_handle( + int64_t sr, int mesh_bin, Position r, double dist, Direction u) +{ + SourceRegionKey sr_key {sr, mesh_bin}; + + // Case 1: Check if the source region key is already present in the permanent + // map. This is the most common condition, as any source region visited in a + // previous power iteration will already be present in the permanent map. If + // the source region key is found, we translate the key into a specific 1D + // source region index and return a handle its position in the + // source_regions_ vector. + auto it = source_region_map_.find(sr_key); + if (it != source_region_map_.end()) { + int64_t sr = it->second; + return source_regions_.get_source_region_handle(sr); + } + + // Case 2: Check if the source region key is present in the temporary (thread + // safe) map. This is a common occurrence in the first power iteration when + // the source region has already been visited already by some other ray. We + // begin by locking the temporary map before any operations are performed. The + // lock is not global over the full data structure -- it will be dependent on + // which key is used. + discovered_source_regions_.lock(sr_key); + + // If the key is found in the temporary map, then we return a handle to the + // source region that is stored in the temporary map. + if (discovered_source_regions_.contains(sr_key)) { + SourceRegionHandle handle {discovered_source_regions_[sr_key]}; + discovered_source_regions_.unlock(sr_key); + return handle; + } + + // Case 3: The source region key is not present anywhere, but it is only due + // to floating point artifacts. These artifacts occur when the overlaid mesh + // overlaps with actual geometry surfaces. In these cases, roundoff error may + // result in the ray tracer detecting an additional (very short) segment + // though a mesh bin that is actually past the physical source region + // boundary. This is a result of the the multi-level ray tracing treatment in + // OpenMC, which depending on the number of universes in the hierarchy etc can + // result in the wrong surface being selected as the nearest. This can happen + // in a lattice when there are two directions that both are very close in + // distance, within the tolerance of FP_REL_PRECISION, and the are thus + // treated as being equivalent so alternative logic is used. However, when we + // go and ray trace on this with the mesh tracer we may go past the surface + // bounding the current source region. + // + // To filter out this case, before we create the new source region, we double + // check that the actual starting point of this segment (r) is still in the + // same geometry source region that we started in. If an artifact is detected, + // we discard the segment (and attenuation through it) as it is not really a + // valid source region and will have only an infinitessimally small cell + // combined with the mesh bin. Thankfully, this is a fairly rare condition, + // and only triggers for very short ray lengths. It can be fixed by decreasing + // the value of FP_REL_PRECISION in constants.h, but this may have unknown + // consequences for the general ray tracer, so for now we do the below sanity + // checks before generating phantom source regions. A significant extra cost + // is incurred in instantiating the GeometryState object and doing a cell + // lookup, but again, this is going to be an extremely rare thing to check + // after the first power iteration has completed. + + // Sanity check on source region id + GeometryState gs; + gs.r() = r + TINY_BIT * u; + gs.u() = {1.0, 0.0, 0.0}; + exhaustive_find_cell(gs); + int gs_i_cell = gs.lowest_coord().cell; + int64_t sr_found = source_region_offsets_[gs_i_cell] + gs.cell_instance(); + if (sr_found != sr) { + discovered_source_regions_.unlock(sr_key); + SourceRegionHandle handle; + handle.is_numerical_fp_artifact_ = true; + return handle; + } + + // Sanity check on mesh bin + int mesh_idx = base_source_regions_.mesh(sr); + if (mesh_idx == C_NONE) { + if (mesh_bin != 0) { + discovered_source_regions_.unlock(sr_key); + SourceRegionHandle handle; + handle.is_numerical_fp_artifact_ = true; + return handle; + } + } else { + Mesh* mesh = model::meshes[mesh_idx].get(); + int bin_found = mesh->get_bin(r + TINY_BIT * u); + if (bin_found != mesh_bin) { + discovered_source_regions_.unlock(sr_key); + SourceRegionHandle handle; + handle.is_numerical_fp_artifact_ = true; + return handle; + } + } + + // Case 4: The source region key is valid, but is not present anywhere. This + // condition only occurs the first time the source region is discovered + // (typically in the first power iteration). In this case, we need to handle + // creation of the new source region and its storage into the parallel map. + // The new source region is created by copying the base source region, so as + // to inherit material, external source, and some flux properties etc. We + // also pass the base source region id to allow the new source region to + // know which base source region it is derived from. + SourceRegion* sr_ptr = discovered_source_regions_.emplace( + sr_key, {base_source_regions_.get_source_region_handle(sr), sr}); + discovered_source_regions_.unlock(sr_key); + SourceRegionHandle handle {*sr_ptr}; + return handle; +} + +void FlatSourceDomain::finalize_discovered_source_regions() +{ + // Extract keys for entries with a valid volume. + vector keys; + for (const auto& pair : discovered_source_regions_) { + if (pair.second.volume_ > 0.0) { + keys.push_back(pair.first); + } + } + + if (!keys.empty()) { + // Sort the keys, so as to ensure reproducible ordering given that source + // regions may have been added to discovered_source_regions_ in an arbitrary + // order due to shared memory threading. + std::sort(keys.begin(), keys.end()); + + // Append the source regions in the sorted key order. + for (const auto& key : keys) { + const SourceRegion& sr = discovered_source_regions_[key]; + source_region_map_[key] = source_regions_.n_source_regions(); + source_regions_.push_back(sr); + } + + // If any new source regions were discovered, we need to update the + // tally mapping between source regions and tally bins. + mapped_all_tallies_ = false; + } + + discovered_source_regions_.clear(); +} + } // namespace openmc diff --git a/src/random_ray/linear_source_domain.cpp b/src/random_ray/linear_source_domain.cpp index 3819c7d70..81412164e 100644 --- a/src/random_ray/linear_source_domain.cpp +++ b/src/random_ray/linear_source_domain.cpp @@ -24,12 +24,12 @@ void LinearSourceDomain::batch_reset() { FlatSourceDomain::batch_reset(); #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { source_regions_.centroid_iteration(sr) = {0.0, 0.0, 0.0}; source_regions_.mom_matrix(sr) = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; } #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { source_regions_.flux_moments_new(se) = {0.0, 0.0, 0.0}; } } @@ -40,8 +40,14 @@ void LinearSourceDomain::update_neutron_source(double k_eff) double inverse_k_eff = 1.0 / k_eff; +// Reset all source regions to zero (important for void regions) #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t se = 0; se < n_source_elements(); se++) { + source_regions_.source(se) = 0.0; + } + +#pragma omp parallel for + for (int64_t sr = 0; sr < n_source_regions(); sr++) { int material = source_regions_.material(sr); if (material == MATERIAL_VOID) { continue; @@ -98,7 +104,7 @@ void LinearSourceDomain::update_neutron_source(double k_eff) if (settings::run_mode == RunMode::FIXED_SOURCE) { // Add external source to flat source term if in fixed source mode #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { source_regions_.source(se) += source_regions_.external_source(se); } } @@ -115,7 +121,7 @@ void LinearSourceDomain::normalize_scalar_flux_and_volumes( // Normalize flux to total distance travelled by all rays this iteration #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { source_regions_.scalar_flux_new(se) *= normalization_factor; source_regions_.flux_moments_new(se) *= normalization_factor; } @@ -123,7 +129,7 @@ void LinearSourceDomain::normalize_scalar_flux_and_volumes( // Accumulate cell-wise ray length tallies collected this iteration, then // update the simulation-averaged cell-wise volume estimates #pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions_; sr++) { + for (int64_t sr = 0; sr < n_source_regions(); sr++) { source_regions_.centroid_t(sr) += source_regions_.centroid_iteration(sr); source_regions_.mom_matrix_t(sr) += source_regions_.mom_matrix(sr); source_regions_.volume_t(sr) += source_regions_.volume(sr); @@ -154,13 +160,22 @@ void LinearSourceDomain::set_flux_to_flux_plus_source( source_regions_.scalar_flux_new(sr, g) /= volume; source_regions_.scalar_flux_new(sr, g) += source_regions_.source(sr, g); } - source_regions_.flux_moments_new(sr, g) *= (1.0 / volume); + // If a source region is small, then the moments are likely noisy, so we zero + // them. This is reasonable, given that small regions can get by with a flat + // source approximation anyhow. + if (source_regions_.is_small(sr)) { + source_regions_.flux_moments_new(sr, g) = {0.0, 0.0, 0.0}; + } else { + source_regions_.flux_moments_new(sr, g) *= (1.0 / volume); + } } void LinearSourceDomain::set_flux_to_old_flux(int64_t sr, int g) { - source_regions_.scalar_flux_new(g) = source_regions_.scalar_flux_old(g); - source_regions_.flux_moments_new(g) = source_regions_.flux_moments_old(g); + source_regions_.scalar_flux_new(sr, g) = + source_regions_.scalar_flux_old(sr, g); + source_regions_.flux_moments_new(sr, g) = + source_regions_.flux_moments_old(sr, g); } void LinearSourceDomain::accumulate_iteration_flux() @@ -170,7 +185,7 @@ void LinearSourceDomain::accumulate_iteration_flux() // Accumulate scalar flux moments #pragma omp parallel for - for (int64_t se = 0; se < n_source_elements_; se++) { + for (int64_t se = 0; se < n_source_elements(); se++) { source_regions_.flux_moments_t(se) += source_regions_.flux_moments_new(se); } } diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index f9ebb6f9d..9a9d1394a 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -237,6 +237,7 @@ double RandomRay::distance_inactive_; double RandomRay::distance_active_; unique_ptr RandomRay::ray_source_; RandomRaySourceShape RandomRay::source_shape_ {RandomRaySourceShape::FLAT}; +bool RandomRay::mesh_subdivision_enabled_ {false}; RandomRaySampleMethod RandomRay::sample_method_ {RandomRaySampleMethod::PRNG}; RandomRay::RandomRay() @@ -313,7 +314,7 @@ void RandomRay::event_advance_ray() wgt() = 0.0; } - attenuate_flux(distance_alive, true); + attenuate_flux(distance_alive, true, distance_dead); distance_travelled_ = distance_alive; } else { distance_travelled_ += distance; @@ -327,23 +328,84 @@ void RandomRay::event_advance_ray() } } -void RandomRay::attenuate_flux(double distance, bool is_active) +void RandomRay::attenuate_flux(double distance, bool is_active, double offset) { + // Determine source region index etc. + int i_cell = lowest_coord().cell; + + // The base source region is the spatial region index + int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); + + // Perform ray tracing across mesh + if (mesh_subdivision_enabled_) { + // Determine the mesh index for the base source region, if any + int mesh_idx = domain_->base_source_regions_.mesh(sr); + + if (mesh_idx == C_NONE) { + // If there's no mesh being applied to this cell, then + // we just attenuate the flux as normal, and set + // the mesh bin to 0 + attenuate_flux_inner(distance, is_active, sr, 0, r()); + } else { + // If there is a mesh being applied to this cell, then + // we loop over all the bin crossings and attenuate + // separately. + Mesh* mesh = model::meshes[mesh_idx].get(); + + // We adjust the start and end positions of the ray slightly + // to accomodate for floating point precision issues that tend + // to occur at mesh boundaries that overlap with geometry lattice + // boundaries. + Position start = r() + (offset + TINY_BIT) * u(); + Position end = start + (distance - 2.0 * TINY_BIT) * u(); + double reduced_distance = (end - start).norm(); + + // Ray trace through the mesh and record bins and lengths + mesh_bins_.resize(0); + mesh_fractional_lengths_.resize(0); + mesh->bins_crossed(start, end, u(), mesh_bins_, mesh_fractional_lengths_); + + // Loop over all mesh bins and attenuate flux + for (int b = 0; b < mesh_bins_.size(); b++) { + double physical_length = reduced_distance * mesh_fractional_lengths_[b]; + attenuate_flux_inner( + physical_length, is_active, sr, mesh_bins_[b], start); + start += physical_length * u(); + } + } + } else { + attenuate_flux_inner(distance, is_active, sr, C_NONE, r()); + } +} + +void RandomRay::attenuate_flux_inner( + double distance, bool is_active, int64_t sr, int mesh_bin, Position r) +{ + SourceRegionHandle srh; + if (mesh_subdivision_enabled_) { + srh = domain_->get_subdivided_source_region_handle( + sr, mesh_bin, r, distance, u()); + if (srh.is_numerical_fp_artifact_) { + return; + } + } else { + srh = domain_->source_regions_.get_source_region_handle(sr); + } switch (source_shape_) { case RandomRaySourceShape::FLAT: if (this->material() == MATERIAL_VOID) { - attenuate_flux_flat_source_void(distance, is_active); + attenuate_flux_flat_source_void(srh, distance, is_active, r); } else { - attenuate_flux_flat_source(distance, is_active); + attenuate_flux_flat_source(srh, distance, is_active, r); } break; case RandomRaySourceShape::LINEAR: case RandomRaySourceShape::LINEAR_XY: if (this->material() == MATERIAL_VOID) { - attenuate_flux_linear_source_void(distance, is_active); + attenuate_flux_linear_source_void(srh, distance, is_active, r); } else { - attenuate_flux_linear_source(distance, is_active); + attenuate_flux_linear_source(srh, distance, is_active, r); } break; default: @@ -364,18 +426,13 @@ void RandomRay::attenuate_flux(double distance, bool is_active) // than use of many atomic operations corresponding to each energy group // individually (at least on CPU). Several other bookkeeping tasks are also // performed when inside the lock. -void RandomRay::attenuate_flux_flat_source(double distance, bool is_active) +void RandomRay::attenuate_flux_flat_source( + SourceRegionHandle& srh, double distance, bool is_active, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; - // Determine source region index etc. - int i_cell = lowest_coord().cell; - - // The source region is the spatial region index - int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); - - // The source element is the energy-specific region index + // Get material int material = this->material(); // MOC incoming flux attenuation + source contribution/attenuation equation @@ -383,115 +440,99 @@ void RandomRay::attenuate_flux_flat_source(double distance, bool is_active) float sigma_t = domain_->sigma_t_[material * negroups_ + g]; float tau = sigma_t * distance; float exponential = cjosey_exponential(tau); // exponential = 1 - exp(-tau) - float new_delta_psi = - (angular_flux_[g] - domain_->source_regions_.source(sr, g)) * exponential; + float new_delta_psi = (angular_flux_[g] - srh.source(g)) * exponential; delta_psi_[g] = new_delta_psi; angular_flux_[g] -= new_delta_psi; } // If ray is in the active phase (not in dead zone), make contributions to // source region bookkeeping + + // Aquire lock for source region + srh.lock(); + if (is_active) { - - // Aquire lock for source region - domain_->source_regions_.lock(sr).lock(); - // Accumulate delta psi into new estimate of source region flux for // this iteration for (int g = 0; g < negroups_; g++) { - domain_->source_regions_.scalar_flux_new(sr, g) += delta_psi_[g]; + srh.scalar_flux_new(g) += delta_psi_[g]; } // Accomulate volume (ray distance) into this iteration's estimate // of the source region's volume - domain_->source_regions_.volume(sr) += distance; + srh.volume() += distance; - // Tally valid position inside the source region (e.g., midpoint of - // the ray) if not done already - if (!domain_->source_regions_.position_recorded(sr)) { - Position midpoint = r() + u() * (distance / 2.0); - domain_->source_regions_.position(sr) = midpoint; - domain_->source_regions_.position_recorded(sr) = 1; - } - - // Release lock - domain_->source_regions_.lock(sr).unlock(); + srh.n_hits() += 1; } + + // Tally valid position inside the source region (e.g., midpoint of + // the ray) if not done already + if (!srh.position_recorded()) { + Position midpoint = r + u() * (distance / 2.0); + srh.position() = midpoint; + srh.position_recorded() = 1; + } + + // Release lock + srh.unlock(); } // Alternative flux attenuation function for true void regions. -void RandomRay::attenuate_flux_flat_source_void(double distance, bool is_active) +void RandomRay::attenuate_flux_flat_source_void( + SourceRegionHandle& srh, double distance, bool is_active, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; - // Determine source region index etc. - int i_cell = lowest_coord().cell; - - // The source region is the spatial region index - int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); + int material = this->material(); // If ray is in the active phase (not in dead zone), make contributions to // source region bookkeeping if (is_active) { // Aquire lock for source region - domain_->source_regions_.lock(sr).lock(); + srh.lock(); // Accumulate delta psi into new estimate of source region flux for // this iteration for (int g = 0; g < negroups_; g++) { - domain_->source_regions_.scalar_flux_new(sr, g) += - angular_flux_[g] * distance; + srh.scalar_flux_new(g) += angular_flux_[g] * distance; } // Accomulate volume (ray distance) into this iteration's estimate // of the source region's volume - domain_->source_regions_.volume(sr) += distance; - domain_->source_regions_.volume_sq(sr) += distance * distance; + srh.volume() += distance; + srh.volume_sq() += distance * distance; + srh.n_hits() += 1; // Tally valid position inside the source region (e.g., midpoint of // the ray) if not done already - if (!domain_->source_regions_.position_recorded(sr)) { - Position midpoint = r() + u() * (distance / 2.0); - domain_->source_regions_.position(sr) = midpoint; - domain_->source_regions_.position_recorded(sr) = 1; + if (!srh.position_recorded()) { + Position midpoint = r + u() * (distance / 2.0); + srh.position() = midpoint; + srh.position_recorded() = 1; } // Release lock - domain_->source_regions_.lock(sr).unlock(); + srh.unlock(); } // Add source to incoming angular flux, assuming void region for (int g = 0; g < negroups_; g++) { - angular_flux_[g] += - domain_->source_regions_.external_source(sr, g) * distance; + angular_flux_[g] += srh.external_source(g) * distance; } } -void RandomRay::attenuate_flux_linear_source(double distance, bool is_active) +void RandomRay::attenuate_flux_linear_source( + SourceRegionHandle& srh, double distance, bool is_active, Position r) { - // Cast domain to LinearSourceDomain - LinearSourceDomain* domain = dynamic_cast(domain_); - if (!domain) { - fatal_error("RandomRay::attenuate_flux_linear_source() called with " - "non-LinearSourceDomain domain."); - } - // The number of geometric intersections is counted for reporting purposes n_event()++; - // Determine source region index etc. - int i_cell = lowest_coord().cell; - - // The source region is the spatial region index - int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); - - // The source element is the energy-specific region index int material = this->material(); - Position& centroid = domain_->source_regions_.centroid(sr); - Position midpoint = r() + u() * (distance / 2.0); + Position& centroid = srh.centroid(); + Position midpoint = r + u() * (distance / 2.0); // Determine the local position of the midpoint and the ray origin // relative to the source region's centroid @@ -503,9 +544,9 @@ void RandomRay::attenuate_flux_linear_source(double distance, bool is_active) // be no estimate of its centroid. We detect this by checking if it has // any accumulated volume. If its volume is zero, just use the midpoint // of the ray as the region's centroid. - if (domain_->source_regions_.volume_t(sr)) { + if (srh.volume_t()) { rm_local = midpoint - centroid; - r0_local = r() - centroid; + r0_local = r - centroid; } else { rm_local = {0.0, 0.0, 0.0}; r0_local = -u() * 0.5 * distance; @@ -530,10 +571,8 @@ void RandomRay::attenuate_flux_linear_source(double distance, bool is_active) // calculated from the source gradients dot product with local centroid // and direction, respectively. float spatial_source = - domain_->source_regions_.source(sr, g) + - rm_local.dot(domain_->source_regions_.source_gradients(sr, g)); - float dir_source = - u().dot(domain_->source_regions_.source_gradients(sr, g)); + srh.source(g) + rm_local.dot(srh.source_gradients(g)); + float dir_source = u().dot(srh.source_gradients(g)); float gn = exponentialG(tau); float f1 = 1.0f - tau * gn; @@ -566,44 +605,47 @@ void RandomRay::attenuate_flux_linear_source(double distance, bool is_active) } } + // Compute an estimate of the spatial moments matrix for the source + // region based on parameters from this ray's crossing + MomentMatrix moment_matrix_estimate; + moment_matrix_estimate.compute_spatial_moments_matrix( + rm_local, u(), distance); + + // Aquire lock for source region + srh.lock(); + // If ray is in the active phase (not in dead zone), make contributions to // source region bookkeeping + if (is_active) { - // Compute an estimate of the spatial moments matrix for the source - // region based on parameters from this ray's crossing - MomentMatrix moment_matrix_estimate; - moment_matrix_estimate.compute_spatial_moments_matrix( - rm_local, u(), distance); - - // Aquire lock for source region - domain_->source_regions_.lock(sr).lock(); - // Accumulate deltas into the new estimate of source region flux for this // iteration for (int g = 0; g < negroups_; g++) { - domain_->source_regions_.scalar_flux_new(sr, g) += delta_psi_[g]; - domain_->source_regions_.flux_moments_new(sr, g) += delta_moments_[g]; + srh.scalar_flux_new(g) += delta_psi_[g]; + srh.flux_moments_new(g) += delta_moments_[g]; } // Accumulate the volume (ray segment distance), centroid, and spatial // momement estimates into the running totals for the iteration for this - // source region. The centroid and spatial momements estimates are scaled by - // the ray segment length as part of length averaging of the estimates. - domain_->source_regions_.volume(sr) += distance; - domain_->source_regions_.centroid_iteration(sr) += midpoint * distance; + // source region. The centroid and spatial momements estimates are scaled + // by the ray segment length as part of length averaging of the estimates. + srh.volume() += distance; + srh.centroid_iteration() += midpoint * distance; moment_matrix_estimate *= distance; - domain_->source_regions_.mom_matrix(sr) += moment_matrix_estimate; + srh.mom_matrix() += moment_matrix_estimate; - // Tally valid position inside the source region (e.g., midpoint of - // the ray) if not done already - if (!domain_->source_regions_.position_recorded(sr)) { - domain_->source_regions_.position(sr) = midpoint; - domain_->source_regions_.position_recorded(sr) = 1; - } - - // Release lock - domain_->source_regions_.lock(sr).unlock(); + srh.n_hits() += 1; } + + // Tally valid position inside the source region (e.g., midpoint of + // the ray) if not done already + if (!srh.position_recorded()) { + srh.position() = midpoint; + srh.position_recorded() = 1; + } + + // Release lock + srh.unlock(); } // If traveling through a void region, the source term is either zero @@ -615,26 +657,13 @@ void RandomRay::attenuate_flux_linear_source(double distance, bool is_active) // estimating the flux at specific pixel coordinates. Thus, plots will look // nicer/more accurate if we record flux moments, so this function is useful. void RandomRay::attenuate_flux_linear_source_void( - double distance, bool is_active) + SourceRegionHandle& srh, double distance, bool is_active, Position r) { - // Cast domain to LinearSourceDomain - LinearSourceDomain* domain = dynamic_cast(domain_); - if (!domain) { - fatal_error("RandomRay::attenuate_flux_linear_source() called with " - "non-LinearSourceDomain domain."); - } - // The number of geometric intersections is counted for reporting purposes n_event()++; - // Determine source region index etc. - int i_cell = lowest_coord().cell; - - // The source region is the spatial region index - int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); - - Position& centroid = domain_->source_regions_.centroid(sr); - Position midpoint = r() + u() * (distance / 2.0); + Position& centroid = srh.centroid(); + Position midpoint = r + u() * (distance / 2.0); // Determine the local position of the midpoint and the ray origin // relative to the source region's centroid @@ -646,9 +675,9 @@ void RandomRay::attenuate_flux_linear_source_void( // be no estimate of its centroid. We detect this by checking if it has // any accumulated volume. If its volume is zero, just use the midpoint // of the ray as the region's centroid. - if (domain_->source_regions_.volume_t(sr)) { + if (srh.volume_t()) { rm_local = midpoint - centroid; - r0_local = r() - centroid; + r0_local = r - centroid; } else { rm_local = {0.0, 0.0, 0.0}; r0_local = -u() * 0.5 * distance; @@ -659,7 +688,7 @@ void RandomRay::attenuate_flux_linear_source_void( // transport through a void region is greatly simplified. Here we // compute the updated flux moments. for (int g = 0; g < negroups_; g++) { - float spatial_source = domain_->source_regions_.source(sr, g); + float spatial_source = srh.external_source(g); float new_delta_psi = (angular_flux_[g] - spatial_source) * distance; float h1 = 0.5f; h1 = h1 * angular_flux_[g]; @@ -688,41 +717,41 @@ void RandomRay::attenuate_flux_linear_source_void( rm_local, u(), distance); // Aquire lock for source region - domain_->source_regions_.lock(sr).lock(); + srh.lock(); // Accumulate delta psi into new estimate of source region flux for // this iteration, and update flux momements for (int g = 0; g < negroups_; g++) { - domain_->source_regions_.scalar_flux_new(sr, g) += - angular_flux_[g] * distance; - domain_->source_regions_.flux_moments_new(sr, g) += delta_moments_[g]; + srh.scalar_flux_new(g) += angular_flux_[g] * distance; + srh.flux_moments_new(g) += delta_moments_[g]; } // Accumulate the volume (ray segment distance), centroid, and spatial // momement estimates into the running totals for the iteration for this // source region. The centroid and spatial momements estimates are scaled by // the ray segment length as part of length averaging of the estimates. - domain_->source_regions_.volume(sr) += distance; - domain_->source_regions_.volume_sq(sr) += distance_2; - domain_->source_regions_.centroid_iteration(sr) += midpoint * distance; + srh.volume() += distance; + srh.volume_sq() += distance_2; + srh.centroid_iteration() += midpoint * distance; moment_matrix_estimate *= distance; - domain_->source_regions_.mom_matrix(sr) += moment_matrix_estimate; + srh.mom_matrix() += moment_matrix_estimate; // Tally valid position inside the source region (e.g., midpoint of // the ray) if not done already - if (!domain_->source_regions_.position_recorded(sr)) { - domain_->source_regions_.position(sr) = midpoint; - domain_->source_regions_.position_recorded(sr) = 1; + if (!srh.position_recorded()) { + srh.position() = midpoint; + srh.position_recorded() = 1; } + srh.n_hits() += 1; + // Release lock - domain_->source_regions_.lock(sr).unlock(); + srh.unlock(); } // Add source to incoming angular flux, assuming void region for (int g = 0; g < negroups_; g++) { - angular_flux_[g] += - domain_->source_regions_.external_source(sr, g) * distance; + angular_flux_[g] += srh.external_source(g) * distance; } } @@ -738,7 +767,7 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) wgt() = 1.0; // set identifier for particle - id() = simulation::work_index[mpi::rank] + ray_id; + id() = ray_id; // generate source site using sample method SourceSite site; @@ -775,8 +804,26 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) int i_cell = lowest_coord().cell; int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); - for (int g = 0; g < negroups_; g++) { - angular_flux_[g] = domain_->source_regions_.source(sr, g); + SourceRegionHandle srh; + if (mesh_subdivision_enabled_) { + int mesh_idx = domain_->base_source_regions_.mesh(sr); + int mesh_bin; + if (mesh_idx == C_NONE) { + mesh_bin = 0; + } else { + Mesh* mesh = model::meshes[mesh_idx].get(); + mesh_bin = mesh->get_bin(r()); + } + srh = + domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), 0.0, u()); + } else { + srh = domain_->source_regions_.get_source_region_handle(sr); + } + + if (!srh.is_numerical_fp_artifact_) { + for (int g = 0; g < negroups_; g++) { + angular_flux_[g] = srh.source(g); + } } } diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index f1477c3fe..bf01d2f57 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -14,6 +14,7 @@ #include "openmc/tallies/tally.h" #include "openmc/tallies/tally_scoring.h" #include "openmc/timer.h" +#include "openmc/weight_windows.h" namespace openmc { @@ -48,13 +49,17 @@ void openmc_run_random_ray() // Declare forward flux so that it can be saved for later adjoint simulation vector forward_flux; + SourceRegionContainer forward_source_regions; + SourceRegionContainer forward_base_source_regions; + std::unordered_map + forward_source_region_map; { // Initialize Random Ray Simulation Object RandomRaySimulation sim; // Initialize fixed sources, if present - sim.prepare_fixed_sources(); + sim.apply_fixed_sources_and_mesh_domains(); // Begin main simulation timer simulation::time_total.start(); @@ -77,12 +82,13 @@ void openmc_run_random_ray() forward_flux[i] *= source_normalization_factor; } + forward_source_regions = sim.domain()->source_regions_; + forward_source_region_map = sim.domain()->source_region_map_; + forward_base_source_regions = sim.domain()->base_source_regions_; + // Finalize OpenMC openmc_simulation_finalize(); - // Reduce variables across MPI ranks - sim.reduce_simulation_statistics(); - // Output all simulation results sim.output_simulation_results(); } @@ -107,7 +113,9 @@ void openmc_run_random_ray() RandomRaySimulation adjoint_sim; // Initialize adjoint fixed sources, if present - adjoint_sim.prepare_fixed_sources_adjoint(forward_flux); + adjoint_sim.prepare_fixed_sources_adjoint(forward_flux, + forward_source_regions, forward_base_source_regions, + forward_source_region_map); // Transpose scattering matrix adjoint_sim.domain()->transpose_scattering_matrix(); @@ -127,9 +135,6 @@ void openmc_run_random_ray() // Finalize OpenMC openmc_simulation_finalize(); - // Reduce variables across MPI ranks - adjoint_sim.reduce_simulation_statistics(); - // Output all simulation results adjoint_sim.output_simulation_results(); } @@ -321,12 +326,36 @@ void validate_random_ray_inputs() #ifdef OPENMC_MPI if (mpi::n_procs > 1) { warning( - "Domain replication in random ray is supported, but suffers from poor " - "scaling of source all-reduce operations. Performance may severely " - "degrade beyond just a few MPI ranks. Domain decomposition may be " - "implemented in the future to provide efficient scaling."); + "MPI parallelism is not supported by the random ray solver. All work " + "will be performed by rank 0. Domain decomposition may be implemented in " + "the future to provide efficient MPI scaling."); } #endif + + // Warn about instability resulting from linear sources in small regions + // when generating weight windows with FW-CADIS and an overlaid mesh. + /////////////////////////////////////////////////////////////////// + if (RandomRay::source_shape_ == RandomRaySourceShape::LINEAR && + RandomRay::mesh_subdivision_enabled_ && + variance_reduction::weight_windows.size() > 0) { + warning( + "Linear sources may result in negative fluxes in small source regions " + "generated by mesh subdivision. Negative sources may result in low " + "quality FW-CADIS weight windows. We recommend you use flat source mode " + "when generating weight windows with an overlaid mesh tally."); + } +} + +void openmc_reset_random_ray() +{ + FlatSourceDomain::volume_estimator_ = RandomRayVolumeEstimator::HYBRID; + FlatSourceDomain::volume_normalized_flux_tallies_ = false; + FlatSourceDomain::adjoint_ = false; + FlatSourceDomain::mesh_domain_map_.clear(); + RandomRay::ray_source_.reset(); + RandomRay::source_shape_ = RandomRaySourceShape::FLAT; + RandomRay::mesh_subdivision_enabled_ = false; + RandomRay::sample_method_ = RandomRaySampleMethod::PRNG; } //============================================================================== @@ -361,19 +390,29 @@ RandomRaySimulation::RandomRaySimulation() domain_->flatten_xs(); } -void RandomRaySimulation::prepare_fixed_sources() +void RandomRaySimulation::apply_fixed_sources_and_mesh_domains() { if (settings::run_mode == RunMode::FIXED_SOURCE) { // Transfer external source user inputs onto random ray source regions domain_->convert_external_sources(); domain_->count_external_source_regions(); } + domain_->apply_meshes(); } void RandomRaySimulation::prepare_fixed_sources_adjoint( - vector& forward_flux) + vector& forward_flux, SourceRegionContainer& forward_source_regions, + SourceRegionContainer& forward_base_source_regions, + std::unordered_map& + forward_source_region_map) { if (settings::run_mode == RunMode::FIXED_SOURCE) { + if (RandomRay::mesh_subdivision_enabled_) { + domain_->source_regions_ = forward_source_regions; + domain_->source_region_map_ = forward_source_region_map; + domain_->base_source_regions_ = forward_base_source_regions; + domain_->source_regions_.adjoint_reset(); + } domain_->set_adjoint_sources(forward_flux); } } @@ -382,75 +421,93 @@ void RandomRaySimulation::simulate() { // Random ray power iteration loop while (simulation::current_batch < settings::n_batches) { - // Initialize the current batch initialize_batch(); initialize_generation(); - // Reset total starting particle weight used for normalizing tallies - simulation::total_weight = 1.0; + // MPI not supported in random ray solver, so all work is done by rank 0 + // TODO: Implement domain decomposition for MPI parallelism + if (mpi::master) { - // Update source term (scattering + fission) - domain_->update_neutron_source(k_eff_); + // Reset total starting particle weight used for normalizing tallies + simulation::total_weight = 1.0; - // Reset scalar fluxes, iteration volume tallies, and region hit flags to - // zero - domain_->batch_reset(); + // Update source term (scattering + fission) + domain_->update_neutron_source(k_eff_); - // Start timer for transport - simulation::time_transport.start(); + // Reset scalar fluxes, iteration volume tallies, and region hit flags to + // zero + domain_->batch_reset(); + + // At the beginning of the simulation, if mesh subvivision is in use, we + // need to swap the main source region container into the base container, + // as the main source region container will be used to hold the true + // subdivided source regions. The base container will therefore only + // contain the external source region information, the mesh indices, + // material properties, and initial guess values for the flux/source. + if (RandomRay::mesh_subdivision_enabled_ && + simulation::current_batch == 1 && !FlatSourceDomain::adjoint_) { + domain_->prepare_base_source_regions(); + } + + // Start timer for transport + simulation::time_transport.start(); // Transport sweep over all random rays for the iteration #pragma omp parallel for schedule(dynamic) \ reduction(+ : total_geometric_intersections_) - for (int i = 0; i < simulation::work_per_rank; i++) { - RandomRay ray(i, domain_.get()); - total_geometric_intersections_ += - ray.transport_history_based_single_ray(); - } + for (int i = 0; i < settings::n_particles; i++) { + RandomRay ray(i, domain_.get()); + total_geometric_intersections_ += + ray.transport_history_based_single_ray(); + } - simulation::time_transport.stop(); + simulation::time_transport.stop(); - // If using multiple MPI ranks, perform all reduce on all transport results - domain_->all_reduce_replicated_source_regions(); + // If using mesh subdivision, add any newly discovered source regions + // to the main source region container. + if (RandomRay::mesh_subdivision_enabled_) { + domain_->finalize_discovered_source_regions(); + } - // Normalize scalar flux and update volumes - domain_->normalize_scalar_flux_and_volumes( - settings::n_particles * RandomRay::distance_active_); + // Normalize scalar flux and update volumes + domain_->normalize_scalar_flux_and_volumes( + settings::n_particles * RandomRay::distance_active_); - // Add source to scalar flux, compute number of FSR hits - int64_t n_hits = domain_->add_source_to_scalar_flux(); + // Add source to scalar flux, compute number of FSR hits + int64_t n_hits = domain_->add_source_to_scalar_flux(); - if (settings::run_mode == RunMode::EIGENVALUE) { - // Compute random ray k-eff - k_eff_ = domain_->compute_k_eff(k_eff_); + if (settings::run_mode == RunMode::EIGENVALUE) { + // Compute random ray k-eff + k_eff_ = domain_->compute_k_eff(k_eff_); - // Store random ray k-eff into OpenMC's native k-eff variable - global_tally_tracklength = k_eff_; - } + // Store random ray k-eff into OpenMC's native k-eff variable + global_tally_tracklength = k_eff_; + } - // Execute all tallying tasks, if this is an active batch - if (simulation::current_batch > settings::n_inactive) { + // Execute all tallying tasks, if this is an active batch + if (simulation::current_batch > settings::n_inactive) { - // Add this iteration's scalar flux estimate to final accumulated estimate - domain_->accumulate_iteration_flux(); + // Add this iteration's scalar flux estimate to final accumulated + // estimate + domain_->accumulate_iteration_flux(); - if (mpi::master) { // Generate mapping between source regions and tallies if (!domain_->mapped_all_tallies_) { domain_->convert_source_regions_to_tallies(); } - // Use above mapping to contribute FSR flux data to appropriate tallies + // Use above mapping to contribute FSR flux data to appropriate + // tallies domain_->random_ray_tally(); } - } - // Set phi_old = phi_new - domain_->flux_swap(); + // Set phi_old = phi_new + domain_->flux_swap(); - // Check for any obvious insabilities/nans/infs - instability_check(n_hits, k_eff_, avg_miss_rate_); + // Check for any obvious insabilities/nans/infs + instability_check(n_hits, k_eff_, avg_miss_rate_); + } // End MPI master work // Finalize the current batch finalize_generation(); @@ -458,27 +515,13 @@ void RandomRaySimulation::simulate() } // End random ray power iteration loop } -void RandomRaySimulation::reduce_simulation_statistics() -{ - // Reduce number of intersections -#ifdef OPENMC_MPI - if (mpi::n_procs > 1) { - uint64_t total_geometric_intersections_reduced = 0; - MPI_Reduce(&total_geometric_intersections_, - &total_geometric_intersections_reduced, 1, MPI_UNSIGNED_LONG, MPI_SUM, 0, - mpi::intracomm); - total_geometric_intersections_ = total_geometric_intersections_reduced; - } -#endif -} - void RandomRaySimulation::output_simulation_results() const { // Print random ray results if (mpi::master) { print_results_random_ray(total_geometric_intersections_, avg_miss_rate_ / settings::n_batches, negroups_, - domain_->n_source_regions_, domain_->n_external_source_regions_); + domain_->n_source_regions(), domain_->n_external_source_regions_); if (model::plots.size() > 0) { domain_->output_to_vtk(); } @@ -490,8 +533,8 @@ void RandomRaySimulation::output_simulation_results() const void RandomRaySimulation::instability_check( int64_t n_hits, double k_eff, double& avg_miss_rate) const { - double percent_missed = ((domain_->n_source_regions_ - n_hits) / - static_cast(domain_->n_source_regions_)) * + double percent_missed = ((domain_->n_source_regions() - n_hits) / + static_cast(domain_->n_source_regions())) * 100.0; avg_miss_rate += percent_missed; diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index 4ac86ea8c..6c0df0157 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -2,9 +2,36 @@ #include "openmc/error.h" #include "openmc/message_passing.h" +#include "openmc/simulation.h" namespace openmc { +//============================================================================== +// SourceRegionHandle implementation +//============================================================================== +SourceRegionHandle::SourceRegionHandle(SourceRegion& sr) + : negroups_(sr.scalar_flux_old_.size()), material_(&sr.material_), + is_small_(&sr.is_small_), n_hits_(&sr.n_hits_), + is_linear_(sr.source_gradients_.size() > 0), lock_(&sr.lock_), + volume_(&sr.volume_), volume_t_(&sr.volume_t_), volume_sq_(&sr.volume_sq_), + volume_sq_t_(&sr.volume_sq_t_), volume_naive_(&sr.volume_naive_), + position_recorded_(&sr.position_recorded_), + external_source_present_(&sr.external_source_present_), + position_(&sr.position_), centroid_(&sr.centroid_), + centroid_iteration_(&sr.centroid_iteration_), centroid_t_(&sr.centroid_t_), + mom_matrix_(&sr.mom_matrix_), mom_matrix_t_(&sr.mom_matrix_t_), + volume_task_(&sr.volume_task_), mesh_(&sr.mesh_), + parent_sr_(&sr.parent_sr_), scalar_flux_old_(sr.scalar_flux_old_.data()), + scalar_flux_new_(sr.scalar_flux_new_.data()), source_(sr.source_.data()), + external_source_(sr.external_source_.data()), + scalar_flux_final_(sr.scalar_flux_final_.data()), + source_gradients_(sr.source_gradients_.data()), + flux_moments_old_(sr.flux_moments_old_.data()), + flux_moments_new_(sr.flux_moments_new_.data()), + flux_moments_t_(sr.flux_moments_t_.data()), + tally_task_(sr.tally_task_.data()) +{} + //============================================================================== // SourceRegion implementation //============================================================================== @@ -25,7 +52,6 @@ SourceRegion::SourceRegion(int negroups, bool is_linear) scalar_flux_final_.assign(negroups, 0.0); tally_task_.resize(negroups); - if (is_linear) { source_gradients_.resize(negroups); flux_moments_old_.resize(negroups); @@ -34,15 +60,37 @@ SourceRegion::SourceRegion(int negroups, bool is_linear) } } +SourceRegion::SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr) + : SourceRegion(handle.negroups_, handle.is_linear_) +{ + material_ = handle.material(); + mesh_ = handle.mesh(); + parent_sr_ = parent_sr; + for (int g = 0; g < scalar_flux_new_.size(); g++) { + scalar_flux_old_[g] = handle.scalar_flux_old(g); + source_[g] = handle.source(g); + } + + if (settings::run_mode == RunMode::FIXED_SOURCE) { + external_source_present_ = handle.external_source_present(); + for (int g = 0; g < scalar_flux_new_.size(); g++) { + external_source_[g] = handle.external_source(g); + } + } +} + //============================================================================== // SourceRegionContainer implementation //============================================================================== + void SourceRegionContainer::push_back(const SourceRegion& sr) { n_source_regions_++; // Scalar fields material_.push_back(sr.material_); + is_small_.push_back(sr.is_small_); + n_hits_.push_back(sr.n_hits_); lock_.push_back(sr.lock_); volume_.push_back(sr.volume_); volume_t_.push_back(sr.volume_t_); @@ -53,6 +101,8 @@ void SourceRegionContainer::push_back(const SourceRegion& sr) external_source_present_.push_back(sr.external_source_present_); position_.push_back(sr.position_); volume_task_.push_back(sr.volume_task_); + mesh_.push_back(sr.mesh_); + parent_sr_.push_back(sr.parent_sr_); // Only store these fields if is_linear_ is true if (is_linear_) { @@ -92,6 +142,8 @@ void SourceRegionContainer::assign( // Clear existing data n_source_regions_ = 0; material_.clear(); + is_small_.clear(); + n_hits_.clear(); lock_.clear(); volume_.clear(); volume_t_.clear(); @@ -101,6 +153,8 @@ void SourceRegionContainer::assign( position_recorded_.clear(); external_source_present_.clear(); position_.clear(); + mesh_.clear(); + parent_sr_.clear(); if (is_linear_) { centroid_.clear(); @@ -140,103 +194,88 @@ void SourceRegionContainer::flux_swap() } } -void SourceRegionContainer::mpi_sync_ranks(bool reduce_position) +SourceRegionHandle SourceRegionContainer::get_source_region_handle(int64_t sr) { -#ifdef OPENMC_MPI + SourceRegionHandle handle; + handle.negroups_ = negroups(); + handle.material_ = &material(sr); + handle.is_small_ = &is_small(sr); + handle.n_hits_ = &n_hits(sr); + handle.is_linear_ = is_linear(); + handle.lock_ = &lock(sr); + handle.volume_ = &volume(sr); + handle.volume_t_ = &volume_t(sr); + handle.volume_sq_ = &volume_sq(sr); + handle.volume_sq_t_ = &volume_sq_t(sr); + handle.volume_naive_ = &volume_naive(sr); + handle.position_recorded_ = &position_recorded(sr); + handle.external_source_present_ = &external_source_present(sr); + handle.position_ = &position(sr); + handle.volume_task_ = &volume_task(sr); + handle.mesh_ = &mesh(sr); + handle.parent_sr_ = &parent_sr(sr); + handle.scalar_flux_old_ = &scalar_flux_old(sr, 0); + handle.scalar_flux_new_ = &scalar_flux_new(sr, 0); + handle.source_ = &source(sr, 0); + handle.external_source_ = &external_source(sr, 0); + handle.scalar_flux_final_ = &scalar_flux_final(sr, 0); + handle.tally_task_ = &tally_task(sr, 0); - // The "position_recorded" variable needs to be allreduced (and maxed), - // as whether or not a cell was hit will affect some decisions in how the - // source is calculated in the next iteration so as to avoid dividing - // by zero. We take the max rather than the sum as the hit values are - // expected to be zero or 1. - MPI_Allreduce(MPI_IN_PLACE, position_recorded_.data(), 1, MPI_INT, MPI_MAX, - mpi::intracomm); - - // The position variable is more complicated to reduce than the others, - // as we do not want the sum of all positions in each cell, rather, we - // want to just pick any single valid position. Thus, we perform a gather - // and then pick the first valid position we find for all source regions - // that have had a position recorded. This operation does not need to - // be broadcast back to other ranks, as this value is only used for the - // tally conversion operation, which is only performed on the master rank. - // While this is expensive, it only needs to be done for active batches, - // and only if we have not mapped all the tallies yet. Once tallies are - // fully mapped, then the position vector is fully populated, so this - // operation can be skipped. - - // Then, we perform the gather of position data, if needed - if (reduce_position) { - - // Master rank will gather results and pick valid positions - if (mpi::master) { - // Initialize temporary vector for receiving positions - vector> all_position; - all_position.resize(mpi::n_procs); - for (int i = 0; i < mpi::n_procs; i++) { - all_position[i].resize(n_source_regions_); - } - - // Copy master rank data into gathered vector for convenience - all_position[0] = position_; - - // Receive all data into gather vector - for (int i = 1; i < mpi::n_procs; i++) { - MPI_Recv(all_position[i].data(), n_source_regions_ * 3, MPI_DOUBLE, i, - 0, mpi::intracomm, MPI_STATUS_IGNORE); - } - - // Scan through gathered data and pick first valid cell posiiton - for (int64_t sr = 0; sr < n_source_regions_; sr++) { - if (position_recorded_[sr] == 1) { - for (int i = 0; i < mpi::n_procs; i++) { - if (all_position[i][sr].x != 0.0 || all_position[i][sr].y != 0.0 || - all_position[i][sr].z != 0.0) { - position_[sr] = all_position[i][sr]; - break; - } - } - } - } - } else { - // Other ranks just send in their data - MPI_Send(position_.data(), n_source_regions_ * 3, MPI_DOUBLE, 0, 0, - mpi::intracomm); - } + if (handle.is_linear_) { + handle.centroid_ = ¢roid(sr); + handle.centroid_iteration_ = ¢roid_iteration(sr); + handle.centroid_t_ = ¢roid_t(sr); + handle.mom_matrix_ = &mom_matrix(sr); + handle.mom_matrix_t_ = &mom_matrix_t(sr); + handle.source_gradients_ = &source_gradients(sr, 0); + handle.flux_moments_old_ = &flux_moments_old(sr, 0); + handle.flux_moments_new_ = &flux_moments_new(sr, 0); + handle.flux_moments_t_ = &flux_moments_t(sr, 0); } - // For the rest of the source region data, we simply perform an all reduce, - // as these values will be needed on all ranks for transport during the - // next iteration. - MPI_Allreduce(MPI_IN_PLACE, volume_.data(), n_source_regions_, MPI_DOUBLE, - MPI_SUM, mpi::intracomm); - MPI_Allreduce(MPI_IN_PLACE, volume_sq_.data(), n_source_regions_, MPI_DOUBLE, - MPI_SUM, mpi::intracomm); - - MPI_Allreduce(MPI_IN_PLACE, scalar_flux_new_.data(), - n_source_regions_ * negroups_, MPI_DOUBLE, MPI_SUM, mpi::intracomm); - - if (is_linear_) { - // We are going to assume we can safely cast Position, MomentArray, - // and MomentMatrix to contiguous arrays of doubles for the MPI - // allreduce operation. This is a safe assumption as typically - // compilers will at most pad to 8 byte boundaries. If a new FP32 - // MomentArray type is introduced, then there will likely be padding, in - // which case this function will need to become more complex. - if (sizeof(MomentArray) != 3 * sizeof(double) || - sizeof(MomentMatrix) != 6 * sizeof(double)) { - fatal_error( - "Unexpected buffer padding in linear source domain reduction."); - } - - MPI_Allreduce(MPI_IN_PLACE, static_cast(flux_moments_new_.data()), - n_source_regions_ * negroups_ * 3, MPI_DOUBLE, MPI_SUM, mpi::intracomm); - MPI_Allreduce(MPI_IN_PLACE, static_cast(mom_matrix_.data()), - n_source_regions_ * 6, MPI_DOUBLE, MPI_SUM, mpi::intracomm); - MPI_Allreduce(MPI_IN_PLACE, static_cast(centroid_iteration_.data()), - n_source_regions_ * 3, MPI_DOUBLE, MPI_SUM, mpi::intracomm); - } - -#endif + return handle; } -} // namespace openmc \ No newline at end of file +void SourceRegionContainer::adjoint_reset() +{ + std::fill(n_hits_.begin(), n_hits_.end(), 0); + std::fill(volume_.begin(), volume_.end(), 0.0); + std::fill(volume_t_.begin(), volume_t_.end(), 0.0); + std::fill(volume_sq_.begin(), volume_sq_.end(), 0.0); + std::fill(volume_sq_t_.begin(), volume_sq_t_.end(), 0.0); + std::fill(volume_naive_.begin(), volume_naive_.end(), 0.0); + std::fill( + external_source_present_.begin(), external_source_present_.end(), 0); + std::fill(external_source_.begin(), external_source_.end(), 0.0); + std::fill(centroid_.begin(), centroid_.end(), Position {0.0, 0.0, 0.0}); + std::fill(centroid_iteration_.begin(), centroid_iteration_.end(), + Position {0.0, 0.0, 0.0}); + std::fill(centroid_t_.begin(), centroid_t_.end(), Position {0.0, 0.0, 0.0}); + std::fill(mom_matrix_.begin(), mom_matrix_.end(), + MomentMatrix {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}); + std::fill(mom_matrix_t_.begin(), mom_matrix_t_.end(), + MomentMatrix {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}); + for (auto& task_set : volume_task_) { + task_set.clear(); + } + std::fill(scalar_flux_old_.begin(), scalar_flux_old_.end(), 0.0); + std::fill(scalar_flux_new_.begin(), scalar_flux_new_.end(), 0.0); + std::fill(scalar_flux_final_.begin(), scalar_flux_final_.end(), 0.0); + std::fill(source_.begin(), source_.end(), 0.0f); + std::fill(external_source_.begin(), external_source_.end(), 0.0f); + + std::fill(source_gradients_.begin(), source_gradients_.end(), + MomentArray {0.0, 0.0, 0.0}); + std::fill(flux_moments_old_.begin(), flux_moments_old_.end(), + MomentArray {0.0, 0.0, 0.0}); + std::fill(flux_moments_new_.begin(), flux_moments_new_.end(), + MomentArray {0.0, 0.0, 0.0}); + std::fill(flux_moments_t_.begin(), flux_moments_t_.end(), + MomentArray {0.0, 0.0, 0.0}); + + for (auto& task_set : tally_task_) { + task_set.clear(); + } +} + +} // namespace openmc diff --git a/src/settings.cpp b/src/settings.cpp index 67fdfea66..49b6590ec 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1,4 +1,5 @@ #include "openmc/settings.h" +#include "openmc/random_ray/flat_source_domain.h" #include // for ceil, pow #include // for numeric_limits @@ -319,6 +320,31 @@ void get_run_parameters(pugi::xml_node node_base) fatal_error("Unrecognized sample method: " + temp_str); } } + if (check_for_node(random_ray_node, "source_region_meshes")) { + pugi::xml_node node_source_region_meshes = + random_ray_node.child("source_region_meshes"); + for (pugi::xml_node node_mesh : + node_source_region_meshes.children("mesh")) { + int mesh_id = std::stoi(node_mesh.attribute("id").value()); + for (pugi::xml_node node_domain : node_mesh.children("domain")) { + int domain_id = std::stoi(node_domain.attribute("id").value()); + std::string domain_type = node_domain.attribute("type").value(); + Source::DomainType type; + if (domain_type == "material") { + type = Source::DomainType::MATERIAL; + } else if (domain_type == "cell") { + type = Source::DomainType::CELL; + } else if (domain_type == "universe") { + type = Source::DomainType::UNIVERSE; + } else { + throw std::runtime_error("Unknown domain type: " + domain_type); + } + FlatSourceDomain::mesh_domain_map_[mesh_id].emplace_back( + type, domain_id); + RandomRay::mesh_subdivision_enabled_ = true; + } + } + } } } diff --git a/src/weight_windows.cpp b/src/weight_windows.cpp index 9daf21f75..0efa5a6ae 100644 --- a/src/weight_windows.cpp +++ b/src/weight_windows.cpp @@ -657,11 +657,18 @@ void WeightWindows::update_weights(const Tally* tally, const std::string& value, } } - xt::noalias(new_bounds) = 1.0 / new_bounds; - + // We take the inverse, but are careful not to divide by zero e.g. if some + // mesh bins are not reachable in the physical geometry. + xt::noalias(new_bounds) = + xt::where(xt::not_equal(new_bounds, 0.0), 1.0 / new_bounds, 0.0); auto max_val = xt::amax(new_bounds)(); - xt::noalias(new_bounds) = new_bounds / (2.0 * max_val); + + // For bins that were missed, we use the minimum weight window value. This + // shouldn't matter except for plotting. + auto min_val = xt::amin(new_bounds)(); + xt::noalias(new_bounds) = + xt::where(xt::not_equal(new_bounds, 0.0), new_bounds, min_val); } // make sure that values where the mean is zero are set s.t. the weight window diff --git a/tests/regression_tests/random_ray_fixed_source_mesh/__init__.py b/tests/regression_tests/random_ray_fixed_source_mesh/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/regression_tests/random_ray_fixed_source_mesh/flat/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_mesh/flat/inputs_true.dat new file mode 100644 index 000000000..67c2ffc15 --- /dev/null +++ b/tests/regression_tests/random_ray_fixed_source_mesh/flat/inputs_true.dat @@ -0,0 +1,271 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + 2.5 2.5 2.5 + 12 12 12 + 0.0 0.0 0.0 + +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 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + + + + + + + + + + fixed source + 90 + 30 + 15 + + + 100.0 1.0 + + + universe + 1 + + + multi-group + + 500.0 + 100.0 + + + 0.0 0.0 0.0 30.0 30.0 30.0 + + + True + + + + + + + + + + + + flat + + + 24 24 24 + 0.0 0.0 0.0 + 30.0 30.0 30.0 + + + 36 36 36 + 0.0 0.0 0.0 + 30.0 30.0 30.0 + + + 30 30 30 + 0.0 0.0 0.0 + 30.0 30.0 30.0 + + + + + 1 + + + 2 + + + 3 + + + 3 + flux + tracklength + + + 2 + flux + tracklength + + + 1 + flux + tracklength + + + diff --git a/tests/regression_tests/random_ray_fixed_source_mesh/flat/results_true.dat b/tests/regression_tests/random_ray_fixed_source_mesh/flat/results_true.dat new file mode 100644 index 000000000..0b0eaa447 --- /dev/null +++ b/tests/regression_tests/random_ray_fixed_source_mesh/flat/results_true.dat @@ -0,0 +1,9 @@ +tally 1: +1.750296E+00 +2.051829E-01 +tally 2: +8.045199E-02 +4.384408E-04 +tally 3: +5.216828E-03 +1.840861E-06 diff --git a/tests/regression_tests/random_ray_fixed_source_mesh/linear/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_mesh/linear/inputs_true.dat new file mode 100644 index 000000000..10b7c74f1 --- /dev/null +++ b/tests/regression_tests/random_ray_fixed_source_mesh/linear/inputs_true.dat @@ -0,0 +1,271 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + 2.5 2.5 2.5 + 12 12 12 + 0.0 0.0 0.0 + +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 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + + + + + + + + + + fixed source + 90 + 30 + 15 + + + 100.0 1.0 + + + universe + 1 + + + multi-group + + 500.0 + 100.0 + + + 0.0 0.0 0.0 30.0 30.0 30.0 + + + True + + + + + + + + + + + + linear + + + 24 24 24 + 0.0 0.0 0.0 + 30.0 30.0 30.0 + + + 36 36 36 + 0.0 0.0 0.0 + 30.0 30.0 30.0 + + + 30 30 30 + 0.0 0.0 0.0 + 30.0 30.0 30.0 + + + + + 1 + + + 2 + + + 3 + + + 3 + flux + tracklength + + + 2 + flux + tracklength + + + 1 + flux + tracklength + + + diff --git a/tests/regression_tests/random_ray_fixed_source_mesh/linear/results_true.dat b/tests/regression_tests/random_ray_fixed_source_mesh/linear/results_true.dat new file mode 100644 index 000000000..23754a157 --- /dev/null +++ b/tests/regression_tests/random_ray_fixed_source_mesh/linear/results_true.dat @@ -0,0 +1,9 @@ +tally 1: +1.780361E+00 +2.137912E-01 +tally 2: +8.230400E-02 +4.596391E-04 +tally 3: +5.207797E-03 +1.834531E-06 diff --git a/tests/regression_tests/random_ray_fixed_source_mesh/test.py b/tests/regression_tests/random_ray_fixed_source_mesh/test.py new file mode 100644 index 000000000..0b93b2a7a --- /dev/null +++ b/tests/regression_tests/random_ray_fixed_source_mesh/test.py @@ -0,0 +1,53 @@ +import os + +import openmc +from openmc.examples import random_ray_three_region_cube +from openmc.utility_funcs import change_directory +import pytest + +from tests.testing_harness import TolerantPyAPITestHarness + + +class MGXSTestHarness(TolerantPyAPITestHarness): + def _cleanup(self): + super()._cleanup() + f = 'mgxs.h5' + if os.path.exists(f): + os.remove(f) + + +def make_mesh(dim): + width = 30.0 + mesh = openmc.RegularMesh() + mesh.dimension = (dim, dim, dim) + mesh.lower_left = (0.0, 0.0, 0.0) + mesh.upper_right = (width, width, width) + return mesh + + +@pytest.mark.parametrize("shape", ["flat", "linear"]) +def test_random_ray_fixed_source_mesh(shape): + with change_directory(shape): + openmc.reset_auto_ids() + model = random_ray_three_region_cube() + + # We will apply three different mesh resolutions to three different domain types + source_universe = model.geometry.get_universes_by_name('source universe')[0] + void_cell = model.geometry.get_cells_by_name('infinite void region')[0] + absorber_mat = model.geometry.get_materials_by_name('absorber')[0] + + model.settings.random_ray['source_region_meshes'] = [ + (make_mesh(24), [source_universe]), + (make_mesh(36), [void_cell]), + (make_mesh(30), [absorber_mat]) + ] + + # We also test flat/linear source shapes to ensure they are both + # working correctly with the mesh overlay logic + model.settings.random_ray['source_shape'] = shape + + model.settings.inactive = 15 + model.settings.batches = 30 + + harness = MGXSTestHarness('statepoint.30.h5', model) + harness.main() diff --git a/tests/regression_tests/random_ray_k_eff_mesh/__init__.py b/tests/regression_tests/random_ray_k_eff_mesh/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/regression_tests/random_ray_k_eff_mesh/inputs_true.dat b/tests/regression_tests/random_ray_k_eff_mesh/inputs_true.dat new file mode 100644 index 000000000..cdc717198 --- /dev/null +++ b/tests/regression_tests/random_ray_k_eff_mesh/inputs_true.dat @@ -0,0 +1,119 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.126 0.126 + 10 10 + -0.63 -0.63 + +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 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.26 1.26 + 2 2 + -1.26 -1.26 + +2 2 +2 5 + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 10 + 5 + multi-group + + 100.0 + 20.0 + + + -1.26 -1.26 -1 1.26 1.26 1 + + + True + + + + + + + + 40 40 + -1.26 -1.26 + 1.26 1.26 + + + + + 2 2 + -1.26 -1.26 + 1.26 1.26 + + + 1 + + + 1e-05 0.0635 10.0 100.0 1000.0 500000.0 1000000.0 20000000.0 + + + 1 2 + flux fission nu-fission + analog + + + diff --git a/tests/regression_tests/random_ray_k_eff_mesh/results_true.dat b/tests/regression_tests/random_ray_k_eff_mesh/results_true.dat new file mode 100644 index 000000000..535db3b55 --- /dev/null +++ b/tests/regression_tests/random_ray_k_eff_mesh/results_true.dat @@ -0,0 +1,171 @@ +k-combined: +8.379203E-01 8.057199E-03 +tally 1: +5.080171E+00 +5.167984E+00 +1.880341E+00 +7.079266E-01 +4.576373E+00 +4.193319E+00 +2.859914E+00 +1.638769E+00 +4.243332E-01 +3.607732E-02 +1.032742E+00 +2.136998E-01 +1.692643E+00 +5.794069E-01 +5.445214E-02 +5.995212E-04 +1.325256E-01 +3.551193E-03 +2.372336E+00 +1.147031E+00 +7.807378E-02 +1.242019E-03 +1.900160E-01 +7.356955E-03 +7.135636E+00 +1.035026E+01 +8.273225E-02 +1.392069E-03 +2.013562E-01 +8.245961E-03 +2.044034E+01 +8.394042E+01 +3.100485E-02 +1.932097E-04 +7.671933E-02 +1.182985E-03 +1.313652E+01 +3.451847E+01 +1.764978E-01 +6.230420E-03 +4.909196E-01 +4.820140E-02 +7.585874E+00 +1.150936E+01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.386790E+00 +2.295327E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.820058E+00 +6.729238E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.694013E+00 +1.481363E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.453818E+00 +1.128202E+01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.823642E+01 +6.682239E+01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.137903E+01 +2.590265E+01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.589529E+00 +4.219985E+00 +1.712446E+00 +5.873675E-01 +4.167750E+00 +3.479202E+00 +2.728285E+00 +1.492132E+00 +4.104063E-01 +3.377132E-02 +9.988468E-01 +2.000404E-01 +1.660506E+00 +5.567967E-01 +5.427391E-02 +5.944708E-04 +1.320918E-01 +3.521277E-03 +2.305889E+00 +1.082691E+00 +7.695793E-02 +1.205644E-03 +1.873002E-01 +7.141490E-03 +7.076637E+00 +1.017946E+01 +8.323139E-02 +1.408687E-03 +2.025710E-01 +8.344398E-03 +2.095897E+01 +8.825741E+01 +3.236513E-02 +2.104220E-04 +8.008525E-02 +1.288373E-03 +1.358006E+01 +3.689205E+01 +1.862562E-01 +6.941428E-03 +5.180621E-01 +5.370209E-02 +5.067386E+00 +5.141748E+00 +1.912704E+00 +7.328484E-01 +4.655140E+00 +4.340941E+00 +2.858992E+00 +1.637705E+00 +4.331050E-01 +3.759875E-02 +1.054091E+00 +2.227118E-01 +1.692974E+00 +5.796396E-01 +5.560487E-02 +6.246120E-04 +1.353311E-01 +3.699815E-03 +2.368737E+00 +1.143184E+00 +7.950085E-02 +1.286135E-03 +1.934892E-01 +7.618268E-03 +7.119767E+00 +1.030095E+01 +8.427627E-02 +1.442764E-03 +2.051141E-01 +8.546249E-03 +2.047651E+01 +8.426275E+01 +3.183786E-02 +2.037156E-04 +7.878057E-02 +1.247311E-03 +1.326415E+01 +3.519010E+01 +1.833688E-01 +6.726832E-03 +5.100312E-01 +5.204188E-02 diff --git a/tests/regression_tests/random_ray_k_eff_mesh/test.py b/tests/regression_tests/random_ray_k_eff_mesh/test.py new file mode 100644 index 000000000..cffdaf8bb --- /dev/null +++ b/tests/regression_tests/random_ray_k_eff_mesh/test.py @@ -0,0 +1,36 @@ +import os + +import openmc +from openmc.examples import random_ray_lattice + +from tests.testing_harness import TolerantPyAPITestHarness + + +class MGXSTestHarness(TolerantPyAPITestHarness): + def _cleanup(self): + super()._cleanup() + f = 'mgxs.h5' + if os.path.exists(f): + os.remove(f) + + +def test_random_ray_k_eff_mesh(): + model = random_ray_lattice() + + # The model already has some geometrical subdivisions + # up to a 10x10 grid in the moderator region. So, we + # increase the resolution 40x40 applied over the full + # 2x2 lattice. + pitch = 1.26 + dim = 40 + mesh = openmc.RegularMesh() + mesh.dimension = (dim, dim) + mesh.lower_left = (-pitch, -pitch) + mesh.upper_right = (pitch, pitch) + + root = model.geometry.root_universe + + model.settings.random_ray['source_region_meshes'] = [(mesh, [root])] + + harness = MGXSTestHarness('statepoint.10.h5', model) + harness.main() diff --git a/tests/regression_tests/weightwindows_fw_cadis_mesh/__init__.py b/tests/regression_tests/weightwindows_fw_cadis_mesh/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/inputs_true.dat b/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/inputs_true.dat new file mode 100644 index 000000000..ffb2ac112 --- /dev/null +++ b/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/inputs_true.dat @@ -0,0 +1,265 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + 2.5 2.5 2.5 + 12 12 12 + 0.0 0.0 0.0 + +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 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + + + + + + + + + + fixed source + 750 + 30 + 20 + + + 100.0 1.0 + + + universe + 1 + + + multi-group + + + 1 + neutron + 10 + 1 + true + fw_cadis + + + + 15 15 15 + 0.0 0.0 0.0 + 30.0 30.0 30.0 + + + 500.0 + 100.0 + + + 0.0 0.0 0.0 30.0 30.0 30.0 + + + True + + + + + + flat + + + + + 1 + + + 2 + + + 3 + + + 3 + flux + tracklength + + + 2 + flux + tracklength + + + 1 + flux + tracklength + + + diff --git a/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/results_true.dat b/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/results_true.dat new file mode 100644 index 000000000..e14b7e199 --- /dev/null +++ b/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/results_true.dat @@ -0,0 +1,6760 @@ +RegularMesh + ID = 1 + Name = + Dimensions = 3 + Voxels = [15 15 15] + Lower left = [0. 0. 0.] + Upper Right = [np.float64(30.0), np.float64(30.0), np.float64(30.0)] + Width = [2. 2. 2.] +Lower Bounds +1.71e-01 +1.73e-01 +1.72e-01 +1.73e-01 +1.71e-01 +1.63e-01 +1.66e-01 +1.70e-01 +1.68e-01 +1.76e-01 +1.73e-01 +1.79e-01 +2.62e-01 +4.44e-01 +1.68e-01 +1.63e-01 +1.76e-01 +1.73e-01 +1.52e-01 +1.66e-01 +1.72e-01 +1.68e-01 +1.68e-01 +1.66e-01 +1.67e-01 +1.76e-01 +1.73e-01 +2.44e-01 +3.63e-01 +1.23e-01 +1.71e-01 +1.66e-01 +1.69e-01 +1.71e-01 +1.67e-01 +1.71e-01 +1.64e-01 +1.56e-01 +1.67e-01 +1.64e-01 +1.68e-01 +1.82e-01 +2.60e-01 +4.13e-01 +1.55e-01 +1.68e-01 +1.62e-01 +1.66e-01 +1.65e-01 +1.62e-01 +1.64e-01 +1.63e-01 +1.66e-01 +1.63e-01 +1.67e-01 +1.58e-01 +1.79e-01 +2.52e-01 +4.10e-01 +1.35e-01 +1.65e-01 +1.74e-01 +1.67e-01 +1.71e-01 +1.66e-01 +1.62e-01 +1.60e-01 +1.66e-01 +1.55e-01 +1.67e-01 +1.66e-01 +1.82e-01 +2.68e-01 +3.46e-01 +1.32e-01 +1.70e-01 +1.70e-01 +1.68e-01 +1.68e-01 +1.69e-01 +1.59e-01 +1.62e-01 +1.59e-01 +1.57e-01 +1.55e-01 +1.72e-01 +1.80e-01 +2.59e-01 +2.97e-01 +1.07e-01 +1.68e-01 +1.60e-01 +1.58e-01 +1.61e-01 +1.58e-01 +1.59e-01 +1.56e-01 +1.53e-01 +1.57e-01 +1.52e-01 +1.59e-01 +1.54e-01 +2.42e-01 +3.30e-01 +1.22e-01 +1.64e-01 +1.65e-01 +1.69e-01 +1.64e-01 +1.60e-01 +1.66e-01 +1.60e-01 +1.52e-01 +1.45e-01 +1.53e-01 +1.57e-01 +1.40e-01 +2.08e-01 +1.90e-01 +7.93e-02 +1.65e-01 +1.65e-01 +1.71e-01 +1.72e-01 +1.63e-01 +1.61e-01 +1.57e-01 +1.54e-01 +1.49e-01 +1.41e-01 +1.45e-01 +1.53e-01 +2.36e-01 +1.80e-01 +5.76e-02 +1.67e-01 +1.75e-01 +1.74e-01 +1.71e-01 +1.66e-01 +1.54e-01 +1.55e-01 +1.52e-01 +1.53e-01 +1.41e-01 +1.53e-01 +1.49e-01 +2.14e-01 +1.76e-01 +6.71e-02 +1.72e-01 +1.66e-01 +1.74e-01 +1.70e-01 +1.69e-01 +1.57e-01 +1.50e-01 +1.53e-01 +1.48e-01 +1.47e-01 +1.62e-01 +1.49e-01 +2.03e-01 +1.35e-01 +4.07e-02 +1.81e-01 +1.80e-01 +1.72e-01 +1.65e-01 +1.84e-01 +1.74e-01 +1.58e-01 +1.68e-01 +1.59e-01 +1.57e-01 +1.58e-01 +1.48e-01 +2.16e-01 +1.05e-01 +3.37e-02 +2.61e-01 +2.52e-01 +2.37e-01 +2.51e-01 +2.64e-01 +2.43e-01 +2.39e-01 +2.32e-01 +2.32e-01 +2.29e-01 +2.22e-01 +2.19e-01 +2.07e-01 +8.02e-02 +2.21e-02 +5.00e-01 +3.68e-01 +3.88e-01 +2.65e-01 +2.86e-01 +3.17e-01 +2.60e-01 +2.39e-01 +1.88e-01 +1.97e-01 +1.84e-01 +1.50e-01 +9.99e-02 +3.88e-02 +1.90e-02 +2.18e-01 +1.48e-01 +1.61e-01 +8.76e-02 +9.43e-02 +1.16e-01 +8.45e-02 +8.13e-02 +7.00e-02 +6.16e-02 +6.49e-02 +4.46e-02 +3.71e-02 +1.62e-02 +7.33e-03 +1.70e-01 +1.69e-01 +1.70e-01 +1.68e-01 +1.63e-01 +1.59e-01 +1.75e-01 +1.69e-01 +1.59e-01 +1.64e-01 +1.77e-01 +1.79e-01 +2.63e-01 +3.92e-01 +1.48e-01 +1.73e-01 +1.74e-01 +1.70e-01 +1.66e-01 +1.68e-01 +1.62e-01 +1.62e-01 +1.67e-01 +1.60e-01 +1.64e-01 +1.67e-01 +1.80e-01 +2.42e-01 +3.72e-01 +1.45e-01 +1.71e-01 +1.65e-01 +1.67e-01 +1.65e-01 +1.69e-01 +1.70e-01 +1.64e-01 +1.68e-01 +1.60e-01 +1.70e-01 +1.70e-01 +1.74e-01 +2.62e-01 +3.29e-01 +1.15e-01 +1.73e-01 +1.75e-01 +1.70e-01 +1.69e-01 +1.69e-01 +1.63e-01 +1.66e-01 +1.63e-01 +1.61e-01 +1.61e-01 +1.70e-01 +1.79e-01 +2.47e-01 +3.64e-01 +1.32e-01 +1.72e-01 +1.73e-01 +1.71e-01 +1.66e-01 +1.63e-01 +1.63e-01 +1.67e-01 +1.60e-01 +1.56e-01 +1.63e-01 +1.72e-01 +1.71e-01 +2.52e-01 +3.43e-01 +1.40e-01 +1.68e-01 +1.70e-01 +1.67e-01 +1.66e-01 +1.72e-01 +1.61e-01 +1.56e-01 +1.56e-01 +1.53e-01 +1.55e-01 +1.65e-01 +1.78e-01 +2.53e-01 +3.66e-01 +1.33e-01 +1.70e-01 +1.69e-01 +1.60e-01 +1.64e-01 +1.70e-01 +1.63e-01 +1.53e-01 +1.50e-01 +1.50e-01 +1.48e-01 +1.53e-01 +1.66e-01 +2.34e-01 +2.99e-01 +1.15e-01 +1.65e-01 +1.63e-01 +1.59e-01 +1.58e-01 +1.59e-01 +1.54e-01 +1.54e-01 +1.47e-01 +1.40e-01 +1.38e-01 +1.27e-01 +1.22e-01 +1.99e-01 +1.77e-01 +7.13e-02 +1.58e-01 +1.75e-01 +1.68e-01 +1.66e-01 +1.66e-01 +1.58e-01 +1.56e-01 +1.44e-01 +1.48e-01 +1.45e-01 +1.37e-01 +1.40e-01 +2.01e-01 +1.36e-01 +4.17e-02 +1.65e-01 +1.76e-01 +1.69e-01 +1.69e-01 +1.57e-01 +1.67e-01 +1.56e-01 +1.50e-01 +1.53e-01 +1.43e-01 +1.51e-01 +1.41e-01 +2.04e-01 +1.50e-01 +4.51e-02 +1.69e-01 +1.75e-01 +1.71e-01 +1.63e-01 +1.69e-01 +1.67e-01 +1.60e-01 +1.50e-01 +1.53e-01 +1.44e-01 +1.57e-01 +1.49e-01 +2.02e-01 +1.35e-01 +4.08e-02 +1.79e-01 +1.72e-01 +1.73e-01 +1.70e-01 +1.74e-01 +1.78e-01 +1.68e-01 +1.59e-01 +1.57e-01 +1.62e-01 +1.62e-01 +1.57e-01 +1.95e-01 +9.20e-02 +3.15e-02 +2.48e-01 +2.65e-01 +2.54e-01 +2.58e-01 +2.81e-01 +2.53e-01 +2.33e-01 +2.40e-01 +2.16e-01 +2.19e-01 +2.43e-01 +2.22e-01 +1.99e-01 +6.18e-02 +1.77e-02 +3.13e-01 +2.98e-01 +2.98e-01 +3.16e-01 +3.67e-01 +3.51e-01 +2.81e-01 +2.76e-01 +2.24e-01 +1.66e-01 +1.70e-01 +1.65e-01 +1.10e-01 +3.67e-02 +1.54e-02 +1.11e-01 +1.10e-01 +1.18e-01 +1.08e-01 +1.34e-01 +1.41e-01 +9.92e-02 +9.96e-02 +9.39e-02 +5.19e-02 +5.40e-02 +5.45e-02 +4.22e-02 +1.88e-02 +7.33e-03 +1.73e-01 +1.68e-01 +1.74e-01 +1.68e-01 +1.60e-01 +1.60e-01 +1.61e-01 +1.59e-01 +1.70e-01 +1.61e-01 +1.62e-01 +1.76e-01 +2.90e-01 +4.08e-01 +1.58e-01 +1.72e-01 +1.68e-01 +1.62e-01 +1.66e-01 +1.59e-01 +1.63e-01 +1.58e-01 +1.60e-01 +1.59e-01 +1.65e-01 +1.63e-01 +1.77e-01 +2.45e-01 +3.92e-01 +1.64e-01 +1.71e-01 +1.74e-01 +1.72e-01 +1.57e-01 +1.65e-01 +1.63e-01 +1.63e-01 +1.69e-01 +1.58e-01 +1.61e-01 +1.61e-01 +1.77e-01 +2.45e-01 +3.36e-01 +1.29e-01 +1.57e-01 +1.68e-01 +1.66e-01 +1.63e-01 +1.63e-01 +1.59e-01 +1.61e-01 +1.65e-01 +1.56e-01 +1.59e-01 +1.65e-01 +1.60e-01 +2.43e-01 +3.30e-01 +1.08e-01 +1.62e-01 +1.62e-01 +1.61e-01 +1.54e-01 +1.63e-01 +1.64e-01 +1.50e-01 +1.57e-01 +1.51e-01 +1.50e-01 +1.67e-01 +1.72e-01 +2.44e-01 +2.79e-01 +8.59e-02 +1.61e-01 +1.64e-01 +1.57e-01 +1.55e-01 +1.57e-01 +1.57e-01 +1.51e-01 +1.49e-01 +1.54e-01 +1.56e-01 +1.67e-01 +1.70e-01 +2.42e-01 +3.48e-01 +1.32e-01 +1.67e-01 +1.73e-01 +1.64e-01 +1.62e-01 +1.60e-01 +1.61e-01 +1.56e-01 +1.47e-01 +1.51e-01 +1.54e-01 +1.57e-01 +1.59e-01 +2.26e-01 +2.53e-01 +9.32e-02 +1.63e-01 +1.63e-01 +1.60e-01 +1.55e-01 +1.57e-01 +1.58e-01 +1.54e-01 +1.47e-01 +1.46e-01 +1.48e-01 +1.43e-01 +1.50e-01 +2.09e-01 +1.68e-01 +6.28e-02 +1.57e-01 +1.64e-01 +1.64e-01 +1.60e-01 +1.60e-01 +1.58e-01 +1.58e-01 +1.57e-01 +1.47e-01 +1.50e-01 +1.52e-01 +1.43e-01 +2.11e-01 +1.66e-01 +6.17e-02 +1.65e-01 +1.72e-01 +1.62e-01 +1.64e-01 +1.66e-01 +1.57e-01 +1.57e-01 +1.50e-01 +1.40e-01 +1.48e-01 +1.46e-01 +1.44e-01 +1.95e-01 +1.25e-01 +4.98e-02 +1.61e-01 +1.66e-01 +1.70e-01 +1.64e-01 +1.67e-01 +1.67e-01 +1.68e-01 +1.58e-01 +1.43e-01 +1.45e-01 +1.46e-01 +1.43e-01 +1.94e-01 +1.25e-01 +3.60e-02 +1.61e-01 +1.74e-01 +1.74e-01 +1.76e-01 +1.73e-01 +1.72e-01 +1.68e-01 +1.61e-01 +1.59e-01 +1.56e-01 +1.59e-01 +1.57e-01 +1.77e-01 +1.09e-01 +3.74e-02 +2.48e-01 +2.48e-01 +2.49e-01 +2.42e-01 +2.47e-01 +2.55e-01 +2.19e-01 +2.25e-01 +2.25e-01 +2.17e-01 +2.21e-01 +2.26e-01 +2.15e-01 +6.24e-02 +1.90e-02 +3.68e-01 +2.72e-01 +3.41e-01 +3.58e-01 +3.64e-01 +2.32e-01 +2.34e-01 +2.20e-01 +1.88e-01 +1.78e-01 +1.34e-01 +1.25e-01 +1.07e-01 +4.68e-02 +1.29e-02 +1.29e-01 +8.63e-02 +1.42e-01 +1.36e-01 +1.37e-01 +8.94e-02 +8.09e-02 +8.37e-02 +5.69e-02 +6.46e-02 +3.15e-02 +3.86e-02 +3.51e-02 +2.57e-02 +1.29e-02 +1.69e-01 +1.62e-01 +1.66e-01 +1.70e-01 +1.69e-01 +1.61e-01 +1.58e-01 +1.51e-01 +1.52e-01 +1.53e-01 +1.52e-01 +1.73e-01 +2.54e-01 +4.12e-01 +1.51e-01 +1.68e-01 +1.75e-01 +1.65e-01 +1.59e-01 +1.62e-01 +1.56e-01 +1.57e-01 +1.55e-01 +1.59e-01 +1.66e-01 +1.59e-01 +1.67e-01 +2.35e-01 +3.25e-01 +1.29e-01 +1.62e-01 +1.64e-01 +1.68e-01 +1.59e-01 +1.51e-01 +1.59e-01 +1.53e-01 +1.53e-01 +1.55e-01 +1.63e-01 +1.60e-01 +1.65e-01 +2.33e-01 +2.78e-01 +1.07e-01 +1.62e-01 +1.63e-01 +1.60e-01 +1.61e-01 +1.54e-01 +1.57e-01 +1.59e-01 +1.51e-01 +1.51e-01 +1.58e-01 +1.54e-01 +1.61e-01 +2.39e-01 +2.48e-01 +1.01e-01 +1.55e-01 +1.54e-01 +1.61e-01 +1.66e-01 +1.55e-01 +1.53e-01 +1.56e-01 +1.51e-01 +1.48e-01 +1.53e-01 +1.63e-01 +1.62e-01 +2.42e-01 +3.21e-01 +1.18e-01 +1.66e-01 +1.52e-01 +1.62e-01 +1.62e-01 +1.56e-01 +1.52e-01 +1.55e-01 +1.57e-01 +1.55e-01 +1.53e-01 +1.53e-01 +1.64e-01 +2.46e-01 +3.03e-01 +1.11e-01 +1.63e-01 +1.59e-01 +1.68e-01 +1.56e-01 +1.52e-01 +1.55e-01 +1.56e-01 +1.49e-01 +1.49e-01 +1.51e-01 +1.45e-01 +1.49e-01 +2.22e-01 +2.88e-01 +1.02e-01 +1.66e-01 +1.62e-01 +1.61e-01 +1.50e-01 +1.50e-01 +1.51e-01 +1.59e-01 +1.46e-01 +1.43e-01 +1.42e-01 +1.41e-01 +1.51e-01 +2.22e-01 +1.88e-01 +6.51e-02 +1.60e-01 +1.59e-01 +1.57e-01 +1.61e-01 +1.55e-01 +1.57e-01 +1.53e-01 +1.53e-01 +1.45e-01 +1.44e-01 +1.47e-01 +1.59e-01 +2.35e-01 +1.91e-01 +5.69e-02 +1.62e-01 +1.59e-01 +1.63e-01 +1.59e-01 +1.55e-01 +1.54e-01 +1.50e-01 +1.47e-01 +1.50e-01 +1.46e-01 +1.43e-01 +1.43e-01 +2.21e-01 +1.37e-01 +5.36e-02 +1.66e-01 +1.65e-01 +1.50e-01 +1.68e-01 +1.65e-01 +1.61e-01 +1.55e-01 +1.49e-01 +1.47e-01 +1.51e-01 +1.43e-01 +1.50e-01 +1.92e-01 +9.97e-02 +2.93e-02 +1.73e-01 +1.65e-01 +1.70e-01 +7.83e-02 +1.73e-01 +1.78e-01 +1.65e-01 +1.50e-01 +1.60e-01 +1.55e-01 +1.57e-01 +1.55e-01 +1.89e-01 +8.91e-02 +2.68e-02 +2.32e-01 +2.36e-01 +2.40e-01 +2.31e-01 +2.41e-01 +2.39e-01 +2.01e-01 +2.12e-01 +2.21e-01 +2.12e-01 +2.04e-01 +2.02e-01 +2.14e-01 +8.26e-02 +2.65e-02 +3.07e-01 +2.51e-01 +2.10e-01 +2.95e-01 +2.86e-01 +2.41e-01 +1.69e-01 +1.21e-01 +1.92e-01 +1.82e-01 +1.29e-01 +1.24e-01 +1.04e-01 +4.53e-02 +1.74e-02 +1.16e-01 +8.31e-02 +8.94e-02 +9.43e-02 +1.16e-01 +9.01e-02 +7.46e-02 +3.83e-02 +6.35e-02 +6.43e-02 +4.23e-02 +4.16e-02 +3.17e-02 +2.60e-02 +1.26e-02 +1.63e-01 +1.58e-01 +1.60e-01 +1.62e-01 +1.60e-01 +1.59e-01 +1.60e-01 +1.51e-01 +1.47e-01 +1.55e-01 +1.51e-01 +1.68e-01 +2.47e-01 +3.18e-01 +1.27e-01 +1.64e-01 +1.61e-01 +1.56e-01 +1.63e-01 +1.63e-01 +1.54e-01 +1.50e-01 +1.49e-01 +1.56e-01 +1.58e-01 +1.58e-01 +1.64e-01 +2.39e-01 +3.04e-01 +1.13e-01 +1.65e-01 +1.63e-01 +1.62e-01 +1.57e-01 +1.57e-01 +1.57e-01 +1.53e-01 +1.49e-01 +1.57e-01 +1.63e-01 +1.63e-01 +1.70e-01 +2.39e-01 +2.29e-01 +8.46e-02 +1.62e-01 +1.63e-01 +1.58e-01 +1.58e-01 +1.56e-01 +1.55e-01 +1.50e-01 +1.51e-01 +1.52e-01 +1.60e-01 +1.57e-01 +1.64e-01 +2.46e-01 +2.16e-01 +7.36e-02 +1.56e-01 +1.54e-01 +1.56e-01 +1.62e-01 +1.52e-01 +1.50e-01 +1.55e-01 +1.52e-01 +1.52e-01 +1.50e-01 +1.58e-01 +1.67e-01 +2.47e-01 +3.21e-01 +1.15e-01 +1.57e-01 +1.55e-01 +1.56e-01 +1.58e-01 +1.48e-01 +1.43e-01 +1.42e-01 +1.56e-01 +1.49e-01 +1.52e-01 +1.51e-01 +1.58e-01 +2.31e-01 +2.63e-01 +9.53e-02 +1.48e-01 +1.56e-01 +1.59e-01 +1.52e-01 +1.60e-01 +1.43e-01 +1.43e-01 +1.44e-01 +1.45e-01 +1.43e-01 +1.48e-01 +1.51e-01 +2.09e-01 +2.10e-01 +7.84e-02 +1.57e-01 +1.60e-01 +1.55e-01 +1.53e-01 +1.57e-01 +1.44e-01 +1.44e-01 +1.36e-01 +1.36e-01 +1.46e-01 +1.43e-01 +1.46e-01 +2.17e-01 +1.67e-01 +7.08e-02 +1.59e-01 +1.56e-01 +1.56e-01 +1.54e-01 +1.53e-01 +1.52e-01 +1.50e-01 +1.42e-01 +1.37e-01 +1.39e-01 +1.41e-01 +1.47e-01 +2.03e-01 +1.75e-01 +5.51e-02 +1.63e-01 +1.62e-01 +1.57e-01 +1.53e-01 +1.45e-01 +1.52e-01 +1.52e-01 +1.43e-01 +1.41e-01 +1.38e-01 +1.39e-01 +1.52e-01 +2.05e-01 +1.61e-01 +6.97e-02 +1.62e-01 +1.56e-01 +1.58e-01 +1.55e-01 +1.58e-01 +1.56e-01 +1.53e-01 +1.53e-01 +1.49e-01 +1.41e-01 +1.44e-01 +1.57e-01 +2.11e-01 +1.22e-01 +4.27e-02 +1.66e-01 +1.69e-01 +1.61e-01 +1.62e-01 +1.68e-01 +1.74e-01 +1.60e-01 +1.57e-01 +1.57e-01 +1.62e-01 +1.48e-01 +1.54e-01 +2.17e-01 +1.14e-01 +3.49e-02 +2.43e-01 +2.30e-01 +2.33e-01 +2.43e-01 +2.46e-01 +2.48e-01 +2.46e-01 +2.21e-01 +2.22e-01 +2.12e-01 +2.00e-01 +2.02e-01 +2.14e-01 +8.94e-02 +3.01e-02 +2.79e-01 +2.63e-01 +2.52e-01 +2.63e-01 +3.00e-01 +2.68e-01 +2.93e-01 +1.90e-01 +2.03e-01 +1.54e-01 +1.13e-01 +1.27e-01 +8.82e-02 +3.87e-02 +1.55e-02 +1.03e-01 +9.09e-02 +9.09e-02 +8.99e-02 +1.07e-01 +8.75e-02 +1.17e-01 +5.68e-02 +7.16e-02 +5.22e-02 +3.31e-02 +3.49e-02 +2.69e-02 +1.66e-02 +1.14e-02 +1.46e-01 +1.55e-01 +1.57e-01 +1.59e-01 +1.63e-01 +1.54e-01 +1.49e-01 +1.48e-01 +1.45e-01 +1.48e-01 +1.48e-01 +1.54e-01 +2.45e-01 +2.69e-01 +8.34e-02 +1.54e-01 +1.59e-01 +1.57e-01 +1.51e-01 +1.55e-01 +1.57e-01 +1.60e-01 +1.49e-01 +1.54e-01 +1.50e-01 +1.54e-01 +1.62e-01 +2.41e-01 +2.97e-01 +1.15e-01 +1.60e-01 +1.61e-01 +1.61e-01 +1.53e-01 +1.56e-01 +1.52e-01 +1.53e-01 +1.57e-01 +1.52e-01 +1.52e-01 +1.55e-01 +1.69e-01 +2.49e-01 +2.52e-01 +8.15e-02 +1.59e-01 +1.59e-01 +1.52e-01 +1.50e-01 +1.53e-01 +1.59e-01 +1.47e-01 +1.51e-01 +1.51e-01 +1.56e-01 +1.56e-01 +1.64e-01 +2.40e-01 +2.46e-01 +8.06e-02 +1.58e-01 +1.59e-01 +1.58e-01 +1.56e-01 +1.53e-01 +1.46e-01 +1.48e-01 +1.48e-01 +1.47e-01 +1.53e-01 +1.48e-01 +1.62e-01 +2.39e-01 +2.66e-01 +1.02e-01 +1.55e-01 +1.54e-01 +1.57e-01 +1.52e-01 +1.48e-01 +1.50e-01 +1.40e-01 +1.37e-01 +1.50e-01 +1.50e-01 +1.46e-01 +1.52e-01 +2.23e-01 +2.22e-01 +8.99e-02 +1.58e-01 +1.60e-01 +1.54e-01 +1.47e-01 +1.47e-01 +1.45e-01 +1.42e-01 +1.28e-01 +1.33e-01 +1.40e-01 +1.51e-01 +1.53e-01 +2.08e-01 +1.44e-01 +5.19e-02 +1.57e-01 +1.54e-01 +1.54e-01 +1.42e-01 +1.51e-01 +1.44e-01 +1.35e-01 +1.28e-01 +1.11e-01 +1.40e-01 +1.49e-01 +1.55e-01 +2.22e-01 +1.31e-01 +4.13e-02 +1.56e-01 +1.53e-01 +1.57e-01 +1.42e-01 +1.52e-01 +1.49e-01 +1.45e-01 +1.32e-01 +1.30e-01 +1.27e-01 +1.41e-01 +1.41e-01 +2.11e-01 +1.55e-01 +4.43e-02 +1.49e-01 +1.52e-01 +1.53e-01 +1.56e-01 +1.47e-01 +1.45e-01 +1.40e-01 +1.37e-01 +1.43e-01 +1.35e-01 +1.34e-01 +1.42e-01 +1.98e-01 +1.25e-01 +3.99e-02 +1.57e-01 +1.48e-01 +1.49e-01 +1.52e-01 +1.50e-01 +1.48e-01 +1.50e-01 +1.48e-01 +1.44e-01 +1.43e-01 +1.35e-01 +1.39e-01 +1.94e-01 +1.07e-01 +3.11e-02 +1.62e-01 +1.61e-01 +1.61e-01 +1.63e-01 +1.63e-01 +1.60e-01 +1.55e-01 +1.55e-01 +1.50e-01 +1.56e-01 +1.43e-01 +1.32e-01 +1.83e-01 +1.02e-01 +2.51e-02 +2.34e-01 +2.25e-01 +2.20e-01 +2.27e-01 +2.41e-01 +2.35e-01 +2.13e-01 +2.04e-01 +2.13e-01 +2.16e-01 +2.20e-01 +1.80e-01 +1.76e-01 +9.68e-02 +3.54e-02 +3.12e-01 +2.64e-01 +2.26e-01 +2.68e-01 +2.60e-01 +2.43e-01 +2.35e-01 +1.81e-01 +1.60e-01 +1.47e-01 +1.51e-01 +1.34e-01 +7.35e-02 +4.05e-02 +2.19e-02 +1.06e-01 +9.90e-02 +8.77e-02 +9.61e-02 +9.91e-02 +7.56e-02 +1.05e-01 +6.20e-02 +5.67e-02 +3.97e-02 +4.31e-02 +4.78e-02 +2.87e-02 +1.59e-02 +8.92e-03 +1.61e-01 +1.59e-01 +1.57e-01 +1.59e-01 +1.51e-01 +1.49e-01 +1.54e-01 +1.51e-01 +1.53e-01 +1.49e-01 +1.52e-01 +1.48e-01 +2.27e-01 +1.82e-01 +8.22e-02 +1.61e-01 +1.54e-01 +1.57e-01 +1.56e-01 +1.53e-01 +1.49e-01 +1.46e-01 +1.41e-01 +1.51e-01 +1.51e-01 +1.52e-01 +1.52e-01 +2.22e-01 +2.08e-01 +7.81e-02 +1.54e-01 +1.58e-01 +1.52e-01 +1.53e-01 +1.48e-01 +1.49e-01 +1.45e-01 +1.43e-01 +1.44e-01 +1.48e-01 +1.58e-01 +1.55e-01 +2.25e-01 +2.48e-01 +1.01e-01 +1.57e-01 +1.48e-01 +1.51e-01 +1.47e-01 +1.46e-01 +1.52e-01 +1.48e-01 +1.47e-01 +1.46e-01 +1.48e-01 +1.49e-01 +1.57e-01 +2.21e-01 +1.69e-01 +6.52e-02 +1.57e-01 +1.55e-01 +1.55e-01 +1.53e-01 +1.51e-01 +1.55e-01 +1.46e-01 +1.49e-01 +1.42e-01 +1.45e-01 +1.45e-01 +1.57e-01 +2.19e-01 +1.36e-01 +4.96e-02 +1.57e-01 +1.50e-01 +1.53e-01 +1.57e-01 +1.54e-01 +1.50e-01 +1.45e-01 +1.40e-01 +1.30e-01 +1.38e-01 +1.42e-01 +1.51e-01 +2.13e-01 +1.41e-01 +4.31e-02 +1.56e-01 +1.57e-01 +1.53e-01 +1.52e-01 +1.51e-01 +1.44e-01 +1.42e-01 +1.28e-01 +1.21e-01 +1.26e-01 +1.40e-01 +1.53e-01 +2.16e-01 +1.61e-01 +4.81e-02 +1.48e-01 +1.48e-01 +1.47e-01 +1.49e-01 +1.49e-01 +1.43e-01 +1.40e-01 +1.23e-01 +8.97e-02 +1.34e-01 +1.43e-01 +1.48e-01 +2.10e-01 +1.68e-01 +5.02e-02 +1.53e-01 +7.09e-02 +1.47e-01 +1.48e-01 +1.43e-01 +1.46e-01 +6.84e-02 +1.27e-01 +1.24e-01 +1.31e-01 +1.42e-01 +1.48e-01 +2.01e-01 +1.56e-01 +5.15e-02 +1.50e-01 +1.52e-01 +1.52e-01 +1.47e-01 +1.42e-01 +1.35e-01 +1.39e-01 +1.38e-01 +1.37e-01 +1.35e-01 +1.36e-01 +1.36e-01 +1.92e-01 +1.22e-01 +4.76e-02 +1.52e-01 +1.61e-01 +1.49e-01 +1.45e-01 +1.40e-01 +1.40e-01 +1.34e-01 +1.35e-01 +1.38e-01 +1.38e-01 +1.27e-01 +1.35e-01 +1.77e-01 +7.50e-02 +2.64e-02 +1.58e-01 +1.56e-01 +1.50e-01 +1.45e-01 +1.50e-01 +1.50e-01 +1.42e-01 +1.42e-01 +1.52e-01 +1.46e-01 +1.38e-01 +1.30e-01 +1.44e-01 +6.83e-02 +2.86e-02 +2.28e-01 +2.11e-01 +2.08e-01 +2.12e-01 +2.17e-01 +2.09e-01 +2.06e-01 +1.89e-01 +2.08e-01 +1.88e-01 +1.88e-01 +1.66e-01 +1.33e-01 +4.13e-02 +1.70e-02 +2.67e-01 +2.70e-01 +2.31e-01 +1.72e-01 +1.66e-01 +2.16e-01 +1.96e-01 +1.52e-01 +1.41e-01 +1.31e-01 +1.44e-01 +1.17e-01 +4.82e-02 +2.09e-02 +8.63e-03 +9.47e-02 +1.04e-01 +9.02e-02 +5.55e-02 +5.39e-02 +6.95e-02 +7.10e-02 +4.92e-02 +4.74e-02 +3.52e-02 +4.69e-02 +4.03e-02 +1.69e-02 +9.25e-03 +5.98e-03 +1.46e-01 +1.50e-01 +1.48e-01 +1.53e-01 +1.56e-01 +1.57e-01 +1.56e-01 +1.54e-01 +1.44e-01 +1.42e-01 +1.44e-01 +1.52e-01 +2.10e-01 +1.56e-01 +5.53e-02 +1.50e-01 +1.57e-01 +1.57e-01 +1.57e-01 +1.54e-01 +1.51e-01 +1.52e-01 +1.42e-01 +1.42e-01 +1.39e-01 +1.45e-01 +1.50e-01 +2.11e-01 +1.18e-01 +3.92e-02 +1.49e-01 +1.48e-01 +1.55e-01 +1.54e-01 +1.51e-01 +1.50e-01 +1.48e-01 +1.48e-01 +1.41e-01 +1.38e-01 +1.45e-01 +1.54e-01 +2.08e-01 +1.62e-01 +5.89e-02 +1.48e-01 +1.49e-01 +1.51e-01 +1.50e-01 +1.51e-01 +1.49e-01 +1.48e-01 +1.47e-01 +1.34e-01 +1.33e-01 +1.53e-01 +1.54e-01 +1.96e-01 +1.55e-01 +6.15e-02 +1.51e-01 +1.53e-01 +1.59e-01 +1.48e-01 +1.51e-01 +1.48e-01 +1.45e-01 +1.41e-01 +1.38e-01 +1.37e-01 +1.49e-01 +1.46e-01 +2.06e-01 +1.25e-01 +3.47e-02 +1.51e-01 +1.47e-01 +1.52e-01 +1.53e-01 +1.44e-01 +1.40e-01 +1.45e-01 +1.38e-01 +1.39e-01 +1.34e-01 +1.36e-01 +1.50e-01 +1.96e-01 +1.29e-01 +4.48e-02 +1.49e-01 +1.43e-01 +1.49e-01 +1.46e-01 +1.48e-01 +1.42e-01 +1.35e-01 +1.27e-01 +1.24e-01 +1.26e-01 +1.29e-01 +1.38e-01 +1.87e-01 +1.53e-01 +5.84e-02 +1.46e-01 +1.51e-01 +1.44e-01 +1.45e-01 +1.45e-01 +1.41e-01 +1.31e-01 +1.24e-01 +1.29e-01 +1.30e-01 +1.43e-01 +1.42e-01 +1.91e-01 +1.36e-01 +5.08e-02 +1.39e-01 +1.40e-01 +1.43e-01 +1.39e-01 +1.43e-01 +1.39e-01 +1.35e-01 +1.27e-01 +1.23e-01 +1.22e-01 +1.41e-01 +1.37e-01 +1.86e-01 +1.09e-01 +3.41e-02 +1.44e-01 +1.41e-01 +1.44e-01 +1.37e-01 +1.37e-01 +1.39e-01 +1.29e-01 +1.33e-01 +1.20e-01 +1.18e-01 +1.29e-01 +1.36e-01 +1.94e-01 +1.23e-01 +3.96e-02 +1.50e-01 +1.47e-01 +1.48e-01 +1.39e-01 +1.35e-01 +1.36e-01 +1.34e-01 +1.40e-01 +1.32e-01 +1.27e-01 +1.23e-01 +1.26e-01 +1.61e-01 +8.34e-02 +2.18e-02 +1.58e-01 +1.51e-01 +1.50e-01 +1.46e-01 +1.45e-01 +1.35e-01 +1.30e-01 +1.41e-01 +1.39e-01 +1.36e-01 +1.32e-01 +1.22e-01 +1.45e-01 +5.48e-02 +1.56e-02 +2.28e-01 +2.05e-01 +2.09e-01 +1.89e-01 +2.03e-01 +1.97e-01 +1.63e-01 +1.67e-01 +1.68e-01 +1.92e-01 +1.83e-01 +1.55e-01 +1.14e-01 +3.43e-02 +1.15e-02 +2.24e-01 +2.31e-01 +1.67e-01 +1.43e-01 +1.53e-01 +1.76e-01 +1.13e-01 +9.77e-02 +8.62e-02 +1.49e-01 +1.29e-01 +8.35e-02 +4.44e-02 +1.21e-02 +4.84e-03 +7.75e-02 +7.83e-02 +5.37e-02 +5.23e-02 +4.63e-02 +6.06e-02 +4.19e-02 +3.16e-02 +2.72e-02 +5.09e-02 +4.06e-02 +2.76e-02 +1.94e-02 +8.81e-03 +2.34e-03 +1.54e-01 +1.58e-01 +1.62e-01 +1.48e-01 +1.57e-01 +1.52e-01 +1.49e-01 +1.54e-01 +1.42e-01 +1.36e-01 +1.36e-01 +1.50e-01 +2.08e-01 +1.23e-01 +3.56e-02 +1.51e-01 +1.53e-01 +1.59e-01 +1.57e-01 +1.46e-01 +1.55e-01 +1.50e-01 +1.49e-01 +1.41e-01 +1.41e-01 +1.42e-01 +1.48e-01 +2.00e-01 +1.32e-01 +4.13e-02 +1.48e-01 +1.50e-01 +1.53e-01 +1.52e-01 +1.54e-01 +1.42e-01 +1.48e-01 +1.50e-01 +1.40e-01 +1.37e-01 +1.38e-01 +1.53e-01 +2.20e-01 +1.65e-01 +5.51e-02 +1.52e-01 +1.44e-01 +1.49e-01 +1.46e-01 +1.48e-01 +1.48e-01 +1.45e-01 +1.46e-01 +1.38e-01 +1.40e-01 +1.43e-01 +1.39e-01 +1.95e-01 +1.78e-01 +7.38e-02 +1.48e-01 +1.45e-01 +1.44e-01 +1.47e-01 +1.46e-01 +1.44e-01 +1.42e-01 +1.45e-01 +1.43e-01 +1.37e-01 +1.43e-01 +1.49e-01 +1.94e-01 +1.37e-01 +4.11e-02 +1.52e-01 +1.48e-01 +1.45e-01 +1.38e-01 +1.38e-01 +1.40e-01 +1.41e-01 +1.32e-01 +1.36e-01 +1.36e-01 +1.37e-01 +1.48e-01 +2.02e-01 +1.53e-01 +5.25e-02 +1.45e-01 +1.41e-01 +1.44e-01 +1.36e-01 +1.36e-01 +1.36e-01 +1.33e-01 +1.32e-01 +1.26e-01 +1.32e-01 +1.37e-01 +1.38e-01 +1.71e-01 +1.19e-01 +4.26e-02 +1.40e-01 +1.43e-01 +1.46e-01 +1.39e-01 +1.38e-01 +1.34e-01 +1.29e-01 +1.26e-01 +1.28e-01 +1.28e-01 +1.34e-01 +1.39e-01 +1.70e-01 +7.71e-02 +3.01e-02 +1.38e-01 +1.12e-01 +1.38e-01 +1.41e-01 +1.44e-01 +1.46e-01 +1.34e-01 +1.11e-01 +1.24e-01 +1.20e-01 +1.22e-01 +1.33e-01 +1.84e-01 +8.77e-02 +2.26e-02 +1.45e-01 +1.37e-01 +1.37e-01 +1.29e-01 +1.34e-01 +1.37e-01 +1.34e-01 +1.29e-01 +1.23e-01 +1.19e-01 +1.21e-01 +1.25e-01 +1.84e-01 +9.19e-02 +2.31e-02 +1.48e-01 +1.32e-01 +1.36e-01 +1.34e-01 +1.41e-01 +1.34e-01 +1.32e-01 +1.27e-01 +1.27e-01 +1.20e-01 +1.10e-01 +1.17e-01 +1.65e-01 +9.68e-02 +2.83e-02 +1.48e-01 +1.35e-01 +1.35e-01 +1.43e-01 +1.44e-01 +1.40e-01 +1.43e-01 +1.35e-01 +1.34e-01 +1.29e-01 +1.17e-01 +9.99e-02 +9.90e-02 +5.49e-02 +1.66e-02 +2.22e-01 +2.00e-01 +2.03e-01 +2.10e-01 +2.09e-01 +1.99e-01 +1.86e-01 +1.93e-01 +1.79e-01 +1.90e-01 +1.70e-01 +1.45e-01 +1.22e-01 +4.35e-02 +1.22e-02 +2.30e-01 +1.84e-01 +1.79e-01 +1.67e-01 +1.72e-01 +1.61e-01 +1.13e-01 +1.16e-01 +1.06e-01 +1.13e-01 +1.20e-01 +8.32e-02 +4.37e-02 +1.70e-02 +5.87e-03 +7.01e-02 +5.48e-02 +4.65e-02 +4.76e-02 +5.00e-02 +5.48e-02 +3.77e-02 +3.45e-02 +3.12e-02 +3.14e-02 +3.88e-02 +2.77e-02 +1.27e-02 +6.38e-03 +1.50e-03 +1.48e-01 +1.54e-01 +1.58e-01 +1.56e-01 +1.55e-01 +1.46e-01 +1.44e-01 +1.48e-01 +1.42e-01 +1.44e-01 +1.40e-01 +1.54e-01 +1.94e-01 +1.38e-01 +5.04e-02 +1.51e-01 +1.53e-01 +1.49e-01 +1.49e-01 +1.49e-01 +1.53e-01 +1.51e-01 +1.50e-01 +1.45e-01 +1.36e-01 +1.42e-01 +1.57e-01 +2.09e-01 +1.55e-01 +4.56e-02 +1.55e-01 +1.48e-01 +1.43e-01 +1.44e-01 +1.46e-01 +1.54e-01 +1.50e-01 +1.51e-01 +1.54e-01 +1.38e-01 +1.36e-01 +1.52e-01 +2.10e-01 +1.66e-01 +5.44e-02 +1.48e-01 +1.47e-01 +1.46e-01 +1.43e-01 +1.49e-01 +1.48e-01 +1.51e-01 +1.49e-01 +1.42e-01 +1.38e-01 +1.39e-01 +1.49e-01 +1.94e-01 +1.42e-01 +5.42e-02 +1.43e-01 +1.39e-01 +1.46e-01 +1.48e-01 +1.48e-01 +1.42e-01 +1.41e-01 +1.46e-01 +1.40e-01 +1.38e-01 +1.43e-01 +1.43e-01 +1.95e-01 +1.20e-01 +3.81e-02 +1.49e-01 +1.42e-01 +1.47e-01 +1.42e-01 +1.43e-01 +1.43e-01 +1.42e-01 +1.41e-01 +1.36e-01 +1.33e-01 +1.38e-01 +1.42e-01 +1.87e-01 +1.10e-01 +4.00e-02 +1.46e-01 +1.44e-01 +1.42e-01 +1.42e-01 +1.42e-01 +1.43e-01 +1.36e-01 +1.37e-01 +1.32e-01 +1.37e-01 +1.30e-01 +1.42e-01 +1.97e-01 +1.41e-01 +4.74e-02 +1.42e-01 +1.46e-01 +1.45e-01 +1.44e-01 +1.40e-01 +1.37e-01 +1.29e-01 +1.32e-01 +1.28e-01 +1.22e-01 +1.29e-01 +1.44e-01 +1.79e-01 +8.11e-02 +2.49e-02 +1.36e-01 +1.40e-01 +1.42e-01 +1.45e-01 +1.42e-01 +1.35e-01 +1.28e-01 +1.25e-01 +1.21e-01 +1.20e-01 +1.24e-01 +1.37e-01 +1.76e-01 +8.67e-02 +2.55e-02 +1.41e-01 +1.39e-01 +1.39e-01 +1.42e-01 +1.37e-01 +1.33e-01 +1.30e-01 +1.23e-01 +1.22e-01 +1.24e-01 +1.16e-01 +1.28e-01 +1.68e-01 +1.03e-01 +3.30e-02 +1.41e-01 +1.35e-01 +1.34e-01 +1.33e-01 +1.33e-01 +1.34e-01 +1.37e-01 +1.31e-01 +1.21e-01 +1.17e-01 +1.11e-01 +1.13e-01 +1.57e-01 +8.80e-02 +2.97e-02 +1.53e-01 +1.39e-01 +1.45e-01 +1.45e-01 +1.38e-01 +1.49e-01 +1.41e-01 +1.36e-01 +1.24e-01 +1.23e-01 +1.14e-01 +9.70e-02 +1.01e-01 +5.74e-02 +1.83e-02 +2.39e-01 +1.91e-01 +1.79e-01 +2.07e-01 +1.97e-01 +2.03e-01 +1.92e-01 +2.07e-01 +1.99e-01 +2.04e-01 +1.76e-01 +1.35e-01 +1.07e-01 +3.67e-02 +1.30e-02 +1.91e-01 +1.54e-01 +1.49e-01 +1.68e-01 +1.82e-01 +1.72e-01 +1.48e-01 +1.49e-01 +1.30e-01 +1.06e-01 +9.60e-02 +7.07e-02 +4.00e-02 +1.71e-02 +7.45e-03 +7.31e-02 +6.14e-02 +6.36e-02 +5.75e-02 +6.28e-02 +5.80e-02 +4.73e-02 +4.31e-02 +4.49e-02 +3.41e-02 +3.27e-02 +2.30e-02 +1.26e-02 +7.67e-03 +3.56e-03 +1.42e-01 +1.47e-01 +1.56e-01 +1.59e-01 +1.58e-01 +1.56e-01 +1.58e-01 +1.63e-01 +1.48e-01 +1.51e-01 +1.49e-01 +1.44e-01 +1.75e-01 +9.73e-02 +3.77e-02 +1.45e-01 +1.50e-01 +1.49e-01 +1.50e-01 +1.53e-01 +1.52e-01 +1.51e-01 +1.54e-01 +1.52e-01 +1.51e-01 +1.48e-01 +1.46e-01 +1.93e-01 +1.30e-01 +4.16e-02 +1.46e-01 +1.48e-01 +1.46e-01 +1.53e-01 +1.47e-01 +1.54e-01 +1.58e-01 +1.45e-01 +1.47e-01 +1.46e-01 +1.45e-01 +1.50e-01 +1.99e-01 +1.42e-01 +4.85e-02 +1.46e-01 +1.48e-01 +1.56e-01 +1.44e-01 +1.54e-01 +1.56e-01 +1.52e-01 +1.46e-01 +1.44e-01 +1.37e-01 +1.38e-01 +1.46e-01 +1.94e-01 +1.11e-01 +3.61e-02 +1.45e-01 +1.48e-01 +1.51e-01 +1.46e-01 +1.54e-01 +1.54e-01 +1.45e-01 +1.44e-01 +1.48e-01 +1.40e-01 +1.46e-01 +1.49e-01 +1.93e-01 +1.06e-01 +3.16e-02 +1.45e-01 +1.48e-01 +1.50e-01 +1.56e-01 +1.46e-01 +1.51e-01 +1.44e-01 +1.41e-01 +1.32e-01 +1.41e-01 +1.41e-01 +1.40e-01 +2.04e-01 +1.15e-01 +3.10e-02 +1.41e-01 +1.46e-01 +1.41e-01 +1.48e-01 +1.45e-01 +1.45e-01 +1.44e-01 +1.38e-01 +1.34e-01 +1.34e-01 +1.38e-01 +1.42e-01 +1.85e-01 +1.26e-01 +3.53e-02 +1.38e-01 +1.45e-01 +1.45e-01 +1.49e-01 +1.41e-01 +1.40e-01 +1.33e-01 +1.34e-01 +1.33e-01 +1.36e-01 +1.35e-01 +1.37e-01 +1.76e-01 +1.16e-01 +4.10e-02 +1.35e-01 +1.39e-01 +1.44e-01 +1.43e-01 +1.44e-01 +1.40e-01 +1.27e-01 +1.29e-01 +1.24e-01 +1.24e-01 +1.21e-01 +1.25e-01 +1.74e-01 +9.17e-02 +2.60e-02 +1.39e-01 +1.35e-01 +1.40e-01 +1.43e-01 +1.45e-01 +1.32e-01 +1.32e-01 +1.29e-01 +1.20e-01 +1.22e-01 +1.14e-01 +1.15e-01 +1.43e-01 +8.26e-02 +2.82e-02 +1.37e-01 +1.36e-01 +1.37e-01 +1.38e-01 +1.39e-01 +1.32e-01 +1.34e-01 +1.31e-01 +1.19e-01 +1.18e-01 +1.10e-01 +1.13e-01 +1.51e-01 +5.50e-02 +1.63e-02 +1.36e-01 +1.38e-01 +1.40e-01 +1.44e-01 +1.37e-01 +1.43e-01 +1.44e-01 +1.39e-01 +1.26e-01 +1.21e-01 +1.14e-01 +1.05e-01 +1.24e-01 +4.77e-02 +1.43e-02 +1.96e-01 +1.79e-01 +1.80e-01 +1.95e-01 +1.99e-01 +1.94e-01 +1.81e-01 +1.92e-01 +1.80e-01 +1.60e-01 +1.61e-01 +1.34e-01 +7.13e-02 +2.07e-02 +7.42e-03 +1.76e-01 +9.49e-02 +1.22e-01 +1.31e-01 +1.35e-01 +1.34e-01 +1.06e-01 +1.42e-01 +1.15e-01 +7.49e-02 +8.42e-02 +5.97e-02 +2.86e-02 +1.13e-02 +3.88e-03 +5.74e-02 +3.06e-02 +3.68e-02 +4.09e-02 +5.27e-02 +4.71e-02 +3.30e-02 +4.67e-02 +3.85e-02 +2.55e-02 +2.40e-02 +1.51e-02 +1.04e-02 +6.23e-03 +3.39e-03 +1.51e-01 +1.61e-01 +1.68e-01 +1.62e-01 +1.62e-01 +1.64e-01 +1.64e-01 +1.55e-01 +1.53e-01 +1.51e-01 +1.54e-01 +1.45e-01 +1.43e-01 +3.50e-02 +1.38e-02 +1.65e-01 +1.68e-01 +1.64e-01 +1.54e-01 +1.51e-01 +1.54e-01 +1.57e-01 +1.50e-01 +1.50e-01 +1.49e-01 +1.55e-01 +1.49e-01 +1.60e-01 +6.68e-02 +2.43e-02 +1.59e-01 +1.68e-01 +1.59e-01 +1.54e-01 +1.55e-01 +1.66e-01 +1.64e-01 +1.60e-01 +1.47e-01 +1.49e-01 +1.42e-01 +1.60e-01 +2.06e-01 +1.03e-01 +2.77e-02 +1.56e-01 +1.59e-01 +1.54e-01 +1.54e-01 +1.59e-01 +1.65e-01 +5.07e-02 +1.43e-01 +1.52e-01 +1.45e-01 +1.35e-01 +1.44e-01 +1.79e-01 +9.16e-02 +3.06e-02 +1.50e-01 +1.51e-01 +1.54e-01 +1.55e-01 +1.59e-01 +1.59e-01 +1.53e-01 +1.47e-01 +1.53e-01 +1.51e-01 +1.40e-01 +1.45e-01 +1.90e-01 +1.07e-01 +2.94e-02 +1.50e-01 +1.52e-01 +1.48e-01 +1.54e-01 +1.52e-01 +1.51e-01 +1.50e-01 +1.43e-01 +1.47e-01 +1.46e-01 +1.38e-01 +1.35e-01 +1.78e-01 +9.46e-02 +3.09e-02 +1.41e-01 +1.42e-01 +1.53e-01 +1.56e-01 +1.53e-01 +1.48e-01 +1.48e-01 +1.41e-01 +1.38e-01 +1.40e-01 +1.40e-01 +1.30e-01 +1.49e-01 +9.60e-02 +3.33e-02 +1.42e-01 +1.46e-01 +1.40e-01 +1.50e-01 +1.45e-01 +1.45e-01 +1.50e-01 +1.45e-01 +1.41e-01 +1.33e-01 +1.36e-01 +1.37e-01 +1.71e-01 +7.74e-02 +2.54e-02 +1.45e-01 +1.43e-01 +1.47e-01 +1.51e-01 +1.49e-01 +1.54e-01 +1.42e-01 +1.37e-01 +1.34e-01 +1.33e-01 +1.27e-01 +1.27e-01 +1.66e-01 +7.29e-02 +2.38e-02 +1.44e-01 +1.39e-01 +1.51e-01 +1.49e-01 +1.48e-01 +1.46e-01 +1.38e-01 +1.29e-01 +1.23e-01 +1.18e-01 +1.23e-01 +1.14e-01 +1.60e-01 +7.60e-02 +2.69e-02 +1.34e-01 +1.33e-01 +1.39e-01 +1.41e-01 +1.50e-01 +1.43e-01 +1.31e-01 +1.28e-01 +1.23e-01 +1.19e-01 +1.12e-01 +1.08e-01 +1.37e-01 +5.02e-02 +1.48e-02 +1.33e-01 +5.34e-02 +1.34e-01 +1.36e-01 +1.35e-01 +1.30e-01 +1.37e-01 +1.40e-01 +1.27e-01 +1.22e-01 +1.08e-01 +1.01e-01 +1.15e-01 +4.47e-02 +1.28e-02 +1.73e-01 +1.60e-01 +1.60e-01 +1.70e-01 +1.65e-01 +1.66e-01 +1.67e-01 +1.80e-01 +1.81e-01 +1.46e-01 +1.35e-01 +1.18e-01 +6.95e-02 +2.21e-02 +7.42e-03 +1.30e-01 +7.03e-02 +8.47e-02 +1.05e-01 +8.11e-02 +8.16e-02 +7.32e-02 +7.94e-02 +1.08e-01 +7.59e-02 +5.62e-02 +4.38e-02 +2.63e-02 +6.47e-03 +2.09e-03 +5.13e-02 +2.67e-02 +3.48e-02 +3.62e-02 +2.93e-02 +2.83e-02 +2.47e-02 +2.60e-02 +3.29e-02 +2.55e-02 +1.63e-02 +1.59e-02 +1.02e-02 +3.46e-03 +1.50e-03 +2.17e-01 +2.25e-01 +2.43e-01 +2.43e-01 +2.31e-01 +2.22e-01 +2.22e-01 +2.12e-01 +2.21e-01 +1.98e-01 +1.99e-01 +2.04e-01 +1.57e-01 +3.11e-02 +7.85e-03 +2.30e-01 +2.10e-01 +2.47e-01 +2.20e-01 +2.21e-01 +2.29e-01 +2.22e-01 +2.06e-01 +1.98e-01 +2.04e-01 +1.90e-01 +1.83e-01 +1.78e-01 +5.75e-02 +1.61e-02 +2.24e-01 +2.08e-01 +2.36e-01 +2.21e-01 +2.12e-01 +2.36e-01 +2.08e-01 +2.30e-01 +2.06e-01 +2.08e-01 +1.93e-01 +1.84e-01 +2.10e-01 +9.89e-02 +3.10e-02 +2.25e-01 +2.06e-01 +2.18e-01 +2.25e-01 +2.19e-01 +2.39e-01 +2.22e-01 +2.20e-01 +2.12e-01 +2.02e-01 +1.75e-01 +1.62e-01 +1.73e-01 +6.25e-02 +1.80e-02 +2.16e-01 +2.06e-01 +2.12e-01 +2.21e-01 +2.09e-01 +2.25e-01 +2.54e-01 +2.18e-01 +2.16e-01 +2.24e-01 +1.99e-01 +1.77e-01 +1.57e-01 +7.90e-02 +2.92e-02 +2.13e-01 +1.96e-01 +2.07e-01 +2.04e-01 +2.00e-01 +2.17e-01 +2.17e-01 +2.01e-01 +2.06e-01 +2.15e-01 +1.92e-01 +1.66e-01 +1.68e-01 +8.03e-02 +2.44e-02 +1.90e-01 +1.93e-01 +2.12e-01 +2.07e-01 +2.00e-01 +2.08e-01 +2.04e-01 +1.97e-01 +1.68e-01 +1.90e-01 +1.82e-01 +1.49e-01 +1.55e-01 +6.10e-02 +1.96e-02 +1.94e-01 +1.89e-01 +2.00e-01 +2.16e-01 +2.22e-01 +2.06e-01 +2.02e-01 +1.99e-01 +1.77e-01 +1.77e-01 +1.83e-01 +1.68e-01 +1.29e-01 +3.50e-02 +1.16e-02 +1.93e-01 +2.00e-01 +2.02e-01 +2.11e-01 +2.16e-01 +1.93e-01 +2.15e-01 +2.05e-01 +1.80e-01 +1.82e-01 +1.71e-01 +1.65e-01 +1.61e-01 +4.47e-02 +1.50e-02 +1.94e-01 +2.06e-01 +2.19e-01 +2.03e-01 +2.12e-01 +1.96e-01 +2.02e-01 +1.81e-01 +1.66e-01 +1.60e-01 +1.62e-01 +1.62e-01 +1.56e-01 +4.92e-02 +1.53e-02 +1.78e-01 +1.86e-01 +2.05e-01 +2.04e-01 +1.97e-01 +2.15e-01 +1.88e-01 +1.63e-01 +1.57e-01 +1.38e-01 +1.47e-01 +1.39e-01 +1.01e-01 +4.20e-02 +1.54e-02 +1.47e-01 +1.52e-01 +1.77e-01 +1.74e-01 +1.84e-01 +1.91e-01 +2.00e-01 +1.85e-01 +1.68e-01 +1.42e-01 +1.34e-01 +1.28e-01 +9.77e-02 +2.94e-02 +1.17e-02 +1.28e-01 +1.39e-01 +1.56e-01 +1.44e-01 +1.64e-01 +1.66e-01 +1.39e-01 +1.87e-01 +1.87e-01 +1.57e-01 +1.18e-01 +9.64e-02 +6.30e-02 +1.82e-02 +8.08e-03 +7.18e-02 +4.39e-02 +5.20e-02 +6.11e-02 +4.96e-02 +4.82e-02 +4.41e-02 +5.38e-02 +8.79e-02 +5.77e-02 +2.70e-02 +2.61e-02 +1.49e-02 +4.93e-03 +2.78e-03 +2.74e-02 +1.41e-02 +1.81e-02 +1.93e-02 +1.48e-02 +1.51e-02 +1.60e-02 +1.57e-02 +2.80e-02 +2.17e-02 +1.10e-02 +8.28e-03 +4.76e-03 +2.53e-03 +9.95e-04 +2.15e-01 +2.13e-01 +2.69e-01 +1.97e-01 +2.97e-01 +2.44e-01 +2.16e-01 +2.27e-01 +1.95e-01 +1.69e-01 +1.21e-01 +1.27e-01 +1.07e-01 +2.85e-02 +7.97e-03 +2.71e-01 +1.94e-01 +3.20e-01 +3.60e-01 +2.90e-01 +2.34e-01 +1.99e-01 +2.04e-01 +1.73e-01 +1.40e-01 +1.29e-01 +1.08e-01 +8.99e-02 +4.08e-02 +1.48e-02 +2.36e-01 +2.27e-01 +2.95e-01 +2.38e-01 +1.88e-01 +2.38e-01 +1.95e-01 +2.03e-01 +1.85e-01 +1.65e-01 +1.78e-01 +1.40e-01 +7.70e-02 +4.33e-02 +2.87e-02 +2.64e-01 +2.27e-01 +2.72e-01 +3.07e-01 +2.33e-01 +2.58e-01 +2.71e-01 +2.36e-01 +2.17e-01 +1.73e-01 +1.26e-01 +9.14e-02 +6.26e-02 +3.03e-02 +1.37e-02 +2.60e-01 +1.95e-01 +2.57e-01 +3.08e-01 +2.65e-01 +2.75e-01 +2.70e-01 +2.25e-01 +1.83e-01 +1.71e-01 +1.54e-01 +8.13e-02 +5.27e-02 +2.61e-02 +1.31e-02 +2.09e-01 +1.59e-01 +2.23e-01 +2.30e-01 +1.63e-01 +1.84e-01 +2.17e-01 +1.62e-01 +1.39e-01 +1.79e-01 +1.60e-01 +1.05e-01 +5.74e-02 +2.47e-02 +1.55e-02 +1.50e-01 +1.80e-01 +2.09e-01 +2.09e-01 +1.83e-01 +2.00e-01 +1.82e-01 +1.57e-01 +1.32e-01 +1.22e-01 +9.76e-02 +6.91e-02 +4.61e-02 +2.65e-02 +1.49e-02 +1.12e-01 +1.42e-01 +1.70e-01 +1.73e-01 +1.86e-01 +1.93e-01 +1.34e-01 +1.27e-01 +9.53e-02 +8.75e-02 +9.91e-02 +7.87e-02 +4.52e-02 +2.11e-02 +7.92e-03 +1.22e-01 +1.39e-01 +1.69e-01 +2.22e-01 +1.74e-01 +1.60e-01 +1.21e-01 +1.47e-01 +1.19e-01 +1.07e-01 +9.89e-02 +8.43e-02 +5.88e-02 +2.01e-02 +8.74e-03 +9.13e-02 +1.61e-01 +2.14e-01 +1.61e-01 +1.43e-01 +1.01e-01 +1.25e-01 +1.42e-01 +1.15e-01 +9.15e-02 +8.87e-02 +6.91e-02 +5.19e-02 +2.72e-02 +8.44e-03 +9.87e-02 +1.23e-01 +1.61e-01 +1.11e-01 +1.42e-01 +1.45e-01 +1.19e-01 +1.11e-01 +8.68e-02 +5.91e-02 +7.60e-02 +6.84e-02 +4.18e-02 +2.17e-02 +9.67e-03 +8.56e-02 +7.21e-02 +1.04e-01 +9.72e-02 +9.63e-02 +1.38e-01 +1.19e-01 +7.48e-02 +6.52e-02 +5.51e-02 +5.18e-02 +5.14e-02 +3.71e-02 +9.91e-03 +3.65e-03 +4.31e-02 +5.32e-02 +6.28e-02 +4.91e-02 +5.90e-02 +8.59e-02 +7.51e-02 +7.34e-02 +6.11e-02 +6.19e-02 +4.42e-02 +3.60e-02 +2.68e-02 +1.01e-02 +4.00e-03 +1.92e-02 +2.02e-02 +2.30e-02 +1.98e-02 +2.54e-02 +3.35e-02 +2.56e-02 +3.19e-02 +3.49e-02 +2.85e-02 +1.72e-02 +1.18e-02 +8.37e-03 +4.19e-03 +2.02e-03 +1.38e-02 +7.42e-03 +8.36e-03 +8.57e-03 +9.08e-03 +1.23e-02 +8.17e-03 +1.02e-02 +1.45e-02 +1.35e-02 +6.28e-03 +3.59e-03 +3.28e-03 +1.49e-03 +5.93e-04 +7.32e-02 +7.34e-02 +9.95e-02 +6.68e-02 +1.09e-01 +8.20e-02 +7.49e-02 +7.94e-02 +7.32e-02 +5.71e-02 +3.93e-02 +3.97e-02 +3.57e-02 +2.10e-02 +7.29e-03 +1.10e-01 +5.23e-02 +1.07e-01 +1.46e-01 +1.24e-01 +8.85e-02 +7.13e-02 +6.52e-02 +6.37e-02 +5.06e-02 +3.96e-02 +3.23e-02 +2.70e-02 +1.79e-02 +8.68e-03 +8.76e-02 +6.94e-02 +1.01e-01 +9.79e-02 +5.28e-02 +8.50e-02 +7.16e-02 +6.22e-02 +6.61e-02 +4.64e-02 +6.19e-02 +5.31e-02 +2.85e-02 +1.22e-02 +1.28e-02 +8.68e-02 +7.27e-02 +1.06e-01 +1.20e-01 +8.06e-02 +8.67e-02 +9.61e-02 +8.95e-02 +8.71e-02 +6.56e-02 +4.39e-02 +3.10e-02 +2.08e-02 +1.24e-02 +5.85e-03 +1.06e-01 +7.84e-02 +9.79e-02 +1.14e-01 +1.02e-01 +9.64e-02 +1.00e-01 +7.46e-02 +7.16e-02 +5.01e-02 +5.24e-02 +2.38e-02 +1.47e-02 +8.69e-03 +5.50e-03 +6.48e-02 +5.48e-02 +7.05e-02 +7.64e-02 +6.19e-02 +5.28e-02 +6.84e-02 +5.17e-02 +4.47e-02 +5.44e-02 +5.78e-02 +4.35e-02 +2.02e-02 +8.44e-03 +4.29e-03 +6.15e-02 +5.80e-02 +7.42e-02 +8.23e-02 +4.82e-02 +5.80e-02 +5.99e-02 +5.52e-02 +5.07e-02 +4.11e-02 +3.25e-02 +2.74e-02 +1.58e-02 +7.93e-03 +7.33e-03 +3.07e-02 +5.33e-02 +5.17e-02 +5.32e-02 +5.86e-02 +6.36e-02 +3.92e-02 +4.20e-02 +3.02e-02 +2.37e-02 +2.60e-02 +2.49e-02 +1.38e-02 +1.14e-02 +8.22e-03 +3.87e-02 +4.20e-02 +5.55e-02 +6.88e-02 +6.66e-02 +6.23e-02 +3.77e-02 +4.86e-02 +4.16e-02 +3.47e-02 +2.92e-02 +2.68e-02 +2.21e-02 +9.30e-03 +3.87e-03 +2.33e-02 +4.93e-02 +6.49e-02 +6.24e-02 +4.58e-02 +2.96e-02 +4.02e-02 +4.66e-02 +4.25e-02 +2.79e-02 +2.67e-02 +2.26e-02 +1.37e-02 +1.36e-02 +7.38e-03 +3.11e-02 +5.02e-02 +5.87e-02 +3.06e-02 +4.64e-02 +4.05e-02 +2.71e-02 +3.77e-02 +3.09e-02 +2.18e-02 +2.34e-02 +1.91e-02 +1.39e-02 +1.02e-02 +7.91e-03 +2.26e-02 +2.44e-02 +3.23e-02 +2.90e-02 +2.99e-02 +4.72e-02 +4.07e-02 +3.01e-02 +2.01e-02 +1.70e-02 +1.57e-02 +1.51e-02 +1.50e-02 +4.17e-03 +1.63e-03 +1.86e-02 +1.84e-02 +2.18e-02 +2.46e-02 +1.84e-02 +3.15e-02 +2.72e-02 +2.27e-02 +1.73e-02 +2.03e-02 +1.19e-02 +1.20e-02 +1.14e-02 +4.19e-03 +1.45e-03 +6.21e-03 +9.69e-03 +9.74e-03 +7.36e-03 +1.15e-02 +1.57e-02 +1.41e-02 +1.64e-02 +1.88e-02 +1.03e-02 +1.09e-02 +6.84e-03 +4.29e-03 +2.69e-03 +2.28e-03 +4.54e-03 +5.03e-03 +5.40e-03 +5.12e-03 +6.04e-03 +1.01e-02 +6.83e-03 +6.36e-03 +1.16e-02 +7.66e-03 +5.81e-03 +3.71e-03 +1.48e-03 +1.00e-03 +1.45e-03 +Upper Bounds +8.55e-01 +8.64e-01 +8.59e-01 +8.67e-01 +8.53e-01 +8.16e-01 +8.31e-01 +8.50e-01 +8.39e-01 +8.80e-01 +8.66e-01 +8.96e-01 +1.31e+00 +2.22e+00 +8.38e-01 +8.15e-01 +8.82e-01 +8.67e-01 +7.61e-01 +8.32e-01 +8.60e-01 +8.42e-01 +8.42e-01 +8.32e-01 +8.34e-01 +8.80e-01 +8.65e-01 +1.22e+00 +1.82e+00 +6.13e-01 +8.56e-01 +8.32e-01 +8.43e-01 +8.53e-01 +8.33e-01 +8.57e-01 +8.19e-01 +7.78e-01 +8.33e-01 +8.19e-01 +8.41e-01 +9.08e-01 +1.30e+00 +2.06e+00 +7.76e-01 +8.38e-01 +8.08e-01 +8.28e-01 +8.25e-01 +8.10e-01 +8.21e-01 +8.13e-01 +8.31e-01 +8.17e-01 +8.36e-01 +7.91e-01 +8.95e-01 +1.26e+00 +2.05e+00 +6.73e-01 +8.25e-01 +8.69e-01 +8.34e-01 +8.56e-01 +8.29e-01 +8.11e-01 +8.01e-01 +8.32e-01 +7.75e-01 +8.33e-01 +8.31e-01 +9.11e-01 +1.34e+00 +1.73e+00 +6.60e-01 +8.48e-01 +8.49e-01 +8.41e-01 +8.41e-01 +8.43e-01 +7.95e-01 +8.08e-01 +7.96e-01 +7.85e-01 +7.74e-01 +8.58e-01 +8.98e-01 +1.29e+00 +1.49e+00 +5.33e-01 +8.40e-01 +7.98e-01 +7.91e-01 +8.03e-01 +7.88e-01 +7.96e-01 +7.81e-01 +7.66e-01 +7.83e-01 +7.62e-01 +7.93e-01 +7.72e-01 +1.21e+00 +1.65e+00 +6.11e-01 +8.18e-01 +8.25e-01 +8.44e-01 +8.18e-01 +8.00e-01 +8.28e-01 +8.00e-01 +7.60e-01 +7.23e-01 +7.65e-01 +7.83e-01 +7.01e-01 +1.04e+00 +9.49e-01 +3.97e-01 +8.24e-01 +8.27e-01 +8.57e-01 +8.58e-01 +8.13e-01 +8.03e-01 +7.83e-01 +7.70e-01 +7.46e-01 +7.07e-01 +7.24e-01 +7.65e-01 +1.18e+00 +9.01e-01 +2.88e-01 +8.34e-01 +8.73e-01 +8.70e-01 +8.56e-01 +8.29e-01 +7.71e-01 +7.75e-01 +7.58e-01 +7.64e-01 +7.06e-01 +7.64e-01 +7.43e-01 +1.07e+00 +8.82e-01 +3.35e-01 +8.58e-01 +8.29e-01 +8.72e-01 +8.48e-01 +8.46e-01 +7.87e-01 +7.50e-01 +7.65e-01 +7.38e-01 +7.34e-01 +8.10e-01 +7.43e-01 +1.02e+00 +6.73e-01 +2.03e-01 +9.03e-01 +9.01e-01 +8.60e-01 +8.26e-01 +9.18e-01 +8.72e-01 +7.91e-01 +8.39e-01 +7.95e-01 +7.87e-01 +7.88e-01 +7.38e-01 +1.08e+00 +5.23e-01 +1.69e-01 +1.31e+00 +1.26e+00 +1.18e+00 +1.25e+00 +1.32e+00 +1.21e+00 +1.20e+00 +1.16e+00 +1.16e+00 +1.14e+00 +1.11e+00 +1.10e+00 +1.03e+00 +4.01e-01 +1.10e-01 +2.50e+00 +1.84e+00 +1.94e+00 +1.32e+00 +1.43e+00 +1.59e+00 +1.30e+00 +1.19e+00 +9.40e-01 +9.83e-01 +9.19e-01 +7.52e-01 +4.99e-01 +1.94e-01 +9.48e-02 +1.09e+00 +7.40e-01 +8.05e-01 +4.38e-01 +4.72e-01 +5.81e-01 +4.22e-01 +4.06e-01 +3.50e-01 +3.08e-01 +3.25e-01 +2.23e-01 +1.85e-01 +8.09e-02 +3.66e-02 +8.48e-01 +8.45e-01 +8.50e-01 +8.39e-01 +8.13e-01 +7.97e-01 +8.76e-01 +8.45e-01 +7.95e-01 +8.18e-01 +8.84e-01 +8.93e-01 +1.31e+00 +1.96e+00 +7.41e-01 +8.63e-01 +8.69e-01 +8.49e-01 +8.32e-01 +8.42e-01 +8.08e-01 +8.09e-01 +8.36e-01 +7.99e-01 +8.20e-01 +8.33e-01 +9.00e-01 +1.21e+00 +1.86e+00 +7.23e-01 +8.57e-01 +8.27e-01 +8.35e-01 +8.27e-01 +8.44e-01 +8.48e-01 +8.19e-01 +8.39e-01 +8.01e-01 +8.48e-01 +8.52e-01 +8.71e-01 +1.31e+00 +1.65e+00 +5.73e-01 +8.64e-01 +8.75e-01 +8.50e-01 +8.46e-01 +8.43e-01 +8.17e-01 +8.28e-01 +8.15e-01 +8.07e-01 +8.04e-01 +8.51e-01 +8.94e-01 +1.24e+00 +1.82e+00 +6.58e-01 +8.61e-01 +8.65e-01 +8.57e-01 +8.28e-01 +8.15e-01 +8.13e-01 +8.36e-01 +8.01e-01 +7.82e-01 +8.17e-01 +8.58e-01 +8.55e-01 +1.26e+00 +1.71e+00 +6.99e-01 +8.39e-01 +8.48e-01 +8.35e-01 +8.30e-01 +8.61e-01 +8.03e-01 +7.79e-01 +7.79e-01 +7.65e-01 +7.73e-01 +8.23e-01 +8.92e-01 +1.26e+00 +1.83e+00 +6.65e-01 +8.50e-01 +8.43e-01 +8.01e-01 +8.18e-01 +8.51e-01 +8.15e-01 +7.63e-01 +7.50e-01 +7.52e-01 +7.40e-01 +7.66e-01 +8.29e-01 +1.17e+00 +1.50e+00 +5.74e-01 +8.24e-01 +8.15e-01 +7.95e-01 +7.88e-01 +7.97e-01 +7.70e-01 +7.69e-01 +7.35e-01 +6.98e-01 +6.91e-01 +6.35e-01 +6.08e-01 +9.93e-01 +8.87e-01 +3.56e-01 +7.90e-01 +8.73e-01 +8.38e-01 +8.31e-01 +8.29e-01 +7.89e-01 +7.80e-01 +7.18e-01 +7.42e-01 +7.23e-01 +6.87e-01 +7.01e-01 +1.01e+00 +6.82e-01 +2.08e-01 +8.24e-01 +8.78e-01 +8.46e-01 +8.43e-01 +7.84e-01 +8.35e-01 +7.79e-01 +7.48e-01 +7.63e-01 +7.14e-01 +7.56e-01 +7.03e-01 +1.02e+00 +7.48e-01 +2.25e-01 +8.45e-01 +8.73e-01 +8.56e-01 +8.16e-01 +8.44e-01 +8.36e-01 +7.99e-01 +7.51e-01 +7.67e-01 +7.20e-01 +7.86e-01 +7.45e-01 +1.01e+00 +6.73e-01 +2.04e-01 +8.93e-01 +8.59e-01 +8.64e-01 +8.51e-01 +8.70e-01 +8.91e-01 +8.41e-01 +7.94e-01 +7.85e-01 +8.08e-01 +8.08e-01 +7.83e-01 +9.73e-01 +4.60e-01 +1.58e-01 +1.24e+00 +1.32e+00 +1.27e+00 +1.29e+00 +1.40e+00 +1.26e+00 +1.17e+00 +1.20e+00 +1.08e+00 +1.09e+00 +1.21e+00 +1.11e+00 +9.96e-01 +3.09e-01 +8.83e-02 +1.56e+00 +1.49e+00 +1.49e+00 +1.58e+00 +1.83e+00 +1.75e+00 +1.41e+00 +1.38e+00 +1.12e+00 +8.28e-01 +8.50e-01 +8.27e-01 +5.48e-01 +1.84e-01 +7.71e-02 +5.56e-01 +5.50e-01 +5.89e-01 +5.41e-01 +6.72e-01 +7.04e-01 +4.96e-01 +4.98e-01 +4.70e-01 +2.59e-01 +2.70e-01 +2.72e-01 +2.11e-01 +9.38e-02 +3.66e-02 +8.67e-01 +8.42e-01 +8.70e-01 +8.39e-01 +7.98e-01 +8.02e-01 +8.06e-01 +7.94e-01 +8.48e-01 +8.04e-01 +8.10e-01 +8.81e-01 +1.45e+00 +2.04e+00 +7.89e-01 +8.58e-01 +8.42e-01 +8.10e-01 +8.30e-01 +7.96e-01 +8.14e-01 +7.91e-01 +8.00e-01 +7.95e-01 +8.24e-01 +8.16e-01 +8.87e-01 +1.22e+00 +1.96e+00 +8.18e-01 +8.56e-01 +8.69e-01 +8.58e-01 +7.87e-01 +8.24e-01 +8.16e-01 +8.16e-01 +8.43e-01 +7.92e-01 +8.05e-01 +8.03e-01 +8.83e-01 +1.22e+00 +1.68e+00 +6.47e-01 +7.87e-01 +8.38e-01 +8.29e-01 +8.15e-01 +8.16e-01 +7.97e-01 +8.04e-01 +8.23e-01 +7.82e-01 +7.95e-01 +8.24e-01 +7.98e-01 +1.22e+00 +1.65e+00 +5.42e-01 +8.09e-01 +8.09e-01 +8.05e-01 +7.72e-01 +8.14e-01 +8.20e-01 +7.50e-01 +7.87e-01 +7.53e-01 +7.48e-01 +8.36e-01 +8.59e-01 +1.22e+00 +1.39e+00 +4.29e-01 +8.07e-01 +8.21e-01 +7.86e-01 +7.76e-01 +7.84e-01 +7.85e-01 +7.56e-01 +7.44e-01 +7.72e-01 +7.80e-01 +8.33e-01 +8.48e-01 +1.21e+00 +1.74e+00 +6.61e-01 +8.36e-01 +8.64e-01 +8.19e-01 +8.11e-01 +8.00e-01 +8.07e-01 +7.80e-01 +7.34e-01 +7.56e-01 +7.70e-01 +7.83e-01 +7.97e-01 +1.13e+00 +1.26e+00 +4.66e-01 +8.16e-01 +8.15e-01 +7.98e-01 +7.75e-01 +7.87e-01 +7.92e-01 +7.70e-01 +7.35e-01 +7.31e-01 +7.42e-01 +7.14e-01 +7.50e-01 +1.05e+00 +8.42e-01 +3.14e-01 +7.86e-01 +8.18e-01 +8.21e-01 +8.01e-01 +7.99e-01 +7.90e-01 +7.89e-01 +7.83e-01 +7.33e-01 +7.48e-01 +7.58e-01 +7.15e-01 +1.06e+00 +8.32e-01 +3.09e-01 +8.27e-01 +8.58e-01 +8.09e-01 +8.21e-01 +8.32e-01 +7.85e-01 +7.86e-01 +7.51e-01 +7.01e-01 +7.38e-01 +7.30e-01 +7.22e-01 +9.77e-01 +6.23e-01 +2.49e-01 +8.03e-01 +8.31e-01 +8.48e-01 +8.19e-01 +8.34e-01 +8.33e-01 +8.42e-01 +7.89e-01 +7.16e-01 +7.24e-01 +7.28e-01 +7.16e-01 +9.71e-01 +6.27e-01 +1.80e-01 +8.04e-01 +8.69e-01 +8.69e-01 +8.82e-01 +8.64e-01 +8.59e-01 +8.38e-01 +8.03e-01 +7.94e-01 +7.80e-01 +7.95e-01 +7.83e-01 +8.87e-01 +5.44e-01 +1.87e-01 +1.24e+00 +1.24e+00 +1.24e+00 +1.21e+00 +1.24e+00 +1.28e+00 +1.10e+00 +1.13e+00 +1.12e+00 +1.09e+00 +1.11e+00 +1.13e+00 +1.07e+00 +3.12e-01 +9.52e-02 +1.84e+00 +1.36e+00 +1.70e+00 +1.79e+00 +1.82e+00 +1.16e+00 +1.17e+00 +1.10e+00 +9.39e-01 +8.88e-01 +6.70e-01 +6.23e-01 +5.35e-01 +2.34e-01 +6.47e-02 +6.45e-01 +4.31e-01 +7.11e-01 +6.80e-01 +6.87e-01 +4.47e-01 +4.04e-01 +4.19e-01 +2.85e-01 +3.23e-01 +1.57e-01 +1.93e-01 +1.76e-01 +1.29e-01 +6.44e-02 +8.45e-01 +8.09e-01 +8.31e-01 +8.52e-01 +8.43e-01 +8.06e-01 +7.88e-01 +7.57e-01 +7.58e-01 +7.66e-01 +7.61e-01 +8.67e-01 +1.27e+00 +2.06e+00 +7.56e-01 +8.40e-01 +8.74e-01 +8.23e-01 +7.97e-01 +8.08e-01 +7.78e-01 +7.85e-01 +7.76e-01 +7.95e-01 +8.30e-01 +7.96e-01 +8.37e-01 +1.18e+00 +1.62e+00 +6.44e-01 +8.11e-01 +8.19e-01 +8.40e-01 +7.94e-01 +7.57e-01 +7.93e-01 +7.66e-01 +7.66e-01 +7.76e-01 +8.15e-01 +7.99e-01 +8.24e-01 +1.16e+00 +1.39e+00 +5.36e-01 +8.08e-01 +8.15e-01 +8.00e-01 +8.03e-01 +7.68e-01 +7.86e-01 +7.93e-01 +7.55e-01 +7.56e-01 +7.89e-01 +7.68e-01 +8.06e-01 +1.20e+00 +1.24e+00 +5.05e-01 +7.77e-01 +7.72e-01 +8.04e-01 +8.28e-01 +7.75e-01 +7.64e-01 +7.80e-01 +7.54e-01 +7.38e-01 +7.65e-01 +8.13e-01 +8.11e-01 +1.21e+00 +1.61e+00 +5.92e-01 +8.28e-01 +7.61e-01 +8.10e-01 +8.12e-01 +7.80e-01 +7.60e-01 +7.76e-01 +7.84e-01 +7.75e-01 +7.67e-01 +7.63e-01 +8.21e-01 +1.23e+00 +1.51e+00 +5.55e-01 +8.13e-01 +7.95e-01 +8.40e-01 +7.80e-01 +7.59e-01 +7.73e-01 +7.80e-01 +7.46e-01 +7.45e-01 +7.55e-01 +7.27e-01 +7.44e-01 +1.11e+00 +1.44e+00 +5.11e-01 +8.31e-01 +8.12e-01 +8.03e-01 +7.49e-01 +7.48e-01 +7.53e-01 +7.93e-01 +7.32e-01 +7.17e-01 +7.10e-01 +7.05e-01 +7.55e-01 +1.11e+00 +9.42e-01 +3.25e-01 +8.00e-01 +7.96e-01 +7.87e-01 +8.07e-01 +7.73e-01 +7.86e-01 +7.64e-01 +7.65e-01 +7.27e-01 +7.21e-01 +7.35e-01 +7.93e-01 +1.18e+00 +9.54e-01 +2.85e-01 +8.11e-01 +7.95e-01 +8.15e-01 +7.97e-01 +7.74e-01 +7.69e-01 +7.52e-01 +7.33e-01 +7.51e-01 +7.28e-01 +7.13e-01 +7.16e-01 +1.10e+00 +6.86e-01 +2.68e-01 +8.31e-01 +8.25e-01 +7.50e-01 +8.42e-01 +8.24e-01 +8.05e-01 +7.74e-01 +7.47e-01 +7.33e-01 +7.57e-01 +7.16e-01 +7.50e-01 +9.60e-01 +4.98e-01 +1.46e-01 +8.65e-01 +8.27e-01 +8.48e-01 +3.91e-01 +8.66e-01 +8.92e-01 +8.23e-01 +7.50e-01 +8.02e-01 +7.77e-01 +7.85e-01 +7.73e-01 +9.44e-01 +4.45e-01 +1.34e-01 +1.16e+00 +1.18e+00 +1.20e+00 +1.16e+00 +1.20e+00 +1.19e+00 +1.01e+00 +1.06e+00 +1.10e+00 +1.06e+00 +1.02e+00 +1.01e+00 +1.07e+00 +4.13e-01 +1.32e-01 +1.53e+00 +1.26e+00 +1.05e+00 +1.47e+00 +1.43e+00 +1.20e+00 +8.45e-01 +6.05e-01 +9.60e-01 +9.09e-01 +6.43e-01 +6.18e-01 +5.19e-01 +2.26e-01 +8.71e-02 +5.78e-01 +4.15e-01 +4.47e-01 +4.72e-01 +5.79e-01 +4.50e-01 +3.73e-01 +1.91e-01 +3.18e-01 +3.21e-01 +2.12e-01 +2.08e-01 +1.59e-01 +1.30e-01 +6.29e-02 +8.13e-01 +7.92e-01 +7.98e-01 +8.10e-01 +8.01e-01 +7.94e-01 +7.98e-01 +7.55e-01 +7.35e-01 +7.76e-01 +7.54e-01 +8.38e-01 +1.23e+00 +1.59e+00 +6.35e-01 +8.22e-01 +8.05e-01 +7.80e-01 +8.16e-01 +8.13e-01 +7.71e-01 +7.48e-01 +7.45e-01 +7.82e-01 +7.91e-01 +7.88e-01 +8.20e-01 +1.19e+00 +1.52e+00 +5.64e-01 +8.23e-01 +8.14e-01 +8.08e-01 +7.83e-01 +7.86e-01 +7.83e-01 +7.67e-01 +7.43e-01 +7.86e-01 +8.17e-01 +8.13e-01 +8.52e-01 +1.19e+00 +1.15e+00 +4.23e-01 +8.08e-01 +8.13e-01 +7.88e-01 +7.92e-01 +7.82e-01 +7.73e-01 +7.50e-01 +7.57e-01 +7.60e-01 +8.01e-01 +7.85e-01 +8.21e-01 +1.23e+00 +1.08e+00 +3.68e-01 +7.79e-01 +7.72e-01 +7.80e-01 +8.09e-01 +7.59e-01 +7.50e-01 +7.76e-01 +7.62e-01 +7.59e-01 +7.48e-01 +7.90e-01 +8.33e-01 +1.23e+00 +1.60e+00 +5.75e-01 +7.85e-01 +7.73e-01 +7.79e-01 +7.88e-01 +7.39e-01 +7.13e-01 +7.08e-01 +7.78e-01 +7.45e-01 +7.62e-01 +7.55e-01 +7.92e-01 +1.16e+00 +1.31e+00 +4.76e-01 +7.40e-01 +7.79e-01 +7.94e-01 +7.60e-01 +7.99e-01 +7.16e-01 +7.14e-01 +7.21e-01 +7.25e-01 +7.16e-01 +7.41e-01 +7.53e-01 +1.04e+00 +1.05e+00 +3.92e-01 +7.83e-01 +8.02e-01 +7.76e-01 +7.66e-01 +7.84e-01 +7.21e-01 +7.22e-01 +6.78e-01 +6.82e-01 +7.30e-01 +7.15e-01 +7.28e-01 +1.08e+00 +8.33e-01 +3.54e-01 +7.96e-01 +7.79e-01 +7.80e-01 +7.68e-01 +7.67e-01 +7.60e-01 +7.52e-01 +7.12e-01 +6.86e-01 +6.95e-01 +7.05e-01 +7.37e-01 +1.02e+00 +8.76e-01 +2.76e-01 +8.13e-01 +8.09e-01 +7.87e-01 +7.66e-01 +7.26e-01 +7.62e-01 +7.59e-01 +7.17e-01 +7.04e-01 +6.89e-01 +6.94e-01 +7.59e-01 +1.02e+00 +8.04e-01 +3.49e-01 +8.12e-01 +7.81e-01 +7.92e-01 +7.74e-01 +7.90e-01 +7.78e-01 +7.64e-01 +7.66e-01 +7.45e-01 +7.07e-01 +7.19e-01 +7.86e-01 +1.05e+00 +6.12e-01 +2.13e-01 +8.28e-01 +8.45e-01 +8.05e-01 +8.12e-01 +8.40e-01 +8.71e-01 +8.00e-01 +7.85e-01 +7.85e-01 +8.08e-01 +7.39e-01 +7.70e-01 +1.09e+00 +5.71e-01 +1.75e-01 +1.22e+00 +1.15e+00 +1.17e+00 +1.21e+00 +1.23e+00 +1.24e+00 +1.23e+00 +1.10e+00 +1.11e+00 +1.06e+00 +1.00e+00 +1.01e+00 +1.07e+00 +4.47e-01 +1.50e-01 +1.39e+00 +1.31e+00 +1.26e+00 +1.31e+00 +1.50e+00 +1.34e+00 +1.46e+00 +9.51e-01 +1.01e+00 +7.68e-01 +5.65e-01 +6.36e-01 +4.41e-01 +1.94e-01 +7.74e-02 +5.17e-01 +4.55e-01 +4.54e-01 +4.50e-01 +5.33e-01 +4.37e-01 +5.86e-01 +2.84e-01 +3.58e-01 +2.61e-01 +1.66e-01 +1.75e-01 +1.34e-01 +8.28e-02 +5.70e-02 +7.29e-01 +7.75e-01 +7.84e-01 +7.97e-01 +8.15e-01 +7.72e-01 +7.47e-01 +7.39e-01 +7.27e-01 +7.42e-01 +7.41e-01 +7.72e-01 +1.22e+00 +1.35e+00 +4.17e-01 +7.68e-01 +7.93e-01 +7.83e-01 +7.57e-01 +7.76e-01 +7.86e-01 +7.98e-01 +7.43e-01 +7.69e-01 +7.51e-01 +7.70e-01 +8.08e-01 +1.20e+00 +1.48e+00 +5.74e-01 +7.98e-01 +8.06e-01 +8.03e-01 +7.63e-01 +7.79e-01 +7.61e-01 +7.64e-01 +7.83e-01 +7.61e-01 +7.60e-01 +7.76e-01 +8.43e-01 +1.25e+00 +1.26e+00 +4.08e-01 +7.94e-01 +7.94e-01 +7.59e-01 +7.50e-01 +7.63e-01 +7.94e-01 +7.36e-01 +7.53e-01 +7.57e-01 +7.78e-01 +7.78e-01 +8.22e-01 +1.20e+00 +1.23e+00 +4.03e-01 +7.88e-01 +7.93e-01 +7.89e-01 +7.79e-01 +7.63e-01 +7.30e-01 +7.40e-01 +7.42e-01 +7.36e-01 +7.64e-01 +7.39e-01 +8.10e-01 +1.19e+00 +1.33e+00 +5.12e-01 +7.76e-01 +7.68e-01 +7.84e-01 +7.62e-01 +7.39e-01 +7.49e-01 +7.00e-01 +6.85e-01 +7.48e-01 +7.48e-01 +7.30e-01 +7.60e-01 +1.12e+00 +1.11e+00 +4.49e-01 +7.89e-01 +8.02e-01 +7.72e-01 +7.35e-01 +7.33e-01 +7.24e-01 +7.11e-01 +6.42e-01 +6.64e-01 +7.00e-01 +7.57e-01 +7.64e-01 +1.04e+00 +7.18e-01 +2.59e-01 +7.83e-01 +7.69e-01 +7.68e-01 +7.09e-01 +7.54e-01 +7.20e-01 +6.74e-01 +6.39e-01 +5.53e-01 +6.99e-01 +7.47e-01 +7.76e-01 +1.11e+00 +6.53e-01 +2.06e-01 +7.78e-01 +7.65e-01 +7.86e-01 +7.10e-01 +7.60e-01 +7.43e-01 +7.27e-01 +6.62e-01 +6.51e-01 +6.35e-01 +7.04e-01 +7.07e-01 +1.06e+00 +7.73e-01 +2.21e-01 +7.46e-01 +7.60e-01 +7.63e-01 +7.80e-01 +7.34e-01 +7.23e-01 +7.02e-01 +6.87e-01 +7.13e-01 +6.75e-01 +6.69e-01 +7.11e-01 +9.92e-01 +6.25e-01 +1.99e-01 +7.86e-01 +7.39e-01 +7.47e-01 +7.61e-01 +7.48e-01 +7.41e-01 +7.50e-01 +7.38e-01 +7.18e-01 +7.15e-01 +6.76e-01 +6.94e-01 +9.71e-01 +5.36e-01 +1.55e-01 +8.10e-01 +8.03e-01 +8.04e-01 +8.15e-01 +8.13e-01 +8.02e-01 +7.77e-01 +7.76e-01 +7.50e-01 +7.78e-01 +7.13e-01 +6.60e-01 +9.13e-01 +5.08e-01 +1.25e-01 +1.17e+00 +1.12e+00 +1.10e+00 +1.13e+00 +1.21e+00 +1.17e+00 +1.07e+00 +1.02e+00 +1.07e+00 +1.08e+00 +1.10e+00 +8.99e-01 +8.82e-01 +4.84e-01 +1.77e-01 +1.56e+00 +1.32e+00 +1.13e+00 +1.34e+00 +1.30e+00 +1.22e+00 +1.17e+00 +9.07e-01 +7.99e-01 +7.33e-01 +7.55e-01 +6.69e-01 +3.68e-01 +2.03e-01 +1.10e-01 +5.31e-01 +4.95e-01 +4.39e-01 +4.81e-01 +4.96e-01 +3.78e-01 +5.26e-01 +3.10e-01 +2.83e-01 +1.99e-01 +2.15e-01 +2.39e-01 +1.44e-01 +7.93e-02 +4.46e-02 +8.04e-01 +7.95e-01 +7.83e-01 +7.95e-01 +7.54e-01 +7.47e-01 +7.72e-01 +7.56e-01 +7.67e-01 +7.43e-01 +7.58e-01 +7.40e-01 +1.14e+00 +9.11e-01 +4.11e-01 +8.04e-01 +7.68e-01 +7.85e-01 +7.81e-01 +7.65e-01 +7.45e-01 +7.31e-01 +7.07e-01 +7.56e-01 +7.56e-01 +7.59e-01 +7.59e-01 +1.11e+00 +1.04e+00 +3.91e-01 +7.71e-01 +7.89e-01 +7.60e-01 +7.67e-01 +7.41e-01 +7.47e-01 +7.26e-01 +7.15e-01 +7.19e-01 +7.39e-01 +7.88e-01 +7.73e-01 +1.12e+00 +1.24e+00 +5.06e-01 +7.87e-01 +7.41e-01 +7.55e-01 +7.36e-01 +7.30e-01 +7.59e-01 +7.40e-01 +7.37e-01 +7.32e-01 +7.38e-01 +7.44e-01 +7.85e-01 +1.11e+00 +8.43e-01 +3.26e-01 +7.83e-01 +7.76e-01 +7.73e-01 +7.64e-01 +7.54e-01 +7.73e-01 +7.28e-01 +7.45e-01 +7.11e-01 +7.24e-01 +7.27e-01 +7.83e-01 +1.10e+00 +6.80e-01 +2.48e-01 +7.83e-01 +7.52e-01 +7.66e-01 +7.85e-01 +7.69e-01 +7.48e-01 +7.23e-01 +6.99e-01 +6.49e-01 +6.92e-01 +7.08e-01 +7.57e-01 +1.07e+00 +7.06e-01 +2.16e-01 +7.82e-01 +7.85e-01 +7.66e-01 +7.58e-01 +7.56e-01 +7.22e-01 +7.09e-01 +6.42e-01 +6.03e-01 +6.32e-01 +6.99e-01 +7.64e-01 +1.08e+00 +8.03e-01 +2.40e-01 +7.40e-01 +7.41e-01 +7.33e-01 +7.45e-01 +7.43e-01 +7.15e-01 +6.99e-01 +6.15e-01 +4.48e-01 +6.70e-01 +7.13e-01 +7.40e-01 +1.05e+00 +8.40e-01 +2.51e-01 +7.67e-01 +3.55e-01 +7.36e-01 +7.41e-01 +7.16e-01 +7.29e-01 +3.42e-01 +6.33e-01 +6.18e-01 +6.57e-01 +7.08e-01 +7.42e-01 +1.00e+00 +7.79e-01 +2.57e-01 +7.51e-01 +7.62e-01 +7.59e-01 +7.36e-01 +7.09e-01 +6.77e-01 +6.93e-01 +6.91e-01 +6.86e-01 +6.77e-01 +6.81e-01 +6.82e-01 +9.60e-01 +6.08e-01 +2.38e-01 +7.58e-01 +8.07e-01 +7.45e-01 +7.27e-01 +7.02e-01 +6.98e-01 +6.68e-01 +6.74e-01 +6.92e-01 +6.88e-01 +6.37e-01 +6.76e-01 +8.84e-01 +3.75e-01 +1.32e-01 +7.90e-01 +7.78e-01 +7.50e-01 +7.25e-01 +7.49e-01 +7.50e-01 +7.08e-01 +7.12e-01 +7.61e-01 +7.28e-01 +6.88e-01 +6.51e-01 +7.19e-01 +3.41e-01 +1.43e-01 +1.14e+00 +1.06e+00 +1.04e+00 +1.06e+00 +1.09e+00 +1.05e+00 +1.03e+00 +9.47e-01 +1.04e+00 +9.40e-01 +9.42e-01 +8.31e-01 +6.65e-01 +2.06e-01 +8.49e-02 +1.33e+00 +1.35e+00 +1.16e+00 +8.61e-01 +8.28e-01 +1.08e+00 +9.81e-01 +7.58e-01 +7.04e-01 +6.54e-01 +7.20e-01 +5.86e-01 +2.41e-01 +1.04e-01 +4.32e-02 +4.74e-01 +5.21e-01 +4.51e-01 +2.77e-01 +2.70e-01 +3.48e-01 +3.55e-01 +2.46e-01 +2.37e-01 +1.76e-01 +2.35e-01 +2.02e-01 +8.43e-02 +4.62e-02 +2.99e-02 +7.31e-01 +7.48e-01 +7.39e-01 +7.66e-01 +7.81e-01 +7.83e-01 +7.80e-01 +7.68e-01 +7.20e-01 +7.09e-01 +7.19e-01 +7.61e-01 +1.05e+00 +7.78e-01 +2.76e-01 +7.52e-01 +7.85e-01 +7.84e-01 +7.87e-01 +7.71e-01 +7.57e-01 +7.62e-01 +7.09e-01 +7.08e-01 +6.96e-01 +7.23e-01 +7.49e-01 +1.06e+00 +5.92e-01 +1.96e-01 +7.43e-01 +7.38e-01 +7.76e-01 +7.70e-01 +7.56e-01 +7.48e-01 +7.41e-01 +7.42e-01 +7.06e-01 +6.90e-01 +7.25e-01 +7.69e-01 +1.04e+00 +8.10e-01 +2.94e-01 +7.40e-01 +7.47e-01 +7.57e-01 +7.48e-01 +7.55e-01 +7.44e-01 +7.42e-01 +7.35e-01 +6.70e-01 +6.64e-01 +7.63e-01 +7.71e-01 +9.80e-01 +7.74e-01 +3.07e-01 +7.55e-01 +7.66e-01 +7.97e-01 +7.40e-01 +7.53e-01 +7.39e-01 +7.26e-01 +7.07e-01 +6.89e-01 +6.87e-01 +7.44e-01 +7.30e-01 +1.03e+00 +6.26e-01 +1.73e-01 +7.55e-01 +7.36e-01 +7.61e-01 +7.64e-01 +7.21e-01 +7.01e-01 +7.26e-01 +6.89e-01 +6.95e-01 +6.71e-01 +6.81e-01 +7.49e-01 +9.78e-01 +6.44e-01 +2.24e-01 +7.44e-01 +7.16e-01 +7.45e-01 +7.32e-01 +7.41e-01 +7.10e-01 +6.77e-01 +6.35e-01 +6.21e-01 +6.30e-01 +6.43e-01 +6.90e-01 +9.34e-01 +7.67e-01 +2.92e-01 +7.32e-01 +7.55e-01 +7.18e-01 +7.24e-01 +7.26e-01 +7.05e-01 +6.53e-01 +6.21e-01 +6.43e-01 +6.52e-01 +7.13e-01 +7.09e-01 +9.53e-01 +6.82e-01 +2.54e-01 +6.97e-01 +7.00e-01 +7.14e-01 +6.97e-01 +7.15e-01 +6.93e-01 +6.77e-01 +6.33e-01 +6.17e-01 +6.11e-01 +7.05e-01 +6.87e-01 +9.29e-01 +5.46e-01 +1.70e-01 +7.20e-01 +7.06e-01 +7.18e-01 +6.87e-01 +6.85e-01 +6.94e-01 +6.44e-01 +6.64e-01 +5.99e-01 +5.89e-01 +6.44e-01 +6.80e-01 +9.68e-01 +6.14e-01 +1.98e-01 +7.51e-01 +7.34e-01 +7.39e-01 +6.97e-01 +6.75e-01 +6.82e-01 +6.70e-01 +7.02e-01 +6.60e-01 +6.35e-01 +6.16e-01 +6.32e-01 +8.05e-01 +4.17e-01 +1.09e-01 +7.89e-01 +7.57e-01 +7.50e-01 +7.29e-01 +7.26e-01 +6.77e-01 +6.48e-01 +7.04e-01 +6.97e-01 +6.79e-01 +6.60e-01 +6.12e-01 +7.24e-01 +2.74e-01 +7.82e-02 +1.14e+00 +1.03e+00 +1.04e+00 +9.43e-01 +1.02e+00 +9.87e-01 +8.16e-01 +8.35e-01 +8.39e-01 +9.59e-01 +9.14e-01 +7.74e-01 +5.71e-01 +1.72e-01 +5.75e-02 +1.12e+00 +1.16e+00 +8.35e-01 +7.13e-01 +7.64e-01 +8.80e-01 +5.67e-01 +4.88e-01 +4.31e-01 +7.46e-01 +6.47e-01 +4.18e-01 +2.22e-01 +6.04e-02 +2.42e-02 +3.88e-01 +3.92e-01 +2.68e-01 +2.61e-01 +2.31e-01 +3.03e-01 +2.09e-01 +1.58e-01 +1.36e-01 +2.55e-01 +2.03e-01 +1.38e-01 +9.69e-02 +4.41e-02 +1.17e-02 +7.71e-01 +7.88e-01 +8.12e-01 +7.42e-01 +7.85e-01 +7.60e-01 +7.46e-01 +7.71e-01 +7.12e-01 +6.80e-01 +6.82e-01 +7.51e-01 +1.04e+00 +6.16e-01 +1.78e-01 +7.57e-01 +7.66e-01 +7.96e-01 +7.87e-01 +7.31e-01 +7.75e-01 +7.52e-01 +7.45e-01 +7.07e-01 +7.05e-01 +7.08e-01 +7.39e-01 +9.99e-01 +6.60e-01 +2.06e-01 +7.40e-01 +7.48e-01 +7.67e-01 +7.62e-01 +7.72e-01 +7.12e-01 +7.41e-01 +7.52e-01 +6.99e-01 +6.87e-01 +6.89e-01 +7.63e-01 +1.10e+00 +8.27e-01 +2.75e-01 +7.59e-01 +7.20e-01 +7.47e-01 +7.32e-01 +7.40e-01 +7.41e-01 +7.25e-01 +7.31e-01 +6.89e-01 +7.01e-01 +7.16e-01 +6.95e-01 +9.76e-01 +8.88e-01 +3.69e-01 +7.39e-01 +7.23e-01 +7.22e-01 +7.34e-01 +7.32e-01 +7.19e-01 +7.08e-01 +7.23e-01 +7.13e-01 +6.86e-01 +7.13e-01 +7.47e-01 +9.68e-01 +6.86e-01 +2.05e-01 +7.59e-01 +7.40e-01 +7.23e-01 +6.89e-01 +6.89e-01 +6.98e-01 +7.04e-01 +6.61e-01 +6.80e-01 +6.80e-01 +6.86e-01 +7.42e-01 +1.01e+00 +7.65e-01 +2.63e-01 +7.27e-01 +7.07e-01 +7.21e-01 +6.82e-01 +6.82e-01 +6.79e-01 +6.66e-01 +6.58e-01 +6.32e-01 +6.61e-01 +6.87e-01 +6.88e-01 +8.56e-01 +5.97e-01 +2.13e-01 +7.02e-01 +7.13e-01 +7.28e-01 +6.93e-01 +6.91e-01 +6.69e-01 +6.46e-01 +6.28e-01 +6.40e-01 +6.38e-01 +6.71e-01 +6.96e-01 +8.50e-01 +3.86e-01 +1.50e-01 +6.91e-01 +5.58e-01 +6.91e-01 +7.07e-01 +7.18e-01 +7.31e-01 +6.70e-01 +5.57e-01 +6.18e-01 +6.02e-01 +6.11e-01 +6.66e-01 +9.21e-01 +4.38e-01 +1.13e-01 +7.24e-01 +6.84e-01 +6.84e-01 +6.47e-01 +6.69e-01 +6.83e-01 +6.69e-01 +6.47e-01 +6.14e-01 +5.97e-01 +6.05e-01 +6.26e-01 +9.22e-01 +4.59e-01 +1.15e-01 +7.38e-01 +6.58e-01 +6.82e-01 +6.72e-01 +7.05e-01 +6.71e-01 +6.60e-01 +6.37e-01 +6.35e-01 +6.02e-01 +5.50e-01 +5.85e-01 +8.26e-01 +4.84e-01 +1.41e-01 +7.40e-01 +6.74e-01 +6.74e-01 +7.15e-01 +7.22e-01 +6.98e-01 +7.17e-01 +6.74e-01 +6.70e-01 +6.46e-01 +5.85e-01 +5.00e-01 +4.95e-01 +2.74e-01 +8.29e-02 +1.11e+00 +9.99e-01 +1.02e+00 +1.05e+00 +1.05e+00 +9.96e-01 +9.29e-01 +9.64e-01 +8.97e-01 +9.51e-01 +8.48e-01 +7.23e-01 +6.11e-01 +2.17e-01 +6.09e-02 +1.15e+00 +9.21e-01 +8.94e-01 +8.34e-01 +8.60e-01 +8.05e-01 +5.65e-01 +5.80e-01 +5.28e-01 +5.64e-01 +6.00e-01 +4.16e-01 +2.18e-01 +8.48e-02 +2.93e-02 +3.50e-01 +2.74e-01 +2.33e-01 +2.38e-01 +2.50e-01 +2.74e-01 +1.88e-01 +1.72e-01 +1.56e-01 +1.57e-01 +1.94e-01 +1.39e-01 +6.35e-02 +3.19e-02 +7.49e-03 +7.41e-01 +7.68e-01 +7.90e-01 +7.78e-01 +7.76e-01 +7.30e-01 +7.18e-01 +7.38e-01 +7.09e-01 +7.21e-01 +7.00e-01 +7.72e-01 +9.68e-01 +6.90e-01 +2.52e-01 +7.57e-01 +7.65e-01 +7.45e-01 +7.47e-01 +7.46e-01 +7.65e-01 +7.54e-01 +7.52e-01 +7.26e-01 +6.82e-01 +7.10e-01 +7.86e-01 +1.05e+00 +7.77e-01 +2.28e-01 +7.74e-01 +7.42e-01 +7.17e-01 +7.21e-01 +7.29e-01 +7.68e-01 +7.52e-01 +7.57e-01 +7.68e-01 +6.89e-01 +6.78e-01 +7.59e-01 +1.05e+00 +8.28e-01 +2.72e-01 +7.40e-01 +7.34e-01 +7.31e-01 +7.16e-01 +7.44e-01 +7.39e-01 +7.56e-01 +7.44e-01 +7.10e-01 +6.88e-01 +6.97e-01 +7.44e-01 +9.71e-01 +7.11e-01 +2.71e-01 +7.13e-01 +6.97e-01 +7.29e-01 +7.42e-01 +7.39e-01 +7.08e-01 +7.05e-01 +7.31e-01 +6.98e-01 +6.88e-01 +7.17e-01 +7.13e-01 +9.73e-01 +6.01e-01 +1.91e-01 +7.45e-01 +7.09e-01 +7.35e-01 +7.10e-01 +7.14e-01 +7.15e-01 +7.08e-01 +7.06e-01 +6.78e-01 +6.67e-01 +6.90e-01 +7.12e-01 +9.35e-01 +5.48e-01 +2.00e-01 +7.32e-01 +7.22e-01 +7.10e-01 +7.08e-01 +7.09e-01 +7.14e-01 +6.80e-01 +6.85e-01 +6.58e-01 +6.83e-01 +6.50e-01 +7.09e-01 +9.87e-01 +7.05e-01 +2.37e-01 +7.08e-01 +7.29e-01 +7.25e-01 +7.21e-01 +7.00e-01 +6.83e-01 +6.44e-01 +6.62e-01 +6.42e-01 +6.10e-01 +6.47e-01 +7.20e-01 +8.94e-01 +4.05e-01 +1.25e-01 +6.82e-01 +6.98e-01 +7.11e-01 +7.24e-01 +7.09e-01 +6.74e-01 +6.40e-01 +6.25e-01 +6.06e-01 +6.01e-01 +6.22e-01 +6.85e-01 +8.81e-01 +4.33e-01 +1.27e-01 +7.04e-01 +6.95e-01 +6.94e-01 +7.08e-01 +6.83e-01 +6.66e-01 +6.52e-01 +6.14e-01 +6.08e-01 +6.22e-01 +5.79e-01 +6.40e-01 +8.39e-01 +5.15e-01 +1.65e-01 +7.06e-01 +6.74e-01 +6.69e-01 +6.66e-01 +6.63e-01 +6.70e-01 +6.87e-01 +6.53e-01 +6.04e-01 +5.84e-01 +5.54e-01 +5.65e-01 +7.87e-01 +4.40e-01 +1.48e-01 +7.67e-01 +6.96e-01 +7.26e-01 +7.26e-01 +6.91e-01 +7.44e-01 +7.07e-01 +6.80e-01 +6.22e-01 +6.16e-01 +5.70e-01 +4.85e-01 +5.06e-01 +2.87e-01 +9.16e-02 +1.20e+00 +9.57e-01 +8.97e-01 +1.03e+00 +9.83e-01 +1.01e+00 +9.58e-01 +1.03e+00 +9.95e-01 +1.02e+00 +8.79e-01 +6.76e-01 +5.34e-01 +1.83e-01 +6.50e-02 +9.53e-01 +7.68e-01 +7.45e-01 +8.42e-01 +9.10e-01 +8.62e-01 +7.39e-01 +7.46e-01 +6.49e-01 +5.31e-01 +4.80e-01 +3.53e-01 +2.00e-01 +8.55e-02 +3.73e-02 +3.66e-01 +3.07e-01 +3.18e-01 +2.87e-01 +3.14e-01 +2.90e-01 +2.36e-01 +2.15e-01 +2.24e-01 +1.70e-01 +1.63e-01 +1.15e-01 +6.32e-02 +3.84e-02 +1.78e-02 +7.11e-01 +7.35e-01 +7.78e-01 +7.95e-01 +7.89e-01 +7.78e-01 +7.90e-01 +8.15e-01 +7.38e-01 +7.56e-01 +7.46e-01 +7.19e-01 +8.73e-01 +4.87e-01 +1.89e-01 +7.24e-01 +7.51e-01 +7.47e-01 +7.52e-01 +7.63e-01 +7.61e-01 +7.53e-01 +7.70e-01 +7.59e-01 +7.54e-01 +7.39e-01 +7.28e-01 +9.65e-01 +6.51e-01 +2.08e-01 +7.30e-01 +7.39e-01 +7.32e-01 +7.64e-01 +7.36e-01 +7.69e-01 +7.88e-01 +7.27e-01 +7.35e-01 +7.32e-01 +7.27e-01 +7.50e-01 +9.97e-01 +7.08e-01 +2.42e-01 +7.31e-01 +7.41e-01 +7.80e-01 +7.20e-01 +7.72e-01 +7.80e-01 +7.58e-01 +7.29e-01 +7.22e-01 +6.85e-01 +6.91e-01 +7.32e-01 +9.70e-01 +5.55e-01 +1.80e-01 +7.25e-01 +7.42e-01 +7.54e-01 +7.29e-01 +7.69e-01 +7.68e-01 +7.23e-01 +7.19e-01 +7.39e-01 +6.99e-01 +7.30e-01 +7.43e-01 +9.67e-01 +5.29e-01 +1.58e-01 +7.27e-01 +7.38e-01 +7.50e-01 +7.78e-01 +7.29e-01 +7.53e-01 +7.20e-01 +7.07e-01 +6.58e-01 +7.03e-01 +7.03e-01 +6.98e-01 +1.02e+00 +5.77e-01 +1.55e-01 +7.04e-01 +7.29e-01 +7.04e-01 +7.41e-01 +7.23e-01 +7.27e-01 +7.22e-01 +6.89e-01 +6.68e-01 +6.72e-01 +6.90e-01 +7.11e-01 +9.24e-01 +6.32e-01 +1.76e-01 +6.92e-01 +7.24e-01 +7.27e-01 +7.47e-01 +7.06e-01 +7.02e-01 +6.65e-01 +6.69e-01 +6.63e-01 +6.78e-01 +6.76e-01 +6.84e-01 +8.81e-01 +5.82e-01 +2.05e-01 +6.77e-01 +6.97e-01 +7.18e-01 +7.16e-01 +7.22e-01 +6.99e-01 +6.33e-01 +6.46e-01 +6.22e-01 +6.20e-01 +6.04e-01 +6.27e-01 +8.72e-01 +4.59e-01 +1.30e-01 +6.94e-01 +6.76e-01 +6.98e-01 +7.17e-01 +7.24e-01 +6.61e-01 +6.58e-01 +6.43e-01 +5.98e-01 +6.12e-01 +5.72e-01 +5.75e-01 +7.13e-01 +4.13e-01 +1.41e-01 +6.83e-01 +6.80e-01 +6.85e-01 +6.92e-01 +6.94e-01 +6.60e-01 +6.70e-01 +6.56e-01 +5.95e-01 +5.92e-01 +5.52e-01 +5.66e-01 +7.57e-01 +2.75e-01 +8.14e-02 +6.80e-01 +6.88e-01 +6.98e-01 +7.21e-01 +6.86e-01 +7.14e-01 +7.21e-01 +6.93e-01 +6.28e-01 +6.06e-01 +5.69e-01 +5.25e-01 +6.18e-01 +2.39e-01 +7.13e-02 +9.78e-01 +8.94e-01 +9.01e-01 +9.75e-01 +9.93e-01 +9.72e-01 +9.04e-01 +9.60e-01 +9.01e-01 +8.02e-01 +8.03e-01 +6.71e-01 +3.57e-01 +1.04e-01 +3.71e-02 +8.79e-01 +4.74e-01 +6.09e-01 +6.57e-01 +6.73e-01 +6.70e-01 +5.29e-01 +7.08e-01 +5.73e-01 +3.74e-01 +4.21e-01 +2.98e-01 +1.43e-01 +5.64e-02 +1.94e-02 +2.87e-01 +1.53e-01 +1.84e-01 +2.04e-01 +2.63e-01 +2.36e-01 +1.65e-01 +2.34e-01 +1.92e-01 +1.28e-01 +1.20e-01 +7.57e-02 +5.20e-02 +3.12e-02 +1.69e-02 +7.55e-01 +8.03e-01 +8.38e-01 +8.11e-01 +8.12e-01 +8.21e-01 +8.19e-01 +7.76e-01 +7.65e-01 +7.57e-01 +7.69e-01 +7.23e-01 +7.14e-01 +1.75e-01 +6.92e-02 +8.24e-01 +8.38e-01 +8.21e-01 +7.68e-01 +7.55e-01 +7.68e-01 +7.83e-01 +7.52e-01 +7.51e-01 +7.46e-01 +7.74e-01 +7.44e-01 +8.02e-01 +3.34e-01 +1.21e-01 +7.93e-01 +8.41e-01 +7.94e-01 +7.70e-01 +7.76e-01 +8.31e-01 +8.21e-01 +7.99e-01 +7.37e-01 +7.45e-01 +7.12e-01 +8.00e-01 +1.03e+00 +5.17e-01 +1.38e-01 +7.80e-01 +7.93e-01 +7.72e-01 +7.70e-01 +7.94e-01 +8.27e-01 +2.53e-01 +7.14e-01 +7.62e-01 +7.24e-01 +6.76e-01 +7.22e-01 +8.97e-01 +4.58e-01 +1.53e-01 +7.51e-01 +7.55e-01 +7.71e-01 +7.75e-01 +7.94e-01 +7.94e-01 +7.67e-01 +7.35e-01 +7.64e-01 +7.55e-01 +7.00e-01 +7.25e-01 +9.50e-01 +5.35e-01 +1.47e-01 +7.48e-01 +7.62e-01 +7.42e-01 +7.69e-01 +7.62e-01 +7.55e-01 +7.49e-01 +7.14e-01 +7.33e-01 +7.29e-01 +6.88e-01 +6.77e-01 +8.92e-01 +4.73e-01 +1.54e-01 +7.07e-01 +7.12e-01 +7.63e-01 +7.78e-01 +7.67e-01 +7.39e-01 +7.39e-01 +7.04e-01 +6.89e-01 +7.02e-01 +7.00e-01 +6.50e-01 +7.45e-01 +4.80e-01 +1.67e-01 +7.10e-01 +7.31e-01 +7.02e-01 +7.48e-01 +7.26e-01 +7.23e-01 +7.48e-01 +7.26e-01 +7.06e-01 +6.63e-01 +6.82e-01 +6.87e-01 +8.55e-01 +3.87e-01 +1.27e-01 +7.27e-01 +7.16e-01 +7.34e-01 +7.54e-01 +7.46e-01 +7.70e-01 +7.11e-01 +6.87e-01 +6.70e-01 +6.64e-01 +6.35e-01 +6.35e-01 +8.28e-01 +3.65e-01 +1.19e-01 +7.19e-01 +6.95e-01 +7.56e-01 +7.46e-01 +7.40e-01 +7.30e-01 +6.89e-01 +6.43e-01 +6.17e-01 +5.90e-01 +6.17e-01 +5.70e-01 +8.00e-01 +3.80e-01 +1.34e-01 +6.68e-01 +6.64e-01 +6.96e-01 +7.05e-01 +7.48e-01 +7.14e-01 +6.55e-01 +6.42e-01 +6.17e-01 +5.96e-01 +5.59e-01 +5.39e-01 +6.83e-01 +2.51e-01 +7.41e-02 +6.65e-01 +2.67e-01 +6.72e-01 +6.79e-01 +6.77e-01 +6.50e-01 +6.85e-01 +6.99e-01 +6.33e-01 +6.12e-01 +5.40e-01 +5.07e-01 +5.77e-01 +2.23e-01 +6.42e-02 +8.66e-01 +8.00e-01 +8.00e-01 +8.48e-01 +8.27e-01 +8.32e-01 +8.36e-01 +9.02e-01 +9.05e-01 +7.29e-01 +6.76e-01 +5.88e-01 +3.48e-01 +1.10e-01 +3.71e-02 +6.49e-01 +3.52e-01 +4.24e-01 +5.24e-01 +4.05e-01 +4.08e-01 +3.66e-01 +3.97e-01 +5.38e-01 +3.80e-01 +2.81e-01 +2.19e-01 +1.32e-01 +3.23e-02 +1.05e-02 +2.57e-01 +1.34e-01 +1.74e-01 +1.81e-01 +1.46e-01 +1.42e-01 +1.23e-01 +1.30e-01 +1.65e-01 +1.27e-01 +8.17e-02 +7.95e-02 +5.09e-02 +1.73e-02 +7.50e-03 +1.08e+00 +1.13e+00 +1.22e+00 +1.22e+00 +1.16e+00 +1.11e+00 +1.11e+00 +1.06e+00 +1.11e+00 +9.89e-01 +9.97e-01 +1.02e+00 +7.84e-01 +1.55e-01 +3.93e-02 +1.15e+00 +1.05e+00 +1.23e+00 +1.10e+00 +1.10e+00 +1.15e+00 +1.11e+00 +1.03e+00 +9.91e-01 +1.02e+00 +9.48e-01 +9.15e-01 +8.91e-01 +2.88e-01 +8.05e-02 +1.12e+00 +1.04e+00 +1.18e+00 +1.10e+00 +1.06e+00 +1.18e+00 +1.04e+00 +1.15e+00 +1.03e+00 +1.04e+00 +9.63e-01 +9.19e-01 +1.05e+00 +4.94e-01 +1.55e-01 +1.12e+00 +1.03e+00 +1.09e+00 +1.12e+00 +1.10e+00 +1.19e+00 +1.11e+00 +1.10e+00 +1.06e+00 +1.01e+00 +8.73e-01 +8.08e-01 +8.67e-01 +3.12e-01 +9.00e-02 +1.08e+00 +1.03e+00 +1.06e+00 +1.10e+00 +1.04e+00 +1.13e+00 +1.27e+00 +1.09e+00 +1.08e+00 +1.12e+00 +9.93e-01 +8.86e-01 +7.84e-01 +3.95e-01 +1.46e-01 +1.07e+00 +9.78e-01 +1.03e+00 +1.02e+00 +1.00e+00 +1.09e+00 +1.08e+00 +1.01e+00 +1.03e+00 +1.07e+00 +9.59e-01 +8.28e-01 +8.42e-01 +4.01e-01 +1.22e-01 +9.48e-01 +9.63e-01 +1.06e+00 +1.04e+00 +9.98e-01 +1.04e+00 +1.02e+00 +9.83e-01 +8.41e-01 +9.51e-01 +9.08e-01 +7.46e-01 +7.77e-01 +3.05e-01 +9.78e-02 +9.70e-01 +9.47e-01 +9.99e-01 +1.08e+00 +1.11e+00 +1.03e+00 +1.01e+00 +9.93e-01 +8.83e-01 +8.87e-01 +9.14e-01 +8.38e-01 +6.43e-01 +1.75e-01 +5.80e-02 +9.67e-01 +9.99e-01 +1.01e+00 +1.06e+00 +1.08e+00 +9.67e-01 +1.08e+00 +1.02e+00 +8.98e-01 +9.10e-01 +8.57e-01 +8.25e-01 +8.06e-01 +2.24e-01 +7.49e-02 +9.70e-01 +1.03e+00 +1.10e+00 +1.01e+00 +1.06e+00 +9.81e-01 +1.01e+00 +9.04e-01 +8.30e-01 +8.02e-01 +8.09e-01 +8.10e-01 +7.80e-01 +2.46e-01 +7.63e-02 +8.90e-01 +9.28e-01 +1.02e+00 +1.02e+00 +9.83e-01 +1.07e+00 +9.40e-01 +8.16e-01 +7.84e-01 +6.91e-01 +7.33e-01 +6.96e-01 +5.05e-01 +2.10e-01 +7.72e-02 +7.36e-01 +7.62e-01 +8.87e-01 +8.71e-01 +9.21e-01 +9.57e-01 +1.00e+00 +9.26e-01 +8.38e-01 +7.10e-01 +6.68e-01 +6.38e-01 +4.88e-01 +1.47e-01 +5.84e-02 +6.38e-01 +6.97e-01 +7.81e-01 +7.21e-01 +8.22e-01 +8.29e-01 +6.94e-01 +9.33e-01 +9.36e-01 +7.85e-01 +5.91e-01 +4.82e-01 +3.15e-01 +9.11e-02 +4.04e-02 +3.59e-01 +2.19e-01 +2.60e-01 +3.06e-01 +2.48e-01 +2.41e-01 +2.20e-01 +2.69e-01 +4.39e-01 +2.89e-01 +1.35e-01 +1.30e-01 +7.47e-02 +2.46e-02 +1.39e-02 +1.37e-01 +7.05e-02 +9.05e-02 +9.63e-02 +7.38e-02 +7.57e-02 +7.98e-02 +7.83e-02 +1.40e-01 +1.09e-01 +5.52e-02 +4.14e-02 +2.38e-02 +1.27e-02 +4.98e-03 +1.08e+00 +1.06e+00 +1.34e+00 +9.87e-01 +1.49e+00 +1.22e+00 +1.08e+00 +1.13e+00 +9.74e-01 +8.45e-01 +6.07e-01 +6.33e-01 +5.34e-01 +1.43e-01 +3.98e-02 +1.35e+00 +9.68e-01 +1.60e+00 +1.80e+00 +1.45e+00 +1.17e+00 +9.94e-01 +1.02e+00 +8.65e-01 +7.01e-01 +6.46e-01 +5.40e-01 +4.50e-01 +2.04e-01 +7.38e-02 +1.18e+00 +1.14e+00 +1.48e+00 +1.19e+00 +9.38e-01 +1.19e+00 +9.74e-01 +1.02e+00 +9.23e-01 +8.23e-01 +8.89e-01 +7.01e-01 +3.85e-01 +2.16e-01 +1.44e-01 +1.32e+00 +1.14e+00 +1.36e+00 +1.53e+00 +1.16e+00 +1.29e+00 +1.36e+00 +1.18e+00 +1.09e+00 +8.67e-01 +6.32e-01 +4.57e-01 +3.13e-01 +1.52e-01 +6.87e-02 +1.30e+00 +9.74e-01 +1.29e+00 +1.54e+00 +1.33e+00 +1.38e+00 +1.35e+00 +1.13e+00 +9.14e-01 +8.56e-01 +7.71e-01 +4.06e-01 +2.63e-01 +1.30e-01 +6.54e-02 +1.05e+00 +7.94e-01 +1.12e+00 +1.15e+00 +8.13e-01 +9.20e-01 +1.09e+00 +8.11e-01 +6.93e-01 +8.96e-01 +8.00e-01 +5.26e-01 +2.87e-01 +1.23e-01 +7.75e-02 +7.48e-01 +9.01e-01 +1.04e+00 +1.05e+00 +9.13e-01 +1.00e+00 +9.12e-01 +7.83e-01 +6.62e-01 +6.12e-01 +4.88e-01 +3.46e-01 +2.31e-01 +1.33e-01 +7.44e-02 +5.62e-01 +7.11e-01 +8.51e-01 +8.66e-01 +9.29e-01 +9.65e-01 +6.70e-01 +6.37e-01 +4.77e-01 +4.37e-01 +4.96e-01 +3.94e-01 +2.26e-01 +1.06e-01 +3.96e-02 +6.10e-01 +6.97e-01 +8.44e-01 +1.11e+00 +8.69e-01 +7.98e-01 +6.03e-01 +7.36e-01 +5.96e-01 +5.37e-01 +4.95e-01 +4.22e-01 +2.94e-01 +1.01e-01 +4.37e-02 +4.56e-01 +8.07e-01 +1.07e+00 +8.05e-01 +7.16e-01 +5.03e-01 +6.26e-01 +7.10e-01 +5.73e-01 +4.58e-01 +4.44e-01 +3.45e-01 +2.60e-01 +1.36e-01 +4.22e-02 +4.93e-01 +6.13e-01 +8.04e-01 +5.55e-01 +7.11e-01 +7.23e-01 +5.94e-01 +5.56e-01 +4.34e-01 +2.96e-01 +3.80e-01 +3.42e-01 +2.09e-01 +1.08e-01 +4.84e-02 +4.28e-01 +3.61e-01 +5.20e-01 +4.86e-01 +4.81e-01 +6.92e-01 +5.95e-01 +3.74e-01 +3.26e-01 +2.76e-01 +2.59e-01 +2.57e-01 +1.85e-01 +4.96e-02 +1.83e-02 +2.15e-01 +2.66e-01 +3.14e-01 +2.45e-01 +2.95e-01 +4.30e-01 +3.75e-01 +3.67e-01 +3.05e-01 +3.09e-01 +2.21e-01 +1.80e-01 +1.34e-01 +5.03e-02 +2.00e-02 +9.60e-02 +1.01e-01 +1.15e-01 +9.88e-02 +1.27e-01 +1.67e-01 +1.28e-01 +1.60e-01 +1.75e-01 +1.43e-01 +8.60e-02 +5.91e-02 +4.19e-02 +2.09e-02 +1.01e-02 +6.92e-02 +3.71e-02 +4.18e-02 +4.29e-02 +4.54e-02 +6.16e-02 +4.09e-02 +5.12e-02 +7.23e-02 +6.74e-02 +3.14e-02 +1.80e-02 +1.64e-02 +7.47e-03 +2.97e-03 +3.66e-01 +3.67e-01 +4.98e-01 +3.34e-01 +5.46e-01 +4.10e-01 +3.75e-01 +3.97e-01 +3.66e-01 +2.85e-01 +1.96e-01 +1.98e-01 +1.79e-01 +1.05e-01 +3.65e-02 +5.51e-01 +2.62e-01 +5.35e-01 +7.29e-01 +6.22e-01 +4.43e-01 +3.56e-01 +3.26e-01 +3.18e-01 +2.53e-01 +1.98e-01 +1.61e-01 +1.35e-01 +8.96e-02 +4.34e-02 +4.38e-01 +3.47e-01 +5.06e-01 +4.90e-01 +2.64e-01 +4.25e-01 +3.58e-01 +3.11e-01 +3.30e-01 +2.32e-01 +3.09e-01 +2.65e-01 +1.43e-01 +6.12e-02 +6.39e-02 +4.34e-01 +3.64e-01 +5.30e-01 +6.02e-01 +4.03e-01 +4.34e-01 +4.80e-01 +4.48e-01 +4.35e-01 +3.28e-01 +2.19e-01 +1.55e-01 +1.04e-01 +6.22e-02 +2.93e-02 +5.28e-01 +3.92e-01 +4.89e-01 +5.69e-01 +5.08e-01 +4.82e-01 +5.01e-01 +3.73e-01 +3.58e-01 +2.50e-01 +2.62e-01 +1.19e-01 +7.33e-02 +4.35e-02 +2.75e-02 +3.24e-01 +2.74e-01 +3.53e-01 +3.82e-01 +3.09e-01 +2.64e-01 +3.42e-01 +2.59e-01 +2.24e-01 +2.72e-01 +2.89e-01 +2.17e-01 +1.01e-01 +4.22e-02 +2.14e-02 +3.08e-01 +2.90e-01 +3.71e-01 +4.11e-01 +2.41e-01 +2.90e-01 +2.99e-01 +2.76e-01 +2.53e-01 +2.06e-01 +1.62e-01 +1.37e-01 +7.91e-02 +3.97e-02 +3.67e-02 +1.54e-01 +2.67e-01 +2.58e-01 +2.66e-01 +2.93e-01 +3.18e-01 +1.96e-01 +2.10e-01 +1.51e-01 +1.19e-01 +1.30e-01 +1.25e-01 +6.88e-02 +5.68e-02 +4.11e-02 +1.94e-01 +2.10e-01 +2.78e-01 +3.44e-01 +3.33e-01 +3.12e-01 +1.89e-01 +2.43e-01 +2.08e-01 +1.74e-01 +1.46e-01 +1.34e-01 +1.11e-01 +4.65e-02 +1.94e-02 +1.16e-01 +2.46e-01 +3.24e-01 +3.12e-01 +2.29e-01 +1.48e-01 +2.01e-01 +2.33e-01 +2.12e-01 +1.40e-01 +1.33e-01 +1.13e-01 +6.83e-02 +6.78e-02 +3.69e-02 +1.55e-01 +2.51e-01 +2.94e-01 +1.53e-01 +2.32e-01 +2.02e-01 +1.35e-01 +1.89e-01 +1.55e-01 +1.09e-01 +1.17e-01 +9.56e-02 +6.95e-02 +5.08e-02 +3.96e-02 +1.13e-01 +1.22e-01 +1.62e-01 +1.45e-01 +1.49e-01 +2.36e-01 +2.03e-01 +1.50e-01 +1.01e-01 +8.51e-02 +7.83e-02 +7.56e-02 +7.49e-02 +2.08e-02 +8.15e-03 +9.29e-02 +9.19e-02 +1.09e-01 +1.23e-01 +9.19e-02 +1.58e-01 +1.36e-01 +1.13e-01 +8.64e-02 +1.01e-01 +5.95e-02 +6.00e-02 +5.68e-02 +2.10e-02 +7.24e-03 +3.10e-02 +4.84e-02 +4.87e-02 +3.68e-02 +5.75e-02 +7.85e-02 +7.07e-02 +8.18e-02 +9.39e-02 +5.13e-02 +5.46e-02 +3.42e-02 +2.14e-02 +1.34e-02 +1.14e-02 +2.27e-02 +2.51e-02 +2.70e-02 +2.56e-02 +3.02e-02 +5.07e-02 +3.42e-02 +3.18e-02 +5.82e-02 +3.83e-02 +2.90e-02 +1.85e-02 +7.38e-03 +5.00e-03 +7.27e-03 \ No newline at end of file diff --git a/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/inputs_true.dat b/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/inputs_true.dat new file mode 100644 index 000000000..6aa91ca79 --- /dev/null +++ b/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/inputs_true.dat @@ -0,0 +1,265 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + 2.5 2.5 2.5 + 12 12 12 + 0.0 0.0 0.0 + +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 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 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 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + + + + + + + + + + fixed source + 750 + 30 + 20 + + + 100.0 1.0 + + + universe + 1 + + + multi-group + + + 1 + neutron + 10 + 1 + true + fw_cadis + + + + 15 15 15 + 0.0 0.0 0.0 + 30.0 30.0 30.0 + + + 500.0 + 100.0 + + + 0.0 0.0 0.0 30.0 30.0 30.0 + + + True + + + + + + linear + + + + + 1 + + + 2 + + + 3 + + + 3 + flux + tracklength + + + 2 + flux + tracklength + + + 1 + flux + tracklength + + + diff --git a/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/results_true.dat b/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/results_true.dat new file mode 100644 index 000000000..3afdc56ca --- /dev/null +++ b/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/results_true.dat @@ -0,0 +1,6760 @@ +RegularMesh + ID = 1 + Name = + Dimensions = 3 + Voxels = [15 15 15] + Lower left = [0. 0. 0.] + Upper Right = [np.float64(30.0), np.float64(30.0), np.float64(30.0)] + Width = [2. 2. 2.] +Lower Bounds +1.77e-01 +1.81e-01 +1.81e-01 +1.81e-01 +1.78e-01 +1.74e-01 +1.70e-01 +1.76e-01 +1.80e-01 +1.88e-01 +1.75e-01 +1.93e-01 +2.76e-01 +4.28e-01 +1.58e-01 +1.74e-01 +1.82e-01 +1.81e-01 +1.63e-01 +1.78e-01 +1.81e-01 +1.77e-01 +1.77e-01 +1.74e-01 +1.72e-01 +1.81e-01 +1.82e-01 +2.58e-01 +3.27e-01 +1.07e-01 +1.82e-01 +1.75e-01 +1.81e-01 +1.82e-01 +1.76e-01 +1.77e-01 +1.74e-01 +1.66e-01 +1.66e-01 +1.69e-01 +1.76e-01 +1.87e-01 +2.67e-01 +4.16e-01 +1.57e-01 +1.76e-01 +1.74e-01 +1.72e-01 +1.76e-01 +1.67e-01 +1.68e-01 +1.70e-01 +1.75e-01 +1.73e-01 +1.73e-01 +1.65e-01 +1.84e-01 +2.67e-01 +3.99e-01 +1.28e-01 +1.75e-01 +1.82e-01 +1.82e-01 +1.84e-01 +1.72e-01 +1.72e-01 +1.67e-01 +1.67e-01 +1.66e-01 +1.74e-01 +1.69e-01 +1.90e-01 +2.82e-01 +3.31e-01 +1.29e-01 +1.80e-01 +1.79e-01 +1.79e-01 +1.78e-01 +1.76e-01 +1.69e-01 +1.68e-01 +1.63e-01 +1.70e-01 +1.66e-01 +1.71e-01 +1.92e-01 +2.70e-01 +2.88e-01 +1.02e-01 +1.76e-01 +1.72e-01 +1.68e-01 +1.71e-01 +1.66e-01 +1.68e-01 +1.65e-01 +1.66e-01 +1.62e-01 +1.60e-01 +1.61e-01 +1.66e-01 +2.39e-01 +3.32e-01 +1.23e-01 +1.82e-01 +1.81e-01 +1.79e-01 +1.70e-01 +1.67e-01 +1.72e-01 +1.65e-01 +1.62e-01 +1.47e-01 +1.56e-01 +1.56e-01 +1.44e-01 +2.01e-01 +1.76e-01 +7.55e-02 +1.76e-01 +1.76e-01 +1.80e-01 +1.82e-01 +1.71e-01 +1.67e-01 +1.65e-01 +1.62e-01 +1.54e-01 +1.55e-01 +1.54e-01 +1.55e-01 +2.28e-01 +1.67e-01 +5.36e-02 +1.77e-01 +1.85e-01 +1.83e-01 +1.81e-01 +1.79e-01 +1.61e-01 +1.64e-01 +1.58e-01 +1.61e-01 +1.60e-01 +1.55e-01 +1.53e-01 +2.33e-01 +1.74e-01 +6.51e-02 +1.81e-01 +1.79e-01 +1.83e-01 +1.79e-01 +1.80e-01 +1.69e-01 +1.58e-01 +1.66e-01 +1.59e-01 +1.59e-01 +1.70e-01 +1.56e-01 +2.11e-01 +1.28e-01 +3.74e-02 +1.90e-01 +1.90e-01 +1.82e-01 +1.71e-01 +1.90e-01 +1.82e-01 +1.72e-01 +1.79e-01 +1.69e-01 +1.69e-01 +1.66e-01 +1.51e-01 +2.22e-01 +9.62e-02 +3.14e-02 +2.75e-01 +2.73e-01 +2.51e-01 +2.62e-01 +2.73e-01 +2.67e-01 +2.53e-01 +2.43e-01 +2.41e-01 +2.42e-01 +2.39e-01 +2.23e-01 +2.12e-01 +7.28e-02 +2.10e-02 +5.00e-01 +3.50e-01 +3.91e-01 +2.55e-01 +2.81e-01 +3.18e-01 +2.54e-01 +2.37e-01 +1.86e-01 +1.97e-01 +1.81e-01 +1.50e-01 +9.74e-02 +3.76e-02 +1.86e-02 +2.17e-01 +1.42e-01 +1.63e-01 +8.18e-02 +9.18e-02 +1.14e-01 +8.12e-02 +7.94e-02 +6.97e-02 +6.23e-02 +6.28e-02 +4.48e-02 +3.69e-02 +1.59e-02 +7.16e-03 +1.71e-01 +1.76e-01 +1.78e-01 +1.74e-01 +1.77e-01 +1.76e-01 +1.81e-01 +1.77e-01 +1.69e-01 +1.76e-01 +1.83e-01 +1.84e-01 +2.71e-01 +3.99e-01 +1.54e-01 +1.79e-01 +1.79e-01 +1.80e-01 +1.75e-01 +1.76e-01 +1.71e-01 +1.74e-01 +1.74e-01 +1.72e-01 +1.73e-01 +1.77e-01 +1.85e-01 +2.54e-01 +3.67e-01 +1.34e-01 +1.80e-01 +1.76e-01 +1.74e-01 +1.77e-01 +1.76e-01 +1.77e-01 +1.74e-01 +1.78e-01 +1.72e-01 +1.80e-01 +1.81e-01 +1.81e-01 +2.66e-01 +3.32e-01 +1.15e-01 +1.82e-01 +1.86e-01 +1.81e-01 +1.83e-01 +1.73e-01 +1.67e-01 +1.72e-01 +1.75e-01 +1.70e-01 +1.69e-01 +1.75e-01 +1.84e-01 +2.58e-01 +3.55e-01 +1.26e-01 +1.80e-01 +1.82e-01 +1.79e-01 +1.73e-01 +1.66e-01 +1.70e-01 +1.77e-01 +1.69e-01 +1.68e-01 +1.69e-01 +1.78e-01 +1.83e-01 +2.75e-01 +3.02e-01 +1.32e-01 +1.75e-01 +1.78e-01 +1.77e-01 +1.69e-01 +1.79e-01 +1.69e-01 +1.65e-01 +1.63e-01 +1.63e-01 +1.67e-01 +1.74e-01 +1.87e-01 +2.69e-01 +3.43e-01 +1.20e-01 +1.80e-01 +1.82e-01 +1.68e-01 +1.67e-01 +1.77e-01 +1.70e-01 +1.59e-01 +1.60e-01 +1.58e-01 +1.61e-01 +1.65e-01 +1.67e-01 +2.34e-01 +2.93e-01 +1.13e-01 +1.71e-01 +1.72e-01 +1.65e-01 +1.65e-01 +1.65e-01 +1.60e-01 +1.57e-01 +1.46e-01 +1.43e-01 +1.50e-01 +1.48e-01 +1.06e-01 +1.93e-01 +1.68e-01 +7.02e-02 +1.69e-01 +1.86e-01 +1.75e-01 +1.74e-01 +1.77e-01 +1.65e-01 +1.61e-01 +1.54e-01 +1.53e-01 +1.55e-01 +1.47e-01 +1.41e-01 +1.98e-01 +1.23e-01 +3.84e-02 +1.78e-01 +1.86e-01 +1.76e-01 +1.77e-01 +1.65e-01 +1.75e-01 +1.66e-01 +1.54e-01 +1.59e-01 +1.54e-01 +1.63e-01 +1.52e-01 +2.17e-01 +1.45e-01 +4.33e-02 +1.80e-01 +1.87e-01 +1.79e-01 +1.73e-01 +1.81e-01 +1.76e-01 +1.67e-01 +1.60e-01 +1.63e-01 +1.60e-01 +1.69e-01 +1.55e-01 +2.16e-01 +1.34e-01 +4.11e-02 +1.88e-01 +1.80e-01 +1.84e-01 +1.81e-01 +1.84e-01 +1.87e-01 +1.74e-01 +1.69e-01 +1.66e-01 +1.73e-01 +1.70e-01 +1.62e-01 +2.01e-01 +8.29e-02 +2.86e-02 +2.58e-01 +2.81e-01 +2.59e-01 +2.69e-01 +2.95e-01 +2.69e-01 +2.46e-01 +2.56e-01 +2.33e-01 +2.31e-01 +2.59e-01 +2.41e-01 +2.08e-01 +5.36e-02 +1.40e-02 +3.12e-01 +2.97e-01 +2.71e-01 +3.04e-01 +3.70e-01 +3.54e-01 +2.77e-01 +2.79e-01 +2.19e-01 +1.62e-01 +1.62e-01 +1.63e-01 +1.08e-01 +3.47e-02 +1.48e-02 +1.09e-01 +1.08e-01 +1.05e-01 +1.01e-01 +1.35e-01 +1.42e-01 +9.52e-02 +9.99e-02 +9.32e-02 +5.18e-02 +5.18e-02 +5.34e-02 +4.23e-02 +1.87e-02 +7.19e-03 +1.80e-01 +1.75e-01 +1.82e-01 +1.75e-01 +1.71e-01 +1.70e-01 +1.69e-01 +1.65e-01 +1.75e-01 +1.71e-01 +1.68e-01 +1.86e-01 +3.12e-01 +4.27e-01 +1.66e-01 +1.81e-01 +1.77e-01 +1.70e-01 +1.73e-01 +1.73e-01 +1.72e-01 +1.64e-01 +1.66e-01 +1.66e-01 +1.73e-01 +1.70e-01 +1.89e-01 +2.63e-01 +4.02e-01 +1.64e-01 +1.79e-01 +1.80e-01 +1.83e-01 +1.71e-01 +1.73e-01 +1.71e-01 +1.70e-01 +1.75e-01 +1.69e-01 +1.68e-01 +1.68e-01 +1.80e-01 +2.49e-01 +3.42e-01 +1.29e-01 +1.63e-01 +1.73e-01 +1.74e-01 +1.71e-01 +1.68e-01 +1.65e-01 +1.68e-01 +1.73e-01 +1.72e-01 +1.65e-01 +1.72e-01 +1.69e-01 +2.52e-01 +3.19e-01 +1.06e-01 +1.67e-01 +1.70e-01 +1.72e-01 +1.64e-01 +1.71e-01 +1.71e-01 +1.57e-01 +1.64e-01 +1.61e-01 +1.62e-01 +1.73e-01 +1.79e-01 +2.63e-01 +2.66e-01 +7.74e-02 +1.68e-01 +1.72e-01 +1.64e-01 +1.66e-01 +1.65e-01 +1.66e-01 +1.58e-01 +1.59e-01 +1.63e-01 +1.63e-01 +1.70e-01 +1.75e-01 +2.51e-01 +3.47e-01 +1.31e-01 +1.72e-01 +1.79e-01 +1.70e-01 +1.70e-01 +1.69e-01 +1.71e-01 +1.70e-01 +1.55e-01 +1.59e-01 +1.65e-01 +1.70e-01 +1.71e-01 +2.43e-01 +2.46e-01 +9.20e-02 +1.70e-01 +1.70e-01 +1.66e-01 +1.63e-01 +1.66e-01 +1.63e-01 +1.59e-01 +1.58e-01 +1.57e-01 +1.60e-01 +1.55e-01 +1.53e-01 +2.20e-01 +1.63e-01 +6.37e-02 +1.70e-01 +1.70e-01 +1.73e-01 +1.69e-01 +1.66e-01 +1.64e-01 +1.63e-01 +1.64e-01 +1.52e-01 +1.54e-01 +1.53e-01 +1.49e-01 +2.12e-01 +1.64e-01 +6.14e-02 +1.74e-01 +1.78e-01 +1.73e-01 +1.75e-01 +1.74e-01 +1.65e-01 +1.67e-01 +1.59e-01 +1.48e-01 +1.57e-01 +1.55e-01 +1.59e-01 +2.06e-01 +1.23e-01 +4.80e-02 +1.69e-01 +1.78e-01 +1.77e-01 +1.74e-01 +1.77e-01 +1.73e-01 +1.74e-01 +1.68e-01 +1.52e-01 +1.58e-01 +1.58e-01 +1.55e-01 +2.12e-01 +1.22e-01 +3.34e-02 +1.75e-01 +1.85e-01 +1.86e-01 +1.90e-01 +1.80e-01 +1.79e-01 +1.76e-01 +1.71e-01 +1.67e-01 +1.71e-01 +1.69e-01 +1.69e-01 +1.86e-01 +1.02e-01 +3.54e-02 +2.66e-01 +2.66e-01 +2.64e-01 +2.50e-01 +2.60e-01 +2.58e-01 +2.34e-01 +2.42e-01 +2.35e-01 +2.29e-01 +2.33e-01 +2.42e-01 +2.28e-01 +5.44e-02 +1.71e-02 +3.77e-01 +2.75e-01 +3.41e-01 +3.51e-01 +3.64e-01 +2.31e-01 +2.32e-01 +2.18e-01 +1.82e-01 +1.77e-01 +1.28e-01 +1.16e-01 +1.03e-01 +4.16e-02 +1.06e-02 +1.33e-01 +8.71e-02 +1.41e-01 +1.34e-01 +1.37e-01 +8.83e-02 +7.82e-02 +8.36e-02 +5.61e-02 +6.39e-02 +2.90e-02 +3.69e-02 +3.46e-02 +2.60e-02 +1.24e-02 +1.77e-01 +1.71e-01 +1.75e-01 +1.79e-01 +1.73e-01 +1.71e-01 +1.64e-01 +1.66e-01 +1.59e-01 +1.61e-01 +1.55e-01 +1.79e-01 +2.67e-01 +4.26e-01 +1.56e-01 +1.75e-01 +1.82e-01 +1.71e-01 +1.65e-01 +1.69e-01 +1.66e-01 +1.69e-01 +1.63e-01 +1.65e-01 +1.74e-01 +1.69e-01 +1.76e-01 +2.47e-01 +3.31e-01 +1.30e-01 +1.69e-01 +1.73e-01 +1.77e-01 +1.67e-01 +1.55e-01 +1.67e-01 +1.59e-01 +1.63e-01 +1.58e-01 +1.70e-01 +1.70e-01 +1.84e-01 +2.44e-01 +2.71e-01 +1.02e-01 +1.69e-01 +1.70e-01 +1.73e-01 +1.69e-01 +1.66e-01 +1.67e-01 +1.64e-01 +1.60e-01 +1.62e-01 +1.63e-01 +1.63e-01 +1.67e-01 +2.48e-01 +2.40e-01 +9.84e-02 +1.62e-01 +1.64e-01 +1.69e-01 +1.71e-01 +1.62e-01 +1.58e-01 +1.62e-01 +1.58e-01 +1.62e-01 +1.61e-01 +1.71e-01 +1.67e-01 +2.50e-01 +3.22e-01 +1.17e-01 +1.74e-01 +1.60e-01 +1.69e-01 +1.72e-01 +1.67e-01 +1.60e-01 +1.65e-01 +1.68e-01 +1.62e-01 +1.60e-01 +1.63e-01 +1.76e-01 +2.53e-01 +2.99e-01 +1.10e-01 +1.69e-01 +1.67e-01 +1.76e-01 +1.59e-01 +1.59e-01 +1.58e-01 +1.64e-01 +1.59e-01 +1.55e-01 +1.59e-01 +1.51e-01 +1.60e-01 +2.50e-01 +2.88e-01 +1.01e-01 +1.72e-01 +1.71e-01 +1.68e-01 +1.63e-01 +1.59e-01 +1.61e-01 +1.66e-01 +1.56e-01 +1.54e-01 +1.51e-01 +1.49e-01 +1.58e-01 +2.33e-01 +1.85e-01 +6.62e-02 +1.69e-01 +1.65e-01 +1.63e-01 +1.67e-01 +1.62e-01 +1.63e-01 +1.63e-01 +1.61e-01 +1.55e-01 +1.53e-01 +1.59e-01 +1.69e-01 +2.48e-01 +1.87e-01 +5.29e-02 +1.71e-01 +1.66e-01 +1.73e-01 +1.68e-01 +1.65e-01 +1.64e-01 +1.59e-01 +1.52e-01 +1.60e-01 +1.52e-01 +1.48e-01 +1.54e-01 +2.32e-01 +1.35e-01 +5.41e-02 +1.76e-01 +1.78e-01 +1.68e-01 +1.78e-01 +1.73e-01 +1.69e-01 +1.62e-01 +1.61e-01 +1.59e-01 +1.61e-01 +1.58e-01 +1.60e-01 +2.06e-01 +9.41e-02 +2.78e-02 +1.88e-01 +1.77e-01 +1.78e-01 +8.59e-02 +1.82e-01 +1.90e-01 +1.76e-01 +1.63e-01 +1.69e-01 +1.69e-01 +1.69e-01 +1.68e-01 +1.97e-01 +7.83e-02 +2.27e-02 +2.47e-01 +2.50e-01 +2.59e-01 +2.51e-01 +2.57e-01 +2.55e-01 +2.15e-01 +2.28e-01 +2.42e-01 +2.25e-01 +2.12e-01 +2.14e-01 +2.28e-01 +7.82e-02 +2.46e-02 +3.10e-01 +2.49e-01 +2.07e-01 +2.92e-01 +2.88e-01 +2.33e-01 +1.62e-01 +1.13e-01 +1.90e-01 +1.80e-01 +1.16e-01 +1.07e-01 +9.41e-02 +4.21e-02 +1.63e-02 +1.17e-01 +8.58e-02 +8.78e-02 +9.13e-02 +1.15e-01 +8.57e-02 +6.78e-02 +3.63e-02 +6.34e-02 +6.38e-02 +4.06e-02 +3.60e-02 +2.77e-02 +2.56e-02 +1.21e-02 +1.71e-01 +1.68e-01 +1.63e-01 +1.68e-01 +1.72e-01 +1.66e-01 +1.65e-01 +1.51e-01 +1.57e-01 +1.63e-01 +1.57e-01 +1.78e-01 +2.58e-01 +3.15e-01 +1.24e-01 +1.72e-01 +1.71e-01 +1.66e-01 +1.69e-01 +1.71e-01 +1.63e-01 +1.58e-01 +1.51e-01 +1.62e-01 +1.68e-01 +1.67e-01 +1.76e-01 +2.54e-01 +3.04e-01 +1.12e-01 +1.75e-01 +1.72e-01 +1.70e-01 +1.68e-01 +1.63e-01 +1.64e-01 +1.63e-01 +1.54e-01 +1.65e-01 +1.69e-01 +1.68e-01 +1.76e-01 +2.52e-01 +2.21e-01 +8.02e-02 +1.68e-01 +1.71e-01 +1.65e-01 +1.66e-01 +1.63e-01 +1.64e-01 +1.61e-01 +1.62e-01 +1.61e-01 +1.66e-01 +1.64e-01 +1.72e-01 +2.60e-01 +2.09e-01 +7.14e-02 +1.63e-01 +1.61e-01 +1.63e-01 +1.69e-01 +1.61e-01 +1.62e-01 +1.62e-01 +1.61e-01 +1.58e-01 +1.54e-01 +1.64e-01 +1.76e-01 +2.59e-01 +3.27e-01 +1.16e-01 +1.60e-01 +1.60e-01 +1.63e-01 +1.68e-01 +1.62e-01 +1.54e-01 +1.50e-01 +1.64e-01 +1.63e-01 +1.58e-01 +1.58e-01 +1.68e-01 +2.43e-01 +2.59e-01 +9.33e-02 +1.61e-01 +1.63e-01 +1.68e-01 +1.62e-01 +1.69e-01 +1.53e-01 +1.53e-01 +1.57e-01 +1.50e-01 +1.54e-01 +1.57e-01 +1.59e-01 +2.17e-01 +2.06e-01 +7.58e-02 +1.71e-01 +1.70e-01 +1.63e-01 +1.57e-01 +1.61e-01 +1.53e-01 +1.56e-01 +1.49e-01 +1.49e-01 +1.59e-01 +1.49e-01 +1.55e-01 +2.27e-01 +1.62e-01 +6.88e-02 +1.71e-01 +1.67e-01 +1.66e-01 +1.60e-01 +1.61e-01 +1.62e-01 +1.63e-01 +1.54e-01 +1.50e-01 +1.48e-01 +1.51e-01 +1.55e-01 +2.15e-01 +1.65e-01 +4.95e-02 +1.71e-01 +1.73e-01 +1.68e-01 +1.62e-01 +1.57e-01 +1.62e-01 +1.59e-01 +1.56e-01 +1.53e-01 +1.47e-01 +1.49e-01 +1.62e-01 +2.14e-01 +1.58e-01 +6.86e-02 +1.70e-01 +1.66e-01 +1.69e-01 +1.66e-01 +1.67e-01 +1.62e-01 +1.63e-01 +1.63e-01 +1.58e-01 +1.52e-01 +1.54e-01 +1.67e-01 +2.26e-01 +1.15e-01 +4.03e-02 +1.74e-01 +1.82e-01 +1.70e-01 +1.72e-01 +1.77e-01 +1.85e-01 +1.68e-01 +1.65e-01 +1.63e-01 +1.74e-01 +1.63e-01 +1.66e-01 +2.29e-01 +1.07e-01 +3.27e-02 +2.58e-01 +2.47e-01 +2.50e-01 +2.57e-01 +2.60e-01 +2.66e-01 +2.59e-01 +2.39e-01 +2.35e-01 +2.29e-01 +2.16e-01 +2.25e-01 +2.33e-01 +8.96e-02 +3.01e-02 +2.73e-01 +2.51e-01 +2.52e-01 +2.63e-01 +3.05e-01 +2.69e-01 +2.91e-01 +1.85e-01 +2.00e-01 +1.47e-01 +1.01e-01 +1.17e-01 +8.80e-02 +3.85e-02 +1.53e-02 +1.00e-01 +8.71e-02 +9.09e-02 +9.00e-02 +1.08e-01 +8.70e-02 +1.17e-01 +5.47e-02 +7.04e-02 +5.07e-02 +3.08e-02 +3.14e-02 +2.64e-02 +1.69e-02 +1.16e-02 +1.60e-01 +1.64e-01 +1.63e-01 +1.67e-01 +1.70e-01 +1.62e-01 +1.54e-01 +1.52e-01 +1.52e-01 +1.55e-01 +1.57e-01 +1.63e-01 +2.61e-01 +2.58e-01 +7.58e-02 +1.59e-01 +1.68e-01 +1.63e-01 +1.58e-01 +1.65e-01 +1.65e-01 +1.67e-01 +1.52e-01 +1.58e-01 +1.56e-01 +1.60e-01 +1.69e-01 +2.49e-01 +2.88e-01 +1.11e-01 +1.66e-01 +1.69e-01 +1.70e-01 +1.63e-01 +1.63e-01 +1.59e-01 +1.63e-01 +1.65e-01 +1.58e-01 +1.58e-01 +1.60e-01 +1.75e-01 +2.57e-01 +2.53e-01 +8.19e-02 +1.67e-01 +1.68e-01 +1.58e-01 +1.58e-01 +1.61e-01 +1.67e-01 +1.54e-01 +1.55e-01 +1.61e-01 +1.61e-01 +1.63e-01 +1.70e-01 +2.53e-01 +2.35e-01 +7.59e-02 +1.63e-01 +1.66e-01 +1.68e-01 +1.64e-01 +1.59e-01 +1.59e-01 +1.57e-01 +1.58e-01 +1.58e-01 +1.57e-01 +1.58e-01 +1.66e-01 +2.50e-01 +2.58e-01 +9.81e-02 +1.60e-01 +1.61e-01 +1.64e-01 +1.61e-01 +1.60e-01 +1.56e-01 +1.51e-01 +1.50e-01 +1.63e-01 +1.64e-01 +1.57e-01 +1.64e-01 +2.37e-01 +2.18e-01 +9.03e-02 +1.68e-01 +1.70e-01 +1.64e-01 +1.56e-01 +1.58e-01 +1.53e-01 +1.51e-01 +1.43e-01 +1.51e-01 +1.53e-01 +1.55e-01 +1.63e-01 +2.19e-01 +1.33e-01 +4.89e-02 +1.67e-01 +1.60e-01 +1.61e-01 +1.55e-01 +1.64e-01 +1.56e-01 +1.49e-01 +1.45e-01 +1.44e-01 +1.51e-01 +1.57e-01 +1.64e-01 +2.32e-01 +1.18e-01 +3.65e-02 +1.62e-01 +1.67e-01 +1.68e-01 +1.55e-01 +1.59e-01 +1.57e-01 +1.58e-01 +1.46e-01 +1.43e-01 +1.39e-01 +1.48e-01 +1.54e-01 +2.26e-01 +1.45e-01 +4.05e-02 +1.55e-01 +1.63e-01 +1.63e-01 +1.67e-01 +1.56e-01 +1.53e-01 +1.50e-01 +1.49e-01 +1.49e-01 +1.45e-01 +1.47e-01 +1.53e-01 +2.10e-01 +1.20e-01 +3.82e-02 +1.65e-01 +1.59e-01 +1.61e-01 +1.61e-01 +1.56e-01 +1.56e-01 +1.60e-01 +1.59e-01 +1.54e-01 +1.53e-01 +1.48e-01 +1.52e-01 +2.07e-01 +1.01e-01 +3.00e-02 +1.77e-01 +1.71e-01 +1.68e-01 +1.71e-01 +1.75e-01 +1.69e-01 +1.64e-01 +1.68e-01 +1.61e-01 +1.61e-01 +1.53e-01 +1.46e-01 +1.95e-01 +9.40e-02 +2.21e-02 +2.46e-01 +2.38e-01 +2.31e-01 +2.41e-01 +2.54e-01 +2.50e-01 +2.28e-01 +2.20e-01 +2.21e-01 +2.26e-01 +2.35e-01 +2.02e-01 +1.88e-01 +9.58e-02 +3.52e-02 +3.06e-01 +2.59e-01 +2.23e-01 +2.61e-01 +2.57e-01 +2.36e-01 +2.32e-01 +1.78e-01 +1.53e-01 +1.37e-01 +1.47e-01 +1.36e-01 +7.24e-02 +4.03e-02 +2.23e-02 +1.04e-01 +9.82e-02 +8.79e-02 +9.20e-02 +9.75e-02 +7.29e-02 +1.04e-01 +6.06e-02 +5.37e-02 +3.67e-02 +4.29e-02 +4.85e-02 +2.87e-02 +1.59e-02 +9.17e-03 +1.71e-01 +1.67e-01 +1.65e-01 +1.69e-01 +1.59e-01 +1.60e-01 +1.62e-01 +1.62e-01 +1.57e-01 +1.49e-01 +1.52e-01 +1.53e-01 +2.42e-01 +1.80e-01 +8.19e-02 +1.68e-01 +1.63e-01 +1.67e-01 +1.65e-01 +1.63e-01 +1.54e-01 +1.59e-01 +1.52e-01 +1.59e-01 +1.52e-01 +1.49e-01 +1.55e-01 +2.25e-01 +2.01e-01 +7.57e-02 +1.63e-01 +1.59e-01 +1.62e-01 +1.61e-01 +1.57e-01 +1.56e-01 +1.50e-01 +1.51e-01 +1.48e-01 +1.53e-01 +1.61e-01 +1.58e-01 +2.32e-01 +2.49e-01 +1.01e-01 +1.67e-01 +1.54e-01 +1.55e-01 +1.52e-01 +1.55e-01 +1.61e-01 +1.57e-01 +1.54e-01 +1.54e-01 +1.54e-01 +1.56e-01 +1.64e-01 +2.25e-01 +1.56e-01 +6.14e-02 +1.67e-01 +1.65e-01 +1.61e-01 +1.57e-01 +1.58e-01 +1.62e-01 +1.55e-01 +1.57e-01 +1.50e-01 +1.54e-01 +1.55e-01 +1.68e-01 +2.32e-01 +1.28e-01 +4.68e-02 +1.63e-01 +1.57e-01 +1.60e-01 +1.63e-01 +1.61e-01 +1.58e-01 +1.50e-01 +1.46e-01 +1.43e-01 +1.52e-01 +1.55e-01 +1.61e-01 +2.25e-01 +1.35e-01 +4.13e-02 +1.64e-01 +1.62e-01 +1.60e-01 +1.62e-01 +1.61e-01 +1.51e-01 +1.50e-01 +1.41e-01 +1.46e-01 +1.49e-01 +1.51e-01 +1.64e-01 +2.31e-01 +1.50e-01 +4.56e-02 +1.53e-01 +1.55e-01 +1.54e-01 +1.57e-01 +1.55e-01 +1.49e-01 +1.50e-01 +1.44e-01 +1.43e-01 +1.47e-01 +1.51e-01 +1.57e-01 +2.19e-01 +1.63e-01 +4.89e-02 +1.64e-01 +6.61e-02 +1.57e-01 +1.53e-01 +1.48e-01 +1.53e-01 +7.58e-02 +1.40e-01 +1.38e-01 +1.40e-01 +1.50e-01 +1.57e-01 +2.10e-01 +1.54e-01 +5.14e-02 +1.56e-01 +1.58e-01 +1.61e-01 +1.57e-01 +1.52e-01 +1.47e-01 +1.51e-01 +1.48e-01 +1.44e-01 +1.48e-01 +1.44e-01 +1.43e-01 +2.07e-01 +1.20e-01 +4.74e-02 +1.62e-01 +1.71e-01 +1.62e-01 +1.57e-01 +1.52e-01 +1.51e-01 +1.44e-01 +1.43e-01 +1.46e-01 +1.46e-01 +1.36e-01 +1.45e-01 +1.86e-01 +7.07e-02 +2.51e-02 +1.70e-01 +1.71e-01 +1.63e-01 +1.56e-01 +1.60e-01 +1.61e-01 +1.56e-01 +1.55e-01 +1.59e-01 +1.53e-01 +1.48e-01 +1.41e-01 +1.55e-01 +6.13e-02 +2.68e-02 +2.40e-01 +2.25e-01 +2.21e-01 +2.27e-01 +2.31e-01 +2.20e-01 +2.21e-01 +1.99e-01 +2.15e-01 +1.98e-01 +2.02e-01 +1.80e-01 +1.35e-01 +3.74e-02 +1.62e-02 +2.64e-01 +2.69e-01 +2.32e-01 +1.55e-01 +1.50e-01 +1.99e-01 +1.79e-01 +1.44e-01 +1.30e-01 +1.25e-01 +1.44e-01 +1.15e-01 +4.22e-02 +1.96e-02 +8.51e-03 +9.50e-02 +1.04e-01 +8.97e-02 +4.80e-02 +4.87e-02 +6.44e-02 +6.38e-02 +4.70e-02 +4.40e-02 +3.28e-02 +4.72e-02 +4.03e-02 +1.52e-02 +8.66e-03 +6.15e-03 +1.56e-01 +1.57e-01 +1.54e-01 +1.60e-01 +1.65e-01 +1.66e-01 +1.65e-01 +1.58e-01 +1.47e-01 +1.40e-01 +1.36e-01 +1.59e-01 +2.22e-01 +1.52e-01 +5.31e-02 +1.61e-01 +1.62e-01 +1.69e-01 +1.63e-01 +1.58e-01 +1.58e-01 +1.59e-01 +1.47e-01 +1.45e-01 +1.39e-01 +1.30e-01 +1.48e-01 +2.15e-01 +1.09e-01 +3.46e-02 +1.58e-01 +1.57e-01 +1.62e-01 +1.63e-01 +1.59e-01 +1.57e-01 +1.56e-01 +1.58e-01 +1.52e-01 +1.45e-01 +1.50e-01 +1.60e-01 +2.17e-01 +1.56e-01 +5.66e-02 +1.60e-01 +1.57e-01 +1.60e-01 +1.57e-01 +1.60e-01 +1.58e-01 +1.54e-01 +1.53e-01 +1.47e-01 +1.42e-01 +1.57e-01 +1.66e-01 +2.10e-01 +1.46e-01 +6.02e-02 +1.62e-01 +1.61e-01 +1.68e-01 +1.54e-01 +1.54e-01 +1.59e-01 +1.50e-01 +1.49e-01 +1.50e-01 +1.46e-01 +1.58e-01 +1.59e-01 +2.16e-01 +1.18e-01 +3.24e-02 +1.61e-01 +1.55e-01 +1.60e-01 +1.59e-01 +1.50e-01 +1.45e-01 +1.50e-01 +1.45e-01 +1.47e-01 +1.46e-01 +1.48e-01 +1.58e-01 +2.13e-01 +1.24e-01 +4.33e-02 +1.58e-01 +1.55e-01 +1.58e-01 +1.51e-01 +1.57e-01 +1.54e-01 +1.50e-01 +1.39e-01 +1.40e-01 +1.40e-01 +1.39e-01 +1.49e-01 +2.03e-01 +1.50e-01 +5.78e-02 +1.51e-01 +1.59e-01 +1.53e-01 +1.53e-01 +1.52e-01 +1.52e-01 +1.46e-01 +1.43e-01 +1.42e-01 +1.41e-01 +1.52e-01 +1.52e-01 +2.06e-01 +1.37e-01 +5.13e-02 +1.55e-01 +1.52e-01 +1.56e-01 +1.49e-01 +1.53e-01 +1.49e-01 +1.45e-01 +1.39e-01 +1.35e-01 +1.33e-01 +1.48e-01 +1.46e-01 +1.98e-01 +1.08e-01 +3.36e-02 +1.53e-01 +1.53e-01 +1.49e-01 +1.43e-01 +1.45e-01 +1.48e-01 +1.38e-01 +1.42e-01 +1.29e-01 +1.29e-01 +1.38e-01 +1.45e-01 +2.11e-01 +1.20e-01 +3.89e-02 +1.60e-01 +1.55e-01 +1.59e-01 +1.49e-01 +1.48e-01 +1.48e-01 +1.47e-01 +1.50e-01 +1.41e-01 +1.37e-01 +1.31e-01 +1.36e-01 +1.77e-01 +7.63e-02 +1.94e-02 +1.69e-01 +1.64e-01 +1.65e-01 +1.57e-01 +1.52e-01 +1.48e-01 +1.44e-01 +1.54e-01 +1.48e-01 +1.49e-01 +1.40e-01 +1.31e-01 +1.53e-01 +4.85e-02 +1.42e-02 +2.42e-01 +2.23e-01 +2.24e-01 +2.03e-01 +2.18e-01 +2.15e-01 +1.75e-01 +1.74e-01 +1.73e-01 +2.02e-01 +2.01e-01 +1.69e-01 +1.22e-01 +3.16e-02 +1.08e-02 +2.16e-01 +2.25e-01 +1.60e-01 +1.34e-01 +1.44e-01 +1.68e-01 +1.02e-01 +8.69e-02 +7.20e-02 +1.43e-01 +1.29e-01 +8.21e-02 +4.29e-02 +1.08e-02 +4.27e-03 +7.46e-02 +7.65e-02 +5.07e-02 +4.76e-02 +4.31e-02 +5.72e-02 +3.77e-02 +2.92e-02 +2.28e-02 +4.79e-02 +4.01e-02 +2.76e-02 +1.93e-02 +8.26e-03 +2.13e-03 +1.63e-01 +1.66e-01 +1.71e-01 +1.63e-01 +1.67e-01 +1.59e-01 +1.56e-01 +1.61e-01 +1.49e-01 +1.45e-01 +1.38e-01 +1.54e-01 +2.17e-01 +1.17e-01 +3.57e-02 +1.59e-01 +1.61e-01 +1.68e-01 +1.63e-01 +1.62e-01 +1.62e-01 +1.60e-01 +1.56e-01 +1.49e-01 +1.47e-01 +1.44e-01 +1.52e-01 +2.09e-01 +1.26e-01 +3.94e-02 +1.57e-01 +1.61e-01 +1.58e-01 +1.59e-01 +1.60e-01 +1.51e-01 +1.56e-01 +1.60e-01 +1.49e-01 +1.45e-01 +1.44e-01 +1.61e-01 +2.41e-01 +1.63e-01 +5.31e-02 +1.60e-01 +1.54e-01 +1.60e-01 +1.53e-01 +1.56e-01 +1.57e-01 +1.55e-01 +1.53e-01 +1.46e-01 +1.47e-01 +1.49e-01 +1.47e-01 +2.08e-01 +1.76e-01 +7.44e-02 +1.55e-01 +1.52e-01 +1.53e-01 +1.52e-01 +1.52e-01 +1.51e-01 +1.51e-01 +1.53e-01 +1.48e-01 +1.40e-01 +1.50e-01 +1.61e-01 +2.05e-01 +1.29e-01 +4.01e-02 +1.60e-01 +1.58e-01 +1.50e-01 +1.47e-01 +1.42e-01 +1.46e-01 +1.50e-01 +1.46e-01 +1.45e-01 +1.42e-01 +1.48e-01 +1.60e-01 +2.17e-01 +1.50e-01 +5.21e-02 +1.53e-01 +1.49e-01 +1.52e-01 +1.45e-01 +1.45e-01 +1.43e-01 +1.40e-01 +1.38e-01 +1.37e-01 +1.36e-01 +1.46e-01 +1.49e-01 +1.88e-01 +1.14e-01 +4.21e-02 +1.48e-01 +1.50e-01 +1.52e-01 +1.43e-01 +1.48e-01 +1.44e-01 +1.36e-01 +1.34e-01 +1.37e-01 +1.37e-01 +1.46e-01 +1.47e-01 +1.84e-01 +7.19e-02 +2.90e-02 +1.48e-01 +1.19e-01 +1.48e-01 +1.48e-01 +1.49e-01 +1.54e-01 +1.45e-01 +1.21e-01 +1.29e-01 +1.30e-01 +1.31e-01 +1.39e-01 +1.93e-01 +7.96e-02 +2.03e-02 +1.53e-01 +1.46e-01 +1.46e-01 +1.41e-01 +1.47e-01 +1.45e-01 +1.42e-01 +1.37e-01 +1.29e-01 +1.27e-01 +1.30e-01 +1.33e-01 +1.95e-01 +8.81e-02 +2.19e-02 +1.56e-01 +1.42e-01 +1.45e-01 +1.43e-01 +1.52e-01 +1.48e-01 +1.44e-01 +1.40e-01 +1.41e-01 +1.31e-01 +1.18e-01 +1.31e-01 +1.83e-01 +9.56e-02 +2.75e-02 +1.63e-01 +1.47e-01 +1.48e-01 +1.57e-01 +1.55e-01 +1.50e-01 +1.56e-01 +1.42e-01 +1.44e-01 +1.39e-01 +1.29e-01 +1.20e-01 +1.52e-01 +5.41e-02 +1.62e-02 +2.32e-01 +2.08e-01 +2.20e-01 +2.22e-01 +2.23e-01 +2.17e-01 +1.99e-01 +2.05e-01 +1.92e-01 +2.03e-01 +1.97e-01 +1.60e-01 +1.37e-01 +4.00e-02 +1.07e-02 +2.25e-01 +1.79e-01 +1.71e-01 +1.67e-01 +1.69e-01 +1.54e-01 +1.02e-01 +1.09e-01 +9.88e-02 +1.08e-01 +1.18e-01 +8.29e-02 +4.15e-02 +1.49e-02 +5.20e-03 +6.83e-02 +5.09e-02 +4.28e-02 +4.83e-02 +4.92e-02 +5.19e-02 +3.56e-02 +3.22e-02 +2.88e-02 +3.04e-02 +3.83e-02 +2.79e-02 +1.21e-02 +5.81e-03 +1.30e-03 +1.57e-01 +1.62e-01 +1.67e-01 +1.62e-01 +1.61e-01 +1.50e-01 +1.52e-01 +1.57e-01 +1.53e-01 +1.51e-01 +1.43e-01 +1.61e-01 +2.04e-01 +1.43e-01 +5.22e-02 +1.59e-01 +1.63e-01 +1.58e-01 +1.58e-01 +1.58e-01 +1.62e-01 +1.60e-01 +1.58e-01 +1.58e-01 +1.43e-01 +1.49e-01 +1.60e-01 +2.21e-01 +1.56e-01 +4.57e-02 +1.63e-01 +1.57e-01 +1.51e-01 +1.54e-01 +1.53e-01 +1.60e-01 +1.55e-01 +1.60e-01 +1.60e-01 +1.45e-01 +1.40e-01 +1.59e-01 +2.23e-01 +1.66e-01 +5.44e-02 +1.53e-01 +1.54e-01 +1.54e-01 +1.50e-01 +1.57e-01 +1.53e-01 +1.59e-01 +1.56e-01 +1.48e-01 +1.45e-01 +1.45e-01 +1.58e-01 +2.07e-01 +1.44e-01 +5.45e-02 +1.50e-01 +1.46e-01 +1.56e-01 +1.56e-01 +1.54e-01 +1.48e-01 +1.50e-01 +1.54e-01 +1.46e-01 +1.46e-01 +1.50e-01 +1.52e-01 +2.09e-01 +1.16e-01 +3.68e-02 +1.56e-01 +1.50e-01 +1.56e-01 +1.48e-01 +1.50e-01 +1.51e-01 +1.48e-01 +1.49e-01 +1.43e-01 +1.41e-01 +1.46e-01 +1.53e-01 +2.02e-01 +1.07e-01 +3.92e-02 +1.55e-01 +1.55e-01 +1.53e-01 +1.49e-01 +1.47e-01 +1.48e-01 +1.41e-01 +1.44e-01 +1.41e-01 +1.41e-01 +1.37e-01 +1.51e-01 +2.06e-01 +1.37e-01 +4.68e-02 +1.52e-01 +1.53e-01 +1.54e-01 +1.53e-01 +1.48e-01 +1.43e-01 +1.32e-01 +1.41e-01 +1.35e-01 +1.27e-01 +1.35e-01 +1.52e-01 +1.90e-01 +7.26e-02 +2.22e-02 +1.47e-01 +1.47e-01 +1.49e-01 +1.50e-01 +1.49e-01 +1.42e-01 +1.39e-01 +1.32e-01 +1.28e-01 +1.26e-01 +1.34e-01 +1.45e-01 +1.87e-01 +8.17e-02 +2.42e-02 +1.49e-01 +1.48e-01 +1.47e-01 +1.50e-01 +1.45e-01 +1.43e-01 +1.38e-01 +1.30e-01 +1.29e-01 +1.31e-01 +1.22e-01 +1.36e-01 +1.78e-01 +1.04e-01 +3.33e-02 +1.48e-01 +1.45e-01 +1.44e-01 +1.42e-01 +1.41e-01 +1.43e-01 +1.46e-01 +1.38e-01 +1.29e-01 +1.25e-01 +1.18e-01 +1.25e-01 +1.79e-01 +8.54e-02 +2.89e-02 +1.64e-01 +1.47e-01 +1.55e-01 +1.56e-01 +1.47e-01 +1.59e-01 +1.48e-01 +1.44e-01 +1.36e-01 +1.33e-01 +1.26e-01 +1.10e-01 +1.31e-01 +5.72e-02 +1.80e-02 +2.46e-01 +2.05e-01 +1.90e-01 +2.18e-01 +2.16e-01 +2.14e-01 +2.02e-01 +2.24e-01 +2.13e-01 +2.23e-01 +1.86e-01 +1.51e-01 +1.18e-01 +3.41e-02 +1.21e-02 +1.87e-01 +1.53e-01 +1.50e-01 +1.67e-01 +1.83e-01 +1.69e-01 +1.39e-01 +1.42e-01 +1.29e-01 +1.05e-01 +9.27e-02 +6.73e-02 +3.93e-02 +1.65e-02 +7.05e-03 +7.21e-02 +6.08e-02 +6.40e-02 +5.54e-02 +6.28e-02 +5.59e-02 +4.39e-02 +4.02e-02 +4.46e-02 +3.36e-02 +3.13e-02 +2.12e-02 +1.23e-02 +7.79e-03 +3.56e-03 +1.51e-01 +1.56e-01 +1.63e-01 +1.66e-01 +1.67e-01 +1.65e-01 +1.66e-01 +1.70e-01 +1.53e-01 +1.56e-01 +1.51e-01 +1.51e-01 +1.83e-01 +9.73e-02 +3.81e-02 +1.53e-01 +1.59e-01 +1.54e-01 +1.57e-01 +1.61e-01 +1.59e-01 +1.57e-01 +1.58e-01 +1.58e-01 +1.58e-01 +1.52e-01 +1.52e-01 +2.00e-01 +1.30e-01 +4.17e-02 +1.54e-01 +1.56e-01 +1.53e-01 +1.62e-01 +1.55e-01 +1.59e-01 +1.66e-01 +1.53e-01 +1.56e-01 +1.56e-01 +1.52e-01 +1.57e-01 +2.13e-01 +1.42e-01 +4.79e-02 +1.53e-01 +1.59e-01 +1.67e-01 +1.55e-01 +1.64e-01 +1.66e-01 +1.61e-01 +1.55e-01 +1.54e-01 +1.50e-01 +1.45e-01 +1.54e-01 +2.09e-01 +1.08e-01 +3.44e-02 +1.54e-01 +1.57e-01 +1.60e-01 +1.54e-01 +1.62e-01 +1.59e-01 +1.56e-01 +1.54e-01 +1.57e-01 +1.52e-01 +1.52e-01 +1.56e-01 +2.03e-01 +9.74e-02 +2.86e-02 +1.52e-01 +1.57e-01 +1.58e-01 +1.62e-01 +1.56e-01 +1.57e-01 +1.52e-01 +1.48e-01 +1.44e-01 +1.47e-01 +1.50e-01 +1.51e-01 +2.12e-01 +1.09e-01 +2.91e-02 +1.51e-01 +1.54e-01 +1.48e-01 +1.58e-01 +1.54e-01 +1.52e-01 +1.51e-01 +1.44e-01 +1.44e-01 +1.43e-01 +1.45e-01 +1.51e-01 +1.99e-01 +1.23e-01 +3.39e-02 +1.48e-01 +1.50e-01 +1.55e-01 +1.59e-01 +1.47e-01 +1.46e-01 +1.37e-01 +1.40e-01 +1.41e-01 +1.47e-01 +1.42e-01 +1.45e-01 +1.87e-01 +1.10e-01 +3.91e-02 +1.43e-01 +1.48e-01 +1.52e-01 +1.52e-01 +1.56e-01 +1.49e-01 +1.38e-01 +1.38e-01 +1.34e-01 +1.30e-01 +1.26e-01 +1.34e-01 +1.85e-01 +8.58e-02 +2.44e-02 +1.48e-01 +1.45e-01 +1.47e-01 +1.50e-01 +1.53e-01 +1.41e-01 +1.37e-01 +1.35e-01 +1.27e-01 +1.27e-01 +1.23e-01 +1.24e-01 +1.55e-01 +8.14e-02 +2.87e-02 +1.44e-01 +1.47e-01 +1.45e-01 +1.44e-01 +1.45e-01 +1.40e-01 +1.42e-01 +1.37e-01 +1.27e-01 +1.28e-01 +1.17e-01 +1.21e-01 +1.63e-01 +5.00e-02 +1.53e-02 +1.47e-01 +1.48e-01 +1.47e-01 +1.53e-01 +1.45e-01 +1.50e-01 +1.52e-01 +1.47e-01 +1.34e-01 +1.29e-01 +1.22e-01 +1.13e-01 +1.35e-01 +4.55e-02 +1.41e-02 +2.05e-01 +1.89e-01 +1.85e-01 +2.07e-01 +2.14e-01 +2.10e-01 +1.91e-01 +1.99e-01 +1.97e-01 +1.79e-01 +1.74e-01 +1.47e-01 +7.71e-02 +1.94e-02 +6.96e-03 +1.71e-01 +9.07e-02 +1.18e-01 +1.23e-01 +1.31e-01 +1.29e-01 +1.02e-01 +1.39e-01 +1.15e-01 +7.59e-02 +8.17e-02 +5.28e-02 +2.69e-02 +1.04e-02 +3.19e-03 +5.55e-02 +2.88e-02 +3.51e-02 +3.72e-02 +5.09e-02 +4.45e-02 +3.21e-02 +4.62e-02 +3.95e-02 +2.61e-02 +2.32e-02 +1.25e-02 +9.63e-03 +6.12e-03 +3.33e-03 +1.57e-01 +1.68e-01 +1.77e-01 +1.71e-01 +1.70e-01 +1.76e-01 +1.72e-01 +1.62e-01 +1.62e-01 +1.58e-01 +1.58e-01 +1.48e-01 +1.49e-01 +3.17e-02 +1.30e-02 +1.73e-01 +1.78e-01 +1.74e-01 +1.61e-01 +1.60e-01 +1.64e-01 +1.67e-01 +1.62e-01 +1.58e-01 +1.56e-01 +1.59e-01 +1.53e-01 +1.62e-01 +5.38e-02 +2.31e-02 +1.66e-01 +1.78e-01 +1.66e-01 +1.64e-01 +1.63e-01 +1.71e-01 +1.77e-01 +1.69e-01 +1.55e-01 +1.57e-01 +1.50e-01 +1.66e-01 +2.15e-01 +9.77e-02 +2.59e-02 +1.65e-01 +1.70e-01 +1.68e-01 +1.65e-01 +1.69e-01 +1.74e-01 +6.32e-02 +1.61e-01 +1.64e-01 +1.57e-01 +1.44e-01 +1.50e-01 +1.92e-01 +8.51e-02 +2.93e-02 +1.60e-01 +1.58e-01 +1.61e-01 +1.66e-01 +1.68e-01 +1.70e-01 +1.63e-01 +1.61e-01 +1.62e-01 +1.60e-01 +1.44e-01 +1.42e-01 +1.97e-01 +1.03e-01 +2.80e-02 +1.55e-01 +1.62e-01 +1.58e-01 +1.62e-01 +1.63e-01 +1.64e-01 +1.60e-01 +1.52e-01 +1.55e-01 +1.57e-01 +1.44e-01 +1.41e-01 +1.88e-01 +9.04e-02 +2.91e-02 +1.49e-01 +1.51e-01 +1.62e-01 +1.64e-01 +1.61e-01 +1.56e-01 +1.57e-01 +1.49e-01 +1.46e-01 +1.48e-01 +1.45e-01 +1.41e-01 +1.63e-01 +9.25e-02 +3.25e-02 +1.52e-01 +1.51e-01 +1.52e-01 +1.59e-01 +1.57e-01 +1.54e-01 +1.55e-01 +1.52e-01 +1.48e-01 +1.42e-01 +1.43e-01 +1.45e-01 +1.82e-01 +6.97e-02 +2.31e-02 +1.55e-01 +1.54e-01 +1.58e-01 +1.59e-01 +1.58e-01 +1.62e-01 +1.50e-01 +1.47e-01 +1.42e-01 +1.42e-01 +1.33e-01 +1.37e-01 +1.74e-01 +6.53e-02 +2.18e-02 +1.52e-01 +1.45e-01 +1.60e-01 +1.58e-01 +1.58e-01 +1.54e-01 +1.50e-01 +1.37e-01 +1.30e-01 +1.26e-01 +1.30e-01 +1.23e-01 +1.71e-01 +7.09e-02 +2.53e-02 +1.42e-01 +1.41e-01 +1.47e-01 +1.47e-01 +1.58e-01 +1.48e-01 +1.36e-01 +1.35e-01 +1.33e-01 +1.29e-01 +1.19e-01 +1.14e-01 +1.45e-01 +4.24e-02 +1.27e-02 +1.42e-01 +6.20e-02 +1.44e-01 +1.45e-01 +1.42e-01 +1.37e-01 +1.42e-01 +1.47e-01 +1.33e-01 +1.30e-01 +1.15e-01 +1.07e-01 +1.24e-01 +3.83e-02 +1.19e-02 +1.85e-01 +1.70e-01 +1.73e-01 +1.81e-01 +1.77e-01 +1.76e-01 +1.75e-01 +1.93e-01 +1.94e-01 +1.58e-01 +1.45e-01 +1.24e-01 +7.16e-02 +2.05e-02 +7.17e-03 +1.27e-01 +6.47e-02 +8.27e-02 +1.04e-01 +7.86e-02 +7.86e-02 +7.04e-02 +6.74e-02 +1.02e-01 +7.60e-02 +5.37e-02 +4.16e-02 +2.54e-02 +6.01e-03 +1.97e-03 +5.06e-02 +2.49e-02 +3.45e-02 +3.64e-02 +2.84e-02 +2.70e-02 +2.34e-02 +2.43e-02 +3.12e-02 +2.55e-02 +1.56e-02 +1.52e-02 +9.91e-03 +3.26e-03 +1.47e-03 +2.30e-01 +2.43e-01 +2.55e-01 +2.55e-01 +2.51e-01 +2.39e-01 +2.30e-01 +2.27e-01 +2.29e-01 +2.07e-01 +2.02e-01 +2.14e-01 +1.61e-01 +2.95e-02 +7.43e-03 +2.45e-01 +2.22e-01 +2.61e-01 +2.31e-01 +2.30e-01 +2.40e-01 +2.34e-01 +2.18e-01 +2.03e-01 +2.11e-01 +1.97e-01 +1.92e-01 +1.80e-01 +4.88e-02 +1.49e-02 +2.38e-01 +2.17e-01 +2.52e-01 +2.29e-01 +2.25e-01 +2.44e-01 +2.15e-01 +2.39e-01 +2.19e-01 +2.19e-01 +2.01e-01 +1.92e-01 +2.20e-01 +9.45e-02 +2.94e-02 +2.36e-01 +2.27e-01 +2.34e-01 +2.40e-01 +2.35e-01 +2.56e-01 +2.38e-01 +2.37e-01 +2.25e-01 +2.08e-01 +1.82e-01 +1.60e-01 +1.81e-01 +5.67e-02 +1.61e-02 +2.29e-01 +2.18e-01 +2.26e-01 +2.37e-01 +2.21e-01 +2.35e-01 +2.69e-01 +2.31e-01 +2.30e-01 +2.32e-01 +2.01e-01 +1.47e-01 +1.58e-01 +7.81e-02 +2.93e-02 +2.28e-01 +2.05e-01 +2.20e-01 +2.25e-01 +2.12e-01 +2.31e-01 +2.33e-01 +2.13e-01 +2.09e-01 +2.24e-01 +1.97e-01 +1.71e-01 +1.79e-01 +7.52e-02 +2.31e-02 +2.03e-01 +2.07e-01 +2.27e-01 +2.19e-01 +2.11e-01 +2.22e-01 +2.17e-01 +2.08e-01 +1.77e-01 +2.01e-01 +1.89e-01 +1.57e-01 +1.63e-01 +5.48e-02 +1.75e-02 +2.07e-01 +2.13e-01 +2.09e-01 +2.25e-01 +2.36e-01 +2.27e-01 +2.11e-01 +2.10e-01 +1.87e-01 +1.89e-01 +1.88e-01 +1.79e-01 +1.33e-01 +3.03e-02 +1.06e-02 +2.08e-01 +2.14e-01 +2.12e-01 +2.27e-01 +2.27e-01 +2.05e-01 +2.29e-01 +2.21e-01 +1.93e-01 +2.02e-01 +1.81e-01 +1.73e-01 +1.67e-01 +4.08e-02 +1.39e-02 +2.00e-01 +2.19e-01 +2.28e-01 +2.14e-01 +2.28e-01 +2.06e-01 +2.17e-01 +1.92e-01 +1.79e-01 +1.74e-01 +1.72e-01 +1.71e-01 +1.60e-01 +4.62e-02 +1.43e-02 +1.82e-01 +1.92e-01 +2.16e-01 +2.14e-01 +2.12e-01 +2.26e-01 +1.94e-01 +1.68e-01 +1.64e-01 +1.50e-01 +1.55e-01 +1.48e-01 +1.04e-01 +4.02e-02 +1.44e-02 +1.56e-01 +1.60e-01 +1.93e-01 +1.87e-01 +1.94e-01 +2.01e-01 +2.07e-01 +1.85e-01 +1.76e-01 +1.49e-01 +1.39e-01 +1.38e-01 +1.04e-01 +2.84e-02 +1.17e-02 +1.33e-01 +1.46e-01 +1.65e-01 +1.58e-01 +1.74e-01 +1.70e-01 +1.37e-01 +1.94e-01 +1.93e-01 +1.64e-01 +1.20e-01 +1.02e-01 +6.63e-02 +1.85e-02 +8.29e-03 +6.84e-02 +4.09e-02 +5.11e-02 +6.13e-02 +4.88e-02 +4.65e-02 +3.93e-02 +4.74e-02 +8.51e-02 +5.59e-02 +2.40e-02 +2.44e-02 +1.30e-02 +4.68e-03 +2.65e-03 +2.59e-02 +1.30e-02 +1.81e-02 +1.96e-02 +1.49e-02 +1.49e-02 +1.50e-02 +1.42e-02 +2.71e-02 +2.16e-02 +1.05e-02 +7.72e-03 +4.11e-03 +2.35e-03 +9.64e-04 +2.21e-01 +2.15e-01 +2.72e-01 +1.92e-01 +3.01e-01 +2.43e-01 +2.13e-01 +2.18e-01 +1.88e-01 +1.66e-01 +1.13e-01 +1.21e-01 +1.08e-01 +2.92e-02 +8.37e-03 +2.75e-01 +1.89e-01 +3.28e-01 +3.64e-01 +2.91e-01 +2.34e-01 +1.86e-01 +1.90e-01 +1.53e-01 +1.35e-01 +1.21e-01 +1.01e-01 +8.79e-02 +3.91e-02 +1.37e-02 +2.37e-01 +2.28e-01 +2.92e-01 +2.21e-01 +1.70e-01 +2.29e-01 +1.86e-01 +1.95e-01 +1.65e-01 +1.42e-01 +1.73e-01 +1.38e-01 +7.39e-02 +4.16e-02 +2.91e-02 +2.73e-01 +2.33e-01 +2.78e-01 +3.06e-01 +2.31e-01 +2.52e-01 +2.69e-01 +2.39e-01 +2.13e-01 +1.63e-01 +1.20e-01 +8.39e-02 +5.83e-02 +2.86e-02 +1.32e-02 +2.63e-01 +1.92e-01 +2.54e-01 +3.11e-01 +2.65e-01 +2.75e-01 +2.71e-01 +2.21e-01 +1.81e-01 +1.68e-01 +1.49e-01 +7.05e-02 +5.03e-02 +2.54e-02 +1.28e-02 +2.09e-01 +1.61e-01 +2.21e-01 +2.28e-01 +1.55e-01 +1.78e-01 +2.16e-01 +1.50e-01 +1.32e-01 +1.76e-01 +1.57e-01 +1.01e-01 +5.61e-02 +2.32e-02 +1.53e-02 +1.50e-01 +1.81e-01 +2.03e-01 +2.04e-01 +1.79e-01 +1.94e-01 +1.81e-01 +1.52e-01 +1.26e-01 +1.13e-01 +9.16e-02 +6.72e-02 +3.94e-02 +2.35e-02 +1.45e-02 +1.06e-01 +1.43e-01 +1.61e-01 +1.57e-01 +1.80e-01 +1.80e-01 +1.24e-01 +1.22e-01 +8.18e-02 +7.30e-02 +9.33e-02 +7.39e-02 +3.89e-02 +2.07e-02 +8.17e-03 +1.13e-01 +1.37e-01 +1.61e-01 +2.21e-01 +1.71e-01 +1.51e-01 +1.16e-01 +1.45e-01 +1.13e-01 +1.05e-01 +9.41e-02 +7.14e-02 +5.35e-02 +1.91e-02 +7.31e-03 +8.55e-02 +1.58e-01 +2.08e-01 +1.60e-01 +1.37e-01 +8.33e-02 +1.16e-01 +1.39e-01 +1.15e-01 +9.22e-02 +8.69e-02 +6.24e-02 +4.30e-02 +2.48e-02 +7.57e-03 +9.22e-02 +1.13e-01 +1.60e-01 +1.04e-01 +1.40e-01 +1.35e-01 +1.08e-01 +1.02e-01 +8.56e-02 +5.91e-02 +7.46e-02 +6.28e-02 +3.81e-02 +2.04e-02 +9.21e-03 +7.85e-02 +6.83e-02 +1.01e-01 +9.42e-02 +9.47e-02 +1.38e-01 +1.13e-01 +6.40e-02 +6.03e-02 +5.21e-02 +4.63e-02 +4.67e-02 +3.57e-02 +9.24e-03 +3.46e-03 +3.82e-02 +4.99e-02 +6.21e-02 +4.80e-02 +5.79e-02 +8.37e-02 +6.86e-02 +6.66e-02 +5.19e-02 +5.77e-02 +4.00e-02 +3.46e-02 +2.69e-02 +9.16e-03 +3.73e-03 +1.66e-02 +1.94e-02 +2.26e-02 +1.79e-02 +2.45e-02 +3.08e-02 +2.00e-02 +2.89e-02 +3.35e-02 +2.83e-02 +1.58e-02 +1.10e-02 +7.32e-03 +3.83e-03 +1.85e-03 +1.35e-02 +7.32e-03 +8.41e-03 +8.10e-03 +9.00e-03 +1.12e-02 +5.57e-03 +9.30e-03 +1.48e-02 +1.39e-02 +6.30e-03 +3.42e-03 +2.99e-03 +1.40e-03 +5.26e-04 +7.56e-02 +7.51e-02 +1.02e-01 +6.63e-02 +1.09e-01 +8.00e-02 +7.46e-02 +7.69e-02 +7.23e-02 +5.75e-02 +3.77e-02 +3.71e-02 +3.59e-02 +2.14e-02 +7.54e-03 +1.13e-01 +5.14e-02 +1.11e-01 +1.48e-01 +1.23e-01 +8.67e-02 +6.58e-02 +5.93e-02 +5.79e-02 +5.00e-02 +3.78e-02 +2.92e-02 +2.64e-02 +1.76e-02 +8.34e-03 +8.72e-02 +6.82e-02 +1.03e-01 +9.93e-02 +4.68e-02 +8.00e-02 +6.54e-02 +5.74e-02 +5.88e-02 +4.17e-02 +6.05e-02 +5.26e-02 +2.82e-02 +1.18e-02 +1.25e-02 +8.93e-02 +6.93e-02 +1.05e-01 +1.22e-01 +7.82e-02 +8.44e-02 +9.53e-02 +9.08e-02 +8.61e-02 +6.38e-02 +4.26e-02 +2.94e-02 +1.95e-02 +1.16e-02 +5.85e-03 +1.07e-01 +7.48e-02 +9.61e-02 +1.16e-01 +1.00e-01 +9.56e-02 +1.01e-01 +7.22e-02 +7.15e-02 +4.92e-02 +5.10e-02 +2.14e-02 +1.39e-02 +8.55e-03 +5.42e-03 +6.30e-02 +5.46e-02 +6.94e-02 +7.56e-02 +5.76e-02 +4.99e-02 +6.77e-02 +4.79e-02 +4.29e-02 +5.31e-02 +5.73e-02 +4.32e-02 +2.01e-02 +8.20e-03 +4.18e-03 +6.21e-02 +5.98e-02 +7.34e-02 +7.91e-02 +4.60e-02 +5.73e-02 +6.01e-02 +5.26e-02 +5.01e-02 +3.98e-02 +3.12e-02 +2.62e-02 +1.44e-02 +6.44e-03 +6.95e-03 +2.95e-02 +5.38e-02 +4.94e-02 +4.81e-02 +5.65e-02 +6.07e-02 +3.70e-02 +3.88e-02 +2.59e-02 +2.05e-02 +2.51e-02 +2.29e-02 +1.19e-02 +1.08e-02 +8.34e-03 +3.62e-02 +4.00e-02 +5.20e-02 +6.63e-02 +6.42e-02 +5.90e-02 +3.69e-02 +4.87e-02 +4.00e-02 +3.31e-02 +2.85e-02 +2.46e-02 +2.05e-02 +8.72e-03 +3.45e-03 +2.17e-02 +4.81e-02 +6.28e-02 +6.24e-02 +4.43e-02 +2.41e-02 +3.73e-02 +4.41e-02 +4.25e-02 +2.80e-02 +2.62e-02 +2.10e-02 +1.12e-02 +1.28e-02 +6.90e-03 +2.96e-02 +4.88e-02 +5.84e-02 +2.83e-02 +4.58e-02 +3.78e-02 +2.43e-02 +3.47e-02 +3.08e-02 +2.18e-02 +2.32e-02 +1.70e-02 +1.26e-02 +9.95e-03 +8.03e-03 +2.02e-02 +2.21e-02 +3.09e-02 +2.79e-02 +2.92e-02 +4.73e-02 +3.85e-02 +2.69e-02 +1.89e-02 +1.70e-02 +1.44e-02 +1.42e-02 +1.51e-02 +4.21e-03 +1.55e-03 +1.72e-02 +1.70e-02 +2.18e-02 +2.50e-02 +1.84e-02 +3.18e-02 +2.53e-02 +2.01e-02 +1.37e-02 +1.89e-02 +1.02e-02 +1.15e-02 +1.16e-02 +3.85e-03 +1.22e-03 +5.45e-03 +9.53e-03 +9.49e-03 +6.68e-03 +1.08e-02 +1.59e-02 +1.34e-02 +1.53e-02 +1.86e-02 +1.03e-02 +1.07e-02 +6.50e-03 +3.98e-03 +2.38e-03 +2.29e-03 +4.46e-03 +5.06e-03 +5.22e-03 +4.55e-03 +5.72e-03 +1.00e-02 +6.07e-03 +5.95e-03 +1.20e-02 +8.03e-03 +5.95e-03 +3.61e-03 +1.35e-03 +8.82e-04 +1.47e-03 +Upper Bounds +8.83e-01 +9.04e-01 +9.04e-01 +9.06e-01 +8.90e-01 +8.71e-01 +8.51e-01 +8.82e-01 +8.99e-01 +9.42e-01 +8.75e-01 +9.67e-01 +1.38e+00 +2.14e+00 +7.89e-01 +8.70e-01 +9.12e-01 +9.06e-01 +8.15e-01 +8.92e-01 +9.06e-01 +8.84e-01 +8.83e-01 +8.68e-01 +8.58e-01 +9.07e-01 +9.12e-01 +1.29e+00 +1.63e+00 +5.33e-01 +9.10e-01 +8.73e-01 +9.05e-01 +9.08e-01 +8.81e-01 +8.85e-01 +8.70e-01 +8.31e-01 +8.30e-01 +8.46e-01 +8.79e-01 +9.36e-01 +1.33e+00 +2.08e+00 +7.86e-01 +8.80e-01 +8.72e-01 +8.61e-01 +8.81e-01 +8.35e-01 +8.38e-01 +8.52e-01 +8.74e-01 +8.63e-01 +8.63e-01 +8.27e-01 +9.20e-01 +1.33e+00 +2.00e+00 +6.39e-01 +8.76e-01 +9.10e-01 +9.11e-01 +9.20e-01 +8.60e-01 +8.61e-01 +8.34e-01 +8.36e-01 +8.28e-01 +8.72e-01 +8.44e-01 +9.49e-01 +1.41e+00 +1.65e+00 +6.46e-01 +9.01e-01 +8.97e-01 +8.94e-01 +8.90e-01 +8.81e-01 +8.46e-01 +8.38e-01 +8.15e-01 +8.49e-01 +8.29e-01 +8.56e-01 +9.61e-01 +1.35e+00 +1.44e+00 +5.12e-01 +8.79e-01 +8.59e-01 +8.42e-01 +8.55e-01 +8.31e-01 +8.41e-01 +8.24e-01 +8.31e-01 +8.11e-01 +7.99e-01 +8.06e-01 +8.32e-01 +1.19e+00 +1.66e+00 +6.17e-01 +9.09e-01 +9.03e-01 +8.95e-01 +8.51e-01 +8.33e-01 +8.62e-01 +8.26e-01 +8.10e-01 +7.35e-01 +7.80e-01 +7.82e-01 +7.20e-01 +1.00e+00 +8.79e-01 +3.78e-01 +8.81e-01 +8.79e-01 +8.98e-01 +9.09e-01 +8.56e-01 +8.36e-01 +8.27e-01 +8.09e-01 +7.69e-01 +7.73e-01 +7.71e-01 +7.76e-01 +1.14e+00 +8.33e-01 +2.68e-01 +8.83e-01 +9.23e-01 +9.16e-01 +9.05e-01 +8.94e-01 +8.03e-01 +8.19e-01 +7.89e-01 +8.04e-01 +7.99e-01 +7.77e-01 +7.67e-01 +1.16e+00 +8.69e-01 +3.26e-01 +9.04e-01 +8.93e-01 +9.15e-01 +8.96e-01 +8.99e-01 +8.47e-01 +7.92e-01 +8.32e-01 +7.94e-01 +7.96e-01 +8.49e-01 +7.81e-01 +1.06e+00 +6.40e-01 +1.87e-01 +9.49e-01 +9.48e-01 +9.08e-01 +8.57e-01 +9.51e-01 +9.10e-01 +8.62e-01 +8.93e-01 +8.43e-01 +8.47e-01 +8.29e-01 +7.55e-01 +1.11e+00 +4.81e-01 +1.57e-01 +1.38e+00 +1.37e+00 +1.26e+00 +1.31e+00 +1.37e+00 +1.34e+00 +1.26e+00 +1.21e+00 +1.21e+00 +1.21e+00 +1.20e+00 +1.12e+00 +1.06e+00 +3.64e-01 +1.05e-01 +2.50e+00 +1.75e+00 +1.96e+00 +1.28e+00 +1.40e+00 +1.59e+00 +1.27e+00 +1.18e+00 +9.31e-01 +9.87e-01 +9.06e-01 +7.50e-01 +4.87e-01 +1.88e-01 +9.31e-02 +1.08e+00 +7.08e-01 +8.14e-01 +4.09e-01 +4.59e-01 +5.72e-01 +4.06e-01 +3.97e-01 +3.49e-01 +3.11e-01 +3.14e-01 +2.24e-01 +1.84e-01 +7.93e-02 +3.58e-02 +8.56e-01 +8.80e-01 +8.90e-01 +8.72e-01 +8.83e-01 +8.79e-01 +9.07e-01 +8.87e-01 +8.46e-01 +8.81e-01 +9.13e-01 +9.22e-01 +1.35e+00 +1.99e+00 +7.68e-01 +8.95e-01 +8.96e-01 +9.01e-01 +8.77e-01 +8.78e-01 +8.57e-01 +8.71e-01 +8.72e-01 +8.61e-01 +8.65e-01 +8.84e-01 +9.25e-01 +1.27e+00 +1.84e+00 +6.71e-01 +9.00e-01 +8.80e-01 +8.68e-01 +8.83e-01 +8.81e-01 +8.83e-01 +8.68e-01 +8.89e-01 +8.61e-01 +9.00e-01 +9.04e-01 +9.07e-01 +1.33e+00 +1.66e+00 +5.75e-01 +9.10e-01 +9.28e-01 +9.04e-01 +9.15e-01 +8.67e-01 +8.37e-01 +8.58e-01 +8.74e-01 +8.49e-01 +8.43e-01 +8.73e-01 +9.20e-01 +1.29e+00 +1.77e+00 +6.31e-01 +8.99e-01 +9.11e-01 +8.97e-01 +8.66e-01 +8.29e-01 +8.49e-01 +8.85e-01 +8.47e-01 +8.39e-01 +8.47e-01 +8.91e-01 +9.17e-01 +1.38e+00 +1.51e+00 +6.62e-01 +8.74e-01 +8.88e-01 +8.84e-01 +8.46e-01 +8.97e-01 +8.43e-01 +8.27e-01 +8.17e-01 +8.15e-01 +8.35e-01 +8.69e-01 +9.33e-01 +1.35e+00 +1.72e+00 +6.01e-01 +9.01e-01 +9.12e-01 +8.41e-01 +8.34e-01 +8.86e-01 +8.49e-01 +7.94e-01 +7.99e-01 +7.91e-01 +8.03e-01 +8.26e-01 +8.34e-01 +1.17e+00 +1.46e+00 +5.66e-01 +8.53e-01 +8.62e-01 +8.25e-01 +8.26e-01 +8.26e-01 +7.99e-01 +7.85e-01 +7.29e-01 +7.14e-01 +7.51e-01 +7.41e-01 +5.28e-01 +9.65e-01 +8.41e-01 +3.51e-01 +8.43e-01 +9.30e-01 +8.75e-01 +8.72e-01 +8.86e-01 +8.25e-01 +8.06e-01 +7.70e-01 +7.66e-01 +7.77e-01 +7.36e-01 +7.06e-01 +9.91e-01 +6.14e-01 +1.92e-01 +8.89e-01 +9.28e-01 +8.82e-01 +8.85e-01 +8.26e-01 +8.77e-01 +8.28e-01 +7.72e-01 +7.97e-01 +7.70e-01 +8.14e-01 +7.60e-01 +1.08e+00 +7.25e-01 +2.17e-01 +8.99e-01 +9.33e-01 +8.95e-01 +8.67e-01 +9.07e-01 +8.80e-01 +8.33e-01 +7.98e-01 +8.16e-01 +7.99e-01 +8.47e-01 +7.75e-01 +1.08e+00 +6.72e-01 +2.06e-01 +9.39e-01 +8.99e-01 +9.19e-01 +9.05e-01 +9.21e-01 +9.37e-01 +8.70e-01 +8.47e-01 +8.32e-01 +8.66e-01 +8.48e-01 +8.12e-01 +1.00e+00 +4.14e-01 +1.43e-01 +1.29e+00 +1.41e+00 +1.29e+00 +1.35e+00 +1.47e+00 +1.34e+00 +1.23e+00 +1.28e+00 +1.17e+00 +1.16e+00 +1.29e+00 +1.20e+00 +1.04e+00 +2.68e-01 +6.98e-02 +1.56e+00 +1.49e+00 +1.36e+00 +1.52e+00 +1.85e+00 +1.77e+00 +1.39e+00 +1.40e+00 +1.09e+00 +8.12e-01 +8.12e-01 +8.15e-01 +5.39e-01 +1.74e-01 +7.42e-02 +5.46e-01 +5.41e-01 +5.27e-01 +5.05e-01 +6.76e-01 +7.08e-01 +4.76e-01 +5.00e-01 +4.66e-01 +2.59e-01 +2.59e-01 +2.67e-01 +2.12e-01 +9.34e-02 +3.59e-02 +8.98e-01 +8.76e-01 +9.11e-01 +8.74e-01 +8.57e-01 +8.49e-01 +8.45e-01 +8.23e-01 +8.73e-01 +8.56e-01 +8.41e-01 +9.32e-01 +1.56e+00 +2.14e+00 +8.32e-01 +9.04e-01 +8.85e-01 +8.48e-01 +8.66e-01 +8.66e-01 +8.58e-01 +8.22e-01 +8.28e-01 +8.32e-01 +8.65e-01 +8.49e-01 +9.47e-01 +1.32e+00 +2.01e+00 +8.20e-01 +8.96e-01 +9.02e-01 +9.15e-01 +8.55e-01 +8.63e-01 +8.56e-01 +8.51e-01 +8.73e-01 +8.47e-01 +8.41e-01 +8.38e-01 +8.99e-01 +1.24e+00 +1.71e+00 +6.45e-01 +8.13e-01 +8.67e-01 +8.68e-01 +8.57e-01 +8.41e-01 +8.27e-01 +8.41e-01 +8.63e-01 +8.60e-01 +8.27e-01 +8.62e-01 +8.45e-01 +1.26e+00 +1.59e+00 +5.28e-01 +8.37e-01 +8.48e-01 +8.61e-01 +8.18e-01 +8.55e-01 +8.57e-01 +7.87e-01 +8.18e-01 +8.05e-01 +8.09e-01 +8.66e-01 +8.95e-01 +1.31e+00 +1.33e+00 +3.87e-01 +8.40e-01 +8.59e-01 +8.21e-01 +8.32e-01 +8.27e-01 +8.30e-01 +7.89e-01 +7.95e-01 +8.16e-01 +8.14e-01 +8.48e-01 +8.74e-01 +1.25e+00 +1.74e+00 +6.56e-01 +8.62e-01 +8.97e-01 +8.49e-01 +8.48e-01 +8.43e-01 +8.56e-01 +8.49e-01 +7.73e-01 +7.97e-01 +8.23e-01 +8.50e-01 +8.53e-01 +1.22e+00 +1.23e+00 +4.60e-01 +8.51e-01 +8.51e-01 +8.30e-01 +8.17e-01 +8.30e-01 +8.17e-01 +7.95e-01 +7.91e-01 +7.83e-01 +7.99e-01 +7.74e-01 +7.63e-01 +1.10e+00 +8.15e-01 +3.18e-01 +8.51e-01 +8.51e-01 +8.64e-01 +8.45e-01 +8.30e-01 +8.19e-01 +8.14e-01 +8.18e-01 +7.60e-01 +7.72e-01 +7.64e-01 +7.45e-01 +1.06e+00 +8.19e-01 +3.07e-01 +8.70e-01 +8.92e-01 +8.63e-01 +8.73e-01 +8.70e-01 +8.23e-01 +8.34e-01 +7.96e-01 +7.41e-01 +7.85e-01 +7.76e-01 +7.97e-01 +1.03e+00 +6.15e-01 +2.40e-01 +8.46e-01 +8.88e-01 +8.83e-01 +8.69e-01 +8.83e-01 +8.65e-01 +8.68e-01 +8.40e-01 +7.58e-01 +7.91e-01 +7.91e-01 +7.77e-01 +1.06e+00 +6.09e-01 +1.67e-01 +8.76e-01 +9.27e-01 +9.32e-01 +9.51e-01 +9.02e-01 +8.97e-01 +8.78e-01 +8.56e-01 +8.35e-01 +8.55e-01 +8.47e-01 +8.43e-01 +9.29e-01 +5.11e-01 +1.77e-01 +1.33e+00 +1.33e+00 +1.32e+00 +1.25e+00 +1.30e+00 +1.29e+00 +1.17e+00 +1.21e+00 +1.18e+00 +1.15e+00 +1.16e+00 +1.21e+00 +1.14e+00 +2.72e-01 +8.55e-02 +1.89e+00 +1.37e+00 +1.71e+00 +1.75e+00 +1.82e+00 +1.16e+00 +1.16e+00 +1.09e+00 +9.10e-01 +8.87e-01 +6.38e-01 +5.79e-01 +5.13e-01 +2.08e-01 +5.28e-02 +6.66e-01 +4.35e-01 +7.04e-01 +6.72e-01 +6.85e-01 +4.41e-01 +3.91e-01 +4.18e-01 +2.80e-01 +3.20e-01 +1.45e-01 +1.85e-01 +1.73e-01 +1.30e-01 +6.20e-02 +8.83e-01 +8.54e-01 +8.74e-01 +8.97e-01 +8.66e-01 +8.53e-01 +8.20e-01 +8.29e-01 +7.95e-01 +8.07e-01 +7.74e-01 +8.95e-01 +1.34e+00 +2.13e+00 +7.78e-01 +8.75e-01 +9.11e-01 +8.53e-01 +8.24e-01 +8.43e-01 +8.30e-01 +8.44e-01 +8.16e-01 +8.23e-01 +8.70e-01 +8.45e-01 +8.81e-01 +1.24e+00 +1.66e+00 +6.51e-01 +8.43e-01 +8.65e-01 +8.86e-01 +8.33e-01 +7.75e-01 +8.33e-01 +7.93e-01 +8.14e-01 +7.91e-01 +8.49e-01 +8.48e-01 +9.21e-01 +1.22e+00 +1.35e+00 +5.11e-01 +8.45e-01 +8.50e-01 +8.67e-01 +8.43e-01 +8.32e-01 +8.35e-01 +8.18e-01 +8.02e-01 +8.09e-01 +8.16e-01 +8.13e-01 +8.33e-01 +1.24e+00 +1.20e+00 +4.92e-01 +8.11e-01 +8.21e-01 +8.46e-01 +8.56e-01 +8.12e-01 +7.90e-01 +8.10e-01 +7.88e-01 +8.08e-01 +8.07e-01 +8.57e-01 +8.34e-01 +1.25e+00 +1.61e+00 +5.85e-01 +8.68e-01 +7.99e-01 +8.45e-01 +8.59e-01 +8.33e-01 +7.98e-01 +8.23e-01 +8.40e-01 +8.12e-01 +8.01e-01 +8.15e-01 +8.78e-01 +1.27e+00 +1.49e+00 +5.48e-01 +8.43e-01 +8.37e-01 +8.81e-01 +7.97e-01 +7.95e-01 +7.90e-01 +8.20e-01 +7.94e-01 +7.75e-01 +7.96e-01 +7.56e-01 +8.00e-01 +1.25e+00 +1.44e+00 +5.06e-01 +8.60e-01 +8.53e-01 +8.41e-01 +8.13e-01 +7.94e-01 +8.04e-01 +8.30e-01 +7.78e-01 +7.68e-01 +7.54e-01 +7.46e-01 +7.89e-01 +1.17e+00 +9.25e-01 +3.31e-01 +8.47e-01 +8.26e-01 +8.14e-01 +8.34e-01 +8.09e-01 +8.13e-01 +8.14e-01 +8.04e-01 +7.77e-01 +7.65e-01 +7.94e-01 +8.47e-01 +1.24e+00 +9.33e-01 +2.64e-01 +8.55e-01 +8.28e-01 +8.67e-01 +8.38e-01 +8.25e-01 +8.22e-01 +7.96e-01 +7.62e-01 +7.99e-01 +7.61e-01 +7.38e-01 +7.68e-01 +1.16e+00 +6.75e-01 +2.70e-01 +8.80e-01 +8.88e-01 +8.39e-01 +8.92e-01 +8.67e-01 +8.43e-01 +8.12e-01 +8.07e-01 +7.97e-01 +8.03e-01 +7.88e-01 +8.01e-01 +1.03e+00 +4.71e-01 +1.39e-01 +9.42e-01 +8.84e-01 +8.89e-01 +4.30e-01 +9.12e-01 +9.52e-01 +8.80e-01 +8.13e-01 +8.44e-01 +8.47e-01 +8.47e-01 +8.42e-01 +9.87e-01 +3.92e-01 +1.14e-01 +1.24e+00 +1.25e+00 +1.29e+00 +1.25e+00 +1.29e+00 +1.28e+00 +1.08e+00 +1.14e+00 +1.21e+00 +1.12e+00 +1.06e+00 +1.07e+00 +1.14e+00 +3.91e-01 +1.23e-01 +1.55e+00 +1.24e+00 +1.03e+00 +1.46e+00 +1.44e+00 +1.17e+00 +8.10e-01 +5.67e-01 +9.52e-01 +9.00e-01 +5.78e-01 +5.33e-01 +4.71e-01 +2.10e-01 +8.15e-02 +5.84e-01 +4.29e-01 +4.39e-01 +4.57e-01 +5.73e-01 +4.28e-01 +3.39e-01 +1.82e-01 +3.17e-01 +3.19e-01 +2.03e-01 +1.80e-01 +1.39e-01 +1.28e-01 +6.06e-02 +8.53e-01 +8.42e-01 +8.16e-01 +8.39e-01 +8.62e-01 +8.30e-01 +8.25e-01 +7.57e-01 +7.84e-01 +8.17e-01 +7.86e-01 +8.91e-01 +1.29e+00 +1.58e+00 +6.19e-01 +8.62e-01 +8.53e-01 +8.28e-01 +8.47e-01 +8.54e-01 +8.13e-01 +7.89e-01 +7.56e-01 +8.10e-01 +8.39e-01 +8.37e-01 +8.80e-01 +1.27e+00 +1.52e+00 +5.61e-01 +8.76e-01 +8.58e-01 +8.51e-01 +8.40e-01 +8.16e-01 +8.22e-01 +8.17e-01 +7.68e-01 +8.23e-01 +8.47e-01 +8.38e-01 +8.80e-01 +1.26e+00 +1.11e+00 +4.01e-01 +8.41e-01 +8.55e-01 +8.26e-01 +8.31e-01 +8.17e-01 +8.22e-01 +8.05e-01 +8.08e-01 +8.05e-01 +8.32e-01 +8.20e-01 +8.61e-01 +1.30e+00 +1.05e+00 +3.57e-01 +8.15e-01 +8.06e-01 +8.14e-01 +8.44e-01 +8.05e-01 +8.12e-01 +8.12e-01 +8.06e-01 +7.90e-01 +7.71e-01 +8.19e-01 +8.79e-01 +1.29e+00 +1.63e+00 +5.79e-01 +7.99e-01 +7.98e-01 +8.14e-01 +8.39e-01 +8.09e-01 +7.70e-01 +7.51e-01 +8.22e-01 +8.15e-01 +7.92e-01 +7.89e-01 +8.42e-01 +1.22e+00 +1.30e+00 +4.67e-01 +8.04e-01 +8.15e-01 +8.41e-01 +8.12e-01 +8.44e-01 +7.64e-01 +7.65e-01 +7.83e-01 +7.51e-01 +7.69e-01 +7.83e-01 +7.95e-01 +1.09e+00 +1.03e+00 +3.79e-01 +8.53e-01 +8.48e-01 +8.17e-01 +7.87e-01 +8.03e-01 +7.66e-01 +7.80e-01 +7.47e-01 +7.47e-01 +7.94e-01 +7.46e-01 +7.73e-01 +1.13e+00 +8.10e-01 +3.44e-01 +8.55e-01 +8.35e-01 +8.31e-01 +8.01e-01 +8.04e-01 +8.11e-01 +8.17e-01 +7.71e-01 +7.52e-01 +7.41e-01 +7.55e-01 +7.73e-01 +1.08e+00 +8.26e-01 +2.48e-01 +8.55e-01 +8.65e-01 +8.39e-01 +8.10e-01 +7.84e-01 +8.10e-01 +7.97e-01 +7.80e-01 +7.63e-01 +7.36e-01 +7.45e-01 +8.12e-01 +1.07e+00 +7.90e-01 +3.43e-01 +8.52e-01 +8.31e-01 +8.47e-01 +8.29e-01 +8.34e-01 +8.10e-01 +8.16e-01 +8.13e-01 +7.91e-01 +7.58e-01 +7.69e-01 +8.34e-01 +1.13e+00 +5.77e-01 +2.01e-01 +8.71e-01 +9.08e-01 +8.51e-01 +8.61e-01 +8.87e-01 +9.24e-01 +8.39e-01 +8.24e-01 +8.13e-01 +8.68e-01 +8.13e-01 +8.31e-01 +1.14e+00 +5.34e-01 +1.63e-01 +1.29e+00 +1.23e+00 +1.25e+00 +1.29e+00 +1.30e+00 +1.33e+00 +1.29e+00 +1.19e+00 +1.17e+00 +1.14e+00 +1.08e+00 +1.12e+00 +1.16e+00 +4.48e-01 +1.51e-01 +1.37e+00 +1.25e+00 +1.26e+00 +1.31e+00 +1.52e+00 +1.34e+00 +1.46e+00 +9.26e-01 +1.00e+00 +7.33e-01 +5.03e-01 +5.86e-01 +4.40e-01 +1.93e-01 +7.63e-02 +5.00e-01 +4.36e-01 +4.55e-01 +4.50e-01 +5.38e-01 +4.35e-01 +5.87e-01 +2.74e-01 +3.52e-01 +2.53e-01 +1.54e-01 +1.57e-01 +1.32e-01 +8.46e-02 +5.80e-02 +7.99e-01 +8.20e-01 +8.15e-01 +8.33e-01 +8.51e-01 +8.10e-01 +7.68e-01 +7.62e-01 +7.58e-01 +7.77e-01 +7.87e-01 +8.14e-01 +1.30e+00 +1.29e+00 +3.79e-01 +7.97e-01 +8.41e-01 +8.13e-01 +7.89e-01 +8.26e-01 +8.24e-01 +8.37e-01 +7.59e-01 +7.92e-01 +7.78e-01 +7.98e-01 +8.46e-01 +1.24e+00 +1.44e+00 +5.54e-01 +8.32e-01 +8.44e-01 +8.48e-01 +8.16e-01 +8.13e-01 +7.97e-01 +8.17e-01 +8.24e-01 +7.90e-01 +7.89e-01 +7.98e-01 +8.75e-01 +1.29e+00 +1.26e+00 +4.10e-01 +8.34e-01 +8.40e-01 +7.91e-01 +7.91e-01 +8.06e-01 +8.33e-01 +7.71e-01 +7.76e-01 +8.05e-01 +8.07e-01 +8.15e-01 +8.50e-01 +1.26e+00 +1.18e+00 +3.80e-01 +8.13e-01 +8.32e-01 +8.39e-01 +8.18e-01 +7.93e-01 +7.93e-01 +7.84e-01 +7.91e-01 +7.91e-01 +7.83e-01 +7.90e-01 +8.30e-01 +1.25e+00 +1.29e+00 +4.90e-01 +8.01e-01 +8.04e-01 +8.21e-01 +8.03e-01 +7.98e-01 +7.82e-01 +7.55e-01 +7.52e-01 +8.14e-01 +8.19e-01 +7.83e-01 +8.19e-01 +1.18e+00 +1.09e+00 +4.51e-01 +8.40e-01 +8.48e-01 +8.18e-01 +7.81e-01 +7.89e-01 +7.65e-01 +7.53e-01 +7.17e-01 +7.54e-01 +7.65e-01 +7.76e-01 +8.17e-01 +1.09e+00 +6.64e-01 +2.45e-01 +8.36e-01 +7.99e-01 +8.04e-01 +7.74e-01 +8.20e-01 +7.78e-01 +7.45e-01 +7.25e-01 +7.18e-01 +7.55e-01 +7.87e-01 +8.22e-01 +1.16e+00 +5.88e-01 +1.82e-01 +8.12e-01 +8.33e-01 +8.42e-01 +7.73e-01 +7.95e-01 +7.85e-01 +7.91e-01 +7.28e-01 +7.16e-01 +6.95e-01 +7.39e-01 +7.71e-01 +1.13e+00 +7.23e-01 +2.02e-01 +7.76e-01 +8.13e-01 +8.17e-01 +8.37e-01 +7.81e-01 +7.65e-01 +7.51e-01 +7.47e-01 +7.44e-01 +7.26e-01 +7.33e-01 +7.63e-01 +1.05e+00 +6.00e-01 +1.91e-01 +8.27e-01 +7.94e-01 +8.07e-01 +8.05e-01 +7.80e-01 +7.80e-01 +8.00e-01 +7.93e-01 +7.69e-01 +7.64e-01 +7.39e-01 +7.58e-01 +1.04e+00 +5.07e-01 +1.50e-01 +8.87e-01 +8.55e-01 +8.41e-01 +8.56e-01 +8.73e-01 +8.47e-01 +8.19e-01 +8.38e-01 +8.05e-01 +8.07e-01 +7.65e-01 +7.30e-01 +9.77e-01 +4.70e-01 +1.10e-01 +1.23e+00 +1.19e+00 +1.16e+00 +1.21e+00 +1.27e+00 +1.25e+00 +1.14e+00 +1.10e+00 +1.11e+00 +1.13e+00 +1.17e+00 +1.01e+00 +9.39e-01 +4.79e-01 +1.76e-01 +1.53e+00 +1.30e+00 +1.11e+00 +1.31e+00 +1.28e+00 +1.18e+00 +1.16e+00 +8.91e-01 +7.64e-01 +6.86e-01 +7.35e-01 +6.78e-01 +3.62e-01 +2.02e-01 +1.12e-01 +5.19e-01 +4.91e-01 +4.40e-01 +4.60e-01 +4.87e-01 +3.65e-01 +5.18e-01 +3.03e-01 +2.69e-01 +1.84e-01 +2.14e-01 +2.43e-01 +1.44e-01 +7.93e-02 +4.59e-02 +8.53e-01 +8.34e-01 +8.24e-01 +8.44e-01 +7.93e-01 +7.98e-01 +8.11e-01 +8.08e-01 +7.84e-01 +7.45e-01 +7.60e-01 +7.66e-01 +1.21e+00 +9.01e-01 +4.10e-01 +8.39e-01 +8.13e-01 +8.33e-01 +8.25e-01 +8.17e-01 +7.68e-01 +7.94e-01 +7.61e-01 +7.94e-01 +7.58e-01 +7.43e-01 +7.76e-01 +1.12e+00 +1.01e+00 +3.78e-01 +8.15e-01 +7.96e-01 +8.12e-01 +8.03e-01 +7.86e-01 +7.79e-01 +7.51e-01 +7.57e-01 +7.42e-01 +7.66e-01 +8.04e-01 +7.92e-01 +1.16e+00 +1.25e+00 +5.04e-01 +8.34e-01 +7.68e-01 +7.75e-01 +7.60e-01 +7.73e-01 +8.04e-01 +7.87e-01 +7.68e-01 +7.69e-01 +7.72e-01 +7.79e-01 +8.20e-01 +1.12e+00 +7.80e-01 +3.07e-01 +8.35e-01 +8.24e-01 +8.03e-01 +7.87e-01 +7.88e-01 +8.12e-01 +7.74e-01 +7.87e-01 +7.48e-01 +7.70e-01 +7.77e-01 +8.41e-01 +1.16e+00 +6.39e-01 +2.34e-01 +8.17e-01 +7.87e-01 +7.98e-01 +8.15e-01 +8.06e-01 +7.88e-01 +7.52e-01 +7.32e-01 +7.17e-01 +7.61e-01 +7.74e-01 +8.04e-01 +1.13e+00 +6.75e-01 +2.06e-01 +8.22e-01 +8.10e-01 +8.02e-01 +8.08e-01 +8.05e-01 +7.56e-01 +7.48e-01 +7.03e-01 +7.31e-01 +7.43e-01 +7.54e-01 +8.22e-01 +1.16e+00 +7.52e-01 +2.28e-01 +7.64e-01 +7.75e-01 +7.68e-01 +7.87e-01 +7.73e-01 +7.45e-01 +7.48e-01 +7.22e-01 +7.13e-01 +7.34e-01 +7.57e-01 +7.86e-01 +1.10e+00 +8.15e-01 +2.44e-01 +8.21e-01 +3.30e-01 +7.87e-01 +7.66e-01 +7.39e-01 +7.65e-01 +3.79e-01 +6.99e-01 +6.88e-01 +6.98e-01 +7.52e-01 +7.85e-01 +1.05e+00 +7.70e-01 +2.57e-01 +7.79e-01 +7.89e-01 +8.06e-01 +7.85e-01 +7.59e-01 +7.34e-01 +7.57e-01 +7.39e-01 +7.18e-01 +7.39e-01 +7.21e-01 +7.16e-01 +1.03e+00 +6.02e-01 +2.37e-01 +8.09e-01 +8.54e-01 +8.12e-01 +7.85e-01 +7.60e-01 +7.56e-01 +7.18e-01 +7.13e-01 +7.31e-01 +7.31e-01 +6.81e-01 +7.25e-01 +9.31e-01 +3.54e-01 +1.26e-01 +8.50e-01 +8.54e-01 +8.14e-01 +7.80e-01 +8.02e-01 +8.05e-01 +7.81e-01 +7.77e-01 +7.97e-01 +7.65e-01 +7.40e-01 +7.05e-01 +7.73e-01 +3.06e-01 +1.34e-01 +1.20e+00 +1.12e+00 +1.11e+00 +1.13e+00 +1.15e+00 +1.10e+00 +1.10e+00 +9.95e-01 +1.08e+00 +9.88e-01 +1.01e+00 +9.01e-01 +6.74e-01 +1.87e-01 +8.09e-02 +1.32e+00 +1.34e+00 +1.16e+00 +7.75e-01 +7.51e-01 +9.97e-01 +8.93e-01 +7.22e-01 +6.51e-01 +6.25e-01 +7.18e-01 +5.73e-01 +2.11e-01 +9.82e-02 +4.26e-02 +4.75e-01 +5.18e-01 +4.49e-01 +2.40e-01 +2.44e-01 +3.22e-01 +3.19e-01 +2.35e-01 +2.20e-01 +1.64e-01 +2.36e-01 +2.02e-01 +7.60e-02 +4.33e-02 +3.07e-02 +7.81e-01 +7.87e-01 +7.72e-01 +8.00e-01 +8.25e-01 +8.31e-01 +8.27e-01 +7.89e-01 +7.35e-01 +7.02e-01 +6.79e-01 +7.96e-01 +1.11e+00 +7.59e-01 +2.66e-01 +8.05e-01 +8.08e-01 +8.45e-01 +8.16e-01 +7.90e-01 +7.90e-01 +7.97e-01 +7.35e-01 +7.24e-01 +6.97e-01 +6.50e-01 +7.41e-01 +1.08e+00 +5.46e-01 +1.73e-01 +7.91e-01 +7.84e-01 +8.12e-01 +8.14e-01 +7.93e-01 +7.86e-01 +7.80e-01 +7.88e-01 +7.62e-01 +7.26e-01 +7.48e-01 +8.00e-01 +1.08e+00 +7.80e-01 +2.83e-01 +7.99e-01 +7.86e-01 +8.00e-01 +7.83e-01 +8.01e-01 +7.89e-01 +7.68e-01 +7.67e-01 +7.34e-01 +7.08e-01 +7.83e-01 +8.28e-01 +1.05e+00 +7.28e-01 +3.01e-01 +8.10e-01 +8.05e-01 +8.41e-01 +7.70e-01 +7.70e-01 +7.93e-01 +7.51e-01 +7.44e-01 +7.48e-01 +7.29e-01 +7.92e-01 +7.97e-01 +1.08e+00 +5.90e-01 +1.62e-01 +8.06e-01 +7.76e-01 +8.01e-01 +7.96e-01 +7.50e-01 +7.27e-01 +7.51e-01 +7.26e-01 +7.36e-01 +7.31e-01 +7.41e-01 +7.92e-01 +1.07e+00 +6.18e-01 +2.17e-01 +7.91e-01 +7.77e-01 +7.90e-01 +7.54e-01 +7.85e-01 +7.70e-01 +7.48e-01 +6.96e-01 +6.99e-01 +7.02e-01 +6.96e-01 +7.43e-01 +1.02e+00 +7.52e-01 +2.89e-01 +7.56e-01 +7.94e-01 +7.67e-01 +7.64e-01 +7.61e-01 +7.60e-01 +7.28e-01 +7.14e-01 +7.09e-01 +7.03e-01 +7.62e-01 +7.59e-01 +1.03e+00 +6.86e-01 +2.56e-01 +7.75e-01 +7.59e-01 +7.81e-01 +7.45e-01 +7.66e-01 +7.46e-01 +7.25e-01 +6.93e-01 +6.75e-01 +6.66e-01 +7.38e-01 +7.32e-01 +9.88e-01 +5.41e-01 +1.68e-01 +7.63e-01 +7.64e-01 +7.46e-01 +7.17e-01 +7.23e-01 +7.40e-01 +6.88e-01 +7.11e-01 +6.45e-01 +6.43e-01 +6.92e-01 +7.27e-01 +1.06e+00 +5.99e-01 +1.94e-01 +7.99e-01 +7.77e-01 +7.94e-01 +7.47e-01 +7.40e-01 +7.39e-01 +7.34e-01 +7.52e-01 +7.06e-01 +6.86e-01 +6.55e-01 +6.81e-01 +8.86e-01 +3.82e-01 +9.69e-02 +8.46e-01 +8.18e-01 +8.26e-01 +7.84e-01 +7.60e-01 +7.38e-01 +7.20e-01 +7.68e-01 +7.41e-01 +7.47e-01 +7.02e-01 +6.54e-01 +7.66e-01 +2.43e-01 +7.12e-02 +1.21e+00 +1.12e+00 +1.12e+00 +1.01e+00 +1.09e+00 +1.07e+00 +8.74e-01 +8.72e-01 +8.67e-01 +1.01e+00 +1.01e+00 +8.47e-01 +6.09e-01 +1.58e-01 +5.39e-02 +1.08e+00 +1.12e+00 +8.01e-01 +6.68e-01 +7.20e-01 +8.39e-01 +5.11e-01 +4.35e-01 +3.60e-01 +7.14e-01 +6.43e-01 +4.11e-01 +2.15e-01 +5.39e-02 +2.14e-02 +3.73e-01 +3.83e-01 +2.54e-01 +2.38e-01 +2.15e-01 +2.86e-01 +1.89e-01 +1.46e-01 +1.14e-01 +2.39e-01 +2.00e-01 +1.38e-01 +9.65e-02 +4.13e-02 +1.06e-02 +8.16e-01 +8.31e-01 +8.55e-01 +8.17e-01 +8.37e-01 +7.96e-01 +7.81e-01 +8.05e-01 +7.46e-01 +7.27e-01 +6.91e-01 +7.68e-01 +1.08e+00 +5.87e-01 +1.78e-01 +7.93e-01 +8.07e-01 +8.40e-01 +8.16e-01 +8.12e-01 +8.09e-01 +7.98e-01 +7.79e-01 +7.43e-01 +7.35e-01 +7.18e-01 +7.62e-01 +1.05e+00 +6.30e-01 +1.97e-01 +7.86e-01 +8.04e-01 +7.90e-01 +7.96e-01 +8.02e-01 +7.57e-01 +7.80e-01 +7.99e-01 +7.43e-01 +7.26e-01 +7.20e-01 +8.04e-01 +1.21e+00 +8.14e-01 +2.65e-01 +8.01e-01 +7.70e-01 +8.02e-01 +7.66e-01 +7.78e-01 +7.86e-01 +7.74e-01 +7.63e-01 +7.30e-01 +7.36e-01 +7.45e-01 +7.37e-01 +1.04e+00 +8.80e-01 +3.72e-01 +7.76e-01 +7.61e-01 +7.65e-01 +7.59e-01 +7.59e-01 +7.54e-01 +7.53e-01 +7.66e-01 +7.41e-01 +7.01e-01 +7.50e-01 +8.07e-01 +1.03e+00 +6.47e-01 +2.01e-01 +8.00e-01 +7.91e-01 +7.50e-01 +7.33e-01 +7.09e-01 +7.28e-01 +7.48e-01 +7.31e-01 +7.26e-01 +7.09e-01 +7.38e-01 +8.00e-01 +1.08e+00 +7.50e-01 +2.61e-01 +7.64e-01 +7.45e-01 +7.60e-01 +7.26e-01 +7.24e-01 +7.17e-01 +6.99e-01 +6.92e-01 +6.87e-01 +6.82e-01 +7.32e-01 +7.47e-01 +9.42e-01 +5.70e-01 +2.11e-01 +7.38e-01 +7.50e-01 +7.58e-01 +7.14e-01 +7.38e-01 +7.21e-01 +6.81e-01 +6.69e-01 +6.84e-01 +6.84e-01 +7.32e-01 +7.33e-01 +9.18e-01 +3.59e-01 +1.45e-01 +7.38e-01 +5.93e-01 +7.38e-01 +7.39e-01 +7.46e-01 +7.70e-01 +7.25e-01 +6.07e-01 +6.46e-01 +6.49e-01 +6.56e-01 +6.97e-01 +9.65e-01 +3.98e-01 +1.02e-01 +7.63e-01 +7.31e-01 +7.32e-01 +7.05e-01 +7.34e-01 +7.26e-01 +7.09e-01 +6.85e-01 +6.43e-01 +6.34e-01 +6.51e-01 +6.67e-01 +9.76e-01 +4.41e-01 +1.09e-01 +7.80e-01 +7.12e-01 +7.26e-01 +7.17e-01 +7.58e-01 +7.39e-01 +7.19e-01 +7.02e-01 +7.03e-01 +6.55e-01 +5.91e-01 +6.53e-01 +9.17e-01 +4.78e-01 +1.37e-01 +8.17e-01 +7.34e-01 +7.39e-01 +7.85e-01 +7.75e-01 +7.52e-01 +7.79e-01 +7.11e-01 +7.19e-01 +6.96e-01 +6.43e-01 +6.00e-01 +7.61e-01 +2.70e-01 +8.10e-02 +1.16e+00 +1.04e+00 +1.10e+00 +1.11e+00 +1.11e+00 +1.08e+00 +9.96e-01 +1.02e+00 +9.59e-01 +1.01e+00 +9.84e-01 +7.98e-01 +6.84e-01 +2.00e-01 +5.36e-02 +1.12e+00 +8.97e-01 +8.53e-01 +8.36e-01 +8.45e-01 +7.72e-01 +5.11e-01 +5.45e-01 +4.94e-01 +5.38e-01 +5.92e-01 +4.14e-01 +2.08e-01 +7.44e-02 +2.60e-02 +3.41e-01 +2.55e-01 +2.14e-01 +2.42e-01 +2.46e-01 +2.60e-01 +1.78e-01 +1.61e-01 +1.44e-01 +1.52e-01 +1.91e-01 +1.39e-01 +6.05e-02 +2.90e-02 +6.48e-03 +7.87e-01 +8.11e-01 +8.37e-01 +8.09e-01 +8.06e-01 +7.52e-01 +7.59e-01 +7.86e-01 +7.65e-01 +7.53e-01 +7.16e-01 +8.07e-01 +1.02e+00 +7.17e-01 +2.61e-01 +7.93e-01 +8.13e-01 +7.88e-01 +7.89e-01 +7.88e-01 +8.08e-01 +8.00e-01 +7.90e-01 +7.89e-01 +7.16e-01 +7.47e-01 +7.98e-01 +1.11e+00 +7.82e-01 +2.29e-01 +8.16e-01 +7.85e-01 +7.57e-01 +7.70e-01 +7.67e-01 +7.99e-01 +7.75e-01 +7.99e-01 +8.00e-01 +7.27e-01 +7.00e-01 +7.95e-01 +1.12e+00 +8.32e-01 +2.72e-01 +7.66e-01 +7.71e-01 +7.72e-01 +7.50e-01 +7.83e-01 +7.66e-01 +7.97e-01 +7.79e-01 +7.41e-01 +7.26e-01 +7.24e-01 +7.90e-01 +1.04e+00 +7.19e-01 +2.72e-01 +7.50e-01 +7.28e-01 +7.78e-01 +7.78e-01 +7.70e-01 +7.41e-01 +7.52e-01 +7.68e-01 +7.29e-01 +7.30e-01 +7.52e-01 +7.62e-01 +1.04e+00 +5.78e-01 +1.84e-01 +7.79e-01 +7.50e-01 +7.82e-01 +7.38e-01 +7.48e-01 +7.53e-01 +7.41e-01 +7.47e-01 +7.17e-01 +7.06e-01 +7.29e-01 +7.63e-01 +1.01e+00 +5.33e-01 +1.96e-01 +7.73e-01 +7.74e-01 +7.65e-01 +7.47e-01 +7.35e-01 +7.39e-01 +7.07e-01 +7.21e-01 +7.07e-01 +7.06e-01 +6.86e-01 +7.53e-01 +1.03e+00 +6.87e-01 +2.34e-01 +7.58e-01 +7.65e-01 +7.72e-01 +7.64e-01 +7.41e-01 +7.16e-01 +6.58e-01 +7.03e-01 +6.75e-01 +6.34e-01 +6.76e-01 +7.61e-01 +9.52e-01 +3.63e-01 +1.11e-01 +7.33e-01 +7.35e-01 +7.46e-01 +7.50e-01 +7.43e-01 +7.09e-01 +6.97e-01 +6.61e-01 +6.39e-01 +6.31e-01 +6.70e-01 +7.26e-01 +9.35e-01 +4.08e-01 +1.21e-01 +7.44e-01 +7.40e-01 +7.34e-01 +7.49e-01 +7.23e-01 +7.13e-01 +6.92e-01 +6.51e-01 +6.43e-01 +6.54e-01 +6.11e-01 +6.81e-01 +8.92e-01 +5.18e-01 +1.67e-01 +7.39e-01 +7.24e-01 +7.18e-01 +7.10e-01 +7.07e-01 +7.17e-01 +7.28e-01 +6.89e-01 +6.45e-01 +6.27e-01 +5.89e-01 +6.27e-01 +8.94e-01 +4.27e-01 +1.44e-01 +8.20e-01 +7.35e-01 +7.73e-01 +7.79e-01 +7.33e-01 +7.94e-01 +7.38e-01 +7.21e-01 +6.82e-01 +6.66e-01 +6.30e-01 +5.52e-01 +6.56e-01 +2.86e-01 +9.02e-02 +1.23e+00 +1.02e+00 +9.49e-01 +1.09e+00 +1.08e+00 +1.07e+00 +1.01e+00 +1.12e+00 +1.07e+00 +1.12e+00 +9.32e-01 +7.55e-01 +5.90e-01 +1.70e-01 +6.04e-02 +9.35e-01 +7.67e-01 +7.48e-01 +8.36e-01 +9.13e-01 +8.43e-01 +6.94e-01 +7.11e-01 +6.45e-01 +5.23e-01 +4.64e-01 +3.36e-01 +1.97e-01 +8.24e-02 +3.52e-02 +3.61e-01 +3.04e-01 +3.20e-01 +2.77e-01 +3.14e-01 +2.79e-01 +2.19e-01 +2.01e-01 +2.23e-01 +1.68e-01 +1.56e-01 +1.06e-01 +6.15e-02 +3.90e-02 +1.78e-02 +7.55e-01 +7.78e-01 +8.17e-01 +8.31e-01 +8.37e-01 +8.23e-01 +8.31e-01 +8.49e-01 +7.67e-01 +7.79e-01 +7.53e-01 +7.56e-01 +9.13e-01 +4.87e-01 +1.90e-01 +7.63e-01 +7.96e-01 +7.72e-01 +7.84e-01 +8.07e-01 +7.97e-01 +7.85e-01 +7.92e-01 +7.90e-01 +7.89e-01 +7.62e-01 +7.60e-01 +9.99e-01 +6.50e-01 +2.08e-01 +7.70e-01 +7.78e-01 +7.67e-01 +8.10e-01 +7.76e-01 +7.97e-01 +8.29e-01 +7.63e-01 +7.81e-01 +7.78e-01 +7.59e-01 +7.86e-01 +1.06e+00 +7.09e-01 +2.39e-01 +7.64e-01 +7.94e-01 +8.36e-01 +7.73e-01 +8.21e-01 +8.29e-01 +8.06e-01 +7.74e-01 +7.69e-01 +7.48e-01 +7.27e-01 +7.70e-01 +1.04e+00 +5.38e-01 +1.72e-01 +7.68e-01 +7.86e-01 +7.98e-01 +7.72e-01 +8.10e-01 +7.95e-01 +7.80e-01 +7.69e-01 +7.86e-01 +7.59e-01 +7.61e-01 +7.80e-01 +1.02e+00 +4.87e-01 +1.43e-01 +7.60e-01 +7.84e-01 +7.88e-01 +8.10e-01 +7.80e-01 +7.87e-01 +7.60e-01 +7.40e-01 +7.18e-01 +7.35e-01 +7.48e-01 +7.57e-01 +1.06e+00 +5.45e-01 +1.46e-01 +7.56e-01 +7.71e-01 +7.41e-01 +7.88e-01 +7.68e-01 +7.62e-01 +7.57e-01 +7.22e-01 +7.18e-01 +7.13e-01 +7.27e-01 +7.54e-01 +9.95e-01 +6.13e-01 +1.70e-01 +7.39e-01 +7.50e-01 +7.74e-01 +7.93e-01 +7.34e-01 +7.32e-01 +6.83e-01 +7.01e-01 +7.06e-01 +7.36e-01 +7.12e-01 +7.25e-01 +9.34e-01 +5.51e-01 +1.95e-01 +7.17e-01 +7.39e-01 +7.59e-01 +7.62e-01 +7.78e-01 +7.43e-01 +6.89e-01 +6.89e-01 +6.69e-01 +6.52e-01 +6.30e-01 +6.68e-01 +9.23e-01 +4.29e-01 +1.22e-01 +7.39e-01 +7.23e-01 +7.35e-01 +7.50e-01 +7.65e-01 +7.07e-01 +6.87e-01 +6.74e-01 +6.34e-01 +6.34e-01 +6.14e-01 +6.22e-01 +7.74e-01 +4.07e-01 +1.43e-01 +7.20e-01 +7.36e-01 +7.25e-01 +7.20e-01 +7.27e-01 +7.02e-01 +7.08e-01 +6.86e-01 +6.37e-01 +6.42e-01 +5.84e-01 +6.05e-01 +8.13e-01 +2.50e-01 +7.65e-02 +7.35e-01 +7.38e-01 +7.34e-01 +7.63e-01 +7.24e-01 +7.52e-01 +7.60e-01 +7.36e-01 +6.72e-01 +6.44e-01 +6.12e-01 +5.65e-01 +6.76e-01 +2.27e-01 +7.04e-02 +1.03e+00 +9.44e-01 +9.23e-01 +1.03e+00 +1.07e+00 +1.05e+00 +9.55e-01 +9.95e-01 +9.86e-01 +8.94e-01 +8.68e-01 +7.36e-01 +3.85e-01 +9.70e-02 +3.48e-02 +8.54e-01 +4.54e-01 +5.88e-01 +6.14e-01 +6.53e-01 +6.43e-01 +5.10e-01 +6.95e-01 +5.75e-01 +3.80e-01 +4.09e-01 +2.64e-01 +1.34e-01 +5.20e-02 +1.59e-02 +2.77e-01 +1.44e-01 +1.76e-01 +1.86e-01 +2.54e-01 +2.23e-01 +1.61e-01 +2.31e-01 +1.97e-01 +1.30e-01 +1.16e-01 +6.26e-02 +4.81e-02 +3.06e-02 +1.67e-02 +7.86e-01 +8.39e-01 +8.83e-01 +8.55e-01 +8.50e-01 +8.79e-01 +8.60e-01 +8.12e-01 +8.09e-01 +7.89e-01 +7.90e-01 +7.42e-01 +7.44e-01 +1.58e-01 +6.48e-02 +8.67e-01 +8.89e-01 +8.72e-01 +8.03e-01 +7.98e-01 +8.19e-01 +8.35e-01 +8.10e-01 +7.91e-01 +7.79e-01 +7.97e-01 +7.65e-01 +8.12e-01 +2.69e-01 +1.15e-01 +8.28e-01 +8.91e-01 +8.28e-01 +8.22e-01 +8.14e-01 +8.56e-01 +8.86e-01 +8.46e-01 +7.76e-01 +7.84e-01 +7.49e-01 +8.31e-01 +1.07e+00 +4.89e-01 +1.30e-01 +8.26e-01 +8.49e-01 +8.39e-01 +8.27e-01 +8.44e-01 +8.70e-01 +3.16e-01 +8.04e-01 +8.19e-01 +7.85e-01 +7.20e-01 +7.52e-01 +9.62e-01 +4.26e-01 +1.46e-01 +8.01e-01 +7.89e-01 +8.03e-01 +8.28e-01 +8.39e-01 +8.52e-01 +8.17e-01 +8.07e-01 +8.12e-01 +8.02e-01 +7.19e-01 +7.09e-01 +9.85e-01 +5.13e-01 +1.40e-01 +7.74e-01 +8.11e-01 +7.91e-01 +8.10e-01 +8.13e-01 +8.20e-01 +7.99e-01 +7.62e-01 +7.73e-01 +7.84e-01 +7.21e-01 +7.04e-01 +9.41e-01 +4.52e-01 +1.46e-01 +7.47e-01 +7.56e-01 +8.11e-01 +8.22e-01 +8.04e-01 +7.79e-01 +7.83e-01 +7.46e-01 +7.28e-01 +7.40e-01 +7.25e-01 +7.07e-01 +8.17e-01 +4.63e-01 +1.62e-01 +7.58e-01 +7.56e-01 +7.60e-01 +7.96e-01 +7.87e-01 +7.69e-01 +7.75e-01 +7.58e-01 +7.39e-01 +7.10e-01 +7.14e-01 +7.27e-01 +9.10e-01 +3.49e-01 +1.16e-01 +7.76e-01 +7.69e-01 +7.90e-01 +7.93e-01 +7.91e-01 +8.11e-01 +7.48e-01 +7.33e-01 +7.10e-01 +7.10e-01 +6.65e-01 +6.83e-01 +8.72e-01 +3.27e-01 +1.09e-01 +7.58e-01 +7.27e-01 +8.00e-01 +7.89e-01 +7.90e-01 +7.69e-01 +7.48e-01 +6.87e-01 +6.49e-01 +6.32e-01 +6.50e-01 +6.16e-01 +8.53e-01 +3.55e-01 +1.26e-01 +7.12e-01 +7.03e-01 +7.35e-01 +7.34e-01 +7.90e-01 +7.42e-01 +6.78e-01 +6.75e-01 +6.64e-01 +6.43e-01 +5.93e-01 +5.68e-01 +7.24e-01 +2.12e-01 +6.37e-02 +7.12e-01 +3.10e-01 +7.21e-01 +7.24e-01 +7.11e-01 +6.84e-01 +7.09e-01 +7.37e-01 +6.65e-01 +6.48e-01 +5.74e-01 +5.37e-01 +6.18e-01 +1.92e-01 +5.93e-02 +9.23e-01 +8.49e-01 +8.63e-01 +9.07e-01 +8.87e-01 +8.82e-01 +8.74e-01 +9.65e-01 +9.71e-01 +7.90e-01 +7.23e-01 +6.21e-01 +3.58e-01 +1.02e-01 +3.58e-02 +6.34e-01 +3.24e-01 +4.14e-01 +5.18e-01 +3.93e-01 +3.93e-01 +3.52e-01 +3.37e-01 +5.09e-01 +3.80e-01 +2.69e-01 +2.08e-01 +1.27e-01 +3.00e-02 +9.84e-03 +2.53e-01 +1.24e-01 +1.72e-01 +1.82e-01 +1.42e-01 +1.35e-01 +1.17e-01 +1.22e-01 +1.56e-01 +1.28e-01 +7.82e-02 +7.58e-02 +4.95e-02 +1.63e-02 +7.34e-03 +1.15e+00 +1.21e+00 +1.27e+00 +1.27e+00 +1.26e+00 +1.19e+00 +1.15e+00 +1.14e+00 +1.15e+00 +1.04e+00 +1.01e+00 +1.07e+00 +8.04e-01 +1.47e-01 +3.71e-02 +1.23e+00 +1.11e+00 +1.30e+00 +1.15e+00 +1.15e+00 +1.20e+00 +1.17e+00 +1.09e+00 +1.02e+00 +1.06e+00 +9.84e-01 +9.61e-01 +9.02e-01 +2.44e-01 +7.45e-02 +1.19e+00 +1.09e+00 +1.26e+00 +1.15e+00 +1.13e+00 +1.22e+00 +1.07e+00 +1.19e+00 +1.10e+00 +1.09e+00 +1.01e+00 +9.62e-01 +1.10e+00 +4.73e-01 +1.47e-01 +1.18e+00 +1.14e+00 +1.17e+00 +1.20e+00 +1.17e+00 +1.28e+00 +1.19e+00 +1.18e+00 +1.12e+00 +1.04e+00 +9.10e-01 +8.02e-01 +9.06e-01 +2.84e-01 +8.05e-02 +1.14e+00 +1.09e+00 +1.13e+00 +1.18e+00 +1.11e+00 +1.18e+00 +1.35e+00 +1.16e+00 +1.15e+00 +1.16e+00 +1.00e+00 +7.35e-01 +7.88e-01 +3.90e-01 +1.47e-01 +1.14e+00 +1.03e+00 +1.10e+00 +1.12e+00 +1.06e+00 +1.15e+00 +1.16e+00 +1.07e+00 +1.05e+00 +1.12e+00 +9.87e-01 +8.55e-01 +8.93e-01 +3.76e-01 +1.15e-01 +1.02e+00 +1.04e+00 +1.14e+00 +1.09e+00 +1.05e+00 +1.11e+00 +1.08e+00 +1.04e+00 +8.85e-01 +1.00e+00 +9.45e-01 +7.84e-01 +8.14e-01 +2.74e-01 +8.75e-02 +1.04e+00 +1.06e+00 +1.04e+00 +1.12e+00 +1.18e+00 +1.13e+00 +1.06e+00 +1.05e+00 +9.34e-01 +9.47e-01 +9.38e-01 +8.93e-01 +6.67e-01 +1.52e-01 +5.28e-02 +1.04e+00 +1.07e+00 +1.06e+00 +1.13e+00 +1.13e+00 +1.03e+00 +1.15e+00 +1.11e+00 +9.64e-01 +1.01e+00 +9.05e-01 +8.67e-01 +8.37e-01 +2.04e-01 +6.93e-02 +1.00e+00 +1.10e+00 +1.14e+00 +1.07e+00 +1.14e+00 +1.03e+00 +1.08e+00 +9.61e-01 +8.93e-01 +8.70e-01 +8.58e-01 +8.56e-01 +8.00e-01 +2.31e-01 +7.13e-02 +9.12e-01 +9.60e-01 +1.08e+00 +1.07e+00 +1.06e+00 +1.13e+00 +9.68e-01 +8.42e-01 +8.21e-01 +7.51e-01 +7.76e-01 +7.41e-01 +5.22e-01 +2.01e-01 +7.22e-02 +7.80e-01 +8.00e-01 +9.64e-01 +9.33e-01 +9.70e-01 +1.00e+00 +1.03e+00 +9.27e-01 +8.81e-01 +7.47e-01 +6.96e-01 +6.90e-01 +5.22e-01 +1.42e-01 +5.84e-02 +6.66e-01 +7.30e-01 +8.24e-01 +7.89e-01 +8.68e-01 +8.50e-01 +6.87e-01 +9.72e-01 +9.67e-01 +8.19e-01 +6.02e-01 +5.08e-01 +3.32e-01 +9.24e-02 +4.15e-02 +3.42e-01 +2.04e-01 +2.56e-01 +3.06e-01 +2.44e-01 +2.32e-01 +1.97e-01 +2.37e-01 +4.25e-01 +2.80e-01 +1.20e-01 +1.22e-01 +6.52e-02 +2.34e-02 +1.33e-02 +1.30e-01 +6.51e-02 +9.03e-02 +9.81e-02 +7.43e-02 +7.44e-02 +7.50e-02 +7.08e-02 +1.36e-01 +1.08e-01 +5.23e-02 +3.86e-02 +2.05e-02 +1.18e-02 +4.82e-03 +1.10e+00 +1.08e+00 +1.36e+00 +9.59e-01 +1.50e+00 +1.22e+00 +1.06e+00 +1.09e+00 +9.39e-01 +8.29e-01 +5.63e-01 +6.05e-01 +5.41e-01 +1.46e-01 +4.18e-02 +1.38e+00 +9.47e-01 +1.64e+00 +1.82e+00 +1.45e+00 +1.17e+00 +9.32e-01 +9.52e-01 +7.63e-01 +6.75e-01 +6.06e-01 +5.05e-01 +4.40e-01 +1.95e-01 +6.83e-02 +1.18e+00 +1.14e+00 +1.46e+00 +1.11e+00 +8.51e-01 +1.15e+00 +9.29e-01 +9.75e-01 +8.23e-01 +7.12e-01 +8.66e-01 +6.90e-01 +3.69e-01 +2.08e-01 +1.46e-01 +1.36e+00 +1.17e+00 +1.39e+00 +1.53e+00 +1.15e+00 +1.26e+00 +1.34e+00 +1.20e+00 +1.06e+00 +8.13e-01 +6.01e-01 +4.19e-01 +2.92e-01 +1.43e-01 +6.62e-02 +1.31e+00 +9.58e-01 +1.27e+00 +1.56e+00 +1.32e+00 +1.38e+00 +1.36e+00 +1.10e+00 +9.06e-01 +8.42e-01 +7.44e-01 +3.53e-01 +2.51e-01 +1.27e-01 +6.42e-02 +1.05e+00 +8.06e-01 +1.10e+00 +1.14e+00 +7.77e-01 +8.88e-01 +1.08e+00 +7.49e-01 +6.61e-01 +8.78e-01 +7.85e-01 +5.07e-01 +2.81e-01 +1.16e-01 +7.65e-02 +7.49e-01 +9.07e-01 +1.01e+00 +1.02e+00 +8.96e-01 +9.71e-01 +9.06e-01 +7.59e-01 +6.31e-01 +5.64e-01 +4.58e-01 +3.36e-01 +1.97e-01 +1.17e-01 +7.24e-02 +5.31e-01 +7.17e-01 +8.03e-01 +7.87e-01 +9.01e-01 +9.00e-01 +6.18e-01 +6.08e-01 +4.09e-01 +3.65e-01 +4.67e-01 +3.69e-01 +1.95e-01 +1.03e-01 +4.09e-02 +5.66e-01 +6.84e-01 +8.03e-01 +1.10e+00 +8.56e-01 +7.53e-01 +5.80e-01 +7.25e-01 +5.65e-01 +5.23e-01 +4.71e-01 +3.57e-01 +2.67e-01 +9.56e-02 +3.66e-02 +4.28e-01 +7.89e-01 +1.04e+00 +7.98e-01 +6.86e-01 +4.17e-01 +5.80e-01 +6.93e-01 +5.76e-01 +4.61e-01 +4.35e-01 +3.12e-01 +2.15e-01 +1.24e-01 +3.78e-02 +4.61e-01 +5.64e-01 +7.98e-01 +5.21e-01 +7.00e-01 +6.75e-01 +5.39e-01 +5.12e-01 +4.28e-01 +2.95e-01 +3.73e-01 +3.14e-01 +1.91e-01 +1.02e-01 +4.60e-02 +3.92e-01 +3.42e-01 +5.06e-01 +4.71e-01 +4.73e-01 +6.89e-01 +5.67e-01 +3.20e-01 +3.01e-01 +2.61e-01 +2.32e-01 +2.34e-01 +1.79e-01 +4.62e-02 +1.73e-02 +1.91e-01 +2.50e-01 +3.10e-01 +2.40e-01 +2.89e-01 +4.18e-01 +3.43e-01 +3.33e-01 +2.60e-01 +2.88e-01 +2.00e-01 +1.73e-01 +1.35e-01 +4.58e-02 +1.87e-02 +8.30e-02 +9.70e-02 +1.13e-01 +8.94e-02 +1.22e-01 +1.54e-01 +1.00e-01 +1.45e-01 +1.68e-01 +1.41e-01 +7.91e-02 +5.48e-02 +3.66e-02 +1.92e-02 +9.23e-03 +6.77e-02 +3.66e-02 +4.21e-02 +4.05e-02 +4.50e-02 +5.61e-02 +2.78e-02 +4.65e-02 +7.38e-02 +6.93e-02 +3.15e-02 +1.71e-02 +1.50e-02 +7.02e-03 +2.63e-03 +3.78e-01 +3.76e-01 +5.09e-01 +3.31e-01 +5.46e-01 +4.00e-01 +3.73e-01 +3.85e-01 +3.61e-01 +2.87e-01 +1.88e-01 +1.85e-01 +1.80e-01 +1.07e-01 +3.77e-02 +5.65e-01 +2.57e-01 +5.55e-01 +7.39e-01 +6.13e-01 +4.33e-01 +3.29e-01 +2.97e-01 +2.89e-01 +2.50e-01 +1.89e-01 +1.46e-01 +1.32e-01 +8.81e-02 +4.17e-02 +4.36e-01 +3.41e-01 +5.13e-01 +4.96e-01 +2.34e-01 +4.00e-01 +3.27e-01 +2.87e-01 +2.94e-01 +2.08e-01 +3.02e-01 +2.63e-01 +1.41e-01 +5.88e-02 +6.26e-02 +4.47e-01 +3.47e-01 +5.27e-01 +6.11e-01 +3.91e-01 +4.22e-01 +4.77e-01 +4.54e-01 +4.31e-01 +3.19e-01 +2.13e-01 +1.47e-01 +9.76e-02 +5.82e-02 +2.92e-02 +5.35e-01 +3.74e-01 +4.80e-01 +5.78e-01 +5.02e-01 +4.78e-01 +5.06e-01 +3.61e-01 +3.58e-01 +2.46e-01 +2.55e-01 +1.07e-01 +6.95e-02 +4.27e-02 +2.71e-02 +3.15e-01 +2.73e-01 +3.47e-01 +3.78e-01 +2.88e-01 +2.50e-01 +3.39e-01 +2.40e-01 +2.15e-01 +2.65e-01 +2.87e-01 +2.16e-01 +1.00e-01 +4.10e-02 +2.09e-02 +3.10e-01 +2.99e-01 +3.67e-01 +3.96e-01 +2.30e-01 +2.86e-01 +3.00e-01 +2.63e-01 +2.50e-01 +1.99e-01 +1.56e-01 +1.31e-01 +7.20e-02 +3.22e-02 +3.48e-02 +1.47e-01 +2.69e-01 +2.47e-01 +2.40e-01 +2.82e-01 +3.03e-01 +1.85e-01 +1.94e-01 +1.29e-01 +1.02e-01 +1.25e-01 +1.15e-01 +5.95e-02 +5.42e-02 +4.17e-02 +1.81e-01 +2.00e-01 +2.60e-01 +3.31e-01 +3.21e-01 +2.95e-01 +1.85e-01 +2.44e-01 +2.00e-01 +1.66e-01 +1.43e-01 +1.23e-01 +1.02e-01 +4.36e-02 +1.72e-02 +1.08e-01 +2.40e-01 +3.14e-01 +3.12e-01 +2.21e-01 +1.20e-01 +1.86e-01 +2.21e-01 +2.13e-01 +1.40e-01 +1.31e-01 +1.05e-01 +5.58e-02 +6.38e-02 +3.45e-02 +1.48e-01 +2.44e-01 +2.92e-01 +1.42e-01 +2.29e-01 +1.89e-01 +1.21e-01 +1.73e-01 +1.54e-01 +1.09e-01 +1.16e-01 +8.49e-02 +6.30e-02 +4.98e-02 +4.02e-02 +1.01e-01 +1.10e-01 +1.55e-01 +1.40e-01 +1.46e-01 +2.37e-01 +1.93e-01 +1.34e-01 +9.47e-02 +8.48e-02 +7.21e-02 +7.09e-02 +7.53e-02 +2.10e-02 +7.74e-03 +8.60e-02 +8.49e-02 +1.09e-01 +1.25e-01 +9.19e-02 +1.59e-01 +1.27e-01 +1.01e-01 +6.87e-02 +9.44e-02 +5.12e-02 +5.73e-02 +5.81e-02 +1.92e-02 +6.10e-03 +2.72e-02 +4.77e-02 +4.74e-02 +3.34e-02 +5.41e-02 +7.93e-02 +6.70e-02 +7.67e-02 +9.31e-02 +5.17e-02 +5.34e-02 +3.25e-02 +1.99e-02 +1.19e-02 +1.14e-02 +2.23e-02 +2.53e-02 +2.61e-02 +2.28e-02 +2.86e-02 +5.00e-02 +3.04e-02 +2.98e-02 +5.98e-02 +4.02e-02 +2.97e-02 +1.80e-02 +6.73e-03 +4.41e-03 +7.35e-03 \ No newline at end of file diff --git a/tests/regression_tests/weightwindows_fw_cadis_mesh/test.py b/tests/regression_tests/weightwindows_fw_cadis_mesh/test.py new file mode 100644 index 000000000..680e9dc6d --- /dev/null +++ b/tests/regression_tests/weightwindows_fw_cadis_mesh/test.py @@ -0,0 +1,49 @@ +import os + +import openmc +from openmc.utility_funcs import change_directory +from openmc.examples import random_ray_three_region_cube +import pytest + +from tests.testing_harness import WeightWindowPyAPITestHarness + + +class MGXSTestHarness(WeightWindowPyAPITestHarness): + def _cleanup(self): + super()._cleanup() + f = 'mgxs.h5' + if os.path.exists(f): + os.remove(f) + + +@pytest.mark.parametrize("shape", ["flat", "linear"]) +def test_weight_windows_fw_cadis_mesh(shape): + with change_directory(shape): + openmc.reset_auto_ids() + + model = random_ray_three_region_cube() + + # The base model has a resolution of 12, so we overlay + # something else for FW-CADIS + n = 15 + width = 30.0 + ww_mesh = openmc.RegularMesh() + ww_mesh.dimension = (n, n, n) + ww_mesh.lower_left = (0.0, 0.0, 0.0) + ww_mesh.upper_right = (width, width, width) + + wwg = openmc.WeightWindowGenerator( + method="fw_cadis", mesh=ww_mesh, max_realizations=model.settings.batches) + model.settings.weight_window_generators = wwg + + root = model.geometry.root_universe + model.settings.random_ray['source_region_meshes'] = [(ww_mesh, [root])] + + model.settings.particles = 750 + model.settings.batches = 30 + model.settings.inactive = 20 + + model.settings.random_ray['source_shape'] = shape + + harness = MGXSTestHarness('statepoint.30.h5', model) + harness.main()