diff --git a/docs/source/io_formats/cross_sections.rst b/docs/source/io_formats/cross_sections.rst index 6998d3615..351011d01 100644 --- a/docs/source/io_formats/cross_sections.rst +++ b/docs/source/io_formats/cross_sections.rst @@ -1,5 +1,5 @@ .. _io_cross_sections: ============================================ -Cross Sections Locator -- cross_sections.xml +Cross Sections Listing -- cross_sections.xml ============================================ diff --git a/docs/source/io_formats/geometry.rst b/docs/source/io_formats/geometry.rst index d3da787bd..16ce8e655 100644 --- a/docs/source/io_formats/geometry.rst +++ b/docs/source/io_formats/geometry.rst @@ -4,55 +4,6 @@ Geometry Specification -- geometry.xml ====================================== -The geometry in OpenMC is described using `constructive solid geometry`_ (CSG), -also sometimes referred to as combinatorial geometry. CSG allows a user to -create complex objects using Boolean operators on a set of simpler surfaces. In -the geometry model, each unique volume is defined by its bounding surfaces. In -OpenMC, most `quadratic surfaces`_ can be modeled and used as bounding surfaces. - -Every geometry.xml must have an XML declaration at the beginning of the file and -a root element named geometry. Within the root element the user can define any -number of cells, surfaces, and lattices. Let us look at the following example: - -.. code-block:: xml - - - - - - - 1 - sphere - 0.0 0.0 0.0 5.0 - vacuum - - - - 1 - 0 - 1 - -1 - - - -At the beginning of this file is a comment, denoted by a tag starting with -````. Comments, as well as any other type of input, -may span multiple lines. One convenient feature of the XML input format is that -sub-elements of the ``cell`` and ``surface`` elements can also be equivalently -expressed of attributes of the original element, e.g. the geometry file above -could be written as: - -.. code-block:: xml - - - - - - - - - - .. _surface_element: --------------------- @@ -412,7 +363,3 @@ Here is an example of a properly defined 2d hexagonal lattice: 202 - -.. _constructive solid geometry: http://en.wikipedia.org/wiki/Constructive_solid_geometry - -.. _quadratic surfaces: http://en.wikipedia.org/wiki/Quadric diff --git a/docs/source/io_formats/plots.rst b/docs/source/io_formats/plots.rst index 4bfdaa8d5..841111b12 100644 --- a/docs/source/io_formats/plots.rst +++ b/docs/source/io_formats/plots.rst @@ -4,11 +4,11 @@ Geometry Plotting Specification -- plots.xml ============================================ -Basic plotting capabilities are available in OpenMC by creating a plots.xml -file and subsequently running with the command-line flag ``-plot``. The root -element of the plots.xml is simply ```` and any number output plots can -be defined with ```` sub-elements. Two plot types are currently -implemented in openMC: +Basic plotting capabilities are available in OpenMC by creating a plots.xml file +and subsequently running with the ``--plot``command-line flag. The root element +of the plots.xml is simply ```` and any number output plots can be +defined with ```` sub-elements. Two plot types are currently implemented +in openMC: * ``slice`` 2D pixel plot along one of the major axes. Produces a PPM image file. @@ -72,10 +72,10 @@ sub-elements: default Gnome viewer, IrfanView, etc.). The "voxel" plot type produces a binary datafile containing voxel grid positioning and the cell or material (specified by the ``color`` tag) at the center of each voxel. These - datafiles can be processed into 3D SILO files using the - ``openmc-voxel-to-silovtk`` utility provided with the OpenMC source, and - subsequently viewed with a 3D viewer such as VISIT or Paraview. See the - :ref:`io_voxel` for information about the datafile structure. + datafiles can be processed into 3D SILO files using the :ref:`scripts_voxel` + script provided with OpenMC, and subsequently viewed with a 3D viewer such + as VISIT or Paraview. See the :ref:`io_voxel` for information about the + datafile structure. .. note:: Since the PPM format is saved without any kind of compression, the resulting file sizes can be quite large. Saving the image in diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 5ff2af2c2..700a6e82e 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -247,6 +247,8 @@ Spatial Distributions openmc.stats.Box openmc.stats.Point +.. _pythonapi_mgxs: + ---------------------------------------------------------- :mod:`openmc.mgxs` -- Multi-Group Cross Section Generation ---------------------------------------------------------- @@ -350,6 +352,8 @@ Classes openmc.model.Model +.. _pythonapi_data: + -------------------------------------------- :mod:`openmc.data` -- Nuclear Data Interface -------------------------------------------- diff --git a/docs/source/usersguide/basics.rst b/docs/source/usersguide/basics.rst index 0633212df..3383cb9fc 100644 --- a/docs/source/usersguide/basics.rst +++ b/docs/source/usersguide/basics.rst @@ -4,9 +4,9 @@ Basics of Using OpenMC ====================== ------------ -Input Files ------------ +---------------- +Creating a Model +---------------- When you build and install OpenMC, you will have an :ref:`scripts_openmc` executable on your system. When you run ``openmc``, the first thing it will do @@ -88,18 +88,23 @@ Creating Input Files The simplest option to create input files is to simply write them from scratch using the :ref:`XML format specifications `. This approach will feel familiar to users of other Monte Carlo codes such as MCNP and -Serpent, with the added bonus that the XML formats feel much more "readable". +Serpent, with the added bonus that the XML formats feel much more +"readable". Alternatively, input files can be generated using OpenMC's +:ref:`Python API `, which is introduced in the following section. -Alternatively, input files can be generated using OpenMC's :ref:`pythonapi`. The -Python API defines a set of functions and classes that roughly correspond to -elements in the XML files. For example, the :class:`openmc.Cell` Python class -directly corresponds to the :ref:`cell_element` in XML. Each XML file itself -also has a corresponding class: :class:`openmc.Geometry` for ``geometry.xml``, -:class:`openmc.Materials` for ``materials.xml``, :class:`openmc.Settings` for -``settings.xml``, and so on. To create a model then, one creates instances of -these classes and then uses the ``export_to_xml()`` method, -e.g. :meth:`Geometry.export_to_xml`. Most scripts that generate a full model -will look something like the following: +---------- +Python API +---------- + +OpenMC's Python API defines a set of functions and classes that roughly +correspond to elements in the XML files. For example, the :class:`openmc.Cell` +Python class directly corresponds to the :ref:`cell_element` in XML. Each XML +file itself also has a corresponding class: :class:`openmc.Geometry` for +``geometry.xml``, :class:`openmc.Materials` for ``materials.xml``, +:class:`openmc.Settings` for ``settings.xml``, and so on. To create a model +then, one creates instances of these classes and then uses the +``export_to_xml()`` method, e.g. :meth:`Geometry.export_to_xml`. Most scripts +that generate a full model will look something like the following: .. code-block:: Python @@ -122,9 +127,61 @@ One a model has been created and exported to XML, a simulation can be run either by calling :ref:`scripts_openmc` directly from a shell or by using the :func:`openmc.run()` function from Python. +If you have never used Python before, the prospect of learning a new code *and* +a programming language might sound daunting. However, you should keep mind in +mind that there are many substantial benefits to using the Python API, +including: + +- The ability to define dimensions using variables. +- Availability of standard-library modules for working with files. +- An entire ecosystem of third-party packages for scientific computing. +- Ability to create materials based on natural elements or uranium enrichment +- :ref:`Automated multi-group cross section generation ` +- Convenience functions (e.g., a function returning a hexagonal region) +- Ability to plot individual universes as geometry is being created +- A :math:`k_\text{eff}` search function (:func:`openmc.search_for_keff`) +- Random sphere packing for generating TRISO particle locations + (:func:`openmc.model.pack_trisos`) +- A fully-featured :ref:`nuclear data interface `. + .. tip:: Users are strongly encouraged to use the Python API to generate input files and analyze results. +Identifying Objects +------------------- + +In the XML user input files, each object (cell, surface, tally, etc.) has to be +uniquely identified by a positive integer (ID) in the same manner as MCNP and +Serpent. In the Python API, integer IDs can be assigned but it is not strictly +required. When IDs are not explicitly assigned to instances of the OpenMC Python +classes, they will be automatically assigned. + +----------------------------- +Viewing and Analyzing Results +----------------------------- + +After a simulation has been completed by running :ref:`scripts_openmc`, you will +have several output files that were created: + +``tallies.out`` + An ASCII file showing the mean and standard deviation of the mean for any + user-defined tallies. + +``summary.h5`` + An HDF5 file with a complete description of the geometry and materials used in + the simulation. + +``statepoint.#.h5`` + An HDF5 file with the complete results of the simulation, including tallies as + well as the final source distribution. This file can be used both to + view/analyze results as well as restart a simulation if desired. + +For a simple simulation with few tallies, looking at the ``tallies.out`` file +might be sufficient. For anything more complicated (plotting results, finding a +subset of results, etc.), you will likely find it easier to work with the +statepoint file directly using the :class:`openmc.StatePoint` class. For more +details on working with statepoints, see FIXME. + -------------- Physical Units -------------- diff --git a/docs/source/usersguide/geometry.rst b/docs/source/usersguide/geometry.rst new file mode 100644 index 000000000..8a21e4d74 --- /dev/null +++ b/docs/source/usersguide/geometry.rst @@ -0,0 +1,203 @@ +.. _usersguide_geometry: + +================= +Defining Geometry +================= + +-------------------- +Surfaces and Regions +-------------------- + +The geometry of a model in OpenMC is defined using `constructive solid +geometry`_ (CSG), also sometimes referred to as combinatorial geometry. CSG +allows a user to create complex regions using Boolean operators (intersection, +union, and complement) on simpler regions. In order to define a region that we +can assign to a cell, we must first define surfaces which bound the region. A +surface is a locus of zeros of a function of Cartesian coordinates +:math:`x,y,z`, e.g. + +- A plane perpendicular to the :math:`x` axis: :math:`x − x_0 = 0` +- A cylinder perpendicular to the :math:`z` axis: :math:`(x − x_0)^2 + (y − + y_0)^2 − R^2 = 0` +- A sphere: :math:`(x − x_0)^2 + (y − y_0)^2 + (z − z_0)^2 − R^2 = 0` + +Defining a surface alone is not sufficient to specify a volume -- in order to +define an actual volume, one must reference the *half-space* of a surface. A +surface half-space is the region whose points satisfy a positive of negative +inequality of the surface equation. For example, for a sphere of radius one +centered at the origin, the surface equation is :math:`f(x,y,z) = x^2 + y^2 + +z^2 − 1 = 0`. Thus, we say that the negative half-space of the sphere, is +defined as the collection of points satisfying :math:`f(x,y,z) < 0`, which one +can reason is the inside of the sphere. Conversely, the positive half-space of +the sphere would correspond to all points outside of the sphere, satisfying +:math:`f(x,y,z) > 0`. + +In the Python API, surfaces are created via subclasses of +:class:`openmc.Surface`. The available surface types and their corresponding +classes are listed in the following table. + +.. table:: Surface types available in OpenMC. + + +----------------------+------------------------------+---------------------------+ + | Surface | Equation | Class | + +======================+==============================+===========================+ + | Plane perpendicular | :math:`x - x_0 = 0` | :class:`openmc.XPlane` | + | to :math:`x`-axis | | | + +----------------------+------------------------------+---------------------------+ + | Plane perpendicular | :math:`y - y_0 = 0` | :class:`openmc.YPlane` | + | to :math:`y`-axis | | | + +----------------------+------------------------------+---------------------------+ + | Plane perpendicular | :math:`z - z_0 = 0` | :class:`openmc.ZPlane` | + | to :math:`z`-axis | | | + +----------------------+------------------------------+---------------------------+ + | Arbitrary plane | :math:`Ax + By + Cz = D` | :class:`openmc.Plane` | + +----------------------+------------------------------+---------------------------+ + | Infinite cylinder | :math:`(y-y_0)^2 + (z-z_0)^2 | :class:`openmc.XCylinder` | + | parallel to | - R^2 = 0` | | + | :math:`x`-axis | | | + +----------------------+------------------------------+---------------------------+ + | Infinite cylinder | :math:`(x-x_0)^2 + (z-z_0)^2 | :class:`openmc.YCylinder` | + | parallel to | - R^2 = 0` | | + | :math:`y`-axis | | | + +----------------------+------------------------------+---------------------------+ + | Infinite cylinder | :math:`(x-x_0)^2 + (y-y_0)^2 | :class:`openmc.ZCylinder` | + | parallel to | - R^2 = 0` | | + | :math:`z`-axis | | | + +----------------------+------------------------------+---------------------------+ + | Sphere | :math:`(x-x_0)^2 + (y-y_0)^2 | :class:`openmc.Sphere` | + | | + (z-z_0)^2 - R^2 = 0` | | + +----------------------+------------------------------+---------------------------+ + | Cone parallel to the | :math:`(y-y_0)^2 + (z-z_0)^2 | :class:`openmc.XCone` | + | :math:`x`-axis | - R^2(x-x_0)^2 = 0` | | + +----------------------+------------------------------+---------------------------+ + | Cone parallel to the | :math:`(x-x_0)^2 + (z-z_0)^2 | :class:`openmc.YCone` | + | :math:`y`-axis | - R^2(y-y_0)^2 = 0` | | + +----------------------+------------------------------+---------------------------+ + | Cone parallel to the | :math:`(x-x_0)^2 + (y-y_0)^2 | :class:`openmc.ZCone` | + | :math:`z`-axis | - R^2(z-z_0)^2 = 0` | | + +----------------------+------------------------------+---------------------------+ + | General quadric | :math:`Ax^2 + By^2 + Cz^2 + | :class:`openmc.Quadric` | + | surface | Dxy + Eyz + Fxz \\+Gx + Hy + | | + | | Jz + K = 0` | | + +----------------------+------------------------------+---------------------------+ + +Each surface is characterized by several parameters. As one example, the +parameters for a sphere are the :math:`x,y,z` coordinates of the center of the +sphere and the radius of the sphere. All of these parameters can be set either +as optional keyword arguments to the class constructor or via attributes:: + + sphere = openmc.Sphere(R=10.0) + + # ..or.. + sphere = openmc.Sphere() + sphere.r = 10.0 + +Once a surface has been created, half-spaces can be obtained by applying the +unary ``-`` or ``+`` operators, corresponding to the negative and positive +half-spaces, respectively. For example:: + + >>> sphere = openmc.Sphere(R=10.0) + >>> inside_sphere = -sphere + >>> outside_sphere = +sphere + >>> type(inside_sphere) + + +Instances of :class:`openmc.Halfspace` can be combined together using the +Boolean operators ``&`` (intersection), ``|`` (union), and ``~`` (complement):: + + >>> inside_sphere = -openmc.Sphere() + >>> above_plane = +openmc.ZPlane() + >>> northern_hemisphere = inside_sphere & above_plane + >>> type(northern_hemisphere) + + +For many regions, a bounding-box can be determined automatically:: + + >>> northern_hemisphere.bounding_box + (array([-1., -1., 0.]), array([1., 1., 1.])) + +Boundary Conditions +------------------- + +When a surface is created, by default particles that pass through the surface +will consider it to be transmissive, i.e., they pass through the surface +freely. If your model does not extend to infinity in all spatial dimensions, you +may want to specify different behavior for particles passing through a +surface. To specify a vacuum boundary condition, simply change the +:attr:`Surface.boundary_type` attribute to 'vacuum':: + + outer_surface = openmc.Sphere(R=100.0, boundary_type='vacuum') + + # ..or.. + outer_surface = openmc.Sphere(R=100.0) + outer_surface.boundary_type = 'vacuum' + +Reflective and periodic boundary conditions can be set with the strings +'reflective' and 'periodic'. Vacuum and reflective boundary conditions can be +applied to any type of surface. Periodic boundary conditions can only be applied +to pairs of axis-aligned planar surfaces. + +----- +Cells +----- + +Once you have a material created and a region of space defined, you need to +define a *cell* that assigns the material to the region. Cells are created using +the :class:`openmc.Cell` class:: + + fuel = openmc.Cell(fill=uo2, region=pellet) + + # ..or.. + fuel = openmc.Cell() + fuel.fill = uo2 + fuel.region = pellet + +The classes :class:`Halfspace`, :class:`Intersection`, :class:`Union`, and +:class:`Complement` and all instances of :class:`openmc.Region` and can be +assigned to the :attr:`Cell.region` attribute. + +--------- +Universes +--------- + +Similar to MCNP and Serpent, OpenMC is capable of using *universes*, collections +of cells that can be used as repeatable units of geometry. At a minimum, there +must be one "root" universe present in the model. To create a universe, the +:class:`openmc.Universe` is used:: + + universe = openmc.Universe(cells=[cell1, cell2, cell3]) + + # ..or.. + universe = openmc.Universe() + universe.add_cells([cell1, cell2]) + universe.add_cell(cell3) + +Universes are generally used in three ways: + +1. To be assigned to a :class:`Geometry` object (see + :ref:`usersguide_geom_export`), +2. To be assigned as the fill for a cell via the :attr:`Cell.fill` attribute, + and +3. To be used in a regular arrangement of universes in a :ref:`lattice + `. + +.. _usersguide_lattices: + +-------- +Lattices +-------- + + +------------------ +Hexagonal Lattices +------------------ + + +.. _usersguide_geom_export: + +-------------------------- +Exporting a Geometry Model +-------------------------- + +.. _constructive solid geometry: http://en.wikipedia.org/wiki/Constructive_solid_geometry +.. _quadratic surfaces: http://en.wikipedia.org/wiki/Quadric diff --git a/docs/source/usersguide/index.rst b/docs/source/usersguide/index.rst index d3fa0f4cf..53818941d 100644 --- a/docs/source/usersguide/index.rst +++ b/docs/source/usersguide/index.rst @@ -14,6 +14,9 @@ essential aspects of using OpenMC to perform simulations. beginners install basics + materials + geometry + settings scripts processing troubleshoot diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 4d9a0849e..e7f85906c 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -52,7 +52,7 @@ Next, resynchronize the package index files: .. code-block:: sh - sudo apt-get update + sudo apt update Now OpenMC should be recognized within the repository and can be installed: @@ -320,7 +320,7 @@ Recent versions of Windows 10 include a subsystem for Linux that allows one to run Bash within Ubuntu running in Windows. First, follow the installation guide `here `_ to get Bash on Ubuntu on Windows setup. Once you are within bash, obtain the necessary -:ref:`prerequisites ` via ``apt-get``. Finally, follow the +:ref:`prerequisites ` via ``apt``. Finally, follow the :ref:`instructions for compiling on linux `. Compiling for the Intel Xeon Phi diff --git a/docs/source/usersguide/materials.rst b/docs/source/usersguide/materials.rst new file mode 100644 index 000000000..ed742171e --- /dev/null +++ b/docs/source/usersguide/materials.rst @@ -0,0 +1,173 @@ +.. _usersguide_materials: + +.. currentmodule:: openmc + +===================== +Material Compositions +===================== + +Materials in OpenMC are defined as a set of nuclides/elements at specified +densities and are created using the :class:`openmc.Material` class. Once a +material has been instantiated, nuclides can be added with +:meth:`Material.add_nuclide` and elements can be added with +:meth:`Material.add_element`. Densities can be specified using atom fractions or +weight fractions. For example, to create a material and add Gd152 at 0.5 atom +percent, you'd run: + +:: + + mat = openmc.Material() + mat.add_nuclide('Gd152', 0.5, 'ao') + +The third argument to :meth:`Material.add_nuclide` can also be 'wo' for weight +percent. The densities specified for each nuclide/element are relative and are +renormalized based on the total density of the material. The total density is +set using the :meth:`Material.set_density` method. The density can be specified +in gram per cubic centimeter, atom per barn-cm, or kilogram per cubic meter, +e.g., + +:: + + mat.set_density('g/cm3', 4.5) + +---------------- +Natural Elements +---------------- + +The :meth:`Material.add_element` method works exactly the same as +:meth:`Material.add_nuclide`, except that instead of specifying a single isotope +of an element, you specify the element itself. For example, + +:: + + mat.add_element('C', 1.0) + +Internally, OpenMC stores data on the atomic masses and natural abundances of +all known isotopes and then uses this data to determine what isotopes should be +added to the material. When the material is later exported to XML for use by the +:ref:`scripts_openmc` executable, you'll see that any natural elements are +expanded to the naturally-occurring isotopes. + +Often, cross section libraries don't actually have all naturally-occurring +isotopes for a given element. For example, in ENDF/B-VII.1, cross section +evaluations are given for O16 and O17 but not for O18. If OpenMC is aware of +what cross sections you will be using (either through the +:attr:`Materials.cross_sections` attribute or the +:envvar:`OPENMC_CROSS_SECTIONS` environment variable), it will attempt to only +put isotopes in your model for which you have cross section data. In the case of +oxygen in ENDF/B-VII.1, the abundance of O18 would end up being lumped with O16. + +----------------------- +Thermal Scattering Data +----------------------- + +If you have a moderating material in your model like water or graphite, you +should assign thermal scattering data (so-called :math:`S(\alpha,\beta)`) using +the :meth:`Material.add_s_alpha_beta` method. For example, to model light water, +you would need to add hydrogen and oxygen to a material and then assign the +``c_H_in_H2O`` thermal scattering data: + +:: + + water = openmc.Material() + water.add_nuclide('H1', 2.0) + water.add_nuclide('O16', 1.0) + water.add_s_alpha_beta('c_H_in_H2O') + water.set_density('g/cm3', 1.0) + +------------------ +Naming Conventions +------------------ + +OpenMC uses the GND_ naming convention for nuclides, metastable states, and +compounds: + +:Nuclides: ``SymA`` where "A" is the mass number (e.g., ``Fe56``) +:Elements: ``Sym0`` (e.g., ``Fe0`` or ``C0``) +:Excited states: ``SymA_eN`` (e.g., ``V51_e1`` for the first excited state of + Vanadium-51.) This is only used in decay data. +:Metastable states: ``SymA_mN`` (e.g., ``Am242_m1`` for the first excited state + of Americium-242). +:Compounds: ``c_String_Describing_Material`` (e.g., ``c_H_in_H2O``). Used for + thermal scattering data. + +.. important:: The element syntax, e.g., ``C0``, is only used when the cross + section evaluation is an elemental evaluation, like carbon in + ENDF/B-VII.1! If you are adding an element via + :meth:`Material.add_element`, just use ``Sym``. + +.. _GND: https://www.oecd-nea.org/science/wpec/sg38/Meetings/2016_May/tlh4gnd-main.pdf + + +----------- +Temperature +----------- + +Some Monte Carlo codes define temperature implicitly through the cross section +data, which is itself given only at a particular temperature. In OpenMC, the +material definition is decoupled from the specification of temperature. Instead, +temperatures are assigned to cells (FIXME add link) directly. Alternatively, a +default temperature can be assigned to a material that is to be applied to any +cell where the material is used. In the absence of any cell or material +temperature specification, a global default temperature can be set that is +applied to all cells and materials. Anytime a material temperature is specified, +it will override the global default temperature. Similarly, anytime a cell +temperatures is specified, it will override the material or global default +temperatures. + +To assign a default material temperature, one should use the ``temperature`` +attribute, e.g., + +:: + + hot_fuel = openmc.Material() + hot_fuel.temperature = 1200.0 # temperature in Kelvin + +.. warning:: MCNP_ users should be aware that OpenMC does not use the concept of + cross section suffixes like "71c" or "80c". Temperatures in Kelvin + should be assigned directly per material or per cell using the + :attr:`Material.temperature` or :attr:`Cell.temperature` + attributes, respectively. + +-------------------- +Material Collections +-------------------- + +The :ref:`scripts_openmc` executable expects to find a ``materials.xml`` file +when it is run. To create this file, one needs to instantiate the +:class:`openmc.Materials` class and add materials to it. The :class:`Materials` +class acts like a list (in fact, it is a subclass of Python's built-in ``list`` +class), so materials can be added by passing a list to the constructor, using +methods like ``append()``, or through the operator ``+=``. Once materials have +been added to the collection, it can be exported using the +:meth:`Materials.export_to_xml` method. + +:: + + materials = openmc.Materials() + materials.append(water) + materials += [uo2, zircaloy] + materials.export_to_xml() + + # This is equivalent + materials = openmc.Materials([water, uo2, zircaloy]) + materials.export_to_xml() + +Cross Sections +-------------- + +OpenMC uses a file called :ref:`cross_sections.xml ` to +indicate where cross section data can be found on the filesystem. This file +serves the same role that ``xsdir`` does for MCNP_ or ``xsdata`` does for +Serpent. Information on how to generate a cross section listing file can be +found in FIXME. Once you have a cross sections file that has been generated, you +can tell OpenMC to use this file either by setting +:attr:`Materials.cross_sections` or by setting the +:envvar:`OPENMC_CROSS_SECTIONS` environment variable to the path of the +``cross_sections.xml`` file. The former approach would look like: + +:: + + materials.cross_sections = '/path/to/cross_sections.xml' + +.. _MCNP: https://mcnp.lanl.gov/ diff --git a/docs/source/usersguide/scripts.rst b/docs/source/usersguide/scripts.rst index f99ddbc91..411409c99 100644 --- a/docs/source/usersguide/scripts.rst +++ b/docs/source/usersguide/scripts.rst @@ -115,6 +115,8 @@ Message Description [VALID] XML file matches RelaxNG. ======================== =================================== +.. _scripts_voxel: + --------------------------- ``openmc-voxel-to-silovtk`` --------------------------- diff --git a/docs/source/usersguide/settings.rst b/docs/source/usersguide/settings.rst new file mode 100644 index 000000000..c88c32491 --- /dev/null +++ b/docs/source/usersguide/settings.rst @@ -0,0 +1,5 @@ +.. _usersguide_settings: + +================== +Execution Settings +================== diff --git a/openmc/material.py b/openmc/material.py index 357753fa9..26b1bce8f 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -29,8 +29,13 @@ DENSITY_UNITS = ['g/cm3', 'g/cc', 'kg/cm3', 'atom/b-cm', 'atom/cm3', 'sum', class Material(object): - """A material composed of a collection of nuclides/elements that can be - assigned to a region of space. + """A material composed of a collection of nuclides/elements. + + To create a material, one should create an instance of this class, add + nuclides or elements with :meth:`Material.add_nuclide` or + `Material.add_element`, respectively, and set the total material density + with `Material.export_to_xml()`. The material can then be assigned to a cell + using the :attr:`Cell.fill` attribute. Parameters ---------- diff --git a/openmc/surface.py b/openmc/surface.py index bd59b556c..9c6be78a7 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -1177,7 +1177,7 @@ class Sphere(Surface): y-coordinate of the center of the sphere z0 : float z-coordinate of the center of the sphere - R : float + r : float Radius of the sphere boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the @@ -1325,7 +1325,7 @@ class Cone(Surface): y-coordinate of the apex z0 : float z-coordinate of the apex - R2 : float + r2 : float Parameter related to the aperature boundary_type : {'transmission, 'vacuum', 'reflective'} Boundary condition that defines the behavior for particles hitting the @@ -2033,4 +2033,4 @@ def get_hexagonal_prism(edge_length=1., orientation='y', # y = sqrt(3)*(x + a) upper_left = Plane(A=-c, B=1., D=c*l, boundary_type=boundary_type) return Intersection(-top, +bottom, -upper_right, +lower_right, - +lower_left, -upper_left) \ No newline at end of file + +lower_left, -upper_left)