diff --git a/CMakeLists.txt b/CMakeLists.txt index 098de3de2..3ecdc1e9b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -318,7 +318,6 @@ set(LIBOPENMC_FORTRAN_SRC src/physics_mg.F90 src/plot.F90 src/plot_header.F90 - src/ppmlib.F90 src/product_header.F90 src/progress_header.F90 src/random_lcg.F90 diff --git a/docs/source/io_formats/particle_restart.rst b/docs/source/io_formats/particle_restart.rst index 3dee8c47d..6ebf7e7ba 100644 --- a/docs/source/io_formats/particle_restart.rst +++ b/docs/source/io_formats/particle_restart.rst @@ -4,55 +4,31 @@ Particle Restart File Format ============================ -The current revision of the particle restart file format is 1. +The current version of the particle restart file format is 2.0. -**/filetype** (*char[]*) +**/** - String indicating the type of file. +:Attributes: - **filetype** (*char[]*) -- String indicating the type of file. + - **version** (*int[2]*) -- Major and minor version of the particle + restart file format. + - **openmc_version** (*int[3]*) -- Major, minor, and release + version number for OpenMC. + - **git_sha1** (*char[40]*) -- Git commit SHA-1 hash. -**/revision** (*int*) - - Revision of the particle restart file format. Any time a change is made in - the format, this integer is incremented. - -**/current_batch** (*int*) - - The number of batches already simulated. - -**/gen_per_batch** (*int*) - - Number of generations per batch. - -**/current_gen** (*int*) - - The number of generations already simulated. - -**/n_particles** (*int8_t*) - - Number of particles used per generation. - -**/run_mode** (*int*) - - Run mode used. A value of 1 indicates a fixed-source run and a value of 2 - indicates an eigenvalue run. - -**/id** (*int8_t*) - - Unique identifier of the particle. - -**/weight** (*double*) - - Weight of the particle. - -**/energy** (*double*) - - Energy of the particle in eV for continuous-energy mode, or the energy - group of the particle for multi-group mode. - -**/xyz** (*double[3]*) - - Position of the particle. - -**/uvw** (*double[3]*) - - Direction of the particle. +:Datasets: - **current_batch** (*int*) -- The number of batches already + simulated. + - **generations_per_batch** (*int*) -- Number of generations per + batch. + - **current_generation** (*int*) -- The number of generations already + simulated. + - **n_particles** (*int8_t*) -- Number of particles used per + generation. + - **run_mode** (*char[]*) -- Run mode used, either 'fixed source', + 'eigenvalue', or 'particle restart'. + - **id** (*int8_t*) -- Unique identifier of the particle. + - **weight** (*double*) -- Weight of the particle. + - **energy** (*double*) -- Energy of the particle in eV for + continuous-energy mode, or the energy group of the particle for + multi-group mode. + - **xyz** (*double[3]*) -- Position of the particle. + - **uvw** (*double[3]*) -- Direction of the particle. diff --git a/docs/source/io_formats/statepoint.rst b/docs/source/io_formats/statepoint.rst index e334f2bf1..cbd916d23 100644 --- a/docs/source/io_formats/statepoint.rst +++ b/docs/source/io_formats/statepoint.rst @@ -4,354 +4,171 @@ State Point File Format ======================= -The current revision of the statepoint file format is 15. - -**/filetype** (*char[]*) - - String indicating the type of file. - -**/revision** (*int*) - - Revision of the state point file format. Any time a change is made in the - format, this integer is incremented. - -**/version_major** (*int*) - - Major version number for OpenMC - -**/version_minor** (*int*) - - Minor version number for OpenMC - -**/version_release** (*int*) - - Release version number for OpenMC - -**/date_and_time** (*char[]*) - - Date and time the state point was written. - -**/path** (*char[]*) - - Absolute path to directory containing input files. - -**/seed** (*int8_t*) - - Pseudo-random number generator seed. - -**/run_CE** (*int*) - - Flag to denote continuous-energy or multi-group mode. A value of 1 - indicates a continuous-energy run while a value of 0 indicates a - multi-group run. - -**/run_mode** (*char[]*) - - Run mode used. A value of 1 indicates a fixed-source run and a value of 2 - indicates an eigenvalue run. - -**/n_particles** (*int8_t*) - - Number of particles used per generation. - -**/n_batches** (*int*) - - Number of batches to simulate. - -**/current_batch** (*int*) - - The number of batches already simulated. - -if run_mode == 'k-eigenvalue': - - **/n_inactive** (*int*) - - Number of inactive batches. - - **/gen_per_batch** (*int*) - - Number of generations per batch. - - **/k_generation** (*double[]*) - - k-effective for each generation simulated. - - **/entropy** (*double[]*) - - Shannon entropy for each generation simulated - - **/k_col_abs** (*double*) - - Sum of product of collision/absorption estimates of k-effective - - **/k_col_tra** (*double*) - - Sum of product of collision/track-length estimates of k-effective - - **/k_abs_tra** (*double*) - - Sum of product of absorption/track-length estimates of k-effective - - **/k_combined** (*double[2]*) - - Mean and standard deviation of a combined estimate of k-effective - - **/cmfd_on** (*int*) - - Flag indicating whether CMFD is on (1) or off (0). - - if (cmfd_on) - - **/cmfd/indices** (*int[4]*) - - Indices for cmfd mesh (i,j,k,g) - - **/cmfd/k_cmfd** (*double[]*) - - CMFD eigenvalues - - **/cmfd/cmfd_src** (*double[][][][]*) - - CMFD fission source - - **/cmfd/cmfd_entropy** (*double[]*) - - CMFD estimate of Shannon entropy - - **/cmfd/cmfd_balance** (*double[]*) - - RMS of the residual neutron balance equation on CMFD mesh - - **/cmfd/cmfd_dominance** (*double[]*) - - CMFD estimate of dominance ratio - - **/cmfd/cmfd_srccmp** (*double[]*) - - RMS comparison of difference between OpenMC and CMFD fission source - -**/tallies/n_meshes** (*int*) - - Number of meshes in tallies.xml file - -**/tally/meshes/ids** (*int[]*) - - Internal unique ID of each mesh. - -**/tally/meshes/keys** (*int[]*) - - User-identified unique ID of each mesh. - -**/tallies/meshes/mesh /type** (*char[]*) - - Type of mesh. - -**/tallies/meshes/mesh /dimension** (*int*) - - Number of mesh cells in each dimension. - -**/tallies/meshes/mesh /lower_left** (*double[]*) - - Coordinates of lower-left corner of mesh. - -**/tallies/meshes/mesh /upper_right** (*double[]*) - - Coordinates of upper-right corner of mesh. - -**/tallies/meshes/mesh /width** (*double[]*) - - Width of each mesh cell in each dimension. - -**/tallies/derivatives/derivative /independent variable** (*char[]*) - - Independent variable of tally derivative - -**/tallies/derivatives/derivative /material** (*int*) - - ID of the perturbed material - -**/tallies/derivatives/derivative /nuclide** (*char[]*) - - Alias of the perturbed nuclide - -**/tallies/n_tallies** (*int*) - - Number of user-defined tallies. - -**/tallies/ids** (*int[]*) - - Internal unique ID of each tally. - -**/tallies/keys** (*int[]*) - - User-identified unique ID of each tally. - -**/tallies/tally /estimator** (*char[]*) - - Type of tally estimator, either 'analog', 'tracklength', or 'collision'. - -**/tallies/tally /n_realizations** (*int*) - - Number of realizations. - -**/tallies/tally /n_filters** (*int*) - - Number of filters used. - -**/tallies/tally /filter /type** (*char[]*) - - Type of the j-th filter. Can be 'universe', 'material', 'cell', 'cellborn', - 'surface', 'mesh', 'energy', 'energyout', 'distribcell', 'mu', 'polar', - 'azimuthal', 'delayedgroup', or 'energyfunction'. - -**/tallies/tally /filter /n_bins** (*int*) - - Number of bins for the j-th filter. Not present for 'energyfunction' - filters. - -**/tallies/tally /filter /bins** (*int[]* or *double[]*) - - Value for each filter bin of this type. Not present for 'energyfunction' - filters. - -**/tallies/tally /filter /energy** (*double[]*) - - Energy grid points for energyfunction interpolation. Only used for - 'energyfunction' filters. - -**/tallies/tally /filter /y** (*double[]*) - - Interpolant values for energyfunction interpolation. Only used for - 'energyfunction' filters. - -**/tallies/tally /nuclides** (*char[][]*) - - Array of nuclides to tally. Note that if no nuclide is specified in the user - input, a single 'total' nuclide appears here. - -**/tallies/tally /derivative** (*int*) - - ID of the derivative applied to the tally. - -**/tallies/tally /n_score_bins** (*int*) - - Number of scoring bins for a single nuclide. In general, this can be greater - than the number of user-specified scores since each score might have - multiple scoring bins, e.g., scatter-PN. - -**/tallies/tally /score_bins** (*char[][]*) - - Values of specified scores. - -**/tallies/tally /n_user_scores** (*int*) - - Number of scores without accounting for those added by expansions, - e.g. scatter-PN. - -**/tallies/tally /moment_orders** (*char[][]*) - - Tallying moment orders for Legendre and spherical harmonic tally expansions - (*e.g.*, 'P2', 'Y1,2', etc.). - -**/tallies/tally /results** (*double[][][2]*) - - Accumulated sum and sum-of-squares for each bin of the i-th tally. The first - dimension represents combinations of filter bins, the second dimensions - represents scoring bins, and the third dimension has two entries for the sum - and the sum-of-squares. - -**/source_present** (*int*) - - Flag indicated if source bank is present in the file - -**/n_realizations** (*int*) - - Number of realizations for global tallies. - -**/n_global_tallies** (*int*) - - Number of global tally scores. - -**/global_tallies** (Compound type) - - Accumulated sum and sum-of-squares for each global tally. The compound type - has fields named ``sum`` and ``sum_sq``. - -**/tallies_present** (*int*) - - Flag indicated if tallies are present in the file. - -if (run_mode == 'k-eigenvalue' and source_present > 0) - - **/source_bank** (Compound type) - - Source bank information for each particle. The compound type has fields - ``wgt``, ``xyz``, ``uvw``, ``E``, ``g``, and ``delayed_group``, which - represent the weight, position, direction, energy, energy group, and - delayed_group of the source particle, respectively. - -**/runtime/total initialization** (*double*) - - Time (in seconds on the master process) spent reading inputs, allocating - arrays, etc. - -**/runtime/reading cross sections** (*double*) - - Time (in seconds on the master process) spent loading cross section - libraries (this is a subset of initialization). - -**/runtime/simulation** (*double*) - - Time (in seconds on the master process) spent between initialization and - finalization. - -**/runtime/transport** (*double*) - - Time (in seconds on the master process) spent transporting particles. - -**/runtime/inactive batches** (*double*) - - Time (in seconds on the master process) spent in the inactive batches - (including non-transport activities like communcating sites). - -**/runtime/active batches** (*double*) - - Time (in seconds on the master process) spent in the active batches - (including non-transport activities like communicating sites). - -**/runtime/synchronizing fission bank** (*double*) - - Time (in seconds on the master process) spent sampling source particles - from fission sites and communicating them to other processes for load - balancing. - -**/runtime/sampling source sites** (*double*) - - Time (in seconds on the master process) spent sampling source particles - from fission sites. - -**/runtime/SEND-RECV source sites** (*double*) - - Time (in seconds on the master process) spent communicating source sites - between processes for load balancing. - -**/runtime/accumulating tallies** (*double*) - - Time (in seconds on the master process) spent communicating tally results - and evaluating their statistics. - -**/runtime/CMFD** (*double*) - - Time (in seconds on the master process) spent evaluating CMFD. - -**/runtime/CMFD building matrices** (*double*) - - Time (in seconds on the master process) spent buliding CMFD matrices. - -**/runtime/CMFD solving matrices** (*double*) - - Time (in seconds on the master process) spent solving CMFD matrices. - -**/runtime/total** (*double*) - - Total time spent (in seconds on the master process) in the program. +The current version of the statepoint file format is 16.0. + +**/** + +:Attributes: - **filetype** (*char[]*) -- String indicating the type of file. + - **version** (*int[2]*) -- Major and minor version of the + statepoint file format. + - **openmc_version** (*int[3]*) -- Major, minor, and release + version number for OpenMC. + - **git_sha1** (*char[40]*) -- Git commit SHA-1 hash. + - **date_and_time** (*char[]*) -- Date and time the summary was + written. + - **path** (*char[]*) -- Path to directory containing input files. + - **cmfd_on** (*int*) -- Flag indicating whether CMFD is on (1) or + off (0). + - **tallies_present** (*int*) -- Flag indicating whether tallies + are present (1) or not (0). + - **source_present** (*int*) -- Flag indicating whether the source + bank is present (1) or not (0). + +:Datasets: - **seed** (*int8_t*) -- Pseudo-random number generator seed. + - **energy_mode** (*char[]*) -- Energy mode of the run, either + 'continuous-energy' or 'multi-group'. + - **run_mode** (*char[]*) -- Run mode used, either 'eigenvalue' or + 'fixed source'. + - **n_particles** (*int8_t*) -- Number of particles used per generation. + - **n_batches** (*int*) -- Number of batches to simulate. + - **current_batch** (*int*) -- The number of batches already simulated. + - **n_inactive** (*int*) -- Number of inactive batches. Only present + when `run_mode` is 'eigenvalue'. + - **generations_per_batch** (*int*) -- Number of generations per + batch. Only present when `run_mode` is 'eigenvalue'. + - **k_generation** (*double[]*) -- k-effective for each generation + simulated. + - **entropy** (*double[]*) -- Shannon entropy for each generation + simulated. + - **k_col_abs** (*double*) -- Sum of product of collision/absorption + estimates of k-effective. + - **k_col_tra** (*double*) -- Sum of product of + collision/track-length estimates of k-effective. + - **k_abs_tra** (*double*) -- Sum of product of + absorption/track-length estimates of k-effective. + - **k_combined** (*double[2]*) -- Mean and standard deviation of a + combined estimate of k-effective. + - **n_realizations** (*int*) -- Number of realizations for global + tallies. + - **global_tallies** (*double[][2]*) -- Accumulated sum and + sum-of-squares for each global tally. + - **source_bank** (Compound type) -- Source bank information for each + particle. The compound type has fields ``wgt``, ``xyz``, ``uvw``, + ``E``, ``g``, and ``delayed_group``, which represent the weight, + position, direction, energy, energy group, and delayed_group of the + source particle, respectively. Only present when `run_mode` is + 'eigenvalue'. + +**/cmfd/** + +:Datasets: - **indices** (*int[4]*) -- Indices for cmfd mesh (i,j,k,g) + - **k_cmfd** (*double[]*) -- CMFD eigenvalues + - **cmfd_src** (*double[][][][]*) -- CMFD fission source + - **cmfd_entropy** (*double[]*) -- CMFD estimate of Shannon entropy + - **cmfd_balance** (*double[]*) -- RMS of the residual neutron + balance equation on CMFD mesh + - **cmfd_dominance** (*double[]*) -- CMFD estimate of dominance ratio + - **cmfd_srccmp** (*double[]*) -- RMS comparison of difference + between OpenMC and CMFD fission source + +**/tallies/** + +:Attributes: - **n_tallies** (*int*) -- Number of user-defined tallies. + - **ids** (*int[]*) -- User-defined unique ID of each tally. + +**/tallies/meshes/** + +:Attributes: - **n_meshes** (*int*) -- Number of meshes in the problem. + - **ids** (*int[]*) -- User-defined unique ID of each mesh. + +**/tallies/meshes/mesh /** + +:Datasets: - **type** (*char[]*) -- Type of mesh. + - **dimension** (*int*) -- Number of mesh cells in each dimension. + - **lower_left** (*double[]*) -- Coordinates of lower-left corner of + mesh. + - **upper_right** (*double[]*) -- Coordinates of upper-right corner + of mesh. + - **width** (*double[]*) -- Width of each mesh cell in each + dimension. + +**/tallies/derivatives/derivative /** + +:Datasets: - **independent variable** (*char[]*) -- Independent variable of + tally derivative. + - **material** (*int*) -- ID of the perturbed material. + - **nuclide** (*char[]*) -- Alias of the perturbed nuclide. + - **estimator** (*char[]*) -- Type of tally estimator, either + 'analog', 'tracklength', or 'collision'. + +**/tallies/tally /** + +:Datasets: - **n_realizations** (*int*) -- Number of realizations. + - **n_filters** (*int*) -- Number of filters used. + - **nuclides** (*char[][]*) -- Array of nuclides to tally. Note that + if no nuclide is specified in the user input, a single 'total' + nuclide appears here. + - **derivative** (*int*) -- ID of the derivative applied to the + tally. + - **n_score_bins** (*int*) -- Number of scoring bins for a single + nuclide. In general, this can be greater than the number of + user-specified scores since each score might have multiple scoring + bins, e.g., scatter-PN. + - **score_bins** (*char[][]*) -- Values of specified scores. + - **n_user_scores** (*int*) -- Number of scores without accounting + for those added by expansions, e.g. scatter-PN. + - **moment_orders** (*char[][]*) -- Tallying moment orders for + Legendre and spherical harmonic tally expansions (e.g., 'P2', + 'Y1,2', etc.). + - **results** (*double[][][2]*) -- Accumulated sum and sum-of-squares + for each bin of the i-th tally. The first dimension represents + combinations of filter bins, the second dimensions represents + scoring bins, and the third dimension has two entries for the sum + and the sum-of-squares. + +**/tallies/tally /filter /** + +:Datasets: - **type** (*char[]*) -- Type of the j-th filter. Can be 'universe', + 'material', 'cell', 'cellborn', 'surface', 'mesh', 'energy', + 'energyout', 'distribcell', 'mu', 'polar', 'azimuthal', + 'delayedgroup', or 'energyfunction'. + - **n_bins** (*int*) -- Number of bins for the j-th filter. Not + present for 'energyfunction' filters. + - **bins** (*int[]* or *double[]*) -- Value for each filter bin of + this type. Not present for 'energyfunction' filters. + - **energy** (*double[]*) -- Energy grid points for energyfunction + interpolation. Only used for 'energyfunction' filters. + - **y** (*double[]*) -- Interpolant values for energyfunction + interpolation. Only used for 'energyfunction' filters. + +**/runtime/** + +All values are given in seconds and are measured on the master process. + +:Datasets: - **total initialization** (*double*) -- Time spent reading inputs, + allocating arrays, etc. + - **reading cross sections** (*double*) -- Time spent loading cross + section libraries (this is a subset of initialization). + - **simulation** (*double*) -- Time spent between initialization and + finalization. + - **transport** (*double*) -- Time spent transporting particles. + - **inactive batches** (*double*) -- Time spent in the inactive + batches (including non-transport activities like communcating + sites). + - **active batches** (*double*) -- Time spent in the active batches + (including non-transport activities like communicating sites). + - **synchronizing fission bank** (*double*) -- Time spent sampling + source particles from fission sites and communicating them to other + processes for load balancing. + - **sampling source sites** (*double*) -- Time spent sampling source + particles from fission sites. + - **SEND-RECV source sites** (*double*) -- Time spent communicating + source sites between processes for load balancing. + - **accumulating tallies** (*double*) -- Time spent communicating + tally results and evaluating their statistics. + - **CMFD** (*double*) -- Time spent evaluating CMFD. + - **CMFD building matrices** (*double*) -- Time spent buliding CMFD + matrices. + - **CMFD solving matrices** (*double*) -- Time spent solving CMFD + matrices. + - **total** (*double*) -- Total time spent in the program. diff --git a/docs/source/io_formats/summary.rst b/docs/source/io_formats/summary.rst index 435cb45c8..b047ac225 100644 --- a/docs/source/io_formats/summary.rst +++ b/docs/source/io_formats/summary.rst @@ -4,255 +4,131 @@ Summary File Format =================== -The current revision of the summary file format is 4. - -**/filetype** (*char[]*) - - String indicating the type of file. - -**/revision** (*int*) - - Revision of the summary file format. Any time a change is made in the - format, this integer is incremented. - -**/version_major** (*int*) - - Major version number for OpenMC - -**/version_minor** (*int*) - - Minor version number for OpenMC - -**/version_release** (*int*) - - Release version number for OpenMC - -**/date_and_time** (*char[]*) - - Date and time the summary was written. - -**/n_procs** (*int*) - - Number of MPI processes used. - -**/n_particles** (*int8_t*) - - Number of particles used per generation. - -**/n_batches** (*int*) - - Number of batches to simulate. - -**/n_inactive** (*int*) - - Number of inactive batches. Only present if /run_mode is set to - 'k-eigenvalue'. - -**/n_active** (*int*) - - Number of active batches. Only present if /run_mode is set to - 'k-eigenvalue'. - -**/gen_per_batch** (*int*) - - Number of generations per batch. Only present if /run_mode is set to - 'k-eigenvalue'. - -**/geometry/n_cells** (*int*) - - Number of cells in the problem. - -**/geometry/n_surfaces** (*int*) - - Number of surfaces in the problem. - -**/geometry/n_universes** (*int*) - - Number of unique universes in the problem. - -**/geometry/n_lattices** (*int*) - - Number of lattices in the problem. - -**/geometry/cells/cell /index** (*int*) - - Index in cells array used internally in OpenMC. - -**/geometry/cells/cell /name** (*char[]*) - - Name of the cell. - -**/geometry/cells/cell /universe** (*int*) - - Universe assigned to the cell. If none is specified, the default - universe (0) is assigned. - -**/geometry/cells/cell /fill_type** (*char[]*) - - Type of fill for the cell. Can be 'normal', 'universe', or 'lattice'. - -**/geometry/cells/cell /material** (*int* or *int[]*) - - Unique ID of the material(s) assigned to the cell. This dataset is present - only if fill_type is set to 'normal'. The value '-1' signifies void - material. The data is an array if the cell uses distributed materials, - otherwise it is a scalar. - -**/geometry/cells/cell /temperature** (*double[]*) - - Temperature of the cell in Kelvin. - -**/geometry/cells/cell /offset** (*int[]*) - - Offsets used for distribcell tally filter. This dataset is present only if - fill_type is set to 'universe'. - -**/geometry/cells/cell /translation** (*double[3]*) - - Translation applied to the fill universe. This dataset is present only if - fill_type is set to 'universe'. - -**/geometry/cells/cell /rotation** (*double[3]*) - - Angles in degrees about the x-, y-, and z-axes for which the fill universe - should be rotated. This dataset is present only if fill_type is set to - 'universe'. - -**/geometry/cells/cell /lattice** (*int*) - - Unique ID of the lattice which fills the cell. Only present if fill_type is - set to 'lattice'. - -**/geometry/cells/cell /region** (*char[]*) - - Region specification for the cell. - -**/geometry/cells/cell /distribcell_index** (*int*) - - Index of this cell in distribcell arrays. Only present if this cell is - listed in a distribcell filter or if it uses distributed materials. - -**/geometry/cells/cell /paths** (*char[][]*) - - The paths traversed through the CSG tree to reach each distribcell - instance. This consists of the integer IDs for each universe, cell and - lattice delimited by '->'. Each lattice cell is specified by its (x,y) or - (x,y,z) indices. Only present if this cell is listed in a distribcell filter - or if it uses distributed materials. - -**/geometry/surfaces/surface /index** (*int*) - - Index in surfaces array used internally in OpenMC. - -**/geometry/surfaces/surface /name** (*char[]*) - - Name of the surface. - -**/geometry/surfaces/surface /type** (*char[]*) - - Type of the surface. Can be 'x-plane', 'y-plane', 'z-plane', 'plane', - 'x-cylinder', 'y-cylinder', 'sphere', 'x-cone', 'y-cone', 'z-cone', or - 'quadric'. - -**/geometry/surfaces/surface /coefficients** (*double[]*) - - Array of coefficients that define the surface. See :ref:`surface_element` - for what coefficients are defined for each surface type. - -**/geometry/surfaces/surface /boundary_condition** (*char[]*) - - Boundary condition applied to the surface. Can be 'transmission', 'vacuum', - 'reflective', or 'periodic'. - -**/geometry/universes/universe /index** (*int*) - - Index in the universes array used internally in OpenMC. - -**/geometry/universes/universe /cells** (*int[]*) - - Array of unique IDs of cells that appear in the universe. - -**/geometry/lattices/lattice /index** (*int*) - - Index in the lattices array used internally in OpenMC. - -**/geometry/lattices/lattice /name** (*char[]*) - - Name of the lattice. - -**/geometry/lattices/lattice /type** (*char[]*) - - Type of the lattice, either 'rectangular' or 'hexagonal'. - -**/geometry/lattices/lattice /pitch** (*double[]*) - - Pitch of the lattice. - -**/geometry/lattices/lattice /outer** (*int*) - - Outer universe assigned to lattice cells outside the defined range. - -**/geometry/lattices/lattice /offsets** (*int[]*) - - Offsets used for distribcell tally filter. - -**/geometry/lattices/lattice /universes** (*int[]*) - - Three-dimensional array of universes assigned to each cell of the lattice. - -**/geometry/lattices/lattice /dimension** (*int[]*) - - The number of lattice cells in each direction. This dataset is present only - when the 'type' dataset is set to 'rectangular'. - -**/geometry/lattices/lattice /lower_left** (*double[]*) - - The coordinates of the lower-left corner of the lattice. This dataset is - present only when the 'type' dataset is set to 'rectangular'. - -**/geometry/lattices/lattice /n_rings** (*int*) - - Number of radial ring positions in the xy-plane. This dataset is present - only when the 'type' dataset is set to 'hexagonal'. - -**/geometry/lattices/lattice /n_axial** (*int*) - - Number of lattice positions along the z-axis. This dataset is present only - when the 'type' dataset is set to 'hexagonal'. - -**/geometry/lattices/lattice /center** (*double[]*) - - Coordinates of the center of the lattice. This dataset is present only when - the 'type' dataset is set to 'hexagonal'. - -**/n_materials** (*int*) - - Number of materials in the problem. - -**/materials/material /index** (*int*) - - Index in materials array used internally in OpenMC. - -**/materials/material /name** (*char[]*) - - Name of the material. - -**/materials/material /atom_density** (*double[]*) - - Total atom density of the material in atom/b-cm. - -**/materials/material /nuclides** (*char[][]*) - - Array of nuclides present in the material, e.g., 'U-235.71c'. - -**/materials/material /nuclide_densities** (*double[]*) - - Atom density of each nuclide. - -**/materials/material /sab_names** (*char[][]*) - - Names of S(:math:`\alpha`,:math:`\beta`) tables assigned to the material. - -**/tallies/tally /name** (*char[]*) - - Name of the tally. +The current version of the summary file format is 5.0. + +**/** + +:Attributes: - **filetype** (*char[]*) -- String indicating the type of file. + - **version** (*int[2]*) -- Major and minor version of the summary + file format. + - **openmc_version** (*int[3]*) -- Major, minor, and release + version number for OpenMC. + - **git_sha1** (*char[40]*) -- Git commit SHA-1 hash. + - **date_and_time** (*char[]*) -- Date and time the summary was + written. + +**/geometry/** + +:Attributes: - **n_cells** (*int*) -- Number of cells in the problem. + - **n_surfaces** (*int*) -- Number of surfaces in the problem. + - **n_universes** (*int*) -- Number of unique universes in the + problem. + - **n_lattices** (*int*) -- Number of lattices in the problem. + +**/geometry/cells/cell /** + +:Datasets: - **name** (*char[]*) -- User-defined name of the cell. + - **universe** (*int*) -- Universe assigned to the cell. If none is + specified, the default universe (0) is assigned. + - **fill_type** (*char[]*) -- Type of fill for the cell. Can be + 'material', 'universe', or 'lattice'. + - **material** (*int* or *int[]*) -- Unique ID of the material(s) + assigned to the cell. This dataset is present only if fill_type is + set to 'normal'. The value '-1' signifies void material. The data + is an array if the cell uses distributed materials, otherwise it is + a scalar. + - **temperature** (*double[]*) -- Temperature of the cell in Kelvin. + - **offset** (*int[]*) -- Offsets used for distribcell tally + filter. This dataset is present only if fill_type is set to + 'universe'. + - **translation** (*double[3]*) -- Translation applied to the fill + universe. This dataset is present only if fill_type is set to + 'universe'. + - **rotation** (*double[3]*) -- Angles in degrees about the x-, y-, + and z-axes for which the fill universe should be rotated. This + dataset is present only if fill_type is set to 'universe'. + - **lattice** (*int*) -- Unique ID of the lattice which fills the + cell. Only present if fill_type is set to 'lattice'. + - **region** (*char[]*) -- Region specification for the cell. + - **distribcell_index** (*int*) -- Index of this cell in distribcell + arrays. Only present if this cell is listed in a distribcell filter + or if it uses distributed materials. + - **paths** (*char[][]*) -- The paths traversed through the CSG tree + to reach each distribcell instance. This consists of the integer + IDs for each universe, cell and lattice delimited by '->'. Each + lattice cell is specified by its (x,y) or (x,y,z) indices. Only + present if this cell is listed in a distribcell filter or if it + uses distributed materials. + +**/geometry/surfaces/surface /** + +:Datasets: - **name** (*char[]*) -- Name of the surface. + - **type** (*char[]*) -- Type of the surface. Can be 'x-plane', + 'y-plane', 'z-plane', 'plane', 'x-cylinder', 'y-cylinder', + 'z-cylinder', 'sphere', 'x-cone', 'y-cone', 'z-cone', or 'quadric'. + - **coefficients** (*double[]*) -- Array of coefficients that define + the surface. See :ref:`surface_element` for what coefficients are + defined for each surface type. + - **boundary_condition** (*char[]*) -- Boundary condition applied to + the surface. Can be 'transmission', 'vacuum', 'reflective', or + 'periodic'. + +**/geometry/universes/universe /** + +:Datasets: + - **cells** (*int[]*) -- Array of unique IDs of cells that appear in + the universe. + +**/geometry/lattices/lattice /** + +:Datasets: - **name** (*char[]*) -- Name of the lattice. + - **type** (*char[]*) -- Type of the lattice, either 'rectangular' or + 'hexagonal'. + - **pitch** (*double[]*) -- Pitch of the lattice in centimeters. + - **outer** (*int*) -- Outer universe assigned to lattice cells + outside the defined range. + - **offsets** (*int[]*) -- Offsets used for distribcell tally filter. + - **universes** (*int[][][]*) -- Three-dimensional array of universes + assigned to each cell of the lattice. + - **dimension** (*int[]*) -- The number of lattice cells in each + direction. This dataset is present only when the 'type' dataset is + set to 'rectangular'. + - **lower_left** (*double[]*) -- The coordinates of the lower-left + corner of the lattice. This dataset is present only when the 'type' + dataset is set to 'rectangular'. + - **n_rings** (*int*) -- Number of radial ring positions in the + xy-plane. This dataset is present only when the 'type' dataset is + set to 'hexagonal'. + - **n_axial** (*int*) -- Number of lattice positions along the + z-axis. This dataset is present only when the 'type' dataset is set + to 'hexagonal'. + - **center** (*double[]*) -- Coordinates of the center of the + lattice. This dataset is present only when the 'type' dataset is + set to 'hexagonal'. + +**/materials/** + +:Attributes: - **n_materials** (*int*) -- Number of materials in the problem. + + +**/materials/material /** + +:Datasets: - **name** (*char[]*) -- Name of the material. + - **atom_density** (*double[]*) -- Total atom density of the material + in atom/b-cm. + - **nuclides** (*char[][]*) -- Array of nuclides present in the + material, e.g., 'U235'. + - **nuclide_densities** (*double[]*) -- Atom density of each nuclide. + - **sab_names** (*char[][]*) -- Names of + S(:math:`\alpha,\beta`) tables assigned to the material. + +**/nuclides/** + +:Attributes: - **n_nuclides** (*int*) -- Number of nuclides in the problem. + +:Datasets: - **names** (*char[][]*) -- Names of nuclides. + - **awrs** (*float[]*) -- Atomic weight ratio of each nuclide. + +**/tallies/tally /** + +:Datasets: - **name** (*char[]*) -- Name of the tally. diff --git a/docs/source/io_formats/track.rst b/docs/source/io_formats/track.rst index e5cb5d46e..c617cd73e 100644 --- a/docs/source/io_formats/track.rst +++ b/docs/source/io_formats/track.rst @@ -4,27 +4,18 @@ Track File Format ================= -The current revision of the particle track file format is 1. +The current revision of the particle track file format is 2.0. -**/filetype** (*char[]*) +**/** - String indicating the type of file. +:Attributes: - **filetype** (*char[]*) -- String indicating the type of file. + - **version** (*int[2]*) -- Major and minor version of the track + file format. + - **n_particles** (*int*) -- Number of particles for which tracks + are recorded. + - **n_coords** (*int[]*) -- Number of coordinates for each + particle. -**/revision** (*int*) - - Revision of the track file format. Any time a change is made in the format, - this integer is incremented. - -**/n_particles** (*int*) - - Number of particles for which tracks are recorded. - -**/n_coords** (*int[]*) - - Number of coordinates for each particle. - -*do i = 1, n_particles* - - **/coordinates_i** (*double[][3]*) - - (x,y,z) coordinates for the *i*-th particle. +:Datasets: + - **coordinates_** (*double[][3]*) -- (x,y,z) coordinates for the + *i*-th particle. diff --git a/docs/source/io_formats/volume.rst b/docs/source/io_formats/volume.rst index 10b7a3b73..456a06eef 100644 --- a/docs/source/io_formats/volume.rst +++ b/docs/source/io_formats/volume.rst @@ -4,19 +4,31 @@ Volume File Format ================== +The current version of the volume file format is 1.0. + **/** -:Attributes: - **samples** (*int*) -- Number of samples +:Attributes: - **filetype** (*char[]*) -- String indicating the type of file. + - **version** (*int[2]*) -- Major and minor version of the summary + file format. + - **openmc_version** (*int[3]*) -- Major, minor, and release + version number for OpenMC. + - **git_sha1** (*char[40]*) -- Git commit SHA-1 hash. + - **date_and_time** (*char[]*) -- Date and time the summary was + written. + - **domain_type** (*char[]*) -- The type of domain for which + volumes are calculated, either 'cell', 'material', or 'universe'. + - **samples** (*int*) -- Number of samples - **lower_left** (*double[3]*) -- Lower-left coordinates of bounding box - **upper_right** (*double[3]*) -- Upper-right coordinates of bounding box -**/cell_/** +**/domain_/** :Datasets: - **volume** (*double[2]*) -- Calculated volume and its uncertainty in cubic centimeters - **nuclides** (*char[][]*) -- Names of nuclides identified in the - cell + domain - **atoms** (*double[][2]*) -- Total number of atoms of each nuclide and its uncertainty diff --git a/docs/source/io_formats/voxel.rst b/docs/source/io_formats/voxel.rst index 6b73f2800..52ae78aaa 100644 --- a/docs/source/io_formats/voxel.rst +++ b/docs/source/io_formats/voxel.rst @@ -4,22 +4,24 @@ Voxel Plot File Format ====================== -**/filetype** (*char[]*) +The current version of the voxel file format is 1.0. - String indicating the type of file. +**/** -**/num_voxels** (*int[3]*) +:Attributes: - **filetype** (*char[]*) -- String indicating the type of file. + - **version** (*int[2]*) -- Major and minor version of the voxel + file format. + - **openmc_version** (*int[3]*) -- Major, minor, and release + version number for OpenMC. + - **git_sha1** (*char[40]*) -- Git commit SHA-1 hash. + - **date_and_time** (*char[]*) -- Date and time the summary was + written. + - **num_voxels** (*int[3]*) -- Number of voxels in the x-, y-, and + z- directions. + - **voxel_width** (*double[3]*) -- Width of a voxel in centimeters. + - **lower_left** (*double[3]*) -- Cartesian coordinates of the + lower-left corner of the plot. - Number of voxels in the x-, y-, and z- directions. - -**/voxel_width** (*double[3]*) - - Width of a voxel in centimeters. - -**/lower_left** (*double[3]*) - - Cartesian coordinates of the lower-left corner of the plot. - -**/data** (*int[][][]*) - - Data for each voxel that represents a material or cell ID. +:Datasets: + - **data** (*int[][][]*) -- Data for each voxel that represents a + material or cell ID. diff --git a/docs/source/pythonapi/examples/mdgxs-part-i.ipynb b/docs/source/pythonapi/examples/mdgxs-part-i.ipynb index f7582fcbe..6d84ca3c2 100644 --- a/docs/source/pythonapi/examples/mdgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mdgxs-part-i.ipynb @@ -365,20 +365,15 @@ "\n", "* `TotalXS`\n", "* `TransportXS`\n", - "* `NuTransportXS`\n", "* `AbsorptionXS`\n", "* `CaptureXS`\n", "* `FissionXS`\n", - "* `NuFissionXS`\n", + "* `NuFissionMatrixXS`\n", "* `KappaFissionXS`\n", "* `ScatterXS`\n", - "* `NuScatterXS`\n", "* `ScatterMatrixXS`\n", - "* `NuScatterMatrixXS`\n", "* `Chi`\n", - "* `ChiPrompt`\n", "* `InverseVelocity`\n", - "* `PromptNuFissionXS`\n", "\n", "A separate abstract `MDGXS` class is used for cross-sections and parameters that involve delayed neutrons. The subclasses of `MDGXS` include:\n", "\n", @@ -387,7 +382,11 @@ "* `Beta`\n", "* `DecayRate`\n", "\n", - "These classes provide us with an interface to generate the tally inputs as well as perform post-processing of OpenMC's tally data to compute the respective multi-group cross sections. In this case, let's create the multi-group chi-prompt, chi-delayed, and prompt-nu-fission cross sections with our 100-energy-group structure and multi-group delayed-nu-fission and beta cross sections with our 100-energy-group and 6-delayed-group structures. " + "These classes provide us with an interface to generate the tally inputs as well as perform post-processing of OpenMC's tally data to compute the respective multi-group cross sections. \n", + "\n", + "In this case, let's create the multi-group chi-prompt, chi-delayed, and prompt-nu-fission cross sections with our 100-energy-group structure and multi-group delayed-nu-fission and beta cross sections with our 100-energy-group and 6-delayed-group structures. \n", + "\n", + "The prompt chi and nu-fission data can actually be gathered using the `Chi` and `FissionXS` classes, respectively, by passing in a value of `True` for the optional `prompt` parameter upon initialization." ] }, { @@ -399,8 +398,8 @@ "outputs": [], "source": [ "# Instantiate a few different sections\n", - "chi_prompt = mgxs.ChiPrompt(domain=cell, groups=energy_groups, by_nuclide=True)\n", - "prompt_nu_fission = mgxs.PromptNuFissionXS(domain=cell, groups=energy_groups, by_nuclide=True)\n", + "chi_prompt = mgxs.Chi(domain=cell, groups=energy_groups, by_nuclide=True, prompt=True)\n", + "prompt_nu_fission = mgxs.FissionXS(domain=cell, groups=energy_groups, by_nuclide=True, nu=True, prompt=True)\n", "chi_delayed = mgxs.ChiDelayed(domain=cell, energy_groups=energy_groups, by_nuclide=True)\n", "delayed_nu_fission = mgxs.DelayedNuFissionXS(domain=cell, energy_groups=energy_groups, delayed_groups=delayed_groups, by_nuclide=True)\n", "beta = mgxs.Beta(domain=cell, energy_groups=energy_groups, delayed_groups=delayed_groups, by_nuclide=True)\n", @@ -542,8 +541,8 @@ " Copyright | 2011-2017 Massachusetts Institute of Technology\n", " License | http://openmc.readthedocs.io/en/latest/license.html\n", " Version | 0.8.0\n", - " Git SHA1 | 6e3f6bf8b11cb3f6f171f1c351ddcaf85dd515ec\n", - " Date/Time | 2017-02-11 14:15:38\n", + " Git SHA1 | 5e313cf5f1d601074ad95c17ae589bf564972adb\n", + " Date/Time | 2017-02-26 06:05:10\n", " OpenMP Threads | 8\n", "\n", " ===========================================================================\n", @@ -617,10 +616,10 @@ " 44/1 1.24424 1.23133 +/- 0.00389\n", " 45/1 1.24767 1.23179 +/- 0.00381\n", " 46/1 1.22998 1.23174 +/- 0.00370\n", - " 47/1 1.26352 1.23260 +/- 0.00370\n", - " 48/1 1.23155 1.23257 +/- 0.00360\n", - " 49/1 1.22059 1.23227 +/- 0.00352\n", - " 50/1 1.24724 1.23264 +/- 0.00345\n", + " 47/1 1.26195 1.23256 +/- 0.00369\n", + " 48/1 1.23146 1.23253 +/- 0.00359\n", + " 49/1 1.22059 1.23222 +/- 0.00351\n", + " 50/1 1.24724 1.23260 +/- 0.00345\n", " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", @@ -630,27 +629,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1132E-01 seconds\n", - " Reading cross sections = 3.2075E-01 seconds\n", - " Total time in simulation = 1.3772E+01 seconds\n", - " Time in transport only = 1.2971E+01 seconds\n", - " Time in inactive batches = 6.3146E-01 seconds\n", - " Time in active batches = 1.3140E+01 seconds\n", - " Time synchronizing fission bank = 5.4819E-03 seconds\n", - " Sampling source sites = 3.8838E-03 seconds\n", - " SEND/RECV source sites = 1.5557E-03 seconds\n", - " Time accumulating tallies = 5.3270E-04 seconds\n", - " Total time for finalization = 4.9668E-02 seconds\n", - " Total time elapsed = 1.4246E+01 seconds\n", - " Calculation Rate (inactive) = 79181.7 neutrons/second\n", - " Calculation Rate (active) = 15220.4 neutrons/second\n", + " Total time for initialization = 3.8846E-01 seconds\n", + " Reading cross sections = 3.0221E-01 seconds\n", + " Total time in simulation = 1.2666E+01 seconds\n", + " Time in transport only = 1.2196E+01 seconds\n", + " Time in inactive batches = 5.1652E-01 seconds\n", + " Time in active batches = 1.2150E+01 seconds\n", + " Time synchronizing fission bank = 5.1914E-03 seconds\n", + " Sampling source sites = 3.6297E-03 seconds\n", + " SEND/RECV source sites = 1.5222E-03 seconds\n", + " Time accumulating tallies = 5.2027E-04 seconds\n", + " Total time for finalization = 4.8293E-02 seconds\n", + " Total time elapsed = 1.3117E+01 seconds\n", + " Calculation Rate (inactive) = 96801.2 neutrons/second\n", + " Calculation Rate (active) = 16461.5 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.23260 +/- 0.00309\n", - " k-effective (Track-length) = 1.23264 +/- 0.00345\n", + " k-effective (Collision) = 1.23256 +/- 0.00308\n", + " k-effective (Track-length) = 1.23260 +/- 0.00345\n", " k-effective (Absorption) = 1.23111 +/- 0.00186\n", - " Combined k-effective = 1.23135 +/- 0.00185\n", + " Combined k-effective = 1.23135 +/- 0.00184\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -759,17 +758,17 @@ { "data": { "text/plain": [ - "array([[[ 5.14239169e-06, 1.16429778e-06]],\n", + "array([[[ 5.14223507e-06, 1.16426087e-06]],\n", "\n", - " [[ 2.65434434e-05, 7.58244504e-06]],\n", + " [[ 2.65426350e-05, 7.58220468e-06]],\n", "\n", - " [[ 2.53406770e-05, 5.73814391e-06]],\n", + " [[ 2.53399053e-05, 5.73796202e-06]],\n", "\n", - " [[ 5.68158884e-05, 1.04761254e-05]],\n", + " [[ 5.68141581e-05, 1.04757933e-05]],\n", "\n", - " [[ 2.32937121e-05, 5.45676114e-06]],\n", + " [[ 2.32930026e-05, 5.45658817e-06]],\n", "\n", - " [[ 9.75765501e-06, 1.65156185e-06]]])" + " [[ 9.75735783e-06, 1.65150949e-06]]])" ] }, "execution_count": 18, @@ -819,8 +818,8 @@ " 1\n", " 1\n", " U235\n", - " 9.533842e-11\n", - " 4.789050e-11\n", + " 9.534320e-11\n", + " 4.789291e-11\n", " \n", " \n", " 199\n", @@ -828,8 +827,8 @@ " 1\n", " 1\n", " Pu239\n", - " 1.606499e-11\n", - " 8.071081e-12\n", + " 1.606580e-11\n", + " 8.071486e-12\n", " \n", " \n", " 398\n", @@ -837,8 +836,8 @@ " 2\n", " 1\n", " U235\n", - " 1.224131e-09\n", - " 6.149449e-10\n", + " 1.224152e-09\n", + " 6.149552e-10\n", " \n", " \n", " 399\n", @@ -846,8 +845,8 @@ " 2\n", " 1\n", " Pu239\n", - " 2.602518e-10\n", - " 1.307590e-10\n", + " 2.602562e-10\n", + " 1.307612e-10\n", " \n", " \n", " 598\n", @@ -855,8 +854,8 @@ " 3\n", " 1\n", " U235\n", - " 9.033000e-10\n", - " 4.537601e-10\n", + " 9.032969e-10\n", + " 4.537585e-10\n", " \n", " \n", " 599\n", @@ -864,8 +863,8 @@ " 3\n", " 1\n", " Pu239\n", - " 1.522295e-10\n", - " 7.648264e-11\n", + " 1.522290e-10\n", + " 7.648238e-11\n", " \n", " \n", " 798\n", @@ -873,8 +872,8 @@ " 4\n", " 1\n", " U235\n", - " 1.749138e-09\n", - " 8.786432e-10\n", + " 1.749268e-09\n", + " 8.787082e-10\n", " \n", " \n", " 799\n", @@ -882,8 +881,8 @@ " 4\n", " 1\n", " Pu239\n", - " 2.400317e-10\n", - " 1.205943e-10\n", + " 2.400495e-10\n", + " 1.206032e-10\n", " \n", " \n", " 998\n", @@ -909,14 +908,14 @@ ], "text/plain": [ " cell delayedgroup group in nuclide mean std. dev.\n", - "198 1 1 1 U235 9.533842e-11 4.789050e-11\n", - "199 1 1 1 Pu239 1.606499e-11 8.071081e-12\n", - "398 1 2 1 U235 1.224131e-09 6.149449e-10\n", - "399 1 2 1 Pu239 2.602518e-10 1.307590e-10\n", - "598 1 3 1 U235 9.033000e-10 4.537601e-10\n", - "599 1 3 1 Pu239 1.522295e-10 7.648264e-11\n", - "798 1 4 1 U235 1.749138e-09 8.786432e-10\n", - "799 1 4 1 Pu239 2.400317e-10 1.205943e-10\n", + "198 1 1 1 U235 9.534320e-11 4.789291e-11\n", + "199 1 1 1 Pu239 1.606580e-11 8.071486e-12\n", + "398 1 2 1 U235 1.224152e-09 6.149552e-10\n", + "399 1 2 1 Pu239 2.602562e-10 1.307612e-10\n", + "598 1 3 1 U235 9.032969e-10 4.537585e-10\n", + "599 1 3 1 Pu239 1.522290e-10 7.648238e-11\n", + "798 1 4 1 U235 1.749268e-09 8.787082e-10\n", + "799 1 4 1 Pu239 2.400495e-10 1.206032e-10\n", "998 1 5 1 U235 2.724017e-10 1.368376e-10\n", "999 1 5 1 Pu239 4.749191e-11 2.386080e-11" ] @@ -998,7 +997,7 @@ " 1\n", " U235\n", " 0.120780\n", - " 0.000551\n", + " 0.000549\n", " \n", " \n", " 5\n", @@ -1007,7 +1006,7 @@ " 1\n", " Pu239\n", " 0.113370\n", - " 0.000452\n", + " 0.000451\n", " \n", " \n", " 6\n", @@ -1016,7 +1015,7 @@ " 1\n", " U235\n", " 0.302780\n", - " 0.001381\n", + " 0.001378\n", " \n", " \n", " 7\n", @@ -1025,7 +1024,7 @@ " 1\n", " Pu239\n", " 0.292500\n", - " 0.001166\n", + " 0.001163\n", " \n", " \n", " 8\n", @@ -1034,7 +1033,7 @@ " 1\n", " U235\n", " 0.849490\n", - " 0.003875\n", + " 0.003865\n", " \n", " \n", " 9\n", @@ -1043,7 +1042,7 @@ " 1\n", " Pu239\n", " 0.857490\n", - " 0.003419\n", + " 0.003411\n", " \n", " \n", " 10\n", @@ -1052,7 +1051,7 @@ " 1\n", " U235\n", " 2.853000\n", - " 0.013013\n", + " 0.012980\n", " \n", " \n", " 11\n", @@ -1061,7 +1060,7 @@ " 1\n", " Pu239\n", " 2.729700\n", - " 0.010884\n", + " 0.010858\n", " \n", " \n", "\n", @@ -1073,14 +1072,14 @@ "1 1 1 1 Pu239 0.013271 0.000053\n", "2 1 2 1 U235 0.032739 0.000149\n", "3 1 2 1 Pu239 0.030881 0.000123\n", - "4 1 3 1 U235 0.120780 0.000551\n", - "5 1 3 1 Pu239 0.113370 0.000452\n", - "6 1 4 1 U235 0.302780 0.001381\n", - "7 1 4 1 Pu239 0.292500 0.001166\n", - "8 1 5 1 U235 0.849490 0.003875\n", - "9 1 5 1 Pu239 0.857490 0.003419\n", - "10 1 6 1 U235 2.853000 0.013013\n", - "11 1 6 1 Pu239 2.729700 0.010884" + "4 1 3 1 U235 0.120780 0.000549\n", + "5 1 3 1 Pu239 0.113370 0.000451\n", + "6 1 4 1 U235 0.302780 0.001378\n", + "7 1 4 1 Pu239 0.292500 0.001163\n", + "8 1 5 1 U235 0.849490 0.003865\n", + "9 1 5 1 Pu239 0.857490 0.003411\n", + "10 1 6 1 U235 2.853000 0.012980\n", + "11 1 6 1 Pu239 2.729700 0.010858" ] }, "execution_count": 20, @@ -1169,7 +1168,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 23, @@ -1180,7 +1179,7 @@ "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1251,8 +1250,8 @@ " 1\n", " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 8.779406e-08\n", - " 4.667924e-10\n", + " 8.779139e-08\n", + " 4.658590e-10\n", " \n", " \n", " 1\n", @@ -1260,8 +1259,8 @@ " 1\n", " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 7.150041e-09\n", - " 3.565013e-11\n", + " 7.149814e-09\n", + " 3.559010e-11\n", " \n", " \n", " 2\n", @@ -1269,8 +1268,8 @@ " 2\n", " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 9.528171e-07\n", - " 5.066035e-09\n", + " 9.527880e-07\n", + " 5.055905e-09\n", " \n", " \n", " 3\n", @@ -1278,8 +1277,8 @@ " 2\n", " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 1.303200e-07\n", - " 6.497762e-10\n", + " 1.303159e-07\n", + " 6.486820e-10\n", " \n", " \n", " 4\n", @@ -1287,8 +1286,8 @@ " 3\n", " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 2.353975e-07\n", - " 1.251585e-09\n", + " 2.353903e-07\n", + " 1.249083e-09\n", " \n", " \n", " 5\n", @@ -1296,8 +1295,8 @@ " 3\n", " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 2.032960e-08\n", - " 1.013634e-10\n", + " 2.032895e-08\n", + " 1.011928e-10\n", " \n", " \n", " 6\n", @@ -1305,8 +1304,8 @@ " 4\n", " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 4.720335e-07\n", - " 2.509756e-09\n", + " 4.720191e-07\n", + " 2.504737e-09\n", " \n", " \n", " 7\n", @@ -1314,8 +1313,8 @@ " 4\n", " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 2.626392e-08\n", - " 1.309520e-10\n", + " 2.626309e-08\n", + " 1.307315e-10\n", " \n", " \n", " 8\n", @@ -1323,8 +1322,8 @@ " 5\n", " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 2.828001e-08\n", - " 1.503620e-10\n", + " 2.827915e-08\n", + " 1.500614e-10\n", " \n", " \n", " 9\n", @@ -1332,8 +1331,8 @@ " 5\n", " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 2.430664e-09\n", - " 1.211930e-11\n", + " 2.430587e-09\n", + " 1.209889e-11\n", " \n", " \n", " 10\n", @@ -1341,8 +1340,8 @@ " 6\n", " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 1.477575e-09\n", - " 7.856122e-12\n", + " 1.477530e-09\n", + " 7.840413e-12\n", " \n", " \n", " 11\n", @@ -1350,8 +1349,8 @@ " 6\n", " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 6.994534e-11\n", - " 3.487477e-13\n", + " 6.994312e-11\n", + " 3.481605e-13\n", " \n", " \n", "\n", @@ -1373,18 +1372,18 @@ "11 1 6 Pu239 \n", "\n", " score mean std. dev. \n", - "0 (((delayed-nu-fission / nu-fission) * (delayed... 8.78e-08 4.67e-10 \n", - "1 (((delayed-nu-fission / nu-fission) * (delayed... 7.15e-09 3.57e-11 \n", - "2 (((delayed-nu-fission / nu-fission) * (delayed... 9.53e-07 5.07e-09 \n", - "3 (((delayed-nu-fission / nu-fission) * (delayed... 1.30e-07 6.50e-10 \n", + "0 (((delayed-nu-fission / nu-fission) * (delayed... 8.78e-08 4.66e-10 \n", + "1 (((delayed-nu-fission / nu-fission) * (delayed... 7.15e-09 3.56e-11 \n", + "2 (((delayed-nu-fission / nu-fission) * (delayed... 9.53e-07 5.06e-09 \n", + "3 (((delayed-nu-fission / nu-fission) * (delayed... 1.30e-07 6.49e-10 \n", "4 (((delayed-nu-fission / nu-fission) * (delayed... 2.35e-07 1.25e-09 \n", "5 (((delayed-nu-fission / nu-fission) * (delayed... 2.03e-08 1.01e-10 \n", - "6 (((delayed-nu-fission / nu-fission) * (delayed... 4.72e-07 2.51e-09 \n", + "6 (((delayed-nu-fission / nu-fission) * (delayed... 4.72e-07 2.50e-09 \n", "7 (((delayed-nu-fission / nu-fission) * (delayed... 2.63e-08 1.31e-10 \n", "8 (((delayed-nu-fission / nu-fission) * (delayed... 2.83e-08 1.50e-10 \n", "9 (((delayed-nu-fission / nu-fission) * (delayed... 2.43e-09 1.21e-11 \n", - "10 (((delayed-nu-fission / nu-fission) * (delayed... 1.48e-09 7.86e-12 \n", - "11 (((delayed-nu-fission / nu-fission) * (delayed... 6.99e-11 3.49e-13 " + "10 (((delayed-nu-fission / nu-fission) * (delayed... 1.48e-09 7.84e-12 \n", + "11 (((delayed-nu-fission / nu-fission) * (delayed... 6.99e-11 3.48e-13 " ] }, "execution_count": 24, @@ -1438,7 +1437,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAEWCAYAAABbgYH9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcXFWZ//HPlywE6CRICEwggQSJSNgC04KouJBRwhoQ\nGIMKjCKIAwiS4UfQERocUGZARNZBwioSlqBERVDZdBQJHYxsMZKBMGmCELJBgABJnt8f9zSpVKq7\nbnf6plLd3/frVa+uunXvqedWd9dTZ7nnKCIwMzPrahvUOgAzM+uenGDMzKwQTjBmZlYIJxgzMyuE\nE4yZmRXCCcbMzArhBGOFkPRJSS01eN0bJP3Hun7dnkbSNyVdW1DZgyXNktQvPX5I0leKeK0Kr/11\nSd9bF6/VEzjBWEWS5kh6S9LrkhZL+qOkEyXV7d+MpH+RFJLOKNveIumTXVB+k6Qfr205HXzNkPSG\npKXptriA11jjy0JEXBARRX3oTwSuj4hla1tQJ5LTNcAXJW2xtq9tTjDWvoMjoj+wLfA94ExgUm1D\nWmsLgTMlDVjXL6xMEf9zu0VEQ7pt2sZr9y7gdbucpA2BY4F1mqhbpaT2K+CYWrx+d+MEY1VFxJKI\nmAp8DjhW0s6QfRhIukjS/0l6WdLVkjaqVIakiZL+N9WInpF0WEkZCyXtUrLvFqn2NDg9PkjSjJKa\n1K4l++4u6fFU7m1AvyqnMxN4BPhGG3FuUBLrAkm3S9osPbfGN/lU0/snSWOBbwKfSzWJv6TnH5J0\nvqQ/AG8C20naStLUdN6zJR1fUl5Tes2b0jk9LamxyjlVOo9PpprZmZL+Dlwv6X2SfiFpvqRF6f7Q\nkmM2k3S9pHnp+Z9J2oTsA3erklrSVuW1NUmHpFgXp3Pesew9+jdJT0haIum21uavCvYCFkdEefPq\n+yVNS8ff3fo7SeV/OP1dLJb0l9baqKTzgX2Ay1Pcl6ftl0qaK+k1SdMl7VP2Wg8BB3bsHbdKnGAs\nt4iYBrSQ/dMCXAh8ABgNbA9sDZzdxuH/m44bCJwL/FjSkIh4G5gMfLFk36OA30bEfEl7ANcBXwUG\nAf8NTE2JqS/wM+BmYDPgDuDwHKfybeAbpR9SJb4OHAp8AtgKWARcUa3AiLgXuAC4LdUkdit5+mjg\nBKA/8AJwK9n7uBVwBHCBpDEl+x9C9p5sCkwFLs9xTpX8A9n7sm16/Q2A69PjbYC3ysq+GdgY2AnY\nArgkIt4A9gfmldSS5pW+iKQPpHM6DRgM3AP8PP1+Wv0zMBYYAewK/EsbMe8CzKqw/Rjgy2Tv2XLg\nh+m1twZ+CfxHOtd/A6ZIGhwR3wJ+D5yc4j45lfUY2d/sZsBPgDvKEt5MoPT3Z53kBGMdNQ/YTJKA\n44FvRMTCiHid7AN2fKWDIuKOiJgXESsj4jbgWWDP9PSNwOdLmo+OJvuwI73Gf0fEoxGxIiJuBN4G\nPpxufYAfRMS7EXEn2YdHuyJiBvBrsia/cl8FvhURLSn5NQFHrGUT0w0R8XRELCf70P8YcGZELEux\nXJvOudX/RMQ9EbGC7H2o9mH3ePr2vljSD0u2rwTOiYi3I+KtiFgQEVMi4s30+zqfLJEiaQhZIjkx\nIhal9/PhnOf3OeCXEfGbiHgXuAjYCPhIyT4/TL//hcDPyT7gK9kUeL3C9psj4qmU8L4N/LOkXmRf\nTO5J79fKiPgN0Awc0FawEfHj9F4sj4iLgQ2BHUp2eZ3si5Ctpbpol7X1ytZk/RiDyb7tTs9yDQAC\nelU6SNIxwOnA8LSpAdgcICIelfQG8AlJL5HVhqam/bYla5Y7paS4vmTfZAN4MVafsfWFnOdxNjBN\n0iVl27cFfippZcm2FcCWOcutZG7J/a2A1oTc6gWgtBns7yX33wT6SeqdElQle0TE7Arb55d2lEva\nGLiErCbxvrS5f/qgHpbiWpTrjFa3FSXve0SslDSX7G+lVfk5bdVGWYvIanrlSt/DF8i+WGxO9vs6\nUtLBJc/3AR5sK1hJE4CvsOpvaEAqq1V/YElbx1t+rsFYbpI+RPah8T/Aq2RNLDtFxKbpNjAiGioc\nty3wI+BkYFDqiH6KLCG1upHs2+jRwJ0lH4xzgfNLXmPTiNg4Im4FXgK2VkmGI2v6qSoi/grcRdZv\nUmousH/Z6/WLiBeBN8iSaut59SJLtO8V29bLldxvrQGWfohuA7yYJ+4OKo9nAtk39b0iYgDw8bRd\nZOe9maRKgwSqTbk+j+yDPiss+30Mo3Pn9ARZs2u5YSX3twHeJfsbnEtWuyn9fW0SEa1DjVeLPfW3\nnEnWZPe+9Le4hNX/FncE/tKJ2K2ME4xVJWmApIPI+gV+HBFPRsRKsqRxidKQTklbS9qvQhGbkP2j\nz0/7fQnYuWyfm4HDyJLMTSXbfwScKGkvZTaRdGD6gH6ErD3+65J6S/osq5rd8jgX+BJZs0yrq4Hz\nU1JsvSZjXHrub2S1iQMl9QH+nax5pdXLwHC1M1IsIuYCfwS+K6mfsgELxwG3dCDuzupP9qVgcep/\nOqckrpfIOvOvTIMB+khqTUAvA4MktdVsdDtwoKQx6X2ZQNaM+cdOxDgN2DT1rZT6oqRRqRZ2HtmX\nkBVko80OlrSfpF7pPf1kyeCFl4Htyt6D5WR/i70lnU1Wgyn1CbL3wtaSE4y15+eSXif7lvgt4Ptk\nH8itzgRmA3+S9BrwW1ZvywYgIp4BLiZLCC+TdeT+oWyfFuBxskT0+5LtzWT9MJeTNZ/MJnUQR8Q7\nwGfT40VkfQF35T25iHieLLFtUrL5UrLmuV+nc/8T2cgmImIJ8K9kfSatNZrS0U53pJ8LJD3ezksf\nRdZUOA/4KVk/yW/yxr0WfkDWN/Iq2XndW/b80WQ1g78Cr5B12rfW9m4Fnkv9PKs1b0XELLIvBpel\nsg8mG+L+TkcDTMfcwOqDPiD7Pd1A1tTWj2wwRmvCHkdWE51P9rd6Bqs+2y4l60NblPqn7iNLHn8j\na2pbRknzW+rsP4CsRm1rSV5wzNYXkq4jG63077WOxWpH2fD03wO7R8Rb6/i1TwGGRcT/W5ev2105\nwdh6QdJwYAbZh8rztY3GzLqCm8is5iR9h6zT/7+cXMy6D9dgzMysEK7BmJlZIXr0hZabb755DB8+\nvNZhmJnVlenTp78aEYOr7dejE8zw4cNpbm6udRhmZnVFUq4ZM9xEZmZmhXCCMTOzQjjBmJlZIXp0\nH4yZGcC7775LS0sLy5at9SrN3Uq/fv0YOnQoffr06dTxTjBm1uO1tLTQv39/hg8fzuqTc/dcEcGC\nBQtoaWlhxIgRnSrDTWRm1uMtW7aMQYMGObmUkMSgQYPWqlZXaIKRNFbSLGXrjk+s8PyGaX3u2ZIe\nTfNRtT53Vto+q3UKeEnDJD0oaaay9b9PLdm/SdKLytZunyGpzRXtzMzKObmsaW3fk8ISTFqM6Qqy\nZVhHAUdJGlW223HAoojYnmylvQvTsaPIlt7diWz1vStTecuBCRGxI9lyuSeVlXlJRIxOt3uKOjez\nIl18MfTvD1L93vr3z87DerYiazB7ArMj4rm0xsNksnUbSo1j1boLdwJj0mp444DJaS3x58nWANkz\nIl6KiMcB0pKzM1l9WVazutfUBEuX1jqKtbN0aXYelt+cOXPYeefV1+FramrioosuWm3b3Llz+dSn\nPsWOO+7ITjvtxKWXXvrec9/+9rfZddddGT16NJ/5zGeYN28eAA899BADBw5k9OjRjB49mvPOO6/4\nE6LYBLM1q6+j3cKayeC9fdJ640uAQXmOTc1puwOPlmw+WdITkq6T9D7M6lC9J5dW3eU81je9e/fm\n4osvZubMmfzpT3/iiiuu4JlnngHgjDPO4IknnmDGjBkcdNBBqyWSffbZhxkzZjBjxgzOPvvsdRJr\nkQmmUuNd+dTNbe3T7rGSGoApwGkR8VrafBXwfmA02VrtFSvokk6Q1Cypef78+e2fgVmNRdTfzYo1\nZMgQ9thjDwD69+/PjjvuyIsvvgjAgAGrVn9+4403at6vVGSCaQGGlTweSrZEbMV9JPUGBgIL2zs2\nrfk9BbglIt5bHjciXo6IFSVrxVdcmz0iromIxohoHDy46lxtZtbDFNk31dXmzJnDn//8Z/baa6/3\ntn3rW99i2LBh3HLLLavVYB555BF222039t9/f55++umuD6aCIhPMY8BISSMk9SXrtJ9ats9U4Nh0\n/wjggcgWqJkKjE+jzEYAI4FpqX9mEjAzIr5fWpCkISUPDyNbwMrMrC60Vdtoa/vSpUs5/PDD+cEP\nfrBazeX8889n7ty5fOELX+Dyyy8HYI899uCFF17gL3/5C6eccgqHHnpo159ABYUlmNSncjJwH1ln\n/O0R8bSk8yQdknabBAySNBs4HZiYjn0auB14BrgXOCkiVgAfBY4G9q0wHPk/JT0p6QngU8A3ijo3\nM7OuNmjQIBYtWrTatoULF7L55pu/1zl/9dVXA9nMA4cffjhf+MIX+OxnP1uxvM9//vNMmTIFyJrO\nGhoaADjggAN49913efXVVws8m0yhV/KnocL3lG07u+T+MuDINo49Hzi/bNv/ULl/hog4em3jNTOr\nVT9SQ0MDQ4YM4f7772fMmDEsXLiQe++9l1NPPZVjjz32vf0iguOOO44dd9yR008/fbUynn32WUaO\nHAnA1KlT+eAHPwjA3//+d7bcckskMW3aNFauXMmgQYMKPydPFWNmtp646aabOOmkk5gwYQIA55xz\nDu9///tX2+cPf/gDN998M7vssgujR48G4IILLuCAAw5g4sSJzJo1iw022IBtt932vRrPnXfeyVVX\nXUXv3r3ZaKONmDx58joZAKDowcM+GhsbwwuO2fqm9P++Hv896zH+mTNnsuOOO9Y6jPVSpfdG0vSI\n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\nUXFWRrt2AGEAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1499,9 +1498,9 @@ }, { "data": { - "image/png": "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\nkr1doNMAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEaCAYAAADg2nttAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl4VdXV8H+LGbkRLQ5vgiCoqKhgDCitH0os1ToQ9Kta\ncaClKkhbrNpYS20rJ871JZ9D8VXiBKKVWmzfEoqzDdahlaA4IGqpDSUGJwZNFAXM+v44596ce3OH\nk+HmDlm/5zlPzjl7n33W3Tf3rLP3WnstUVUMwzAMIxk9Mi2AYRiGkf2YsjAMwzBSYsrCMAzDSIkp\nC8MwDCMlpiwMwzCMlJiyMAzDMFJiysIwOhkR2VtEnhWRRhGpTPO97hSRX3fg+itF5O7OlMnIT0xZ\n5AAiUici20SkybfNy7RcqRCRQ0XkCRHZIiJbRWSViJyc5nvWiMiF6bxHAGYAHwO7qmp5RxsTkWki\n8lW8719VZ6rqNe1tW1WvV9VO7y9PZhWRn8WcrxeR0k5o3xGRBzrajhGcXpkWwAhMmao+lc4biEgv\nVd3ZiU1WA3cAk7zjIwHpxPbbTBo+Yzz2Bd7Udqx4TSLfi6o6vuOidSmbgZ+LyHxV/bQrbywiAoiq\nNnflffMaVbUtyzegDvhWgrJpwHPAXGAL8G/gJF/5QOAeYCPwHnAt0NN37fPAzbg/7GuBnkAl7pvx\nv4FZgOK+WJwJrIq5fznwv3Hk2sO7brcEcpcC9cCV3r3qgHN95X29z/Qf4APgTqC/r/xUYDXwKfAv\n4ETgOuAr4AugCZjn1VXgx8A/vc80LPyZfO3VABfG6ZetwLvA0d75DcCHwPcTfK4FwA5guyfDt7zP\ncgvQ4G23AH1j+uHnwPvAokTfcZL7Xevr82WezJuBvwE9vLKfe99/I/A2MNE77wAP+NqbDKzx2qgB\nRsb8H14OvAZ8Avwe6Jfi/7IamOM7Xw+Uevs9gNne97cJeBj4mr9f4v0OvO96u9fPTcCrvu/wOu+7\n2wYcABQBS73+WAdM97XnePe83+uXNcBYX3ncPuuum01D5QfjcP+Z9wBuAu7x3qwAFgI7cX84RwAn\nABfGXPsusBfuD206cBJQDJQAp/nqLgWGi8hI37nzgEVxZNqE++N8QEROE5G949T5L0/mwcD3gSoR\nOcgr+w1woCfHAV6dqwBE5CjcH/jPgN2AY4E6Vf0l7gNylqqGVHWW716neZ/1kDhyxGMc7kNxEPA7\nYDHuyOgA7zPPE5FQ7EWqOg14ELjJk+Ep4JfA173PcjhwFPCrmH74Gu6IZEZA+eJRjvsw3hPYG1cR\nq9ens4AjVbUA+DbugzcKETkQeAi41GtjOVAtIn181b6L+7AeDozGVQrJ+DVwmYh8LU7ZT3C/lwm4\nD/UtwO2pPqSqPgZcD/ze6+PDfcVTcfuwAFjvfZ56r/0zgOtFZKKv/mTc73Y33P/veQBB+6w7Ycoi\nd/hfb94/vE33la1X1btU9Stc5VAI7O09oE8CLlXVz1T1Q9y35Sm+axtU9bequlNVt+E+DG5V1XpV\n3QLcGK6oql/ivk2eB65NAvctfVmssOq+mh2H+wOrBDZ6Rt8RMVV/rapfquoK4C/Adz1FNx24TFU3\nq2oj7sMhLPcFwL2q+qSqNqvqe6r6Vor+u8Fra1uKemH+rar3eX36e2AIcLUn6xO4b7YHBGzrXO/a\nD1X1I6AC96EWphn37fvLJPJ9Peb7/3qcOjtwv/t9VXWHqv7N+x6+wh3dHCIivVW1TlX/Fef6s4C/\neP26A3dk1x93VBXmNlVtUNXNuKOG4mQfXFVXA0/gvqXHchHwS+9/7UvcN/0zRKQj0+MLVHWNulN5\n/wWMB36uql94stxNdN8/p6rLve95Ea4yh+B91m0wZZE7nKaqu/m2u3xl74d3VPVzbzeE+6baG/dB\nvVVEtgLzcUcRYTbE3Kco5lxs+ULgHO+BPhV42Puht8J7CMxS1f09WT7DHRGE2aKqn/mO13v33xPY\nBVjlk/sx7zy4D+62/nBjP0cqPvDtbwNQ1dhzrUYWCSjC/Wxhwp8zzEeq+kWKNv4e8/3/PU6d/8Yd\nzT0hIu+KyGxP7nW4owUH+FBEFotIUZzro+RUd75/A+6oLsz7vv3PCdYHVwE/FJH/ijm/L/An33e8\nFvchHW8UGhT/91wEhF82wqwn+efp59mNgvZZt8GURX6zAfgS2MP3kNlVVQ/11Yk1wm4E9vEdD/EX\neg+p7cAxwDnEn4JqhapuwJ1iOMx3encRGeA7Hoo7p/8x7sP4UJ/cA1U1/GDaAOyf6FYBzocV1C6+\nc7EPss6kAffBGCb8OcN0SuhnVW1U1XJV3Q8oA34annJR1d+payDf17vfb1LJ6b0QDMGdt++IXG8B\nf8SdFvOzAde+5leC/VT1PdzvKPL9iEhPWl4WINj33AB8TUQKfOeGEvDzBOyzboMpizxGVTfiTgFU\nisiuItJDRPYXkQlJLnsYuEREBovIbsSfPrgfd253p6o+F68REdldRCpE5ADvvnsA5wOxb8QVItJH\nRI7B9Zr6g/dGexdws4js5bU3WES+7V1zD/ADEZnotT1YRA72yj4A9kvRLx/hPjDOE5GeInI+iZVP\nZ/AQ8CsR2dPrh6uATnf7FJFJXn8LruH/K+ArETlIRL4pIn1xjf/bvLJYHgZO8fq1N64N5EvghU4Q\nrwL4Aa5tIMydwHUisq8n/54icqpX9g7uW/4pniy/wp0WCvMBMExEEj7DvBeUF4AbRKSfiIzGncJ8\nMJWwbeizboMpi9yhOsbP/k8Br/se0Ad4E9eAuAR3XjsRd+EqmNeAV3CNnDuJ/qEswh0hJBtVbMe1\nZzyF++B6A/fBM81X531PpgbcH/BMn+3h57hTKn8XkU+9dg4CUNWXcB88N+N65ayg5Y34Vtx57y0i\nclsS+abjGsg3AYfSOQ/ERFwL1OL26evAy965zmYEbj81AS8C/6OqNbgP2RtxR2zv405Dxr7lo6pv\n49qjfuvVLcN12d7eUcFU9d+4/y/+keStuEblJ0SkEfdFYpxX/xPgR7g2hvBIo9537R+8v5tE5OUk\ntz4b9/+wAfgTrm3oyQAiB+qz7oS49i/DiI+InATcqar+6Yn+uO6jJar6z3a2W4rrsrlPqrqGYWQe\nG1kYUYhIfxE5WUR6ichgYA7uG5mfHwIr26soDMPIPWwFtxGL4M4v/x53nvYveOsbwA094tU5Ld7F\nhmHkJzYNZRiGYaTEpqEMwzCMlJiyMAzDMFKSVpuFiJyI6x7XE7hbVW+MKT8WN6jaaGCKqi6JKd8V\nd1XnnzQ6zk8r9thjDx02bFgnSm8YhpH/rFq16mNV3TNVvbQpC2/F5e3A8bj+0StFZKmqvumr9h9c\nv/vLEzRzDa4PfUqGDRtGbW1t+wU2DMPohojI+tS10jsNdRSwTlXf9Rb1LMYNKx3BC871Gm4gtShE\nZAxujJgn0iijYRiGEYB0KovBRAf1qic6gFdCvCX8lbgrbA3DMIwMk05lES8jWlA/3R8By73YLolv\nIDJDRGpFpPajjz5qs4CGYRhGMNJp4K4nOmLpPkRH2kzGN4BjRORHuCGQ+4hIk6rO9ldS1SqgCmDs\n2LGtFNGOHTuor6/niy9SRX82spV+/fqxzz770Lt370yLYhjdmnQqi5XACBEZjhsIbApuSOuUqOq5\n4X0RmYab6nB24iviU19fT0FBAcOGDUMk3kDHyGZUlU2bNlFfX8/w4cMzLY5hdGvSNg3lZaqaBTyO\n6/76sKquEZGrRWQygIgcKSL1uLmd54vIms6U4YsvvmDQoEGmKHIUEWHQoEE2MjSMLCCt6yxUdTlu\niGv/uat8+yuJTrQTr40FuEnp24UpitzGvr+OUflCJc4Kh6btTZFzhaFCGsobouoAlB9d3uXyGbmD\nreBOI3V1dRx22GFR5xzHYe7cua3qbtiwgeOOO46RI0dy6KGHcuutt0bKfv3rXzN69GiKi4s54YQT\naGhwf+g1NTUMHDiQ4uJiiouLufrqq1PKtGDBAmbNSrq+MVCdjjJs2DA+/vjjtN6jO1D5QiUFNxRQ\nVBmd8dOpcZAK4fInL49SFLHUba2jcXsjzgonzZIauY4piyyhV69eVFZWsnbtWv7+979z++238+ab\n7vrFn/3sZ7z22musXr2aSZMmRSmFY445htWrV7N69WquuuqqRM0beUp41LCxaWO7ri9dUErd1rqk\nCsUwwJRF1lBYWEhJSQkABQUFjBw5kvfec1MF77rrrpF6n332WZunZu677z4OPPBAJkyYwPPPPx85\n/9FHH3H66adz5JFHcuSRR0aVhamurmbcuHEcccQRfOtb3+KDDz6gubmZESNGEHZXbm5u5oADDuDj\njz9O2OamTZs44YQTOOKII7jooouwaMedQ5CHfKhPiLnHz0XnKDpHo6ag1n+ynoWvLkyniEae0K2U\nheOASOKtqKht9R0nPXLW1dXxyiuvMG7cuMi5X/7ylwwZMoQHH3wwamTx4osvcvjhh3PSSSexZk1r\n/4CNGzcyZ84cnn/+eZ588snIaAXgkksu4bLLLmPlypU88sgjXHjhha2uHz9+PH//+9955ZVXmDJl\nCjfddBM9evTgvPPO48EH3VTGTz31FIcffjh77LFHwjYrKioYP348r7zyCpMnT+Y///lPp/WX0Rqn\n1Ikoh8ZfNJo9wugwlvwojSQaASQbGTQ1NXH66adzyy23RI0orrvuOq677jpuuOEG5s2bR0VFBSUl\nJaxfv55QKMTy5cs57bTT+Oc/o5PX/eMf/6C0tJQ993TjhJ111lm88847gPuQ9yuPTz/9lMbGxqjr\n6+vrOeuss9i4cSPbt2+PuLCef/75nHrqqVx66aXce++9/OAHP0ja5rPPPssf//hHAE455RR23333\n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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index d076823be..17d64ee2d 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -369,21 +369,21 @@ "\n", "* `TotalXS`\n", "* `TransportXS`\n", - "* `NuTransportXS`\n", "* `AbsorptionXS`\n", "* `CaptureXS`\n", "* `FissionXS`\n", - "* `NuFissionXS`\n", "* `KappaFissionXS`\n", "* `ScatterXS`\n", - "* `NuScatterXS`\n", "* `ScatterMatrixXS`\n", - "* `NuScatterMatrixXS`\n", "* `Chi`\n", "* `ChiPrompt`\n", "* `InverseVelocity`\n", "* `PromptNuFissionXS`\n", "\n", + "Of course, we are aware that the fission cross section (`FissionXS`) can sometimes be paired with the fission neutron multiplication to become $\\nu\\sigma_f$. This can be accomodated in to the `FissionXS` class by setting the `nu` parameter to `True` as shown below.\n", + "\n", + "Additionally, scattering reactions (like (n,2n)) can also be defined to take in to account the neutron multiplication to become $\\nu\\sigma_s$. This can be accomodated in the the transport (`TransportXS`), scattering (`ScatterXS`), and scattering-matrix (`ScatterMatrixXS`) cross sections types by setting the `nu` parameter to `True` as shown below.\n", + "\n", "These classes provide us with an interface to generate the tally inputs as well as perform post-processing of OpenMC's tally data to compute the respective multi-group cross sections. In this case, let's create the multi-group total, absorption and scattering cross sections with our 2-group structure." ] }, @@ -398,7 +398,11 @@ "# Instantiate a few different sections\n", "total = mgxs.TotalXS(domain=cell, groups=groups)\n", "absorption = mgxs.AbsorptionXS(domain=cell, groups=groups)\n", - "scattering = mgxs.ScatterXS(domain=cell, groups=groups)" + "scattering = mgxs.ScatterXS(domain=cell, groups=groups)\n", + "\n", + "# Note that if we wanted to incorporate neutron multiplication in the\n", + "# scattering cross section we would write the previous line as:\n", + "# scattering = mgxs.ScatterXS(domain=cell, groups=groups, nu=True)" ] }, { @@ -520,8 +524,8 @@ " Copyright | 2011-2017 Massachusetts Institute of Technology\n", " License | http://openmc.readthedocs.io/en/latest/license.html\n", " Version | 0.8.0\n", - " Git SHA1 | 54b65c8bda6af5788bd762b8cf9855d1a8008238\n", - " Date/Time | 2017-02-12 13:36:24\n", + " Git SHA1 | 60a1f157dae88b62e1865a5fe3efd7ef0773a068\n", + " Date/Time | 2017-02-25 14:26:54\n", " OpenMP Threads | 8\n", "\n", " ===========================================================================\n", @@ -592,7 +596,7 @@ " 42/1 1.13779 1.16177 +/- 0.00531\n", " 43/1 1.15066 1.16143 +/- 0.00516\n", " 44/1 1.12174 1.16026 +/- 0.00514\n", - " 45/1 1.17479 1.16068 +/- 0.00501\n", + " 45/1 1.17478 1.16068 +/- 0.00501\n", " 46/1 1.14146 1.16014 +/- 0.00489\n", " 47/1 1.20464 1.16135 +/- 0.00491\n", " 48/1 1.15119 1.16108 +/- 0.00479\n", @@ -607,20 +611,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1327E-01 seconds\n", - " Reading cross sections = 3.2638E-01 seconds\n", - " Total time in simulation = 2.2324E+00 seconds\n", - " Time in transport only = 2.1226E+00 seconds\n", - " Time in inactive batches = 3.0650E-01 seconds\n", - " Time in active batches = 1.9259E+00 seconds\n", - " Time synchronizing fission bank = 2.7640E-03 seconds\n", - " Sampling source sites = 2.0198E-03 seconds\n", - " SEND/RECV source sites = 7.0929E-04 seconds\n", - " Time accumulating tallies = 4.5355E-05 seconds\n", - " Total time for finalization = 4.1885E-04 seconds\n", - " Total time elapsed = 2.6534E+00 seconds\n", - " Calculation Rate (inactive) = 81567.1 neutrons/second\n", - " Calculation Rate (active) = 51923.2 neutrons/second\n", + " Total time for initialization = 3.5070E-01 seconds\n", + " Reading cross sections = 2.4151E-01 seconds\n", + " Total time in simulation = 2.3276E+00 seconds\n", + " Time in transport only = 2.2350E+00 seconds\n", + " Time in inactive batches = 2.5677E-01 seconds\n", + " Time in active batches = 2.0708E+00 seconds\n", + " Time synchronizing fission bank = 2.7683E-03 seconds\n", + " Sampling source sites = 2.0233E-03 seconds\n", + " SEND/RECV source sites = 7.1007E-04 seconds\n", + " Time accumulating tallies = 5.0753E-05 seconds\n", + " Total time for finalization = 3.8695E-04 seconds\n", + " Total time elapsed = 2.6857E+00 seconds\n", + " Calculation Rate (inactive) = 97364.6 neutrons/second\n", + " Calculation Rate (active) = 48290.8 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -901,7 +905,7 @@ " 6.250000e-01\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", - " -2.664535e-15\n", + " -5.551115e-15\n", " 0.011292\n", " \n", " \n", @@ -911,7 +915,7 @@ " 2.000000e+07\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", - " -3.330669e-16\n", + " -1.110223e-16\n", " 0.002570\n", " \n", " \n", @@ -924,8 +928,8 @@ "1 1 6.25e-01 2.00e+07 total \n", "\n", " score mean std. dev. \n", - "0 (((total / flux) - (absorption / flux)) - (sca... -2.66e-15 1.13e-02 \n", - "1 (((total / flux) - (absorption / flux)) - (sca... -3.33e-16 2.57e-03 " + "0 (((total / flux) - (absorption / flux)) - (sca... -5.55e-15 1.13e-02 \n", + "1 (((total / flux) - (absorption / flux)) - (sca... -1.11e-16 2.57e-03 " ] }, "execution_count": 22, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index bab3b6bfc..a0e47fa12 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -46,7 +46,7 @@ "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", + "plt.style.use('seaborn-dark')\n", "\n", "import openmoc\n", "from openmoc.opencg_compatible import get_openmoc_geometry\n", @@ -54,6 +54,7 @@ "import openmc\n", "import openmc.mgxs as mgxs\n", "import openmc.data\n", + "from openmc.opencg_compatible import get_opencg_geometry\n", "\n", "%matplotlib inline" ] @@ -331,7 +332,7 @@ "outputs": [], "source": [ "# Extract all Cells filled by Materials\n", - "openmc_cells = openmc_geometry.get_all_material_cells()\n", + "openmc_cells = openmc_geometry.get_all_material_cells().values()\n", "\n", "# Create dictionary to store multi-group cross sections for all cells\n", "xs_library = {}\n", @@ -341,8 +342,8 @@ " xs_library[cell.id] = {}\n", " xs_library[cell.id]['transport'] = mgxs.TransportXS(groups=fine_groups)\n", " xs_library[cell.id]['fission'] = mgxs.FissionXS(groups=fine_groups)\n", - " xs_library[cell.id]['nu-fission'] = mgxs.NuFissionXS(groups=fine_groups)\n", - " xs_library[cell.id]['nu-scatter'] = mgxs.NuScatterMatrixXS(groups=fine_groups)\n", + " xs_library[cell.id]['nu-fission'] = mgxs.FissionXS(groups=fine_groups, nu=True)\n", + " xs_library[cell.id]['nu-scatter'] = mgxs.ScatterMatrixXS(groups=fine_groups, nu=True)\n", " xs_library[cell.id]['chi'] = mgxs.Chi(groups=fine_groups)" ] }, @@ -453,8 +454,8 @@ " Copyright | 2011-2017 Massachusetts Institute of Technology\n", " License | http://openmc.readthedocs.io/en/latest/license.html\n", " Version | 0.8.0\n", - " Git SHA1 | 54b65c8bda6af5788bd762b8cf9855d1a8008238\n", - " Date/Time | 2017-02-12 13:37:37\n", + " Git SHA1 | 60a1f157dae88b62e1865a5fe3efd7ef0773a068\n", + " Date/Time | 2017-02-25 14:28:21\n", " OpenMP Threads | 8\n", "\n", " ===========================================================================\n", @@ -483,85 +484,93 @@ " ========= ======== ==================== \n", " 1/1 1.20332 \n", " 2/1 1.22209 \n", - " 3/1 1.24309 \n", - " 4/1 1.22833 \n", - " 5/1 1.21786 \n", - " 6/1 1.22005 \n", - " 7/1 1.20894 \n", - " 8/1 1.22071 \n", - " 9/1 1.21279 \n", - " 10/1 1.22198 \n", - " 11/1 1.22287 \n", - " 12/1 1.25490 1.23888 +/- 0.01602\n", - " 13/1 1.20224 1.22667 +/- 0.01532\n", - " 14/1 1.23375 1.22844 +/- 0.01098\n", - " 15/1 1.23068 1.22889 +/- 0.00851\n", - " 16/1 1.23073 1.22920 +/- 0.00696\n", - " 17/1 1.25364 1.23269 +/- 0.00684\n", - " 18/1 1.20820 1.22963 +/- 0.00667\n", - " 19/1 1.23138 1.22982 +/- 0.00588\n", - " 20/1 1.20682 1.22752 +/- 0.00574\n", - " 21/1 1.23580 1.22827 +/- 0.00525\n", - " 22/1 1.24190 1.22941 +/- 0.00492\n", - " 23/1 1.23125 1.22955 +/- 0.00453\n", - " 24/1 1.21606 1.22859 +/- 0.00430\n", - " 25/1 1.23653 1.22912 +/- 0.00404\n", - " 26/1 1.23850 1.22970 +/- 0.00383\n", - " 27/1 1.20986 1.22853 +/- 0.00378\n", - " 28/1 1.25277 1.22988 +/- 0.00381\n", - " 29/1 1.23334 1.23006 +/- 0.00361\n", - " 30/1 1.24345 1.23073 +/- 0.00349\n", - " 31/1 1.21565 1.23001 +/- 0.00339\n", - " 32/1 1.20555 1.22890 +/- 0.00342\n", - " 33/1 1.22995 1.22895 +/- 0.00327\n", - " 34/1 1.19763 1.22764 +/- 0.00339\n", - " 35/1 1.22645 1.22760 +/- 0.00325\n", - " 36/1 1.23900 1.22803 +/- 0.00316\n", - " 37/1 1.24305 1.22859 +/- 0.00309\n", - " 38/1 1.22484 1.22846 +/- 0.00298\n", - " 39/1 1.20986 1.22782 +/- 0.00294\n", - " 40/1 1.23764 1.22814 +/- 0.00286\n", - " 41/1 1.20476 1.22739 +/- 0.00287\n", - " 42/1 1.21652 1.22705 +/- 0.00280\n", - " 43/1 1.21279 1.22662 +/- 0.00275\n", - " 44/1 1.20210 1.22590 +/- 0.00276\n", - " 45/1 1.22644 1.22591 +/- 0.00268\n", - " 46/1 1.22907 1.22600 +/- 0.00261\n", - " 47/1 1.24057 1.22639 +/- 0.00257\n", - " 48/1 1.21610 1.22612 +/- 0.00251\n", - " 49/1 1.22199 1.22602 +/- 0.00245\n", - " 50/1 1.20860 1.22558 +/- 0.00243\n", - " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10050\n", - " The estimated number of batches is 73\n", + " 3/1 1.24322 \n", + " 4/1 1.21622 \n", + " 5/1 1.25850 \n", + " 6/1 1.22581 \n", + " 7/1 1.21118 \n", + " 8/1 1.23377 \n", + " 9/1 1.24254 \n", + " 10/1 1.21241 \n", + " 11/1 1.21042 \n", + " 12/1 1.23539 1.22290 +/- 0.01249\n", + " 13/1 1.22436 1.22339 +/- 0.00723\n", + " 14/1 1.22888 1.22476 +/- 0.00529\n", + " 15/1 1.22553 1.22491 +/- 0.00410\n", + " 16/1 1.24194 1.22775 +/- 0.00439\n", + " 17/1 1.24755 1.23058 +/- 0.00466\n", + " 18/1 1.21117 1.22815 +/- 0.00471\n", + " 19/1 1.22530 1.22784 +/- 0.00417\n", + " 20/1 1.20762 1.22582 +/- 0.00424\n", + " 21/1 1.20377 1.22381 +/- 0.00433\n", + " 22/1 1.24305 1.22541 +/- 0.00426\n", + " 23/1 1.22434 1.22533 +/- 0.00392\n", + " 24/1 1.22937 1.22562 +/- 0.00364\n", + " 25/1 1.22458 1.22555 +/- 0.00339\n", + " 26/1 1.18978 1.22332 +/- 0.00388\n", + " 27/1 1.20582 1.22229 +/- 0.00379\n", + " 28/1 1.22719 1.22256 +/- 0.00358\n", + " 29/1 1.21307 1.22206 +/- 0.00343\n", + " 30/1 1.20915 1.22141 +/- 0.00331\n", + " 31/1 1.22799 1.22173 +/- 0.00317\n", + " 32/1 1.21251 1.22131 +/- 0.00305\n", + " 33/1 1.20540 1.22062 +/- 0.00299\n", + " 34/1 1.20052 1.21978 +/- 0.00299\n", + " 35/1 1.24552 1.22081 +/- 0.00304\n", + " 36/1 1.21685 1.22066 +/- 0.00293\n", + " 37/1 1.22395 1.22078 +/- 0.00282\n", + " 38/1 1.22379 1.22089 +/- 0.00272\n", + " 39/1 1.20951 1.22049 +/- 0.00265\n", + " 40/1 1.25199 1.22154 +/- 0.00277\n", + " 41/1 1.23243 1.22190 +/- 0.00270\n", + " 42/1 1.20973 1.22152 +/- 0.00264\n", + " 43/1 1.24682 1.22228 +/- 0.00268\n", + " 44/1 1.20694 1.22183 +/- 0.00263\n", + " 45/1 1.22196 1.22183 +/- 0.00256\n", + " 46/1 1.20687 1.22142 +/- 0.00252\n", + " 47/1 1.22023 1.22139 +/- 0.00245\n", + " 48/1 1.22204 1.22140 +/- 0.00239\n", + " 49/1 1.22077 1.22139 +/- 0.00232\n", + " 50/1 1.23166 1.22164 +/- 0.00228\n", + " Triggers unsatisfied, max unc./thresh. is 1.17623 for flux in tally 10050\n", + " The estimated number of batches is 66\n", " Creating state point statepoint.050.h5...\n", - " 51/1 1.21850 1.22541 +/- 0.00237\n", - " 52/1 1.22833 1.22548 +/- 0.00232\n", - " 53/1 1.20239 1.22494 +/- 0.00233\n", - " 54/1 1.24876 1.22548 +/- 0.00234\n", - " 55/1 1.20670 1.22506 +/- 0.00232\n", - " 56/1 1.24260 1.22545 +/- 0.00230\n", - " 57/1 1.21039 1.22512 +/- 0.00228\n", - " 58/1 1.23929 1.22542 +/- 0.00225\n", - " 59/1 1.21357 1.22518 +/- 0.00221\n", - " 60/1 1.23456 1.22537 +/- 0.00218\n", - " 61/1 1.23963 1.22565 +/- 0.00215\n", - " 62/1 1.24020 1.22593 +/- 0.00213\n", - " 63/1 1.22325 1.22587 +/- 0.00209\n", - " 64/1 1.22070 1.22578 +/- 0.00205\n", - " 65/1 1.22423 1.22575 +/- 0.00201\n", - " 66/1 1.22973 1.22582 +/- 0.00198\n", - " 67/1 1.21842 1.22569 +/- 0.00195\n", - " 68/1 1.19552 1.22517 +/- 0.00198\n", - " 69/1 1.21475 1.22500 +/- 0.00196\n", - " 70/1 1.21888 1.22489 +/- 0.00193\n", - " 71/1 1.19720 1.22444 +/- 0.00195\n", - " 72/1 1.23770 1.22465 +/- 0.00193\n", - " 73/1 1.23894 1.22488 +/- 0.00191\n", - " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10050\n", - " The estimated number of batches is 74\n", - " 74/1 1.22437 1.22487 +/- 0.00188\n", - " Triggers satisfied for batch 74\n", - " Creating state point statepoint.074.h5...\n", + " 51/1 1.20071 1.22113 +/- 0.00228\n", + " 52/1 1.21423 1.22097 +/- 0.00223\n", + " 53/1 1.25595 1.22178 +/- 0.00233\n", + " 54/1 1.21806 1.22170 +/- 0.00227\n", + " 55/1 1.22911 1.22186 +/- 0.00223\n", + " 56/1 1.23054 1.22205 +/- 0.00219\n", + " 57/1 1.19384 1.22145 +/- 0.00222\n", + " 58/1 1.20625 1.22114 +/- 0.00220\n", + " 59/1 1.21977 1.22111 +/- 0.00216\n", + " 60/1 1.20813 1.22085 +/- 0.00213\n", + " 61/1 1.22077 1.22085 +/- 0.00209\n", + " 62/1 1.21956 1.22082 +/- 0.00205\n", + " 63/1 1.22360 1.22087 +/- 0.00201\n", + " 64/1 1.23955 1.22122 +/- 0.00200\n", + " 65/1 1.21143 1.22104 +/- 0.00197\n", + " 66/1 1.21791 1.22099 +/- 0.00194\n", + " Triggers unsatisfied, max unc./thresh. is 1.13207 for flux in tally 10050\n", + " The estimated number of batches is 82\n", + " 67/1 1.24897 1.22148 +/- 0.00196\n", + " 68/1 1.22221 1.22149 +/- 0.00193\n", + " 69/1 1.25627 1.22208 +/- 0.00199\n", + " 70/1 1.21493 1.22196 +/- 0.00196\n", + " 71/1 1.23406 1.22216 +/- 0.00193\n", + " 72/1 1.23842 1.22242 +/- 0.00192\n", + " 73/1 1.24542 1.22279 +/- 0.00193\n", + " 74/1 1.21314 1.22263 +/- 0.00190\n", + " 75/1 1.26484 1.22328 +/- 0.00198\n", + " 76/1 1.22243 1.22327 +/- 0.00195\n", + " 77/1 1.21865 1.22320 +/- 0.00192\n", + " 78/1 1.23500 1.22338 +/- 0.00190\n", + " 79/1 1.22125 1.22334 +/- 0.00187\n", + " 80/1 1.23793 1.22355 +/- 0.00186\n", + " 81/1 1.24238 1.22382 +/- 0.00185\n", + " 82/1 1.23493 1.22397 +/- 0.00183\n", + " Triggers satisfied for batch 82\n", + " Creating state point statepoint.082.h5...\n", "\n", " ===========================================================================\n", " ======================> SIMULATION FINISHED <======================\n", @@ -570,27 +579,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.4833E-01 seconds\n", - " Reading cross sections = 2.2326E-01 seconds\n", - " Total time in simulation = 3.0446E+01 seconds\n", - " Time in transport only = 2.9495E+01 seconds\n", - " Time in inactive batches = 1.6469E+00 seconds\n", - " Time in active batches = 2.8800E+01 seconds\n", - " Time synchronizing fission bank = 1.5962E-02 seconds\n", - " Sampling source sites = 1.1235E-02 seconds\n", - " SEND/RECV source sites = 4.6646E-03 seconds\n", - " Time accumulating tallies = 4.9838E-04 seconds\n", - " Total time for finalization = 1.5461E-02 seconds\n", - " Total time elapsed = 3.0842E+01 seconds\n", - " Calculation Rate (inactive) = 60719.1 neutrons/second\n", - " Calculation Rate (active) = 13889.1 neutrons/second\n", + " Total time for initialization = 3.2089E-01 seconds\n", + " Reading cross sections = 2.2960E-01 seconds\n", + " Total time in simulation = 3.1332E+01 seconds\n", + " Time in transport only = 3.1007E+01 seconds\n", + " Time in inactive batches = 1.6660E+00 seconds\n", + " Time in active batches = 2.9666E+01 seconds\n", + " Time synchronizing fission bank = 1.7043E-02 seconds\n", + " Sampling source sites = 1.1813E-02 seconds\n", + " SEND/RECV source sites = 5.1688E-03 seconds\n", + " Time accumulating tallies = 5.0509E-04 seconds\n", + " Total time for finalization = 1.6880E-02 seconds\n", + " Total time elapsed = 3.1699E+01 seconds\n", + " Calculation Rate (inactive) = 60024.2 neutrons/second\n", + " Calculation Rate (active) = 13483.6 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.22358 +/- 0.00179\n", - " k-effective (Track-length) = 1.22487 +/- 0.00188\n", - " k-effective (Absorption) = 1.22300 +/- 0.00114\n", - " Combined k-effective = 1.22347 +/- 0.00106\n", + " k-effective (Collision) = 1.22348 +/- 0.00169\n", + " k-effective (Track-length) = 1.22397 +/- 0.00183\n", + " k-effective (Absorption) = 1.22467 +/- 0.00117\n", + " Combined k-effective = 1.22448 +/- 0.00108\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -634,7 +643,7 @@ "outputs": [], "source": [ "# Load the last statepoint file\n", - "sp = openmc.StatePoint('statepoint.074.h5')" + "sp = openmc.StatePoint('statepoint.082.h5')" ] }, { @@ -696,25 +705,25 @@ "\tDomain ID =\t10000\n", "\tNuclide =\tU235\n", "\tCross Sections [barns]:\n", - " Group 1 [821000.0 - 20000000.0eV]:\t3.30e+00 +/- 2.19e-01%\n", - " Group 2 [5530.0 - 821000.0 eV]:\t3.96e+00 +/- 1.32e-01%\n", - " Group 3 [4.0 - 5530.0 eV]:\t5.52e+01 +/- 2.31e-01%\n", - " Group 4 [0.625 - 4.0 eV]:\t8.83e+01 +/- 2.96e-01%\n", - " Group 5 [0.28 - 0.625 eV]:\t2.90e+02 +/- 4.64e-01%\n", - " Group 6 [0.14 - 0.28 eV]:\t4.49e+02 +/- 4.22e-01%\n", - " Group 7 [0.058 - 0.14 eV]:\t6.87e+02 +/- 2.97e-01%\n", - " Group 8 [0.0 - 0.058 eV]:\t1.44e+03 +/- 2.91e-01%\n", + " Group 1 [821000.0 - 20000000.0eV]:\t3.30e+00 +/- 2.14e-01%\n", + " Group 2 [5530.0 - 821000.0 eV]:\t3.96e+00 +/- 1.33e-01%\n", + " Group 3 [4.0 - 5530.0 eV]:\t5.50e+01 +/- 2.29e-01%\n", + " Group 4 [0.625 - 4.0 eV]:\t8.85e+01 +/- 3.10e-01%\n", + " Group 5 [0.28 - 0.625 eV]:\t2.90e+02 +/- 3.94e-01%\n", + " Group 6 [0.14 - 0.28 eV]:\t4.49e+02 +/- 4.12e-01%\n", + " Group 7 [0.058 - 0.14 eV]:\t6.87e+02 +/- 3.01e-01%\n", + " Group 8 [0.0 - 0.058 eV]:\t1.44e+03 +/- 2.79e-01%\n", "\n", "\tNuclide =\tU238\n", "\tCross Sections [barns]:\n", - " Group 1 [821000.0 - 20000000.0eV]:\t1.06e+00 +/- 2.56e-01%\n", - " Group 2 [5530.0 - 821000.0 eV]:\t1.21e-03 +/- 2.55e-01%\n", - " Group 3 [4.0 - 5530.0 eV]:\t5.77e-04 +/- 3.67e+00%\n", - " Group 4 [0.625 - 4.0 eV]:\t6.54e-06 +/- 2.74e-01%\n", - " Group 5 [0.28 - 0.625 eV]:\t1.07e-05 +/- 4.55e-01%\n", - " Group 6 [0.14 - 0.28 eV]:\t1.55e-05 +/- 4.25e-01%\n", - " Group 7 [0.058 - 0.14 eV]:\t2.30e-05 +/- 2.97e-01%\n", - " Group 8 [0.0 - 0.058 eV]:\t4.24e-05 +/- 2.90e-01%\n", + " Group 1 [821000.0 - 20000000.0eV]:\t1.06e+00 +/- 2.53e-01%\n", + " Group 2 [5530.0 - 821000.0 eV]:\t1.21e-03 +/- 2.60e-01%\n", + " Group 3 [4.0 - 5530.0 eV]:\t5.73e-04 +/- 2.93e+00%\n", + " Group 4 [0.625 - 4.0 eV]:\t6.54e-06 +/- 2.72e-01%\n", + " Group 5 [0.28 - 0.625 eV]:\t1.07e-05 +/- 3.83e-01%\n", + " Group 6 [0.14 - 0.28 eV]:\t1.55e-05 +/- 4.13e-01%\n", + " Group 7 [0.058 - 0.14 eV]:\t2.30e-05 +/- 3.01e-01%\n", + " Group 8 [0.0 - 0.058 eV]:\t4.24e-05 +/- 2.79e-01%\n", "\n", "\n", "\n" @@ -757,14 +766,14 @@ "\tDomain Type =\tcell\n", "\tDomain ID =\t10000\n", "\tCross Sections [cm^-1]:\n", - " Group 1 [821000.0 - 20000000.0eV]:\t2.52e-02 +/- 2.44e-01%\n", - " Group 2 [5530.0 - 821000.0 eV]:\t1.51e-03 +/- 1.30e-01%\n", - " Group 3 [4.0 - 5530.0 eV]:\t2.07e-02 +/- 2.31e-01%\n", - " Group 4 [0.625 - 4.0 eV]:\t3.31e-02 +/- 2.96e-01%\n", - " Group 5 [0.28 - 0.625 eV]:\t1.09e-01 +/- 4.64e-01%\n", - " Group 6 [0.14 - 0.28 eV]:\t1.69e-01 +/- 4.22e-01%\n", - " Group 7 [0.058 - 0.14 eV]:\t2.58e-01 +/- 2.97e-01%\n", - " Group 8 [0.0 - 0.058 eV]:\t5.40e-01 +/- 2.91e-01%\n", + " Group 1 [821000.0 - 20000000.0eV]:\t2.52e-02 +/- 2.41e-01%\n", + " Group 2 [5530.0 - 821000.0 eV]:\t1.51e-03 +/- 1.31e-01%\n", + " Group 3 [4.0 - 5530.0 eV]:\t2.07e-02 +/- 2.29e-01%\n", + " Group 4 [0.625 - 4.0 eV]:\t3.32e-02 +/- 3.10e-01%\n", + " Group 5 [0.28 - 0.625 eV]:\t1.09e-01 +/- 3.94e-01%\n", + " Group 6 [0.14 - 0.28 eV]:\t1.69e-01 +/- 4.12e-01%\n", + " Group 7 [0.058 - 0.14 eV]:\t2.58e-01 +/- 3.01e-01%\n", + " Group 8 [0.0 - 0.058 eV]:\t5.40e-01 +/- 2.79e-01%\n", "\n", "\n", "\n" @@ -821,8 +830,8 @@ " 1\n", " 1\n", " H1\n", - " 0.234115\n", - " 0.003568\n", + " 0.233991\n", + " 0.003752\n", " \n", " \n", " 127\n", @@ -830,8 +839,8 @@ " 1\n", " 1\n", " O16\n", - " 1.563707\n", - " 0.005953\n", + " 1.569288\n", + " 0.006360\n", " \n", " \n", " 124\n", @@ -839,8 +848,8 @@ " 1\n", " 2\n", " H1\n", - " 1.594129\n", - " 0.002369\n", + " 1.587279\n", + " 0.003098\n", " \n", " \n", " 125\n", @@ -848,8 +857,8 @@ " 1\n", " 2\n", " O16\n", - " 0.285761\n", - " 0.001676\n", + " 0.285599\n", + " 0.001422\n", " \n", " \n", " 122\n", @@ -857,8 +866,8 @@ " 1\n", " 3\n", " H1\n", - " 0.011089\n", - " 0.000248\n", + " 0.010482\n", + " 0.000220\n", " \n", " \n", " 123\n", @@ -875,8 +884,8 @@ " 1\n", " 4\n", " H1\n", - " 0.000000\n", - " 0.000000\n", + " 0.000009\n", + " 0.000006\n", " \n", " \n", " 121\n", @@ -893,8 +902,8 @@ " 1\n", " 5\n", " H1\n", - " 0.000000\n", - " 0.000000\n", + " 0.000005\n", + " 0.000005\n", " \n", " \n", " 119\n", @@ -911,15 +920,15 @@ ], "text/plain": [ " cell group in group out nuclide mean std. dev.\n", - "126 10002 1 1 H1 0.234115 0.003568\n", - "127 10002 1 1 O16 1.563707 0.005953\n", - "124 10002 1 2 H1 1.594129 0.002369\n", - "125 10002 1 2 O16 0.285761 0.001676\n", - "122 10002 1 3 H1 0.011089 0.000248\n", + "126 10002 1 1 H1 0.233991 0.003752\n", + "127 10002 1 1 O16 1.569288 0.006360\n", + "124 10002 1 2 H1 1.587279 0.003098\n", + "125 10002 1 2 O16 0.285599 0.001422\n", + "122 10002 1 3 H1 0.010482 0.000220\n", "123 10002 1 3 O16 0.000000 0.000000\n", - "120 10002 1 4 H1 0.000000 0.000000\n", + "120 10002 1 4 H1 0.000009 0.000006\n", "121 10002 1 4 O16 0.000000 0.000000\n", - "118 10002 1 5 H1 0.000000 0.000000\n", + "118 10002 1 5 H1 0.000005 0.000005\n", "119 10002 1 5 O16 0.000000 0.000000" ] }, @@ -980,18 +989,18 @@ "\tDomain ID =\t10000\n", "\tNuclide =\tU235\n", "\tCross Sections [cm^-1]:\n", - " Group 1 [0.625 - 20000000.0eV]:\t7.73e-03 +/- 5.06e-01%\n", - " Group 2 [0.0 - 0.625 eV]:\t1.82e-01 +/- 2.05e-01%\n", + " Group 1 [0.625 - 20000000.0eV]:\t7.84e-03 +/- 4.34e-01%\n", + " Group 2 [0.0 - 0.625 eV]:\t1.82e-01 +/- 1.91e-01%\n", "\n", "\tNuclide =\tU238\n", "\tCross Sections [cm^-1]:\n", - " Group 1 [0.625 - 20000000.0eV]:\t2.17e-01 +/- 1.44e-01%\n", - " Group 2 [0.0 - 0.625 eV]:\t2.53e-01 +/- 2.57e-01%\n", + " Group 1 [0.625 - 20000000.0eV]:\t2.17e-01 +/- 1.38e-01%\n", + " Group 2 [0.0 - 0.625 eV]:\t2.53e-01 +/- 2.27e-01%\n", "\n", "\tNuclide =\tO16\n", "\tCross Sections [cm^-1]:\n", - " Group 1 [0.625 - 20000000.0eV]:\t1.46e-01 +/- 1.60e-01%\n", - " Group 2 [0.0 - 0.625 eV]:\t1.75e-01 +/- 2.94e-01%\n", + " Group 1 [0.625 - 20000000.0eV]:\t1.45e-01 +/- 1.54e-01%\n", + " Group 2 [0.0 - 0.625 eV]:\t1.74e-01 +/- 2.60e-01%\n", "\n", "\n", "\n" @@ -1030,48 +1039,48 @@ " 10000\n", " 1\n", " U235\n", - " 20.611692\n", - " 0.104237\n", + " 20.912730\n", + " 0.090857\n", " \n", " \n", " 4\n", " 10000\n", " 1\n", " U238\n", - " 9.585358\n", - " 0.013808\n", + " 9.577234\n", + " 0.013248\n", " \n", " \n", " 5\n", " 10000\n", " 1\n", " O16\n", - " 3.164190\n", - " 0.005049\n", + " 3.158619\n", + " 0.004864\n", " \n", " \n", " 0\n", " 10000\n", " 2\n", " U235\n", - " 485.413426\n", - " 0.996410\n", + " 485.364898\n", + " 0.925632\n", " \n", " \n", " 1\n", " 10000\n", " 2\n", " U238\n", - " 11.190386\n", - " 0.028731\n", + " 11.196946\n", + " 0.025466\n", " \n", " \n", " 2\n", " 10000\n", " 2\n", " O16\n", - " 3.794859\n", - " 0.011139\n", + " 3.788841\n", + " 0.009855\n", " \n", " \n", "\n", @@ -1079,12 +1088,12 @@ ], "text/plain": [ " cell group in nuclide mean std. dev.\n", - "3 10000 1 U235 20.611692 0.104237\n", - "4 10000 1 U238 9.585358 0.013808\n", - "5 10000 1 O16 3.164190 0.005049\n", - "0 10000 2 U235 485.413426 0.996410\n", - "1 10000 2 U238 11.190386 0.028731\n", - "2 10000 2 O16 3.794859 0.011139" + "3 10000 1 U235 20.912730 0.090857\n", + "4 10000 1 U238 9.577234 0.013248\n", + "5 10000 1 O16 3.158619 0.004864\n", + "0 10000 2 U235 485.364898 0.925632\n", + "1 10000 2 U238 11.196946 0.025466\n", + "2 10000 2 O16 3.788841 0.009855" ] }, "execution_count": 22, @@ -1119,8 +1128,9 @@ }, "outputs": [], "source": [ - "# Create an OpenMOC Geometry from the OpenCG Geometry\n", - "openmoc_geometry = get_openmoc_geometry(sp.summary.opencg_geometry)" + "# Create an OpenMOC Geometry from an equivalent OpenCG Geometry\n", + "opencg_geometry = get_opencg_geometry(sp.summary.geometry)\n", + "openmoc_geometry = get_openmoc_geometry(opencg_geometry)" ] }, { @@ -1201,239 +1211,239 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.423123\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.475922\tres = 5.769E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.491444\tres = 1.248E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.487441\tres = 3.261E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.483949\tres = 8.144E-03\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.477326\tres = 7.164E-03\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.469012\tres = 1.369E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.460422\tres = 1.742E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.450721\tres = 1.832E-02\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.441532\tres = 2.107E-02\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.432168\tres = 2.039E-02\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.423131\tres = 2.121E-02\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.414705\tres = 2.091E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.406943\tres = 1.991E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.399627\tres = 1.872E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.393329\tres = 1.798E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.387699\tres = 1.576E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.382949\tres = 1.431E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.379028\tres = 1.225E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.375935\tres = 1.024E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.373785\tres = 8.161E-03\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.372655\tres = 5.719E-03\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.372273\tres = 3.023E-03\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.372879\tres = 1.024E-03\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.374353\tres = 1.629E-03\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.376678\tres = 3.952E-03\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.379854\tres = 6.211E-03\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.383870\tres = 8.433E-03\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.388664\tres = 1.057E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.394216\tres = 1.249E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.400506\tres = 1.429E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.407502\tres = 1.596E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.415145\tres = 1.747E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.423426\tres = 1.876E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.432299\tres = 1.995E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.441713\tres = 2.095E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.451665\tres = 2.178E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.462081\tres = 2.253E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.472952\tres = 2.306E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.484221\tres = 2.352E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.495862\tres = 2.383E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.507836\tres = 2.404E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.520110\tres = 2.415E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.532648\tres = 2.417E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.545419\tres = 2.411E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.558389\tres = 2.398E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.571526\tres = 2.378E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.584803\tres = 2.353E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.598190\tres = 2.323E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.611658\tres = 2.289E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.625182\tres = 2.252E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.638739\tres = 2.211E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.652303\tres = 2.168E-02\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.665851\tres = 2.124E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.679365\tres = 2.077E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.692822\tres = 2.030E-02\n", - "[ NORMAL ] Iteration 56:\tk_eff = 0.706205\tres = 1.981E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 0.719497\tres = 1.932E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 0.732680\tres = 1.882E-02\n", - "[ NORMAL ] Iteration 59:\tk_eff = 0.745741\tres = 1.832E-02\n", - "[ NORMAL ] Iteration 60:\tk_eff = 0.758665\tres = 1.783E-02\n", - "[ NORMAL ] Iteration 61:\tk_eff = 0.771440\tres = 1.733E-02\n", - "[ NORMAL ] Iteration 62:\tk_eff = 0.784054\tres = 1.684E-02\n", - "[ NORMAL ] Iteration 63:\tk_eff = 0.796496\tres = 1.635E-02\n", - "[ NORMAL ] Iteration 64:\tk_eff = 0.808757\tres = 1.587E-02\n", - "[ NORMAL ] Iteration 65:\tk_eff = 0.820828\tres = 1.539E-02\n", - "[ NORMAL ] Iteration 66:\tk_eff = 0.832701\tres = 1.493E-02\n", - "[ NORMAL ] Iteration 67:\tk_eff = 0.844370\tres = 1.446E-02\n", - "[ NORMAL ] Iteration 68:\tk_eff = 0.855828\tres = 1.401E-02\n", - "[ NORMAL ] Iteration 69:\tk_eff = 0.867071\tres = 1.357E-02\n", - "[ NORMAL ] Iteration 70:\tk_eff = 0.878094\tres = 1.314E-02\n", - "[ NORMAL ] Iteration 71:\tk_eff = 0.888893\tres = 1.271E-02\n", - "[ NORMAL ] Iteration 72:\tk_eff = 0.899465\tres = 1.230E-02\n", - "[ NORMAL ] Iteration 73:\tk_eff = 0.909808\tres = 1.189E-02\n", - "[ NORMAL ] Iteration 74:\tk_eff = 0.919919\tres = 1.150E-02\n", - "[ NORMAL ] Iteration 75:\tk_eff = 0.929799\tres = 1.111E-02\n", - "[ NORMAL ] Iteration 76:\tk_eff = 0.939445\tres = 1.074E-02\n", - "[ NORMAL ] Iteration 77:\tk_eff = 0.948857\tres = 1.037E-02\n", - "[ NORMAL ] Iteration 78:\tk_eff = 0.958037\tres = 1.002E-02\n", - "[ NORMAL ] Iteration 79:\tk_eff = 0.966984\tres = 9.675E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 0.975699\tres = 9.339E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 0.984185\tres = 9.012E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 0.992442\tres = 8.697E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.000473\tres = 8.390E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.008281\tres = 8.092E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.015867\tres = 7.804E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.023234\tres = 7.524E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.030387\tres = 7.253E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.037327\tres = 6.990E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.044059\tres = 6.736E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.050586\tres = 6.489E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.056911\tres = 6.251E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.063039\tres = 6.021E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.068972\tres = 5.798E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.074717\tres = 5.582E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.080275\tres = 5.373E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.085652\tres = 5.172E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.090851\tres = 4.977E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.095877\tres = 4.789E-03\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.100733\tres = 4.607E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.105424\tres = 4.432E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.109955\tres = 4.262E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.114329\tres = 4.098E-03\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.118550\tres = 3.941E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.122623\tres = 3.789E-03\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.126552\tres = 3.641E-03\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.130340\tres = 3.499E-03\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.133992\tres = 3.362E-03\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.137511\tres = 3.231E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.140902\tres = 3.103E-03\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.144169\tres = 2.981E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.147314\tres = 2.863E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.150342\tres = 2.750E-03\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.153257\tres = 2.639E-03\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.156062\tres = 2.534E-03\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.158761\tres = 2.432E-03\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.161357\tres = 2.334E-03\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.163854\tres = 2.240E-03\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.166253\tres = 2.150E-03\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.168560\tres = 2.062E-03\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.170777\tres = 1.978E-03\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.172907\tres = 1.897E-03\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.174953\tres = 1.819E-03\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.176918\tres = 1.745E-03\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.178805\tres = 1.672E-03\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.180617\tres = 1.603E-03\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.182356\tres = 1.537E-03\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.184025\tres = 1.473E-03\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.185626\tres = 1.412E-03\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.187163\tres = 1.352E-03\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.188637\tres = 1.296E-03\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.190050\tres = 1.241E-03\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.191406\tres = 1.189E-03\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.192704\tres = 1.139E-03\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.193949\tres = 1.090E-03\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.195144\tres = 1.044E-03\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.196287\tres = 1.001E-03\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.197383\tres = 9.567E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.198433\tres = 9.157E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.199438\tres = 8.775E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.200401\tres = 8.388E-04\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.201324\tres = 8.030E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.202206\tres = 7.682E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.203051\tres = 7.348E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.203860\tres = 7.028E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.204634\tres = 6.722E-04\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.205375\tres = 6.429E-04\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.206084\tres = 6.153E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.206762\tres = 5.883E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.207411\tres = 5.617E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.208031\tres = 5.377E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.208623\tres = 5.137E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.209191\tres = 4.906E-04\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.209733\tres = 4.694E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.210251\tres = 4.486E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.210747\tres = 4.280E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.211220\tres = 4.098E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.211673\tres = 3.908E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.212105\tres = 3.738E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.212518\tres = 3.567E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.212913\tres = 3.409E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.213290\tres = 3.260E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.213650\tres = 3.104E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.213995\tres = 2.965E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.214322\tres = 2.838E-04\n", - "[ NORMAL ] Iteration 165:\tk_eff = 1.214637\tres = 2.701E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.214937\tres = 2.587E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.215222\tres = 2.469E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.215494\tres = 2.348E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.215755\tres = 2.242E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.216004\tres = 2.144E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.216241\tres = 2.048E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.216467\tres = 1.950E-04\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.216683\tres = 1.857E-04\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.216889\tres = 1.778E-04\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.217085\tres = 1.696E-04\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.217273\tres = 1.614E-04\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.217452\tres = 1.543E-04\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.217623\tres = 1.465E-04\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.217785\tres = 1.405E-04\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.217940\tres = 1.335E-04\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.218088\tres = 1.269E-04\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.218229\tres = 1.218E-04\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.218363\tres = 1.157E-04\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.218492\tres = 1.101E-04\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.218615\tres = 1.056E-04\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.218731\tres = 1.007E-04\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.218841\tres = 9.536E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.218947\tres = 9.039E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.219048\tres = 8.671E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.219144\tres = 8.281E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.219236\tres = 7.903E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.219323\tres = 7.535E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.219406\tres = 7.153E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.219485\tres = 6.803E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.219561\tres = 6.458E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.219633\tres = 6.195E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.219701\tres = 5.920E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.219766\tres = 5.593E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.219829\tres = 5.350E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.219887\tres = 5.127E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.219944\tres = 4.821E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.219998\tres = 4.617E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.220048\tres = 4.406E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.220097\tres = 4.167E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.220143\tres = 4.017E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.220188\tres = 3.759E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.220230\tres = 3.628E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.220270\tres = 3.429E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.220307\tres = 3.268E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.220343\tres = 3.102E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.220377\tres = 2.945E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.220410\tres = 2.801E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.220441\tres = 2.693E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.220470\tres = 2.516E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.220498\tres = 2.414E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.220525\tres = 2.300E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.220550\tres = 2.205E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.220575\tres = 2.056E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.220598\tres = 2.005E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.220620\tres = 1.878E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.220640\tres = 1.785E-05\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.220660\tres = 1.689E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.220679\tres = 1.624E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.220697\tres = 1.546E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.220714\tres = 1.473E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.220731\tres = 1.431E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.220747\tres = 1.359E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.220762\tres = 1.274E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.220776\tres = 1.210E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.220789\tres = 1.159E-05\n", - "[ NORMAL ] Iteration 231:\tk_eff = 1.220801\tres = 1.069E-05\n", - "[ NORMAL ] Iteration 232:\tk_eff = 1.220813\tres = 1.043E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.423140\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.475976\tres = 5.769E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.491509\tres = 1.249E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.487503\tres = 3.263E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.484002\tres = 8.150E-03\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.477365\tres = 7.181E-03\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.469036\tres = 1.371E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.460429\tres = 1.745E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.450711\tres = 1.835E-02\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.441506\tres = 2.111E-02\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.432127\tres = 2.042E-02\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.423076\tres = 2.124E-02\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.414637\tres = 2.095E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.406863\tres = 1.995E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.399537\tres = 1.875E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.393230\tres = 1.801E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.387592\tres = 1.579E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.382836\tres = 1.434E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.378910\tres = 1.227E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.375812\tres = 1.026E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.373658\tres = 8.176E-03\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.372526\tres = 5.730E-03\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.372142\tres = 3.031E-03\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.372747\tres = 1.030E-03\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.374220\tres = 1.627E-03\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.376545\tres = 3.951E-03\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.379722\tres = 6.213E-03\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.383738\tres = 8.437E-03\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.388532\tres = 1.058E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.394086\tres = 1.249E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.400378\tres = 1.429E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.407375\tres = 1.597E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.415020\tres = 1.747E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.423303\tres = 1.877E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.432177\tres = 1.996E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.441592\tres = 2.096E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.451546\tres = 2.179E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.461964\tres = 2.254E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.472835\tres = 2.307E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.484106\tres = 2.353E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.495748\tres = 2.384E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.507723\tres = 2.405E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.519997\tres = 2.416E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.532536\tres = 2.418E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.545307\tres = 2.411E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.558277\tres = 2.398E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.571414\tres = 2.379E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.584691\tres = 2.353E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.598077\tres = 2.323E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.611545\tres = 2.289E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.625068\tres = 2.252E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.638624\tres = 2.211E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.652187\tres = 2.169E-02\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.665734\tres = 2.124E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.679246\tres = 2.077E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.692702\tres = 2.030E-02\n", + "[ NORMAL ] Iteration 56:\tk_eff = 0.706083\tres = 1.981E-02\n", + "[ NORMAL ] Iteration 57:\tk_eff = 0.719373\tres = 1.932E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 0.732554\tres = 1.882E-02\n", + "[ NORMAL ] Iteration 59:\tk_eff = 0.745613\tres = 1.832E-02\n", + "[ NORMAL ] Iteration 60:\tk_eff = 0.758535\tres = 1.783E-02\n", + "[ NORMAL ] Iteration 61:\tk_eff = 0.771307\tres = 1.733E-02\n", + "[ NORMAL ] Iteration 62:\tk_eff = 0.783919\tres = 1.684E-02\n", + "[ NORMAL ] Iteration 63:\tk_eff = 0.796359\tres = 1.635E-02\n", + "[ NORMAL ] Iteration 64:\tk_eff = 0.808617\tres = 1.587E-02\n", + "[ NORMAL ] Iteration 65:\tk_eff = 0.820685\tres = 1.539E-02\n", + "[ NORMAL ] Iteration 66:\tk_eff = 0.832556\tres = 1.492E-02\n", + "[ NORMAL ] Iteration 67:\tk_eff = 0.844222\tres = 1.446E-02\n", + "[ NORMAL ] Iteration 68:\tk_eff = 0.855678\tres = 1.401E-02\n", + "[ NORMAL ] Iteration 69:\tk_eff = 0.866918\tres = 1.357E-02\n", + "[ NORMAL ] Iteration 70:\tk_eff = 0.877939\tres = 1.314E-02\n", + "[ NORMAL ] Iteration 71:\tk_eff = 0.888734\tres = 1.271E-02\n", + "[ NORMAL ] Iteration 72:\tk_eff = 0.899303\tres = 1.230E-02\n", + "[ NORMAL ] Iteration 73:\tk_eff = 0.909643\tres = 1.189E-02\n", + "[ NORMAL ] Iteration 74:\tk_eff = 0.919752\tres = 1.150E-02\n", + "[ NORMAL ] Iteration 75:\tk_eff = 0.929628\tres = 1.111E-02\n", + "[ NORMAL ] Iteration 76:\tk_eff = 0.939271\tres = 1.074E-02\n", + "[ NORMAL ] Iteration 77:\tk_eff = 0.948681\tres = 1.037E-02\n", + "[ NORMAL ] Iteration 78:\tk_eff = 0.957857\tres = 1.002E-02\n", + "[ NORMAL ] Iteration 79:\tk_eff = 0.966802\tres = 9.673E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 0.975514\tres = 9.338E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 0.983997\tres = 9.012E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 0.992252\tres = 8.696E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.000280\tres = 8.389E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.008085\tres = 8.091E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.015668\tres = 7.803E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.023034\tres = 7.522E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.030183\tres = 7.252E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.037121\tres = 6.989E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.043850\tres = 6.735E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.050374\tres = 6.488E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.056697\tres = 6.250E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.062823\tres = 6.020E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.068754\tres = 5.797E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.074496\tres = 5.581E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.080052\tres = 5.372E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.085427\tres = 5.171E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.090623\tres = 4.976E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.095647\tres = 4.788E-03\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.100501\tres = 4.606E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.105190\tres = 4.431E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.109719\tres = 4.261E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.114091\tres = 4.098E-03\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.118310\tres = 3.940E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.122382\tres = 3.787E-03\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.126308\tres = 3.640E-03\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.130095\tres = 3.498E-03\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.133745\tres = 3.362E-03\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.137262\tres = 3.230E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.140652\tres = 3.102E-03\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.143916\tres = 2.980E-03\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.147061\tres = 2.862E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.150087\tres = 2.749E-03\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.153001\tres = 2.638E-03\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.155805\tres = 2.534E-03\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.158502\tres = 2.432E-03\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.161096\tres = 2.333E-03\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.163591\tres = 2.239E-03\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.165989\tres = 2.149E-03\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.168295\tres = 2.061E-03\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.170511\tres = 1.978E-03\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.172640\tres = 1.896E-03\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.174685\tres = 1.819E-03\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.176649\tres = 1.744E-03\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.178535\tres = 1.672E-03\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.180345\tres = 1.603E-03\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.182083\tres = 1.536E-03\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.183751\tres = 1.473E-03\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.185352\tres = 1.411E-03\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.186888\tres = 1.352E-03\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.188360\tres = 1.295E-03\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.189772\tres = 1.241E-03\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.191127\tres = 1.189E-03\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.192425\tres = 1.138E-03\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.193670\tres = 1.090E-03\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.194863\tres = 1.044E-03\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.196006\tres = 9.995E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.197101\tres = 9.566E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.198150\tres = 9.162E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.199155\tres = 8.766E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.200116\tres = 8.384E-04\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.201038\tres = 8.017E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.201920\tres = 7.684E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.202765\tres = 7.343E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.203573\tres = 7.030E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.204347\tres = 6.718E-04\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.205087\tres = 6.424E-04\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.205796\tres = 6.147E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.206473\tres = 5.881E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.207122\tres = 5.614E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.207741\tres = 5.376E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.208334\tres = 5.136E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.208901\tres = 4.903E-04\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.209443\tres = 4.695E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.209961\tres = 4.482E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.210455\tres = 4.282E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.210928\tres = 4.088E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.211380\tres = 3.910E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.211813\tres = 3.730E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.212225\tres = 3.573E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.212620\tres = 3.403E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.212997\tres = 3.256E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.213356\tres = 3.107E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.213700\tres = 2.965E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.214028\tres = 2.829E-04\n", + "[ NORMAL ] Iteration 165:\tk_eff = 1.214341\tres = 2.706E-04\n", + "[ NORMAL ] Iteration 166:\tk_eff = 1.214640\tres = 2.581E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.214926\tres = 2.465E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.215199\tres = 2.352E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.215459\tres = 2.241E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.215707\tres = 2.144E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.215944\tres = 2.036E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.216170\tres = 1.952E-04\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.216386\tres = 1.854E-04\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.216592\tres = 1.780E-04\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.216788\tres = 1.689E-04\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.216976\tres = 1.615E-04\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.217154\tres = 1.545E-04\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.217325\tres = 1.462E-04\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.217487\tres = 1.400E-04\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.217642\tres = 1.336E-04\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.217789\tres = 1.271E-04\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.217931\tres = 1.212E-04\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.218065\tres = 1.160E-04\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.218193\tres = 1.102E-04\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.218315\tres = 1.054E-04\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.218431\tres = 9.964E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.218542\tres = 9.572E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.218647\tres = 9.081E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.218748\tres = 8.632E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.218844\tres = 8.232E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.218936\tres = 7.887E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.219023\tres = 7.563E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.219106\tres = 7.154E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.219185\tres = 6.778E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.219261\tres = 6.484E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.219333\tres = 6.207E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.219401\tres = 5.898E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.219466\tres = 5.590E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.219528\tres = 5.305E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.219587\tres = 5.076E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.219643\tres = 4.829E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.219696\tres = 4.595E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.219747\tres = 4.399E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.219796\tres = 4.161E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.219842\tres = 3.973E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.219886\tres = 3.781E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.219928\tres = 3.629E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.219968\tres = 3.451E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.220006\tres = 3.274E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.220042\tres = 3.108E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.220076\tres = 2.951E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.220108\tres = 2.785E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.220139\tres = 2.664E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.220169\tres = 2.518E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.220197\tres = 2.463E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.220224\tres = 2.318E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.220249\tres = 2.189E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.220273\tres = 2.075E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.220296\tres = 1.964E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.220318\tres = 1.922E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.220339\tres = 1.776E-05\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.220358\tres = 1.701E-05\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.220377\tres = 1.615E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.220395\tres = 1.559E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.220412\tres = 1.443E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.220429\tres = 1.403E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.220444\tres = 1.354E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.220459\tres = 1.235E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.220472\tres = 1.204E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.220485\tres = 1.135E-05\n", + "[ NORMAL ] Iteration 231:\tk_eff = 1.220498\tres = 1.085E-05\n", + "[ NORMAL ] Iteration 232:\tk_eff = 1.220510\tres = 1.022E-05\n" ] } ], @@ -1465,9 +1475,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "openmc keff = 1.223474\n", - "openmoc keff = 1.220813\n", - "bias [pcm]: -266.0\n" + "openmc keff = 1.224484\n", + "openmoc keff = 1.220510\n", + "bias [pcm]: -397.4\n" ] } ], @@ -1510,7 +1520,8 @@ } ], "source": [ - "openmoc_geometry = get_openmoc_geometry(sp.summary.opencg_geometry)\n", + "opencg_geometry = get_opencg_geometry(sp.summary.geometry)\n", + "openmoc_geometry = get_openmoc_geometry(opencg_geometry)\n", "openmoc_cells = openmoc_geometry.getRootUniverse().getAllCells()\n", "\n", "# Inject multi-group cross sections into OpenMOC Materials\n", @@ -1555,347 +1566,347 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.366907\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.391217\tres = 6.331E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.393027\tres = 6.626E-02\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.381142\tres = 4.627E-03\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.375065\tres = 3.024E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.369644\tres = 1.594E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.365597\tres = 1.445E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.363111\tres = 1.095E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.361532\tres = 6.802E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.361339\tres = 4.349E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.362062\tres = 5.320E-04\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.363777\tres = 2.001E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.366396\tres = 4.735E-03\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.369859\tres = 7.199E-03\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.374042\tres = 9.454E-03\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.378972\tres = 1.131E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.384524\tres = 1.318E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.390678\tres = 1.465E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.397373\tres = 1.600E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.404563\tres = 1.714E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.412208\tres = 1.809E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.420270\tres = 1.890E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.428695\tres = 1.956E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.437463\tres = 2.005E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.446530\tres = 2.045E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.455867\tres = 2.073E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.465443\tres = 2.091E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.475229\tres = 2.101E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.485199\tres = 2.103E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.495328\tres = 2.098E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.505592\tres = 2.088E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.515970\tres = 2.072E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.526441\tres = 2.053E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.536986\tres = 2.029E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.547587\tres = 2.003E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.558228\tres = 1.974E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.568894\tres = 1.943E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.579570\tres = 1.911E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.590242\tres = 1.877E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.600898\tres = 1.841E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.611527\tres = 1.805E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.622119\tres = 1.769E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.632663\tres = 1.732E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.643149\tres = 1.695E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.653571\tres = 1.658E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.663920\tres = 1.620E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.674190\tres = 1.583E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.684373\tres = 1.547E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.694464\tres = 1.510E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.704458\tres = 1.475E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.714349\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.724134\tres = 1.404E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.733809\tres = 1.370E-02\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.743369\tres = 1.336E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.752812\tres = 1.303E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.762135\tres = 1.270E-02\n", - "[ NORMAL ] Iteration 56:\tk_eff = 0.771336\tres = 1.238E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 0.780412\tres = 1.207E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 0.789363\tres = 1.177E-02\n", - "[ NORMAL ] Iteration 59:\tk_eff = 0.798184\tres = 1.147E-02\n", - "[ NORMAL ] Iteration 60:\tk_eff = 0.806878\tres = 1.118E-02\n", - "[ NORMAL ] Iteration 61:\tk_eff = 0.815440\tres = 1.089E-02\n", - "[ NORMAL ] Iteration 62:\tk_eff = 0.823872\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 63:\tk_eff = 0.832173\tres = 1.034E-02\n", - "[ NORMAL ] Iteration 64:\tk_eff = 0.840341\tres = 1.007E-02\n", - "[ NORMAL ] Iteration 65:\tk_eff = 0.848378\tres = 9.816E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 0.856281\tres = 9.563E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 0.864053\tres = 9.316E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 0.871694\tres = 9.076E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 0.879202\tres = 8.842E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 0.886580\tres = 8.614E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 0.893828\tres = 8.392E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 0.900946\tres = 8.175E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 0.907936\tres = 7.964E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 0.914798\tres = 7.758E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 0.921534\tres = 7.558E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 0.928144\tres = 7.363E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 0.934630\tres = 7.173E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 0.940992\tres = 6.988E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 0.947233\tres = 6.807E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 0.953353\tres = 6.633E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 0.959355\tres = 6.461E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 0.965239\tres = 6.295E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 0.971007\tres = 6.133E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 0.976660\tres = 5.975E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 0.982199\tres = 5.822E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 0.987627\tres = 5.672E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 0.992946\tres = 5.526E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 0.998156\tres = 5.385E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.003259\tres = 5.247E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.008257\tres = 5.113E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.013151\tres = 4.982E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.017944\tres = 4.854E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.022636\tres = 4.730E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.027230\tres = 4.609E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.031726\tres = 4.492E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.036126\tres = 4.377E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.040434\tres = 4.265E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.044649\tres = 4.157E-03\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.048774\tres = 4.052E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.052810\tres = 3.949E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.056758\tres = 3.848E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.060621\tres = 3.751E-03\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.064400\tres = 3.655E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.068096\tres = 3.563E-03\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.071711\tres = 3.472E-03\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.075247\tres = 3.384E-03\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.078705\tres = 3.299E-03\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.082086\tres = 3.216E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.085392\tres = 3.135E-03\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.088624\tres = 3.056E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.091784\tres = 2.977E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.094875\tres = 2.903E-03\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.097895\tres = 2.831E-03\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.100847\tres = 2.759E-03\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.103734\tres = 2.689E-03\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.106555\tres = 2.622E-03\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.109312\tres = 2.556E-03\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.112007\tres = 2.492E-03\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.114640\tres = 2.429E-03\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.117214\tres = 2.368E-03\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.119728\tres = 2.309E-03\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.122186\tres = 2.251E-03\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.124587\tres = 2.195E-03\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.126934\tres = 2.140E-03\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.129226\tres = 2.086E-03\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.131465\tres = 2.034E-03\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.133653\tres = 1.983E-03\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.135791\tres = 1.934E-03\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.137879\tres = 1.886E-03\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.139918\tres = 1.839E-03\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.141911\tres = 1.792E-03\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.143857\tres = 1.748E-03\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.145758\tres = 1.704E-03\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.147615\tres = 1.662E-03\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.149428\tres = 1.621E-03\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.151199\tres = 1.580E-03\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.152929\tres = 1.541E-03\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.154618\tres = 1.503E-03\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.156268\tres = 1.465E-03\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.157878\tres = 1.429E-03\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.159452\tres = 1.393E-03\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.160988\tres = 1.359E-03\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.162488\tres = 1.325E-03\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.163953\tres = 1.292E-03\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.165384\tres = 1.261E-03\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.166780\tres = 1.229E-03\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.168144\tres = 1.198E-03\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.169476\tres = 1.169E-03\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.170776\tres = 1.140E-03\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.172045\tres = 1.111E-03\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.173284\tres = 1.084E-03\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.174493\tres = 1.057E-03\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.175674\tres = 1.031E-03\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.176828\tres = 1.005E-03\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.177953\tres = 9.813E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.179052\tres = 9.563E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.180125\tres = 9.324E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.181172\tres = 9.100E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.182194\tres = 8.877E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.183192\tres = 8.650E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.184167\tres = 8.445E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.185117\tres = 8.233E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.186045\tres = 8.028E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.186951\tres = 7.831E-04\n", - "[ NORMAL ] Iteration 165:\tk_eff = 1.187836\tres = 7.636E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.188699\tres = 7.452E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.189541\tres = 7.265E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.190363\tres = 7.087E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.191166\tres = 6.911E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.191949\tres = 6.742E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.192714\tres = 6.578E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.193460\tres = 6.414E-04\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.194188\tres = 6.255E-04\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.194899\tres = 6.097E-04\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.195593\tres = 5.957E-04\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.196270\tres = 5.807E-04\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.196931\tres = 5.660E-04\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.197576\tres = 5.523E-04\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.198204\tres = 5.389E-04\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.198819\tres = 5.250E-04\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.199418\tres = 5.125E-04\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.200003\tres = 5.002E-04\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.200574\tres = 4.878E-04\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.201131\tres = 4.760E-04\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.201674\tres = 4.637E-04\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.202206\tres = 4.523E-04\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.202724\tres = 4.421E-04\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.203229\tres = 4.306E-04\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.203722\tres = 4.200E-04\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.204203\tres = 4.099E-04\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.204673\tres = 3.998E-04\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.205131\tres = 3.903E-04\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.205578\tres = 3.802E-04\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.206014\tres = 3.706E-04\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.206440\tres = 3.618E-04\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.206855\tres = 3.530E-04\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.207261\tres = 3.443E-04\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.207657\tres = 3.359E-04\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.208043\tres = 3.282E-04\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.208419\tres = 3.196E-04\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.208787\tres = 3.116E-04\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.209145\tres = 3.039E-04\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.209495\tres = 2.962E-04\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.209836\tres = 2.895E-04\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.210170\tres = 2.824E-04\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.210495\tres = 2.756E-04\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.210812\tres = 2.687E-04\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.211122\tres = 2.619E-04\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.211423\tres = 2.559E-04\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.211718\tres = 2.491E-04\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.212006\tres = 2.430E-04\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.212286\tres = 2.376E-04\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.212560\tres = 2.313E-04\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.212827\tres = 2.257E-04\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.213088\tres = 2.203E-04\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.213341\tres = 2.149E-04\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.213590\tres = 2.092E-04\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.213831\tres = 2.047E-04\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.214068\tres = 1.990E-04\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.214298\tres = 1.945E-04\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.214523\tres = 1.900E-04\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.214743\tres = 1.850E-04\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.214956\tres = 1.807E-04\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.215166\tres = 1.760E-04\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.215370\tres = 1.724E-04\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.215569\tres = 1.677E-04\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.215762\tres = 1.637E-04\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.215951\tres = 1.595E-04\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.216136\tres = 1.554E-04\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.216316\tres = 1.518E-04\n", - "[ NORMAL ] Iteration 231:\tk_eff = 1.216492\tres = 1.479E-04\n", - "[ NORMAL ] Iteration 232:\tk_eff = 1.216663\tres = 1.446E-04\n", - "[ NORMAL ] Iteration 233:\tk_eff = 1.216831\tres = 1.411E-04\n", - "[ NORMAL ] Iteration 234:\tk_eff = 1.216994\tres = 1.377E-04\n", - "[ NORMAL ] Iteration 235:\tk_eff = 1.217153\tres = 1.341E-04\n", - "[ NORMAL ] Iteration 236:\tk_eff = 1.217309\tres = 1.307E-04\n", - "[ NORMAL ] Iteration 237:\tk_eff = 1.217461\tres = 1.279E-04\n", - "[ NORMAL ] Iteration 238:\tk_eff = 1.217608\tres = 1.246E-04\n", - "[ NORMAL ] Iteration 239:\tk_eff = 1.217752\tres = 1.215E-04\n", - "[ NORMAL ] Iteration 240:\tk_eff = 1.217893\tres = 1.183E-04\n", - "[ NORMAL ] Iteration 241:\tk_eff = 1.218031\tres = 1.156E-04\n", - "[ NORMAL ] Iteration 242:\tk_eff = 1.218165\tres = 1.129E-04\n", - "[ NORMAL ] Iteration 243:\tk_eff = 1.218296\tres = 1.104E-04\n", - "[ NORMAL ] Iteration 244:\tk_eff = 1.218423\tres = 1.072E-04\n", - "[ NORMAL ] Iteration 245:\tk_eff = 1.218548\tres = 1.045E-04\n", - "[ NORMAL ] Iteration 246:\tk_eff = 1.218669\tres = 1.024E-04\n", - "[ NORMAL ] Iteration 247:\tk_eff = 1.218788\tres = 9.969E-05\n", - "[ NORMAL ] Iteration 248:\tk_eff = 1.218903\tres = 9.716E-05\n", - "[ NORMAL ] Iteration 249:\tk_eff = 1.219016\tres = 9.478E-05\n", - "[ NORMAL ] Iteration 250:\tk_eff = 1.219126\tres = 9.241E-05\n", - "[ NORMAL ] Iteration 251:\tk_eff = 1.219233\tres = 9.028E-05\n", - "[ NORMAL ] Iteration 252:\tk_eff = 1.219338\tres = 8.820E-05\n", - "[ NORMAL ] Iteration 253:\tk_eff = 1.219440\tres = 8.585E-05\n", - "[ NORMAL ] Iteration 254:\tk_eff = 1.219540\tres = 8.383E-05\n", - "[ NORMAL ] Iteration 255:\tk_eff = 1.219638\tres = 8.191E-05\n", - "[ NORMAL ] Iteration 256:\tk_eff = 1.219732\tres = 8.000E-05\n", - "[ NORMAL ] Iteration 257:\tk_eff = 1.219825\tres = 7.789E-05\n", - "[ NORMAL ] Iteration 258:\tk_eff = 1.219915\tres = 7.582E-05\n", - "[ NORMAL ] Iteration 259:\tk_eff = 1.220003\tres = 7.393E-05\n", - "[ NORMAL ] Iteration 260:\tk_eff = 1.220089\tres = 7.210E-05\n", - "[ NORMAL ] Iteration 261:\tk_eff = 1.220173\tres = 7.026E-05\n", - "[ NORMAL ] Iteration 262:\tk_eff = 1.220255\tres = 6.882E-05\n", - "[ NORMAL ] Iteration 263:\tk_eff = 1.220335\tres = 6.737E-05\n", - "[ NORMAL ] Iteration 264:\tk_eff = 1.220412\tres = 6.552E-05\n", - "[ NORMAL ] Iteration 265:\tk_eff = 1.220488\tres = 6.380E-05\n", - "[ NORMAL ] Iteration 266:\tk_eff = 1.220562\tres = 6.221E-05\n", - "[ NORMAL ] Iteration 267:\tk_eff = 1.220635\tres = 6.069E-05\n", - "[ NORMAL ] Iteration 268:\tk_eff = 1.220705\tres = 5.922E-05\n", - "[ NORMAL ] Iteration 269:\tk_eff = 1.220774\tres = 5.778E-05\n", - "[ NORMAL ] Iteration 270:\tk_eff = 1.220842\tres = 5.661E-05\n", - "[ NORMAL ] Iteration 271:\tk_eff = 1.220907\tres = 5.519E-05\n", - "[ NORMAL ] Iteration 272:\tk_eff = 1.220971\tres = 5.373E-05\n", - "[ NORMAL ] Iteration 273:\tk_eff = 1.221033\tres = 5.234E-05\n", - "[ NORMAL ] Iteration 274:\tk_eff = 1.221094\tres = 5.116E-05\n", - "[ NORMAL ] Iteration 275:\tk_eff = 1.221153\tres = 4.958E-05\n", - "[ NORMAL ] Iteration 276:\tk_eff = 1.221211\tres = 4.859E-05\n", - "[ NORMAL ] Iteration 277:\tk_eff = 1.221268\tres = 4.726E-05\n", - "[ NORMAL ] Iteration 278:\tk_eff = 1.221323\tres = 4.630E-05\n", - "[ NORMAL ] Iteration 279:\tk_eff = 1.221377\tres = 4.510E-05\n", - "[ NORMAL ] Iteration 280:\tk_eff = 1.221429\tres = 4.409E-05\n", - "[ NORMAL ] Iteration 281:\tk_eff = 1.221481\tres = 4.282E-05\n", - "[ NORMAL ] Iteration 282:\tk_eff = 1.221531\tres = 4.223E-05\n", - "[ NORMAL ] Iteration 283:\tk_eff = 1.221579\tres = 4.097E-05\n", - "[ NORMAL ] Iteration 284:\tk_eff = 1.221627\tres = 3.991E-05\n", - "[ NORMAL ] Iteration 285:\tk_eff = 1.221673\tres = 3.900E-05\n", - "[ NORMAL ] Iteration 286:\tk_eff = 1.221719\tres = 3.805E-05\n", - "[ NORMAL ] Iteration 287:\tk_eff = 1.221763\tres = 3.705E-05\n", - "[ NORMAL ] Iteration 288:\tk_eff = 1.221806\tres = 3.605E-05\n", - "[ NORMAL ] Iteration 289:\tk_eff = 1.221848\tres = 3.540E-05\n", - "[ NORMAL ] Iteration 290:\tk_eff = 1.221889\tres = 3.451E-05\n", - "[ NORMAL ] Iteration 291:\tk_eff = 1.221929\tres = 3.361E-05\n", - "[ NORMAL ] Iteration 292:\tk_eff = 1.221968\tres = 3.264E-05\n", - "[ NORMAL ] Iteration 293:\tk_eff = 1.222006\tres = 3.194E-05\n", - "[ NORMAL ] Iteration 294:\tk_eff = 1.222043\tres = 3.100E-05\n", - "[ NORMAL ] Iteration 295:\tk_eff = 1.222079\tres = 3.021E-05\n", - "[ NORMAL ] Iteration 296:\tk_eff = 1.222114\tres = 2.963E-05\n", - "[ NORMAL ] Iteration 297:\tk_eff = 1.222149\tres = 2.899E-05\n", - "[ NORMAL ] Iteration 298:\tk_eff = 1.222183\tres = 2.802E-05\n", - "[ NORMAL ] Iteration 299:\tk_eff = 1.222216\tres = 2.767E-05\n", - "[ NORMAL ] Iteration 300:\tk_eff = 1.222248\tres = 2.667E-05\n", - "[ NORMAL ] Iteration 301:\tk_eff = 1.222279\tres = 2.625E-05\n", - "[ NORMAL ] Iteration 302:\tk_eff = 1.222309\tres = 2.557E-05\n", - "[ NORMAL ] Iteration 303:\tk_eff = 1.222339\tres = 2.475E-05\n", - "[ NORMAL ] Iteration 304:\tk_eff = 1.222368\tres = 2.429E-05\n", - "[ NORMAL ] Iteration 305:\tk_eff = 1.222396\tres = 2.362E-05\n", - "[ NORMAL ] Iteration 306:\tk_eff = 1.222423\tres = 2.316E-05\n", - "[ NORMAL ] Iteration 307:\tk_eff = 1.222450\tres = 2.258E-05\n", - "[ NORMAL ] Iteration 308:\tk_eff = 1.222476\tres = 2.210E-05\n", - "[ NORMAL ] Iteration 309:\tk_eff = 1.222502\tres = 2.143E-05\n", - "[ NORMAL ] Iteration 310:\tk_eff = 1.222527\tres = 2.108E-05\n", - "[ NORMAL ] Iteration 311:\tk_eff = 1.222551\tres = 2.047E-05\n", - "[ NORMAL ] Iteration 312:\tk_eff = 1.222575\tres = 1.989E-05\n", - "[ NORMAL ] Iteration 313:\tk_eff = 1.222598\tres = 1.935E-05\n", - "[ NORMAL ] Iteration 314:\tk_eff = 1.222621\tres = 1.921E-05\n", - "[ NORMAL ] Iteration 315:\tk_eff = 1.222643\tres = 1.851E-05\n", - "[ NORMAL ] Iteration 316:\tk_eff = 1.222665\tres = 1.815E-05\n", - "[ NORMAL ] Iteration 317:\tk_eff = 1.222686\tres = 1.771E-05\n", - "[ NORMAL ] Iteration 318:\tk_eff = 1.222707\tres = 1.734E-05\n", - "[ NORMAL ] Iteration 319:\tk_eff = 1.222727\tres = 1.689E-05\n", - "[ NORMAL ] Iteration 320:\tk_eff = 1.222746\tres = 1.648E-05\n", - "[ NORMAL ] Iteration 321:\tk_eff = 1.222766\tres = 1.591E-05\n", - "[ NORMAL ] Iteration 322:\tk_eff = 1.222784\tres = 1.559E-05\n", - "[ NORMAL ] Iteration 323:\tk_eff = 1.222802\tres = 1.522E-05\n", - "[ NORMAL ] Iteration 324:\tk_eff = 1.222820\tres = 1.491E-05\n", - "[ NORMAL ] Iteration 325:\tk_eff = 1.222837\tres = 1.449E-05\n", - "[ NORMAL ] Iteration 326:\tk_eff = 1.222854\tres = 1.405E-05\n", - "[ NORMAL ] Iteration 327:\tk_eff = 1.222870\tres = 1.371E-05\n", - "[ NORMAL ] Iteration 328:\tk_eff = 1.222886\tres = 1.337E-05\n", - "[ NORMAL ] Iteration 329:\tk_eff = 1.222902\tres = 1.321E-05\n", - "[ NORMAL ] Iteration 330:\tk_eff = 1.222917\tres = 1.281E-05\n", - "[ NORMAL ] Iteration 331:\tk_eff = 1.222932\tres = 1.247E-05\n", - "[ NORMAL ] Iteration 332:\tk_eff = 1.222947\tres = 1.215E-05\n", - "[ NORMAL ] Iteration 333:\tk_eff = 1.222961\tres = 1.201E-05\n", - "[ NORMAL ] Iteration 334:\tk_eff = 1.222975\tres = 1.163E-05\n", - "[ NORMAL ] Iteration 335:\tk_eff = 1.222988\tres = 1.122E-05\n", - "[ NORMAL ] Iteration 336:\tk_eff = 1.223001\tres = 1.090E-05\n", - "[ NORMAL ] Iteration 337:\tk_eff = 1.223014\tres = 1.070E-05\n", - "[ NORMAL ] Iteration 338:\tk_eff = 1.223027\tres = 1.047E-05\n", - "[ NORMAL ] Iteration 339:\tk_eff = 1.223039\tres = 1.015E-05\n", - "[ NORMAL ] Iteration 340:\tk_eff = 1.223051\tres = 1.002E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.366890\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.391200\tres = 6.331E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.393015\tres = 6.626E-02\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.381131\tres = 4.640E-03\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.375055\tres = 3.024E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.369635\tres = 1.594E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.365588\tres = 1.445E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.363102\tres = 1.095E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.361522\tres = 6.801E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.361329\tres = 4.350E-03\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.362052\tres = 5.337E-04\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.363766\tres = 2.000E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.366383\tres = 4.733E-03\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.369846\tres = 7.196E-03\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.374028\tres = 9.452E-03\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.378957\tres = 1.131E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.384508\tres = 1.318E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.390660\tres = 1.465E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.397354\tres = 1.600E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.404542\tres = 1.713E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.412186\tres = 1.809E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.420246\tres = 1.889E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.428671\tres = 1.956E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.437437\tres = 2.005E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.446503\tres = 2.045E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.455839\tres = 2.073E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.465413\tres = 2.091E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.475198\tres = 2.100E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.485167\tres = 2.103E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.495295\tres = 2.098E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.505558\tres = 2.087E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.515935\tres = 2.072E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.526405\tres = 2.053E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.536950\tres = 2.029E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.547551\tres = 2.003E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.558191\tres = 1.974E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.568856\tres = 1.943E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.579532\tres = 1.911E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.590203\tres = 1.877E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.600860\tres = 1.841E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.611489\tres = 1.806E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.622080\tres = 1.769E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.632623\tres = 1.732E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.643111\tres = 1.695E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.653533\tres = 1.658E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.663882\tres = 1.621E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.674152\tres = 1.584E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.684335\tres = 1.547E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.694427\tres = 1.511E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.704421\tres = 1.475E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.714313\tres = 1.439E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.724099\tres = 1.404E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.733774\tres = 1.370E-02\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.743335\tres = 1.336E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.752778\tres = 1.303E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.762103\tres = 1.270E-02\n", + "[ NORMAL ] Iteration 56:\tk_eff = 0.771304\tres = 1.239E-02\n", + "[ NORMAL ] Iteration 57:\tk_eff = 0.780382\tres = 1.207E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 0.789332\tres = 1.177E-02\n", + "[ NORMAL ] Iteration 59:\tk_eff = 0.798155\tres = 1.147E-02\n", + "[ NORMAL ] Iteration 60:\tk_eff = 0.806849\tres = 1.118E-02\n", + "[ NORMAL ] Iteration 61:\tk_eff = 0.815413\tres = 1.089E-02\n", + "[ NORMAL ] Iteration 62:\tk_eff = 0.823846\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 63:\tk_eff = 0.832147\tres = 1.034E-02\n", + "[ NORMAL ] Iteration 64:\tk_eff = 0.840316\tres = 1.008E-02\n", + "[ NORMAL ] Iteration 65:\tk_eff = 0.848354\tres = 9.817E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 0.856259\tres = 9.565E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 0.864033\tres = 9.318E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 0.871674\tres = 9.078E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 0.879184\tres = 8.844E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 0.886563\tres = 8.616E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 0.893812\tres = 8.393E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 0.900932\tres = 8.177E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 0.907923\tres = 7.965E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 0.914786\tres = 7.760E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 0.921523\tres = 7.560E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 0.928134\tres = 7.365E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 0.934621\tres = 7.174E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 0.940985\tres = 6.989E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 0.947227\tres = 6.809E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 0.953349\tres = 6.634E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 0.959352\tres = 6.463E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 0.965237\tres = 6.297E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 0.971006\tres = 6.134E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 0.976660\tres = 5.977E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 0.982201\tres = 5.823E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 0.987631\tres = 5.674E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 0.992950\tres = 5.528E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 0.998161\tres = 5.386E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.003266\tres = 5.248E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.008265\tres = 5.114E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.013161\tres = 4.983E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.017954\tres = 4.856E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.022648\tres = 4.731E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.027243\tres = 4.611E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.031741\tres = 4.493E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.036143\tres = 4.379E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.040452\tres = 4.267E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.044667\tres = 4.159E-03\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.048794\tres = 4.052E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.052831\tres = 3.950E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.056781\tres = 3.849E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.060645\tres = 3.752E-03\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.064425\tres = 3.656E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.068122\tres = 3.564E-03\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.071738\tres = 3.474E-03\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.075274\tres = 3.386E-03\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.078734\tres = 3.300E-03\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.082116\tres = 3.217E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.085423\tres = 3.136E-03\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.088657\tres = 3.056E-03\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.091818\tres = 2.980E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.094909\tres = 2.904E-03\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.097930\tres = 2.831E-03\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.100884\tres = 2.760E-03\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.103771\tres = 2.690E-03\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.106593\tres = 2.623E-03\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.109351\tres = 2.557E-03\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.112047\tres = 2.492E-03\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.114682\tres = 2.430E-03\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.117257\tres = 2.369E-03\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.119772\tres = 2.310E-03\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.122231\tres = 2.251E-03\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.124633\tres = 2.196E-03\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.126980\tres = 2.140E-03\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.129273\tres = 2.087E-03\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.131514\tres = 2.035E-03\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.133703\tres = 1.984E-03\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.135840\tres = 1.934E-03\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.137929\tres = 1.886E-03\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.139970\tres = 1.839E-03\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.141963\tres = 1.793E-03\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.143910\tres = 1.749E-03\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.145812\tres = 1.705E-03\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.147670\tres = 1.663E-03\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.149484\tres = 1.622E-03\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.151256\tres = 1.581E-03\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.152986\tres = 1.541E-03\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.154676\tres = 1.503E-03\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.156326\tres = 1.466E-03\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.157938\tres = 1.429E-03\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.159512\tres = 1.394E-03\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.161049\tres = 1.359E-03\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.162549\tres = 1.326E-03\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.164015\tres = 1.292E-03\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.165446\tres = 1.261E-03\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.166843\tres = 1.229E-03\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.168208\tres = 1.199E-03\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.169540\tres = 1.169E-03\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.170840\tres = 1.140E-03\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.172110\tres = 1.112E-03\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.173350\tres = 1.085E-03\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.174560\tres = 1.058E-03\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.175742\tres = 1.031E-03\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.176895\tres = 1.006E-03\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.178021\tres = 9.812E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.179121\tres = 9.567E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.180194\tres = 9.336E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.181242\tres = 9.100E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.182264\tres = 8.875E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.183264\tres = 8.656E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.184238\tres = 8.452E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.185189\tres = 8.233E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.186118\tres = 8.029E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.187024\tres = 7.839E-04\n", + "[ NORMAL ] Iteration 165:\tk_eff = 1.187908\tres = 7.641E-04\n", + "[ NORMAL ] Iteration 166:\tk_eff = 1.188772\tres = 7.449E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.189615\tres = 7.271E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.190438\tres = 7.093E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.191241\tres = 6.915E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.192024\tres = 6.742E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.192789\tres = 6.576E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.193536\tres = 6.419E-04\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.194265\tres = 6.263E-04\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.194976\tres = 6.104E-04\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.195670\tres = 5.955E-04\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.196347\tres = 5.806E-04\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.197008\tres = 5.665E-04\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.197653\tres = 5.525E-04\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.198284\tres = 5.388E-04\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.198898\tres = 5.263E-04\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.199498\tres = 5.126E-04\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.200083\tres = 5.000E-04\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.200654\tres = 4.880E-04\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.201212\tres = 4.757E-04\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.201756\tres = 4.647E-04\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.202286\tres = 4.528E-04\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.202804\tres = 4.414E-04\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.203310\tres = 4.310E-04\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.203803\tres = 4.203E-04\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.204285\tres = 4.100E-04\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.204755\tres = 4.003E-04\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.205214\tres = 3.902E-04\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.205661\tres = 3.810E-04\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.206097\tres = 3.711E-04\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.206523\tres = 3.617E-04\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.206939\tres = 3.528E-04\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.207345\tres = 3.447E-04\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.207740\tres = 3.363E-04\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.208127\tres = 3.281E-04\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.208503\tres = 3.198E-04\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.208871\tres = 3.119E-04\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.209230\tres = 3.041E-04\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.209580\tres = 2.968E-04\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.209921\tres = 2.897E-04\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.210255\tres = 2.824E-04\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.210580\tres = 2.759E-04\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.210898\tres = 2.688E-04\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.211208\tres = 2.622E-04\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.211510\tres = 2.563E-04\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.211804\tres = 2.495E-04\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.212092\tres = 2.428E-04\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.212373\tres = 2.374E-04\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.212647\tres = 2.318E-04\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.212914\tres = 2.258E-04\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.213175\tres = 2.200E-04\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.213429\tres = 2.153E-04\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.213678\tres = 2.097E-04\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.213920\tres = 2.049E-04\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.214156\tres = 1.996E-04\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.214387\tres = 1.945E-04\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.214612\tres = 1.904E-04\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.214832\tres = 1.853E-04\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.215046\tres = 1.806E-04\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.215255\tres = 1.762E-04\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.215459\tres = 1.722E-04\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.215658\tres = 1.676E-04\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.215852\tres = 1.637E-04\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.216041\tres = 1.597E-04\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.216226\tres = 1.557E-04\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.216407\tres = 1.520E-04\n", + "[ NORMAL ] Iteration 231:\tk_eff = 1.216582\tres = 1.483E-04\n", + "[ NORMAL ] Iteration 232:\tk_eff = 1.216754\tres = 1.444E-04\n", + "[ NORMAL ] Iteration 233:\tk_eff = 1.216921\tres = 1.409E-04\n", + "[ NORMAL ] Iteration 234:\tk_eff = 1.217084\tres = 1.376E-04\n", + "[ NORMAL ] Iteration 235:\tk_eff = 1.217244\tres = 1.344E-04\n", + "[ NORMAL ] Iteration 236:\tk_eff = 1.217399\tres = 1.309E-04\n", + "[ NORMAL ] Iteration 237:\tk_eff = 1.217551\tres = 1.274E-04\n", + "[ NORMAL ] Iteration 238:\tk_eff = 1.217699\tres = 1.247E-04\n", + "[ NORMAL ] Iteration 239:\tk_eff = 1.217843\tres = 1.216E-04\n", + "[ NORMAL ] Iteration 240:\tk_eff = 1.217983\tres = 1.184E-04\n", + "[ NORMAL ] Iteration 241:\tk_eff = 1.218121\tres = 1.154E-04\n", + "[ NORMAL ] Iteration 242:\tk_eff = 1.218255\tres = 1.131E-04\n", + "[ NORMAL ] Iteration 243:\tk_eff = 1.218386\tres = 1.101E-04\n", + "[ NORMAL ] Iteration 244:\tk_eff = 1.218514\tres = 1.075E-04\n", + "[ NORMAL ] Iteration 245:\tk_eff = 1.218639\tres = 1.048E-04\n", + "[ NORMAL ] Iteration 246:\tk_eff = 1.218760\tres = 1.024E-04\n", + "[ NORMAL ] Iteration 247:\tk_eff = 1.218879\tres = 9.989E-05\n", + "[ NORMAL ] Iteration 248:\tk_eff = 1.218994\tres = 9.739E-05\n", + "[ NORMAL ] Iteration 249:\tk_eff = 1.219107\tres = 9.487E-05\n", + "[ NORMAL ] Iteration 250:\tk_eff = 1.219217\tres = 9.257E-05\n", + "[ NORMAL ] Iteration 251:\tk_eff = 1.219324\tres = 9.035E-05\n", + "[ NORMAL ] Iteration 252:\tk_eff = 1.219429\tres = 8.803E-05\n", + "[ NORMAL ] Iteration 253:\tk_eff = 1.219531\tres = 8.599E-05\n", + "[ NORMAL ] Iteration 254:\tk_eff = 1.219631\tres = 8.364E-05\n", + "[ NORMAL ] Iteration 255:\tk_eff = 1.219728\tres = 8.175E-05\n", + "[ NORMAL ] Iteration 256:\tk_eff = 1.219823\tres = 7.971E-05\n", + "[ NORMAL ] Iteration 257:\tk_eff = 1.219916\tres = 7.776E-05\n", + "[ NORMAL ] Iteration 258:\tk_eff = 1.220006\tres = 7.582E-05\n", + "[ NORMAL ] Iteration 259:\tk_eff = 1.220094\tres = 7.438E-05\n", + "[ NORMAL ] Iteration 260:\tk_eff = 1.220181\tres = 7.227E-05\n", + "[ NORMAL ] Iteration 261:\tk_eff = 1.220264\tres = 7.058E-05\n", + "[ NORMAL ] Iteration 262:\tk_eff = 1.220346\tres = 6.872E-05\n", + "[ NORMAL ] Iteration 263:\tk_eff = 1.220426\tres = 6.695E-05\n", + "[ NORMAL ] Iteration 264:\tk_eff = 1.220504\tres = 6.549E-05\n", + "[ NORMAL ] Iteration 265:\tk_eff = 1.220580\tres = 6.375E-05\n", + "[ NORMAL ] Iteration 266:\tk_eff = 1.220654\tres = 6.240E-05\n", + "[ NORMAL ] Iteration 267:\tk_eff = 1.220726\tres = 6.073E-05\n", + "[ NORMAL ] Iteration 268:\tk_eff = 1.220797\tres = 5.942E-05\n", + "[ NORMAL ] Iteration 269:\tk_eff = 1.220866\tres = 5.792E-05\n", + "[ NORMAL ] Iteration 270:\tk_eff = 1.220933\tres = 5.661E-05\n", + "[ NORMAL ] Iteration 271:\tk_eff = 1.220999\tres = 5.501E-05\n", + "[ NORMAL ] Iteration 272:\tk_eff = 1.221063\tres = 5.368E-05\n", + "[ NORMAL ] Iteration 273:\tk_eff = 1.221125\tres = 5.286E-05\n", + "[ NORMAL ] Iteration 274:\tk_eff = 1.221187\tres = 5.103E-05\n", + "[ NORMAL ] Iteration 275:\tk_eff = 1.221246\tres = 5.013E-05\n", + "[ NORMAL ] Iteration 276:\tk_eff = 1.221304\tres = 4.861E-05\n", + "[ NORMAL ] Iteration 277:\tk_eff = 1.221360\tres = 4.737E-05\n", + "[ NORMAL ] Iteration 278:\tk_eff = 1.221416\tres = 4.629E-05\n", + "[ NORMAL ] Iteration 279:\tk_eff = 1.221470\tres = 4.515E-05\n", + "[ NORMAL ] Iteration 280:\tk_eff = 1.221522\tres = 4.417E-05\n", + "[ NORMAL ] Iteration 281:\tk_eff = 1.221574\tres = 4.309E-05\n", + "[ NORMAL ] Iteration 282:\tk_eff = 1.221624\tres = 4.219E-05\n", + "[ NORMAL ] Iteration 283:\tk_eff = 1.221673\tres = 4.099E-05\n", + "[ NORMAL ] Iteration 284:\tk_eff = 1.221721\tres = 3.998E-05\n", + "[ NORMAL ] Iteration 285:\tk_eff = 1.221767\tres = 3.891E-05\n", + "[ NORMAL ] Iteration 286:\tk_eff = 1.221812\tres = 3.781E-05\n", + "[ NORMAL ] Iteration 287:\tk_eff = 1.221857\tres = 3.698E-05\n", + "[ NORMAL ] Iteration 288:\tk_eff = 1.221900\tres = 3.633E-05\n", + "[ NORMAL ] Iteration 289:\tk_eff = 1.221942\tres = 3.535E-05\n", + "[ NORMAL ] Iteration 290:\tk_eff = 1.221983\tres = 3.445E-05\n", + "[ NORMAL ] Iteration 291:\tk_eff = 1.222023\tres = 3.355E-05\n", + "[ NORMAL ] Iteration 292:\tk_eff = 1.222062\tres = 3.281E-05\n", + "[ NORMAL ] Iteration 293:\tk_eff = 1.222100\tres = 3.203E-05\n", + "[ NORMAL ] Iteration 294:\tk_eff = 1.222138\tres = 3.108E-05\n", + "[ NORMAL ] Iteration 295:\tk_eff = 1.222174\tres = 3.049E-05\n", + "[ NORMAL ] Iteration 296:\tk_eff = 1.222209\tres = 2.969E-05\n", + "[ NORMAL ] Iteration 297:\tk_eff = 1.222244\tres = 2.902E-05\n", + "[ NORMAL ] Iteration 298:\tk_eff = 1.222278\tres = 2.820E-05\n", + "[ NORMAL ] Iteration 299:\tk_eff = 1.222310\tres = 2.747E-05\n", + "[ NORMAL ] Iteration 300:\tk_eff = 1.222342\tres = 2.679E-05\n", + "[ NORMAL ] Iteration 301:\tk_eff = 1.222374\tres = 2.626E-05\n", + "[ NORMAL ] Iteration 302:\tk_eff = 1.222404\tres = 2.554E-05\n", + "[ NORMAL ] Iteration 303:\tk_eff = 1.222434\tres = 2.483E-05\n", + "[ NORMAL ] Iteration 304:\tk_eff = 1.222463\tres = 2.432E-05\n", + "[ NORMAL ] Iteration 305:\tk_eff = 1.222492\tres = 2.387E-05\n", + "[ NORMAL ] Iteration 306:\tk_eff = 1.222519\tres = 2.316E-05\n", + "[ NORMAL ] Iteration 307:\tk_eff = 1.222546\tres = 2.274E-05\n", + "[ NORMAL ] Iteration 308:\tk_eff = 1.222573\tres = 2.220E-05\n", + "[ NORMAL ] Iteration 309:\tk_eff = 1.222599\tres = 2.168E-05\n", + "[ NORMAL ] Iteration 310:\tk_eff = 1.222624\tres = 2.107E-05\n", + "[ NORMAL ] Iteration 311:\tk_eff = 1.222648\tres = 2.062E-05\n", + "[ NORMAL ] Iteration 312:\tk_eff = 1.222672\tres = 2.005E-05\n", + "[ NORMAL ] Iteration 313:\tk_eff = 1.222696\tres = 1.959E-05\n", + "[ NORMAL ] Iteration 314:\tk_eff = 1.222718\tres = 1.898E-05\n", + "[ NORMAL ] Iteration 315:\tk_eff = 1.222740\tres = 1.841E-05\n", + "[ NORMAL ] Iteration 316:\tk_eff = 1.222762\tres = 1.808E-05\n", + "[ NORMAL ] Iteration 317:\tk_eff = 1.222783\tres = 1.765E-05\n", + "[ NORMAL ] Iteration 318:\tk_eff = 1.222803\tres = 1.713E-05\n", + "[ NORMAL ] Iteration 319:\tk_eff = 1.222823\tres = 1.674E-05\n", + "[ NORMAL ] Iteration 320:\tk_eff = 1.222843\tres = 1.638E-05\n", + "[ NORMAL ] Iteration 321:\tk_eff = 1.222862\tres = 1.593E-05\n", + "[ NORMAL ] Iteration 322:\tk_eff = 1.222880\tres = 1.546E-05\n", + "[ NORMAL ] Iteration 323:\tk_eff = 1.222898\tres = 1.519E-05\n", + "[ NORMAL ] Iteration 324:\tk_eff = 1.222916\tres = 1.487E-05\n", + "[ NORMAL ] Iteration 325:\tk_eff = 1.222933\tres = 1.446E-05\n", + "[ NORMAL ] Iteration 326:\tk_eff = 1.222950\tres = 1.403E-05\n", + "[ NORMAL ] Iteration 327:\tk_eff = 1.222967\tres = 1.379E-05\n", + "[ NORMAL ] Iteration 328:\tk_eff = 1.222982\tres = 1.342E-05\n", + "[ NORMAL ] Iteration 329:\tk_eff = 1.222998\tres = 1.298E-05\n", + "[ NORMAL ] Iteration 330:\tk_eff = 1.223013\tres = 1.278E-05\n", + "[ NORMAL ] Iteration 331:\tk_eff = 1.223028\tres = 1.236E-05\n", + "[ NORMAL ] Iteration 332:\tk_eff = 1.223043\tres = 1.227E-05\n", + "[ NORMAL ] Iteration 333:\tk_eff = 1.223057\tres = 1.177E-05\n", + "[ NORMAL ] Iteration 334:\tk_eff = 1.223070\tres = 1.146E-05\n", + "[ NORMAL ] Iteration 335:\tk_eff = 1.223084\tres = 1.122E-05\n", + "[ NORMAL ] Iteration 336:\tk_eff = 1.223097\tres = 1.105E-05\n", + "[ NORMAL ] Iteration 337:\tk_eff = 1.223110\tres = 1.063E-05\n", + "[ NORMAL ] Iteration 338:\tk_eff = 1.223122\tres = 1.054E-05\n", + "[ NORMAL ] Iteration 339:\tk_eff = 1.223134\tres = 1.015E-05\n", + "[ NORMAL ] Iteration 340:\tk_eff = 1.223146\tres = 1.005E-05\n" ] } ], @@ -1920,9 +1931,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "openmc keff = 1.223474\n", - "openmoc keff = 1.223051\n", - "bias [pcm]: -42.3\n" + "openmc keff = 1.224484\n", + "openmoc keff = 1.223146\n", + "bias [pcm]: -133.8\n" ] } ], @@ -1995,9 +2006,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2080,9 +2091,9 @@ "outputs": [ { "data": { - "image/png": "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\ni7uZWYH+P/3NVBUejmSDAAAAAElFTkSuQmCC\n", + "image/png": "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\n4C3won+7HwAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2096,7 +2107,6 @@ "plt.title('H-1 Scattering Matrix')\n", "plt.xlabel('Group Out')\n", "plt.ylabel('Group In')\n", - "plt.grid()\n", "\n", "# Create plot of the O-16 scattering matrix\n", "fig2 = plt.subplot(122)\n", @@ -2104,7 +2114,6 @@ "plt.title('O-16 Scattering Matrix')\n", "plt.xlabel('Group Out')\n", "plt.ylabel('Group In')\n", - "plt.grid()\n", "\n", "# Show the plot on screen\n", "plt.show()" @@ -2112,6 +2121,7 @@ } ], "metadata": { + "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index 2927466da..a41fb1374 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -51,6 +51,7 @@ "\n", "import openmc\n", "import openmc.mgxs\n", + "from openmc.opencg_compatible import get_opencg_geometry\n", "import openmoc\n", "import openmoc.process\n", "from openmoc.opencg_compatible import get_openmoc_geometry\n", @@ -457,7 +458,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ECGQ4gO2gMyX4AAAWFSURBVGje7Zs7cttADIZ9CSvX\ncrP0iCxUqbBc8Ag6xR6BhV2EvYvwFD4CCx1ABT1jMdgndpegRQnOrCbjpPlGESISC4A/gd27e8H5\n83CX3b4+iKJrRHkS4vkghMPBonRYWGwtfgD2YN+dRDUOoh6lACw0Noi9w2fESuEoAR/uVuMolX03\n9oXGT7F3eFL2iEfhUX1f4cPdL/ishs+68ai+udE4xPhexbjX2FfjGNoPj/DPNX4Tsd+EODr8FvsV\ndf1Hd9P2VvCi4+s/aXvrf+upAD+1/9GV1mkOH5X9vV6THtfvACslcaUCbESL61drBPtdI8SrFMWr\nELsXCkuFDYW75gbiP7d9Cf7bAYI/aCwUShrBvh30+lWQkzVgZ/HD4OixNCgcQpJ3BxU/Ln91elKo\nM5VEE38QtJ+Yv6cQ9xjKNYayyl8TypP8DfJnQ2H/b/N3ye9P83cT33SQv/sQh9gV7zZ/0dNj5HQa\nC5vVzv9+/WFN2w8KVaZ2BwL1+pv4g0x1QRfjq0dB4Q3kT277oP6VNL6gKxNU9a8zK+WLbi/Wwpdi\nhbboKqyxFOulHMj6v4W/AXbmUeAxrv9J/CqEBXaRKsXaodD4nsYvkT/G6H1D4SR/iPy1Roj9JsQ5\ne18/7EUHv1+Fvx/Xj5V9Ugb5K8TW4TZEEdcvoz/up0VTe9qsVIppKVX6a7D6y9ZvwEKjrtQxPtv6\nfXII9vCxKOGaIeAIfEF8IvAG8ie3vRK9rRQl+PPpSctbhfpTUCpviH+kxsZgpT91+snoX1l49KK3\niUQvICRy5aUw6l8leoVwoo3Uv1rKreF/UFLY6d9QP4L9Wf2r7EP9GOSfcsjZ56f60kz+XmVPXv+R\nuP49ff0T/53Rv6n/7m2lvXT9Wqd/VUz8hvh5M/ED6ILmt4mfHYZSaePnTWpsf/SvqV9O6dLYYClL\nEetnoH/LBLFoBvrX189uTv8++kot5vTvQD4/9jP690g9P/4z/bvo/XVG/xYoZZx+8fr3MxAtsf7t\nUOkG2JqsTtCIpgCt/qX1226KqZS7gfzJbe+c9jLrtIZ8lXD+s4umlW6AKIVrlML2/cXjgPFjlJqI\nRC+Fj0bVJe+vSh56pSdR6YkQ1ygF10Wqf0FeLta/iKn9Mv1L24ti2e+7W4n1b3T/W+L+t9H9T/Sv\nVboUmqJJon1/hZq8LnzRDlDrX1u0xRT1+6vEpomMmyYkqi95vIH8yW1PN+122KkLcNLKi/WTF01z\n/cNASrWE/l3ev6T17zX909z9X27/euK/Rf3zWP+Waf9eEv37KkWJ+rfDl6ZglNDa+cEBhwYDvkoN\nP/rX69814NaI3imq0l7OYDy/qSdDGwr7r+Y3VbzoKZr6XX2lfxfOb87qXzr+b1j/Xlp/nP6dn98M\ncdH7cn7zjPObKsYWS3Eb9w8n85smHtqQuPuZ30T2dlIT6F9xFl+n8xslegL9a4c2KRr9W4rp/GYq\numiM9Nec/j2v/yj9u1h//hv9e93vc++f63/u+rPjL3f+5Lbn1j9m/eXWf+7zh/v8+2b9e/Hzn6s/\nuPqHrb8g71n6L3f+5Lbnvn8w33+4718/+5d47//c/gO7/5E7/nPbc/tv3P4fs//I7X9y+6/fqH+v\n6j9z+9/c/ju3/8+eP+TOn9z23PkXc/7Gnf9x5483q38Xzn+582fu/Js9fy8kb/6fO39y23P3n3S8\n/S/c/Tfc/T83uX/pgv1XE/9duP+Lu/+Mvf8td/znti8kb/8ld/9nx9t/Sjw/Ltr/yt1/+337f6/b\nf0zoB3nJ/ucVc/81d/83e/957vzJbc89/8A8f8E9/5HE78XnT/4H/cs5f8Q9/8Q9f8U+/5U7f3Lb\nc88fdrzzjyvm+cuf/Uu887/c88fs88954/8vO4SjPC+2QRIAAAAldEVYdGRhdGU6Y3JlYXRlADIw\nMTctMDItMjVUMTQ6MzI6NTktMDU6MDA5L0/rAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE3LTAyLTI1\nVDE0OjMyOjU5LTA1OjAwSHL3VwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -536,17 +537,13 @@ "Now, we must specify to the `Library` which types of cross sections to compute. In particular, the following are the multi-group cross section `MGXS` subclasses that are mapped to string codes accepted by the `Library` class:\n", "\n", "* `TotalXS` (`\"total\"`)\n", - "* `TransportXS` (`\"transport\"`)\n", - "* `NuTransportXS` (`\"nu-transport\"`)\n", + "* `TransportXS` (`\"transport\"` or `\"nu-transport` with `nu` set to `True`)\n", "* `AbsorptionXS` (`\"absorption\"`)\n", "* `CaptureXS` (`\"capture\"`)\n", - "* `FissionXS` (`\"fission\"`)\n", - "* `NuFissionXS` (`\"nu-fission\"`)\n", + "* `FissionXS` (`\"fission\"` or `\"nu-fission\"` with `nu` set to `True`)\n", "* `KappaFissionXS` (`\"kappa-fission\"`)\n", - "* `ScatterXS` (`\"scatter\"`)\n", - "* `NuScatterXS` (`\"nu-scatter\"`)\n", - "* `ScatterMatrixXS` (`\"scatter matrix\"`)\n", - "* `NuScatterMatrixXS` (`\"nu-scatter matrix\"`)\n", + "* `ScatterXS` (`\"scatter\"` or `\"nu-scatter\"` with `nu` set to `True`)\n", + "* `ScatterMatrixXS` (`\"scatter matrix\"` or `\"nu-scatter matrix\"` with `nu` set to `True`)\n", "* `Chi` (`\"chi\"`)\n", "* `ChiPrompt` (`\"chi prompt\"`)\n", "* `InverseVelocity` (`\"inverse-velocity\"`)\n", @@ -593,7 +590,7 @@ "mgxs_lib.domain_type = 'cell'\n", "\n", "# Specify the cell domains over which to compute multi-group cross sections\n", - "mgxs_lib.domains = geometry.get_all_material_cells()" + "mgxs_lib.domains = geometry.get_all_material_cells().values()" ] }, { @@ -742,8 +739,8 @@ " Copyright | 2011-2017 Massachusetts Institute of Technology\n", " License | http://openmc.readthedocs.io/en/latest/license.html\n", " Version | 0.8.0\n", - " Git SHA1 | 54b65c8bda6af5788bd762b8cf9855d1a8008238\n", - " Date/Time | 2017-02-12 13:39:31\n", + " Git SHA1 | 60a1f157dae88b62e1865a5fe3efd7ef0773a068\n", + " Date/Time | 2017-02-25 14:32:59\n", " OpenMP Threads | 8\n", "\n", " ===========================================================================\n", @@ -774,53 +771,53 @@ " 1/1 1.03852 \n", " 2/1 0.99743 \n", " 3/1 1.02987 \n", - " 4/1 1.04472 \n", - " 5/1 1.02183 \n", - " 6/1 1.05263 \n", - " 7/1 0.99048 \n", - " 8/1 1.02753 \n", - " 9/1 1.03159 \n", - " 10/1 1.04005 \n", - " 11/1 1.05278 \n", - " 12/1 1.02555 1.03917 +/- 0.01362\n", - " 13/1 0.99400 1.02411 +/- 0.01699\n", - " 14/1 1.03508 1.02685 +/- 0.01232\n", - " 15/1 1.00055 1.02159 +/- 0.01090\n", - " 16/1 1.01334 1.02022 +/- 0.00900\n", - " 17/1 0.99822 1.01707 +/- 0.00823\n", - " 18/1 1.01767 1.01715 +/- 0.00713\n", - " 19/1 1.05052 1.02086 +/- 0.00730\n", - " 20/1 1.03133 1.02190 +/- 0.00661\n", - " 21/1 1.04112 1.02365 +/- 0.00623\n", - " 22/1 1.04175 1.02516 +/- 0.00588\n", - " 23/1 1.01909 1.02469 +/- 0.00543\n", - " 24/1 1.07119 1.02801 +/- 0.00603\n", - " 25/1 0.97414 1.02442 +/- 0.00666\n", - " 26/1 1.04709 1.02584 +/- 0.00639\n", - " 27/1 1.05872 1.02777 +/- 0.00631\n", - " 28/1 1.03930 1.02841 +/- 0.00598\n", - " 29/1 1.01488 1.02770 +/- 0.00570\n", - " 30/1 1.04513 1.02857 +/- 0.00548\n", - " 31/1 0.99538 1.02699 +/- 0.00545\n", - " 32/1 1.00106 1.02581 +/- 0.00532\n", - " 33/1 0.99389 1.02442 +/- 0.00527\n", - " 34/1 0.99938 1.02338 +/- 0.00516\n", - " 35/1 1.02161 1.02331 +/- 0.00495\n", - " 36/1 1.04084 1.02398 +/- 0.00480\n", - " 37/1 0.98801 1.02265 +/- 0.00481\n", - " 38/1 1.01348 1.02232 +/- 0.00464\n", - " 39/1 1.06693 1.02386 +/- 0.00474\n", - " 40/1 1.07729 1.02564 +/- 0.00491\n", - " 41/1 1.03191 1.02585 +/- 0.00475\n", - " 42/1 1.05209 1.02667 +/- 0.00468\n", - " 43/1 1.02997 1.02677 +/- 0.00453\n", - " 44/1 1.07288 1.02812 +/- 0.00460\n", - " 45/1 1.01268 1.02768 +/- 0.00449\n", - " 46/1 1.03759 1.02796 +/- 0.00437\n", - " 47/1 1.02620 1.02791 +/- 0.00425\n", - " 48/1 1.02509 1.02783 +/- 0.00414\n", - " 49/1 1.01075 1.02740 +/- 0.00406\n", - " 50/1 0.99403 1.02656 +/- 0.00404\n", + " 4/1 1.04397 \n", + " 5/1 1.06262 \n", + " 6/1 1.06657 \n", + " 7/1 0.98574 \n", + " 8/1 1.04364 \n", + " 9/1 1.01253 \n", + " 10/1 1.02094 \n", + " 11/1 0.99586 \n", + " 12/1 1.00508 1.00047 +/- 0.00461\n", + " 13/1 1.05292 1.01795 +/- 0.01769\n", + " 14/1 1.04732 1.02530 +/- 0.01450\n", + " 15/1 1.04886 1.03001 +/- 0.01218\n", + " 16/1 1.00948 1.02659 +/- 0.01052\n", + " 17/1 1.02684 1.02662 +/- 0.00889\n", + " 18/1 0.97234 1.01984 +/- 0.01026\n", + " 19/1 0.99754 1.01736 +/- 0.00938\n", + " 20/1 0.98964 1.01459 +/- 0.00884\n", + " 21/1 1.04140 1.01703 +/- 0.00836\n", + " 22/1 1.03854 1.01882 +/- 0.00784\n", + " 23/1 1.05917 1.02192 +/- 0.00785\n", + " 24/1 1.02413 1.02208 +/- 0.00727\n", + " 25/1 1.03113 1.02268 +/- 0.00679\n", + " 26/1 1.05113 1.02446 +/- 0.00660\n", + " 27/1 1.03252 1.02494 +/- 0.00622\n", + " 28/1 1.05196 1.02644 +/- 0.00605\n", + " 29/1 0.99663 1.02487 +/- 0.00593\n", + " 30/1 1.01820 1.02454 +/- 0.00564\n", + " 31/1 1.02753 1.02468 +/- 0.00537\n", + " 32/1 1.02162 1.02454 +/- 0.00512\n", + " 33/1 1.04083 1.02525 +/- 0.00494\n", + " 34/1 1.03335 1.02558 +/- 0.00474\n", + " 35/1 1.01304 1.02508 +/- 0.00458\n", + " 36/1 0.99299 1.02385 +/- 0.00457\n", + " 37/1 1.04936 1.02479 +/- 0.00450\n", + " 38/1 1.02856 1.02493 +/- 0.00433\n", + " 39/1 1.03706 1.02535 +/- 0.00420\n", + " 40/1 1.08118 1.02721 +/- 0.00447\n", + " 41/1 1.00149 1.02638 +/- 0.00440\n", + " 42/1 1.00233 1.02563 +/- 0.00433\n", + " 43/1 1.03023 1.02577 +/- 0.00419\n", + " 44/1 1.03230 1.02596 +/- 0.00407\n", + " 45/1 0.98123 1.02468 +/- 0.00416\n", + " 46/1 1.02126 1.02458 +/- 0.00404\n", + " 47/1 0.99772 1.02386 +/- 0.00400\n", + " 48/1 1.02773 1.02396 +/- 0.00389\n", + " 49/1 1.01690 1.02378 +/- 0.00379\n", + " 50/1 1.02890 1.02391 +/- 0.00370\n", " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", @@ -830,27 +827,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.2114E-01 seconds\n", - " Reading cross sections = 2.9270E-01 seconds\n", - " Total time in simulation = 7.0359E+00 seconds\n", - " Time in transport only = 6.4162E+00 seconds\n", - " Time in inactive batches = 4.6555E-01 seconds\n", - " Time in active batches = 6.5703E+00 seconds\n", - " Time synchronizing fission bank = 2.7486E-03 seconds\n", - " Sampling source sites = 1.8012E-03 seconds\n", - " SEND/RECV source sites = 9.0751E-04 seconds\n", - " Time accumulating tallies = 3.3323E-04 seconds\n", - " Total time for finalization = 2.6483E-05 seconds\n", - " Total time elapsed = 7.4667E+00 seconds\n", - " Calculation Rate (inactive) = 53700.2 neutrons/second\n", - " Calculation Rate (active) = 15219.9 neutrons/second\n", + " Total time for initialization = 3.4863E-01 seconds\n", + " Reading cross sections = 2.6337E-01 seconds\n", + " Total time in simulation = 6.2906E+00 seconds\n", + " Time in transport only = 6.0984E+00 seconds\n", + " Time in inactive batches = 5.0785E-01 seconds\n", + " Time in active batches = 5.7827E+00 seconds\n", + " Time synchronizing fission bank = 2.6573E-03 seconds\n", + " Sampling source sites = 1.9038E-03 seconds\n", + " SEND/RECV source sites = 7.1726E-04 seconds\n", + " Time accumulating tallies = 2.9242E-04 seconds\n", + " Total time for finalization = 7.4980E-06 seconds\n", + " Total time elapsed = 6.6484E+00 seconds\n", + " Calculation Rate (inactive) = 49227.5 neutrons/second\n", + " Calculation Rate (active) = 17292.9 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02436 +/- 0.00318\n", - " k-effective (Track-length) = 1.02656 +/- 0.00404\n", - " k-effective (Absorption) = 1.02601 +/- 0.00333\n", - " Combined k-effective = 1.02539 +/- 0.00276\n", + " k-effective (Collision) = 1.02621 +/- 0.00393\n", + " k-effective (Track-length) = 1.02391 +/- 0.00370\n", + " k-effective (Absorption) = 1.02077 +/- 0.00423\n", + " Combined k-effective = 1.02331 +/- 0.00353\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -995,16 +992,16 @@ " 10000\n", " 1\n", " U235\n", - " 8.047288e-03\n", - " 2.712731e-05\n", + " 8.096764e-03\n", + " 3.130177e-05\n", " \n", " \n", " 4\n", " 10000\n", " 1\n", " U238\n", - " 7.364803e-03\n", - " 4.197956e-05\n", + " 7.364515e-03\n", + " 4.510564e-05\n", " \n", " \n", " 5\n", @@ -1019,16 +1016,16 @@ " 10000\n", " 2\n", " U235\n", - " 3.616058e-01\n", - " 2.178190e-03\n", + " 3.611153e-01\n", + " 2.048312e-03\n", " \n", " \n", " 1\n", " 10000\n", " 2\n", " U238\n", - " 6.743624e-07\n", - " 4.004691e-09\n", + " 6.735070e-07\n", + " 3.780177e-09\n", " \n", " \n", " 2\n", @@ -1044,11 +1041,11 @@ ], "text/plain": [ " cell group in nuclide mean std. dev.\n", - "3 10000 1 U235 8.047288e-03 2.712731e-05\n", - "4 10000 1 U238 7.364803e-03 4.197956e-05\n", + "3 10000 1 U235 8.096764e-03 3.130177e-05\n", + "4 10000 1 U238 7.364515e-03 4.510564e-05\n", "5 10000 1 O16 0.000000e+00 0.000000e+00\n", - "0 10000 2 U235 3.616058e-01 2.178190e-03\n", - "1 10000 2 U238 6.743624e-07 4.004691e-09\n", + "0 10000 2 U235 3.611153e-01 2.048312e-03\n", + "1 10000 2 U238 6.735070e-07 3.780177e-09\n", "2 10000 2 O16 0.000000e+00 0.000000e+00" ] }, @@ -1086,13 +1083,13 @@ "\tDomain ID =\t10000\n", "\tNuclide =\tU235\n", "\tCross Sections [cm^-1]:\n", - " Group 1 [0.625 - 20000000.0eV]:\t8.05e-03 +/- 3.37e-01%\n", - " Group 2 [0.0 - 0.625 eV]:\t3.62e-01 +/- 6.02e-01%\n", + " Group 1 [0.625 - 20000000.0eV]:\t8.10e-03 +/- 3.87e-01%\n", + " Group 2 [0.0 - 0.625 eV]:\t3.61e-01 +/- 5.67e-01%\n", "\n", "\tNuclide =\tU238\n", "\tCross Sections [cm^-1]:\n", - " Group 1 [0.625 - 20000000.0eV]:\t7.36e-03 +/- 5.70e-01%\n", - " Group 2 [0.0 - 0.625 eV]:\t6.74e-07 +/- 5.94e-01%\n", + " Group 1 [0.625 - 20000000.0eV]:\t7.36e-03 +/- 6.12e-01%\n", + " Group 2 [0.0 - 0.625 eV]:\t6.74e-07 +/- 5.61e-01%\n", "\n", "\tNuclide =\tO16\n", "\tCross Sections [cm^-1]:\n", @@ -1237,16 +1234,16 @@ " 10000\n", " 1\n", " U235\n", - " 0.074714\n", - " 0.000331\n", + " 0.074393\n", + " 0.000308\n", " \n", " \n", " 1\n", " 10000\n", " 1\n", " U238\n", - " 0.005976\n", - " 0.000034\n", + " 0.005982\n", + " 0.000036\n", " \n", " \n", " 2\n", @@ -1262,8 +1259,8 @@ ], "text/plain": [ " cell group in nuclide mean std. dev.\n", - "0 10000 1 U235 0.074714 0.000331\n", - "1 10000 1 U238 0.005976 0.000034\n", + "0 10000 1 U235 0.074393 0.000308\n", + "1 10000 1 U238 0.005982 0.000036\n", "2 10000 1 O16 0.000000 0.000000" ] }, @@ -1302,8 +1299,9 @@ }, "outputs": [], "source": [ - "# Create an OpenMOC Geometry from the OpenCG Geometry\n", - "openmoc_geometry = get_openmoc_geometry(mgxs_lib.opencg_geometry)" + "# Create an OpenMOC Geometry from an equivalent OpenCG Geometry\n", + "opencg_geometry = get_opencg_geometry(mgxs_lib.geometry)\n", + "openmoc_geometry = get_openmoc_geometry(opencg_geometry)" ] }, { @@ -1359,131 +1357,131 @@ "text": [ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.823553\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.780331\tres = 1.940E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.739473\tres = 6.545E-02\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.710842\tres = 5.284E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.689636\tres = 3.926E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.675006\tres = 3.007E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.665799\tres = 2.138E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.661143\tres = 1.377E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.660269\tres = 7.173E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.662521\tres = 1.977E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.667334\tres = 3.703E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.674221\tres = 7.406E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.682763\tres = 1.042E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.692603\tres = 1.275E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.703433\tres = 1.448E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.714994\tres = 1.570E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.727063\tres = 1.649E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.739455\tres = 1.694E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.752013\tres = 1.710E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.764605\tres = 1.703E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.777124\tres = 1.679E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.789481\tres = 1.642E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.801604\tres = 1.595E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.813436\tres = 1.540E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.824931\tres = 1.480E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.836055\tres = 1.417E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.846783\tres = 1.352E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.857097\tres = 1.287E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.866984\tres = 1.221E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.876441\tres = 1.157E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.885464\tres = 1.094E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.894057\tres = 1.032E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.902225\tres = 9.732E-03\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.909975\tres = 9.161E-03\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.917318\tres = 8.615E-03\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.924266\tres = 8.093E-03\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.930830\tres = 7.596E-03\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.937025\tres = 7.123E-03\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.942865\tres = 6.675E-03\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.948364\tres = 6.251E-03\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.953538\tres = 5.850E-03\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.958400\tres = 5.472E-03\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.962967\tres = 5.115E-03\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.967251\tres = 4.779E-03\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.971269\tres = 4.464E-03\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.975034\tres = 4.167E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.978560\tres = 3.889E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.981859\tres = 3.627E-03\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.984944\tres = 3.382E-03\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.987828\tres = 3.153E-03\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.990523\tres = 2.938E-03\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.993039\tres = 2.737E-03\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.995388\tres = 2.549E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.997579\tres = 2.373E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.999623\tres = 2.209E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.001528\tres = 2.056E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.003303\tres = 1.912E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.004956\tres = 1.779E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.006496\tres = 1.654E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.007930\tres = 1.538E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.009264\tres = 1.429E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.010505\tres = 1.328E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.011659\tres = 1.234E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.012732\tres = 1.147E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.013730\tres = 1.065E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.014657\tres = 9.889E-04\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.015518\tres = 9.182E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.016319\tres = 8.524E-04\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.017062\tres = 7.912E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.017752\tres = 7.343E-04\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.018393\tres = 6.813E-04\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.018987\tres = 6.321E-04\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.019539\tres = 5.864E-04\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.020051\tres = 5.439E-04\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.020527\tres = 5.044E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.020967\tres = 4.677E-04\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.021376\tres = 4.337E-04\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.021755\tres = 4.021E-04\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.022107\tres = 3.727E-04\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.022432\tres = 3.454E-04\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.022734\tres = 3.201E-04\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.023014\tres = 2.966E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.023273\tres = 2.749E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.023514\tres = 2.547E-04\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.023736\tres = 2.359E-04\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.023943\tres = 2.185E-04\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.024134\tres = 2.024E-04\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.024311\tres = 1.875E-04\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.024475\tres = 1.736E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.024626\tres = 1.608E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.024767\tres = 1.489E-04\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.024897\tres = 1.378E-04\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.025018\tres = 1.276E-04\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.025129\tres = 1.181E-04\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.025232\tres = 1.093E-04\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.025328\tres = 1.012E-04\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.025416\tres = 9.368E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.025498\tres = 8.671E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.025574\tres = 8.025E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.025644\tres = 7.426E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.025709\tres = 6.871E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.025769\tres = 6.361E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.025824\tres = 5.884E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.025876\tres = 5.443E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.025923\tres = 5.037E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.025967\tres = 4.659E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.026008\tres = 4.311E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.026046\tres = 3.987E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.026081\tres = 3.688E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.026113\tres = 3.412E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.026143\tres = 3.154E-05\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.026170\tres = 2.920E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.026196\tres = 2.699E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.026219\tres = 2.497E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.026241\tres = 2.311E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.026261\tres = 2.135E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.026279\tres = 1.974E-05\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.026297\tres = 1.826E-05\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.026312\tres = 1.690E-05\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.026327\tres = 1.563E-05\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.026341\tres = 1.446E-05\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.026353\tres = 1.337E-05\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.026365\tres = 1.235E-05\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.026376\tres = 1.141E-05\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.026386\tres = 1.057E-05\n" + "[ NORMAL ] Iteration 0:\tk_eff = 0.823793\tres = 0.000E+00\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.780554\tres = 1.938E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.739678\tres = 6.539E-02\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.711003\tres = 5.285E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.689738\tres = 3.931E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.675038\tres = 3.014E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.665753\tres = 2.147E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.661013\tres = 1.389E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.660052\tres = 7.293E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.662216\tres = 2.057E-03\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.666942\tres = 3.576E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.673743\tres = 7.278E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.682202\tres = 1.030E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.691961\tres = 1.264E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.702715\tres = 1.438E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.714203\tres = 1.561E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.726205\tres = 1.641E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.738532\tres = 1.686E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.751030\tres = 1.703E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.763567\tres = 1.697E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.776034\tres = 1.674E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.788344\tres = 1.637E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.800423\tres = 1.591E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.812215\tres = 1.536E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.823673\tres = 1.477E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.834764\tres = 1.415E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.845462\tres = 1.350E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.855748\tres = 1.285E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.865611\tres = 1.220E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.875045\tres = 1.156E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.884048\tres = 1.093E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.892623\tres = 1.032E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.900775\tres = 9.727E-03\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.908511\tres = 9.158E-03\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.915841\tres = 8.613E-03\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.922778\tres = 8.092E-03\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.929332\tres = 7.596E-03\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.935519\tres = 7.124E-03\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.941351\tres = 6.676E-03\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.946843\tres = 6.253E-03\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.952011\tres = 5.852E-03\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.956869\tres = 5.474E-03\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.961431\tres = 5.118E-03\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.965712\tres = 4.783E-03\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.969727\tres = 4.467E-03\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.973489\tres = 4.170E-03\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.977013\tres = 3.892E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.980310\tres = 3.631E-03\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.983394\tres = 3.386E-03\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.986277\tres = 3.156E-03\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.988971\tres = 2.942E-03\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.991487\tres = 2.740E-03\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.993835\tres = 2.552E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.996026\tres = 2.376E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.998069\tres = 2.212E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.999974\tres = 2.059E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.001749\tres = 1.915E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.003403\tres = 1.782E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.004943\tres = 1.657E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.006377\tres = 1.540E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.007711\tres = 1.432E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.008952\tres = 1.331E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.010107\tres = 1.237E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.011181\tres = 1.149E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.012179\tres = 1.067E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.013107\tres = 9.909E-04\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.013969\tres = 9.201E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.014769\tres = 8.542E-04\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.015513\tres = 7.929E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.016204\tres = 7.358E-04\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.016845\tres = 6.828E-04\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.017440\tres = 6.335E-04\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.017993\tres = 5.877E-04\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.018505\tres = 5.451E-04\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.018980\tres = 5.056E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.019422\tres = 4.688E-04\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.019831\tres = 4.347E-04\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.020210\tres = 4.030E-04\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.020562\tres = 3.736E-04\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.020888\tres = 3.463E-04\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.021190\tres = 3.209E-04\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.021471\tres = 2.974E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.021730\tres = 2.756E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.021971\tres = 2.553E-04\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.022194\tres = 2.365E-04\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.022400\tres = 2.191E-04\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.022592\tres = 2.030E-04\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.022769\tres = 1.880E-04\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.022933\tres = 1.741E-04\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.023085\tres = 1.612E-04\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.023226\tres = 1.493E-04\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.023356\tres = 1.382E-04\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.023477\tres = 1.279E-04\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.023589\tres = 1.184E-04\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.023692\tres = 1.096E-04\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.023788\tres = 1.015E-04\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.023876\tres = 9.392E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.023958\tres = 8.694E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.024034\tres = 8.044E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.024104\tres = 7.445E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.024169\tres = 6.889E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.024229\tres = 6.374E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.024285\tres = 5.896E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.024336\tres = 5.457E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.024384\tres = 5.048E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.024428\tres = 4.671E-05\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.024469\tres = 4.320E-05\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.024507\tres = 3.994E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.024541\tres = 3.696E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.024574\tres = 3.416E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.024603\tres = 3.163E-05\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.024631\tres = 2.924E-05\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.024656\tres = 2.704E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.024680\tres = 2.501E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.024702\tres = 2.312E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.024722\tres = 2.138E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.024741\tres = 1.981E-05\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.024758\tres = 1.827E-05\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.024774\tres = 1.690E-05\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.024789\tres = 1.564E-05\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.024802\tres = 1.446E-05\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.024815\tres = 1.338E-05\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.024827\tres = 1.236E-05\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.024837\tres = 1.143E-05\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.024847\tres = 1.057E-05\n" ] } ], @@ -1515,9 +1513,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "openmc keff = 1.025390\n", - "openmoc keff = 1.026386\n", - "bias [pcm]: 99.6\n" + "openmc keff = 1.023307\n", + "openmoc keff = 1.024847\n", + "bias [pcm]: 154.0\n" ] } ], @@ -1625,7 +1623,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1634,9 +1632,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nRK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1661,6 +1659,7 @@ } ], "metadata": { + "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index 125340af7..f0fce27c2 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -338,7 +338,7 @@ "outputs": [], "source": [ "# OpenMC simulation parameters\n", - "batches = 50\n", + "batches = 500\n", "inactive = 10\n", "particles = 5000\n", "\n", @@ -425,7 +425,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -529,7 +529,7 @@ "mgxs_lib.domain_type = \"material\"\n", "\n", "# Specify the cell domains over which to compute multi-group cross sections\n", - "mgxs_lib.domains = geometry.get_all_materials()" + "mgxs_lib.domains = geometry.get_all_materials().values()" ] }, { @@ -571,7 +571,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/nelsonag/git/openmc/openmc/mgxs/library.py:426: RuntimeWarning: The P0 correction will be ignored since the scattering order 0 is greater than zero\n", + "/home/nelsonag/git/openmc/openmc/mgxs/library.py:412: RuntimeWarning: The P0 correction will be ignored since the scattering order 0 is greater than zero\n", " warn(msg, RuntimeWarning)\n" ] } @@ -684,7 +684,7 @@ "collapsed": true }, "source": [ - "Time to run the calculation and get our results!" + "Time to run the calculation and get our results! This time we will suppress the OpenMC output except for the summary information." ] }, { @@ -698,144 +698,29 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", - " %%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%\n", - " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", - " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", - " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", - " #################### %%%%%%%%%%%%%%%%%%%%%%\n", - " ##################### %%%%%%%%%%%%%%%%%%%%%\n", - " ###################### %%%%%%%%%%%%%%%%%%%%\n", - " ####################### %%%%%%%%%%%%%%%%%%\n", - " ####################### %%%%%%%%%%%%%%%%%\n", - " ###################### %%%%%%%%%%%%%%%%%\n", - " #################### %%%%%%%%%%%%%%%%%\n", - " ################# %%%%%%%%%%%%%%%%%\n", - " ############### %%%%%%%%%%%%%%%%\n", - " ############ %%%%%%%%%%%%%%%\n", - " ######## %%%%%%%%%%%%%%\n", - " %%%%%%%%%%%\n", - "\n", - " | The OpenMC Monte Carlo Code\n", - " Copyright | 2011-2017 Massachusetts Institute of Technology\n", - " License | http://openmc.readthedocs.io/en/latest/license.html\n", - " Version | 0.8.0\n", - " Git SHA1 | 6e3f6bf8b11cb3f6f171f1c351ddcaf85dd515ec\n", - " Date/Time | 2017-02-11 14:12:04\n", - " OpenMP Threads | 8\n", - "\n", - " ===========================================================================\n", - " ========================> INITIALIZATION <=========================\n", - " ===========================================================================\n", - "\n", - " Reading settings XML file...\n", - " Reading geometry XML file...\n", - " Reading materials XML file...\n", - " Reading cross sections XML file...\n", - " Reading U235 from /opt/xsdata/nndc/U235.h5\n", - " Reading U238 from /opt/xsdata/nndc/U238.h5\n", - " Reading O16 from /opt/xsdata/nndc/O16.h5\n", - " Reading Zr90 from /opt/xsdata/nndc/Zr90.h5\n", - " Reading H1 from /opt/xsdata/nndc/H1.h5\n", - " Reading B10 from /opt/xsdata/nndc/B10.h5\n", - " Maximum neutron transport energy: 2.00000E+07 eV for U235\n", - " Reading tallies XML file...\n", - " Building neighboring cells lists for each surface...\n", - " Initializing source particles...\n", - "\n", - " ===========================================================================\n", - " ====================> K EIGENVALUE SIMULATION <====================\n", - " ===========================================================================\n", - "\n", - " Bat./Gen. k Average k \n", - " ========= ======== ==================== \n", - " 1/1 1.05201 \n", - " 2/1 1.02017 \n", - " 3/1 1.02398 \n", - " 4/1 1.02677 \n", - " 5/1 1.01070 \n", - " 6/1 1.02964 \n", - " 7/1 1.02163 \n", - " 8/1 1.04524 \n", - " 9/1 1.00773 \n", - " 10/1 1.01536 \n", - " 11/1 1.02992 \n", - " 12/1 1.03248 1.03120 +/- 0.00128\n", - " 13/1 0.99044 1.01761 +/- 0.01361\n", - " 14/1 1.01484 1.01692 +/- 0.00965\n", - " 15/1 1.01491 1.01652 +/- 0.00748\n", - " 16/1 1.03809 1.02011 +/- 0.00709\n", - " 17/1 1.02536 1.02086 +/- 0.00604\n", - " 18/1 1.03663 1.02283 +/- 0.00559\n", - " 19/1 1.03902 1.02463 +/- 0.00525\n", - " 20/1 1.01557 1.02373 +/- 0.00478\n", - " 21/1 1.01286 1.02274 +/- 0.00443\n", - " 22/1 1.01392 1.02200 +/- 0.00411\n", - " 23/1 1.04439 1.02372 +/- 0.00416\n", - " 24/1 1.04034 1.02491 +/- 0.00403\n", - " 25/1 0.99433 1.02287 +/- 0.00427\n", - " 26/1 1.02720 1.02314 +/- 0.00400\n", - " 27/1 1.03545 1.02387 +/- 0.00383\n", - " 28/1 1.03853 1.02468 +/- 0.00370\n", - " 29/1 1.02735 1.02482 +/- 0.00350\n", - " 30/1 1.02429 1.02480 +/- 0.00332\n", - " 31/1 1.02901 1.02500 +/- 0.00317\n", - " 32/1 1.03296 1.02536 +/- 0.00304\n", - " 33/1 1.03605 1.02582 +/- 0.00294\n", - " 34/1 1.04247 1.02652 +/- 0.00290\n", - " 35/1 1.02088 1.02629 +/- 0.00279\n", - " 36/1 1.03017 1.02644 +/- 0.00269\n", - " 37/1 1.03216 1.02665 +/- 0.00259\n", - " 38/1 1.01459 1.02622 +/- 0.00254\n", - " 39/1 1.03706 1.02659 +/- 0.00248\n", - " 40/1 1.01383 1.02617 +/- 0.00243\n", - " 41/1 0.99028 1.02501 +/- 0.00262\n", - " 42/1 1.02969 1.02516 +/- 0.00254\n", - " 43/1 1.02097 1.02503 +/- 0.00247\n", - " 44/1 1.02650 1.02507 +/- 0.00239\n", - " 45/1 1.03939 1.02548 +/- 0.00236\n", - " 46/1 1.00974 1.02505 +/- 0.00233\n", - " 47/1 1.02563 1.02506 +/- 0.00227\n", - " 48/1 1.00377 1.02450 +/- 0.00228\n", - " 49/1 0.99082 1.02364 +/- 0.00238\n", - " 50/1 1.00805 1.02325 +/- 0.00235\n", - " Creating state point statepoint.50.h5...\n", - "\n", - " ===========================================================================\n", - " ======================> SIMULATION FINISHED <======================\n", - " ===========================================================================\n", - "\n", - "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.6381E-01 seconds\n", - " Reading cross sections = 2.7394E-01 seconds\n", - " Total time in simulation = 8.2977E+00 seconds\n", - " Time in transport only = 8.2033E+00 seconds\n", - " Time in inactive batches = 1.0881E+00 seconds\n", - " Time in active batches = 7.2096E+00 seconds\n", - " Time synchronizing fission bank = 5.2924E-03 seconds\n", - " Sampling source sites = 3.6536E-03 seconds\n", - " SEND/RECV source sites = 1.6013E-03 seconds\n", - " Time accumulating tallies = 1.1932E-04 seconds\n", - " Total time for finalization = 3.3830E-06 seconds\n", - " Total time elapsed = 8.6802E+00 seconds\n", - " Calculation Rate (inactive) = 45950.7 neutrons/second\n", - " Calculation Rate (active) = 27740.7 neutrons/second\n", + " Total time for initialization = 3.2303E-01 seconds\n", + " Reading cross sections = 2.4414E-01 seconds\n", + " Total time in simulation = 1.4351E+02 seconds\n", + " Time in transport only = 1.4018E+02 seconds\n", + " Time in inactive batches = 7.9702E-01 seconds\n", + " Time in active batches = 1.4272E+02 seconds\n", + " Time synchronizing fission bank = 8.1742E-02 seconds\n", + " Sampling source sites = 5.6844E-02 seconds\n", + " SEND/RECV source sites = 2.4302E-02 seconds\n", + " Time accumulating tallies = 1.9605E-03 seconds\n", + " Total time for finalization = 6.3080E-06 seconds\n", + " Total time elapsed = 1.4385E+02 seconds\n", + " Calculation Rate (inactive) = 62733.9 neutrons/second\n", + " Calculation Rate (active) = 17166.9 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02354 +/- 0.00215\n", - " k-effective (Track-length) = 1.02325 +/- 0.00235\n", - " k-effective (Absorption) = 1.02582 +/- 0.00193\n", - " Combined k-effective = 1.02474 +/- 0.00151\n", + " k-effective (Collision) = 1.02519 +/- 0.00068\n", + " k-effective (Track-length) = 1.02548 +/- 0.00075\n", + " k-effective (Absorption) = 1.02621 +/- 0.00064\n", + " Combined k-effective = 1.02580 +/- 0.00053\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -852,8 +737,8 @@ } ], "source": [ - "# Run OpenMC\n", - "openmc.run()" + "# Run OpenMC, showing only the summary information at the end.\n", + "openmc.run(output='summary')" ] }, { @@ -1084,9 +969,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1094,9 +979,9 @@ }, { "data": { - "image/png": "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\n2zkpAAAAAElFTkSuQmCC\n", + "image/png": "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\ntPx/RfHQqmw1MBwAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1104,9 +989,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1143,7 +1028,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "At this point, the problem is set up and we can run the multi-group calculation." + "At this point, the problem is set up and we can run the multi-group calculation, again with only summary information being displayed." ] }, { @@ -1158,141 +1043,29 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", - " %%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%\n", - " %%%%%%%%%%%%%%%%%%%%%%%%\n", - " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", - " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", - " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", - " #################### %%%%%%%%%%%%%%%%%%%%%%\n", - " ##################### %%%%%%%%%%%%%%%%%%%%%\n", - " ###################### %%%%%%%%%%%%%%%%%%%%\n", - " ####################### %%%%%%%%%%%%%%%%%%\n", - " ####################### %%%%%%%%%%%%%%%%%\n", - " ###################### %%%%%%%%%%%%%%%%%\n", - " #################### %%%%%%%%%%%%%%%%%\n", - " ################# %%%%%%%%%%%%%%%%%\n", - " ############### %%%%%%%%%%%%%%%%\n", - " ############ %%%%%%%%%%%%%%%\n", - " ######## %%%%%%%%%%%%%%\n", - " %%%%%%%%%%%\n", - "\n", - " | The OpenMC Monte Carlo Code\n", - " Copyright | 2011-2017 Massachusetts Institute of Technology\n", - " License | http://openmc.readthedocs.io/en/latest/license.html\n", - " Version | 0.8.0\n", - " Git SHA1 | 6e3f6bf8b11cb3f6f171f1c351ddcaf85dd515ec\n", - " Date/Time | 2017-02-11 14:12:19\n", - " OpenMP Threads | 8\n", - "\n", - " ===========================================================================\n", - " ========================> INITIALIZATION <=========================\n", - " ===========================================================================\n", - "\n", - " Reading settings XML file...\n", - " Reading geometry XML file...\n", - " Reading materials XML file...\n", - " Reading cross sections HDF5 file...\n", - " Reading tallies XML file...\n", - " Loading Cross Section Data...\n", - " Loading fuel Data...\n", - " Loading zircaloy Data...\n", - " Loading water Data...\n", - " Building neighboring cells lists for each surface...\n", - " Initializing source particles...\n", - "\n", - " ===========================================================================\n", - " ====================> K EIGENVALUE SIMULATION <====================\n", - " ===========================================================================\n", - "\n", - " Bat./Gen. k Average k \n", - " ========= ======== ==================== \n", - " 1/1 0.98551 \n", - " 2/1 1.05279 \n", - " 3/1 1.03429 \n", - " 4/1 1.01472 \n", - " 5/1 1.01149 \n", - " 6/1 1.07167 \n", - " 7/1 1.00534 \n", - " 8/1 1.02138 \n", - " 9/1 1.03005 \n", - " 10/1 0.99297 \n", - " 11/1 1.00323 \n", - " 12/1 1.00757 1.00540 +/- 0.00217\n", - " 13/1 1.02578 1.01219 +/- 0.00691\n", - " 14/1 1.01920 1.01395 +/- 0.00519\n", - " 15/1 1.02700 1.01656 +/- 0.00479\n", - " 16/1 1.02370 1.01775 +/- 0.00409\n", - " 17/1 1.00321 1.01567 +/- 0.00403\n", - " 18/1 1.01318 1.01536 +/- 0.00351\n", - " 19/1 1.02439 1.01636 +/- 0.00325\n", - " 20/1 1.03004 1.01773 +/- 0.00321\n", - " 21/1 1.01840 1.01779 +/- 0.00291\n", - " 22/1 1.00581 1.01679 +/- 0.00284\n", - " 23/1 1.01457 1.01662 +/- 0.00261\n", - " 24/1 1.03033 1.01760 +/- 0.00261\n", - " 25/1 1.00450 1.01673 +/- 0.00258\n", - " 26/1 1.03680 1.01798 +/- 0.00272\n", - " 27/1 1.02786 1.01856 +/- 0.00262\n", - " 28/1 1.01150 1.01817 +/- 0.00250\n", - " 29/1 0.99850 1.01714 +/- 0.00258\n", - " 30/1 1.02729 1.01764 +/- 0.00250\n", - " 31/1 1.02587 1.01803 +/- 0.00241\n", - " 32/1 1.01423 1.01786 +/- 0.00231\n", - " 33/1 1.05449 1.01945 +/- 0.00272\n", - " 34/1 0.99908 1.01861 +/- 0.00274\n", - " 35/1 1.02441 1.01884 +/- 0.00264\n", - " 36/1 1.01844 1.01882 +/- 0.00253\n", - " 37/1 1.03198 1.01931 +/- 0.00249\n", - " 38/1 1.05078 1.02043 +/- 0.00265\n", - " 39/1 1.01134 1.02012 +/- 0.00257\n", - " 40/1 1.01423 1.01992 +/- 0.00249\n", - " 41/1 1.03987 1.02057 +/- 0.00250\n", - " 42/1 1.05441 1.02162 +/- 0.00264\n", - " 43/1 1.02068 1.02160 +/- 0.00256\n", - " 44/1 1.06387 1.02284 +/- 0.00277\n", - " 45/1 1.04844 1.02357 +/- 0.00279\n", - " 46/1 1.01967 1.02346 +/- 0.00272\n", - " 47/1 1.01830 1.02332 +/- 0.00264\n", - " 48/1 1.00888 1.02294 +/- 0.00260\n", - " 49/1 1.03033 1.02313 +/- 0.00254\n", - " 50/1 1.02732 1.02324 +/- 0.00248\n", - " Creating state point statepoint.50.h5...\n", - "\n", - " ===========================================================================\n", - " ======================> SIMULATION FINISHED <======================\n", - " ===========================================================================\n", - "\n", - "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.6247E-02 seconds\n", - " Reading cross sections = 2.9810E-03 seconds\n", - " Total time in simulation = 7.6874E+00 seconds\n", - " Time in transport only = 7.5290E+00 seconds\n", - " Time in inactive batches = 5.9831E-01 seconds\n", - " Time in active batches = 7.0890E+00 seconds\n", - " Time synchronizing fission bank = 5.0012E-03 seconds\n", - " Sampling source sites = 3.4413E-03 seconds\n", - " SEND/RECV source sites = 1.4835E-03 seconds\n", - " Time accumulating tallies = 1.1537E-04 seconds\n", - " Total time for finalization = 3.0480E-06 seconds\n", - " Total time elapsed = 7.7461E+00 seconds\n", - " Calculation Rate (inactive) = 83568.1 neutrons/second\n", - " Calculation Rate (active) = 28212.6 neutrons/second\n", + " Total time for initialization = 4.3662E-02 seconds\n", + " Reading cross sections = 5.8801E-03 seconds\n", + " Total time in simulation = 1.7518E+02 seconds\n", + " Time in transport only = 1.7154E+02 seconds\n", + " Time in inactive batches = 8.0088E-01 seconds\n", + " Time in active batches = 1.7438E+02 seconds\n", + " Time synchronizing fission bank = 9.8651E-02 seconds\n", + " Sampling source sites = 6.7951E-02 seconds\n", + " SEND/RECV source sites = 2.9902E-02 seconds\n", + " Time accumulating tallies = 2.2328E-03 seconds\n", + " Total time for finalization = 5.9420E-06 seconds\n", + " Total time elapsed = 1.7525E+02 seconds\n", + " Calculation Rate (inactive) = 62431.1 neutrons/second\n", + " Calculation Rate (active) = 14049.6 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02169 +/- 0.00234\n", - " k-effective (Track-length) = 1.02324 +/- 0.00248\n", - " k-effective (Absorption) = 1.02565 +/- 0.00155\n", - " Combined k-effective = 1.02525 +/- 0.00163\n", + " k-effective (Collision) = 1.02429 +/- 0.00068\n", + " k-effective (Track-length) = 1.02408 +/- 0.00075\n", + " k-effective (Absorption) = 1.02514 +/- 0.00050\n", + " Combined k-effective = 1.02488 +/- 0.00045\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -1309,8 +1082,8 @@ } ], "source": [ - "# Run the Multi-Group OpenMC Simulation\n", - "openmc.run()" + "# Run OpenMC, showing only the summary information at the end.\n", + "openmc.run(output='summary')" ] }, { @@ -1373,9 +1146,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Continuous-Energy keff = 1.024739\n", - "Multi-Group keff = 1.025255\n", - "bias [pcm]: -51.5\n" + "Continuous-Energy keff = 1.025799\n", + "Multi-Group keff = 1.024883\n", + "bias [pcm]: 91.6\n" ] } ], @@ -1472,7 +1245,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 41, @@ -1481,9 +1254,9 @@ }, { "data": { - "image/png": "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\nA2gShaIjcDJaAAAAAElFTkSuQmCC\n", + "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1518,6 +1291,7 @@ } ], "metadata": { + "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", diff --git a/openmc/cell.py b/openmc/cell.py index 8cd87daf3..859adb6d1 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -433,7 +433,7 @@ class Cell(object): Returns ------- - nuclides : dict + nuclides : collections.OrderedDict Dictionary whose keys are nuclide names and values are 2-tuples of (nuclide, density) @@ -467,7 +467,7 @@ class Cell(object): Returns ------- - cells : dict + cells : collections.orderedDict Dictionary whose keys are cell IDs and values are :class:`Cell` instances @@ -485,20 +485,23 @@ class Cell(object): Returns ------- - materials : dict + materials : collections.OrderedDict Dictionary whose keys are material IDs and values are :class:`Material` instances """ - materials = OrderedDict() if self.fill_type == 'material': materials[self.fill.id] = self.fill - - # Append all Cells in each Cell in the Universe to the dictionary - cells = self.get_all_cells() - for cell in cells.values(): - materials.update(cell.get_all_materials()) + elif self.fill_type == 'distribmat': + for m in self.fill: + if m is not None: + materials[m.id] = m + else: + # Append all Cells in each Cell in the Universe to the dictionary + cells = self.get_all_cells() + for cell in cells.values(): + materials.update(cell.get_all_materials()) return materials @@ -508,7 +511,7 @@ class Cell(object): Returns ------- - universes : dict + universes : collections.OrderedDict Dictionary whose keys are universe IDs and values are :class:`Universe` instances @@ -563,7 +566,7 @@ class Cell(object): if isinstance(node, Halfspace): path = "./surface[@id='{}']".format(node.surface.id) if xml_element.find(path) is None: - xml_element.append(node.surface.create_xml_subelement()) + xml_element.append(node.surface.to_xml_element()) elif isinstance(node, Complement): create_surface_elements(node.node, element) else: diff --git a/openmc/checkvalue.py b/openmc/checkvalue.py index fe5683c06..aa4dc067f 100644 --- a/openmc/checkvalue.py +++ b/openmc/checkvalue.py @@ -239,6 +239,40 @@ def check_greater_than(name, value, minimum, equality=False): raise ValueError(msg) +def check_filetype_version(obj, expected_type, expected_version): + """Check filetype and version of an HDF5 file. + + Parameters + ---------- + obj : h5py.File + HDF5 file to check + expected_type + Expected file type, e.g. 'statepoint' + expected_version + Expected major version number. + + """ + try: + this_filetype = obj.attrs['filetype'].decode() + this_version = obj.attrs['version'] + + # Check filetype + if this_filetype != expected_type: + raise IOError('{} is not a {} file.'.format( + obj.filename, expected_type)) + + # Check version + if this_version[0] != expected_version: + raise IOError('{} file has a version of {} which is not ' + 'consistent with the version expected by OpenMC, {}' + .format(this_filetype, '.'.join(this_version), + expected_version)) + except AttributeError: + raise IOError('Could not read {} file. This most likely means the {} ' + 'file was produced by a different version of OpenMC than ' + 'the one you are using.'.format(expected_type)) + + class CheckedList(list): """A list for which each element is type-checked as it's added diff --git a/openmc/executor.py b/openmc/executor.py index 3b9b8abd8..6f7e22311 100644 --- a/openmc/executor.py +++ b/openmc/executor.py @@ -5,21 +5,33 @@ import sys from six import string_types +_summary_indicator = "TIMING STATISTICS" + def _run(command, output, cwd): # Launch a subprocess p = subprocess.Popen(command, shell=True, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) + storage_flag = False + # Capture and re-print OpenMC output in real-time while True: # If OpenMC is finished, break loop line = p.stdout.readline() - if not line and p.poll() != None: + if not line and p.poll() is not None: break - # If user requested output, print to screen - if output: + if output == 'full': + # If user requested output, print to screen + print(line, end='') + elif output == 'summary' and _summary_indicator in line: + # If they requested a summary, look for the start of the summary + storage_flag = True + + if storage_flag: + # If a summary is requested, and we have reached the summary, + # then print it print(line, end='') # Return the returncode (integer, zero if no problems encountered) @@ -44,7 +56,7 @@ def plot_geometry(output=True, openmc_exec='openmc', cwd='.'): def run(particles=None, threads=None, geometry_debug=False, - restart_file=None, tracks=False, output=True, cwd='.', + restart_file=None, tracks=False, output='full', cwd='.', openmc_exec='openmc', mpi_args=None): """Run an OpenMC simulation. @@ -63,8 +75,10 @@ def run(particles=None, threads=None, geometry_debug=False, Path to restart file to use tracks : bool, optional Write tracks for all particles. Defaults to False. - output : bool, optional - Capture OpenMC output from standard out. Defaults to True. + output : {"full", "summary", "none", False}, optional + Degree of OpenMC output captured from standard out. "full" prints all + output; "summary" prints only the results summary, and "none" or False + does not show the output. Defaults to "full". cwd : str, optional Path to working directory to run in. Defaults to the current working directory. diff --git a/openmc/geometry.py b/openmc/geometry.py index 70f9c928f..a272eec0a 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -151,102 +151,83 @@ class Geometry(object): return offset def get_all_cells(self): - """Return all cells defined + """Return all cells in the geometry. Returns ------- - list of openmc.Cell - Cells in the geometry + collections.OrderedDict + Dictionary mapping cell IDs to :class:`openmc.Cell` instances """ - - all_cells = self.root_universe.get_all_cells() - cells = list(set(all_cells.values())) - cells.sort(key=lambda x: x.id) - return cells + return self.root_universe.get_all_cells() def get_all_universes(self): - """Return all universes defined + """Return all universes in the geometry. Returns ------- - list of openmc.Universe - Universes in the geometry + collections.OrderedDict + Dictionary mapping universe IDs to :class:`openmc.Universe` + instances """ - - all_universes = self._root_universe.get_all_universes() - universes = list(set(all_universes.values())) - universes.sort(key=lambda x: x.id) + universes = OrderedDict() + universes[self.root_universe.id] = self.root_universe + universes.update(self.root_universe.get_all_universes()) return universes def get_all_materials(self): - """Return all materials assigned to a cell + """Return all materials within the geometry. Returns ------- - list of openmc.Material - Materials in the geometry + collections.OrderedDict + Dictionary mapping material IDs to :class:`openmc.Material` + instances """ - - material_cells = self.get_all_material_cells() - materials = [] - - for cell in material_cells: - if cell.fill_type == 'distribmat': - for m in cell.fill: - if m is not None and m not in materials: - materials.append(m) - elif cell.fill_type == 'material': - if cell.fill not in materials: - materials.append(cell.fill) - - materials.sort(key=lambda x: x.id) - return materials + return self.root_universe.get_all_materials() def get_all_material_cells(self): """Return all cells filled by a material Returns ------- - list of openmc.Cell - Cells filled by Materials in the geometry + collections.OrderedDict + Dictionary mapping cell IDs to :class:`openmc.Cell` instances that + are filled with materials or distributed materials. """ + material_cells = OrderedDict() - all_cells = self.get_all_cells() - material_cells = [] - - for cell in all_cells: + for cell in self.get_all_cells().values(): if cell.fill_type in ('material', 'distribmat'): if cell not in material_cells: - material_cells.append(cell) + material_cells[cell.id] = cell - material_cells.sort(key=lambda x: x.id) return material_cells def get_all_material_universes(self): - """Return all universes composed of at least one non-fill cell + """Return all universes having at least one material-filled cell. + + This method can be used to find universes that have at least one cell + that is filled with a material or is void. Returns ------- - list of openmc.Universe - Universes with non-fill cells + collections.OrderedDict + Dictionary mapping universe IDs to :class:`openmc.Universe` + instances with at least one material-filled cell """ + material_universes = OrderedDict() - all_universes = self.get_all_universes() - material_universes = [] - - for universe in all_universes: - cells = universe.cells - for cell in cells: + for universe in self.get_all_universes(): + for cell in universe.cells: if cell.fill_type in ('material', 'distribmat', 'void'): if universe not in material_universes: - material_universes.append(universe) + material_universes[universe.id] = universe - material_universes.sort(key=lambda x: x.id) return material_universes def get_all_lattices(self): @@ -254,20 +235,17 @@ class Geometry(object): Returns ------- - list of openmc.Lattice - Lattices in the geometry + collections.OrderedDict + Dictionary mapping lattice IDs to :class:`openmc.Lattice` instances """ + lattices = OrderedDict() - cells = self.get_all_cells() - lattices = [] - - for cell in cells: + for cell in self.get_all_cells(): if cell.fill_type == 'lattice': if cell.fill not in lattices: - lattices.append(cell.fill) + lattices[cell.fill.id] = cell.fill - lattices.sort(key=lambda x: x.id) return lattices def get_materials_by_name(self, name, case_sensitive=False, matching=False): @@ -293,7 +271,7 @@ class Geometry(object): if not case_sensitive: name = name.lower() - all_materials = self.get_all_materials() + all_materials = self.get_all_materials().values() materials = set() for material in all_materials: @@ -333,7 +311,7 @@ class Geometry(object): if not case_sensitive: name = name.lower() - all_cells = self.get_all_cells() + all_cells = self.get_all_cells().values() cells = set() for cell in all_cells: @@ -373,7 +351,7 @@ class Geometry(object): if not case_sensitive: name = name.lower() - all_cells = self.get_all_cells() + all_cells = self.get_all_cells().values() cells = set() for cell in all_cells: @@ -413,7 +391,7 @@ class Geometry(object): if not case_sensitive: name = name.lower() - all_universes = self.get_all_universes() + all_universes = self.get_all_universes().values() universes = set() for universe in all_universes: @@ -453,7 +431,7 @@ class Geometry(object): if not case_sensitive: name = name.lower() - all_lattices = self.get_all_lattices() + all_lattices = self.get_all_lattices().values() lattices = set() for lattice in all_lattices: diff --git a/openmc/lattice.py b/openmc/lattice.py index d6f701e52..361c2a6be 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -110,6 +110,157 @@ class Lattice(object): cv.check_type('outer universe', outer, openmc.Universe) self._outer = outer + @staticmethod + def from_hdf5(group, universes): + """Create lattice from HDF5 group + + Parameters + ---------- + group : h5py.Group + Group in HDF5 file + universes : dict + Dictionary mapping universe IDs to instances of + :class:`openmc.Universe`. + + Returns + ------- + openmc.Lattice + Instance of lattice subclass + + """ + lattice_id = int(group.name.split('/')[-1].lstrip('lattice ')) + name = group['name'].value.decode() + lattice_type = group['type'].value.decode() + + if 'offsets' in group: + offsets = group['offsets'][...] + else: + offsets = None + + if lattice_type == 'rectangular': + dimension = group['dimension'][...] + lower_left = group['lower_left'][...] + pitch = group['pitch'][...] + outer = group['outer'].value + universe_ids = group['universes'][...] + + # Create the Lattice + lattice = openmc.RectLattice(lattice_id, name) + lattice.lower_left = lower_left + lattice.pitch = pitch + + # If the Universe specified outer the Lattice is not void + if outer >= 0: + lattice.outer = universes[outer] + + # Build array of Universe pointers for the Lattice + uarray = np.empty(universe_ids.shape, dtype=openmc.Universe) + + for z in range(universe_ids.shape[0]): + for y in range(universe_ids.shape[1]): + for x in range(universe_ids.shape[2]): + uarray[z, y, x] = universes[universe_ids[z, y, x]] + + # Use 2D NumPy array to store lattice universes for 2D lattices + if len(dimension) == 2: + uarray = np.squeeze(uarray) + uarray = np.atleast_2d(uarray) + + # Set the universes for the lattice + lattice.universes = uarray + + # Set the distribcell offsets for the lattice + if offsets is not None: + lattice.offsets = offsets + + elif lattice_type == 'hexagonal': + n_rings = group['n_rings'].value + n_axial = group['n_axial'].value + center = group['center'][...] + pitch = group['pitch'][...] + outer = group['outer'].value + + universe_ids = group['universes'][...] + + # Create the Lattice + lattice = openmc.HexLattice(lattice_id, name) + lattice.center = center + lattice.pitch = pitch + + # If the Universe specified outer the Lattice is not void + if outer >= 0: + lattice.outer = universes[outer] + + # Build array of Universe pointers for the Lattice. Note that + # we need to convert between the HDF5's square array of + # (x, alpha, z) to the Python API's format of a ragged nested + # list of (z, ring, theta). + uarray = [] + for z in range(n_axial): + # Add a list for this axial level. + uarray.append([]) + x = n_rings - 1 + a = 2*n_rings - 2 + for r in range(n_rings - 1, 0, -1): + # Add a list for this ring. + uarray[-1].append([]) + + # Climb down the top-right. + for i in range(r): + uarray[-1][-1].append(universe_ids[z, a, x]) + x += 1 + a -= 1 + + # Climb down the right. + for i in range(r): + uarray[-1][-1].append(universe_ids[z, a, x]) + a -= 1 + + # Climb down the bottom-right. + for i in range(r): + uarray[-1][-1].append(universe_ids[z, a, x]) + x -= 1 + + # Climb up the bottom-left. + for i in range(r): + uarray[-1][-1].append(universe_ids[z, a, x]) + x -= 1 + a += 1 + + # Climb up the left. + for i in range(r): + uarray[-1][-1].append(universe_ids[z, a, x]) + a += 1 + + # Climb up the top-left. + for i in range(r): + uarray[-1][-1].append(universe_ids[z, a, x]) + x += 1 + + # Move down to the next ring. + a -= 1 + + # Convert the ids into Universe objects. + uarray[-1][-1] = [universes[u_id] + for u_id in uarray[-1][-1]] + + # Handle the degenerate center ring separately. + u_id = universe_ids[z, a, x] + uarray[-1].append([universes[u_id]]) + + # Add the universes to the lattice. + if len(pitch) == 2: + # Lattice is 3D + lattice.universes = uarray + else: + # Lattice is 2D; extract the only axial level + lattice.universes = uarray[0] + + if offsets is not None: + lattice.offsets = offsets + + return lattice + def get_unique_universes(self): """Determine all unique universes in the lattice diff --git a/openmc/material.py b/openmc/material.py index 7d59c52ee..b9705243e 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -259,6 +259,49 @@ class Material(object): depletable, bool) self._depletable = depletable + @classmethod + def from_hdf5(cls, group): + """Create material from HDF5 group + + Parameters + ---------- + group : h5py.Group + Group in HDF5 file + + Returns + ------- + openmc.Material + Material instance + + """ + mat_id = int(group.name.split('/')[-1].lstrip('material ')) + + name = group['name'].value.decode() + density = group['atom_density'].value + nuc_densities = group['nuclide_densities'][...] + nuclides = group['nuclides'].value + + # Create the Material + material = cls(mat_id, name) + material.depletable = bool(group.attrs['depletable']) + + # Read the names of the S(a,b) tables for this Material and add them + if 'sab_names' in group: + sab_tables = group['sab_names'].value + for sab_table in sab_tables: + name = sab_table.decode() + material.add_s_alpha_beta(name) + + # Set the Material's density to atom/b-cm as used by OpenMC + material.set_density(density=density, units='atom/b-cm') + + # Add all nuclides to the Material + for fullname, density in zip(nuclides, nuc_densities): + name = fullname.decode().strip() + material.add_nuclide(name, percent=density, percent_type='ao') + + return material + def set_density(self, units, density=None): """Set the density of the material diff --git a/openmc/mesh.py b/openmc/mesh.py index 960ce4a1b..6e3f2a266 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -160,23 +160,50 @@ class Mesh(EqualityMixin): string += '{0: <16}{1}{2}\n'.format('\tPixels', '=\t', self._width) return string + @classmethod + def from_hdf5(cls, group): + """Create mesh from HDF5 group + + Parameters + ---------- + group : h5py.Group + Group in HDF5 file + + Returns + ------- + openmc.Mesh + Mesh instance + + """ + mesh_id = int(group.name.split('/')[-1].lstrip('mesh ')) + + # Read and assign mesh properties + mesh = cls(mesh_id) + mesh.type = group['type'].value.decode() + mesh.dimension = group['dimension'].value + mesh.lower_left = group['lower_left'].value + mesh.upper_right = group['upper_right'].value + mesh.width = group['width'].value + + return mesh + def cell_generator(self): - """Generator function to traverse through every [i,j,k] index - of the mesh. + """Generator function to traverse through every [i,j,k] index of the + mesh For example the following code: .. code-block:: python for mesh_index in mymesh.cell_generator(): - print mesh_index + print(mesh_index) will produce the following output for a 3-D 2x2x2 mesh in mymesh:: [1, 1, 1] - [1, 1, 2] + [2, 1, 1] [1, 2, 1] - [1, 2, 2] + [2, 2, 1] ... @@ -186,13 +213,13 @@ class Mesh(EqualityMixin): for x in range(self.dimension[0]): yield [x + 1, 1, 1] elif len(self.dimension) == 2: - for x in range(self.dimension[0]): - for y in range(self.dimension[1]): + for y in range(self.dimension[1]): + for x in range(self.dimension[0]): yield [x + 1, y + 1, 1] else: - for x in range(self.dimension[0]): + for z in range(self.dimension[2]): for y in range(self.dimension[1]): - for z in range(self.dimension[2]): + for x in range(self.dimension[0]): yield [x + 1, y + 1, z + 1] def to_xml_element(self): @@ -294,25 +321,17 @@ class Mesh(EqualityMixin): # Build the universes which will be used for each of the [i,j,k] # locations within the mesh. - # We will also have to build cells to assign to these universes - universes = np.ndarray(self.dimension[::-1], dtype=np.object) + # We will concurrently build cells to assign to these universes cells = [] + universes = [] for [i, j, k] in self.cell_generator(): - if len(self.dimension) == 1: - universes[i - 1] = openmc.Universe() - cells.append(openmc.Cell()) - universes[i - 1].add_cells([cells[-1]]) - elif len(self.dimension) == 2: - universes[j - 1, i - 1] = openmc.Universe() - cells.append(openmc.Cell()) - universes[j - 1, i - 1].add_cells([cells[-1]]) - else: - universes[k - 1, j - 1, i - 1] = openmc.Universe() - cells.append(openmc.Cell()) - universes[k - 1, j - 1, i - 1].add_cells([cells[-1]]) + cells.append(openmc.Cell()) + universes.append(openmc.Universe()) + universes[-1].add_cell(cells[-1]) lattice = openmc.RectLattice() lattice.lower_left = self.lower_left + lattice.universes = np.reshape(universes, self.dimension) if self.width is not None: lattice.pitch = self.width @@ -332,7 +351,6 @@ class Mesh(EqualityMixin): dz = ((self.upper_right[2] - self.lower_left[2]) / self.dimension[2]) lattice.pitch = [dx, dy, dz] - lattice.universes = universes # Fill Cell with the Lattice root_cell.fill = lattice diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 08d9d9147..c0f8488a7 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -3,7 +3,7 @@ import os import copy import pickle from numbers import Integral -from collections import OrderedDict +from collections import OrderedDict, Iterable from warnings import warn from six import string_types @@ -31,7 +31,7 @@ class Library(object): Parameters ---------- - openmc_geometry : openmc.Geometry + geometry : openmc.Geometry A geometry which has been initialized with a root universe by_nuclide : bool If true, computes cross sections for each nuclide in each domain @@ -43,12 +43,8 @@ class Library(object): Attributes ---------- - openmc_geometry : openmc.Geometry + geometry : openmc.Geometry An geometry which has been initialized with a root universe - opencg_geometry : opencg.Geometry - An OpenCG geometry object equivalent to the OpenMC geometry - encapsulated by the summary file. Use of this attribute requires - installation of the OpenCG Python module. by_nuclide : bool If true, computes cross sections for each nuclide in each domain mgxs_types : Iterable of str @@ -100,12 +96,11 @@ class Library(object): """ - def __init__(self, openmc_geometry, by_nuclide=False, + def __init__(self, geometry, by_nuclide=False, mgxs_types=None, name=''): self._name = '' - self._openmc_geometry = None - self._opencg_geometry = None + self._geometry = None self._by_nuclide = None self._mgxs_types = [] self._domain_type = None @@ -126,7 +121,7 @@ class Library(object): self._estimator = None self.name = name - self.openmc_geometry = openmc_geometry + self.geometry = geometry self.by_nuclide = by_nuclide if mgxs_types is not None: @@ -139,8 +134,7 @@ class Library(object): if existing is None: clone = type(self).__new__(type(self)) clone._name = self.name - clone._openmc_geometry = self.openmc_geometry - clone._opencg_geometry = None + clone._geometry = self.geometry clone._by_nuclide = self.by_nuclide clone._mgxs_types = self.mgxs_types clone._domain_type = self.domain_type @@ -175,15 +169,8 @@ class Library(object): return existing @property - def openmc_geometry(self): - return self._openmc_geometry - - @property - def opencg_geometry(self): - if self._opencg_geometry is None: - from openmc.opencg_compatible import get_opencg_geometry - self._opencg_geometry = get_opencg_geometry(self._openmc_geometry) - return self._opencg_geometry + def geometry(self): + return self._geometry @property def name(self): @@ -205,11 +192,11 @@ class Library(object): def domains(self): if self._domains == 'all': if self.domain_type == 'material': - return self.openmc_geometry.get_all_materials() + return list(self.geometry.get_all_materials().values()) elif self.domain_type in ['cell', 'distribcell']: - return self.openmc_geometry.get_all_material_cells() + return list(self.geometry.get_all_material_cells().values()) elif self.domain_type == 'universe': - return self.openmc_geometry.get_all_universes() + return list(self.geometry.get_all_universes().values()) elif self.domain_type == 'mesh': raise ValueError('Unable to get domains for Mesh domain type') else: @@ -277,11 +264,10 @@ class Library(object): def sparse(self): return self._sparse - @openmc_geometry.setter - def openmc_geometry(self, openmc_geometry): - cv.check_type('openmc_geometry', openmc_geometry, openmc.Geometry) - self._openmc_geometry = openmc_geometry - self._opencg_geometry = None + @geometry.setter + def geometry(self, geometry): + cv.check_type('geometry', geometry, openmc.Geometry) + self._geometry = geometry @name.setter def name(self, name): @@ -329,16 +315,16 @@ class Library(object): # User specified a list of material, cell or universe domains else: if self.domain_type == 'material': - cv.check_iterable_type('domain', domains, openmc.Material) - all_domains = self.openmc_geometry.get_all_materials() + cv.check_type('domain', domains, Iterable, openmc.Material) + all_domains = self.geometry.get_all_materials().values() elif self.domain_type in ['cell', 'distribcell']: - cv.check_iterable_type('domain', domains, openmc.Cell) - all_domains = self.openmc_geometry.get_all_material_cells() + cv.check_type('domain', domains, Iterable, openmc.Cell) + all_domains = self.geometry.get_all_material_cells().values() elif self.domain_type == 'universe': - cv.check_iterable_type('domain', domains, openmc.Universe) - all_domains = self.openmc_geometry.get_all_universes() + cv.check_type('domain', domains, Iterable, openmc.Universe) + all_domains = self.geometry.get_all_universes().values() elif self.domain_type == 'mesh': - cv.check_iterable_type('domain', domains, openmc.Mesh) + cv.check_type('domain', domains, Iterable, openmc.Mesh) # The mesh and geometry are independent, so set all_domains # to the input domains @@ -353,7 +339,7 @@ class Library(object): raise ValueError('Domain "{}" could not be found in the ' 'geometry.'.format(domain)) - self._domains = domains + self._domains = list(domains) @energy_groups.setter def energy_groups(self, energy_groups): @@ -598,7 +584,7 @@ class Library(object): raise ValueError(msg) self._sp_filename = statepoint._f.filename - self._openmc_geometry = statepoint.summary.openmc_geometry + self._geometry = statepoint.summary.geometry self._nuclides = statepoint.summary.nuclides if statepoint.run_mode == 'k-eigenvalue': @@ -1332,6 +1318,7 @@ class Library(object): root_cell, cells = \ self.domains[0].build_cells(bc) root.add_cell(root_cell) + geometry = openmc.Geometry() geometry.root_universe = root materials = openmc.Materials() @@ -1353,11 +1340,11 @@ class Library(object): else: # Create a copy of the Geometry for these Macroscopics - geometry = copy.deepcopy(self.openmc_geometry) + geometry = copy.deepcopy(self.geometry) materials = openmc.Materials() # Get all Cells from the Geometry for differentiation - all_cells = geometry.get_all_material_cells() + all_cells = geometry.get_all_material_cells().values() # Create the xsdata object and add it to the mgxs_file for i, domain in enumerate(self.domains): diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 792fedc5c..d4cb40b3d 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -708,7 +708,7 @@ class MGXS(object): elif mgxs_type == 'transport': mgxs = TransportXS(domain, domain_type, energy_groups) elif mgxs_type == 'nu-transport': - mgxs = NuTransportXS(domain, domain_type, energy_groups) + mgxs = TransportXS(domain, domain_type, energy_groups, nu=True) elif mgxs_type == 'absorption': mgxs = AbsorptionXS(domain, domain_type, energy_groups) elif mgxs_type == 'capture': @@ -716,17 +716,17 @@ class MGXS(object): elif mgxs_type == 'fission': mgxs = FissionXS(domain, domain_type, energy_groups) elif mgxs_type == 'nu-fission': - mgxs = NuFissionXS(domain, domain_type, energy_groups) + mgxs = FissionXS(domain, domain_type, energy_groups, nu=True) elif mgxs_type == 'kappa-fission': mgxs = KappaFissionXS(domain, domain_type, energy_groups) elif mgxs_type == 'scatter': mgxs = ScatterXS(domain, domain_type, energy_groups) elif mgxs_type == 'nu-scatter': - mgxs = NuScatterXS(domain, domain_type, energy_groups) + mgxs = ScatterXS(domain, domain_type, energy_groups, nu=True) elif mgxs_type == 'scatter matrix': mgxs = ScatterMatrixXS(domain, domain_type, energy_groups) elif mgxs_type == 'nu-scatter matrix': - mgxs = NuScatterMatrixXS(domain, domain_type, energy_groups) + mgxs = ScatterMatrixXS(domain, domain_type, energy_groups, nu=True) elif mgxs_type == 'multiplicity matrix': mgxs = MultiplicityMatrixXS(domain, domain_type, energy_groups) elif mgxs_type == 'scatter probability matrix': @@ -742,13 +742,14 @@ class MGXS(object): elif mgxs_type == 'chi': mgxs = Chi(domain, domain_type, energy_groups) elif mgxs_type == 'chi-prompt': - mgxs = ChiPrompt(domain, domain_type, energy_groups) + mgxs = Chi(domain, domain_type, energy_groups, prompt=True) elif mgxs_type == 'inverse-velocity': mgxs = InverseVelocity(domain, domain_type, energy_groups) elif mgxs_type == 'prompt-nu-fission': - mgxs = PromptNuFissionXS(domain, domain_type, energy_groups) + mgxs = FissionXS(domain, domain_type, energy_groups, prompt=True) elif mgxs_type == 'prompt-nu-fission matrix': - mgxs = PromptNuFissionMatrixXS(domain, domain_type, energy_groups) + mgxs = NuFissionMatrixXS(domain, domain_type, energy_groups, + prompt=True) mgxs.by_nuclide = by_nuclide mgxs.name = name @@ -906,7 +907,7 @@ class MGXS(object): """ - cv.check_type('statepoint', statepoint, openmc.statepoint.StatePoint) + cv.check_type('statepoint', statepoint, openmc.StatePoint) if statepoint.summary is None: msg = 'Unable to load data from a statepoint which has not been ' \ @@ -916,12 +917,13 @@ class MGXS(object): # Override the domain object that loaded from an OpenMC summary file # NOTE: This is necessary for micro cross-sections which require # the isotopic number densities as computed by OpenMC - if self.domain_type == 'cell' or self.domain_type == 'distribcell': - self.domain = statepoint.summary.get_cell_by_id(self.domain.id) + geom = statepoint.summary.geometry + if self.domain_type in ('cell', 'distribcell'): + self.domain = geom.get_all_cells()[self.domain.id] elif self.domain_type == 'universe': - self.domain = statepoint.summary.get_universe_by_id(self.domain.id) + self.domain = geom.get_all_universes()[self.domain.id] elif self.domain_type == 'material': - self.domain = statepoint.summary.get_material_by_id(self.domain.id) + self.domain = geom.get_all_materials()[self.domain.id] elif self.domain_type == 'mesh': self.domain = statepoint.meshes[self.domain.id] else: @@ -2566,9 +2568,8 @@ class TotalXS(MGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): + def __init__(self, domain=None, domain_type=None, groups=None, + by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(TotalXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) @@ -2610,6 +2611,9 @@ class TransportXS(MGXS): \sigma_{tr} &= \frac{\langle \sigma_t \phi \rangle - \langle \sigma_{s1} \phi \rangle}{\langle \phi \rangle} + To incorporate the effect of scattering multiplication in the above + relation, the `nu` parameter can be set to `True`. + Parameters ---------- domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh @@ -2618,6 +2622,9 @@ class TransportXS(MGXS): The domain type for spatial homogenization groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation + nu : bool + If True, the cross section data will include neutron multiplication; + defaults to True. by_nuclide : bool If true, computes cross sections for each nuclide in domain name : str, optional @@ -2636,6 +2643,8 @@ class TransportXS(MGXS): Name of the multi-group cross section rxn_type : str Reaction type (e.g., 'total', 'nu-fission', etc.) + nu : bool + If True, the cross section data will include neutron multiplication by_nuclide : bool If true, computes cross sections for each nuclide in domain domain : Material or Cell or Universe or Mesh @@ -2696,19 +2705,37 @@ class TransportXS(MGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): + def __init__(self, domain=None, domain_type=None, groups=None, nu=False, + by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(TransportXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) - self._rxn_type = 'transport' + if not nu: + self._rxn_type = 'transport' + else: + self._rxn_type = 'nu-transport' self._estimator = 'analog' self._valid_estimators = ['analog'] + self.nu = nu + + def __deepcopy__(self, memo): + clone = super(TransportXS, self).__deepcopy__(memo) + clone._nu = self.nu + return clone @property def scores(self): - return ['flux', 'total', 'scatter-1'] + if not self.nu: + return ['flux', 'total', 'scatter-1'] + else: + return ['flux', 'total', 'nu-scatter-1'] + + @property + def tally_keys(self): + if not self.nu: + return super(TransportXS, self).tally_keys + else: + return ['flux', 'total', 'scatter-1'] @property def filters(self): @@ -2734,130 +2761,14 @@ class TransportXS(MGXS): return self._rxn_rate_tally - -class NuTransportXS(TransportXS): - r"""A transport-corrected total multi-group cross section which - accounts for neutron multiplicity in scattering reactions. - - This class can be used for both OpenMC input generation and tally data - post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. At a - minimum, one needs to set the :attr:`NuTransportXS.energy_groups` and - :attr:`NuTransportXS.domain` properties. Tallies for the flux and - appropriate reaction rates over the specified domain are generated - automatically via the :attr:`NuTransportXS.tallies` property, which can then - be appended to a :class:`openmc.Tallies` instance. - - For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the - necessary data to compute multi-group cross sections from a - :class:`openmc.StatePoint` instance. The derived multi-group cross section - can then be obtained from the :attr:`NuTransportXS.xs_tally` property. - - The calculation of the transport-corrected cross section is the same as that - for :class:`TransportXS` except that the scattering multiplicity is - accounted for. - - Parameters - ---------- - domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh - The domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - The domain type for spatial homogenization - groups : openmc.mgxs.EnergyGroups - The energy group structure for energy condensation - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - name : str, optional - Name of the multi-group cross section. Used as a label to identify - tallies in OpenMC 'tallies.xml' file. - num_polar : Integral, optional - Number of equi-width polar angle bins for angle discretization; - defaults to one bin - num_azimuthal : Integral, optional - Number of equi-width azimuthal angle bins for angle discretization; - defaults to one bin - - Attributes - ---------- - name : str, optional - Name of the multi-group cross section - rxn_type : str - Reaction type (e.g., 'total', 'nu-fission', etc.) - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - domain : Material or Cell or Universe or Mesh - Domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - Domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups - Energy group structure for energy condensation - num_polar : Integral - Number of equi-width polar angle bins for angle discretization - num_azimuthal : Integral - Number of equi-width azimuthal angle bins for angle discretization - tally_trigger : openmc.Trigger - An (optional) tally precision trigger given to each tally used to - compute the cross section - scores : list of str - The scores in each tally used to compute the multi-group cross section - filters : list of openmc.Filter - The filters in each tally used to compute the multi-group cross section - tally_keys : list of str - The keys into the tallies dictionary for each tally used to compute - the multi-group cross section - estimator : 'analog' - The tally estimator used to compute the multi-group cross section - tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section. The keys - are strings listed in the :attr:`NuTransportXS.tally_keys` property and - values are instances of :class:`openmc.Tally`. - rxn_rate_tally : openmc.Tally - Derived tally for the reaction rate tally used in the numerator to - compute the multi-group cross section. This attribute is None - unless the multi-group cross section has been computed. - xs_tally : openmc.Tally - Derived tally for the multi-group cross section. This attribute - is None unless the multi-group cross section has been computed. - num_subdomains : int - The number of subdomains is unity for 'material', 'cell' and 'universe' - domain types. This is equal to the number of cell instances - for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). - num_nuclides : int - The number of nuclides for which the multi-group cross section is - being tracked. This is unity if the by_nuclide attribute is False. - nuclides : Iterable of str or 'sum' - The optional user-specified nuclides for which to compute cross - sections (e.g., 'U238', 'O16'). If by_nuclide is True but nuclides - are not specified by the user, all nuclides in the spatial domain - are included. This attribute is 'sum' if by_nuclide is false. - sparse : bool - Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format - for compressed data storage - loaded_sp : bool - Whether or not a statepoint file has been loaded with tally data - derived : bool - Whether or not the MGXS is merged from one or more other MGXS - hdf5_key : str - The key used to index multi-group cross sections in an HDF5 data store - - """ - - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): - super(NuTransportXS, self).__init__(domain, domain_type, - groups, by_nuclide, name, - num_polar, num_azimuthal) - self._rxn_type = 'nu-transport' - @property - def scores(self): - return ['flux', 'total', 'nu-scatter-1'] + def nu(self): + return self._nu - @property - def tally_keys(self): - return ['flux', 'total', 'scatter-1'] + @nu.setter + def nu(self, nu): + cv.check_type('nu', nu, bool) + self._nu = nu class AbsorptionXS(MGXS): @@ -2977,9 +2888,8 @@ class AbsorptionXS(MGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): + def __init__(self, domain=None, domain_type=None, groups=None, + by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(AbsorptionXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) @@ -3105,9 +3015,8 @@ class CaptureXS(MGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): + def __init__(self, domain=None, domain_type=None, groups=None, + by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(CaptureXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) @@ -3153,6 +3062,16 @@ class FissionXS(MGXS): \sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. + To incorporate the effect of neutron multiplication in the above + relation, the `nu` parameter can be set to `True`. + + This class can also be used to gather a prompt-nu-fission cross section + (which only includes the contributions from prompt neutrons). This is + accomplished by setting the :attr:`FissionXS.prompt` attribute to `True`. + Since the prompt-nu-fission cross section requires neutron multiplication, + the `nu` parameter will automatically be set to `True` if `prompt` is also + `True`. + Parameters ---------- domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh @@ -3161,6 +3080,13 @@ class FissionXS(MGXS): The domain type for spatial homogenization groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation + nu : bool + If True, the cross section data will include neutron multiplication; + defaults to False + prompt : bool + If true, computes cross sections which only includes prompt neutrons; + defaults to False which includes prompt and delayed in total. Setting + this to True will also set nu to True by_nuclide : bool If true, computes cross sections for each nuclide in domain name : str, optional @@ -3179,6 +3105,10 @@ class FissionXS(MGXS): Name of the multi-group cross section rxn_type : str Reaction type (e.g., 'total', 'nu-fission', etc.) + nu : bool + If True, the cross section data will include neutron multiplication + prompt : bool + If true, computes cross sections which only includes prompt neutrons by_nuclide : bool If true, computes cross sections for each nuclide in domain domain : Material or Cell or Universe or Mesh @@ -3239,136 +3169,46 @@ class FissionXS(MGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, + def __init__(self, domain=None, domain_type=None, groups=None, nu=False, + prompt=False, by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(FissionXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) - self._rxn_type = 'fission' + if not prompt: + if not nu: + self._rxn_type = 'fission' + else: + self._rxn_type = 'nu-fission' + self.nu = nu + else: + self._rxn_type = 'prompt-nu-fission' + self.nu = True + self.prompt = prompt + def __deepcopy__(self, memo): + clone = super(FissionXS, self).__deepcopy__(memo) + clone._nu = self.nu + clone._prompt = self.prompt + return clone -class NuFissionXS(MGXS): - r"""A fission neutron production multi-group cross section. + @property + def nu(self): + return self._nu - This class can be used for both OpenMC input generation and tally data - post-processing to compute spatially-homogenized and energy-integrated - multi-group fission neutron production cross sections for multi-group - neutronics calculations. At a minimum, one needs to set the - :attr:`NuFissionXS.energy_groups` and :attr:`NuFissionXS.domain` - properties. Tallies for the flux and appropriate reaction rates over the - specified domain are generated automatically via the - :attr:`NuFissionXS.tallies` property, which can then be appended to a - :class:`openmc.Tallies` instance. + @property + def prompt(self): + return self._prompt - For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the - necessary data to compute multi-group cross sections from a - :class:`openmc.StatePoint` instance. The derived multi-group cross section - can then be obtained from the :attr:`NuFissionXS.xs_tally` property. + @nu.setter + def nu(self, nu): + cv.check_type('nu', nu, bool) + self._nu = nu - For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the - fission neutron production cross section is calculated as: - - .. math:: - - \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; - \nu\sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} - d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. - - - Parameters - ---------- - domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh - The domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - The domain type for spatial homogenization - groups : openmc.mgxs.EnergyGroups - The energy group structure for energy condensation - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - name : str, optional - Name of the multi-group cross section. Used as a label to identify - tallies in OpenMC 'tallies.xml' file. - num_polar : Integral, optional - Number of equi-width polar angle bins for angle discretization; - defaults to one bin - num_azimuthal : Integral, optional - Number of equi-width azimuthal angle bins for angle discretization; - defaults to one bin - - Attributes - ---------- - name : str, optional - Name of the multi-group cross section - rxn_type : str - Reaction type (e.g., 'total', 'nu-fission', etc.) - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - domain : Material or Cell or Universe or Mesh - Domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - Domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups - Energy group structure for energy condensation - num_polar : Integral - Number of equi-width polar angle bins for angle discretization - num_azimuthal : Integral - Number of equi-width azimuthal angle bins for angle discretization - tally_trigger : openmc.Trigger - An (optional) tally precision trigger given to each tally used to - compute the cross section - scores : list of str - The scores in each tally used to compute the multi-group cross section - filters : list of openmc.Filter - The filters in each tally used to compute the multi-group cross section - tally_keys : list of str - The keys into the tallies dictionary for each tally used to compute - the multi-group cross section - estimator : {'tracklength', 'collision', 'analog'} - The tally estimator used to compute the multi-group cross section - tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section. The keys - are strings listed in the :attr:`NuFissionXS.tally_keys` property and - values are instances of :class:`openmc.Tally`. - rxn_rate_tally : openmc.Tally - Derived tally for the reaction rate tally used in the numerator to - compute the multi-group cross section. This attribute is None - unless the multi-group cross section has been computed. - xs_tally : openmc.Tally - Derived tally for the multi-group cross section. This attribute - is None unless the multi-group cross section has been computed. - num_subdomains : int - The number of subdomains is unity for 'material', 'cell' and 'universe' - domain types. This is equal to the number of cell instances - for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). - num_nuclides : int - The number of nuclides for which the multi-group cross section is - being tracked. This is unity if the by_nuclide attribute is False. - nuclides : Iterable of str or 'sum' - The optional user-specified nuclides for which to compute cross - sections (e.g., 'U238', 'O16'). If by_nuclide is True but nuclides - are not specified by the user, all nuclides in the spatial domain - are included. This attribute is 'sum' if by_nuclide is false. - sparse : bool - Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format - for compressed data storage - loaded_sp : bool - Whether or not a statepoint file has been loaded with tally data - derived : bool - Whether or not the MGXS is merged from one or more other MGXS - hdf5_key : str - The key used to index multi-group cross sections in an HDF5 data store - - """ - - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): - super(NuFissionXS, self).__init__(domain, domain_type, - groups, by_nuclide, name, num_polar, - num_azimuthal) - self._rxn_type = 'nu-fission' + @prompt.setter + def prompt(self, prompt): + cv.check_type('prompt', prompt, bool) + self._prompt = prompt class KappaFissionXS(MGXS): @@ -3490,9 +3330,8 @@ class KappaFissionXS(MGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): + def __init__(self, domain=None, domain_type=None, groups=None, + by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(KappaFissionXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) @@ -3529,6 +3368,9 @@ class ScatterXS(MGXS): \Omega) \right ]}{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. + To incorporate the effect of scattering multiplication from (n,xn) + reactions in the above relation, the `nu` parameter can be set to `True`. + Parameters ---------- domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh @@ -3537,6 +3379,9 @@ class ScatterXS(MGXS): The domain type for spatial homogenization groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation + nu : bool + If True, the cross section data will include neutron multiplication; + defaults to False by_nuclide : bool If true, computes cross sections for each nuclide in domain name : str, optional @@ -3555,6 +3400,8 @@ class ScatterXS(MGXS): Name of the multi-group cross section rxn_type : str Reaction type (e.g., 'total', 'nu-fission', etc.) + nu : bool + If True, the cross section data will include neutron multiplication by_nuclide : bool If true, computes cross sections for each nuclide in domain domain : Material or Cell or Universe or Mesh @@ -3615,141 +3462,34 @@ class ScatterXS(MGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): + def __init__(self, domain=None, domain_type=None, groups=None, nu=False, + by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(ScatterXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) - self._rxn_type = 'scatter' + if not nu: + self._rxn_type = 'scatter' + else: + self._rxn_type = 'nu-scatter' + # Only analog estimators are valid so change from the defaults + # to reflect this + self._estimator = 'analog' + self._valid_estimators = ['analog'] + self.nu = nu -class NuScatterXS(MGXS): - r"""A scattering neutron production multi-group cross section. + def __deepcopy__(self, memo): + clone = super(ScatterXS, self).__deepcopy__(memo) + clone._nu = self.nu + return clone - The neutron production from scattering is defined as the average number of - neutrons produced from all neutron-producing reactions except for fission. + @property + def nu(self): + return self._nu - This class can be used for both OpenMC input generation and tally data - post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. At a - minimum, one needs to set the :attr:`NuScatterXS.energy_groups` and - :attr:`NuScatterXS.domain` properties. Tallies for the flux and appropriate - reaction rates over the specified domain are generated automatically via the - :attr:`NuScatterXS.tallies` property, which can then be appended to a - :class:`openmc.Tallies` instance. - - For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the - necessary data to compute multi-group cross sections from a - :class:`openmc.StatePoint` instance. The derived multi-group cross section - can then be obtained from the :attr:`NuScatterXS.xs_tally` property. - - For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the - scattering neutron production cross section is calculated as: - - .. math:: - - \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; - \sum_i \upsilon_i \sigma_i (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr - \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. - - where :math:`\upsilon_i` is the multiplicity of the :math:`i`-th scattering - reaction. - - Parameters - ---------- - domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh - The domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - The domain type for spatial homogenization - groups : openmc.mgxs.EnergyGroups - The energy group structure for energy condensation - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - name : str, optional - Name of the multi-group cross section. Used as a label to identify - tallies in OpenMC 'tallies.xml' file. - num_polar : Integral, optional - Number of equi-width polar angle bins for angle discretization; - defaults to one bin - num_azimuthal : Integral, optional - Number of equi-width azimuthal angle bins for angle discretization; - defaults to one bin - - Attributes - ---------- - name : str, optional - Name of the multi-group cross section - rxn_type : str - Reaction type (e.g., 'total', 'nu-fission', etc.) - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - domain : Material or Cell or Universe or Mesh - Domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - Domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups - Energy group structure for energy condensation - num_polar : Integral - Number of equi-width polar angle bins for angle discretization - num_azimuthal : Integral - Number of equi-width azimuthal angle bins for angle discretization - tally_trigger : openmc.Trigger - An (optional) tally precision trigger given to each tally used to - compute the cross section - scores : list of str - The scores in each tally used to compute the multi-group cross section - filters : list of openmc.Filter - The filters in each tally used to compute the multi-group cross section - tally_keys : list of str - The keys into the tallies dictionary for each tally used to compute - the multi-group cross section - estimator : 'analog' - The tally estimator used to compute the multi-group cross section - tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section. The keys - are strings listed in the :attr:`NuScatterXS.tally_keys` property and - values are instances of :class:`openmc.Tally`. - rxn_rate_tally : openmc.Tally - Derived tally for the reaction rate tally used in the numerator to - compute the multi-group cross section. This attribute is None - unless the multi-group cross section has been computed. - xs_tally : openmc.Tally - Derived tally for the multi-group cross section. This attribute - is None unless the multi-group cross section has been computed. - num_subdomains : int - The number of subdomains is unity for 'material', 'cell' and 'universe' - domain types. This is equal to the number of cell instances - for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). - num_nuclides : int - The number of nuclides for which the multi-group cross section is - being tracked. This is unity if the by_nuclide attribute is False. - nuclides : Iterable of str or 'sum' - The optional user-specified nuclides for which to compute cross - sections (e.g., 'U238', 'O16'). If by_nuclide is True but nuclides - are not specified by the user, all nuclides in the spatial domain - are included. This attribute is 'sum' if by_nuclide is false. - sparse : bool - Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format - for compressed data storage - loaded_sp : bool - Whether or not a statepoint file has been loaded with tally data - derived : bool - Whether or not the MGXS is merged from one or more other MGXS - hdf5_key : str - The key used to index multi-group cross sections in an HDF5 data store - - """ - - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): - super(NuScatterXS, self).__init__(domain, domain_type, - groups, by_nuclide, name, num_polar, - num_azimuthal) - self._rxn_type = 'nu-scatter' - self._estimator = 'analog' - self._valid_estimators = ['analog'] + @nu.setter + def nu(self, nu): + cv.check_type('nu', nu, bool) + self._nu = nu class ScatterMatrixXS(MatrixMGXS): @@ -3794,6 +3534,8 @@ class ScatterMatrixXS(MatrixMGXS): \phi \rangle - \delta_{gg'} \sum_{g''} \langle \sigma_{s,1,g''\rightarrow g} \phi \rangle}{\langle \phi \rangle} + To incorporate the effect of neutron multiplication from (n,xn) reactions + in the above relation, the `nu` parameter can be set to `True`. Parameters ---------- @@ -3803,6 +3545,9 @@ class ScatterMatrixXS(MatrixMGXS): The domain type for spatial homogenization groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation + nu : bool + If True, the cross section data will include neutron multiplication; + defaults to False by_nuclide : bool If true, computes cross sections for each nuclide in domain name : str, optional @@ -3834,6 +3579,8 @@ class ScatterMatrixXS(MatrixMGXS): Name of the multi-group cross section rxn_type : str Reaction type (e.g., 'total', 'nu-fission', etc.) + nu : bool + If True, the cross section data will include neutron multiplication by_nuclide : bool If true, computes cross sections for each nuclide in domain domain : Material or Cell or Universe or Mesh @@ -3894,20 +3641,24 @@ class ScatterMatrixXS(MatrixMGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): + def __init__(self, domain=None, domain_type=None, groups=None, nu=False, + by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(ScatterMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_azimuthal) - self._rxn_type = 'scatter' + if not nu: + self._rxn_type = 'scatter' + self._hdf5_key = 'scatter matrix' + else: + self._rxn_type = 'nu-scatter' + self._hdf5_key = 'nu-scatter matrix' self._correction = 'P0' self._scatter_format = 'legendre' self._legendre_order = 0 self._histogram_bins = 16 - self._hdf5_key = 'scatter matrix' self._estimator = 'analog' self._valid_estimators = ['analog'] + self.nu = nu def __deepcopy__(self, memo): clone = super(ScatterMatrixXS, self).__deepcopy__(memo) @@ -3915,6 +3666,7 @@ class ScatterMatrixXS(MatrixMGXS): clone._scatter_format = self.scatter_format clone._legendre_order = self.legendre_order clone._histogram_bins = self.histogram_bins + clone._nu = self.nu return clone @property @@ -3933,6 +3685,10 @@ class ScatterMatrixXS(MatrixMGXS): else: return (1, 2) + @property + def nu(self): + return self._nu + @property def correction(self): return self._correction @@ -4009,6 +3765,11 @@ class ScatterMatrixXS(MatrixMGXS): return self._rxn_rate_tally + @nu.setter + def nu(self, nu): + cv.check_type('nu', nu, bool) + self._nu = nu + @correction.setter def correction(self, correction): cv.check_value('correction', correction, ('P0', None)) @@ -4611,128 +4372,6 @@ class ScatterMatrixXS(MatrixMGXS): print(string) -class NuScatterMatrixXS(ScatterMatrixXS): - """A scattering production matrix multi-group cross section for one or - more Legendre moments. - - This class can be used for both OpenMC input generation and tally data - post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. At a - minimum, one needs to set the :attr:`NuScatterMatrixXS.energy_groups` and - :attr:`NuScatterMatrixXS.domain` properties. Tallies for the flux and - appropriate reaction rates over the specified domain are generated - automatically via the :attr:`NuScatterMatrixXS.tallies` property, which can - then be appended to a :class:`openmc.Tallies` instance. - - For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the - necessary data to compute multi-group cross sections from a - :class:`openmc.StatePoint` instance. The derived multi-group cross section - can then be obtained from the :attr:`NuScatterMatrixXS.xs_tally` property. - - The calculation of the scattering-production matrix is the same as that for - :class:`ScatterMatrixXS` except that the scattering multiplicity is - accounted for. - - Parameters - ---------- - domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh - The domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - The domain type for spatial homogenization - groups : openmc.mgxs.EnergyGroups - The energy group structure for energy condensation - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - name : str, optional - Name of the multi-group cross section. Used as a label to identify - tallies in OpenMC 'tallies.xml' file. - num_polar : Integral, optional - Number of equi-width polar angle bins for angle discretization; - defaults to one bin - num_azimuthal : Integral, optional - Number of equi-width azimuthal angle bins for angle discretization; - defaults to one bin - - Attributes - ---------- - correction : 'P0' or None - Apply the P0 correction to scattering matrices if set to 'P0' - legendre_order : int - The highest legendre moment in the scattering matrix (default is 0) - name : str, optional - Name of the multi-group cross section - rxn_type : str - Reaction type (e.g., 'total', 'nu-fission', etc.) - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - domain : Material or Cell or Universe or Mesh - Domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - Domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups - Energy group structure for energy condensation - num_polar : Integral - Number of equi-width polar angle bins for angle discretization - num_azimuthal : Integral - Number of equi-width azimuthal angle bins for angle discretization - tally_trigger : openmc.Trigger - An (optional) tally precision trigger given to each tally used to - compute the cross section - scores : list of str - The scores in each tally used to compute the multi-group cross section - filters : list of openmc.Filter - The filters in each tally used to compute the multi-group cross section - tally_keys : list of str - The keys into the tallies dictionary for each tally used to compute - the multi-group cross section - estimator : 'analog' - The tally estimator used to compute the multi-group cross section - tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section. The keys - are strings listed in the :attr:`NuScatterMatrixXS.tally_keys` property - and values are instances of :class:`openmc.Tally`. - rxn_rate_tally : openmc.Tally - Derived tally for the reaction rate tally used in the numerator to - compute the multi-group cross section. This attribute is None - unless the multi-group cross section has been computed. - xs_tally : openmc.Tally - Derived tally for the multi-group cross section. This attribute - is None unless the multi-group cross section has been computed. - num_subdomains : int - The number of subdomains is unity for 'material', 'cell' and 'universe' - domain types. This is equal to the number of cell instances - for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). - num_nuclides : int - The number of nuclides for which the multi-group cross section is - being tracked. This is unity if the by_nuclide attribute is False. - nuclides : Iterable of str or 'sum' - The optional user-specified nuclides for which to compute cross - sections (e.g., 'U238', 'O16'). If by_nuclide is True but nuclides - are not specified by the user, all nuclides in the spatial domain - are included. This attribute is 'sum' if by_nuclide is false. - sparse : bool - Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format - for compressed data storage - loaded_sp : bool - Whether or not a statepoint file has been loaded with tally data - derived : bool - Whether or not the MGXS is merged from one or more other MGXS - hdf5_key : str - The key used to index multi-group cross sections in an HDF5 data store - - """ - - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): - super(NuScatterMatrixXS, self).__init__(domain, domain_type, - groups, by_nuclide, name, - num_polar, num_azimuthal) - self._rxn_type = 'nu-scatter' - self._hdf5_key = 'nu-scatter matrix' - - class MultiplicityMatrixXS(MatrixMGXS): r"""The scattering multiplicity matrix. @@ -4857,9 +4496,8 @@ class MultiplicityMatrixXS(MatrixMGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): + def __init__(self, domain=None, domain_type=None, groups=None, + by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(MultiplicityMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) @@ -4939,6 +4577,11 @@ class ScatterProbabilityMatrix(MatrixMGXS): \sigma_{s,g'} \phi \rangle} + This class can also be used to gather a prompt-nu-fission cross section + (which only includes the contributions from prompt neutrons). This is + accomplished by setting the :attr:`NuFissionMatrixXS.prompt` attribute to + `True`. + Parameters ---------- domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh @@ -4947,6 +4590,9 @@ class ScatterProbabilityMatrix(MatrixMGXS): The domain type for spatial homogenization groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation + nu : bool + If True, the cross section data will include neutron multiplication; + defaults to False by_nuclide : bool If true, computes cross sections for each nuclide in domain name : str, optional @@ -4965,6 +4611,8 @@ class ScatterProbabilityMatrix(MatrixMGXS): Name of the multi-group cross section rxn_type : str Reaction type (e.g., 'total', 'nu-fission', etc.) + nu : bool + If True, the cross section data will include neutron multiplication by_nuclide : bool If true, computes cross sections for each nuclide in domain domain : Material or Cell or Universe or Mesh @@ -5025,22 +4673,36 @@ class ScatterProbabilityMatrix(MatrixMGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, + def __init__(self, domain=None, domain_type=None, groups=None, nu=False, + prompt=False, by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(ScatterProbabilityMatrix, self).__init__( domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) - self._rxn_type = 'scatter' + if not nu: + self._rxn_type = 'scatter' + self._hdf5_key = 'scatter probability matrix' + else: + self._rxn_type = 'nu-scatter' + self._hdf5_key = 'nu-scatter probability matrix' + self._estimator = 'analog' self._valid_estimators = ['analog'] - self._hdf5_key = 'scatter probability matrix' + self.nu = nu + + # FIXME: Add __deepcopy__ + @property + def nu(self): + return self._nu + @property def scores(self): - scores = ['scatter'] - return scores + if self.nu: + return ['nu-scatter'] + else: + return ['scatter'] @property def filters(self): @@ -5054,7 +4716,7 @@ class ScatterProbabilityMatrix(MatrixMGXS): @property def rxn_rate_tally(self): if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['scatter'] + self._rxn_rate_tally = self.tallies[self.rxn_type] self._rxn_rate_tally.sparse = self.sparse return self._rxn_rate_tally @@ -5071,131 +4733,15 @@ class ScatterProbabilityMatrix(MatrixMGXS): norm._filters = norm._filters[:2] # Compute the group-to-group probailities - self._xs_tally = self.tallies['scatter'] / norm + self._xs_tally = self.tallies[self.rxn_type] / norm super(ScatterProbabilityMatrix, self)._compute_xs() return self._xs_tally - -class NuScatterProbabilityMatrix(ScatterProbabilityMatrix): - r"""The group-to-group scattering-production probability matrix. - - This class can be used for both OpenMC input generation and tally data - post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. At a - minimum, one needs to set the :attr:`NuScatterProbabilityMatrix.energy_groups` - and :attr:`NuScatterProbabilityMatrix.domain` properties. Tallies for the - appropriate reaction rates over the specified domain are generated - automatically via the :attr:`NuScatterProbabilityMatrix.tallies` property, - which can then be appended to a :class:`openmc.Tallies` instance. - - For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the - necessary data to compute multi-group cross sections from a - :class:`openmc.StatePoint` instance. The derived multi-group cross section - can then be obtained from the :attr:`ScatterProbabilityMatrix.xs_tally` - property. - - The calculation of the scattering-production matrix is the same as that for - :class:`ScatterProbabilityMatrix` except that the scattering multiplicity is - accounted for. - - Parameters - ---------- - domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh - The domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - The domain type for spatial homogenization - groups : openmc.mgxs.EnergyGroups - The energy group structure for energy condensation - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - name : str, optional - Name of the multi-group cross section. Used as a label to identify - tallies in OpenMC 'tallies.xml' file. - num_polar : Integral, optional - Number of equi-width polar angle bins for angle discretization; - defaults to one bin - num_azimuthal : Integral, optional - Number of equi-width azimuthal angle bins for angle discretization; - defaults to one bin - - Attributes - ---------- - name : str, optional - Name of the multi-group cross section - rxn_type : str - Reaction type (e.g., 'total', 'nu-fission', etc.) - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - domain : Material or Cell or Universe or Mesh - Domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - Domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups - Energy group structure for energy condensation - num_polar : Integral - Number of equi-width polar angle bins for angle discretization - num_azimuthal : Integral - Number of equi-width azimuthal angle bins for angle discretization - tally_trigger : openmc.Trigger - An (optional) tally precision trigger given to each tally used to - compute the cross section - scores : list of str - The scores in each tally used to compute the multi-group cross section - filters : list of openmc.Filter - The filters in each tally used to compute the multi-group cross section - tally_keys : list of str - The keys into the tallies dictionary for each tally used to compute - the multi-group cross section - estimator : 'analog' - The tally estimator used to compute the multi-group cross section - tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section. The keys - are strings listed in the :attr:`MultiplicityMatrixXS.tally_keys` - property and values are instances of :class:`openmc.Tally`. - rxn_rate_tally : openmc.Tally - Derived tally for the reaction rate tally used in the numerator to - compute the multi-group cross section. This attribute is None - unless the multi-group cross section has been computed. - xs_tally : openmc.Tally - Derived tally for the multi-group cross section. This attribute - is None unless the multi-group cross section has been computed. - num_subdomains : int - The number of subdomains is unity for 'material', 'cell' and 'universe' - domain types. This is equal to the number of cell instances - for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). - num_nuclides : int - The number of nuclides for which the multi-group cross section is - being tracked. This is unity if the by_nuclide attribute is False. - nuclides : Iterable of str or 'sum' - The optional user-specified nuclides for which to compute cross - sections (e.g., 'U238', 'O16'). If by_nuclide is True but nuclides - are not specified by the user, all nuclides in the spatial domain - are included. This attribute is 'sum' if by_nuclide is false. - sparse : bool - Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format - for compressed data storage - loaded_sp : bool - Whether or not a statepoint file has been loaded with tally data - derived : bool - Whether or not the MGXS is merged from one or more other MGXS - hdf5_key : str - The key used to index multi-group cross sections in an HDF5 data store - - """ - - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): - super(NuScatterProbabilityMatrix, self).__init__( - domain, domain_type, groups,by_nuclide, - name, num_polar, num_azimuthal) - - self._rxn_type = 'nu-scatter' - self._estimator = 'analog' - self._valid_estimators = ['analog'] - self._hdf5_key = 'nu-scatter probability matrix' + @nu.setter + def nu(self, nu): + cv.check_type('nu', nu, bool) + self._nu = nu @add_metaclass(ABCMeta) @@ -5698,13 +5244,16 @@ class ConsistentScatterMatrixXS(ConvolvedMGXS, ScatterMatrixXS): """ - def __init__(self, domain=None, domain_type=None, groups=None, + def __init__(self, domain=None, domain_type=None, groups=None, nu=False, by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(ConsistentScatterMatrixXS, self).__init__( - domain, domain_type, groups, by_nuclide, + domain, domain_type, groups, nu, by_nuclide, name, num_polar, num_azimuthal) - self._hdf5_key = 'consistent scatter matrix' + if not nu: + self._hdf5_key = 'consistent scatter matrix' + else: + self._hdf5_key = 'consistent nu-scatter matrix' # Initialize each MGXS used by the convolution self._mgxs = [ScatterXS(), ScatterProbabilityMatrix()] @@ -5713,6 +5262,7 @@ class ConsistentScatterMatrixXS(ConvolvedMGXS, ScatterMatrixXS): for mgxs in self.mgxs: mgxs.name = name mgxs.by_nuclide = by_nuclide + mgxs.nu = nu if domain_type is not None: mgxs.domain_type = domain_type @@ -5723,6 +5273,8 @@ class ConsistentScatterMatrixXS(ConvolvedMGXS, ScatterMatrixXS): mgxs.num_polar = num_polar mgxs.num_azimuthal = num_azimuthal + # FIXME: Implement nu setter to propagate to nu to convolution MGXS + @property def scores(self): scores = super(ConsistentScatterMatrixXS, self).scores @@ -5751,7 +5303,10 @@ class ConsistentScatterMatrixXS(ConvolvedMGXS, ScatterMatrixXS): # Add key for transport correction tally if self.correction == 'P0' and self.legendre_order == 0: - tally_keys += ['scatter-1'] + if self.nu: + tally_keys += ['nu-scatter-1'] + else: + tally_keys += ['scatter-1'] return tally_keys @@ -5763,7 +5318,10 @@ class ConsistentScatterMatrixXS(ConvolvedMGXS, ScatterMatrixXS): # Add in the transport correction tally if self.correction == 'P0' and self.legendre_order == 0: - tally_key = 'scatter-1' + if self.nu: + tally_key = 'nu-scatter-1' + else: + tally_key = 'scatter-1' # Create a domain Filter object filter_type = _DOMAIN_TO_FILTER[self.domain_type] @@ -5773,10 +5331,10 @@ class ConsistentScatterMatrixXS(ConvolvedMGXS, ScatterMatrixXS): domain_filter = filter_type(self.domain.id) # Create each Tally needed to compute the multi group cross section - self._tallies['scatter-1'] = openmc.Tally(name=self.name) - self._tallies['scatter-1'].estimator = 'analog' - self._tallies['scatter-1'].scores = [self.scores[-1]] - self._tallies['scatter-1'].filters = [domain_filter, *self.filters[-1]] + self._tallies[tally_key] = openmc.Tally(name=self.name) + self._tallies[tally_key].estimator = 'analog' + self._tallies[tally_key].scores = [self.scores[-1]] + self._tallies[tally_key].filters = [domain_filter, *self.filters[-1]] # If a tally trigger was specified, add it to each tally if self.tally_trigger: @@ -6169,12 +5727,29 @@ class NuFissionMatrixXS(MatrixMGXS): super(NuFissionMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) - self._rxn_type = 'nu-fission' - self._hdf5_key = 'nu-fission matrix' + if not prompt: + self._rxn_type = 'nu-fission' + self._hdf5_key = 'nu-fission matrix' + else: + self._rxn_type = 'prompt-nu-fission' + self._hdf5_key = 'prompt-nu-fission matrix' self._estimator = 'analog' self._valid_estimators = ['analog'] + self.prompt = prompt + @property + def prompt(self): + return self._prompt + @prompt.setter + def prompt(self, prompt): + cv.check_type('prompt', prompt, bool) + self._prompt = prompt + + def __deepcopy__(self, memo): + clone = super(NuFissionMatrixXS, self).__deepcopy__(memo) + clone._prompt = self.prompt + return clone class Chi(MGXS): @@ -6208,6 +5783,10 @@ class Chi(MGXS): \chi_g &= \frac{\langle \nu\sigma_{f,g' \rightarrow g} \phi \rangle} {\langle \nu\sigma_f \phi \rangle} + This class can also be used to gather a prompt-chi (which only includes the + outgoing energy spectrum of prompt neutrons). This is accomplished by + setting the :attr:`Chi.prompt` attribute to `True`. + Parameters ---------- domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh @@ -6216,6 +5795,9 @@ class Chi(MGXS): The domain type for spatial homogenization groups : openmc.mgxs.EnergyGroups The energy group structure for energy condensation + prompt : bool + If true, computes cross sections which only includes prompt neutrons; + defaults to False which includes prompt and delayed in total by_nuclide : bool If true, computes cross sections for each nuclide in domain name : str, optional @@ -6234,6 +5816,8 @@ class Chi(MGXS): Name of the multi-group cross section rxn_type : str Reaction type (e.g., 'total', 'nu-fission', etc.) + prompt : bool + If true, computes cross sections which only includes prompt neutrons by_nuclide : bool If true, computes cross sections for each nuclide in domain domain : Material or Cell or Universe or Mesh @@ -6294,14 +5878,27 @@ class Chi(MGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, + def __init__(self, domain=None, domain_type=None, groups=None, + prompt=False, by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(Chi, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) - self._rxn_type = 'chi' + if not prompt: + self._rxn_type = 'chi' + else: + self._rxn_type = 'chi-prompt' self._estimator = 'analog' self._valid_estimators = ['analog'] + self.prompt = prompt + + def __deepcopy__(self, memo): + clone = super(Chi, self).__deepcopy__(memo) + clone._prompt = self.prompt + return clone + + @property + def prompt(self): + return self._prompt @property def _dont_squeeze(self): @@ -6315,7 +5912,10 @@ class Chi(MGXS): @property def scores(self): - return ['nu-fission', 'nu-fission'] + if not self.prompt: + return ['nu-fission', 'nu-fission'] + else: + return ['prompt-nu-fission', 'prompt-nu-fission'] @property def filters(self): @@ -6356,6 +5956,11 @@ class Chi(MGXS): return self._xs_tally + @prompt.setter + def prompt(self, prompt): + cv.check_type('prompt', prompt, bool) + self._prompt = prompt + def get_homogenized_mgxs(self, other_mgxs): """Construct a homogenized mgxs with other MGXS objects. @@ -6730,136 +6335,6 @@ class Chi(MGXS): return '%' -class ChiPrompt(Chi): - r"""The prompt fission spectrum. - - This class can be used for both OpenMC input generation and tally data - post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. At a - minimum, one needs to set the :attr:`ChiPrompt.energy_groups` and - :attr:`ChiPrompt.domain` properties. Tallies for the flux and appropriate - reaction rates over the specified domain are generated automatically via the - :attr:`ChiPrompt.tallies` property, which can then be appended to a - :class:`openmc.Tallies` instance. - - For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the - necessary data to compute multi-group cross sections from a - :class:`openmc.StatePoint` instance. The derived multi-group cross section - can then be obtained from the :attr:`ChiPrompt.xs_tally` property. - - For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the - fission spectrum is calculated as: - - .. math:: - - \langle \nu^p \sigma_{f,g' \rightarrow g} \phi \rangle &= \int_{r \in V} - dr \int_{4\pi} d\Omega' \int_0^\infty dE' \int_{E_g}^{E_{g-1}} dE \; - \chi(E)^p \nu^p \sigma_f (r, E') \psi(r, E', \Omega')\\ - \langle \nu^p \sigma_f \phi \rangle &= \int_{r \in V} dr \int_{4\pi} - d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu^p \sigma_f (r, - E') \psi(r, E', \Omega') \\ - \chi_g^p &= \frac{\langle \nu^p \sigma_{f,g' \rightarrow g} \phi \rangle} - {\langle \nu^p \sigma_f \phi \rangle} - - Parameters - ---------- - domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh - The domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - The domain type for spatial homogenization - groups : openmc.mgxs.EnergyGroups - The energy group structure for energy condensation - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - name : str, optional - Name of the multi-group cross section. Used as a label to identify - tallies in OpenMC 'tallies.xml' file. - num_polar : Integral, optional - Number of equi-width polar angle bins for angle discretization; - defaults to one bin - num_azimuthal : Integral, optional - Number of equi-width azimuthal angle bins for angle discretization; - defaults to one bin - - Attributes - ---------- - name : str, optional - Name of the multi-group cross section - rxn_type : str - Reaction type (e.g., 'total', 'nu-fission', etc.) - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - domain : Material or Cell or Universe or Mesh - Domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - Domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups - Energy group structure for energy condensation - num_polar : Integral - Number of equi-width polar angle bins for angle discretization - num_azimuthal : Integral - Number of equi-width azimuthal angle bins for angle discretization - tally_trigger : openmc.Trigger - An (optional) tally precision trigger given to each tally used to - compute the cross section - scores : list of str - The scores in each tally used to compute the multi-group cross section - filters : list of openmc.Filter - The filters in each tally used to compute the multi-group cross section - tally_keys : list of str - The keys into the tallies dictionary for each tally used to compute - the multi-group cross section - estimator : 'analog' - The tally estimator used to compute the multi-group cross section - tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section. The keys - are strings listed in the :attr:`ChiPrompt.tally_keys` property and - values are instances of :class:`openmc.Tally`. - rxn_rate_tally : openmc.Tally - Derived tally for the reaction rate tally used in the numerator to - compute the multi-group cross section. This attribute is None - unless the multi-group cross section has been computed. - xs_tally : openmc.Tally - Derived tally for the multi-group cross section. This attribute - is None unless the multi-group cross section has been computed. - num_subdomains : int - The number of subdomains is unity for 'material', 'cell' and 'universe' - domain types. This is equal to the number of cell instances - for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). - num_nuclides : int - The number of nuclides for which the multi-group cross section is - being tracked. This is unity if the by_nuclide attribute is False. - nuclides : Iterable of str or 'sum' - The optional user-specified nuclides for which to compute cross - sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides - are not specified by the user, all nuclides in the spatial domain - are included. This attribute is 'sum' if by_nuclide is false. - sparse : bool - Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format - for compressed data storage - loaded_sp : bool - Whether or not a statepoint file has been loaded with tally data - derived : bool - Whether or not the MGXS is merged from one or more other MGXS - hdf5_key : str - The key used to index multi-group cross sections in an HDF5 data store - - """ - - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): - super(ChiPrompt, self).__init__(domain, domain_type, groups, - by_nuclide, name, num_polar, - num_azimuthal) - self._rxn_type = 'chi-prompt' - - @property - def scores(self): - return ['prompt-nu-fission', 'prompt-nu-fission'] - - class InverseVelocity(MGXS): r"""An inverse velocity multi-group cross section. @@ -6976,9 +6451,8 @@ class InverseVelocity(MGXS): """ - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): + def __init__(self, domain=None, domain_type=None, groups=None, + by_nuclide=False, name='', num_polar=1, num_azimuthal=1): super(InverseVelocity, self).__init__(domain, domain_type, groups, by_nuclide, name, num_polar, num_azimuthal) @@ -7006,255 +6480,5 @@ class InverseVelocity(MGXS): if xs_type == 'macro': return 'second/cm' else: - raise ValueError('Unable to return the units of InverseVelocity for' - ' xs_type other than "macro"') - - -class PromptNuFissionXS(MGXS): - r"""A prompt fission neutron production multi-group cross section. - - This class can be used for both OpenMC input generation and tally data - post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. At a - minimum, one needs to set the :attr:`PromptNuFissionXS.energy_groups` and - :attr:`PromptNuFissionXS.domain` properties. Tallies for the flux and - appropriate reaction rates over the specified domain are generated - automatically via the :attr:`PromptNuFissionXS.tallies` property, which can - then be appended to a :class:`openmc.Tallies` instance. - - For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the - necessary data to compute multi-group cross sections from a - :class:`openmc.StatePoint` instance. The derived multi-group cross section - can then be obtained from the :attr:`PromptNuFissionXS.xs_tally` property. - - For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the - fission spectrum is calculated as: - - .. math:: - - \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; - \nu\sigma_f^p (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} - d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. - - Parameters - ---------- - domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh - The domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - The domain type for spatial homogenization - groups : openmc.mgxs.EnergyGroups - The energy group structure for energy condensation - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - name : str, optional - Name of the multi-group cross section. Used as a label to identify - tallies in OpenMC 'tallies.xml' file. - num_polar : Integral, optional - Number of equi-width polar angle bins for angle discretization; - defaults to one bin - num_azimuthal : Integral, optional - Number of equi-width azimuthal angle bins for angle discretization; - defaults to one bin - - Attributes - ---------- - name : str, optional - Name of the multi-group cross section - rxn_type : str - Reaction type (e.g., 'total', 'nu-fission', etc.) - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - domain : Material or Cell or Universe or Mesh - Domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - Domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups - Energy group structure for energy condensation - num_polar : Integral - Number of equi-width polar angle bins for angle discretization - num_azimuthal : Integral - Number of equi-width azimuthal angle bins for angle discretization - tally_trigger : openmc.Trigger - An (optional) tally precision trigger given to each tally used to - compute the cross section - scores : list of str - The scores in each tally used to compute the multi-group cross section - filters : list of openmc.Filter - The filters in each tally used to compute the multi-group cross section - tally_keys : list of str - The keys into the tallies dictionary for each tally used to compute - the multi-group cross section - estimator : {'tracklength', 'collision', 'analog'} - The tally estimator used to compute the multi-group cross section - tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section. The keys - are strings listed in the :attr:`PromptNuFissionXS.tally_keys` property - and values are instances of :class:`openmc.Tally`. - rxn_rate_tally : openmc.Tally - Derived tally for the reaction rate tally used in the numerator to - compute the multi-group cross section. This attribute is None - unless the multi-group cross section has been computed. - xs_tally : openmc.Tally - Derived tally for the multi-group cross section. This attribute - is None unless the multi-group cross section has been computed. - num_subdomains : int - The number of subdomains is unity for 'material', 'cell' and 'universe' - domain types. This is equal to the number of cell instances - for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). - num_nuclides : int - The number of nuclides for which the multi-group cross section is - being tracked. This is unity if the by_nuclide attribute is False. - nuclides : Iterable of str or 'sum' - The optional user-specified nuclides for which to compute cross - sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides - are not specified by the user, all nuclides in the spatial domain - are included. This attribute is 'sum' if by_nuclide is false. - sparse : bool - Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format - for compressed data storage - loaded_sp : bool - Whether or not a statepoint file has been loaded with tally data - derived : bool - Whether or not the MGXS is merged from one or more other MGXS - hdf5_key : str - The key used to index multi-group cross sections in an HDF5 data store - - """ - - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): - super(PromptNuFissionXS, self).__init__(domain, domain_type, groups, - by_nuclide, name, num_polar, - num_azimuthal) - self._rxn_type = 'prompt-nu-fission' - - -class PromptNuFissionMatrixXS(MatrixMGXS): - r"""A prompt fission neutron production matrix multi-group cross section. - - This class can be used for both OpenMC input generation and tally data - post-processing to compute spatially-homogenized and energy-integrated - multi-group cross sections for multi-group neutronics calculations. At a - minimum, one needs to set the :attr:`PromptNuFissionMatrixXS.energy_groups` - and :attr:`PromptNuFissionMatrixXS.domain` properties. Tallies for the flux - and appropriate reaction rates over the specified domain are generated - automatically via the :attr:`PromptNuFissionMatrixXS.tallies` property, - which can then be appended to a :class:`openmc.Tallies` instance. - - For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the - necessary data to compute multi-group cross sections from a - :class:`openmc.StatePoint` instance. The derived multi-group cross section - can then be obtained from the :attr:`PromptNuFissionMatrixXS.xs_tally` - property. - - For a spatial domain :math:`V` and energy group :math:`[E_g,E_{g-1}]`, the - fission spectrum is calculated as: - - .. math:: - - \langle \nu\sigma_{f,g'\rightarrow g} \phi \rangle &= \int_{r \in V} dr - \int_{4\pi} d\Omega' \int_{E_{g'}}^{E_{g'-1}} dE' \int_{E_g}^{E_{g-1}} dE - \; \chi(E) \nu\sigma_f^p (r, E') \psi(r, E', \Omega')\\ - \langle \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega - \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega) \\ - \nu\sigma_{f,g'\rightarrow g} &= \frac{\langle \nu\sigma_{f,g'\rightarrow - g}^p \phi \rangle}{\langle \phi \rangle} - - Parameters - ---------- - domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh - The domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - The domain type for spatial homogenization - groups : openmc.mgxs.EnergyGroups - The energy group structure for energy condensation - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - name : str, optional - Name of the multi-group cross section. Used as a label to identify - tallies in OpenMC 'tallies.xml' file. - num_polar : Integral, optional - Number of equi-width polar angle bins for angle discretization; - defaults to one bin - num_azimuthal : Integral, optional - Number of equi-width azimuthal angle bins for angle discretization; - defaults to one bin - - Attributes - ---------- - name : str, optional - Name of the multi-group cross section - rxn_type : str - Reaction type (e.g., 'total', 'nu-fission', etc.) - by_nuclide : bool - If true, computes cross sections for each nuclide in domain - domain : Material or Cell or Universe or Mesh - Domain for spatial homogenization - domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} - Domain type for spatial homogenization - energy_groups : openmc.mgxs.EnergyGroups - Energy group structure for energy condensation - num_polar : Integral - Number of equi-width polar angle bins for angle discretization - num_azimuthal : Integral - Number of equi-width azimuthal angle bins for angle discretization - tally_trigger : openmc.Trigger - An (optional) tally precision trigger given to each tally used to - compute the cross section - scores : list of str - The scores in each tally used to compute the multi-group cross section - filters : list of openmc.Filter - The filters in each tally used to compute the multi-group cross section - tally_keys : list of str - The keys into the tallies dictionary for each tally used to compute - the multi-group cross section - estimator : 'analog' - The tally estimator used to compute the multi-group cross section - tallies : collections.OrderedDict - OpenMC tallies needed to compute the multi-group cross section. The keys - are strings listed in the :attr:`PromptNuFissionXS.tally_keys` property - and values are instances of :class:`openmc.Tally`. - rxn_rate_tally : openmc.Tally - Derived tally for the reaction rate tally used in the numerator to - compute the multi-group cross section. This attribute is None - unless the multi-group cross section has been computed. - xs_tally : openmc.Tally - Derived tally for the multi-group cross section. This attribute - is None unless the multi-group cross section has been computed. - num_subdomains : int - The number of subdomains is unity for 'material', 'cell' and 'universe' - domain types. This is equal to the number of cell instances - for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). - num_nuclides : int - The number of nuclides for which the multi-group cross section is - being tracked. This is unity if the by_nuclide attribute is False. - nuclides : Iterable of str or 'sum' - The optional user-specified nuclides for which to compute cross - sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides - are not specified by the user, all nuclides in the spatial domain - are included. This attribute is 'sum' if by_nuclide is false. - sparse : bool - Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format - for compressed data storage - loaded_sp : bool - Whether or not a statepoint file has been loaded with tally data - derived : bool - Whether or not the MGXS is merged from one or more other MGXS - hdf5_key : str - The key used to index multi-group cross sections in an HDF5 data store - - """ - - def __init__(self, domain=None, domain_type=None, - groups=None, by_nuclide=False, name='', num_polar=1, - num_azimuthal=1): - super(PromptNuFissionMatrixXS, self).__init__(domain, domain_type, - groups, by_nuclide, name, - num_polar, num_azimuthal) - self._rxn_type = 'prompt-nu-fission' - self._hdf5_key = 'prompt-nu-fission matrix' - self._estimator = 'analog' - self._valid_estimators = ['analog'] + raise ValueError('Unable to return the units of InverseVelocity' + ' for xs_type other than "macro"') diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index af6dc8f98..8b3ffb3e9 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -351,8 +351,8 @@ class XSdata(object): self._xs_shapes["[DG]"] = (self.num_delayed_groups,) self._xs_shapes["[DG][G]"] = (self.num_delayed_groups, self.energy_groups.num_groups) - self._xs_shapes["[DG'][G']"] = (self.num_delayed_groups, - self.energy_groups.num_groups) + self._xs_shapes["[DG][G']"] = (self.num_delayed_groups, + self.energy_groups.num_groups) self._xs_shapes["[DG][G][G']"] = (self.num_delayed_groups, self.energy_groups.num_groups, self.energy_groups.num_groups) @@ -1074,12 +1074,12 @@ class XSdata(object): def set_nu_fission_mgxs(self, nu_fission, temperature=294., nuclide='total', xs_type='macro', subdomain=None): - """This method allows for an openmc.mgxs.NuFissionXS + """This method allows for an openmc.mgxs.FissionXS to be used to set the nu-fission cross section for this XSdata object. Parameters ---------- - nu_fission: openmc.mgxs.NuFissionXS + nu_fission: openmc.mgxs.FissionXS MGXS Object containing the nu-fission cross section for the domain of interest. temperature : float @@ -1102,8 +1102,10 @@ class XSdata(object): """ - check_type('nu_fission', nu_fission, (openmc.mgxs.NuFissionXS, + check_type('nu_fission', nu_fission, (openmc.mgxs.FissionXS, openmc.mgxs.NuFissionMatrixXS)) + if isinstance(nu_fission, openmc.mgxs.FissionXS): + check_value('nu', nu_fission.nu, [True]) check_value('energy_groups', nu_fission.energy_groups, [self.energy_groups]) check_value('domain_type', nu_fission.domain_type, @@ -1124,13 +1126,13 @@ class XSdata(object): subdomain=None): """Sets the prompt-nu-fission cross section. - This method allows for an openmc.mgxs.PromptNuFissionXS or - openmc.mgxs.PromptNuFissionMatrixXS to be used to set the - prompt-nu-fission cross section for this XSdata object. + This method allows for an openmc.mgxs.FissionXS or + openmc.mgxs.NuFissionMatrixXS to be used to set the prompt-nu-fission + cross section for this XSdata object. Parameters ---------- - prompt_nu_fission: openmc.mgxs.PromptNuFissionXS or openmc.mgxs.PromptNuFissionMatrixXS + prompt_nu_fission: openmc.mgxs.FissionXS or openmc.mgxs.NuFissionMatrixXS MGXS Object containing the prompt-nu-fission cross section for the domain of interest. temperature : float @@ -1154,8 +1156,8 @@ class XSdata(object): """ check_type('prompt_nu_fission', prompt_nu_fission, - (openmc.mgxs.PromptNuFissionXS, - openmc.mgxs.PromptNuFissionMatrixXS)) + (openmc.mgxs.FissionXS, openmc.mgxs.NuFissionMatrixXS)) + check_value('prompt', prompt_nu_fission.prompt, [True]) check_value('energy_groups', prompt_nu_fission.energy_groups, [self.energy_groups]) check_value('domain_type', prompt_nu_fission.domain_type, @@ -1307,12 +1309,12 @@ class XSdata(object): def set_chi_prompt_mgxs(self, chi_prompt, temperature=294., nuclide='total', xs_type='macro', subdomain=None): - """This method allows for an openmc.mgxs.ChiPrompt - to be used to set chi-prompt for this XSdata object. + """This method allows for an openmc.mgxs.Chi to be used to set + chi-prompt for this XSdata object. Parameters ---------- - chi_prompt: openmc.mgxs.ChiPrompt + chi_prompt: openmc.mgxs.Chi MGXS Object containing chi-prompt for the domain of interest. temperature : float Temperature (in units of Kelvin) of the provided dataset. Defaults @@ -1334,7 +1336,8 @@ class XSdata(object): """ - check_type('chi_prompt', chi_prompt, openmc.mgxs.ChiPrompt) + check_type('chi_prompt', chi_prompt, openmc.mgxs.Chi) + check_value('prompt', chi_prompt.prompt, [True]) check_value('energy_groups', chi_prompt.energy_groups, [self.energy_groups]) check_value('domain_type', chi_prompt.domain_type, @@ -1598,7 +1601,7 @@ class XSdata(object): """ - check_type('nuscatter', nuscatter, (openmc.mgxs.NuScatterMatrixXS, + check_type('nuscatter', nuscatter, (openmc.mgxs.ScatterMatrixXS, openmc.mgxs.MultiplicityMatrixXS)) check_value('energy_groups', nuscatter.energy_groups, [self.energy_groups]) diff --git a/openmc/particle_restart.py b/openmc/particle_restart.py index cb1326586..4fab8e563 100644 --- a/openmc/particle_restart.py +++ b/openmc/particle_restart.py @@ -1,5 +1,9 @@ import h5py +import openmc.checkvalue as cv + +_VERSION_PARTICLE_RESTART = 2 + class Particle(object): """Information used to restart a specific particle that caused a simulation to fail. @@ -13,9 +17,9 @@ class Particle(object): ---------- current_batch : int The batch containing the particle - gen_per_batch : int + generations_per_batch : int Number of generations per batch - current_gen : int + current_generation : int The generation containing the particle n_particles : int Number of particles per generation @@ -37,31 +41,25 @@ class Particle(object): def __init__(self, filename): self._f = h5py.File(filename, 'r') - # Ensure filetype and revision are correct - if 'filetype' not in self._f or self._f[ - 'filetype'].value.decode() != 'particle restart': - raise IOError('{} is not a particle restart file.'.format(filename)) - if self._f['revision'].value != 1: - raise IOError('Particle restart file has a file revision of {} ' - 'which is not consistent with the revision this ' - 'version of OpenMC expects ({}).'.format( - self._f['revision'].value, 1)) + # Ensure filetype and version are correct + cv.check_filetype_version(self._f, 'particle restart', + _VERSION_PARTICLE_RESTART) @property def current_batch(self): return self._f['current_batch'].value @property - def current_gen(self): - return self._f['current_gen'].value + def current_generation(self): + return self._f['current_generation'].value @property def energy(self): return self._f['energy'].value @property - def gen_per_batch(self): - return self._f['gen_per_batch'].value + def generations_per_batch(self): + return self._f['generations_per_batch'].value @property def id(self): diff --git a/openmc/plots.py b/openmc/plots.py index 48af6f23c..bbefb1076 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -351,11 +351,11 @@ class Plot(object): # Generate random colors for each feature self.col_spec = {} - for domain in domains: + for domain_id in domains: r = np.random.randint(0, 256) g = np.random.randint(0, 256) b = np.random.randint(0, 256) - self.col_spec[domain] = (r, g, b) + self.col_spec[domain_id] = (r, g, b) def highlight_domains(self, geometry, domains, seed=1, alpha=0.5, background='gray'): diff --git a/openmc/plotter.py b/openmc/plotter.py index 83f5722cc..80a2077ac 100644 --- a/openmc/plotter.py +++ b/openmc/plotter.py @@ -676,7 +676,7 @@ def calculate_mgxs(this, types, orders=None, temperature=294., for line in range(len(types)): for g in range(library.energy_groups.num_groups): - data[g * 2: g * 2 + 2] = mgxs[line, g] + data[line, g * 2: g * 2 + 2] = mgxs[line, g] return energy_grid[::-1], data @@ -775,28 +775,28 @@ def _calculate_mgxs_nuc_macro(this, types, library, orders=None, data[i, :] = temp_data[orders[i]] else: data[i, :] = np.sum(temp_data[:]) - elif shape in (xsdata.xs_shapes["[G'][DG]"], - xsdata.xs_shapes["[G][DG]"]): + elif shape in (xsdata.xs_shapes["[DG][G']"], + xsdata.xs_shapes["[DG][G]"]): # Then we have an array vs groups with values for each # delayed group. The user-provided value of orders tells us # which delayed group we want. If none are provided, then # we sum all the delayed groups together. if orders[i]: - if orders[i] < len(shape[1]): - data[i, :] = temp_data[:, orders[i]] + if orders[i] < len(shape[0]): + data[i, :] = temp_data[orders[i], :] else: - data[i, :] = np.sum(temp_data[:, :], axis=1) - elif shape == xsdata.xs_shapes["[G][G'][DG]"]: + data[i, :] = np.sum(temp_data[:, :], axis=0) + elif shape == xsdata.xs_shapes["[DG][G][G']"]: # Then we have a delayed group matrix. We will first # remove the outgoing group dependency - temp_data = np.sum(temp_data, axis=1) + temp_data = np.sum(temp_data, axis=-1) # And then proceed in exactly the same manner as the - # "[G'][DG]" of "[G][DG]" shapes in the previous block. + # "[DG][G']" or "[DG][G]" shapes in the previous block. if orders[i]: - if orders[i] < len(shape[1]): - data[i, :] = temp_data[:, orders[i]] + if orders[i] < len(shape[0]): + data[i, :] = temp_data[orders[i], :] else: - data[i, :] = np.sum(temp_data[:, :], axis=1) + data[i, :] = np.sum(temp_data[:, :], axis=0) elif shape == xsdata.xs_shapes["[G][G'][Order]"]: # This is a scattering matrix with angular data # First remove the outgoing group dependence diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 144146ba3..4101b066a 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -10,6 +10,8 @@ import h5py import openmc import openmc.checkvalue as cv +_VERSION_STATEPOINT = 16 + class StatePoint(object): """State information on a simulation at a certain point in time (at the end @@ -50,7 +52,7 @@ class StatePoint(object): Date and time when simulation began entropy : numpy.ndarray Shannon entropy of fission source at each batch - gen_per_batch : Integral + generations_per_batch : int Number of fission generations per batch global_tallies : numpy.ndarray of compound datatype Global tallies for k-effective estimates and leakage. The compound @@ -78,7 +80,7 @@ class StatePoint(object): path : str Working directory for simulation run_mode : str - Simulation run mode, e.g. 'k-eigenvalue' + Simulation run mode, e.g. 'eigenvalue' runtime : dict Dictionary whose keys are strings describing various runtime metrics and whose values are time values in seconds. @@ -109,22 +111,12 @@ class StatePoint(object): def __init__(self, filename, autolink=True): self._f = h5py.File(filename, 'r') + self._meshes = {} + self._tallies = {} + self._derivs = {} - # Ensure filetype and revision are correct - try: - if 'filetype' not in self._f or self._f[ - 'filetype'].value.decode() != 'statepoint': - raise IOError('{} is not a statepoint file.'.format(filename)) - except AttributeError: - raise IOError('Could not read statepoint file. This most likely ' - 'means the statepoint file was produced by a ' - 'different version of OpenMC than the one you are ' - 'using.') - if self._f['revision'].value != 15: - raise IOError('Statepoint file has a file revision of {} ' - 'which is not consistent with the revision this ' - 'version of OpenMC expects ({}).'.format( - self._f['revision'].value, 15)) + # Check filetype and version + cv.check_filetype_version(self._f, 'statepoint', _VERSION_STATEPOINT) # Set flags for what data has been read self._meshes_read = False @@ -147,12 +139,9 @@ class StatePoint(object): vol = openmc.VolumeCalculation.from_hdf5(path_i) self.add_volume_information(vol) - def close(self): - self._f.close() - @property def cmfd_on(self): - return self._f['cmfd_on'].value > 0 + return self._f.attrs['cmfd_on'] > 0 @property def cmfd_balance(self): @@ -188,19 +177,19 @@ class StatePoint(object): @property def date_and_time(self): - return self._f['date_and_time'].value.decode() + return self._f.attrs['date_and_time'].decode() @property def entropy(self): - if self.run_mode == 'k-eigenvalue': + if self.run_mode == 'eigenvalue': return self._f['entropy'].value else: return None @property - def gen_per_batch(self): - if self.run_mode == 'k-eigenvalue': - return self._f['gen_per_batch'].value + def generations_per_batch(self): + if self.run_mode == 'eigenvalue': + return self._f['generations_per_batch'].value else: return None @@ -234,35 +223,35 @@ class StatePoint(object): @property def k_generation(self): - if self.run_mode == 'k-eigenvalue': + if self.run_mode == 'eigenvalue': return self._f['k_generation'].value else: return None @property def k_combined(self): - if self.run_mode == 'k-eigenvalue': + if self.run_mode == 'eigenvalue': return self._f['k_combined'].value else: return None @property def k_col_abs(self): - if self.run_mode == 'k-eigenvalue': + if self.run_mode == 'eigenvalue': return self._f['k_col_abs'].value else: return None @property def k_col_tra(self): - if self.run_mode == 'k-eigenvalue': + if self.run_mode == 'eigenvalue': return self._f['k_col_tra'].value else: return None @property def k_abs_tra(self): - if self.run_mode == 'k-eigenvalue': + if self.run_mode == 'eigenvalue': return self._f['k_abs_tra'].value else: return None @@ -270,46 +259,12 @@ class StatePoint(object): @property def meshes(self): if not self._meshes_read: - # Initialize dictionaries for the Meshes - # Keys - Mesh IDs - # Values - Mesh objects - self._meshes = {} - - # Read the number of Meshes - n_meshes = self._f['tallies/meshes/n_meshes'].value - - # Read a list of the IDs for each Mesh - if n_meshes > 0: - # User-defined Mesh IDs - mesh_keys = self._f['tallies/meshes/keys'].value - else: - mesh_keys = [] - - # Build dictionary of Meshes - base = 'tallies/meshes/mesh ' + mesh_group = self._f['tallies/meshes'] # Iterate over all Meshes - for mesh_key in mesh_keys: - # Read the mesh type - mesh_type = self._f['{0}{1}/type'.format(base, mesh_key)].value.decode() - - # Read the mesh dimensions, lower-left coordinates, - # upper-right coordinates, and width of each mesh cell - dimension = self._f['{0}{1}/dimension'.format(base, mesh_key)].value - lower_left = self._f['{0}{1}/lower_left'.format(base, mesh_key)].value - upper_right = self._f['{0}{1}/upper_right'.format(base, mesh_key)].value - width = self._f['{0}{1}/width'.format(base, mesh_key)].value - - # Create the Mesh and assign properties to it - mesh = openmc.Mesh(mesh_key) - mesh.dimension = dimension - mesh.width = width - mesh.lower_left = lower_left - mesh.upper_right = upper_right - mesh.type = mesh_type - - # Add mesh to the global dictionary of all Meshes - self._meshes[mesh_key] = mesh + for group in mesh_group.values(): + mesh = openmc.Mesh.from_hdf5(group) + self._meshes[mesh.id] = mesh self._meshes_read = True @@ -321,7 +276,7 @@ class StatePoint(object): @property def n_inactive(self): - if self.run_mode == 'k-eigenvalue': + if self.run_mode == 'eigenvalue': return self._f['n_inactive'].value else: return None @@ -336,7 +291,7 @@ class StatePoint(object): @property def path(self): - return self._f['path'].value.decode() + return self._f.attrs['path'].decode() @property def run_mode(self): @@ -357,7 +312,7 @@ class StatePoint(object): @property def source_present(self): - return self._f['source_present'].value > 0 + return self._f.attrs['source_present'] > 0 @property def sparse(self): @@ -365,68 +320,55 @@ class StatePoint(object): @property def tallies(self): - if not self._tallies_read: - # Initialize dictionary for tallies - self._tallies = {} - + if self.tallies_present and not self._tallies_read: # Read the number of tallies - n_tallies = self._f['tallies/n_tallies'].value + tallies_group = self._f['tallies'] + n_tallies = tallies_group.attrs['n_tallies'] # Read a list of the IDs for each Tally if n_tallies > 0: - # OpenMC Tally IDs (redefined internally from user definitions) - tally_keys = self._f['tallies/keys'].value + # Tally user-defined IDs + tally_ids = tallies_group.attrs['ids'] else: - tally_keys = [] + tally_ids = [] - base = 'tallies/tally ' + # Iterate over all tallies + for tally_id in tally_ids: + group = tallies_group['tally {}'.format(tally_id)] - # Iterate over all Tallies - for tally_key in tally_keys: - - # Read the Tally size specifications - n_realizations = \ - self._f['{0}{1}/n_realizations'.format(base, tally_key)].value + # Read the number of realizations + n_realizations = group['n_realizations'].value # Create Tally object and assign basic properties - tally = openmc.Tally(tally_id=tally_key) + tally = openmc.Tally(tally_id) tally._sp_filename = self._f.filename - tally.estimator = self._f['{0}{1}/estimator'.format( - base, tally_key)].value.decode() + tally.name = group['name'].value.decode() + tally.estimator = group['estimator'].value.decode() tally.num_realizations = n_realizations # Read derivative information. - if 'derivative' in self._f['{0}{1}'.format(base, tally_key)]: - deriv_id = self._f['{0}{1}/derivative'.format( - base, tally_key)].value + if 'derivative' in group: + deriv_id = group['derivative'].value tally.derivative = self.tally_derivatives[deriv_id] - # Read the number of Filters - n_filters = \ - self._f['{0}{1}/n_filters'.format(base, tally_key)].value - - subbase = '{0}{1}/filter '.format(base, tally_key) - # Read all filters - for j in range(1, n_filters+1): - subsubbase = '{0}{1}'.format(subbase, j) - new_filter = openmc.Filter.from_hdf5(self._f[subsubbase], + n_filters = group['n_filters'].value + for j in range(1, n_filters + 1): + filter_group = group['filter {}'.format(j)] + new_filter = openmc.Filter.from_hdf5(filter_group, meshes=self.meshes) tally.filters.append(new_filter) - # Read Nuclide bins - nuclide_names = \ - self._f['{0}{1}/nuclides'.format(base, tally_key)].value + # Read nuclide bins + nuclide_names = group['nuclides'].value - # Add all Nuclides to the Tally + # Add all nuclides to the Tally for name in nuclide_names: nuclide = openmc.Nuclide(name.decode().strip()) tally.nuclides.append(nuclide) - scores = self._f['{0}{1}/score_bins'.format( - base, tally_key)].value - n_score_bins = self._f['{0}{1}/n_score_bins' - .format(base, tally_key)].value + scores = group['score_bins'].value + n_score_bins = group['n_score_bins'].value # Compute and set the filter strides for i in range(n_filters): @@ -437,8 +379,7 @@ class StatePoint(object): tally_filter.stride *= tally.filters[j].num_bins # Read scattering moment order strings (e.g., P3, Y1,2, etc.) - moments = self._f['{0}{1}/moment_orders'.format( - base, tally_key)].value + moments = group['moment_orders'].value # Add the scores to the Tally for j, score in enumerate(scores): @@ -452,7 +393,7 @@ class StatePoint(object): # Add Tally to the global dictionary of all Tallies tally.sparse = self.sparse - self._tallies[tally_key] = tally + self._tallies[tally_id] = tally self._tallies_read = True @@ -460,16 +401,11 @@ class StatePoint(object): @property def tallies_present(self): - return self._f['tallies/tallies_present'].value + return self._f.attrs['tallies_present'] > 0 @property def tally_derivatives(self): if not self._derivs_read: - # Initialize dictionaries for the Meshes - # Keys - Derivative IDs - # Values - TallyDerivative objects - self._derivs = {} - # Populate the dictionary if any derivatives are present. if 'derivatives' in self._f['tallies']: # Read the derivative ids. @@ -478,21 +414,17 @@ class StatePoint(object): # Create each derivative object and add it to the dictionary. for d_id in deriv_ids: - base = 'tallies/derivatives/derivative {:d}'.format(d_id) + group = self._f['tallies/derivatives/derivative {}' + .format(d_id)] deriv = openmc.TallyDerivative(derivative_id=d_id) - deriv.variable = \ - self._f[base + '/independent variable'].value.decode() + deriv.variable = group['independent variable'].value.decode() if deriv.variable == 'density': - deriv.material = self._f[base + '/material'].value + deriv.material = group['material'].value elif deriv.variable == 'nuclide_density': - deriv.material = self._f[base + '/material'].value - deriv.nuclide = \ - self._f[base + '/nuclide'].value.decode() + deriv.material = group['material'].value + deriv.nuclide = group['nuclide'].value.decode() elif deriv.variable == 'temperature': - deriv.material = self._f[base + '/material'].value - else: - raise RuntimeError('Unrecognized tally differential ' - 'variable') + deriv.material = group['material'].value self._derivs[d_id] = deriv self._derivs_read = True @@ -501,9 +433,7 @@ class StatePoint(object): @property def version(self): - return (self._f['version_major'].value, - self._f['version_minor'].value, - self._f['version_release'].value) + return tuple(self._f.attrs['version']) @property def summary(self): @@ -705,38 +635,20 @@ class StatePoint(object): RuntimeWarning) return - if not isinstance(summary, openmc.summary.Summary): + if not isinstance(summary, openmc.Summary): msg = 'Unable to link statepoint with "{0}" which ' \ 'is not a Summary object'.format(summary) raise ValueError(msg) + cells = summary.geometry.get_all_cells() + for tally_id, tally in self.tallies.items(): - tally.name = summary.tally_names[tally_id] tally.with_summary = True for tally_filter in tally.filters: - if isinstance(tally_filter, (openmc.CellFilter, - openmc.DistribcellFilter)): - distribcell_ids = [] - for bin in tally_filter.bins: - distribcell_ids.append(summary.cells[bin].id) - tally_filter.bins = distribcell_ids - if isinstance(tally_filter, (openmc.DistribcellFilter)): cell_id = tally_filter.bins[0] - cell = summary.get_cell_by_id(cell_id) + cell = cells[cell_id] tally_filter.distribcell_paths = cell.distribcell_paths - if isinstance(tally_filter, openmc.UniverseFilter): - universe_ids = [] - for bin in tally_filter.bins: - universe_ids.append(summary.universes[bin].id) - tally_filter.bins = universe_ids - - if isinstance(tally_filter, openmc.MaterialFilter): - material_ids = [] - for bin in tally_filter.bins: - material_ids.append(summary.materials[bin].id) - tally_filter.bins = material_ids - self._summary = summary diff --git a/openmc/summary.py b/openmc/summary.py index 5bc4c56a2..8347105b1 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -5,21 +5,28 @@ import numpy as np import h5py import openmc +import openmc.checkvalue as cv from openmc.region import Region +_VERSION_SUMMARY = 5 + class Summary(object): - """Information summarizing the geometry, materials, and tallies used in a - simulation. + """Summary of geometry, materials, and tallies used in a simulation. Attributes ---------- - openmc_geometry : openmc.Geometry - An OpenMC geometry object reconstructed from the summary file - opencg_geometry : opencg.Geometry - An OpenCG geometry object equivalent to the OpenMC geometry - encapsulated by the summary file. Use of this attribute requires - installation of the OpenCG Python module. + date_and_time : str + Date and time when simulation began + geometry : openmc.Geometry + The geometry reconstructed from the summary file + materials : openmc.Materials + The materials reconstructed from the summary file + nuclides : dict + Dictionary whose keys are nuclide names and values are atomic weight + ratios. + version: tuple of int + Version of OpenMC """ @@ -31,231 +38,85 @@ class Summary(object): raise ValueError(msg) self._f = h5py.File(filename, 'r') - self._openmc_geometry = None - self._opencg_geometry = None + cv.check_filetype_version(self._f, 'summary', _VERSION_SUMMARY) + + self._geometry = openmc.Geometry() + self._materials = openmc.Materials() + self._nuclides = {} - self._read_metadata() self._read_nuclides() self._read_geometry() - self._read_tallies() - self._f.close() @property - def openmc_geometry(self): - return self._openmc_geometry + def date_and_time(self): + return self._f.attrs['date_and_time'] @property - def opencg_geometry(self): - if self._opencg_geometry is None: - from openmc.opencg_compatible import get_opencg_geometry - self._opencg_geometry = get_opencg_geometry(self.openmc_geometry) - return self._opencg_geometry + def geometry(self): + return self._geometry - def _read_metadata(self): - # Read OpenMC version - self.version = [self._f['version_major'].value, - self._f['version_minor'].value, - self._f['version_release'].value] - # Read date and time - self.date_and_time = self._f['date_and_time'][...] + @property + def materials(self): + return self._materials - # Read if continuous-energy or multi-group - self.run_CE = (self._f['run_CE'].value == 1) + @property + def nuclides(self): + return self._nuclides - self.n_batches = self._f['n_batches'].value - self.n_particles = self._f['n_particles'].value - if 'n_inactive' in self._f: - self.n_active = self._f['n_active'].value - self.n_inactive = self._f['n_inactive'].value - self.gen_per_batch = self._f['gen_per_batch'].value - self.n_procs = self._f['n_procs'].value + @property + def version(self): + return tuple(self._f.attrs['openmc_version']) def _read_nuclides(self): - self.nuclides = {} - n_nuclides = self._f['nuclides/n_nuclides_total'].value names = self._f['nuclides/names'].value awrs = self._f['nuclides/awrs'].value - for n in range(n_nuclides): - name = names[n].decode() - name = name[:name.find('.')] - self.nuclides[name] = awrs[n] + for name, awr in zip(names, awrs): + self._nuclides[name.decode()] = awr def _read_geometry(self): # Read in and initialize the Materials and Geometry self._read_materials() - self._read_surfaces() - self._read_cells() - self._read_universes() - self._read_lattices() - self._finalize_geometry() + surfaces = self._read_surfaces() + cells, cell_fills = self._read_cells(surfaces) + universes = self._read_universes(cells) + lattices = self._read_lattices(universes) + self._finalize_geometry(cells, cell_fills, universes, lattices) def _read_materials(self): - self.n_materials = self._f['n_materials'].value + for group in self._f['materials'].values(): + material = openmc.Material.from_hdf5(group) - # Initialize dictionary for each Material - # Keys - Material keys - # Values - Material objects - self.materials = {} - - for key, group in self._f['materials'].items(): - if key == 'n_materials': - continue - - material_id = int(key.lstrip('material ')) - - index = group['index'].value - name = group['name'].value.decode() - density = group['atom_density'].value - nuc_densities = group['nuclide_densities'][...] - nuclides = group['nuclides'].value - - # Create the Material - material = openmc.Material(material_id=material_id, name=name) - material.depletable = bool(group.attrs['depletable']) - - # Read the names of the S(a,b) tables for this Material and add them - if 'sab_names' in group: - sab_tables = group['sab_names'].value - for sab_table in sab_tables: - name = sab_table.decode() - material.add_s_alpha_beta(name) - - # Set the Material's density to atom/b-cm as used by OpenMC - material.set_density(density=density, units='atom/b-cm') - - # Add all nuclides to the Material - for fullname, density in zip(nuclides, nuc_densities): - name = fullname.decode().strip() - - if 'nat' in name: - material.add_element(openmc.Element(name=name), - percent=density, percent_type='ao') - else: - material.add_nuclide(openmc.Nuclide(name=name), - percent=density, percent_type='ao') - - # Add the Material to the global dictionary of all Materials - self.materials[index] = material + # Add the material to the Materials collection + self.materials.append(material) def _read_surfaces(self): - self.n_surfaces = self._f['geometry/n_surfaces'].value + surfaces = {} + for group in self._f['geometry/surfaces'].values(): + surface = openmc.Surface.from_hdf5(group) + surfaces[surface.id] = surface - # Initialize dictionary for each Surface - # Keys - Surface keys - # Values - Surfacee objects - self.surfaces = {} + return surfaces - for key in self._f['geometry/surfaces'].keys(): - if key == 'n_surfaces': - continue - - surface_id = int(key.lstrip('surface ')) - index = self._f['geometry/surfaces'][key]['index'].value - name = self._f['geometry/surfaces'][key]['name'].value.decode() - surf_type = self._f['geometry/surfaces'][key]['type'].value.decode() - bc = self._f['geometry/surfaces'][key]['boundary_condition'].value.decode() - coeffs = self._f['geometry/surfaces'][key]['coefficients'][...] - - # Create the Surface based on its type - if surf_type == 'x-plane': - x0 = coeffs[0] - surface = openmc.XPlane(surface_id, bc, x0, name) - - elif surf_type == 'y-plane': - y0 = coeffs[0] - surface = openmc.YPlane(surface_id, bc, y0, name) - - elif surf_type == 'z-plane': - z0 = coeffs[0] - surface = openmc.ZPlane(surface_id, bc, z0, name) - - elif surf_type == 'plane': - A = coeffs[0] - B = coeffs[1] - C = coeffs[2] - D = coeffs[3] - surface = openmc.Plane(surface_id, bc, A, B, C, D, name) - - elif surf_type == 'x-cylinder': - y0 = coeffs[0] - z0 = coeffs[1] - R = coeffs[2] - surface = openmc.XCylinder(surface_id, bc, y0, z0, R, name) - - elif surf_type == 'y-cylinder': - x0 = coeffs[0] - z0 = coeffs[1] - R = coeffs[2] - surface = openmc.YCylinder(surface_id, bc, x0, z0, R, name) - - elif surf_type == 'z-cylinder': - x0 = coeffs[0] - y0 = coeffs[1] - R = coeffs[2] - surface = openmc.ZCylinder(surface_id, bc, x0, y0, R, name) - - elif surf_type == 'sphere': - x0 = coeffs[0] - y0 = coeffs[1] - z0 = coeffs[2] - R = coeffs[3] - surface = openmc.Sphere(surface_id, bc, x0, y0, z0, R, name) - - elif surf_type in ['x-cone', 'y-cone', 'z-cone']: - x0 = coeffs[0] - y0 = coeffs[1] - z0 = coeffs[2] - R2 = coeffs[3] - - if surf_type == 'x-cone': - surface = openmc.XCone(surface_id, bc, x0, y0, z0, R2, name) - if surf_type == 'y-cone': - surface = openmc.YCone(surface_id, bc, x0, y0, z0, R2, name) - if surf_type == 'z-cone': - surface = openmc.ZCone(surface_id, bc, x0, y0, z0, R2, name) - - elif surf_type == 'quadric': - a, b, c, d, e, f, g, h, j, k = coeffs - surface = openmc.Quadric(surface_id, bc, a, b, c, d, e, f, - g, h, j, k, name) - - # Add Surface to global dictionary of all Surfaces - self.surfaces[index] = surface - - def _read_cells(self): - self.n_cells = self._f['geometry/n_cells'].value - - # Initialize dictionary for each Cell - # Keys - Cell keys - # Values - Cell objects - self.cells = {} + def _read_cells(self, surfaces): + cells = {} # Initialize dictionary for each Cell's fill - # (e.g., Material, Universe or Lattice ID) - # This dictionary is used later to link the fills with - # the corresponding objects - # Keys - Cell keys - # Values - Filling Material, Universe or Lattice ID - self._cell_fills = {} - - for key in self._f['geometry/cells'].keys(): - if key == 'n_cells': - continue + cell_fills = {} + for key, group in self._f['geometry/cells'].items(): cell_id = int(key.lstrip('cell ')) - index = self._f['geometry/cells'][key]['index'].value - name = self._f['geometry/cells'][key]['name'].value.decode() - fill_type = self._f['geometry/cells'][key]['fill_type'].value.decode() + name = group['name'].value.decode() + fill_type = group['fill_type'].value.decode() - if fill_type == 'normal': - fill = self._f['geometry/cells'][key]['material'].value + if fill_type == 'material': + fill = group['material'].value elif fill_type == 'universe': - fill = self._f['geometry/cells'][key]['fill'].value + fill = group['fill'].value else: - fill = self._f['geometry/cells'][key]['lattice'].value + fill = group['lattice'].value - if 'region' in self._f['geometry/cells'][key].keys(): - region = self._f['geometry/cells'][key]['region'].value.decode() + if 'region' in group.keys(): + region = group['region'].value.decode() else: region = [] @@ -263,283 +124,79 @@ class Summary(object): cell = openmc.Cell(cell_id=cell_id, name=name) if fill_type == 'universe': - if 'offset' in self._f['geometry/cells'][key]: - offset = self._f['geometry/cells'][key]['offset'][...] + if 'offset' in group: + offset = group['offset'][...] cell.offsets = offset - if 'translation' in self._f['geometry/cells'][key]: - translation = \ - self._f['geometry/cells'][key]['translation'][...] + if 'translation' in group: + translation = group['translation'][...] translation = np.asarray(translation, dtype=np.float64) cell.translation = translation - if 'rotation' in self._f['geometry/cells'][key]: - rotation = \ - self._f['geometry/cells'][key]['rotation'][...] + if 'rotation' in group: + rotation = group['rotation'][...] rotation = np.asarray(rotation, dtype=np.int) cell._rotation = rotation - elif fill_type == 'normal': - cell.temperature = \ - self._f['geometry/cells'][key]['temperature'][...] + elif fill_type == 'material': + cell.temperature = group['temperature'][...] # Store Cell fill information for after Universe/Lattice creation - self._cell_fills[index] = (fill_type, fill) + cell_fills[cell.id] = (fill_type, fill) # Generate Region object given infix expression if region: - cell.region = Region.from_expression( - region, {s.id: s for s in self.surfaces.values()}) + cell.region = Region.from_expression(region, surfaces) # Get the distribcell data - if 'distribcell_index' in self._f['geometry/cells'][key]: - ind = self._f['geometry/cells'][key]['distribcell_index'].value + if 'distribcell_index' in group: + ind = group['distribcell_index'].value cell.distribcell_index = ind - paths = self._f['geometry/cells'][key]['paths'][...] + paths = group['paths'][...] paths = [str(path.decode()) for path in paths] cell.distribcell_paths = paths # Add the Cell to the global dictionary of all Cells - self.cells[index] = cell + cells[cell.id] = cell - def _read_universes(self): - self.n_universes = self._f['geometry/n_universes'].value + return cells, cell_fills - # Initialize dictionary for each Universe - # Keys - Universe keys - # Values - Universe objects - self.universes = {} + def _read_universes(self, cells): + universes = {} + for group in self._f['geometry/universes'].values(): + universe = openmc.Universe.from_hdf5(group, cells) + universes[universe.id] = universe + return universes - for key in self._f['geometry/universes'].keys(): - if key == 'n_universes': - continue + def _read_lattices(self, universes): + lattices = {} + for group in self._f['geometry/lattices'].values(): + lattice = openmc.Lattice.from_hdf5(group, universes) + lattices[lattice.id] = lattice + return lattices - universe_id = int(key.lstrip('universe ')) - index = self._f['geometry/universes'][key]['index'].value - cells = self._f['geometry/universes'][key]['cells'][...] - - # Create this Universe - universe = openmc.Universe(universe_id=universe_id) - - # Add each Cell to the Universe - for cell_id in cells: - cell = self.cells[cell_id] - universe.add_cell(cell) - - # Add the Universe to the global list of Universes - self.universes[index] = universe - - def _read_lattices(self): - self.n_lattices = self._f['geometry/n_lattices'].value - - # Initialize lattices for each Lattice - # Keys - Lattice keys - # Values - Lattice objects - self.lattices = {} - - for key in self._f['geometry/lattices'].keys(): - if key == 'n_lattices': - continue - - lattice_id = int(key.lstrip('lattice ')) - index = self._f['geometry/lattices'][key]['index'].value - name = self._f['geometry/lattices'][key]['name'].value.decode() - lattice_type = self._f['geometry/lattices'][key]['type'].value.decode() - - if 'offsets' in self._f['geometry/lattices'][key]: - offsets = self._f['geometry/lattices'][key]['offsets'][...] - else: - offsets = None - - if lattice_type == 'rectangular': - dimension = self._f['geometry/lattices'][key]['dimension'][...] - lower_left = \ - self._f['geometry/lattices'][key]['lower_left'][...] - pitch = self._f['geometry/lattices'][key]['pitch'][...] - outer = self._f['geometry/lattices'][key]['outer'].value - universe_ids = \ - self._f['geometry/lattices'][key]['universes'][...] - - # Create the Lattice - lattice = openmc.RectLattice(lattice_id=lattice_id, name=name) - lattice.lower_left = lower_left - lattice.pitch = pitch - - # If the Universe specified outer the Lattice is not void (-22) - if outer != -22: - lattice.outer = self.universes[outer] - - # Build array of Universe pointers for the Lattice - universes = \ - np.empty(tuple(universe_ids.shape), dtype=openmc.Universe) - - for z in range(universe_ids.shape[0]): - for y in range(universe_ids.shape[1]): - for x in range(universe_ids.shape[2]): - universes[z, y, x] = \ - self.get_universe_by_id(universe_ids[z, y, x]) - - # Use 2D NumPy array to store lattice universes for 2D lattices - if len(dimension) == 2: - universes = np.squeeze(universes) - universes = np.atleast_2d(universes) - - # Set the universes for the lattice - lattice.universes = universes - - # Set the distribcell offsets for the lattice - if offsets is not None: - lattice.offsets = offsets - - # Add the Lattice to the global dictionary of all Lattices - self.lattices[index] = lattice - - if lattice_type == 'hexagonal': - n_rings = self._f['geometry/lattices'][key]['n_rings'].value - n_axial = self._f['geometry/lattices'][key]['n_axial'].value - center = self._f['geometry/lattices'][key]['center'][...] - pitch = self._f['geometry/lattices'][key]['pitch'][...] - outer = self._f['geometry/lattices'][key]['outer'].value - - universe_ids = self._f[ - 'geometry/lattices'][key]['universes'][...] - - # Create the Lattice - lattice = openmc.HexLattice(lattice_id=lattice_id, name=name) - lattice.center = center - lattice.pitch = pitch - - # If the Universe specified outer the Lattice is not void (-22) - if outer != -22: - lattice.outer = self.universes[outer] - - # Build array of Universe pointers for the Lattice. Note that - # we need to convert between the HDF5's square array of - # (x, alpha, z) to the Python API's format of a ragged nested - # list of (z, ring, theta). - universes = [] - for z in range(n_axial): - # Add a list for this axial level. - universes.append([]) - x = n_rings - 1 - a = 2*n_rings - 2 - for r in range(n_rings - 1, 0, -1): - # Add a list for this ring. - universes[-1].append([]) - - # Climb down the top-right. - for i in range(r): - universes[-1][-1].append(universe_ids[z, a, x]) - x += 1 - a -= 1 - - # Climb down the right. - for i in range(r): - universes[-1][-1].append(universe_ids[z, a, x]) - a -= 1 - - # Climb down the bottom-right. - for i in range(r): - universes[-1][-1].append(universe_ids[z, a, x]) - x -= 1 - - # Climb up the bottom-left. - for i in range(r): - universes[-1][-1].append(universe_ids[z, a, x]) - x -= 1 - a += 1 - - # Climb up the left. - for i in range(r): - universes[-1][-1].append(universe_ids[z, a, x]) - a += 1 - - # Climb up the top-left. - for i in range(r): - universes[-1][-1].append(universe_ids[z, a, x]) - x += 1 - - # Move down to the next ring. - a -= 1 - - # Convert the ids into Universe objects. - universes[-1][-1] = [self.get_universe_by_id(u_id) - for u_id in universes[-1][-1]] - - # Handle the degenerate center ring separately. - u_id = universe_ids[z, a, x] - universes[-1].append([self.get_universe_by_id(u_id)]) - - # Add the universes to the lattice. - if len(pitch) == 2: - # Lattice is 3D - lattice.universes = universes - else: - # Lattice is 2D; extract the only axial level - lattice.universes = universes[0] - - if offsets is not None: - lattice.offsets = offsets - - # Add the Lattice to the global dictionary of all Lattices - self.lattices[index] = lattice - - def _finalize_geometry(self): - # Initialize Geometry object - self._openmc_geometry = openmc.Geometry() + def _finalize_geometry(self, cells, cell_fills, universes, lattices): + materials = {m.id: m for m in self.materials} # Iterate over all Cells and add fill Materials, Universes and Lattices - for cell_key in self._cell_fills.keys(): - # Determine fill type ('normal', 'universe', or 'lattice') and ID - fill_type = self._cell_fills[cell_key][0] - fill_id = self._cell_fills[cell_key][1] - + for cell_id, (fill_type, fill_id) in cell_fills.items(): # Retrieve the object corresponding to the fill type and ID - if fill_type == 'normal': + if fill_type == 'material': if isinstance(fill_id, Iterable): - fill = [self.get_material_by_id(mat) if mat > 0 else None + fill = [materials[mat] if mat > 0 else None for mat in fill_id] else: - if fill_id > 0: - fill = self.get_material_by_id(fill_id) - else: - fill = None + fill = materials[fill_id] if fill_id > 0 else None elif fill_type == 'universe': - fill = self.get_universe_by_id(fill_id) + fill = universes[fill_id] else: - fill = self.get_lattice_by_id(fill_id) + fill = lattices[fill_id] # Set the fill for the Cell - self.cells[cell_key].fill = fill + cells[cell_id].fill = fill # Set the root universe for the Geometry - root_universe = self.get_universe_by_id(0) - self.openmc_geometry.root_universe = root_universe - - def _read_tallies(self): - # Initialize a dictionary for the tally names - # Keys - Tally IDs - # Values - Tally names - self.tally_names = {} - - # Read the number of tallies - if 'tallies' not in self._f: - return - - # OpenMC Tally keys - all_keys = self._f['tallies/'].keys() - tally_keys = [key for key in all_keys if 'tally' in key] - - base = 'tallies/tally ' - - # Iterate over all Tallies - for tally_key in tally_keys: - tally_id = int(tally_key.strip('tally ')) - subbase = '{0}{1}'.format(base, tally_id) - - # Read Tally name metadata - tally_name = self._f['{0}/name'.format(subbase)].value.decode() - self.tally_names[tally_id] = tally_name + self.geometry.root_universe = universes[0] def add_volume_information(self, volume_calc): """Add volume information to the geometry within the summary file @@ -550,109 +207,4 @@ class Summary(object): Results from a stochastic volume calculation """ - self.openmc_geometry.add_volume_information(volume_calc) - - def get_material_by_id(self, material_id): - """Return a Material object given the material id - - Parameters - ---------- - id : int - Unique identifier for the material - - Returns - ------- - material : openmc.Material - Material with given id - - """ - - for material in self.materials.values(): - if material.id == material_id: - return material - - return None - - def get_surface_by_id(self, surface_id): - """Return a Surface object given the surface id - - Parameters - ---------- - id : int - Unique identifier for the surface - - Returns - ------- - surface : openmc.Surface - Surface with given id - - """ - - for surface in self.surfaces.values(): - if surface.id == surface_id: - return surface - - return None - - def get_cell_by_id(self, cell_id): - """Return a Cell object given the cell id - - Parameters - ---------- - id : int - Unique identifier for the cell - - Returns - ------- - cell : openmc.Cell - Cell with given id - - """ - - for cell in self.cells.values(): - if cell.id == cell_id: - return cell - - return None - - def get_universe_by_id(self, universe_id): - """Return a Universe object given the universe id - - Parameters - ---------- - id : int - Unique identifier for the universe - - Returns - ------- - universe : openmc.Universe - Universe with given id - - """ - - for universe in self.universes.values(): - if universe.id == universe_id: - return universe - - return None - - def get_lattice_by_id(self, lattice_id): - """Return a Lattice object given the lattice id - - Parameters - ---------- - id : int - Unique identifier for the lattice - - Returns - ------- - lattice : openmc.Lattice - Lattice with given id - - """ - - for lattice in self.lattices.values(): - if lattice.id == lattice_id: - return lattice - - return None + self.geometry.add_volume_information(volume_calc) diff --git a/openmc/surface.py b/openmc/surface.py index 04c7f9598..5eb242003 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -14,7 +14,7 @@ from openmc.region import Region, Intersection, Union # A static variable for auto-generated Surface IDs AUTO_SURFACE_ID = 10000 -_BC_TYPES = ['transmission', 'vacuum', 'reflective', 'periodic'] +_BOUNDARY_TYPES = ['transmission', 'vacuum', 'reflective', 'periodic'] def reset_auto_surface_id(): @@ -141,7 +141,7 @@ class Surface(object): @boundary_type.setter def boundary_type(self, boundary_type): check_type('boundary type', boundary_type, string_types) - check_value('boundary type', boundary_type, _BC_TYPES) + check_value('boundary type', boundary_type, _BOUNDARY_TYPES) self._boundary_type = boundary_type def bounding_box(self, side): @@ -171,7 +171,15 @@ class Surface(object): return (np.array([-np.inf, -np.inf, -np.inf]), np.array([np.inf, np.inf, np.inf])) - def create_xml_subelement(self): + def to_xml_element(self): + """Return XML representation of the surface + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing source data + + """ element = ET.Element("surface") element.set("id", str(self._id)) @@ -186,6 +194,76 @@ class Surface(object): return element + @staticmethod + def from_hdf5(group): + """Create surface from HDF5 group + + Parameters + ---------- + group : h5py.Group + Group in HDF5 file + + Returns + ------- + openmc.Surface + Instance of surface subclass + + """ + surface_id = int(group.name.split('/')[-1].lstrip('surface ')) + name = group['name'].value.decode() + surf_type = group['type'].value.decode() + bc = group['boundary_type'].value.decode() + coeffs = group['coefficients'][...] + + # Create the Surface based on its type + if surf_type == 'x-plane': + x0 = coeffs[0] + surface = XPlane(surface_id, bc, x0, name) + + elif surf_type == 'y-plane': + y0 = coeffs[0] + surface = YPlane(surface_id, bc, y0, name) + + elif surf_type == 'z-plane': + z0 = coeffs[0] + surface = ZPlane(surface_id, bc, z0, name) + + elif surf_type == 'plane': + A, B, C, D = coeffs + surface = Plane(surface_id, bc, A, B, C, D, name) + + elif surf_type == 'x-cylinder': + y0, z0, R = coeffs + surface = XCylinder(surface_id, bc, y0, z0, R, name) + + elif surf_type == 'y-cylinder': + x0, z0, R = coeffs + surface = YCylinder(surface_id, bc, x0, z0, R, name) + + elif surf_type == 'z-cylinder': + x0, y0, R = coeffs + surface = ZCylinder(surface_id, bc, x0, y0, R, name) + + elif surf_type == 'sphere': + x0, y0, z0, R = coeffs + surface = Sphere(surface_id, bc, x0, y0, z0, R, name) + + elif surf_type in ['x-cone', 'y-cone', 'z-cone']: + x0, y0, z0, R2 = coeffs + if surf_type == 'x-cone': + surface = XCone(surface_id, bc, x0, y0, z0, R2, name) + elif surf_type == 'y-cone': + surface = YCone(surface_id, bc, x0, y0, z0, R2, name) + elif surf_type == 'z-cone': + surface = ZCone(surface_id, bc, x0, y0, z0, R2, name) + + elif surf_type == 'quadric': + a, b, c, d, e, f, g, h, j, k = coeffs + surface = Quadric(surface_id, bc, a, b, c, d, e, f, g, + h, j, k, name) + + return surface + class Plane(Surface): """An arbitrary plane of the form :math:`Ax + By + Cz = D`. @@ -314,8 +392,16 @@ class Plane(Surface): x, y, z = point return self.a*x + self.b*y + self.c*z - self.d - def create_xml_subelement(self): - element = super(Plane, self).create_xml_subelement() + def to_xml_element(self): + """Return XML representation of the surface + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing source data + + """ + element = super(Plane, self).to_xml_element() # Add periodic surface pair information if self.boundary_type == 'periodic': diff --git a/openmc/tallies.py b/openmc/tallies.py index 20e03129b..9eef5f374 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -195,7 +195,7 @@ class Tally(object): if isinstance(nuclide, openmc.Nuclide): string += nuclide.name + ' ' else: - string += nuclide + ' ' + string += str(nuclide) + ' ' string += '\n' diff --git a/openmc/universe.py b/openmc/universe.py index b66a20cfe..fa850968d 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -118,6 +118,35 @@ class Universe(object): else: self._name = '' + @classmethod + def from_hdf5(cls, group, cells): + """Create universe from HDF5 group + + Parameters + ---------- + group : h5py.Group + Group in HDF5 file + cells : dict + Dictionary mapping cell IDs to instances of :class:`openmc.Cell`. + + Returns + ------- + openmc.Universe + Universe instance + + """ + universe_id = int(group.name.split('/')[-1].lstrip('universe ')) + cell_ids = group['cells'].value + + # Create this Universe + universe = cls(universe_id) + + # Add each Cell to the Universe + for cell_id in cell_ids: + universe.add_cell(cells[cell_id]) + + return universe + def find(self, point): """Find cells/universes/lattices which contain a given point @@ -411,7 +440,7 @@ class Universe(object): Returns ------- - materials : Collections.OrderedDict + materials : collections.OrderedDict Dictionary whose keys are material IDs and values are :class:`Material` instances @@ -436,14 +465,9 @@ class Universe(object): :class:`Universe` instances """ - - # Get all Cells in this Universe - cells = self.get_all_cells() - + # Append all Universes within each Cell to the dictionary universes = OrderedDict() - - # Append all Universes containing each Cell to the dictionary - for cell in cells.values(): + for cell in self.get_all_cells().values(): universes.update(cell.get_all_universes()) return universes diff --git a/openmc/volume.py b/openmc/volume.py index b1391c687..d85a9a17c 100644 --- a/openmc/volume.py +++ b/openmc/volume.py @@ -10,6 +10,8 @@ import h5py import openmc import openmc.checkvalue as cv +_VERSION_VOLUME = 1 + class VolumeCalculation(object): """Stochastic volume calculation specifications and results. @@ -189,6 +191,8 @@ class VolumeCalculation(object): """ with h5py.File(filename, 'r') as f: + cv.check_filetype_version(f, "volume", _VERSION_VOLUME) + domain_type = f.attrs['domain_type'].decode() samples = f.attrs['samples'] lower_left = f.attrs['lower_left'] diff --git a/scripts/openmc-voxel-to-silovtk b/scripts/openmc-voxel-to-silovtk index 1329b6b6c..471047127 100755 --- a/scripts/openmc-voxel-to-silovtk +++ b/scripts/openmc-voxel-to-silovtk @@ -27,9 +27,9 @@ def parse_options(): def main(filename, o): # Read data from voxel file fh = h5py.File(filename, 'r') - dimension = fh['num_voxels'].value - width = fh['voxel_width'].value - lower_left = fh['lower_left'].value + dimension = fh.attrs['num_voxels'] + width = fh.attrs['voxel_width'] + lower_left = fh.attrs['lower_left'] voxel_data = fh['data'].value nx, ny, nz = dimension @@ -40,7 +40,7 @@ def main(filename, o): import vtk except: print('The vtk python bindings do not appear to be installed ' - 'properly.\nOn Ubuntu: sudo apt-get install python-vtk\n' + 'properly.\nOn Ubuntu: sudo apt install python-vtk\n' 'See: http://www.vtk.org/') return diff --git a/src/constants.F90 b/src/constants.F90 index 43ba2c223..a2590a12a 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -9,17 +9,20 @@ module constants integer, parameter :: VERSION_MAJOR = 0 integer, parameter :: VERSION_MINOR = 8 integer, parameter :: VERSION_RELEASE = 0 + integer, parameter :: & + VERSION(3) = [VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE] ! HDF5 data format - integer, parameter :: HDF5_VERSION_MAJOR = 1 - integer, parameter :: HDF5_VERSION_MINOR = 0 + integer, parameter :: HDF5_VERSION(2) = [1, 0] - ! Revision numbers for binary files - integer, parameter :: REVISION_STATEPOINT = 15 - integer, parameter :: REVISION_PARTICLE_RESTART = 1 - integer, parameter :: REVISION_TRACK = 1 - integer, parameter :: REVISION_SUMMARY = 4 - character(10), parameter :: MULTIPOLE_VERSION = "v0.2" + ! Version numbers for binary files + integer, parameter :: VERSION_STATEPOINT(2) = [16, 0] + integer, parameter :: VERSION_PARTICLE_RESTART(2) = [2, 0] + integer, parameter :: VERSION_TRACK(2) = [2, 0] + integer, parameter :: VERSION_SUMMARY(2) = [5, 0] + integer, parameter :: VERSION_VOLUME(2) = [1, 0] + integer, parameter :: VERSION_VOXEL(2) = [1, 0] + character(10), parameter :: VERSION_MULTIPOLE = "v0.2" ! ============================================================================ ! ADJUSTABLE PARAMETERS @@ -104,11 +107,11 @@ module constants OP_INTERSECTION = huge(0) - 3, & ! Intersection operator OP_UNION = huge(0) - 4 ! Union operator (^) - ! Cell types + ! Cell fill types integer, parameter :: & - CELL_NORMAL = 1, & ! Cell with a specified material - CELL_FILL = 2, & ! Cell filled by a separate universe - CELL_LATTICE = 3 ! Cell filled with a lattice + FILL_MATERIAL = 1, & ! Cell with a specified material + FILL_UNIVERSE = 2, & ! Cell filled by a separate universe + FILL_LATTICE = 3 ! Cell filled with a lattice ! Void material integer, parameter :: MATERIAL_VOID = -1 @@ -142,7 +145,7 @@ module constants SURF_CONE_Z = 11 ! Cone parallel to z-axis ! Flag to say that the outside of a lattice is not defined - integer, parameter :: NO_OUTER_UNIVERSE = -22 + integer, parameter :: NO_OUTER_UNIVERSE = -1 ! Maximum number of lost particles integer, parameter :: MAX_LOST_PARTICLES = 10 diff --git a/src/eigenvalue.F90 b/src/eigenvalue.F90 index a930f4410..86169d98d 100644 --- a/src/eigenvalue.F90 +++ b/src/eigenvalue.F90 @@ -446,7 +446,7 @@ contains integer :: l ! loop index integer :: i, j, k ! indices referring to collision, absorption, or track - integer :: n ! number of realizations + real(8) :: n ! number of realizations real(8) :: kv(3) ! vector of k-effective estimates real(8) :: cov(3,3) ! sample covariance matrix real(8) :: f ! weighting factor @@ -458,73 +458,132 @@ contains if (n_realizations <= 3) return ! Initialize variables - n = n_realizations - g = ZERO - S = ZERO - k_combined = ZERO + n = real(n_realizations, 8) ! Copy estimates of k-effective and its variance (not variance of the mean) kv(1) = global_tallies(RESULT_SUM, K_COLLISION) / n kv(2) = global_tallies(RESULT_SUM, K_ABSORPTION) / n kv(3) = global_tallies(RESULT_SUM, K_TRACKLENGTH) / n - cov(1,1) = (global_tallies(RESULT_SUM_SQ, K_COLLISION) - & - n * kv(1) * kv(1)) / (n - 1) - cov(2,2) = (global_tallies(RESULT_SUM_SQ, K_ABSORPTION) - & - n * kv(2) * kv(2)) / (n - 1) - cov(3,3) = (global_tallies(RESULT_SUM_SQ, K_TRACKLENGTH) - & - n * kv(3) * kv(3)) / (n - 1) + cov(1, 1) = (global_tallies(RESULT_SUM_SQ, K_COLLISION) - & + n * kv(1) * kv(1)) / (n - ONE) + cov(2, 2) = (global_tallies(RESULT_SUM_SQ, K_ABSORPTION) - & + n * kv(2) * kv(2)) / (n - ONE) + cov(3, 3) = (global_tallies(RESULT_SUM_SQ, K_TRACKLENGTH) - & + n * kv(3) * kv(3)) / (n - ONE) ! Calculate covariances based on sums with Bessel's correction - cov(1,2) = (k_col_abs - n * kv(1) * kv(2))/(n - 1) - cov(1,3) = (k_col_tra - n * kv(1) * kv(3))/(n - 1) - cov(2,3) = (k_abs_tra - n * kv(2) * kv(3))/(n - 1) - cov(2,1) = cov(1,2) - cov(3,1) = cov(1,3) - cov(3,2) = cov(2,3) + cov(1, 2) = (k_col_abs - n * kv(1) * kv(2)) / (n - ONE) + cov(1, 3) = (k_col_tra - n * kv(1) * kv(3)) / (n - ONE) + cov(2, 3) = (k_abs_tra - n * kv(2) * kv(3)) / (n - ONE) + cov(2, 1) = cov(1, 2) + cov(3, 1) = cov(1, 3) + cov(3, 2) = cov(2, 3) - do l = 1, 3 - ! Permutations of estimates - if (l == 1) then - ! i = collision, j = absorption, k = tracklength - i = 1 - j = 2 - k = 3 - elseif (l == 2) then - ! i = absortion, j = tracklength, k = collision - i = 2 - j = 3 - k = 1 - elseif (l == 3) then - ! i = tracklength, j = collision, k = absorption - i = 3 - j = 1 - k = 2 - end if + ! Check to see if two estimators are the same; this is guaranteed to happen + ! in MG-mode with survival biasing when the collision and absorption + ! estimators are the same, but can theoretically happen at anytime. + ! If it does, the standard estimators will produce floating-point + ! exceptions and an expression specifically derived for the combination of + ! two estimators (vice three) should be used instead. - ! Calculate weighting - f = cov(j,j)*(cov(k,k) - cov(i,k)) - cov(k,k)*cov(i,j) + & - cov(j,k)*(cov(i,j) + cov(i,k) - cov(j,k)) + ! First we will identify if there are any matching estimators + if ((abs(kv(1) - kv(2)) / kv(1) < FP_REL_PRECISION) .and. & + (abs(cov(1, 1) - cov(2, 2)) / cov(1, 1) < FP_REL_PRECISION)) then + ! 1 and 2 match, so only use 1 and 3 in our comparisons + i = 1 + j = 3 - ! Add to S sums for variance of combined estimate - S(1) = S(1) + f * cov(1,l) - S(2) = S(2) + (cov(j,j) + cov(k,k) - TWO*cov(j,k))*kv(l)*kv(l) - S(3) = S(3) + (cov(k,k) + cov(i,j) - cov(j,k) - cov(i,k))*kv(l)*kv(j) + else if ((abs(kv(1) - kv(3)) / kv(1) < FP_REL_PRECISION) .and. & + (abs(cov(1, 1) - cov(3, 3)) / cov(1, 1) < FP_REL_PRECISION)) then + ! 1 and 3 match, so only use 1 and 2 in our comparisons + i = 1 + j = 2 - ! Add to sum for combined k-effective - k_combined(1) = k_combined(1) + f * kv(l) - g = g + f - end do + else if ((abs(kv(2) - kv(3)) / kv(2) < FP_REL_PRECISION) .and. & + (abs(cov(2, 2) - cov(3, 3)) / cov(2, 2) < FP_REL_PRECISION)) then + ! 2 and 3 match, so only use 1 and 2 in our comparisons + i = 1 + j = 2 - ! Complete calculations of S sums - S = (n - 1)*S - S(1) = (n - 1)**2 * S(1) + else + ! No two estimators match, so set i to 0 and this will be the indicator + ! to use all three estimators. + i = 0 + end if - ! Calculate combined estimate of k-effective - k_combined(1) = k_combined(1) / g + if (i == 0) then + ! Use three estimators as derived in the paper by Urbatsch - ! Calculate standard deviation of combined estimate - g = (n - 1)**2 * g - k_combined(2) = sqrt(S(1)/(g*n*(n-3)) * (ONE + n*((S(2) - TWO*S(3))/g))) + ! Initialize variables + g = ZERO + S = ZERO + k_combined = ZERO + + do l = 1, 3 + ! Permutations of estimates + if (l == 1) then + ! i = collision, j = absorption, k = tracklength + i = 1 + j = 2 + k = 3 + elseif (l == 2) then + ! i = absortion, j = tracklength, k = collision + i = 2 + j = 3 + k = 1 + elseif (l == 3) then + ! i = tracklength, j = collision, k = absorption + i = 3 + j = 1 + k = 2 + end if + + ! Calculate weighting + f = cov(j, j) * (cov(k, k) - cov(i, k)) - cov(k, k) * cov(i, j) + & + cov(j, k) * (cov(i, j) + cov(i, k) - cov(j, k)) + + ! Add to S sums for variance of combined estimate + S(1) = S(1) + f * cov(1, l) + S(2) = S(2) + (cov(j, j) + cov(k, k) - TWO * cov(j, k)) * kv(l) * kv(l) + S(3) = S(3) + (cov(k, k) + cov(i, j) - cov(j, k) - & + cov(i, k)) * kv(l) * kv(j) + + ! Add to sum for combined k-effective + k_combined(1) = k_combined(1) + f * kv(l) + g = g + f + end do + + ! Complete calculations of S sums + S = (n - ONE) * S + S(1) = (n - ONE)**2 * S(1) + + ! Calculate combined estimate of k-effective + k_combined(1) = k_combined(1) / g + + ! Calculate standard deviation of combined estimate + g = (n - ONE)**2 * g + k_combined(2) = sqrt(S(1) / & + (g * n * (n - THREE)) * (ONE + n * ((S(2) - TWO * S(3)) / g))) + + else + ! Use only two estimators + ! These equations are derived analogously to that done in the paper by + ! Urbatsch, but are simpler than for the three estimators case since the + ! block matrices of the three estimator equations reduces to scalars here + + ! Store the commonly used term + f = kv(i) - kv(j) + g = cov(i, i) + cov(j, j) - TWO * cov(i, j) + + ! Calculate combined estimate of k-effective + k_combined(1) = kv(i) - (cov(i, i) - cov(i, j)) / g * f + + ! Calculate standard deviation of combined estimate + k_combined(2) = (cov(i, i) * cov(j, j) - cov(i, j) * cov(i, j)) * & + (g + n * f * f) / (n * (n - TWO) * g * g) + k_combined(2) = sqrt(k_combined(2)) + + end if end subroutine calculate_combined_keff diff --git a/src/geometry.F90 b/src/geometry.F90 index d41ca1447..ecb76d050 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -244,7 +244,7 @@ contains call write_message(" Entering cell " // trim(to_str(c % id))) end if - CELL_TYPE: if (c % type == CELL_NORMAL) then + CELL_TYPE: if (c % type == FILL_MATERIAL) then ! ====================================================================== ! AT LOWEST UNIVERSE, TERMINATE SEARCH @@ -260,10 +260,10 @@ contains distribcell_index = c % distribcell_index offset = 0 do k = 1, p % n_coord - if (cells(p % coord(k) % cell) % type == CELL_FILL) then + if (cells(p % coord(k) % cell) % type == FILL_UNIVERSE) then offset = offset + cells(p % coord(k) % cell) % & offset(distribcell_index) - elseif (cells(p % coord(k) % cell) % type == CELL_LATTICE) then + elseif (cells(p % coord(k) % cell) % type == FILL_LATTICE) then if (lattices(p % coord(k + 1) % lattice) % obj & % are_valid_indices([& p % coord(k + 1) % lattice_x, & @@ -293,7 +293,7 @@ contains p % sqrtkT = c % sqrtkT(1) end if - elseif (c % type == CELL_FILL) then CELL_TYPE + elseif (c % type == FILL_UNIVERSE) then CELL_TYPE ! ====================================================================== ! CELL CONTAINS LOWER UNIVERSE, RECURSIVELY FIND CELL @@ -322,7 +322,7 @@ contains j = p % n_coord if (.not. found) exit - elseif (c % type == CELL_LATTICE) then CELL_TYPE + elseif (c % type == FILL_LATTICE) then CELL_TYPE ! ====================================================================== ! CELL CONTAINS LATTICE, RECURSIVELY FIND CELL @@ -1116,11 +1116,11 @@ contains ! ==================================================================== ! AT LOWEST UNIVERSE, TERMINATE SEARCH - if (c % type == CELL_NORMAL) then + if (c % type == FILL_MATERIAL) then ! ==================================================================== ! CELL CONTAINS LOWER UNIVERSE, RECURSIVELY FIND CELL - elseif (c % type == CELL_FILL) then + elseif (c % type == FILL_UNIVERSE) then ! Set offset for the cell on this level c % offset(map) = offset @@ -1134,7 +1134,7 @@ contains ! ==================================================================== ! CELL CONTAINS LATTICE, RECURSIVELY FIND CELL - elseif (c % type == CELL_LATTICE) then + elseif (c % type == FILL_LATTICE) then ! Set current lattice lat => lattices(c % fill) % obj @@ -1232,11 +1232,11 @@ contains ! ==================================================================== ! AT LOWEST UNIVERSE, TERMINATE SEARCH - if (c % type == CELL_NORMAL) then + if (c % type == FILL_MATERIAL) then ! ==================================================================== ! CELL CONTAINS LOWER UNIVERSE, RECURSIVELY FIND CELL - elseif (c % type == CELL_FILL) then + elseif (c % type == FILL_UNIVERSE) then next_univ => universes(c % fill) @@ -1251,7 +1251,7 @@ contains ! ==================================================================== ! CELL CONTAINS LATTICE, RECURSIVELY FIND CELL - elseif (c % type == CELL_LATTICE) then + elseif (c % type == FILL_LATTICE) then ! Set current lattice lat => lattices(c % fill) % obj @@ -1346,11 +1346,11 @@ contains ! ==================================================================== ! AT LOWEST UNIVERSE, TERMINATE SEARCH - if (c % type == CELL_NORMAL) then + if (c % type == FILL_MATERIAL) then ! ==================================================================== ! CELL CONTAINS LOWER UNIVERSE, RECURSIVELY FIND CELL - elseif (c % type == CELL_FILL) then + elseif (c % type == FILL_UNIVERSE) then next_univ => universes(c % fill) @@ -1359,7 +1359,7 @@ contains ! ==================================================================== ! CELL CONTAINS LATTICE, RECURSIVELY FIND CELL - elseif (c % type == CELL_LATTICE) then + elseif (c % type == FILL_LATTICE) then ! Set current lattice lat => lattices(c % fill) % obj @@ -1428,14 +1428,14 @@ contains ! ==================================================================== ! CELL CONTAINS LOWER UNIVERSE, RECURSIVELY FIND CELL - if (c % type == CELL_FILL) then + if (c % type == FILL_UNIVERSE) then next_univ => universes(c % fill) levels_below = max(levels_below, maximum_levels(next_univ)) ! ==================================================================== ! CELL CONTAINS LATTICE, RECURSIVELY FIND CELL - elseif (c % type == CELL_LATTICE) then + elseif (c % type == FILL_LATTICE) then ! Set current lattice lat => lattices(c % fill) % obj diff --git a/src/hdf5_interface.F90 b/src/hdf5_interface.F90 index e588cda14..3a2582511 100644 --- a/src/hdf5_interface.F90 +++ b/src/hdf5_interface.F90 @@ -75,6 +75,8 @@ module hdf5_interface module procedure write_attribute_double module procedure write_attribute_double_1D module procedure write_attribute_integer + module procedure write_attribute_integer_1D + module procedure write_attribute_string end interface write_attribute public :: write_dataset @@ -93,7 +95,6 @@ module hdf5_interface public :: close_dataset public :: get_shape public :: get_ndims - public :: write_attribute_string public :: get_groups public :: get_datasets public :: get_name @@ -2046,15 +2047,46 @@ contains ! WRITE_ATTRIBUTE_STRING !=============================================================================== - subroutine write_attribute_string(group_id, var, attr_type, attr_str) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: var ! variable name for attr - character(*), intent(in) :: attr_type ! attr identifier type - character(*), intent(in) :: attr_str ! string for attr id type + subroutine write_attribute_string(obj_id, name, buffer) + integer(HID_T), intent(in) :: obj_id ! object to write attribute to + character(*), intent(in) :: name ! name of attribute + character(*), intent(in), target :: buffer ! string to write - integer :: hdf5_err + integer :: hdf5_err + integer(HID_T) :: dspace_id + integer(HID_T) :: attr_id + integer(HID_T) :: filetype + integer(SIZE_T) :: i + integer(SIZE_T) :: n + character(kind=C_CHAR), allocatable, target :: temp_buffer(:) + type(c_ptr) :: f_ptr - call h5ltset_attribute_string_f(group_id, var, attr_type, attr_str, hdf5_err) + ! Create datatype for HDF5 file based on C char + n = len_trim(buffer) + if (n > 0) then + call h5tcopy_f(H5T_C_S1, filetype, hdf5_err) + call h5tset_size_f(filetype, n, hdf5_err) + + ! Create memory space and attribute + call h5screate_f(H5S_SCALAR_F, dspace_id, hdf5_err) + call h5acreate_f(obj_id, trim(name), filetype, dspace_id, & + attr_id, hdf5_err) + + ! Copy string to temporary buffer + allocate(temp_buffer(n)) + do i = 1, n + temp_buffer(i) = buffer(i:i) + end do + + ! Write attribute + f_ptr = c_loc(buffer(1:1)) + call h5awrite_f(attr_id, filetype, f_ptr, hdf5_err) + + ! Close attribute + call h5aclose_f(attr_id, hdf5_err) + call h5sclose_f(dspace_id, hdf5_err) + call h5tclose_f(filetype, hdf5_err) + end if end subroutine write_attribute_string subroutine read_attribute_double(buffer, obj_id, name) @@ -2270,6 +2302,37 @@ contains call h5aread_f(attr_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end subroutine read_attribute_integer_1D_explicit + subroutine write_attribute_integer_1D(obj_id, name, buffer) + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + integer, target, intent(in) :: buffer(:) + + integer(HSIZE_T) :: dims(1) + + dims(:) = shape(buffer) + call write_attribute_integer_1D_explicit(obj_id, dims, name, buffer) + end subroutine write_attribute_integer_1D + + subroutine write_attribute_integer_1D_explicit(obj_id, dims, name, buffer) + integer(HID_T), intent(in) :: obj_id + integer(HSIZE_T), intent(in) :: dims(1) + character(*), intent(in) :: name + integer, target, intent(in) :: buffer(dims(1)) + + integer :: hdf5_err + integer(HID_T) :: dspace_id + integer(HID_T) :: attr_id + type(C_PTR) :: f_ptr + + call h5screate_simple_f(1, dims, dspace_id, hdf5_err) + call h5acreate_f(obj_id, trim(name), H5T_NATIVE_INTEGER, dspace_id, & + attr_id, hdf5_err) + f_ptr = c_loc(buffer) + call h5awrite_f(attr_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5aclose_f(attr_id, hdf5_err) + call h5sclose_f(dspace_id, hdf5_err) + end subroutine write_attribute_integer_1D_explicit + subroutine read_attribute_integer_2D(buffer, obj_id, name) integer, target, allocatable, intent(inout) :: buffer(:,:) integer(HID_T), intent(in) :: obj_id diff --git a/src/initialize.F90 b/src/initialize.F90 index d30f1e014..2ed47a8ba 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -13,18 +13,18 @@ module initialize use set_header, only: SetInt use energy_grid, only: logarithmic_grid, grid_method use error, only: fatal_error, warning - use geometry, only: neighbor_lists, count_instance, calc_offsets, & + use geometry, only: neighbor_lists, count_instance, calc_offsets, & maximum_levels use geometry_header, only: Cell, Universe, Lattice, RectLattice, HexLattice,& &BASE_UNIVERSE use global - use hdf5_interface, only: file_open, read_dataset, file_close, hdf5_bank_t,& - hdf5_integer8_t + use hdf5_interface, only: file_open, read_attribute, file_close, & + hdf5_bank_t, hdf5_integer8_t use input_xml, only: read_input_xml, cells_in_univ_dict, read_plots_xml use material_header, only: Material use message_passing use mgxs_data, only: read_mgxs, create_macro_xs - use output, only: title, header, print_version, write_message, & + use output, only: title, header, print_version, write_message, & print_usage, print_plot use random_lcg, only: initialize_prng use state_point, only: load_state_point @@ -307,11 +307,11 @@ contains ! Check what type of file this is file_id = file_open(argv(i), 'r', parallel=.true.) - call read_dataset(filetype, file_id, 'filetype') + call read_attribute(filetype, file_id, 'filetype') call file_close(file_id) ! Set path and flag for type of run - select case (filetype) + select case (trim(filetype)) case ('statepoint') path_state_point = argv(i) restart_run = .true. @@ -319,7 +319,7 @@ contains path_particle_restart = argv(i) particle_restart_run = .true. case default - call fatal_error("Unrecognized file after restart flag.") + call fatal_error("Unrecognized file after restart flag: " // filetype // ".") end select ! If its a restart run check for additional source file @@ -333,7 +333,7 @@ contains ! Check file type is a source file file_id = file_open(argv(i), 'r', parallel=.true.) - call read_dataset(filetype, file_id, 'filetype') + call read_attribute(filetype, file_id, 'filetype') call file_close(file_id) if (filetype /= 'source') then call fatal_error("Second file after restart flag must be a & @@ -560,11 +560,11 @@ contains if (c % material(1) == NONE) then id = c % fill if (universe_dict % has_key(id)) then - c % type = CELL_FILL + c % type = FILL_UNIVERSE c % fill = universe_dict % get_key(id) elseif (lattice_dict % has_key(id)) then lid = lattice_dict % get_key(id) - c % type = CELL_LATTICE + c % type = FILL_LATTICE c % fill = lid else call fatal_error("Specified fill " // trim(to_str(id)) // " on cell "& @@ -575,9 +575,9 @@ contains do j = 1, size(c % material) id = c % material(j) if (id == MATERIAL_VOID) then - c % type = CELL_NORMAL + c % type = FILL_MATERIAL else if (material_dict % has_key(id)) then - c % type = CELL_NORMAL + c % type = FILL_MATERIAL c % material(j) = material_dict % get_key(id) else call fatal_error("Could not find material " // trim(to_str(id)) & @@ -934,7 +934,7 @@ contains ! Allocate offset table for fill cells do i = 1, n_cells - if (cells(i) % type /= CELL_NORMAL) then + if (cells(i) % type /= FILL_MATERIAL) then allocate(cells(i) % offset(n_maps)) end if end do diff --git a/src/input_xml.F90 b/src/input_xml.F90 index fa2e9881c..fc4d5a581 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4261,14 +4261,14 @@ contains end select ! Set output file path - filename = trim(to_str(pl % id)) // "_plot" + filename = "plot_" // trim(to_str(pl % id)) if (check_for_node(node_plot, "filename")) & call get_node_value(node_plot, "filename", filename) select case (pl % type) case (PLOT_TYPE_SLICE) pl % path_plot = trim(path_input) // trim(filename) // ".ppm" case (PLOT_TYPE_VOXEL) - pl % path_plot = trim(path_input) // trim(filename) // ".voxel" + pl % path_plot = trim(path_input) // trim(filename) // ".h5" end select ! Copy plot pixel size @@ -5412,16 +5412,16 @@ contains if (attribute_exists(file_id, 'version')) then call read_attribute(version, file_id, 'version') - if (version(1) /= HDF5_VERSION_MAJOR) then + if (version(1) /= HDF5_VERSION(1)) then call fatal_error("HDF5 data format uses version " // trim(to_str(& version(1))) // "." // trim(to_str(version(2))) // " whereas & &your installation of OpenMC expects version " // trim(to_str(& - HDF5_VERSION_MAJOR)) // ".x data.") + HDF5_VERSION(1))) // ".x data.") end if else call fatal_error("HDF5 data does not indicate a version. Your & &installation of OpenMC expects version " // trim(to_str(& - HDF5_VERSION_MAJOR)) // ".x data.") + HDF5_VERSION(1))) // ".x data.") end if end subroutine check_data_version diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 04443e6d5..faf0fbaff 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -2340,7 +2340,7 @@ module mgxs_header ! Now need to compare this material maximum scattering order with ! the problem wide max scatt order and use whichever is lower - order = min(mat_max_order, max_order) + order = min(mat_max_order, max_order + 1) ! Ok, got our order, store the dimensionality order_dim = order @@ -3467,9 +3467,7 @@ module mgxs_header type(MaterialMacroXS), intent(inout) :: xs ! Resultant Mgxs Data xs % total = this % xs(this % index_temp) % total(gin) - xs % elastic = this % xs(this % index_temp) % scatter % scattxs(gin) xs % absorption = this % xs(this % index_temp) % absorption(gin) - xs % fission = this % xs(this % index_temp) % fission(gin) xs % nu_fission = & this % xs(this % index_temp) % prompt_nu_fission(gin) + & sum(this % xs(this % index_temp) % delayed_nu_fission(:, gin)) @@ -3487,12 +3485,8 @@ module mgxs_header call find_angle(this % polar, this % azimuthal, uvw, iazi, ipol) xs % total = this % xs(this % index_temp) % & total(gin, iazi, ipol) - xs % elastic = this % xs(this % index_temp) % & - scatter(iazi, ipol) % obj % scattxs(gin) xs % absorption = this % xs(this % index_temp) % & absorption(gin, iazi, ipol) - xs % fission = this % xs(this % index_temp) % & - fission(gin, iazi, ipol) xs % nu_fission = this % xs(this % index_temp) % & prompt_nu_fission(gin, iazi, ipol) + & sum(this % xs(this % index_temp) % & diff --git a/src/multipole.F90 b/src/multipole.F90 index a099e5047..c59f94727 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -1,8 +1,9 @@ module multipole + use hdf5 + use constants use global - use hdf5 use hdf5_interface use multipole_header, only: MultipoleArray, FIT_T, FIT_A, FIT_F, & MP_FISS, FORM_MLBW, FORM_RM @@ -39,9 +40,9 @@ contains ! Check the file version number. call read_dataset(version, file_id, "version") - if (version /= MULTIPOLE_VERSION) call fatal_error("The current multipole& - & format version is " // trim(MULTIPOLE_VERSION) // " but the file "& - // trim(filename) // " uses version " // trim(version)) + if (version /= VERSION_MULTIPOLE) call fatal_error("The current multipole& + & format version is " // trim(VERSION_MULTIPOLE) // " but the file "& + // trim(filename) // " uses version " // trim(version) // ".") ! Load in all the array size scalars call read_dataset(multipole % length, group_id, "length") diff --git a/src/output.F90 b/src/output.F90 index c719dbed9..b1b8320c6 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -173,10 +173,13 @@ contains if (master) then write(UNIT=OUTPUT_UNIT, FMT='(1X,A,1X,I1,".",I1,".",I1)') & "OpenMC version", VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE +#ifdef GIT_SHA1 + write(UNIT=OUTPUT_UNIT, FMT='(1X,A,A)') "Git SHA1: ", GIT_SHA1 +#endif write(UNIT=OUTPUT_UNIT, FMT=*) "Copyright (c) 2011-2015 & &Massachusetts Institute of Technology" write(UNIT=OUTPUT_UNIT, FMT=*) "MIT/X license at & - &" + &" end if end subroutine print_version diff --git a/src/particle_restart.F90 b/src/particle_restart.F90 index a1c32f723..430ee4d44 100644 --- a/src/particle_restart.F90 +++ b/src/particle_restart.F90 @@ -69,7 +69,6 @@ contains type(Particle), intent(inout) :: p integer, intent(inout) :: previous_run_mode - integer :: int_scalar integer(HID_T) :: file_id character(MAX_WORD_LEN) :: tempstr @@ -81,15 +80,13 @@ contains file_id = file_open(path_particle_restart, 'r') ! Read data from file - call read_dataset(tempstr, file_id, 'filetype') - call read_dataset(int_scalar, file_id, 'revision') call read_dataset(current_batch, file_id, 'current_batch') - call read_dataset(gen_per_batch, file_id, 'gen_per_batch') - call read_dataset(current_gen, file_id, 'current_gen') + call read_dataset(gen_per_batch, file_id, 'generations_per_batch') + call read_dataset(current_gen, file_id, 'current_generation') call read_dataset(n_particles, file_id, 'n_particles') call read_dataset(tempstr, file_id, 'run_mode') select case (tempstr) - case ('k-eigenvalue') + case ('eigenvalue') previous_run_mode = MODE_EIGENVALUE case ('fixed source') previous_run_mode = MODE_FIXEDSOURCE diff --git a/src/particle_restart_write.F90 b/src/particle_restart_write.F90 index d983b3db8..08e80ea1b 100644 --- a/src/particle_restart_write.F90 +++ b/src/particle_restart_write.F90 @@ -23,7 +23,6 @@ contains integer(HID_T) :: file_id character(MAX_FILE_LEN) :: filename - type(Bank), pointer :: src ! Dont write another restart file if in particle restart mode if (run_mode == MODE_PARTICLE) return @@ -36,29 +35,34 @@ contains ! Create file file_id = file_create(filename) - ! Get information about source particle - src => source_bank(current_work) + associate (src => source_bank(current_work)) + ! Write filetype and version info + call write_attribute(file_id, 'filetype', 'particle restart') + call write_attribute(file_id, 'version', VERSION_PARTICLE_RESTART) + call write_attribute(file_id, "openmc_version", VERSION) +#ifdef GIT_SHA1 + call write_attribute(file_id, "git_sha1", GIT_SHA1) +#endif - ! Write data to file - call write_dataset(file_id, 'filetype', 'particle restart') - call write_dataset(file_id, 'revision', REVISION_PARTICLE_RESTART) - call write_dataset(file_id, 'current_batch', current_batch) - call write_dataset(file_id, 'gen_per_batch', gen_per_batch) - call write_dataset(file_id, 'current_gen', current_gen) - call write_dataset(file_id, 'n_particles', n_particles) - select case(run_mode) - case (MODE_FIXEDSOURCE) - call write_dataset(file_id, 'run_mode', 'fixed source') - case (MODE_EIGENVALUE) - call write_dataset(file_id, 'run_mode', 'k-eigenvalue') - case (MODE_PARTICLE) - call write_dataset(file_id, 'run_mode', 'particle restart') - end select - call write_dataset(file_id, 'id', p%id) - call write_dataset(file_id, 'weight', src%wgt) - call write_dataset(file_id, 'energy', src%E) - call write_dataset(file_id, 'xyz', src%xyz) - call write_dataset(file_id, 'uvw', src%uvw) + ! Write data to file + call write_dataset(file_id, 'current_batch', current_batch) + call write_dataset(file_id, 'generations_per_batch', gen_per_batch) + call write_dataset(file_id, 'current_generation', current_gen) + call write_dataset(file_id, 'n_particles', n_particles) + select case(run_mode) + case (MODE_FIXEDSOURCE) + call write_dataset(file_id, 'run_mode', 'fixed source') + case (MODE_EIGENVALUE) + call write_dataset(file_id, 'run_mode', 'eigenvalue') + case (MODE_PARTICLE) + call write_dataset(file_id, 'run_mode', 'particle restart') + end select + call write_dataset(file_id, 'id', p%id) + call write_dataset(file_id, 'weight', src%wgt) + call write_dataset(file_id, 'energy', src%E) + call write_dataset(file_id, 'xyz', src%xyz) + call write_dataset(file_id, 'uvw', src%uvw) + end associate ! Close file call file_close(file_id) diff --git a/src/plot.F90 b/src/plot.F90 index b5832bbdf..ee8ffdb14 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -8,17 +8,22 @@ module plot use hdf5_interface use mesh, only: get_mesh_indices use mesh_header, only: RegularMesh - use output, only: write_message + use output, only: write_message, time_stamp use particle_header, only: LocalCoord, Particle use plot_header - use ppmlib, only: Image, init_image, allocate_image, & - deallocate_image, set_pixel use progress_header, only: ProgressBar use string, only: to_str use hdf5 implicit none + private + + public :: run_plot + + integer, parameter :: RED = 1 + integer, parameter :: GREEN = 2 + integer, parameter :: BLUE = 3 contains @@ -29,22 +34,21 @@ contains subroutine run_plot() integer :: i ! loop index for plots - type(ObjectPlot), pointer :: pl => null() do i = 1, n_plots - pl => plots(i) + associate (pl => plots(i)) + ! Display output message + call write_message("Processing plot " // trim(to_str(pl % id)) & + // ": " // trim(pl % path_plot) // " ...", 5) - ! Display output message - call write_message("Processing plot " // trim(to_str(pl % id)) & - &// ": " // trim(pl % path_plot) // " ...", 5) - - if (pl % type == PLOT_TYPE_SLICE) then - ! create 2d image - call create_ppm(pl) - else if (pl % type == PLOT_TYPE_VOXEL) then - ! create dump for 3D silomesh utility script - call create_3d_dump(pl) - end if + if (pl % type == PLOT_TYPE_SLICE) then + ! create 2d image + call create_ppm(pl) + else if (pl % type == PLOT_TYPE_VOXEL) then + ! create dump for 3D silomesh utility script + call create_voxel(pl) + end if + end associate end do end subroutine run_plot @@ -55,15 +59,13 @@ contains !=============================================================================== subroutine position_rgb(p, pl, rgb, id) - - type(Particle), intent(inout) :: p - type(ObjectPlot), pointer, intent(in) :: pl - integer, intent(out) :: rgb(3) - integer, intent(out) :: id + type(Particle), intent(inout) :: p + type(ObjectPlot), intent(in) :: pl + integer, intent(out) :: rgb(3) + integer, intent(out) :: id integer :: j logical :: found_cell - type(Cell), pointer :: c p % n_coord = 1 @@ -81,19 +83,20 @@ contains else if (pl % color_by == PLOT_COLOR_MATS) then ! Assign color based on material - c => cells(p % coord(j) % cell) - if (c % type == CELL_FILL) then - ! If we stopped on a middle universe level, treat as if not found - rgb = pl % not_found % rgb - id = -1 - else if (p % material == MATERIAL_VOID) then - ! By default, color void cells white - rgb = 255 - id = -1 - else - rgb = pl % colors(p % material) % rgb - id = materials(p % material) % id - end if + associate (c => cells(p % coord(j) % cell)) + if (c % type == FILL_UNIVERSE) then + ! If we stopped on a middle universe level, treat as if not found + rgb = pl % not_found % rgb + id = -1 + else if (p % material == MATERIAL_VOID) then + ! By default, color void cells white + rgb = 255 + id = -1 + else + rgb = pl % colors(p % material) % rgb + id = materials(p % material) % id + end if + end associate else if (pl % color_by == PLOT_COLOR_CELLS) then ! Assign color based on cell rgb = pl % colors(p % coord(j) % cell) % rgb @@ -112,27 +115,29 @@ contains !=============================================================================== subroutine create_ppm(pl) - - type(ObjectPlot), pointer :: pl + type(ObjectPlot), intent(in) :: pl integer :: in_i integer :: out_i integer :: x, y ! pixel location integer :: rgb(3) ! colors (red, green, blue) from 0-255 integer :: id + integer :: height, width real(8) :: in_pixel real(8) :: out_pixel real(8) :: xyz(3) - type(Image) :: img + integer, allocatable :: data(:,:,:) type(Particle) :: p - type(ProgressBar) :: progress - ! Initialize and allocate space for image - call init_image(img) - call allocate_image(img, pl % pixels(1), pl % pixels(2)) + width = pl % pixels(1) + height = pl % pixels(2) - in_pixel = pl % width(1)/dble(pl % pixels(1)) - out_pixel = pl % width(2)/dble(pl % pixels(2)) + in_pixel = pl % width(1)/dble(width) + out_pixel = pl % width(2)/dble(height) + + ! Allocate and initialize results array + allocate(data(3, width, height)) + data(:,:,:) = 0 if (pl % basis == PLOT_BASIS_XY) then in_i = 1 @@ -160,50 +165,42 @@ contains p % coord(1) % uvw = [ HALF, HALF, HALF ] p % coord(1) % universe = BASE_UNIVERSE - do y = 1, img % height - call progress % set_value(dble(y)/dble(img % height)*100) - do x = 1, img % width +!$omp parallel do firstprivate(p) private(x, rgb, id) reduction(+ : data) + do y = 1, height + ! Set y coordinate + p % coord(1) % xyz(out_i) = xyz(out_i) - out_pixel*(y - 1) + do x = 1, width + ! Set x coordinate + p % coord(1) % xyz(in_i) = xyz(in_i) + in_pixel*(x - 1) ! get pixel color call position_rgb(p, pl, rgb, id) ! Create a pixel at (x,y) with color (r,g,b) - call set_pixel(img, x-1, y-1, rgb(1), rgb(2), rgb(3)) - - ! Advance pixel in first direction - p % coord(1) % xyz(in_i) = p % coord(1) % xyz(in_i) + in_pixel + data(:, x, y) = rgb end do - - ! Advance pixel in second direction - p % coord(1) % xyz(in_i) = xyz(in_i) - p % coord(1) % xyz(out_i) = p % coord(1) % xyz(out_i) - out_pixel end do +!$omp end parallel do ! Draw tally mesh boundaries on the image if requested - if (associated(pl % meshlines_mesh)) call draw_mesh_lines(pl, img) + if (associated(pl % meshlines_mesh)) call draw_mesh_lines(pl, data) ! Write out the ppm to a file - call output_ppm(pl,img) - - ! Free up space - call deallocate_image(img) - - ! Clear particle - call p % clear() + call output_ppm(pl, data) end subroutine create_ppm !=============================================================================== ! DRAW_MESH_LINES draws mesh line boundaries on an image !=============================================================================== - subroutine draw_mesh_lines(pl, img) - type(ObjectPlot), pointer, intent(in) :: pl - type(Image), intent(inout) :: img + subroutine draw_mesh_lines(pl, data) + type(ObjectPlot), intent(in) :: pl + integer, intent(inout) :: data(:,:,:) logical :: in_mesh integer :: out_, in_ ! pixel location - integer :: r, g, b ! RGB color for meshlines pixels + integer :: rgb(3) ! RGB color for meshlines pixels integer :: outrange(2), inrange(2) ! range of pixel locations integer :: i, j ! loop indices integer :: plus @@ -216,13 +213,8 @@ contains real(8) :: xyz_ur_plot(3) ! upper right xyz of plot image real(8) :: xyz_ll(3) ! lower left xyz real(8) :: xyz_ur(3) ! upper right xyz - type(RegularMesh), pointer :: m - m => pl % meshlines_mesh - - r = pl % meshlines_color % rgb(1) - g = pl % meshlines_color % rgb(2) - b = pl % meshlines_color % rgb(3) + rgb(:) = pl % meshlines_color % rgb select case (pl % basis) case(PLOT_BASIS_XY) @@ -246,55 +238,57 @@ contains width = xyz_ur_plot - xyz_ll_plot - call get_mesh_indices(m, xyz_ll_plot, ijk_ll(:m % n_dimension), in_mesh) - call get_mesh_indices(m, xyz_ur_plot, ijk_ur(:m % n_dimension), in_mesh) + associate (m => pl % meshlines_mesh) + call get_mesh_indices(m, xyz_ll_plot, ijk_ll(:m % n_dimension), in_mesh) + call get_mesh_indices(m, xyz_ur_plot, ijk_ur(:m % n_dimension), in_mesh) - ! sweep through all meshbins on this plane and draw borders - do i = ijk_ll(outer), ijk_ur(outer) - do j = ijk_ll(inner), ijk_ur(inner) - ! check if we're in the mesh for this ijk - if (i > 0 .and. i <= m % dimension(outer) .and. & - j > 0 .and. j <= m % dimension(inner)) then + ! sweep through all meshbins on this plane and draw borders + do i = ijk_ll(outer), ijk_ur(outer) + do j = ijk_ll(inner), ijk_ur(inner) + ! check if we're in the mesh for this ijk + if (i > 0 .and. i <= m % dimension(outer) .and. & + j > 0 .and. j <= m % dimension(inner)) then - ! get xyz's of lower left and upper right of this mesh cell - xyz_ll(outer) = m % lower_left(outer) + m % width(outer) * (i - 1) - xyz_ll(inner) = m % lower_left(inner) + m % width(inner) * (j - 1) - xyz_ur(outer) = m % lower_left(outer) + m % width(outer) * i - xyz_ur(inner) = m % lower_left(inner) + m % width(inner) * j + ! get xyz's of lower left and upper right of this mesh cell + xyz_ll(outer) = m % lower_left(outer) + m % width(outer) * (i - 1) + xyz_ll(inner) = m % lower_left(inner) + m % width(inner) * (j - 1) + xyz_ur(outer) = m % lower_left(outer) + m % width(outer) * i + xyz_ur(inner) = m % lower_left(inner) + m % width(inner) * j - ! map the xyz ranges to pixel ranges + ! map the xyz ranges to pixel ranges - frac = (xyz_ll(outer) - xyz_ll_plot(outer)) / width(outer) - outrange(1) = int(frac * real(img % width, 8)) - frac = (xyz_ur(outer) - xyz_ll_plot(outer)) / width(outer) - outrange(2) = int(frac * real(img % width, 8)) + frac = (xyz_ll(outer) - xyz_ll_plot(outer)) / width(outer) + outrange(1) = int(frac * real(pl % pixels(1), 8)) + frac = (xyz_ur(outer) - xyz_ll_plot(outer)) / width(outer) + outrange(2) = int(frac * real(pl % pixels(1), 8)) - frac = (xyz_ur(inner) - xyz_ll_plot(inner)) / width(inner) - inrange(1) = int((ONE - frac) * real(img % height, 8)) - frac = (xyz_ll(inner) - xyz_ll_plot(inner)) / width(inner) - inrange(2) = int((ONE - frac) * real(img % height, 8)) + frac = (xyz_ur(inner) - xyz_ll_plot(inner)) / width(inner) + inrange(1) = int((ONE - frac) * real(pl % pixels(2), 8)) + frac = (xyz_ll(inner) - xyz_ll_plot(inner)) / width(inner) + inrange(2) = int((ONE - frac) * real(pl % pixels(2), 8)) - ! draw lines - do out_ = outrange(1), outrange(2) - do plus = 0, pl % meshlines_width - call set_pixel(img, out_, inrange(1) + plus, r, g, b) - call set_pixel(img, out_, inrange(2) + plus, r, g, b) - call set_pixel(img, out_, inrange(1) - plus, r, g, b) - call set_pixel(img, out_, inrange(2) - plus, r, g, b) + ! draw lines + do out_ = outrange(1), outrange(2) + do plus = 0, pl % meshlines_width + data(:, out_ + 1, inrange(1) + plus + 1) = rgb + data(:, out_ + 1, inrange(2) + plus + 1) = rgb + data(:, out_ + 1, inrange(1) - plus + 1) = rgb + data(:, out_ + 1, inrange(2) - plus + 1) = rgb + end do end do - end do - do in_ = inrange(1), inrange(2) - do plus = 0, pl % meshlines_width - call set_pixel(img, outrange(1) + plus, in_, r, g, b) - call set_pixel(img, outrange(2) + plus, in_, r, g, b) - call set_pixel(img, outrange(1) - plus, in_, r, g, b) - call set_pixel(img, outrange(2) - plus, in_, r, g, b) + do in_ = inrange(1), inrange(2) + do plus = 0, pl % meshlines_width + data(:, outrange(1) + plus + 1, in_ + 1) = rgb + data(:, outrange(2) + plus + 1, in_ + 1) = rgb + data(:, outrange(1) - plus + 1, in_ + 1) = rgb + data(:, outrange(2) - plus + 1, in_ + 1) = rgb + end do end do - end do - end if + end if + end do end do - end do + end associate end subroutine draw_mesh_lines @@ -302,13 +296,12 @@ contains ! OUTPUT_PPM writes out a previously generated image to a PPM file !=============================================================================== - subroutine output_ppm(pl, img) + subroutine output_ppm(pl, data) + type(ObjectPlot), intent(in) :: pl + integer, intent(in) :: data(:,:,:) - type(ObjectPlot), pointer :: pl - type(Image), intent(in) :: img - - integer :: i ! loop index for height - integer :: j ! loop index for width + integer :: y ! loop index for height + integer :: x ! loop index for width integer :: unit_plot ! Open PPM file for writing @@ -316,24 +309,23 @@ contains ! Write header write(unit_plot, '(A2)') 'P6' - write(unit_plot, '(I0,'' '',I0)') img%width, img%height + write(unit_plot, '(I0,'' '',I0)') pl % pixels(1), pl % pixels(2) write(unit_plot, '(A)') '255' ! Write color for each pixel - do j = 1, img % height - do i = 1, img % width - write(unit_plot, '(3A1)', advance='no') achar(img%red(i,j)), & - achar(img%green(i,j)), achar(img%blue(i,j)) + do y = 1, pl % pixels(2) + do x = 1, pl % pixels(1) + write(unit_plot, '(3A1)', advance='no') achar(data(RED, x, y)), & + achar(data(GREEN, x, y)), achar(data(BLUE, x, y)) end do end do ! Close plot file close(UNIT=unit_plot) - end subroutine output_ppm !=============================================================================== -! CREATE_3D_DUMP outputs a binary file that can be input into silomesh for 3D +! CREATE_VOXEL outputs a binary file that can be input into silomesh for 3D ! geometry visualization. It works the same way as create_ppm by dragging a ! particle across the geometry for the specified number of voxels. The first ! 3 int(4)'s in the binary are the number of x, y, and z voxels. The next 3 @@ -344,9 +336,8 @@ contains ! id. For 1 million voxels this produces a file of approximately 15MB. !=============================================================================== - subroutine create_3d_dump(pl) - - type(ObjectPlot), pointer :: pl + subroutine create_voxel(pl) + type(ObjectPlot), intent(in) :: pl integer :: x, y, z ! voxel location indices integer :: rgb(3) ! colors (red, green, blue) from 0-255 @@ -355,7 +346,7 @@ contains integer, target :: data(pl%pixels(3),pl%pixels(2)) integer(HID_T) :: file_id integer(HID_T) :: dspace - integeR(HID_T) :: memspace + integer(HID_T) :: memspace integer(HID_T) :: dset integer(HSIZE_T) :: dims(3) integer(HSIZE_T) :: dims_slab(3) @@ -381,11 +372,20 @@ contains ! Open binary plot file for writing file_id = file_create(pl%path_plot) - ! write plot header info - call write_dataset(file_id, "filetype", 'voxel') - call write_dataset(file_id, "num_voxels", pl%pixels) - call write_dataset(file_id, "voxel_width", vox) - call write_dataset(file_id, "lower_left", ll) + ! write header info + call write_attribute(file_id, "filetype", 'voxel') + call write_attribute(file_id, "version", VERSION_VOXEL) + call write_attribute(file_id, "openmc_version", VERSION) +#ifdef GIT_SHA1 + call write_attribute(file_id, "git_sha1", GIT_SHA1) +#endif + + ! Write current date and time + call write_attribute(file_id, "date_and_time", time_stamp()) + + call write_attribute(file_id, "num_voxels", pl%pixels) + call write_attribute(file_id, "voxel_width", vox) + call write_attribute(file_id, "lower_left", ll) ! Create dataset for voxel data -- note that the dimensions are reversed ! since we want the order in the file to be z, y, x @@ -443,6 +443,6 @@ contains call h5sclose_f(memspace, hdf5_err) call file_close(file_id) - end subroutine create_3d_dump + end subroutine create_voxel end module plot diff --git a/src/ppmlib.F90 b/src/ppmlib.F90 deleted file mode 100644 index ebd8105be..000000000 --- a/src/ppmlib.F90 +++ /dev/null @@ -1,127 +0,0 @@ -module ppmlib - - implicit none - -!=============================================================================== -! Image holds RGB information for output PPM image -!=============================================================================== - - type Image - integer, dimension(:,:), pointer :: red, green, blue - integer :: width, height - end type Image - -contains - -!=============================================================================== -! INIT_IMAGE initializes the Image derived type -!=============================================================================== - - subroutine init_image(img) - - type(Image), intent(out) :: img - - nullify(img % red) - nullify(img % green) - nullify(img % blue) - - img % width = 0 - img % height = 0 - - end subroutine init_image - -!=============================================================================== -! ALLOCATE_IMAGE sets the width and height of an image and allocates color -! arrays -!=============================================================================== - - subroutine allocate_image(img, w, h) - - type(Image), intent(inout) :: img - integer, intent(in) :: w ! width of image - integer, intent(in) :: h ! height of image - - ! allocate red, green, and blue array - allocate(img % red(w, h)) - allocate(img % green(w, h)) - allocate(img % blue(w, h)) - - ! set width and height - img % width = w - img % height = h - - end subroutine allocate_image - -!=============================================================================== -! DEALLOCATE_IMAGE -!=============================================================================== - - subroutine deallocate_image(img) - - type(Image) :: img - - if (associated(img % red)) deallocate(img % red) - if (associated(img % green)) deallocate(img % green) - if (associated(img % blue)) deallocate(img % blue) - - end subroutine deallocate_image - -!=============================================================================== -! INSIDE_IMAGE determines whether a point (x,y) is inside the image -!=============================================================================== - - - function inside_image(img, x, y) result(inside) - - type(Image), intent(in) :: img - integer, intent(in) :: x, y - logical :: inside - - inside = .false. - - if ((x < img % width) .and. (y < img % height) .and. & - (x >= 0) .and. (y >= 0)) inside = .true. - - end function inside_image - -!=============================================================================== -! VALID_IMAGE checks whether the image has a width and height and if its color -! arrays are allocated -!=============================================================================== - - function valid_image(img) result(valid) - - type(Image), intent(in) :: img - logical :: valid - - valid = .false. - - if (img % width == 0) return - if (img % height == 0) return - if (.not. associated(img % red) .or. & - .not. associated(img % green) .or. & - .not. associated(img % blue)) return - - valid = .true. - - end function valid_image - -!=============================================================================== -! SET_PIXEL sets the colors for a given pixel -!=============================================================================== - - subroutine set_pixel(img, x, y, r, g, b) - - type(Image), intent(inout) :: img - integer, intent(in) :: x, y ! coordinates - integer, intent(in) :: r, g, b ! red, green, and blue - - if (inside_image(img, x, y) .and. valid_image(img)) then - img % red(x+1,y+1) = mod(abs(r), 256) - img % green(x+1, y+1) = mod(abs(g), 256) - img % blue(x+1, y+1) = mod(abs(b), 256) - end if - - end subroutine set_pixel - -end module ppmlib diff --git a/src/ppmlib.LICENSE b/src/ppmlib.LICENSE deleted file mode 100644 index a733e8d3e..000000000 --- a/src/ppmlib.LICENSE +++ /dev/null @@ -1,4 +0,0 @@ -The source code in ppmlib.F90 is adapted from code found on Rosetta Code - which was authored -by Mauro Panigada. The authors of OpenMC have obtained permission from Mauro -Panigada to use and distribution this source code as part of OpenMC. diff --git a/src/relaxng/geometry.rnc b/src/relaxng/geometry.rnc index 49b90e4e5..c9c53f6d6 100644 --- a/src/relaxng/geometry.rnc +++ b/src/relaxng/geometry.rnc @@ -6,8 +6,8 @@ element geometry { (element universe { xsd:int } | attribute universe { xsd:int })? & ( (element fill { xsd:int } | attribute fill { xsd:int }) | - (element material { ( xsd:int | "void" )+ } | - attribute material { ( xsd:int | "void" )+ }) + (element material { list { ( xsd:int | "void" )+ } } | + attribute material { list { ( xsd:int | "void" )+ } }) ) & (element temperature { list { xsd:double+ } } | attribute temperature { list { xsd:double+ } } )? & diff --git a/src/relaxng/geometry.rng b/src/relaxng/geometry.rng index 4a4fa30eb..d2c1f635e 100644 --- a/src/relaxng/geometry.rng +++ b/src/relaxng/geometry.rng @@ -47,20 +47,24 @@ - - - - void - - + + + + + void + + + - - - - void - - + + + + + void + + + diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index 62d9451c3..1cac11e54 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -1,29 +1,7 @@ element settings { - element confidence_intervals { xsd:boolean }? & + element batches { xsd:positiveInteger }? & - ( - element eigenvalue { - (element batches { xsd:positiveInteger } | - attribute batches { xsd:positiveInteger }) & - (element inactive { xsd:nonNegativeInteger } | - attribute inactive { xsd:nonNegativeInteger }) & - (element particles { xsd:positiveInteger } | - attribute particles { xsd:positiveInteger }) & - (element generations_per_batch { xsd:positiveInteger } | - attribute generations_per_batch { xsd:positiveInteger })? & - (element keff_trigger { - (element type { xsd:string } | attribute type { xsd:string }) & - (element threshold { xsd:double} | attribute threshold { xsd:double }) - } - )? - } | - element fixed_source { - (element batches { xsd:positiveInteger } | - attribute batches { xsd:positiveInteger }) & - (element particles { xsd:positiveInteger } | - attribute particles { xsd:positiveInteger }) - } - ) & + element confidence_intervals { xsd:boolean }? & element cutoff { (element weight { xsd:double } | attribute weight { xsd:double })? & @@ -43,12 +21,19 @@ element settings { attribute upper_right { list { xsd:double+ } }) }? & + element generations_per_batch { xsd:positiveInteger }? & + + element inactive { xsd:nonNegativeInteger }? & + + element keff_trigger { + (element type { xsd:string } | attribute type { xsd:string }) & + (element threshold { xsd:double} | attribute threshold { xsd:double }) + }? & + element log_grid_bins { xsd:positiveInteger }? & element max_order { xsd:nonNegativeInteger }? & - element natural_elements { xsd:string { maxLength = "20" } }? & - element no_reduce { xsd:boolean }? & element output { @@ -60,10 +45,14 @@ element settings { element output_path { xsd:string { maxLength = "255" } }? & + element particles { xsd:positiveInteger }? & + element ptables { xsd:boolean }? & element run_cmfd { xsd:boolean }? & + element run_mode { xsd:string }? & + element seed { xsd:positiveInteger }? & element source { @@ -179,5 +168,5 @@ element settings { (element E_max { xsd:double } | attribute E_max { xsd:double })? }* - }? & + }? } diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng index cbeac25a5..8db4efcbc 100644 --- a/src/relaxng/settings.rng +++ b/src/relaxng/settings.rng @@ -1,107 +1,16 @@ + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 255 - - - - - - - 255 - - - @@ -208,6 +117,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -218,13 +159,6 @@ - - - - 20 - - - @@ -273,6 +207,11 @@ + + + + + @@ -283,6 +222,11 @@ + + + + + diff --git a/src/state_point.F90 b/src/state_point.F90 index 257753b5b..f3b452953 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -16,7 +16,6 @@ module state_point use hdf5 use constants - use dict_header, only: ElemKeyValueII, ElemKeyValueCI use endf, only: reaction_name use error, only: fatal_error, warning use global @@ -43,17 +42,13 @@ contains integer :: n_order ! loop index for moment orders integer :: nm_order ! loop index for Ynm moment orders integer, allocatable :: id_array(:) - integer, allocatable :: key_array(:) integer(HID_T) :: file_id integer(HID_T) :: cmfd_group, tallies_group, tally_group, meshes_group, & mesh_group, filter_group, derivs_group, deriv_group, & runtime_group character(MAX_WORD_LEN), allocatable :: str_array(:) character(MAX_FILE_LEN) :: filename - type(RegularMesh), pointer :: meshp type(TallyObject), pointer :: tally - type(ElemKeyValueII), pointer :: current - type(ElemKeyValueII), pointer :: next ! Set filename for state point filename = trim(path_output) // 'statepoint.' // & @@ -68,36 +63,37 @@ contains file_id = file_create(filename) ! Write file type - call write_dataset(file_id, "filetype", 'statepoint') + call write_attribute(file_id, "filetype", "statepoint") ! Write revision number for state point file - call write_dataset(file_id, "revision", REVISION_STATEPOINT) + call write_attribute(file_id, "version", VERSION_STATEPOINT) ! Write OpenMC version - call write_dataset(file_id, "version_major", VERSION_MAJOR) - call write_dataset(file_id, "version_minor", VERSION_MINOR) - call write_dataset(file_id, "version_release", VERSION_RELEASE) + call write_attribute(file_id, "openmc_version", VERSION) +#ifdef GIT_SHA1 + call write_attribute(file_id, "git_sha1", GIT_SHA1) +#endif ! Write current date and time - call write_dataset(file_id, "date_and_time", time_stamp()) + call write_attribute(file_id, "date_and_time", time_stamp()) ! Write path to input - call write_dataset(file_id, "path", path_input) + call write_attribute(file_id, "path", path_input) ! Write out random number seed call write_dataset(file_id, "seed", seed) ! Write run information if (run_CE) then - call write_dataset(file_id, "run_CE", 1) + call write_dataset(file_id, "energy_mode", "continuous-energy") else - call write_dataset(file_id, "run_CE", 0) + call write_dataset(file_id, "energy_mode", "multi-group") end if select case(run_mode) case (MODE_FIXEDSOURCE) call write_dataset(file_id, "run_mode", "fixed source") case (MODE_EIGENVALUE) - call write_dataset(file_id, "run_mode", "k-eigenvalue") + call write_dataset(file_id, "run_mode", "eigenvalue") end select call write_dataset(file_id, "n_particles", n_particles) call write_dataset(file_id, "n_batches", n_batches) @@ -107,15 +103,15 @@ contains ! Indicate whether source bank is stored in statepoint if (source_separate) then - call write_dataset(file_id, "source_present", 0) + call write_attribute(file_id, "source_present", 0) else - call write_dataset(file_id, "source_present", 1) + call write_attribute(file_id, "source_present", 1) end if ! Write out information for eigenvalue run if (run_mode == MODE_EIGENVALUE) then call write_dataset(file_id, "n_inactive", n_inactive) - call write_dataset(file_id, "gen_per_batch", gen_per_batch) + call write_dataset(file_id, "generations_per_batch", gen_per_batch) call write_dataset(file_id, "k_generation", k_generation) call write_dataset(file_id, "entropy", entropy) call write_dataset(file_id, "k_col_abs", k_col_abs) @@ -125,7 +121,7 @@ contains ! Write out CMFD info if (cmfd_on) then - call write_dataset(file_id, "cmfd_on", 1) + call write_attribute(file_id, "cmfd_on", 1) cmfd_group = create_group(file_id, "cmfd") call write_dataset(cmfd_group, "indices", cmfd % indices) @@ -137,7 +133,7 @@ contains call write_dataset(cmfd_group, "cmfd_srccmp", cmfd % src_cmp) call close_group(cmfd_group) else - call write_dataset(file_id, "cmfd_on", 0) + call write_attribute(file_id, "cmfd_on", 0) end if end if @@ -145,52 +141,35 @@ contains ! Write number of meshes meshes_group = create_group(tallies_group, "meshes") - call write_dataset(meshes_group, "n_meshes", n_meshes) + call write_attribute(meshes_group, "n_meshes", n_meshes) if (n_meshes > 0) then - - ! Print list of mesh IDs - current => mesh_dict % keys() - + ! Write IDs of meshes allocate(id_array(n_meshes)) - allocate(key_array(n_meshes)) - i = 1 - - do while (associated(current)) - key_array(i) = current % key - id_array(i) = current % value - - ! Move to next mesh - next => current % next - deallocate(current) - current => next - i = i + 1 + do i = 1, n_meshes + id_array(i) = meshes(i) % id end do - - call write_dataset(meshes_group, "ids", id_array) - call write_dataset(meshes_group, "keys", key_array) - - deallocate(key_array) + call write_attribute(meshes_group, "ids", id_array) + deallocate(id_array) ! Write information for meshes MESH_LOOP: do i = 1, n_meshes - meshp => meshes(id_array(i)) - mesh_group = create_group(meshes_group, "mesh " & - // trim(to_str(meshp % id))) + associate (m => meshes(i)) + mesh_group = create_group(meshes_group, "mesh " & + // trim(to_str(m % id))) - select case (meshp % type) - case (MESH_REGULAR) - call write_dataset(mesh_group, "type", "regular") - end select - call write_dataset(mesh_group, "dimension", meshp % dimension) - call write_dataset(mesh_group, "lower_left", meshp % lower_left) - call write_dataset(mesh_group, "upper_right", meshp % upper_right) - call write_dataset(mesh_group, "width", meshp % width) + select case (m % type) + case (MESH_REGULAR) + call write_dataset(mesh_group, "type", "regular") + end select + call write_dataset(mesh_group, "dimension", m % dimension) + call write_dataset(mesh_group, "lower_left", m % lower_left) + call write_dataset(mesh_group, "upper_right", m % upper_right) + call write_dataset(mesh_group, "width", m % width) - call close_group(mesh_group) + call close_group(mesh_group) + end associate end do MESH_LOOP - - deallocate(id_array) end if call close_group(meshes_group) @@ -228,25 +207,16 @@ contains end if ! Write number of tallies - call write_dataset(tallies_group, "n_tallies", n_tallies) + call write_attribute(tallies_group, "n_tallies", n_tallies) if (n_tallies > 0) then - - ! Print list of tally IDs + ! Write array of tally IDs allocate(id_array(n_tallies)) - allocate(key_array(n_tallies)) - - ! Write all tally information except results do i = 1, n_tallies - tally => tallies(i) - key_array(i) = tally % id - id_array(i) = i + id_array(i) = tallies(i) % id end do - - call write_dataset(tallies_group, "ids", id_array) - call write_dataset(tallies_group, "keys", key_array) - - deallocate(key_array) + call write_attribute(tallies_group, "ids", id_array) + deallocate(id_array) ! Write all tally information except results TALLY_METADATA: do i = 1, n_tallies @@ -256,6 +226,9 @@ contains tally_group = create_group(tallies_group, "tally " // & trim(to_str(tally % id))) + ! Write the name for this tally + call write_dataset(tally_group, "name", tally % name) + select case(tally % estimator) case (ESTIMATOR_ANALOG) call write_dataset(tally_group, "estimator", "analog") @@ -372,14 +345,14 @@ contains call write_dataset(file_id, "n_realizations", n_realizations) ! Write global tallies - call write_dataset(file_id, "n_global_tallies", N_GLOBAL_TALLIES) call write_dataset(file_id, "global_tallies", global_tallies) ! Write tallies - tallies_group = open_group(file_id, "tallies") if (tallies_on) then ! Indicate that tallies are on - call write_dataset(tallies_group, "tallies_present", 1) + call write_attribute(file_id, "tallies_present", 1) + + tallies_group = open_group(file_id, "tallies") ! Write all tally results TALLY_RESULTS: do i = 1, n_tallies @@ -393,12 +366,12 @@ contains call close_group(tally_group) end do TALLY_RESULTS + call close_group(tallies_group) else ! Indicate tallies are off - call write_dataset(tallies_group, "tallies_present", 0) + call write_attribute(file_id, "tallies_present", 0) end if - call close_group(tallies_group) ! Write out the runtime metrics. runtime_group = create_group(file_id, "runtime") @@ -521,10 +494,6 @@ contains #ifdef MPI real(8) :: dummy ! temporary receive buffer for non-root reduces #endif - integer, allocatable :: id_array(:) - type(ElemKeyValueII), pointer :: current - type(ElemKeyValueII), pointer :: next - type(TallyObject), pointer :: tally type(TallyObject) :: dummy_tally ! ========================================================================== @@ -570,92 +539,72 @@ contains if (tallies_on) then ! Indicate that tallies are on if (master) then - call write_dataset(tallies_group, "tallies_present", 1) - - ! Build list of tally IDs - current => tally_dict%keys() - allocate(id_array(n_tallies)) - i = 1 - - do while (associated(current)) - id_array(i) = current%value - ! Move to next tally - next => current%next - deallocate(current) - current => next - i = i + 1 - end do - + call write_attribute(file_id, "tallies_present", 1) end if ! Write all tally results TALLY_RESULTS: do i = 1, n_tallies + associate (t => tallies(i)) + ! Determine size of tally results array + m = size(t % results, 2) + n = size(t % results, 3) + n_bins = m*n*2 - tally => tallies(i) + ! Allocate array for storing sums and sums of squares, but + ! contiguously in memory for each + allocate(tally_temp(2,m,n)) + tally_temp(1,:,:) = t % results(RESULT_SUM,:,:) + tally_temp(2,:,:) = t % results(RESULT_SUM_SQ,:,:) - ! Determine size of tally results array - m = size(tally%results, 2) - n = size(tally%results, 3) - n_bins = m*n*2 + if (master) then + tally_group = open_group(tallies_group, "tally " // & + trim(to_str(t % id))) - ! Allocate array for storing sums and sums of squares, but - ! contiguously in memory for each - allocate(tally_temp(2,m,n)) - tally_temp(1,:,:) = tally%results(RESULT_SUM,:,:) - tally_temp(2,:,:) = tally%results(RESULT_SUM_SQ,:,:) - - if (master) then - tally_group = open_group(tallies_group, "tally " // & - trim(to_str(tally%id))) - - ! The MPI_IN_PLACE specifier allows the master to copy values into - ! a receive buffer without having a temporary variable + ! The MPI_IN_PLACE specifier allows the master to copy values into + ! a receive buffer without having a temporary variable #ifdef MPI - call MPI_REDUCE(MPI_IN_PLACE, tally_temp, n_bins, MPI_REAL8, & - MPI_SUM, 0, mpi_intracomm, mpi_err) + call MPI_REDUCE(MPI_IN_PLACE, tally_temp, n_bins, MPI_REAL8, & + MPI_SUM, 0, mpi_intracomm, mpi_err) #endif - ! At the end of the simulation, store the results back in the - ! regular TallyResults array - if (current_batch == n_max_batches .or. satisfy_triggers) then - tally%results(RESULT_SUM,:,:) = tally_temp(1,:,:) - tally%results(RESULT_SUM_SQ,:,:) = tally_temp(2,:,:) + ! At the end of the simulation, store the results back in the + ! regular TallyResults array + if (current_batch == n_max_batches .or. satisfy_triggers) then + t % results(RESULT_SUM,:,:) = tally_temp(1,:,:) + t % results(RESULT_SUM_SQ,:,:) = tally_temp(2,:,:) + end if + + ! Put in temporary tally result + allocate(dummy_tally % results(3,m,n)) + dummy_tally % results(RESULT_SUM,:,:) = tally_temp(1,:,:) + dummy_tally % results(RESULT_SUM_SQ,:,:) = tally_temp(2,:,:) + + ! Write reduced tally results to file + call dummy_tally % write_results_hdf5(tally_group) + + ! Deallocate temporary tally result + deallocate(dummy_tally % results) + else + ! Receive buffer not significant at other processors +#ifdef MPI + call MPI_REDUCE(tally_temp, dummy, n_bins, MPI_REAL8, MPI_SUM, & + 0, mpi_intracomm, mpi_err) +#endif end if - ! Put in temporary tally result - allocate(dummy_tally % results(3,m,n)) - dummy_tally % results(RESULT_SUM,:,:) = tally_temp(1,:,:) - dummy_tally % results(RESULT_SUM_SQ,:,:) = tally_temp(2,:,:) + ! Deallocate temporary copy of tally results + deallocate(tally_temp) - ! Write reduced tally results to file - call dummy_tally % write_results_hdf5(tally_group) - - ! Deallocate temporary tally result - deallocate(dummy_tally % results) - else - ! Receive buffer not significant at other processors -#ifdef MPI - call MPI_REDUCE(tally_temp, dummy, n_bins, MPI_REAL8, MPI_SUM, & - 0, mpi_intracomm, mpi_err) -#endif - end if - - ! Deallocate temporary copy of tally results - deallocate(tally_temp) - - if (master) call close_group(tally_group) + if (master) call close_group(tally_group) + end associate end do TALLY_RESULTS - deallocate(id_array) - + if (master) call close_group(tallies_group) else - if (master) then - ! Indicate that tallies are off - call write_dataset(tallies_group, "tallies_present", 0) - end if + ! Indicate that tallies are off + if (master) call write_dataset(file_id, "tallies_present", 0) end if - if (master) call close_group(tallies_group) end subroutine write_tally_results_nr @@ -667,15 +616,14 @@ contains integer :: i integer :: int_array(3) + integer, allocatable :: array(:) integer(HID_T) :: file_id integer(HID_T) :: cmfd_group integer(HID_T) :: tallies_group integer(HID_T) :: tally_group real(8) :: real_array(3) logical :: source_present - integer :: sp_run_CE character(MAX_WORD_LEN) :: word - type(TallyObject), pointer :: tally ! Write message call write_message("Loading state point " // trim(path_state_point) & @@ -685,15 +633,15 @@ contains file_id = file_open(path_state_point, 'r', parallel=.true.) ! Read filetype - call read_dataset(word, file_id, "filetype") + call read_attribute(word, file_id, "filetype") if (word /= 'statepoint') then call fatal_error("OpenMC tried to restart from a non-statepoint file.") end if ! Read revision number for state point file and make sure it matches with ! current version - call read_dataset(int_array(1), file_id, "revision") - if (int_array(1) /= REVISION_STATEPOINT) then + call read_attribute(array, file_id, "version") + if (any(array /= VERSION_STATEPOINT)) then call fatal_error("State point version does not match current version & &in OpenMC.") end if @@ -703,11 +651,11 @@ contains ! It is not impossible for a state point to be generated from a CE run but ! to be loaded in to an MG run (or vice versa), check to prevent that. - call read_dataset(sp_run_CE, file_id, "run_CE") - if (sp_run_CE == 0 .and. run_CE) then + call read_dataset(word, file_id, "energy_mode") + if (word == "multi-group" .and. run_CE) then call fatal_error("State point file is from multi-group run but & & current run is continous-energy!") - else if (sp_run_CE == 1 .and. .not. run_CE) then + else if (word == "continuous-energy" .and. .not. run_CE) then call fatal_error("State point file is from continuous-energy run but & & current run is multi-group!") end if @@ -717,7 +665,7 @@ contains select case(word) case ('fixed source') run_mode = MODE_FIXEDSOURCE - case ('k-eigenvalue') + case ('eigenvalue') run_mode = MODE_EIGENVALUE end select call read_dataset(n_particles, file_id, "n_particles") @@ -730,7 +678,7 @@ contains call read_dataset(restart_batch, file_id, "current_batch") ! Check for source in statepoint if needed - call read_dataset(int_array(1), file_id, "source_present") + call read_attribute(int_array(1), file_id, "source_present") if (int_array(1) == 1) then source_present = .true. else @@ -745,7 +693,7 @@ contains ! Read information specific to eigenvalue run if (run_mode == MODE_EIGENVALUE) then call read_dataset(int_array(1), file_id, "n_inactive") - call read_dataset(gen_per_batch, file_id, "gen_per_batch") + call read_dataset(gen_per_batch, file_id, "generations_per_batch") call read_dataset(k_generation(1:restart_batch*gen_per_batch), & file_id, "k_generation") call read_dataset(entropy(1:restart_batch*gen_per_batch), & @@ -759,7 +707,7 @@ contains n_inactive = max(n_inactive, int_array(1)) ! Read in to see if CMFD was on - call read_dataset(int_array(1), file_id, "cmfd_on") + call read_attribute(int_array(1), file_id, "cmfd_on") ! Read in CMFD info if (int_array(1) == 1) then @@ -800,30 +748,28 @@ contains call read_dataset(global_tallies, file_id, "global_tallies") ! Check if tally results are present - tallies_group = open_group(file_id, "tallies") - call read_dataset(int_array(1), tallies_group, "tallies_present", & - indep=.true.) + call read_attribute(int_array(1), file_id, "tallies_present") ! Read in sum and sum squared if (int_array(1) == 1) then + tallies_group = open_group(file_id, "tallies") + TALLY_RESULTS: do i = 1, n_tallies - ! Set pointer to tally - tally => tallies(i) - - ! Read sum, sum_sq, and N for each bin - tally_group = open_group(tallies_group, "tally " // & - trim(to_str(tally % id))) - call tally % read_results_hdf5(tally_group) - call read_dataset(tally % n_realizations, tally_group, & - "n_realizations") - call close_group(tally_group) + associate (t => tallies(i)) + ! Read sum, sum_sq, and N for each bin + tally_group = open_group(tallies_group, "tally " // & + trim(to_str(t % id))) + call t % read_results_hdf5(tally_group) + call read_dataset(t % n_realizations, tally_group, & + "n_realizations") + call close_group(tally_group) + end associate end do TALLY_RESULTS + + call close_group(tallies_group) end if - - call close_group(tallies_group) end if - ! Read source if in eigenvalue mode if (run_mode == MODE_EIGENVALUE) then diff --git a/src/summary.F90 b/src/summary.F90 index 78a8276f1..278127308 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -1,5 +1,7 @@ module summary + use hdf5 + use constants use endf, only: reaction_name use geometry_header, only: BASE_UNIVERSE, Cell, Universe, Lattice, & @@ -16,8 +18,6 @@ module summary use tally_header, only: TallyObject use tally_filter, only: find_offset - use hdf5 - implicit none private @@ -36,45 +36,10 @@ contains ! Create a new file using default properties. file_id = file_create("summary.h5") - ! Write header information call write_header(file_id) - - if (run_CE) then - call write_dataset(file_id, "run_CE", 1) - else - call write_dataset(file_id, "run_CE", 0) - end if - - ! Write number of particles - call write_dataset(file_id, "n_particles", n_particles) - call write_dataset(file_id, "n_batches", n_batches) - call write_attribute_string(file_id, "n_particles", & - "description", "Number of particles per generation") - call write_attribute_string(file_id, "n_batches", & - "description", "Total number of batches") - - ! Write eigenvalue information - if (run_mode == MODE_EIGENVALUE) then - ! write number of inactive/active batches and generations/batch - call write_dataset(file_id, "n_inactive", n_inactive) - call write_dataset(file_id, "n_active", n_active) - call write_dataset(file_id, "gen_per_batch", gen_per_batch) - - ! Add description of each variable - call write_attribute_string(file_id, "n_inactive", & - "description", "Number of inactive batches") - call write_attribute_string(file_id, "n_active", & - "description", "Number of active batches") - call write_attribute_string(file_id, "gen_per_batch", & - "description", "Number of generations per batch") - end if - call write_nuclides(file_id) call write_geometry(file_id) call write_materials(file_id) - if (n_tallies > 0) then - call write_tallies(file_id) - end if ! Terminate access to the file. call file_close(file_id) @@ -88,22 +53,16 @@ contains subroutine write_header(file_id) integer(HID_T), intent(in) :: file_id - ! Write filetype and revision - call write_dataset(file_id, "filetype", "summary") - call write_dataset(file_id, "revision", REVISION_SUMMARY) - - ! Write version information - call write_dataset(file_id, "version_major", VERSION_MAJOR) - call write_dataset(file_id, "version_minor", VERSION_MINOR) - call write_dataset(file_id, "version_release", VERSION_RELEASE) + ! Write filetype and version info + call write_attribute(file_id, "filetype", "summary") + call write_attribute(file_id, "version", VERSION_SUMMARY) + call write_attribute(file_id, "openmc_version", VERSION) +#ifdef GIT_SHA1 + call write_attribute(file_id, "git_sha1", GIT_SHA1) +#endif ! Write current date and time - call write_dataset(file_id, "date_and_time", time_stamp()) - - ! Write MPI information - call write_dataset(file_id, "n_procs", n_procs) - call write_attribute_string(file_id, "n_procs", "description", & - "Number of MPI processes") + call write_attribute(file_id, "date_and_time", time_stamp()) end subroutine write_header @@ -120,7 +79,7 @@ contains ! Write useful data from nuclide objects nuclide_group = create_group(file_id, "nuclides") - call write_dataset(nuclide_group, "n_nuclides_total", n_nuclides_total) + call write_attribute(nuclide_group, "n_nuclides", n_nuclides_total) ! Build array of nuclide names and awrs allocate(nucnames(n_nuclides_total)) @@ -152,9 +111,10 @@ contains subroutine write_geometry(file_id) integer(HID_T), intent(in) :: file_id - integer :: i, j, k, m, offset + integer :: i, j, k, m, offset integer, allocatable :: lattice_universes(:,:,:) integer, allocatable :: cell_materials(:) + integer, allocatable :: cell_ids(:) real(8), allocatable :: cell_temperatures(:) integer(HID_T) :: geom_group integer(HID_T) :: cells_group, cell_group @@ -172,10 +132,10 @@ contains ! Use H5LT interface to write number of geometry objects geom_group = create_group(file_id, "geometry") - call write_dataset(geom_group, "n_cells", n_cells) - call write_dataset(geom_group, "n_surfaces", n_surfaces) - call write_dataset(geom_group, "n_universes", n_universes) - call write_dataset(geom_group, "n_lattices", n_lattices) + call write_attribute(geom_group, "n_cells", n_cells) + call write_attribute(geom_group, "n_surfaces", n_surfaces) + call write_attribute(geom_group, "n_universes", n_universes) + call write_attribute(geom_group, "n_lattices", n_lattices) ! ========================================================================== ! WRITE INFORMATION ON CELLS @@ -188,9 +148,6 @@ contains c => cells(i) cell_group = create_group(cells_group, "cell " // trim(to_str(c%id))) - ! Write internal OpenMC index for this cell - call write_dataset(cell_group, "index", i) - ! Write name for this cell call write_dataset(cell_group, "name", c%name) @@ -199,8 +156,8 @@ contains ! Write information on what fills this cell select case (c%type) - case (CELL_NORMAL) - call write_dataset(cell_group, "fill_type", "normal") + case (FILL_MATERIAL) + call write_dataset(cell_group, "fill_type", "material") if (size(c % material) == 1) then if (c % material(1) == MATERIAL_VOID) then @@ -228,7 +185,7 @@ contains call write_dataset(cell_group, "temperature", cell_temperatures) deallocate(cell_temperatures) - case (CELL_FILL) + case (FILL_UNIVERSE) call write_dataset(cell_group, "fill_type", "universe") call write_dataset(cell_group, "fill", universes(c%fill)%id) if (allocated(c%offset)) then @@ -244,7 +201,7 @@ contains call write_dataset(cell_group, "rotation", c%rotation) end if - case (CELL_LATTICE) + case (FILL_LATTICE) call write_dataset(cell_group, "fill_type", "lattice") call write_dataset(cell_group, "lattice", lattices(c%fill)%obj%id) end select @@ -303,9 +260,6 @@ contains surface_group = create_group(surfaces_group, "surface " // & trim(to_str(s%id))) - ! Write internal OpenMC index for this surface - call write_dataset(surface_group, "index", i) - ! Write name for this surface call write_dataset(surface_group, "name", s%name) @@ -375,16 +329,16 @@ contains call write_dataset(surface_group, "coefficients", coeffs) deallocate(coeffs) - ! Write boundary condition + ! Write boundary type select case (s%bc) case (BC_TRANSMIT) - call write_dataset(surface_group, "boundary_condition", "transmission") + call write_dataset(surface_group, "boundary_type", "transmission") case (BC_VACUUM) - call write_dataset(surface_group, "boundary_condition", "vacuum") + call write_dataset(surface_group, "boundary_type", "vacuum") case (BC_REFLECT) - call write_dataset(surface_group, "boundary_condition", "reflective") + call write_dataset(surface_group, "boundary_type", "reflective") case (BC_PERIODIC) - call write_dataset(surface_group, "boundary_condition", "periodic") + call write_dataset(surface_group, "boundary_type", "periodic") end select call close_group(surface_group) @@ -404,11 +358,15 @@ contains univ_group = create_group(universes_group, "universe " // & trim(to_str(u%id))) - ! Write internal OpenMC index for this universe - call write_dataset(univ_group, "index", i) - ! Write list of cells in this universe - if (u%n_cells > 0) call write_dataset(univ_group, "cells", u%cells) + if (u % n_cells > 0) then + allocate(cell_ids(u % n_cells)) + do j = 1, u % n_cells + cell_ids(j) = cells(u % cells(j)) % id + end do + call write_dataset(univ_group, "cells", cell_ids) + deallocate(cell_ids) + end if call close_group(univ_group) end do UNIVERSE_LOOP @@ -426,13 +384,14 @@ contains lat => lattices(i)%obj lattice_group = create_group(lattices_group, "lattice " // trim(to_str(lat%id))) - ! Write internal OpenMC index for this lattice - call write_dataset(lattice_group, "index", i) - ! Write name, pitch, and outer universe call write_dataset(lattice_group, "name", lat%name) call write_dataset(lattice_group, "pitch", lat%pitch) - call write_dataset(lattice_group, "outer", lat%outer) + if (lat % outer > 0) then + call write_dataset(lattice_group, "outer", universes(lat % outer) % id) + else + call write_dataset(lattice_group, "outer", lat % outer) + end if ! Write distribcell offsets if present if (allocated(lat%offset)) then @@ -542,16 +501,11 @@ contains call write_attribute(material_group, "depletable", 0) end if - ! Write internal OpenMC index for this material - call write_dataset(material_group, "index", i) - ! Write name for this material call write_dataset(material_group, "name", m % name) ! Write atom density with units call write_dataset(material_group, "atom_density", m % density) - call write_attribute_string(material_group, "atom_density", "units", & - "atom/b-cm") ! Copy ZAID for each nuclide to temporary array allocate(nucnames(m%n_nuclides)) @@ -583,34 +537,4 @@ contains end subroutine write_materials -!=============================================================================== -! WRITE_TALLIES -!=============================================================================== - - subroutine write_tallies(file_id) - integer(HID_T), intent(in) :: file_id - - integer :: i - integer(HID_T) :: tallies_group - integer(HID_T) :: tally_group - type(TallyObject), pointer :: t - - tallies_group = create_group(file_id, "tallies") - - TALLY_METADATA: do i = 1, n_tallies - ! Get pointer to tally - t => tallies(i) - tally_group = create_group(tallies_group, "tally " & - // trim(to_str(t % id))) - - ! Write the name for this tally - call write_dataset(tally_group, "name", t % name) - - call close_group(tally_group) - end do TALLY_METADATA - - call close_group(tallies_group) - - end subroutine write_tallies - end module summary diff --git a/src/tally.F90 b/src/tally.F90 index df1b5d2d6..650e91b66 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -2027,7 +2027,7 @@ contains end do SCORE_LOOP - nullify(matxs,nucxs) + nullify(matxs, nucxs) end subroutine score_general_mg !=============================================================================== diff --git a/src/tally_filter.F90 b/src/tally_filter.F90 index 4b372defe..21fc3a472 100644 --- a/src/tally_filter.F90 +++ b/src/tally_filter.F90 @@ -501,9 +501,17 @@ contains class(UniverseFilter), intent(in) :: this integer(HID_T), intent(in) :: filter_group + integer :: i + integer, allocatable :: universe_ids(:) + call write_dataset(filter_group, "type", "universe") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % universes ) + + allocate(universe_ids(size(this % universes))) + do i = 1, size(this % universes) + universe_ids(i) = universes(this % universes(i)) % id + end do + call write_dataset(filter_group, "bins", universe_ids) end subroutine to_statepoint_universe subroutine initialize_universe(this) @@ -562,9 +570,17 @@ contains class(MaterialFilter), intent(in) :: this integer(HID_T), intent(in) :: filter_group + integer :: i + integer, allocatable :: material_ids(:) + call write_dataset(filter_group, "type", "material") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % materials ) + + allocate(material_ids(size(this % materials))) + do i = 1, size(this % materials) + material_ids(i) = materials(this % materials(i)) % id + end do + call write_dataset(filter_group, "bins", material_ids) end subroutine to_statepoint_material subroutine initialize_material(this) @@ -639,9 +655,17 @@ contains class(CellFilter), intent(in) :: this integer(HID_T), intent(in) :: filter_group + integer :: i + integer, allocatable :: cell_ids(:) + call write_dataset(filter_group, "type", "cell") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % cells ) + + allocate(cell_ids(size(this % cells))) + do i = 1, size(this % cells) + cell_ids(i) = cells(this % cells(i)) % id + end do + call write_dataset(filter_group, "bins", cell_ids) end subroutine to_statepoint_cell subroutine initialize_cell(this) @@ -692,10 +716,10 @@ contains distribcell_index = cells(this % cell) % distribcell_index offset = 0 do i = 1, p % n_coord - if (cells(p % coord(i) % cell) % type == CELL_FILL) then + if (cells(p % coord(i) % cell) % type == FILL_UNIVERSE) then offset = offset + cells(p % coord(i) % cell) % & offset(distribcell_index) - elseif (cells(p % coord(i) % cell) % type == CELL_LATTICE) then + elseif (cells(p % coord(i) % cell) % type == FILL_LATTICE) then if (lattices(p % coord(i + 1) % lattice) % obj & % are_valid_indices([& p % coord(i + 1) % lattice_x, & @@ -725,7 +749,7 @@ contains call write_dataset(filter_group, "type", "distribcell") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % cell ) + call write_dataset(filter_group, "bins", cells(this % cell) % id) end subroutine to_statepoint_distribcell subroutine initialize_distribcell(this) @@ -784,9 +808,16 @@ contains class(CellbornFilter), intent(in) :: this integer(HID_T), intent(in) :: filter_group + integer :: i + integer, allocatable :: cell_ids(:) + call write_dataset(filter_group, "type", "cellborn") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % cells ) + allocate(cell_ids(size(this % cells))) + do i = 1, size(this % cells) + cell_ids(i) = cells(this % cells(i)) % id + end do + call write_dataset(filter_group, "bins", cell_ids) end subroutine to_statepoint_cellborn subroutine initialize_cellborn(this) @@ -852,7 +883,7 @@ contains call write_dataset(filter_group, "type", "surface") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % surfaces ) + call write_dataset(filter_group, "bins", this % surfaces) end subroutine to_statepoint_surface subroutine initialize_surface(this) @@ -941,7 +972,7 @@ contains call write_dataset(filter_group, "type", "energy") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % bins ) + call write_dataset(filter_group, "bins", this % bins) end subroutine to_statepoint_energy function text_label_energy(this, bin) result(label) @@ -1006,7 +1037,7 @@ contains call write_dataset(filter_group, "type", "energyout") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % bins ) + call write_dataset(filter_group, "bins", this % bins) end subroutine to_statepoint_energyout function text_label_energyout(this, bin) result(label) @@ -1048,7 +1079,7 @@ contains call write_dataset(filter_group, "type", "delayedgroup") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % groups ) + call write_dataset(filter_group, "bins", this % groups) end subroutine to_statepoint_dg function text_label_dg(this, bin) result(label) @@ -1097,7 +1128,7 @@ contains call write_dataset(filter_group, "type", "mu") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % bins ) + call write_dataset(filter_group, "bins", this % bins) end subroutine to_statepoint_mu function text_label_mu(this, bin) result(label) @@ -1160,7 +1191,7 @@ contains call write_dataset(filter_group, "type", "polar") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % bins ) + call write_dataset(filter_group, "bins", this % bins) end subroutine to_statepoint_polar function text_label_polar(this, bin) result(label) @@ -1223,7 +1254,7 @@ contains call write_dataset(filter_group, "type", "azimuthal") call write_dataset(filter_group, "n_bins", this % n_bins) - call write_dataset(filter_group, "bins", this % bins ) + call write_dataset(filter_group, "bins", this % bins) end subroutine to_statepoint_azimuthal function text_label_azimuthal(this, bin) result(label) @@ -1390,7 +1421,7 @@ contains c => cells(cell_index) ! Skip normal cells which do not have offsets - if (c % type == CELL_NORMAL) then + if (c % type == FILL_MATERIAL) then cycle end if @@ -1399,13 +1430,13 @@ contains end do ! Ensure we didn't just end the loop by iteration - if (c % type /= CELL_NORMAL) then + if (c % type /= FILL_MATERIAL) then ! There are more cells in this universe that it could be in later_cell = .true. ! Two cases, lattice or fill cell - if (c % type == CELL_FILL) then + if (c % type == FILL_UNIVERSE) then temp_offset = c % offset(map) ! Get the offset of the first lattice location @@ -1422,7 +1453,7 @@ contains end if end if - if (n == 1 .and. c % type /= CELL_NORMAL) then + if (n == 1 .and. c % type /= FILL_MATERIAL) then this_cell = .true. end if @@ -1440,7 +1471,7 @@ contains ! ==================================================================== ! CELL CONTAINS LOWER UNIVERSE, RECURSIVELY FIND CELL - if (c % type == CELL_FILL) then + if (c % type == FILL_UNIVERSE) then ! Enter this cell to update the current offset offset = c % offset(map) + offset @@ -1451,7 +1482,7 @@ contains ! ==================================================================== ! CELL CONTAINS LATTICE, RECURSIVELY FIND CELL - elseif (c % type == CELL_LATTICE) then + elseif (c % type == FILL_LATTICE) then ! Set current lattice lat => lattices(c % fill) % obj diff --git a/src/track_output.F90 b/src/track_output.F90 index 141173862..bdef9579c 100644 --- a/src/track_output.F90 +++ b/src/track_output.F90 @@ -114,10 +114,10 @@ contains !$omp critical (FinalizeParticleTrack) file_id = file_create(fname) - call write_dataset(file_id, 'filetype', 'track') - call write_dataset(file_id, 'revision', REVISION_TRACK) - call write_dataset(file_id, 'n_particles', n_particle_tracks) - call write_dataset(file_id, 'n_coords', n_coords) + call write_attribute(file_id, 'filetype', 'track') + call write_attribute(file_id, 'version', VERSION_TRACK) + call write_attribute(file_id, 'n_particles', n_particle_tracks) + call write_attribute(file_id, 'n_coords', n_coords) do i = 1, n_particle_tracks call write_dataset(file_id, 'coordinates_' // trim(to_str(i)), & tracks(i)%coords) diff --git a/src/tracking.F90 b/src/tracking.F90 index 1b4f6b99b..a673b6751 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -105,9 +105,7 @@ contains p % coord(p % n_coord) % uvw, material_xs) else material_xs % total = ZERO - material_xs % elastic = ZERO material_xs % absorption = ZERO - material_xs % fission = ZERO material_xs % nu_fission = ZERO end if end if diff --git a/src/volume_calc.F90 b/src/volume_calc.F90 index a9584d672..5fb4cb5b4 100644 --- a/src/volume_calc.F90 +++ b/src/volume_calc.F90 @@ -9,8 +9,8 @@ module volume_calc use geometry, only: find_cell use global use hdf5_interface, only: file_create, file_close, write_attribute, & - create_group, close_group, write_dataset, write_attribute_string - use output, only: write_message, header + create_group, close_group, write_dataset + use output, only: write_message, header, time_stamp use message_passing use particle_header, only: Particle use random_lcg, only: prn, prn_set_stream, set_particle_seed @@ -426,14 +426,25 @@ contains ! Create HDF5 file file_id = file_create(filename) + ! Write header info + call write_attribute(file_id, "filetype", "volume") + call write_attribute(file_id, "version", VERSION_VOLUME) + call write_attribute(file_id, "openmc_version", VERSION) +#ifdef GIT_SHA1 + call write_attribute(file_id, "git_sha1", GIT_SHA1) +#endif + + ! Write current date and time + call write_attribute(file_id, "date_and_time", time_stamp()) + ! Write basic metadata select case (this % domain_type) case (FILTER_CELL) - call write_attribute_string(file_id, ".", "domain_type", "cell") + call write_attribute(file_id, "domain_type", "cell") case (FILTER_MATERIAL) - call write_attribute_string(file_id, ".", "domain_type", "material") + call write_attribute(file_id, "domain_type", "material") case (FILTER_UNIVERSE) - call write_attribute_string(file_id, ".", "domain_type", "universe") + call write_attribute(file_id, "domain_type", "universe") end select call write_attribute(file_id, "samples", this % samples) call write_attribute(file_id, "lower_left", this % lower_left) diff --git a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py index 45d392ad0..eeeba5281 100644 --- a/tests/test_asymmetric_lattice/test_asymmetric_lattice.py +++ b/tests/test_asymmetric_lattice/test_asymmetric_lattice.py @@ -89,8 +89,9 @@ class AsymmetricLatticeTestHarness(PyAPITestHarness): outstr += '\n'.join(map('{:.8e}'.format, tally.std_dev.flatten())) + '\n' # Extract fuel assembly lattices from the summary - core = sp.summary.get_cell_by_id(1) - fuel = sp.summary.get_cell_by_id(80) + cells = sp.summary.geometry.get_all_cells() + core = cells[1] + fuel = cells[80] fuel = fuel.fill core = core.fill diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index ec19176c4..6c1c5f79c 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -116,7 +116,7 @@ class DistribmatTestHarness(PyAPITestHarness): def _get_results(self): outstr = super(DistribmatTestHarness, self)._get_results() su = openmc.Summary('summary.h5') - outstr += str(su.get_cell_by_id(11)) + outstr += str(su.geometry.get_all_cells()[11]) return outstr def _cleanup(self): @@ -127,5 +127,5 @@ class DistribmatTestHarness(PyAPITestHarness): if __name__ == '__main__': - harness = DistribmatTestHarness('statepoint.5.*') + harness = DistribmatTestHarness('statepoint.5.h5') harness.main() diff --git a/tests/test_mg_convert/test_mg_convert.py b/tests/test_mg_convert/test_mg_convert.py index f4cd90e71..d8a9665d8 100755 --- a/tests/test_mg_convert/test_mg_convert.py +++ b/tests/test_mg_convert/test_mg_convert.py @@ -153,7 +153,6 @@ class MGXSTestHarness(PyAPITestHarness): outstr += 'k-combined:\n' form = '{0:12.6E} {1:12.6E}\n' outstr += form.format(sp.k_combined[0], sp.k_combined[1]) - sp.close() return outstr diff --git a/tests/test_mg_survival_biasing/inputs_true.dat b/tests/test_mg_survival_biasing/inputs_true.dat new file mode 100644 index 000000000..be2e6b2d9 --- /dev/null +++ b/tests/test_mg_survival_biasing/inputs_true.dat @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../1d_mgxs.h5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 10 + 5 + + + 0.0 0.0 0.0 10.0 10.0 5.0 + + + multi-group + true + diff --git a/tests/test_mg_survival_biasing/results_true.dat b/tests/test_mg_survival_biasing/results_true.dat new file mode 100644 index 000000000..b20d63288 --- /dev/null +++ b/tests/test_mg_survival_biasing/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.080832E+00 1.336780E-02 diff --git a/tests/test_mg_survival_biasing/test_mg_survival_biasing.py b/tests/test_mg_survival_biasing/test_mg_survival_biasing.py new file mode 100644 index 000000000..61b7381a4 --- /dev/null +++ b/tests/test_mg_survival_biasing/test_mg_survival_biasing.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +import os +import sys +sys.path.insert(0, os.pardir) +from testing_harness import TestHarness, PyAPITestHarness +import openmc + + +class MGBasicTestHarness(PyAPITestHarness): + def _build_inputs(self): + """Write input XML files.""" + self._input_set.build_default_materials_and_geometry() + self._input_set.build_default_settings() + self._input_set.settings.survival_biasing = True + self._input_set.export() + + +if __name__ == '__main__': + harness = MGBasicTestHarness('statepoint.10.h5', False, mg=True) + harness.main() diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py index dbc2e0916..f9f9a7509 100644 --- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -71,9 +71,6 @@ class MGXSTestHarness(PyAPITestHarness): if os.path.exists('./tallies.xml'): os.remove('./tallies.xml') - # Close the statepoint to allow writing - sp.close() - # Re-run MG mode. if self._opts.mpi_exec is not None: mpi_args = [self._opts.mpi_exec, '-n', self._opts.mpi_np] diff --git a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py index 277e8583e..9ab7548fa 100644 --- a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -34,7 +34,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.num_delayed_groups = 6 self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'distribcell' - cells = self.mgxs_lib.openmc_geometry.get_all_material_cells() + cells = self.mgxs_lib.geometry.get_all_material_cells().values() self.mgxs_lib.domains = [c for c in cells if c.name == 'fuel'] self.mgxs_lib.build_library() diff --git a/tests/test_multipole/test_multipole.py b/tests/test_multipole/test_multipole.py index 32b38dd76..85c360e73 100644 --- a/tests/test_multipole/test_multipole.py +++ b/tests/test_multipole/test_multipole.py @@ -107,7 +107,7 @@ class MultipoleTestHarness(PyAPITestHarness): def _get_results(self): outstr = super(MultipoleTestHarness, self)._get_results() su = openmc.Summary('summary.h5') - outstr += str(su.get_cell_by_id(11)) + outstr += str(su.geometry.get_all_cells()[11]) return outstr def _cleanup(self): @@ -118,5 +118,5 @@ class MultipoleTestHarness(PyAPITestHarness): if __name__ == '__main__': - harness = MultipoleTestHarness('statepoint.5.*') + harness = MultipoleTestHarness('statepoint.5.h5') harness.main() diff --git a/tests/test_particle_restart_eigval/results_true.dat b/tests/test_particle_restart_eigval/results_true.dat index e0a9864a0..d1f933582 100644 --- a/tests/test_particle_restart_eigval/results_true.dat +++ b/tests/test_particle_restart_eigval/results_true.dat @@ -1,11 +1,11 @@ current batch: 1.000000E+01 -current gen: +current generation: 1.000000E+00 particle id: 1.030000E+03 run mode: -k-eigenvalue +eigenvalue particle weight: 1.000000E+00 particle energy: diff --git a/tests/test_particle_restart_fixed/results_true.dat b/tests/test_particle_restart_fixed/results_true.dat index 0a5126de8..c4ac94c4d 100644 --- a/tests/test_particle_restart_fixed/results_true.dat +++ b/tests/test_particle_restart_fixed/results_true.dat @@ -1,6 +1,6 @@ current batch: 7.000000E+00 -current gen: +current generation: 1.000000E+00 particle id: 1.440000E+02 diff --git a/tests/test_plot/settings.xml b/tests/test_plot/settings.xml index 37623cb1f..197b9c709 100644 --- a/tests/test_plot/settings.xml +++ b/tests/test_plot/settings.xml @@ -1,16 +1,7 @@ - eigenvalue - 10 - 5 - 1000 - - - - -4 -4 -4 4 4 4 - - + plot 5 4 3 diff --git a/tests/test_plot/test_plot.py b/tests/test_plot/test_plot.py index 606a1fd64..b21e1aada 100644 --- a/tests/test_plot/test_plot.py +++ b/tests/test_plot/test_plot.py @@ -33,28 +33,25 @@ class PlotTestHarness(TestHarness): for fname in self._plot_names: path = os.path.join(os.getcwd(), fname) if os.path.exists(path): - #os.remove(path) - pass + os.remove(path) def _get_results(self): """Return a string hash of the plot files.""" outstr = bytes() - # Add PPM output to results - ppm_files = glob.glob(os.path.join(os.getcwd(), '*.ppm')) - for fname in sorted(ppm_files): - with open(fname, 'rb') as fh: - outstr += fh.read() - - # Add voxel data to results - voxel_files = glob.glob(os.path.join(os.getcwd(), '*.voxel')) - for fname in sorted(voxel_files): - with h5py.File(fname, 'r') as fh: - outstr += fh['filetype'].value - outstr += fh['num_voxels'].value.tostring() - outstr += fh['lower_left'].value.tostring() - outstr += fh['voxel_width'].value.tostring() - outstr += fh['data'].value.tostring() + for fname in self._plot_names: + if fname.endswith('.ppm'): + # Add PPM output to results + with open(fname, 'rb') as fh: + outstr += fh.read() + elif fname.endswith('.h5'): + # Add voxel data to results + with h5py.File(fname, 'r') as fh: + outstr += fh.attrs['filetype'] + outstr += fh.attrs['num_voxels'].tostring() + outstr += fh.attrs['lower_left'].tostring() + outstr += fh.attrs['voxel_width'].tostring() + outstr += fh['data'].value.tostring() # Hash the information and return. sha512 = hashlib.sha512() @@ -65,6 +62,6 @@ class PlotTestHarness(TestHarness): if __name__ == '__main__': - harness = PlotTestHarness(('1_plot.ppm', '2_plot.ppm', '3_plot.ppm', - '4_plot.voxel')) + harness = PlotTestHarness(('plot_1.ppm', 'plot_2.ppm', 'plot_3.ppm', + 'plot_4.h5')) harness.main() diff --git a/tests/testing_harness.py b/tests/testing_harness.py index fc3b4f934..352022b26 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -219,8 +219,8 @@ class ParticleRestartTestHarness(TestHarness): outstr = '' outstr += 'current batch:\n' outstr += "{0:12.6E}\n".format(p.current_batch) - outstr += 'current gen:\n' - outstr += "{0:12.6E}\n".format(p.current_gen) + outstr += 'current generation:\n' + outstr += "{0:12.6E}\n".format(p.current_generation) outstr += 'particle id:\n' outstr += "{0:12.6E}\n".format(p.id) outstr += 'run mode:\n'