Skip to content

Commit

Permalink
Updated documentation, increment version
Browse files Browse the repository at this point in the history
  • Loading branch information
reverendbedford committed Oct 13, 2021
1 parent 25367a4 commit 2fbce35
Show file tree
Hide file tree
Showing 13 changed files with 86 additions and 6,391 deletions.
2 changes: 1 addition & 1 deletion doc/sphinx/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
author = 'Argonne National Laboratory'

# The full version, including alpha/beta/rc tags
release = '1.1.0'
release = '1.2.0'


# -- General configuration ---------------------------------------------------
Expand Down
21 changes: 11 additions & 10 deletions doc/sphinx/source/installation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,37 @@ Installing srlife

srlife is available in the `pypi <https://pypi.org/>`_ package repository
and can be installed with `pip`. srlife uses python3 and requires several
additional python packages, all of which are available pypi. The only
additional requirement are cmake, the python development headers, and
development version of BLAS and LAPACK. All of these additional requirements
are needed to compile `neml <https://github.com/Argonne-National-Laboratory/neml>`_, which provides the nonlinear constitutive model response required for
the srlife analysis modules.
additional python packages, all of which are available pypi.

srlife is compatible with python3 only, specifically python versions 3.6, 3.7,
3.8, and 3.9

Install using the pip package manager
-------------------------------------

The easiest way to install the package is to use the `pip` package manager, installing srlife from pypi automatically. However, the neml source package requires compiling the module from source, which still has a few system-level dependencies.
The easiest way to install the package is to use the `pip` package manager, installing srlife from pypi automatically.

Ubuntu Linux 18.04
""""""""""""""""""

.. code-block:: console
sudo apt install build-essential cmake libblas-dev liblapack-dev python3-dev python3-setuptools python3-pip python3-wheel
sudo pip3 install srlife
pip install srlife
MacOS Sierra 10.14 Mojave
"""""""""""""""""""""""""

It is easiest to install srlife using a homebrew version of python, not the
default system python.

Go to `brew.sh <https://brew.sh/>`_ and follow the directions to install homebrew.

Open up a terminal and run:

.. code-block:: console
brew install cmake openblas superlu python vtk hdf5 pkg-config
sudo pip3 install srlife
brew install python
pip3 install srlife
`srlife` will then be available as a package through the homebrew version of python (often available as `python3` instead of `python`).

Expand Down
40 changes: 39 additions & 1 deletion doc/sphinx/source/managers.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ taking the basic input information:
3. The thermal, structural, and system solvers.
4. Optionally, a :py:class:`srlife.solverparams.ParameterSet` class
defining solution parameters, including the number of parallel
threads to use in the analysi
threads to use in the analysis

and providing the estimated life of the receiver as a number of
repetitions of the daily cycle.
Expand Down Expand Up @@ -43,6 +43,33 @@ internal srlife subclasses. Specifically, the manager handles the process of:
.. autoclass:: srlife.managers.SolutionManager
:members:

Heuristics
----------

The base assumption in srlife is that the thermal, structural, and damage analyses will use
full 3D theories, consider every tube in every receiver, and follow the user provided input
(thermal history, structural/spring boundary conditions, etc.) exactly.
Solver heuristics modify these base assumptions, with the goal of reducing the time required
to complete the analysis at the expense of some accuracy. Heuristics can trigger some action
at any point throughout the analysis, in the setup, thermal, structural, or damage phases.

All heuristics inherit from a common base class, :py:class:`srlife.managers.Heuristic`.

.. autoclass:: srlife.managers.Heuristic
:members:

Cycle reset heuristic
^^^^^^^^^^^^^^^^^^^^^

The cycle reset heuristic returns each tube to its initial temperature at the end of every
thermal cycle. This heuristic represents the effects of a long hold at lower temperature,
often omitted in the analysis. When using transient heat transfer not including this
heuristic may mean the tube begin to accumulate a small amount of residual stress, related to
any unrelaxed thermal gradient still present at the end of each day.

.. autoclass:: srlife.managers.CycleResetHeuristic
:members:

ParameterSet description
------------------------

Expand Down Expand Up @@ -131,6 +158,17 @@ Structural solver options
| verbose | bool | False | Print debug information to the terminal |
+---------+-----------+---------+-----------------------------------------+

Damage model options
^^^^^^^^^^^^^^^^^^^^

+-------------+-----------+---------+-------------------------------------------------------------------+
| Option | Data type | Default | Explanation |
+=============+===========+=========+===================================================================+
| extrapolate | string | "lump" | How to extrapolate damage, options are "lump", "last", and "poly" |
+-------------+-----------+---------+-------------------------------------------------------------------+
| order | int | 1 | Polynomial order to use in conjunction with the "poly" option |
+-------------+-----------+---------+-------------------------------------------------------------------+

Class description
^^^^^^^^^^^^^^^^^

Expand Down
8 changes: 4 additions & 4 deletions doc/sphinx/source/tutorial.rst
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ solves the thermal and structural subproblems:
# Define the system solver to use in solving the coupled structural system
system_solver = system.SpringSystemSolver(params["system"])
# Damage model to use in calculating life
damage_model = damage.TimeFractionInteractionDamage()
damage_model = damage.TimeFractionInteractionDamage(params["damage"])
The user might consider changing the `params['nthreads']` parameter to match
the number of cores on their machine, to speed up the analysis.
Expand Down Expand Up @@ -437,7 +437,7 @@ will print a status bar representing its progress along each individual step

.. code:: console
Best estimate life: 9062.849350 daily cycles
Best estimate life: 9062.849331 daily cycles
indicating that the module predicts this receiver to have a structural life of
9062 repetitions of the daily cycle, or about 25 years.
Expand All @@ -455,7 +455,7 @@ to a VTK file for additional postprocessing:
for ti, tube in panel.tubes.items():
tube.write_vtk("tube-%s-%s" % (pi, ti))
This command produces a series of `VTK <https://vtk.org/>`_ files (one per tube) containing the full
This command produces a series of `VTK <https://vtk.org/>`_ files (one per tube per time step) containing the full
thermal, structural, and damage results. These files can be visualized
with a program like `ParaView <https://www.paraview.org/>`_.

Expand Down Expand Up @@ -623,7 +623,7 @@ Complete example scripts
# Define the system solver to use in solving the coupled structural system
system_solver = system.SpringSystemSolver(params["system"])
# Damage model to use in calculating life
damage_model = damage.TimeFractionInteractionDamage()
damage_model = damage.TimeFractionInteractionDamage(params["damage"])
# The solution manager
solver = managers.SolutionManager(model, thermal_solver, thermal_mat, fluid_mat,
Expand Down
2 changes: 1 addition & 1 deletion examples/tutorial/model.hdf5
Git LFS file not shown
2 changes: 1 addition & 1 deletion examples/tutorial/run_problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
# Define the system solver to use in solving the coupled structural system
system_solver = system.SpringSystemSolver(params["system"])
# Damage model to use in calculating life
damage_model = damage.TimeFractionInteractionDamage()
damage_model = damage.TimeFractionInteractionDamage(params['damage'])

# The solution manager
solver = managers.SolutionManager(model, thermal_solver, thermal_mat, fluid_mat,
Expand Down
Loading

0 comments on commit 2fbce35

Please sign in to comment.