Merge pull request #270 from paulromano/expand-natural

Determine natural element expansion based on cross section library
This commit is contained in:
Bryan Herman 2014-04-28 17:44:49 -04:00
commit 9b8a8ded00
6 changed files with 217 additions and 83 deletions

View file

@ -182,6 +182,29 @@ performed. It has the following attributes/sub-elements:
*Default*: None
.. _natural_elements:
``<natural_elements>`` Element
------------------------------
The ``<natural_elements>`` element indicates to OpenMC what nuclides are
available in the cross section library when expanding an ``<element>`` into
separate isotopes (see :ref:`material`). The accepted values are:
- ENDF/B-VII.0
- ENDF/B-VII.1
- JEFF-3.1.1
- JEFF-3.1.2
- JEFF-3.2
- JENDL-3.2
- JENDL-3.3
- JENDL-4.0
Note that the value is case-insensitive, so "ENDF/B-VII.1" is equivalent to
"endf/b-vii.1".
*Default*: ENDF/B-VII.1
``<no_reduce>`` Element
-----------------------
@ -741,6 +764,8 @@ sub-elements:
Materials Specification -- materials.xml
----------------------------------------
.. _material:
``<material>`` Element
----------------------
@ -780,12 +805,13 @@ Each ``material`` element can have the following attributes or sub-elements:
:element:
Specifies that a natural element is present in the material. The natural
element is split up into individual isotopes based on IUPAC Isotopic
Compositions of the Elements 1997. This element has attributes/sub-elements
called ``name``, ``xs``, and ``ao``. The ``name`` attribute is the atomic
symbol of the element while the ``xs`` attribute is the cross-section
identifier. Finally, the ``ao`` attribute specifies the atom percent of the
element within the material, respectively. One example would be as follows:
element is split up into individual isotopes based on `IUPAC Isotopic
Compositions of the Elements 2009`_. This element has
attributes/sub-elements called ``name``, ``xs``, and ``ao``. The ``name``
attribute is the atomic symbol of the element while the ``xs`` attribute is
the cross-section identifier. Finally, the ``ao`` attribute specifies the
atom percent of the element within the material, respectively. One example
would be as follows:
.. code-block:: xml
@ -794,6 +820,10 @@ Each ``material`` element can have the following attributes or sub-elements:
<element name="Mn" ao="2.7426e-05" />
<element name="Cu" ao="1.6993e-04" />
In some cross section libraries, certain naturally occurring isotopes do not
have cross sections. The :ref:`natural_elements` option determines how a
natural element is split into isotopes in these cases.
*Default*: None
@ -805,6 +835,9 @@ Each ``material`` element can have the following attributes or sub-elements:
*Default*: None
.. _IUPAC Isotopic Compositions of the Elements 2009:
http://pac.iupac.org/publications/pac/pdf/2011/pdf/8302x0397.pdf
``<default_xs>`` Element
------------------------

View file

@ -244,6 +244,17 @@ module constants
! Maximum number of partial fission reactions
integer, parameter :: PARTIAL_FISSION_MAX = 4
! Major cross section libraries
integer, parameter :: &
ENDF_BVII0 = 1, &
ENDF_BVII1 = 2, &
JEFF_311 = 3, &
JEFF_312 = 4, &
JEFF_32 = 5, &
JENDL_32 = 6, &
JENDL_33 = 7, &
JENDL_40 = 8
! ============================================================================
! TALLY-RELATED CONSTANTS

View file

@ -88,6 +88,9 @@ module global
! Default xs identifier (e.g. 70c)
character(3):: default_xs
! What to assume for expanding natural elements
integer :: default_expand = ENDF_BVII1
! ============================================================================
! TALLY-RELATED VARIABLES

View file

@ -778,6 +778,33 @@ contains
end if
end if
! Natural element expansion option
if (check_for_node(doc, "natural_elements")) then
call get_node_value(doc, "natural_elements", temp_str)
call lower_case(temp_str)
select case (temp_str)
case ('endf/b-vii.0')
default_expand = ENDF_BVII0
case ('endf/b-vii.1')
default_expand = ENDF_BVII1
case ('jeff-3.1.1')
default_expand = JEFF_311
case ('jeff-3.1.2')
default_expand = JEFF_312
case ('jeff-3.2')
default_expand = JEFF_32
case ('jendl-3.2')
default_expand = JENDL_32
case ('jendl-3.3')
default_expand = JENDL_33
case ('jendl-4.0')
default_expand = JENDL_40
case default
message = "Unknown natural element expansion option: " // trim(temp_str)
call fatal_error()
end select
end if
! Close settings XML file
call close_xmldoc(doc)
@ -3116,8 +3143,7 @@ contains
call list_density % append(density * 0.801_8)
case ('c')
! The evaluation of Carbon in ENDF/B-VII.1 and JEFF 3.1.2 is a natural
! element, i.e. it's not possible to split into C-12 and C-13.
! No evaluations split up Carbon into isotopes yet
call list_names % append('6000.' // xs)
call list_density % append(density)
@ -3128,12 +3154,22 @@ contains
call list_density % append(density * 0.00364_8)
case ('o')
! O-18 does not exist in ENDF/B-VII.1 or JEFF 3.1.2 so its 0.205% has been
! added to O-16. The isotopic abundance for O-16 is ordinarily 99.757%.
call list_names % append('8016.' // xs)
call list_density % append(density * 0.99962_8)
call list_names % append('8017.' // xs)
call list_density % append(density * 0.00038_8)
if (default_expand == JEFF_32) then
call list_names % append('8016.' // xs)
call list_density % append(density * 0.99757_8)
call list_names % append('8017.' // xs)
call list_density % append(density * 0.00038_8)
call list_names % append('8018.' // xs)
call list_density % append(density * 0.00205_8)
elseif (default_expand >= JENDL_32 .and. default_expand <= JENDL_40) then
call list_names % append('8016.' // xs)
call list_density % append(density)
else
call list_names % append('8016.' // xs)
call list_density % append(density * 0.99962_8)
call list_names % append('8017.' // xs)
call list_density % append(density * 0.00038_8)
end if
case ('f')
call list_names % append('9019.' // xs)
@ -3238,13 +3274,17 @@ contains
call list_density % append(density * 0.0518_8)
case ('v')
! The evaluation of Vanadium in ENDF/B-VII.1 and JEFF 3.1.2 is a natural
! element. The IUPAC isotopic composition specifies the following
! breakdown which is not used:
! V-50 = 0.250%
! V-51 = 99.750%
call list_names % append('23000.' // xs)
call list_density % append(density)
if (default_expand == ENDF_BVII0 .or. default_expand == JEFF_311 &
.or. default_expand == JEFF_32 .or. &
(default_expand >= JENDL_32 .and. default_expand <= JENDL_33)) then
call list_names % append('23000.' // xs)
call list_density % append(density)
else
call list_names % append('23050.' // xs)
call list_density % append(density * 0.0025_8)
call list_names % append('23051.' // xs)
call list_density % append(density * 0.9975_8)
end if
case ('cr')
call list_names % append('24050.' // xs)
@ -3293,24 +3333,33 @@ contains
call list_density % append(density * 0.3085_8)
case ('zn')
! The evaluation of Zinc in ENDF/B-VII.1 is a natural element. The IUPAC
! isotopic composition specifies the following breakdown which is not used
! here:
! Zn-64 = 48.63%
! Zn-66 = 27.90%
! Zn-67 = 4.10%
! Zn-68 = 18.75%
! Zn-70 = 0.62%
call list_names % append('30000.' // xs)
call list_density % append(density)
if (default_expand == ENDF_BVII0 .or. default_expand == &
JEFF_311 .or. default_expand == JEFF_312) then
call list_names % append('30000.' // xs)
call list_density % append(density)
else
call list_names % append('30064.' // xs)
call list_density % append(density * 0.4917_8)
call list_names % append('30066.' // xs)
call list_density % append(density * 0.2773_8)
call list_names % append('30067.' // xs)
call list_density % append(density * 0.0404_8)
call list_names % append('30068.' // xs)
call list_density % append(density * 0.1845_8)
call list_names % append('30070.' // xs)
call list_density % append(density * 0.0061_8)
end if
case ('ga')
! JEFF 3.1.2 does not have evaluations for Ga-69 and Ga-71, only for
! natural Gallium, so this may cause problems.
call list_names % append('31069.' // xs)
call list_density % append(density * 0.60108_8)
call list_names % append('31071.' // xs)
call list_density % append(density * 0.39892_8)
if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then
call list_names % append('31000.' // xs)
call list_density % append(density)
else
call list_names % append('31069.' // xs)
call list_density % append(density * 0.60108_8)
call list_names % append('31071.' // xs)
call list_density % append(density * 0.39892_8)
end if
case ('ge')
call list_names % append('32070.' // xs)
@ -3721,24 +3770,43 @@ contains
call list_density % append(density * 0.3508_8)
case ('ta')
call list_names % append('73180.' // xs)
call list_density % append(density * 0.0001201_8)
call list_names % append('73181.' // xs)
call list_density % append(density * 0.9998799_8)
if (default_expand == ENDF_BVII0 .or. &
(default_expand >= JEFF_311 .and. default_expand <= JEFF_312) .or. &
(default_expand >= JENDL_32 .and. default_expand <= JENDL_40)) then
call list_names % append('73181.' // xs)
call list_density % append(density)
else
call list_names % append('73180.' // xs)
call list_density % append(density * 0.0001201_8)
call list_names % append('73181.' // xs)
call list_density % append(density * 0.9998799_8)
end if
case ('w')
! ENDF/B-VII.0 does not have W-180 so this may cause problems. However, it
! has been added as of ENDF/B-VII.1
call list_names % append('74180.' // xs)
call list_density % append(density * 0.0012_8)
call list_names % append('74182.' // xs)
call list_density % append(density * 0.2650_8)
call list_names % append('74183.' // xs)
call list_density % append(density * 0.1431_8)
call list_names % append('74184.' // xs)
call list_density % append(density * 0.3064_8)
call list_names % append('74186.' // xs)
call list_density % append(density * 0.2843_8)
if (default_expand == ENDF_BVII0 .or. default_expand == JEFF_311 &
.or. default_expand == JEFF_312 .or. &
(default_expand >= JENDL_32 .and. default_expand <= JENDL_33)) then
! Combine W-180 with W-182
call list_names % append('74182.' // xs)
call list_density % append(density * 0.2662_8)
call list_names % append('74183.' // xs)
call list_density % append(density * 0.1431_8)
call list_names % append('74184.' // xs)
call list_density % append(density * 0.3064_8)
call list_names % append('74186.' // xs)
call list_density % append(density * 0.2843_8)
else
call list_names % append('74180.' // xs)
call list_density % append(density * 0.0012_8)
call list_names % append('74182.' // xs)
call list_density % append(density * 0.2650_8)
call list_names % append('74183.' // xs)
call list_density % append(density * 0.1431_8)
call list_names % append('74184.' // xs)
call list_density % append(density * 0.3064_8)
call list_names % append('74186.' // xs)
call list_density % append(density * 0.2843_8)
end if
case ('re')
call list_names % append('75185.' // xs)
@ -3747,20 +3815,25 @@ contains
call list_density % append(density * 0.6260_8)
case ('os')
call list_names % append('76184.' // xs)
call list_density % append(density * 0.0002_8)
call list_names % append('76186.' // xs)
call list_density % append(density * 0.0159_8)
call list_names % append('76187.' // xs)
call list_density % append(density * 0.0196_8)
call list_names % append('76188.' // xs)
call list_density % append(density * 0.1324_8)
call list_names % append('76189.' // xs)
call list_density % append(density * 0.1615_8)
call list_names % append('76190.' // xs)
call list_density % append(density * 0.2626_8)
call list_names % append('76192.' // xs)
call list_density % append(density * 0.4078_8)
if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then
call list_names % append('76000.' // xs)
call list_density % append(density)
else
call list_names % append('76184.' // xs)
call list_density % append(density * 0.0002_8)
call list_names % append('76186.' // xs)
call list_density % append(density * 0.0159_8)
call list_names % append('76187.' // xs)
call list_density % append(density * 0.0196_8)
call list_names % append('76188.' // xs)
call list_density % append(density * 0.1324_8)
call list_names % append('76189.' // xs)
call list_density % append(density * 0.1615_8)
call list_names % append('76190.' // xs)
call list_density % append(density * 0.2626_8)
call list_names % append('76192.' // xs)
call list_density % append(density * 0.4078_8)
end if
case ('ir')
call list_names % append('77191.' // xs)
@ -3769,18 +3842,23 @@ contains
call list_density % append(density * 0.627_8)
case ('pt')
call list_names % append('78190.' // xs)
call list_density % append(density * 0.00012_8)
call list_names % append('78192.' // xs)
call list_density % append(density * 0.00782_8)
call list_names % append('78194.' // xs)
call list_density % append(density * 0.3286_8)
call list_names % append('78195.' // xs)
call list_density % append(density * 0.3378_8)
call list_names % append('78196.' // xs)
call list_density % append(density * 0.2521_8)
call list_names % append('78198.' // xs)
call list_density % append(density * 0.07356_8)
if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then
call list_names % append('78000.' // xs)
call list_density % append(density)
else
call list_names % append('78190.' // xs)
call list_density % append(density * 0.00012_8)
call list_names % append('78192.' // xs)
call list_density % append(density * 0.00782_8)
call list_names % append('78194.' // xs)
call list_density % append(density * 0.3286_8)
call list_names % append('78195.' // xs)
call list_density % append(density * 0.3378_8)
call list_names % append('78196.' // xs)
call list_density % append(density * 0.2521_8)
call list_names % append('78198.' // xs)
call list_density % append(density * 0.07356_8)
end if
case ('au')
call list_names % append('79197.' // xs)
@ -3803,10 +3881,15 @@ contains
call list_density % append(density * 0.0687_8)
case ('tl')
call list_names % append('81203.' // xs)
call list_density % append(density * 0.2952_8)
call list_names % append('81205.' // xs)
call list_density % append(density * 0.7048_8)
if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then
call list_names % append('81000.' // xs)
call list_density % append(density)
else
call list_names % append('81203.' // xs)
call list_density % append(density * 0.2952_8)
call list_names % append('81205.' // xs)
call list_density % append(density * 0.7048_8)
end if
case ('pb')
call list_names % append('82204.' // xs)

View file

@ -38,6 +38,8 @@ element settings {
attribute upper_right { list { xsd:double+ } })
}? &
element natural_elements { xsd:string { maxLength = "20" } }? &
element no_reduce { xsd:boolean }? &
element output {

View file

@ -9,6 +9,8 @@
<particles>400</particles>
</eigenvalue>
<natural_elements>endf/b-vii.1</natural_elements>
<source>
<space>
<type>box</type>