Skip to content

Commit

Permalink
cosmetic changes and content edits
Browse files Browse the repository at this point in the history
  • Loading branch information
bennibbelink committed Aug 3, 2024
1 parent a02f2d6 commit 6e0fd66
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 35 deletions.
73 changes: 39 additions & 34 deletions source/arche/constants.rst
Original file line number Diff line number Diff line change
@@ -1,55 +1,59 @@
.. _constants:

Using standard constants in |Cyclus|
|Cyclus| Defined Constants
======================================

Cyclus defines a set of constants to help standardize archetype properties and prevent
unexpected simulation failures. These constants are determined at build time and may
depend on your system's architecture (e.g. for maximum integer size). This set is
defined twice, with identical values existing in the C++ namespace and Python library.
depend on your system's architecture (specifically the size of an ``int`` type, in bytes).
This set is defined twice, with identical values existing in the C++ namespace and Python library.
The numeric values are as follows:

.. list-table:: Cyclus constant values
:widths: 25 25 25
:header-rows: 1
.. list-table::
:width: 100%
:widths: 25 75
:header-rows: 1

* - Name
- Value
* - CY_LARGE_INT
- 2147483647 (on most 64-bit machines; this should be equal to std::numeric_limits<int>::max())
* - CY_LARGE_DOUBLE
- 1e299
* - CY_NEAR_ZERO
- 1e-08
* - Name
- Value
* - CY_LARGE_INT
- | 2147483647 on most 64-bit machines.
| This should be equal to ``std::numeric_limits<int>::max()``.
* - CY_LARGE_DOUBLE
- 1e299
* - CY_NEAR_ZERO
- 1e-08

Accessing constants in C++
--------------------------

The constants are defined in ``cyclus/cyc_limits.h`` and exist in the ``cyclus::`` namespace. They can be
included and used as so:
used in this way:

.. code-block:: cpp
#include "cyclus.h"
...
double my_large_double = cyclus::CY_LARGE_DOUBLE;
...
#include "cyclus.h"
...
int my_large_int = cyclus::CY_LARGE_INT;
...
Accessing constants in Python
-----------------------------

The constants are defined in the ``cyclus.system`` module and can be imported and used as long as
the cyclus package is in your Python path:
the ``cyclus`` package is in your Python path:

.. code-block:: python
from cyclus.system import CY_LARGE_DOUBLE, CY_LARGE_INT, CY_NEAR_ZERO
...
my_small_value = CY_NEAR_ZERO
...
from cyclus.system import CY_LARGE_DOUBLE, CY_LARGE_INT, CY_NEAR_ZERO
...
my_small_value = CY_NEAR_ZERO
...
Using constants with the Cyclus Preprocessor
--------------------------------------------

Many archetype developers utilize the Cyclus Preprocessor and ``#pragma cyclus`` to
Many archetype developers utilize the :ref:`Cyclus Preprocessor <cycpp>` and ``#pragma cyclus`` to
define state variables within an archetype. The preprocessor allows any arbitrary
Python code to be executed via ``#pragma cyclus exec``. Thus one can import the
set of Python constants into the global namespace that agent annotations are processed,
Expand All @@ -58,14 +62,15 @@ following ``#pragma cyclus var`` is evaluated by the Python interpreter, so you
treat it as if it were Python code.

.. code-block:: cpp
#pragma cyclus exec from cyclus.system import CY_LARGE_DOUBLE
...
#pragma cyclus exec from cyclus.system import CY_LARGE_DOUBLE
...
#pragma cyclus var {"default": CY_LARGE_DOUBLE, \
"tooltip": "sink maximum inventory size", \
"uilabel": "Maximum Inventory", \
"uitype": "range", \
"range": [0.0, CY_LARGE_DOUBLE], \
"doc": "total maximum inventory size of sink facility"}
double max_inv_size;
#pragma cyclus var {"default": CY_LARGE_DOUBLE, \
"tooltip": "sink maximum inventory size", \
"uilabel": "Maximum Inventory", \
"uitype": "range", \
"range": [0.0, CY_LARGE_DOUBLE], \
"doc": "total maximum inventory size of sink facility"}
double max_inv_size;
2 changes: 1 addition & 1 deletion source/arche/tutorial_cpp/state_var.rst
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ stored and the input/output commodity names.
.. note::
Sometimes you may wish to include numeric values in your state variable definitions,
such as a default value or range of possible values. Cyclus provides a set of constants
that might be of use, see :ref:`constants` for more information.
that might be of use, see :ref:`documentation on standard constants <constants>` for more information.

Build and Install the Modified Module
---------------------------------------
Expand Down

0 comments on commit 6e0fd66

Please sign in to comment.