The core of the Cyclus nuclear fuel cycle simulator from the University of Wisconsin - Madison is intended to be a simulation framework upon which to develop innovative fuel cycle simulations.
To see user and developer documentation for this code, please visit the Cyclus Homepage.
Table of Contents
In order to facilitate future compatibility with multiple platforms,
Cyclus is built using CMake
. A full list of the Cyclus package
dependencies is shown below:
Package | Minimum Version |
---|---|
CMake |
3.16.3 |
pkg-config |
0.29.1 |
boost |
1.71.0 |
libxml2 |
2.9.10 |
libxml++ |
2.40.1 |
python |
3.8.10 |
sqlite3 |
3.31.1 |
HDF5 |
1.10.4 |
LAPACK |
3.9.0 |
And a few optional dependencies:
Package | Minimum Version | Purpose | Notes |
---|---|---|---|
git |
2.32.0 | Enables access to source code via Github | N/A |
Coin-Cbc |
2.10.3 | Enables use of Branch-and-Cut solver | Cyclus must be built with --allow-milps flag |
Coin-Clp |
1.17.5 | Enables use of Linear Programming solver | Cyclus must be built with --allow-milps flag |
doxygen |
1.7.6.1 | Building documentation | N/A |
TCMmalloc |
any | Improves performance | Only used if Cython is not present |
Cython |
0.29 | Enables use of Python agents and input files | N/A |
Jinja2 |
2.10.1 | Enables use of Python agents and input files | Only needed if Cython is installed |
NumPy |
1.9 | Enables use of Python agents and input files | Only needed if Cython is installed |
pandas |
0.25.3 | Enables use of Python agents and input files | Only needed if Cython is installed |
pip |
20.0.2 | Enables use of Python agents and input files | Only needed if Cython is installed |
Note that the Debian/Ubuntu package ``libtcmalloc`` is NOT discovered correctly by our build system. Instead use ``libgoogle-perftools-dev``.
Cyclus dependencies can either be installed manually or using an operating system's package manager.
This guide assumes that the user has root access (to issue sudo
commands) and
access to a package manager or has some other suitable method of automatically
installing established libraries. This process was tested using a fresh install
of Ubuntu versions 20.04 and 22.04, using apt-get
as the package
manager (scroll down further for Mac OSX instructions).
The command to install a dependency takes the form of:
sudo apt-get install package
where "package" is replaced by the correct package name. The minimal list of required library package names is:
- make
- cmake
- pkg-config
- libboost-all-dev (see note below)
- libxml2-dev
- libxml++2.6-dev
- python3-dev
- libsqlite3-dev
- libhdf5-dev
- liblapack-dev
and (optionally):
- doxygen
- libgoogle-perftools-dev
- coinor-libcbc-dev
- coinor-libcoinutils-dev
- coinor-libosi-dev
- coinor-libclp-dev
- python3-tables
- python3-pandas
- python3-numpy
- python3-pytest
- python3-jinja2
- python3-pip
- cython3 (see note below)
For example, in order to install libxml++ (and libxml2) on your system, type:
sudo apt-get install libxml++2.6-dev
If you'd prefer to copy/paste, the following line will install all required Cyclus dependencies:
sudo apt-get install -y cmake make pkg-config libboost-all-dev libxml2-dev libxml++2.6-dev \
python3-dev libsqlite3-dev libhdf5-dev liblapack-dev
And to install all Cyclus dependencies (required and optional):
sudo apt-get install -y cmake make pkg-config libboost-all-dev libxml2-dev libxml++2.6-dev \
python3-dev libsqlite3-dev libhdf5-dev liblapack-dev coinor-libcbc-dev coinor-libcoinutils-dev \
coinor-libosi-dev coinor-libclp-dev coinor-libcgl-dev doxygen libgoogle-perftools-dev python3-tables \
python3-pandas python3-numpy python3-pytest python3-jinja2 cython3
To determine which version of Python is already installed on your computer, run:
python -V
Despite having installed python3, Ubuntu installations may still point at python2 by default. So Python -V can return a version of python that is not preferred. In that case the python version can be changed system-wide with the update-alternatives command.
First, you can list alternatives with the following command:
update-alternatives --list python
Ubuntu may not list any alternatives. To make Ubuntu aware of python 3, use:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
From now on, to switch between different versions, use:
sudo update-alternatives --config python
Even if you only have a single python installation, you may have to use update-alternatives to point python at the correct version to avoid build errors.
Check your current python version with the following command:
python --version
Then make Ubuntu aware of your current python version. Run the following command, using the python version you just checked. The following command uses version python3.8 as an example and will fail if you do not replace 3.8 with your own version number.
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2
If you get an error related to an old Cython version, then this may be because the Debian stable version of Cython is 0.23.4. However, Cyclus requires 0.29.0+. To install the latest cython version, please visit the Cython Documentation.
The libboost-all-dev
used above will install the entire Boost library, which
is not strictly needed. We currently depend on a small subset of the Boost
libraries:
- libboost-program-options-dev
- libboost-system-dev
- libboost-filesystem-dev
However, it is possible (likely) that additional Boost libraries will be used
because they are an industry standard. Accordingly, we suggest simply installing
libboost-all-dev
to limit any headaches due to possible dependency additions
in the future.
Cyclus archetype development is not fully supported on Mac. Nonetheless, because there are some use cases which require installation from source, we have compiled a list of instructions that should be successful. Use a Mac platform at your own risk; we strongly recommend Linux as a primary development environment.
This guide assumes that the user has root access (to issue sudo
commands) and
access to a package manager or has some other suitable method of automatically
installing established libraries. This process was tested using a fresh install
of 10.11.6 (El Capitan) using macports
as the package
manager. Macports installs packages in /opt/local
. If installing to a
different location, (i.e. /usr/local
) change paths in the following
instructions accordingly. If you use homebrew
, try the following instructions
with brew commands in place of the port commands.
The command to install a dependency takes the form of:
sudo port install package
where "package" is replaced by the correct package name. The minimal list of required library package names is:
- cmake
- boost
- hdf5
- libxml2
- libxmlxx2
- sqlite3
- doxygen
- glibmm
Then install Coin-Cbc from source. They can be downloaded to any directory on your computer:
Coin-Cbc: Download and build using the svn command in the terminal:
svn co https://projects.coin-or.org/svn/Cbc/stable/2.8 Coin-Cbc
cd Coin-Cbc/
mkdir build
cd build/
../configure --prefix=/opt/local
make
sudo make install
Finally, update your path and the following environment variables in your
~/.profile
(or ~/.bashrc
) file:
export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:/opt/local:$DYLD_FALLBACK_LIBRARY_PATH
export CMAKE_MODULE_PATH=/opt/local/include:$CMAKE_MODULE_PATH
export CMAKE_PREFIX_PATH=/opt/local:$CMAKE_PREFIX_PATH
# add to PATH:
export PATH=${HDF5_DIR}:/opt/local/bin:${HOME}/.local/bin:$PATH