OOF: Finite Element Analysis of Microstructures

OOF2

oof2 logo

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


Introduction

OOF2 version 2.2.2 is now available.

The major difference between 2.2.x and 2.1 is that 2.2 uses a newer graphics library for its user interface. There are other significant improvements. See the change log for details.

The major differences between 2.1 and 2.0 are that 2.1 can solve time dependent problems, and has much improved nonlinear solvers. A detailed discussion of the differences and a summary of how to use the new features is included in the What's New in 2.1 page.

OOF2 version 2.1.19 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 2.7. OOF2 might work with earlier versions, but it hasn't been tested there. OOF2 does not (yet) work with Python 3.
  • The OOFCanvas library, version 1.0.1 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

  • a C++ compiler.
  • The yacc and make utilities.

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


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@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.


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. We strongly recommend that you use a package management system to do so.

  2. The downloaded file is a compressed tar archive. If your browser didn't unpack it for you, unpack it like this:
    % tar -xzf oof2-2.2.2.tar.gz
    This will create a directory called "oof2-2.2.2".

  3. cd to that directory.

  4. Read the README.md 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.

    The short instructions are to type this:

                  python setup.py build
                
    followed by
                  sudo python setup.py install
                
    to install in a system directory, or
                  python setup.py install --prefix=$HOME
                
    to install in your home directory. But please read the README file. It's important to ensure that you use Python 2.7 to build and install OOF2.

  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. As of version 2.2.0, shortcuts named "oof2-test" and "oof2-guitest" are installed alongside OOF2 and can be run by typing their names.


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 options, and 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.)

Getting Started with OOF2 2.1 explains the differences between 2.0.5 and 2.1.

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.

If you're familiar with OOF2 2.0, the Getting Started with OOF2 2.1 page summarizes the differences between versions 2.0 and 2.1.


Reporting
Bugs

Please check the FAQ before submitting bug reports. Send bug reports via e-mail to oof_bugs@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.