diff --git a/LICENSE b/LICENSE
index 660806c88..a11dc44a2 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2011-2017 Massachusetts Institute of Technology
+Copyright (c) 2011-2018 Massachusetts Institute of Technology
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
diff --git a/docs/Makefile b/docs/Makefile
index 2f3c029db..a93338df3 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -13,10 +13,6 @@ PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
-# SVG to PDF conversion
-SVG2PDF = inkscape
-PDFS = $(patsubst %.svg,%.pdf,$(wildcard $(IMAGEDIR)/*.svg))
-
# Tikz to PNG conversion
PNGS = $(patsubst %.tex,%.png,$(wildcard $(IMAGEDIR)/*.tex))
@@ -41,21 +37,13 @@ help:
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
-# Pattern rule for converting SVG to PDF
-%.pdf: %.svg
- $(SVG2PDF) -f $< -A $@
-
%.png: %.tex
pdflatex --interaction=nonstopmode --output-directory=$(IMAGEDIR) $<
pdftoppm -r 120 -singlefile $(patsubst %.tex,%.pdf, $<) $(basename $<)
convert -trim -fuzz 2% -transparent white $(patsubst %.tex,%.ppm,$<) $@
-# Rule to build PDFs
-images: $(PDFS) $(PNGS)
-
clean:
-rm -rf $(BUILDDIR)/*
- -rm -rf $(PDFS)
-rm -rf source/pythonapi/generated/
html:
diff --git a/docs/source/capi/index.rst b/docs/source/capi/index.rst
index 581f358d4..d63ed1f3a 100644
--- a/docs/source/capi/index.rst
+++ b/docs/source/capi/index.rst
@@ -4,32 +4,191 @@
C API
=====
+The libopenmc shared library that is built when installing OpenMC exports a
+number of C interoperable functions and global variables that can be used for
+in-memory coupling. While it is possible to directly use the C API as documented
+here for coupling, most advanced users will find it easier to work with the
+Python bindings in the :py:mod:`openmc.capi` module.
+
+.. warning:: The C API is still experimental and may undergo substantial changes
+ in future releases.
+
+----------------
+Type Definitions
+----------------
+
+.. c:type:: Bank
+
+ Attributes of a source particle.
+
+ .. c:member:: double wgt
+
+ Weight of the particle
+
+ .. c:member:: double xyz[3]
+
+ Position of the particle (units of cm)
+
+ .. c:member:: double uvw[3]
+
+ Unit vector indicating direction of the particle
+
+ .. c:member:: double E
+
+ Energy of the particle in eV
+
+ .. c:member:: int delayed_group
+
+ If the particle is a delayed neutron, indicates which delayed precursor
+ group it was born from. If not a delayed neutron, this member is zero.
+
+---------
+Functions
+---------
+
.. c:function:: void openmc_calculate_volumes()
Run a stochastic volume calculation
+.. c:function:: int openmc_cell_get_fill(int32_t index, int* type, int32_t** indices, int32_t* n)
+
+ Get the fill for a cell
+
+ :param int32_t index: Index in the cells array
+ :param int* type: Type of the fill
+ :param int32_t** indices: Array of material indices for cell
+ :param int32_t* n: Length of indices array
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
.. c:function:: int openmc_cell_get_id(int32_t index, int32_t* id)
Get the ID of a cell
- :param index: Index in the cells array
- :type index: int32_t
- :param id: ID of the cell
- :type id: int32_t*
+ :param int32_t index: Index in the cells array
+ :param int32_t* id: ID of the cell
:return: Return status (negative if an error occurred)
:rtype: int
-.. c:function:: int openmc_cell_set_temperature(index index, double T, int32_t* instance)
+.. c:function:: int openmc_cell_set_fill(int32_t index, int type, int32_t n, const int32_t* indices)
+
+ Set the fill for a cell
+
+ :param int32_t index: Index in the cells array
+ :param int type: Type of the fill
+ :param int32_t n: Length of indices array
+ :param indices: Array of material indices for cell
+ :type indices: const int32_t*
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_cell_set_id(int32_t index, int32_t id)
+
+ Set the ID of a cell
+
+ :param int32_t index: Index in the cells array
+ :param int32_t id: ID of the cell
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_cell_set_temperature(index index, double T, const int32_t* instance)
Set the temperature of a cell.
- :param index: Index in the cells array
- :type index: int32_t
- :param T: Temperature in Kelvin
- :type T: double
+ :param int32_t index: Index in the cells array
+ :param double T: Temperature in Kelvin
:param instance: Which instance of the cell. To set the temperature for all
instances, pass a null pointer.
- :type instance: int32_t*
+ :type instance: const int32_t*
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_energy_filter_get_bins(int32_t index, double** energies, int32_t* n)
+
+ Return the bounding energies for an energy filter
+
+ :param int32_t index: Index in the filters array
+ :param double** energies: Bounding energies of the bins for the energy filter
+ :param int32_t* n: Number of energies specified
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_energy_filter_set_bins(int32_t index, int32_t n, const double* energies)
+
+ Set the bounding energies for an energy filter
+
+ :param int32_t index: Index in the filters array
+ :param int32_t n: Number of energies specified
+ :param energies: Bounding energies of the bins for the energy filter
+ :type energies: const double*
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_extend_cells(int32_t n, int32_t* index_start, int32_t* index_end)
+
+ Extend the cells array by n elements
+
+ :param int32_t n: Number of cells to create
+ :param int32_t* index_start: Index of first new cell
+ :param int32_t* index_end: Index of last new cell
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_extend_filters(int32_t n, int32_t* index_start, int32_t* index_end)
+
+ Extend the filters array by n elements
+
+ :param int32_t n: Number of filters to create
+ :param int32_t* index_start: Index of first new filter
+ :param int32_t* index_end: Index of last new filter
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_extend_materials(int32_t n, int32_t* index_start, int32_t* index_end)
+
+ Extend the materials array by n elements
+
+ :param int32_t n: Number of materials to create
+ :param int32_t* index_start: Index of first new material
+ :param int32_t* index_end: Index of last new material
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_extend_sources(int32_t n, int32_t* index_start, int32_t* index_end)
+
+ Extend the external sources array by n elements
+
+ :param int32_t n: Number of sources to create
+ :param int32_t* index_start: Index of first new source
+ :param int32_t* index_end: Index of last new source
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_extend_tallies(int32_t n, int32_t* index_start, int32_t* index_end)
+
+ Extend the tallies array by n elements
+
+ :param int32_t n: Number of tallies to create
+ :param int32_t* index_start: Index of first new tally
+ :param int32_t* index_end: Index of last new tally
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_filter_get_id(int32_t index, int32_t* id)
+
+ Get the ID of a filter
+
+ :param int32_t index: Index in the filters array
+ :param int32_t* id: ID of the filter
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_filter_set_id(int32_t index, int32_t id)
+
+ Set the ID of a filter
+
+ :param int32_t index: Index in the filters array
+ :param int32_t id: ID of the filter
:return: Return status (negative if an error occurred)
:rtype: int
@@ -41,54 +200,41 @@ C API
Determine the ID of the cell/material containing a given point
- :param xyz: Cartesian coordinates
- :type xyz: double[3]
- :param rtype: Which ID to return (1=cell, 2=material)
- :type rtype: int
- :param id: ID of the cell/material found. If a material is requested and the
- point is in a void, the ID is 0. If an error occurs, the ID is -1.
- :type id: int32_t*
- :param instance: If a cell is repetaed in the geometry, the instance of the
- cell that was found and zero otherwise.
- :type instance: int32_t*
+ :param double[3] xyz: Cartesian coordinates
+ :param int rtype: Which ID to return (1=cell, 2=material)
+ :param int32_t* id: ID of the cell/material found. If a material is requested
+ and the point is in a void, the ID is 0. If an error
+ occurs, the ID is -1.
+ :param int32_t* instance: If a cell is repeated in the geometry, the instance
+ of the cell that was found and zero otherwise.
.. c:function:: int openmc_get_cell_index(int32_t id, int32_t* index)
Get the index in the cells array for a cell with a given ID
- :param id: ID of the cell
- :type id: int32_t
- :param index: Index in the cells array
- :type index: int32_t*
+ :param int32_t id: ID of the cell
+ :param int32_t* index: Index in the cells array
:return: Return status (negative if an error occurs)
:rtype: int
-.. c:function:: int openmc_get_keff(double k_combined[])
+.. c:function:: int openmc_get_filter_index(int32_t id, int32_t* index)
- :param k_combined: Combined estimate of k-effective
- :type k_combined: double[2]
+ Get the index in the filters array for a filter with a given ID
+
+ :param int32_t id: ID of the filter
+ :param int32_t* index: Index in the filters array
:return: Return status (negative if an error occurs)
:rtype: int
-.. c:function:: int openmc_get_nuclide_index(char name[], int* index)
+.. c:function:: void openmc_get_filter_next_id(int32_t* id)
- Get the index in the nuclides array for a nuclide with a given name
+ Get an integer ID that has not been used by any filters.
- :param name: Name of the nuclide
- :type name: char[]
- :param index: Index in the nuclides array
- :type index: int*
- :return: Return status (negative if an error occurs)
- :rtype: int
+ :param int32_t* id: Unused integer ID
-.. c:function:: int openmc_get_tally_index(int32_t id, int32_t* index)
+.. c:function:: int openmc_get_keff(double k_combined[2])
- Get the index in the tallies array for a tally with a given ID
-
- :param id: ID of the tally
- :type id: int32_t
- :param index: Index in the tallies array
- :type index: int32_t*
+ :param double[2] k_combined: Combined estimate of k-effective
:return: Return status (negative if an error occurs)
:rtype: int
@@ -96,10 +242,26 @@ C API
Get the index in the materials array for a material with a given ID
- :param id: ID of the material
- :type id: int32_t
- :param index: Index in the materials array
- :type index: int32_t*
+ :param int32_t id: ID of the material
+ :param int32_t* index: Index in the materials array
+ :return: Return status (negative if an error occurs)
+ :rtype: int
+
+.. c:function:: int openmc_get_nuclide_index(char name[], int* index)
+
+ Get the index in the nuclides array for a nuclide with a given name
+
+ :param char[] name: Name of the nuclide
+ :param int* index: Index in the nuclides array
+ :return: Return status (negative if an error occurs)
+ :rtype: int
+
+.. c:function:: int openmc_get_tally_index(int32_t id, int32_t* index)
+
+ Get the index in the tallies array for a tally with a given ID
+
+ :param int32_t id: ID of the tally
+ :param int32_t* index: Index in the tallies array
:return: Return status (negative if an error occurs)
:rtype: int
@@ -107,48 +269,42 @@ C API
Reset tallies, timers, and pseudo-random number generator state
-.. c:function:: void openmc_init(int intracomm)
+.. c:function:: void openmc_init(const int* intracomm)
Initialize OpenMC
- :param intracomm: MPI intracommunicator
- :type intracomm: int
+ :param intracomm: MPI intracommunicator. If MPI is not being used, a null
+ pointer should be passed.
+ :type intracomm: const int*
.. c:function:: int openmc_load_nuclide(char name[])
Load data for a nuclide from the HDF5 data library.
- :param name: Name of the nuclide.
- :type name: char[]
+ :param char[] name: Name of the nuclide.
:return: Return status (negative if an error occurs)
:rtype: int
-.. c:function:: int openmc_material_add_nuclide(int32_t index, char name[], double density)
+.. c:function:: int openmc_material_add_nuclide(int32_t index, const char name[], double density)
Add a nuclide to an existing material. If the nuclide already exists, the
density is overwritten.
- :param index: Index in the materials array
- :type index: int32_t
+ :param int32_t index: Index in the materials array
:param name: Name of the nuclide
- :type name: char[]
- :param density: Density in atom/b-cm
- :type density: double
+ :type name: const char[]
+ :param double density: Density in atom/b-cm
:return: Return status (negative if an error occurs)
:rtype: int
-.. c:function:: int openmc_material_get_densities(int32_t index, int* nuclides[], double* densities[])
+.. c:function:: int openmc_material_get_densities(int32_t index, int** nuclides, double** densities, int* n)
Get density for each nuclide in a material.
- :param index: Index in the materials array
- :type index: int32_t
- :param nuclides: Pointer to array of nuclide indices
- :type nuclides: int**
- :param densities: Pointer to the array of densities
- :type densities: double**
- :param n: Length of the array
- :type n: int
+ :param int32_t index: Index in the materials array
+ :param int** nuclides: Pointer to array of nuclide indices
+ :param double** densities: Pointer to the array of densities
+ :param int* n: Length of the array
:return: Return status (negative if an error occurs)
:rtype: int
@@ -156,10 +312,8 @@ C API
Get the ID of a material
- :param index: Index in the materials array
- :type index: int32_t
- :param id: ID of the material
- :type id: int32_t*
+ :param int32_t index: Index in the materials array
+ :param int32_t* id: ID of the material
:return: Return status (negative if an error occurred)
:rtype: int
@@ -167,34 +321,75 @@ C API
Set the density of a material.
- :param index: Index in the materials array
- :type index: int32_t
- :param density: Density of the material in atom/b-cm
- :type density: double
+ :param int32_t index: Index in the materials array
+ :param double density: Density of the material in atom/b-cm
:return: Return status (negative if an error occurs)
:rtype: int
-.. c:function:: int openmc_material_set_densities(int32_t, n, char* name[], double density[])
+.. c:function:: int openmc_material_set_densities(int32_t index, int n, const char** name, const double density*)
- :param index: Index in the materials array
- :type index: int32_t
- :param n: Length of name/density
- :type n: int
+ :param int32_t index: Index in the materials array
+ :param int n: Length of name/density
:param name: Array of nuclide names
- :type name: char**
+ :type name: const char**
:param density: Array of densities
- :type density: double[]
+ :type density: const double*
:return: Return status (negative if an error occurs)
:rtype: int
-.. c:function:: int openmc_nuclide_name(int index, char* name[])
+.. c:function:: int openmc_material_set_id(int32_t index, int32_t id)
+
+ Set the ID of a material
+
+ :param int32_t index: Index in the materials array
+ :param int32_t id: ID of the material
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_material_filter_get_bins(int32_t index, int32_t** bins, int32_t* n)
+
+ Get the bins for a material filter
+
+ :param int32_t index: Index in the filters array
+ :param int32_t** bins: Index in the materials array for each bin
+ :param int32_t* n: Number of bins
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_material_filter_set_bins(int32_t index, int32_t n, const int32_t* bins)
+
+ Set the bins for a material filter
+
+ :param int32_t index: Index in the filters array
+ :param int32_t n: Number of bins
+ :param bins: Index in the materials array for each bin
+ :type bins: const int32_t*
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_mesh_filter_set_mesh(int32_t index, int32_t index_mesh)
+
+ Set the mesh for a mesh filter
+
+ :param int32_t index: Index in the filters array
+ :param int32_t index_mesh: Index in the meshes array
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_next_batch()
+
+ Simulate next batch of particles. Must be called after openmc_simulation_init().
+
+ :return: Integer indicating whether simulation has finished (negative) or not
+ finished (zero).
+ :rtype: int
+
+.. c:function:: int openmc_nuclide_name(int index, char** name)
Get name of a nuclide
- :param index: Index in the nuclides array
- :type index: int
- :param name: Name of the nuclide
- :type name: char**
+ :param int index: Index in the nuclides array
+ :param char** name: Name of the nuclide
:return: Return status (negative if an error occurs)
:rtype: int
@@ -210,27 +405,84 @@ C API
Run a simulation
+.. c:function:: void openmc_simulation_finalize()
+
+ Finalize a simulation.
+
+.. c:function:: void openmc_simulation_init()
+
+ Initialize a simulation. Must be called after openmc_init().
+
+.. c:function:: int openmc_source_bank(struct Bank** ptr, int64_t* n)
+
+ Return a pointer to the source bank array.
+
+ :param ptr: Pointer to the source bank array
+ :type ptr: struct Bank**
+ :param int64_t* n: Length of the source bank array
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_source_set_strength(int32_t index, double strength)
+
+ Set the strength of an external source
+
+ :param int32_t index: Index in the external source array
+ :param double strength: Source strength
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: void openmc_statepoint_write(const char filename[])
+
+ Write a statepoint file
+
+ :param filename: Name of file to create. If a null pointer is passed, a
+ filename is assigned automatically.
+ :type filename: const char[]
+
.. c:function:: int openmc_tally_get_id(int32_t index, int32_t* id)
Get the ID of a tally
- :param index: Index in the tallies array
- :type index: int32_t
- :param id: ID of the tally
- :type id: int32_t*
+ :param int32_t index: Index in the tallies array
+ :param int32_t* id: ID of the tally
:return: Return status (negative if an error occurred)
:rtype: int
-.. c:function:: int openmc_tally_get_nuclides(int32_t index, int* nuclides[], int* n)
+.. c:function:: int openmc_tally_get_filters(int32_t index, int32_t** indices, int* n)
+
+ Get filters specified in a tally
+
+ :param int32_t index: Index in the tallies array
+ :param int32_t** indices: Array of filter indices
+ :param int* n: Number of filters
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_tally_get_n_realizations(int32_t index, int32_t* n)
+
+ :param int32_t index: Index in the tallies array
+ :param int32_t* n: Number of realizations
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_tally_get_nuclides(int32_t index, int** nuclides, int* n)
Get nuclides specified in a tally
- :param index: Index in the tallies array
- :type index: int32_t
- :param nuclides: Array of nuclide indices
- :type nuclides: int**
- :param n: Number of nuclides
- :type n: int*
+ :param int32_t index: Index in the tallies array
+ :param int** nuclides: Array of nuclide indices
+ :param int* n: Number of nuclides
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_tally_get_scores(int32_t index, int** scores, int* n)
+
+ Get scores specified for a tally
+
+ :param int32_t index: Index in the tallies array
+ :param int** scores: Array of scores
+ :param int* n: Number of scores
:return: Return status (negative if an error occurred)
:rtype: int
@@ -238,24 +490,50 @@ C API
Get a pointer to tally results array.
- :param index: Index in the tallies array
- :type index: int32_t
- :param ptr: Pointer to the results array
- :type ptr: double**
- :param shape_: Shape of the results array
- :type shape_: int[3]
+ :param int32_t index: Index in the tallies array
+ :param double** ptr: Pointer to the results array
+ :param int[3] shape_: Shape of the results array
:return: Return status (negative if an error occurred)
:rtype: int
-.. c:function:: int openmc_tally_set_nuclides(int32_t index, int n, char* nuclides[])
+.. c:function:: int openmc_tally_set_filters(int32_t index, int n, const int32_t* indices)
+
+ Set filters for a tally
+
+ :param int32_t index: Index in the tallies array
+ :param int n: Number of filters
+ :param indices: Array of filter indices
+ :type indices: const int32_t*
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_tally_set_id(int32_t index, int32_t id)
+
+ Set the ID of a tally
+
+ :param int32_t index: Index in the tallies array
+ :param int32_t id: ID of the tally
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_tally_set_nuclides(int32_t index, int n, const char** nuclides)
Set the nuclides for a tally
- :param index: Index in the tallies array
- :type index: int32_t
- :param n: Number of nuclides
- :type n: int
+ :param int32_t index: Index in the tallies array
+ :param int n: Number of nuclides
:param nuclides: Array of nuclide names
- :type nuclides: char**
+ :type nuclides: const char**
+ :return: Return status (negative if an error occurred)
+ :rtype: int
+
+.. c:function:: int openmc_tally_set_scores(int32_t index, int n, const int* scores)
+
+ Set scores for a tally
+
+ :param int32_t index: Index in the tallies array
+ :param int n: Number of scores
+ :param scores: Array of scores
+ :type scores: const int*
:return: Return status (negative if an error occurred)
:rtype: int
diff --git a/docs/source/conf.py b/docs/source/conf.py
index ae8bfe6b5..933031590 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -27,7 +27,7 @@ except ImportError:
MOCK_MODULES = ['numpy', 'numpy.polynomial', 'numpy.polynomial.polynomial',
'numpy.ctypeslib', 'scipy', 'scipy.sparse', 'scipy.interpolate',
'scipy.integrate', 'scipy.optimize', 'scipy.special',
- 'scipy.stats', 'h5py', 'pandas', 'uncertainties',
+ 'scipy.stats', 'h5py', 'pandas', 'uncertainties', 'matplotlib',
'matplotlib.pyplot','openmoc', 'openmc.data.reconstruct']
sys.modules.update((mod_name, MagicMock()) for mod_name in MOCK_MODULES)
@@ -52,6 +52,7 @@ extensions = ['sphinx.ext.autodoc',
'sphinx.ext.autosummary',
'sphinx.ext.intersphinx',
'sphinx.ext.viewcode',
+ 'sphinx.ext.imgconverter',
'sphinx_numfig',
'notebook_sphinxext']
@@ -69,16 +70,16 @@ master_doc = 'index'
# General information about the project.
project = u'OpenMC'
-copyright = u'2011-2017, Massachusetts Institute of Technology'
+copyright = u'2011-2018, Massachusetts Institute of Technology'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
-version = "0.9"
+version = "0.10"
# The full version, including alpha/beta/rc tags.
-release = "0.9.0"
+release = "0.10.0"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
@@ -253,5 +254,5 @@ intersphinx_mapping = {
'python': ('https://docs.python.org/3', None),
'numpy': ('https://docs.scipy.org/doc/numpy/', None),
'pandas': ('http://pandas.pydata.org/pandas-docs/stable/', None),
- 'matplotlib': ('http://matplotlib.org/', None)
+ 'matplotlib': ('https://matplotlib.org/', None)
}
diff --git a/docs/source/devguide/docbuild.rst b/docs/source/devguide/docbuild.rst
index 079a69a2c..5cbbb65bb 100644
--- a/docs/source/devguide/docbuild.rst
+++ b/docs/source/devguide/docbuild.rst
@@ -5,15 +5,16 @@ Building Sphinx Documentation
=============================
In order to build the documentation in the ``docs`` directory, you will need to
-have the Sphinx_ third-party Python package. The easiest way to install Sphinx
-is via pip:
+have the `Sphinx `_ third-party Python
+package. The easiest way to install Sphinx is via pip:
.. code-block:: sh
sudo pip install sphinx
Additionally, you will also need a Sphinx extension for numbering figures. The
-Numfig_ package can be installed directly with pip:
+`Numfig `_ package can be installed
+directly with pip:
.. code-block:: sh
@@ -24,7 +25,7 @@ Building Documentation as a Webpage
-----------------------------------
To build the documentation as a webpage (what appears at
-http://mit-crpg.github.io/openmc), simply go to the ``docs`` directory and run:
+http://openmc.readthedocs.io), simply go to the ``docs`` directory and run:
.. code-block:: sh
@@ -35,21 +36,9 @@ Building Documentation as a PDF
-------------------------------
To build PDF documentation, you will need to have a LaTeX distribution installed
-on your computer as well as Inkscape_, which is used to convert .svg files to
-.pdf files. Inkscape can be installed in a Debian-derivative with:
-
-.. code-block:: sh
-
- sudo apt-get install inkscape
-
-One the pre-requisites are installed, simply go to the ``docs`` directory and
-run:
+on your computer. Once you have a LaTeX distribution installed, simply go to the
+``docs`` directory and run:
.. code-block:: sh
make latexpdf
-
-.. _Sphinx: http://sphinx-doc.org
-.. _sphinxcontrib-tikz: https://bitbucket.org/philexander/tikz
-.. _Numfig: https://pypi.python.org/pypi/sphinx_numfig
-.. _Inkscape: https://inkscape.org
diff --git a/docs/source/license.rst b/docs/source/license.rst
index 1e5f88bdc..e9cba3d8a 100644
--- a/docs/source/license.rst
+++ b/docs/source/license.rst
@@ -4,7 +4,7 @@
License Agreement
=================
-Copyright © 2011-2017 Massachusetts Institute of Technology
+Copyright © 2011-2018 Massachusetts Institute of Technology
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
diff --git a/docs/source/methods/geometry.rst b/docs/source/methods/geometry.rst
index 36c252bb1..4e90dd992 100644
--- a/docs/source/methods/geometry.rst
+++ b/docs/source/methods/geometry.rst
@@ -47,7 +47,7 @@ dividing space into two half-spaces.
.. _fig-halfspace:
-.. figure:: ../_images/halfspace.*
+.. figure:: ../_images/halfspace.svg
:align: center
:figclass: align-center
@@ -63,7 +63,7 @@ defined as the intersection of an ellipse and two planes.
.. _fig-union:
-.. figure:: ../_images/union.*
+.. figure:: ../_images/union.svg
:align: center
:figclass: align-center
@@ -482,7 +482,7 @@ upper-right tiles, respectively.
.. _fig-rect-lat:
-.. figure:: ../_images/rect_lat.*
+.. figure:: ../_images/rect_lat.svg
:align: center
:figclass: align-center
:width: 400px
@@ -521,7 +521,7 @@ right side.
.. _fig-hex-lat:
-.. figure:: ../_images/hex_lat.*
+.. figure:: ../_images/hex_lat.svg
:align: center
:figclass: align-center
:width: 400px
diff --git a/docs/source/pythonapi/capi.rst b/docs/source/pythonapi/capi.rst
index 3c6300bb6..f35823399 100644
--- a/docs/source/pythonapi/capi.rst
+++ b/docs/source/pythonapi/capi.rst
@@ -1,6 +1,6 @@
----------------------------------------------------
-:data:`openmc.capi` -- Python bindings to the C API
----------------------------------------------------
+--------------------------------------------------
+:mod:`openmc.capi` -- Python bindings to the C API
+--------------------------------------------------
.. automodule:: openmc.capi
@@ -12,25 +12,25 @@ Functions
:nosignatures:
:template: myfunction.rst
- openmc.capi.calculate_volumes
- openmc.capi.finalize
- openmc.capi.find_cell
- openmc.capi.find_material
- openmc.capi.hard_reset
- openmc.capi.init
- openmc.capi.iter_batches
- openmc.capi.keff
- openmc.capi.load_nuclide
- openmc.capi.next_batch
- openmc.capi.num_realizations
- openmc.capi.plot_geometry
- openmc.capi.reset
- openmc.capi.run
- openmc.capi.run_in_memory
- openmc.capi.simulation_init
- openmc.capi.simulation_finalize
- openmc.capi.source_bank
- openmc.capi.statepoint_write
+ calculate_volumes
+ finalize
+ find_cell
+ find_material
+ hard_reset
+ init
+ iter_batches
+ keff
+ load_nuclide
+ next_batch
+ num_realizations
+ plot_geometry
+ reset
+ run
+ run_in_memory
+ simulation_init
+ simulation_finalize
+ source_bank
+ statepoint_write
Classes
-------
@@ -40,9 +40,9 @@ Classes
:nosignatures:
:template: myclass.rst
- openmc.capi.Cell
- openmc.capi.EnergyFilter
- openmc.capi.MaterialFilter
- openmc.capi.Material
- openmc.capi.Nuclide
- openmc.capi.Tally
+ Cell
+ EnergyFilter
+ MaterialFilter
+ Material
+ Nuclide
+ Tally
diff --git a/docs/source/quickinstall.rst b/docs/source/quickinstall.rst
index 6bc09c044..97980037c 100644
--- a/docs/source/quickinstall.rst
+++ b/docs/source/quickinstall.rst
@@ -44,13 +44,13 @@ 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:
.. code-block:: sh
- sudo apt-get install openmc
+ sudo apt install openmc
Binary packages from this PPA may exist for earlier versions of Ubuntu, but they
are no longer supported.
@@ -69,9 +69,7 @@ installed directly from the package manager.
.. code-block:: sh
- sudo apt-get install gfortran
- sudo apt-get install cmake
- sudo apt-get install libhdf5-dev
+ sudo apt install gfortran g++ cmake libhdf5-dev
After the packages have been installed, follow the instructions below for
building and installing OpenMC from source.
diff --git a/docs/source/releasenotes.rst b/docs/source/releasenotes.rst
index d647f1ff3..28af52f5f 100644
--- a/docs/source/releasenotes.rst
+++ b/docs/source/releasenotes.rst
@@ -1,59 +1,41 @@
.. _releasenotes:
-==============================
-Release Notes for OpenMC 0.9.0
-==============================
+===============================
+Release Notes for OpenMC 0.10.0
+===============================
.. currentmodule:: openmc
-This release of OpenMC is the first release to use a new native HDF5 cross
-section format rather than ACE format cross sections. Other significant new
-features include a nuclear data interface in the Python API (:mod:`openmc.data`)
-a stochastic volume calculation capability, a random sphere packing algorithm
-that can handle packing fractions up to 60%, and a new XML parser with
-significantly better performance than the parser used previously.
-
-.. caution:: With the new cross section format, the default energy units are now
- **electronvolts (eV)** rather than megaelectronvolts (MeV)! If you
- are specifying an energy filter for a tally, make sure you use
- units of eV now.
+This release of OpenMC includes several new features, performance improvements,
+and bug fixes compared to version 0.9.0. Notably, a C API has been added that
+enables in-memory coupling of neutronics to other physics fields, e.g., burnup
+calculations and thermal-hydraulics. The C API is also backed by Python bindings
+in a new :mod:`openmc.capi` package. Users should be forewarned that the C API
+is still in an experimental state and the interface is likely to undergo changes
+in future versions.
The Python API continues to improve over time; several backwards incompatible
changes were made in the API which users of previous versions should take note
of:
-- Each type of tally filter is now specified with a separate class. For example::
+- To indicate that nuclides in a material should be treated such that elastic
+ scattering is isotropic in the laboratory system, there is a new
+ :attr:`Material.isotropic` property::
- energy_filter = openmc.EnergyFilter([0.0, 0.625, 4.0, 1.0e6, 20.0e6])
+ mat = openmc.Material()
+ mat.add_nuclide('H1', 1.0)
+ mat.isotropic = ['H1']
-- Several attributes of the :class:`Plot` class have changed (``color`` ->
- ``color_by`` and ``col_spec`` > ``colors``). :attr:`Plot.colors` now accepts a
- dictionary mapping :class:`Cell` or :class:`Material` instances to RGB
- 3-tuples or string colors names, e.g.::
+ To treat all nuclides in a material this way, the
+ :meth:`Material.make_isotropic_in_lab` method can still be used.
- plot.colors = {
- fuel: 'yellow',
- water: 'blue'
- }
+- The initializers for :class:`openmc.Intersection` and :class:`openmc.Union`
+ now expect an iterable.
-- ``make_hexagon_region`` is now :func:`get_hexagonal_prism`
-- Several changes in :class:`Settings` attributes:
+- Auto-generated unique IDs for classes now start from 1 rather than 10000.
- - ``weight`` is now set as ``Settings.cutoff['weight']``
- - Shannon entropy is now specified by passing a :class:`openmc.Mesh` to
- :attr:`Settings.entropy_mesh`
- - Uniform fission site method is now specified by passing a
- :class:`openmc.Mesh` to :attr:`Settings.ufs_mesh`
- - All ``sourcepoint_*`` options are now specified in a
- :attr:`Settings.sourcepoint` dictionary
- - Resonance scattering method is now specified as a dictionary in
- :attr:`Settings.resonance_scattering`
- - Multipole is now turned on by setting ``Settings.temperature['multipole'] =
- True``
- - The ``output_path`` attribute is now ``Settings.output['path']``
-
-- All the ``openmc.mgxs.Nu*`` classes are gone. Instead, a ``nu`` argument was
- added to the constructor of the corresponding classes.
+.. attention:: This is the last release of OpenMC that will support Python
+ 2.7. Future releases of OpenMC will require Python 3.4 or later.
-------------------
System Requirements
@@ -69,69 +51,34 @@ problem at hand (mostly on the number of nuclides and tallies in the problem).
New Features
------------
-- Stochastic volume calculations
-- Multi-delayed group cross section generation
-- Ability to calculate multi-group cross sections over meshes
-- Temperature interpolation on cross section data
-- Nuclear data interface in Python API, :mod:`openmc.data`
-- Allow cutoff energy via :attr:`Settings.cutoff`
-- Ability to define fuel by enrichment (see :meth:`Material.add_element`)
-- Random sphere packing for TRISO particle generation,
- :func:`openmc.model.pack_trisos`
-- Critical eigenvalue search, :func:`openmc.search_for_keff`
-- Model container, :class:`openmc.model.Model`
-- In-line plotting in Jupyter, :func:`openmc.plot_inline`
-- Energy function tally filters, :class:`openmc.EnergyFunctionFilter`
-- Replaced FoX XML parser with `pugixml `_
-- Cell/material instance counting, :meth:`Geometry.determine_paths`
-- Differential tallies (see :class:`openmc.TallyDerivative`)
-- Consistent multi-group scattering matrices
-- Improved documentation and new Jupyter notebooks
-- OpenMOC compatibility module, :mod:`openmc.openmoc_compatible`
+- Rotationally-periodic boundary conditions
+- C API (with Python bindings) for in-memory coupling
+- Improved correlation for Uranium enrichment
+- Support for partial S(a,b) tables
+- Improved handling of autogenerated IDs
+- Many performance/memory improvements
---------
Bug Fixes
---------
-- c5df6c_: Fix mesh filter max iterator check
-- 1cfa39_: Reject external source only if 95% of sites are rejected
-- 335359_: Fix bug in plotting meshlines
-- 17c678_: Make sure system_clock uses high-resolution timer
-- 23ec0b_: Fix use of S(a,b) with multipole data
-- 7eefb7_: Fix several bugs in tally module
-- 7880d4_: Allow plotting calculation with no boundary conditions
-- ad2d9f_: Fix filter weight missing when scoring all nuclides
-- 59fdca_: Fix use of source files for fixed source calculations
-- 9eff5b_: Fix thermal scattering bugs
-- 7848a9_: Fix combined k-eff estimator producing NaN
-- f139ce_: Fix printing bug for tallies with AggregateNuclide
-- b8ddfa_: Bugfix for short tracks near tally mesh edges
-- ec3cfb_: Fix inconsistency in filter weights
-- 5e9b06_: Fix XML representation for verbosity
-- c39990_: Fix bug tallying reaction rates with multipole on
-- c6b67e_: Fix fissionable source sampling bug
-- 489540_: Check for void materials in tracklength tallies
-- f0214f_: Fixes/improvements to the ARES algorithm
+- 937469_: Fix energy group sampling for multi-group simulations
+- a149ef_: Ensure mutable objects are not hashable
+- 2c9b21_: Preserve backwards compatibility for generated HDF5 libraries
+- 8047f6_: Handle units of division for tally arithmetic correctly
+- 0beb4c_: Compatibility with newer versions of Pandas
+- f124be_: Fix generating 0K data with openmc.data.njoy module
+- 0c6915_: Bugfix for generating thermal scattering data
+- 61ecb4_: Fix bugs in Python multipole objects
-.. _c5df6c: https://github.com/mit-crpg/openmc/commit/c5df6c
-.. _1cfa39: https://github.com/mit-crpg/openmc/commit/1cfa39
-.. _335359: https://github.com/mit-crpg/openmc/commit/335359
-.. _17c678: https://github.com/mit-crpg/openmc/commit/17c678
-.. _23ec0b: https://github.com/mit-crpg/openmc/commit/23ec0b
-.. _7eefb7: https://github.com/mit-crpg/openmc/commit/7eefb7
-.. _7880d4: https://github.com/mit-crpg/openmc/commit/7880d4
-.. _ad2d9f: https://github.com/mit-crpg/openmc/commit/ad2d9f
-.. _59fdca: https://github.com/mit-crpg/openmc/commit/59fdca
-.. _9eff5b: https://github.com/mit-crpg/openmc/commit/9eff5b
-.. _7848a9: https://github.com/mit-crpg/openmc/commit/7848a9
-.. _f139ce: https://github.com/mit-crpg/openmc/commit/f139ce
-.. _b8ddfa: https://github.com/mit-crpg/openmc/commit/b8ddfa
-.. _ec3cfb: https://github.com/mit-crpg/openmc/commit/ec3cfb
-.. _5e9b06: https://github.com/mit-crpg/openmc/commit/5e9b06
-.. _c39990: https://github.com/mit-crpg/openmc/commit/c39990
-.. _c6b67e: https://github.com/mit-crpg/openmc/commit/c6b67e
-.. _489540: https://github.com/mit-crpg/openmc/commit/489540
-.. _f0214f: https://github.com/mit-crpg/openmc/commit/f0214f
+.. _937469: https://github.com/mit-crpg/openmc/commit/937469
+.. _a149ef: https://github.com/mit-crpg/openmc/commit/a149ef
+.. _2c9b21: https://github.com/mit-crpg/openmc/commit/2c9b21
+.. _8047f6: https://github.com/mit-crpg/openmc/commit/8047f6
+.. _0beb4c: https://github.com/mit-crpg/openmc/commit/0beb4c
+.. _f124be: https://github.com/mit-crpg/openmc/commit/f124be
+.. _0c6915: https://github.com/mit-crpg/openmc/commit/0c6915
+.. _61ecb4: https://github.com/mit-crpg/openmc/commit/61ecb4
------------
Contributors
@@ -139,14 +86,19 @@ Contributors
This release contains new contributions from the following people:
+- `Brody Bassett `_
- `Will Boyd `_
+- `Guillaume Giudicelli `_
+- `Brittany Grayson `_
- `Sterling Harper `_
-- `Qingming He <906459647@qq.com>`_
- `Colin Josey `_
- `Travis Labossiere-Hickman `_
- `Jingang Liang `_
+- `Alex Lindsay `_
+- `Johnny Liu `_
- `Amanda Lund `_
+- `April Novak `_
- `Adam Nelson `_
+- `Jose Salcedo Perez `_
- `Paul Romano `_
- `Sam Shaner `_
-- `Jon Walsh `_
diff --git a/docs/source/usersguide/cross_sections.rst b/docs/source/usersguide/cross_sections.rst
index 48cccfb67..058daf23a 100644
--- a/docs/source/usersguide/cross_sections.rst
+++ b/docs/source/usersguide/cross_sections.rst
@@ -222,6 +222,13 @@ named ``njoy`` available on your path. If you want to explicitly name the
executable, the ``njoy_exec`` optional argument can be used. Additionally, the
``stdout`` argument can be used to show the progress of the NJOY run.
+To generate a thermal scattering file, you need to specify both an ENDF incident
+neutron sub-library file as well as a thermal neutron scattering sub-library
+file; for example::
+
+ light_water = openmc.data.ThermalScattering.from_njoy(
+ 'neutrons/n-001_H_001.endf', 'thermal_scatt/tsl-HinH2O.endf')
+
Once you have instances of :class:`IncidentNeutron` and
:class:`ThermalScattering`, a library can be created by using the
``export_to_hdf5()`` methods and the :class:`DataLibrary` class as described in
diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst
index 09fc4520c..b59572923 100644
--- a/docs/source/usersguide/install.rst
+++ b/docs/source/usersguide/install.rst
@@ -95,10 +95,10 @@ Prerequisites
* A C/C++ compiler such as gcc_
- OpenMC includes two libraries written in C and C++, respectively. These
- libraries have been tested to work with a wide variety of compilers. If
- you are using a Debian-based distribution, you can install the g++
- compiler using the following command::
+ OpenMC includes various source files written in C and C++,
+ respectively. These source files have been tested to work with a wide
+ variety of compilers. If you are using a Debian-based distribution, you
+ can install the g++ compiler using the following command::
sudo apt install g++
@@ -113,34 +113,38 @@ Prerequisites
* HDF5_ Library for portable binary output format
- OpenMC uses HDF5 for binary output files. As such, you will need to have
- HDF5 installed on your computer. The installed version will need to have
- been compiled with the same compiler you intend to compile OpenMC with. If
- you are using HDF5 in conjunction with MPI, we recommend that your HDF5
- installation be built with parallel I/O features. An example of
- configuring HDF5_ is listed below::
+ OpenMC uses HDF5 for many input/output files. As such, you will need to
+ have HDF5 installed on your computer. The installed version will need to
+ have been compiled with the same compiler you intend to compile OpenMC
+ with. If compiling with gcc from the APT repositories, users of Debian
+ derivatives can install HDF5 and/or parallel HDF5 through the package
+ manager::
- FC=/opt/mpich/3.1/bin/mpif90 CC=/opt/mpich/3.1/bin/mpicc \
- ./configure --prefix=/opt/hdf5/1.8.12 --enable-fortran \
- --enable-fortran2003 --enable-parallel
+ sudo apt install libhdf5-dev
+
+ Parallel versions of the HDF5 library called `libhdf5-mpich-dev` and
+ `libhdf5-openmpi-dev` exist which are built against MPICH and OpenMPI,
+ respectively. To link against a parallel HDF5 library, make sure to set
+ the HDF5_PREFER_PARALLEL CMake option, e.g.::
+
+ FC=mpifort.mpich cmake -DHDF5_PREFER_PARALLEL=on ..
+
+ Note that the exact package names may vary depending on your particular
+ distribution and version.
+
+ If you are using building HDF5 from source in conjunction with MPI, we
+ recommend that your HDF5 installation be built with parallel I/O
+ features. An example of configuring HDF5_ is listed below::
+
+ FC=mpifort ./configure --enable-fortran --enable-parallel
You may omit ``--enable-parallel`` if you want to compile HDF5_ in serial.
.. important::
- OpenMC uses various parts of the HDF5 Fortran 2003 API; as such you
- must include ``--enable-fortran2003`` or else OpenMC will not be able
- to compile.
-
- On Debian derivatives, HDF5 and/or parallel HDF5 can be installed through
- the APT package manager:
-
- .. code-block:: sh
-
- sudo apt install libhdf5-dev hdf5-helpers
-
- Note that the exact package names may vary depending on your particular
- distribution and version.
+ If you are building HDF5 version 1.8.x or earlier, you must include
+ ``--enable-fortran2003`` when configuring HDF5 or else OpenMC will not
+ be able to compile.
.. admonition:: Optional
:class: note
@@ -163,7 +167,7 @@ Prerequisites
.. _CMake: http://www.cmake.org
.. _OpenMPI: http://www.open-mpi.org
.. _MPICH: http://www.mpich.org
-.. _HDF5: http://www.hdfgroup.org/HDF5/
+.. _HDF5: https://www.hdfgroup.org/solutions/hdf5/
Obtaining the Source
--------------------
@@ -358,26 +362,9 @@ workarounds.
Testing Build
-------------
-If you have ENDF/B-VII.1 cross sections from NNDC_ you can test your build.
-Make sure the **OPENMC_CROSS_SECTIONS** environmental variable is set to the
-*cross_sections.xml* file in the *data/nndc* directory.
-There are two ways to run tests. The first is to use the Makefile present in
-the source directory and run the following:
-
-.. code-block:: sh
-
- make test
-
-If you want more options for testing you can use ctest_ command. For example,
-if we wanted to run only the plot tests with 4 processors, we run:
-
-.. code-block:: sh
-
- cd build
- ctest -j 4 -R plot
-
-If you want to run the full test suite with different build options please
-refer to our :ref:`test suite` documentation.
+To run the test suite, you will first need to download a pre-generated cross
+section library along with windowed multipole data. Please refer to our
+:ref:`test suite` documentation for further details.
--------------------
Python Prerequisites
diff --git a/docs/source/usersguide/settings.rst b/docs/source/usersguide/settings.rst
index 6e49777f0..978649a2f 100644
--- a/docs/source/usersguide/settings.rst
+++ b/docs/source/usersguide/settings.rst
@@ -39,7 +39,7 @@ be specified:
'plot'
Generates slice or voxel plots (see :ref:`usersguide_plots`).
-'particle_restart'
+'particle restart'
Simulate a single source particle using a particle restart file.
diff --git a/include/openmc.h b/include/openmc.h
new file mode 100644
index 000000000..bb04907a5
--- /dev/null
+++ b/include/openmc.h
@@ -0,0 +1,116 @@
+#ifndef OPENMC_H
+#define OPENMC_H
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ struct Bank {
+ double wgt;
+ double xyz[3];
+ double uvw[3];
+ double E;
+ int delayed_group;
+ };
+
+ void openmc_calculate_voumes();
+ int openmc_cell_get_fill(int32_t index, int* type, int32_t** indices, int32_t* n);
+ int openmc_cell_get_id(int32_t index, int32_t* id);
+ int openmc_cell_set_fill(int32_t index, int type, int32_t n, const int32_t* indices);
+ int openmc_cell_set_id(int32_t index, int32_t id);
+ int openmc_cell_set_temperature(int32_t index, double T, const int32_t* instance);
+ int openmc_energy_filter_get_bins(int32_t index, double** energies, int32_t* n);
+ int openmc_energy_filter_set_bins(int32_t index, int32_t n, const double* energies);
+ int openmc_extend_cells(int32_t n, int32_t* index_start, int32_t* index_end);
+ int openmc_extend_filters(int32_t n, int32_t* index_start, int32_t* index_end);
+ int openmc_extend_materials(int32_t n, int32_t* index_start, int32_t* index_end);
+ int openmc_extend_sources(int32_t n, int32_t* index_start, int32_t* index_end);
+ int openmc_extend_tallies(int32_t n, int32_t* index_start, int32_t* index_end);
+ int openmc_filter_get_id(int32_t index, int32_t* id);
+ int openmc_filter_set_id(int32_t index, int32_t id);
+ void openmc_finalize();
+ int openmc_find(double* xyz, int rtype, int32_t* id, int32_t* instance);
+ int openmc_get_cell_index(int32_t id, int32_t* index);
+ int openmc_get_filter_index(int32_t id, int32_t* index);
+ void openmc_get_filter_next_id(int32_t* id);
+ int openmc_get_keff(double k_combined[]);
+ int openmc_get_material_index(int32_t id, int32_t* index);
+ int openmc_get_nuclide_index(char name[], int* index);
+ int openmc_get_tally_index(int32_t id, int32_t* index);
+ void openmc_hard_reset();
+ void openmc_init(const int* intracomm);
+ int openmc_load_nuclide(char name[]);
+ int openmc_material_add_nuclide(int32_t index, const char name[], double density);
+ int openmc_material_get_densities(int32_t index, int** nuclides, double** densities, int* n);
+ int openmc_material_get_id(int32_t index, int32_t* id);
+ int openmc_material_set_density(int32_t index, double density);
+ int openmc_material_set_densities(int32_t index, int n, const char** name, const double* density);
+ int openmc_material_set_id(int32_t index, int32_t id);
+ int openmc_material_filter_get_bins(int32_t index, int32_t** bins, int32_t* n);
+ int openmc_material_filter_set_bins(int32_t index, int32_t n, const int32_t* bins);
+ int openmc_mesh_filter_set_mesh(int32_t index, int32_t index_mesh);
+ int openmc_next_batch();
+ int openmc_nuclide_name(int index, char** name);
+ void openmc_plot_geometry();
+ void openmc_reset();
+ void openmc_run();
+ void openmc_simulation_finalize();
+ void openmc_simulation_init();
+ int openmc_source_bank(struct Bank** ptr, int64_t* n);
+ int openmc_source_set_strength(int32_t index, double strength);
+ void openmc_statepoint_write(const char filename[]);
+ int openmc_tally_get_id(int32_t index, int32_t* id);
+ int openmc_tally_get_filters(int32_t index, int32_t** indices, int* n);
+ int openmc_tally_get_n_realizations(int32_t index, int32_t* n);
+ int openmc_tally_get_nuclides(int32_t index, int** nuclides, int* n);
+ int openmc_tally_get_scores(int32_t index, int** scores, int* n);
+ int openmc_tally_results(int32_t index, double** ptr, int shape_[3]);
+ int openmc_tally_set_filters(int32_t index, int n, const int32_t* indices);
+ int openmc_tally_set_id(int32_t index, int32_t id);
+ int openmc_tally_set_nuclides(int32_t index, int n, const char** nuclides);
+ int openmc_tally_set_scores(int32_t index, int n, const int* scores);
+
+ // Error codes
+ extern int E_UNASSIGNED;
+ extern int E_ALLOCATE;
+ extern int E_OUT_OF_BOUNDS;
+ extern int E_INVALID_SIZE;
+ extern int E_INVALID_ARGUMENT;
+ extern int E_INVALID_TYPE;
+ extern int E_INVALID_ID;
+ extern int E_GEOMETRY;
+ extern int E_DATA;
+ extern int E_PHYSICS;
+ extern int E_WARNING;
+
+ // Global variables
+ extern char openmc_err_msg[256];
+ extern double keff;
+ extern double keff_std;
+ extern int32_t n_batches;
+ extern int32_t n_cells;
+ extern int32_t n_filters;
+ extern int32_t n_inactive;
+ extern int32_t n_lattices;
+ extern int32_t n_materials;
+ extern int32_t n_meshes;
+ extern int64_t n_particles;
+ extern int32_t n_plots;
+ extern int32_t n_realizations;
+ extern int32_t n_sab_tables;
+ extern int32_t n_sources;
+ extern int32_t n_surfaces;
+ extern int32_t n_tallies;
+ extern int32_t n_universes;
+ extern int run_mode;
+ extern bool simulation_initialized;
+ extern int verbosity;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // OPENMC_H
diff --git a/man/man1/openmc.1 b/man/man1/openmc.1
index 8384da9a8..f49d80bad 100644
--- a/man/man1/openmc.1
+++ b/man/man1/openmc.1
@@ -59,7 +59,7 @@ Indicates the default path to a directory containing windowed multipole data if
the user has not specified the tag in
.I materials.xml\fP.
.SH LICENSE
-Copyright \(co 2011-2017 Massachusetts Institute of Technology.
+Copyright \(co 2011-2018 Massachusetts Institute of Technology.
.PP
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
diff --git a/openmc/__init__.py b/openmc/__init__.py
index 13dac05e7..9b13fa692 100644
--- a/openmc/__init__.py
+++ b/openmc/__init__.py
@@ -32,4 +32,4 @@ from . import examples
# Import a few convencience functions that used to be here
from openmc.model import get_rectangular_prism, get_hexagonal_prism
-__version__ = '0.9.0'
+__version__ = '0.10.0'
diff --git a/openmc/capi/cell.py b/openmc/capi/cell.py
index f13f64a04..0c4b72c74 100644
--- a/openmc/capi/cell.py
+++ b/openmc/capi/cell.py
@@ -21,6 +21,8 @@ _dll.openmc_cell_get_id.restype = c_int
_dll.openmc_cell_get_id.errcheck = _error_handler
_dll.openmc_cell_get_fill.argtypes = [
c_int32, POINTER(c_int), POINTER(POINTER(c_int32)), POINTER(c_int32)]
+_dll.openmc_cell_get_fill.restype = c_int
+_dll.openmc_cell_get_fill.errcheck = _error_handler
_dll.openmc_cell_set_fill.argtypes = [
c_int32, c_int, c_int32, POINTER(c_int32)]
_dll.openmc_cell_set_fill.restype = c_int
diff --git a/src/api.F90 b/src/api.F90
index 326b755b6..eb9a99695 100644
--- a/src/api.F90
+++ b/src/api.F90
@@ -4,6 +4,7 @@ module openmc_api
use hdf5, only: HID_T, h5tclose_f, h5close_f
+ use bank_header, only: openmc_source_bank
use constants, only: K_BOLTZMANN
use eigenvalue, only: k_sum, openmc_get_keff
use error
@@ -20,11 +21,13 @@ module openmc_api
use random_lcg, only: seed, openmc_set_seed
use settings
use simulation_header
+ use source_header, only: openmc_extend_sources, openmc_source_set_strength
+ use state_point, only: openmc_statepoint_write
use tally_header
use tally_filter_header
use tally_filter
use tally, only: openmc_tally_set_type
- use simulation, only: openmc_run
+ use simulation
use string, only: to_f_string
use timer_header
use volume_calc, only: openmc_calculate_volumes
@@ -43,6 +46,7 @@ module openmc_api
public :: openmc_extend_filters
public :: openmc_extend_cells
public :: openmc_extend_materials
+ public :: openmc_extend_sources
public :: openmc_extend_tallies
public :: openmc_filter_get_id
public :: openmc_filter_get_type
@@ -57,6 +61,7 @@ module openmc_api
public :: openmc_get_material_index
public :: openmc_get_nuclide_index
public :: openmc_get_tally_index
+ public :: openmc_global_tallies
public :: openmc_hard_reset
public :: openmc_init
public :: openmc_load_nuclide
@@ -69,12 +74,18 @@ module openmc_api
public :: openmc_material_filter_get_bins
public :: openmc_material_filter_set_bins
public :: openmc_mesh_filter_set_mesh
+ public :: openmc_next_batch
public :: openmc_nuclide_name
public :: openmc_plot_geometry
public :: openmc_reset
public :: openmc_run
+ public :: openmc_simulation_finalize
+ public :: openmc_simulation_init
+ public :: openmc_source_bank
+ public :: openmc_source_set_strength
public :: openmc_tally_get_id
public :: openmc_tally_get_filters
+ public :: openmc_tally_get_n_realizations
public :: openmc_tally_get_nuclides
public :: openmc_tally_get_scores
public :: openmc_tally_results
diff --git a/src/constants.F90 b/src/constants.F90
index 3968781e9..331a644f0 100644
--- a/src/constants.F90
+++ b/src/constants.F90
@@ -9,7 +9,7 @@ module constants
! OpenMC major, minor, and release numbers
integer, parameter :: VERSION_MAJOR = 0
- integer, parameter :: VERSION_MINOR = 9
+ integer, parameter :: VERSION_MINOR = 10
integer, parameter :: VERSION_RELEASE = 0
integer, parameter :: &
VERSION(3) = [VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE]
diff --git a/src/geometry_header.F90 b/src/geometry_header.F90
index b827c055c..e71916d09 100644
--- a/src/geometry_header.F90
+++ b/src/geometry_header.F90
@@ -524,7 +524,7 @@ contains
function openmc_cell_set_fill(index, type, n, indices) result(err) bind(C)
- ! Set the fill for a fill
+ ! Set the fill for a cell
integer(C_INT32_T), value, intent(in) :: index ! index in cells
integer(C_INT), value, intent(in) :: type
integer(c_INT32_T), value, intent(in) :: n
diff --git a/src/output.F90 b/src/output.F90
index d09beda1b..9a144721d 100644
--- a/src/output.F90
+++ b/src/output.F90
@@ -76,10 +76,10 @@ contains
write(UNIT=OUTPUT_UNIT, FMT=*) &
' | The OpenMC Monte Carlo Code'
write(UNIT=OUTPUT_UNIT, FMT=*) &
- ' Copyright | 2011-2017 Massachusetts Institute of Technology'
+ ' Copyright | 2011-2018 Massachusetts Institute of Technology'
write(UNIT=OUTPUT_UNIT, FMT=*) &
' License | http://openmc.readthedocs.io/en/latest/license.html'
- write(UNIT=OUTPUT_UNIT, FMT='(11X,"Version | ",I1,".",I1,".",I1)') &
+ write(UNIT=OUTPUT_UNIT, FMT='(11X,"Version | ",I1,".",I2,".",I1)') &
VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE
#ifdef GIT_SHA1
write(UNIT=OUTPUT_UNIT, FMT='(10X,"Git SHA1 | ",A)') GIT_SHA1
diff --git a/src/simulation.F90 b/src/simulation.F90
index e8997fc9b..026c9c61e 100644
--- a/src/simulation.F90
+++ b/src/simulation.F90
@@ -43,6 +43,7 @@ module simulation
implicit none
private
+ public :: openmc_next_batch
public :: openmc_run
public :: openmc_simulation_init
public :: openmc_simulation_finalize
diff --git a/src/source_header.F90 b/src/source_header.F90
index fca05d816..da15046ab 100644
--- a/src/source_header.F90
+++ b/src/source_header.F90
@@ -17,6 +17,8 @@ module source_header
implicit none
private
public :: free_memory_source
+ public :: openmc_extend_sources
+ public :: openmc_source_set_strength
integer :: n_accept = 0 ! Number of samples accepted
integer :: n_reject = 0 ! Number of samples rejected
diff --git a/src/tallies/tally_header.F90 b/src/tallies/tally_header.F90
index fa397632f..474e77d1c 100644
--- a/src/tallies/tally_header.F90
+++ b/src/tallies/tally_header.F90
@@ -26,6 +26,7 @@ module tally_header
public :: openmc_global_tallies
public :: openmc_tally_get_id
public :: openmc_tally_get_filters
+ public :: openmc_tally_get_n_realizations
public :: openmc_tally_get_nuclides
public :: openmc_tally_get_scores
public :: openmc_tally_results