OOF: Finite Element Analysis of Microstructures

OOF2

oof2 logo

[Introduction] [Features]
[System Requirements] [Disclaimer and Copyright] [Download] [Installation]
[Getting Started] [Manual] [FAQ]
[Reporting Bugs]


Introduction

OOF2 version 2.3.3 is now available.

The major difference between 2.3 and 2.2 is that 2.3 uses Python3 instead of Python2. There are other significant improvements. See the change log for details.

OOF2 version 2.3.1 can now be run on the nanoHUB. See the announcement for more details.

OOF2 retains (almost) all of the features of OOF1, although it does not read OOF1 data files. The latest versions of OOF1, however, can write OOF2 data files.

OOF2 is a set of C++ classes for finite elements and material properties, tied together in a Python infrastructure. Python is an easy to use, high-level, object-oriented scripting language.

OOF2 is in an Active Development status.


Current
Features
Here is a brief list of OOF2 features:
  • OOF2 can potentially handle any problem of the form:
    • "Flux = Modulus times gradient of Field"
    and
    • "divergence of Flux = Applied Force".
    Currently OOF2 can solve the heat equation, mechanical force balance, and the Coulomb equation. It includes material properties for linear elasticity, body forces (gravity), thermal conductivity, heat sources, dielectric permittivity, space charge (in an approximation in which charges interact only with the local polarization field, not with other charges at a distance), thermal expansion, and piezoelectricity.
  • New Fields and Fluxes can be added with only a few lines of Python code. New material properties can be added with a few lines of Python code, or, if speed is an issue, in C++. (Defining new Properties is not quite as simple as defining new Fields.) Instructions for adding features to OOF2 are given in the manual.
  • Materials are built from a collection of Properties. Any combination of Properties is allowed, with reasonable constraints on completeness and unambiguity.
  • OOF2 contains a small variety of finite elements and new ones can be added easily in C++. OOF2 has 3 noded triangles, 4 noded quadrilaterals, 6 noded subparametric triangles, and 8 noded subparametric quadrilaterals.
  • OOF2 generates and refines triangular, quadrilateral, and mixed meshes from image data. Element order is specified independently from element geometry.
  • OOF2 incorporates nonlinear solvers. (But not many non-linear material properties are yet present.)
  • OOF2 can refine meshes adaptively using a-posteriori error estimators.
  • OOF2 is threaded, meaning that it can perform multiple calculations simultaneously. OOF2 is not yet fully parallel -- many operations that could be done in parallel are not.
  • OOF2 is completely scriptable in Python, and can also be run interactively from a graphical user interface.
  • OOF2 has flexible graphical output.
  • OOF2 can export mesh geometry directly into abaqus input files.
  • OOF2 can read EBSD orientation map data files. See the OOF2 Orientation Mapping page for more information.
  • OOF2 can solve time dependent problems.
  • OOF2 can solve problems in which the flux cannot be written as modulus times field gradients.

Future
Features
We're working on including the following features in OOF2:
  • Expanding the scope of the problems solved.
  • Non-linear physics, including plasticity and large strain.
  • Line elements, as well as elements with higher order continuity (for phase-field or strain-gradient models).
  • Parallel execution.
  • OOF2 is the basis for OOF3D, which solves 3 dimensional problems. OOF2 and OOF3D are separate programs, but are more or less evolving together.

System
Requirements

OOF2 will run on any computer running a relatively recent variant of the Unix operating system, including Linux and Macintosh, as long as the prerequisites listed below are available.

OOF2 requires

  • The Python scripting language, version 3.8 or later.
  • The OOFCanvas library, version 1.1.0 or later.
  • The Image Magick++ image processing library, version 6.x. OOF2 does not work with ImageMagick 7.
  • The Gtk3 graphics toolkit. OOF2 requires version 3.22 or later, but not as late as version 4.0.
  • The Python bindings for Gtk, PyGObject, version 3.26 or later.
  • The BLAS basic linear algebra subroutines and the lapack linear algebra library. These are provided with many computer systems.

In addition, if you are going to be compiling OOF2, you should have

Detailed instructions for installing the prerequisites on various operating systems may be found here.


Download

Please read the Disclaimer and Copyright notice before downloading this software.

Useful links:


Installation

Please read the Disclaimer and Copyright notice before installing this software.

This is just a summary! Please see the README file for the details.

  1. Install the OOF2 prerequisites, which are listed above. We strongly recommend that you use a package management system to do so.

    Instructions for installing the prerequisites on various operating systems are available here.

    • Mac users running MacPorts can download and install oof2 and its prerequisites by typing

                        sudo port install oof2 +quartz -x11
      See the full instructions, and be aware that the version on MacPorts may not be up to date. This page will always be updated sooner.

    • Users of Arch Linux can install OOF2 and its prerequisites using the AUR package manager. (This package is not maintained by NIST.)

  2. The downloaded file is a compressed tar archive. If your browser didn't unpack it for you, unpack it like this:

    		      tar -xf oof2-2.3.0.tar.gz
                
    This will create a directory called "oof2-2.3.0".

  3. Make a build directory and cd to it.

  4. Read the README file and follow the directions in it. Additional system-specific installation notes are available here, and some frequently asked questions are answered in the FAQ.

    Configure OOF2 by using cmake or ccmake. If you want to use the default settings, type

                  cmake [path to the build directory]
                
    If you want to modify the default settings, type
                  ccmake [path to the build directory]
                
    Changing the default settings will allow you to control where OOF2 is installed and what version of Python it uses, among other things.

    Build OOF2 by typing

                  make
                
    followed by
                  make install
                
    to install it. If you're installing in a a system directory, you'll need to type
                  sudo make install
                
    instead. But please read the README file.

  5. If you like, run the test suites located in the TEST and TEST/GUI subdirectories of the OOF2 distribution. Read the README files in those directories for instructions. You can also run the tests via the programs oof2-test and oof2-guitest which are installed when OOF2 is installed.


Getting
Started

After installing OOF2, you should have an executable file named oof2 in a bin directory in your execution path. You can now simply type oof2 at your shell prompt, and OOF2 will start up.

OOF also has many command line options. You can get a summary of them by typing oof2 --help.

By default, OOF runs in graphics mode, opening a couple of windows to get you started. If you don't want this, you can use the --text option to run it in command-line mode.

Most importantly, explore the Tutorials in the Help menu. (The tutorials are only available in graphics mode.) Also, please please read the OOF2 Manual.

If you run into trouble, please check the FAQ.


Manual

The OOF2 Manual is available at http://www.ctcms.nist.gov/~langer/oof2man/index.html. You can also download the html files as a gzipped tar file (8926465 bytes). Use tar -xzf oof2man.tgz to unpack it.

The manual is being updated, and a new version will be available soon. The old version is still informative in general, but some details are incorrect.


Reporting
Bugs

Please check the list of known bugs and the FAQ before submitting bug reports. Send bug reports via e-mail to oof_bugs@list.nist.gov. Include the following information with your report:

  1. The type of computer and operating system that you're using.

  2. The version of OOF2 that you're using. Starting OOF2 with the --version flag will print the version number.

  3. A complete description of the problem: what happened, and what did you do to make it happen? Be as specific and detailed as possible.

  4. If possible, an OOF2 script that reproduces the problem. A script can be saved from the "File/Save/Python Log" menu item in the main OOF2 window, or the "Save" button in the "Quit" dialog box.

    If OOF2 crashes before you get a chance to save a script, a script will be saved automatically in the directory that your operating system uses for temporary files, which is probably /tmp. Look for a file with oof2 in its name in a subdirectory of /tmp.

    Be sure to include any files that the script requires, such as images or other scripts that have been read.

It is very difficult to fix a bug if we can't reproduce the problem for ourselves, so include as much information as possible.


Disclaimer and Copyright

The research software provided on this web site ("software") is provided by NIST as a public service. You may use, copy and distribute copies of the software in any medium, provided that you keep intact this entire notice. You may improve, modify and create derivative works of the software or any portion of the software, and you may copy and distribute such modifications or works. Modified works should carry a notice stating that you changed the software and should note the date and nature of any such change. Please explicitly acknowledge the National Institute of Standards and Technology as the source of the software. To facilitate maintenance we ask that before distributing modified versions of this software, you first contact the authors at oof_manager@list.nist.gov.

The software is expressly provided "AS IS". NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED, IN FACT OR ARISING BY OPERATION OF LAW, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT AND DATA ACCURACY. NIST NEITHER REPRESENTS NOR WARRANTS THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT ANY DEFECTS WILL BE CORRECTED. NIST DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF THE SOFTWARE OR THE RESULTS THEREOF, INCLUDING BUT NOT LIMITED TO THE CORRECTNESS, ACCURACY, RELIABILITY, OR USEFULNESS OF THE SOFTWARE.

You are solely responsible for determining the appropriateness of using and distributing the software and you assume all risks associated with its use, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and the unavailability or interruption of operation. This software is not intended to be used in any situation where a failure could cause risk of injury or damage to property. The software was developed by NIST employees. NIST employee contributions are not subject to copyright protection within the United States.