Introduction
|
OOF2 version 2.0.4 is now available! See the Change Log to learn what's
new.
OOF2 version 2.0.4 can now be run on
the nanoHUB.
See the
announcement
for more details.
OOF2 version 2.0.5a6 is
now available as well. It
fixes some bugs, and includes preliminary versions of
some new features. See
the Change Log to learn
what's new. It is an alpha release, meaning that the
new features may yet change and have not been thoroughly
tested. You should probably use it anyway, because it
contains important bug fixes.
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 based on a new 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.
|
|
Current Features |
Here is a brief list of OOF2 features, highlighting the
differences between OOF2 and OOF1:
-
OOF2 is much more flexible and expandable than OOF1.
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, but
is much simpler than the corresponding task in
OOF1.) 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 more powerful set of finite elements
than does OOF1. OOF2 has 3 noded triangles, 4 node
quadrilaterals, 6 noded subparametric triangles, and
8 noded subparametric quadrilaterals. Adding new
element types in C++ is easy.
-
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, unlike OOF1.
OOF2 is not yet fully parallel -- it doesn't yet use
multiple processors to perform a single calculation.
-
OOF2 is completely scriptable in Python, and can
also be run interactively from a graphical user
interface.
-
OOF2 has more flexible graphical output than OOF1.
-
OOF2 can export mesh geometry directly into abaqus
input files.
-
OOF2 (version 2.0.4 or later) can read EBSD
orientation map data files. See the
OOF2 Orientation Mapping
page for more information.
|
|
Future Features |
We're working on including the following features in OOF2:
-
Expanding the scope of the problems solved to include
-
"Flux = Constitutive Relation Function of Field"
-
"divergence of Flux = lambda * Flux"
-
"divergence of Flux = gamma * time derivative of
Field"
-
Non-linear physics, including plasticity and
possibly fracture.
-
Time dependence, both for fields and material
properties.
-
Line elements, as well as elements with higher order
continuity (for phase-field or strain-gradient
models).
-
Parallel execution.
-
OOF2 will eventually become OOF3, which will solve 3
dimensional problems. The primary difficulties here
will involve image based mesh generation and user
interfaces. The finite element and material
definition machinery will carry over from OOF2.
|
|
System Requirements |
OOF2 will run on any computer running a variant of the
Unix operating system, including Linux and Macintosh
OS X.
In addition, OOF2 requires
-
An X11 server. This is standard on most Unix
systems. Macintosh users may have to install one,
such as Apple's
X11. Note that users of OS X 10.5 should
install the latest version from Mac
OS Forge instead.
-
The Python
scripting language, version 2.4 or 2.5. OOF2 might
work with Python 2.6, and almost certainly does
not yet work with Python 3.0.
-
The Image
Magick++ image processing library.
-
The gtk+
graphics toolkit. OOF2 requires version
2.6 or later.
-
The Gnome
canvas library, libgnomecanvas2, version 2.6 or
later. (Earlier versions may work too.)
-
The pygtk
Python bindings for the gtk+ library. OOF2
requires version 2.6 or later.
-
The
BLAS basic linear algebra subroutines and the
lapack linear algebra library. These are provided
with many computer systems. Check to see if you
have a native version before downloading and
installing the generic code from netlib. On
Macintosh OS X, the blas routines are built in to
the vecLib framework and do not have to be
installed separately.
In addition, if you are going to be compiling OOF2
(which is the only way to get it at the moment), you
will need
If you are going to build your own extensions to OOF2,
you will also need
- the SWIG
program for generating C++/Python interface code.
OOF2 requires version 1.1 build 883.
NOTE: We're using an old version of swig
because it was the stable version at the time we
started working on OOF2. The current version will
not work with OOF2. We will upgrade to a
modern version of swig in a later release.
|
|
Download
|
Please note the following Disclaimer and
Copyright notice:
This software was produced by NIST, an agency of the
U.S. government, and by statute is not subject to
copyright in the United States. Recipients of this
software assume all responsibilities associated with
its operation, modification and
maintenance. However, to facilitate maintenance we
ask that before distributing modified versions of
this software, you first contact the authors at
oof_manager@ctcms.nist.gov.
Useful links:
|
|
Installation
|
These are generic installation instructions. There is a
list of system-specific hints
here.
-
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.0.4.tar.gz
This will create a directory called "oof2-2.0.4".
-
cd to that directory.
-
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.
-
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.
|
|
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.
(Macintosh OS X users will have to start X11 before
starting OOF2. Then OOF2 can be started in an xterm
window, or in a Terminal window if the
DISPLAY environment variable has been set
correctly, probably to :0.0.)
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.)
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 8.1 MB gzipped tar file. Use tar
-xzf oof2man.tgz to unpack it.
|
|
Reporting Bugs
|
Please check the FAQ and the Known Problems list below before
submitting bug reports. Send bug reports via e-mail
to oof_bugs@ctcms.nist.gov.
Include the following information with your report:
-
The type of computer and operating system that
you're using.
-
The version of OOF2 that you're using. Starting
OOF2 with the --version flag will print
the version number.
-
A complete description of the problem: what
happened, and what did you do to make it happen?
-
If possible, an OOF2 script that reproduces the
problem. Be sure to include any files that the
script requires.
|
|
Known Problems
|
Current Problems:
-
Images drawn in the graphics window sometimes are
drawn one screen pixel to the left and/or above
where they should be. This appears to be due to
round-off error within the gtk+ library. A
work-around is to turn on antialiasing (in the
graphics window's Settings menu), but this causes
other problems.
-
A number of operations need to be sped up.
-
Some parts of the GUI test suite fail
intermittently. We believe that this is due to
timing and threading problems related to the test
suite itself, and does not reflect errors in the OOF2
code. If a test fails, repeat it and see what
happens. If it fails consistently, we'd like to
know about it, but otherwise you can probably ignore
it. Partially fixed in version 2.0.2.
-
Since the introduction of subproblems in 2.0.2, and
possibly prior to that, the Adaptive Mesh Refinement
tool on the FEMesh page has caused
segfaults. Partially fixed in version 2.0.4,
fixed more in version 2.0.5a1.
-
Adaptive Mesh Refinement is unreliable. Our
algorithm is unstable, and results may be
unreproducible.
-
The "Save Image" menu item in the Graphics Window's
"File" menu doesn't work if the window is displaying
a Microstructure's Material colors. Fixed in
version 2.0.5a1.
-
If a Field is defined and initialized on a
Subproblem and then defined on a different
Subproblem that shares Nodes with the first one, the
Field will be reinitialized on those shared Nodes,
destroying any calculated values. Fixed in
version 2.0.5a1.
-
Modifying a Skeleton, creating a Mesh, unmodifying
the Skeleton, and then modifying one of its
boundaries causes an error. Fixed in version
2.0.5a1.
-
Mesh data files containing initialized out-of-plane
fields cannot be loaded. Fixed in version
2.0.5a2.
-
If the pixel size isn't 1x1 in physical units,
round-off error can cause crashes in various
operations (for example, creating contour plots of
orientation-map dependent quantities). Fixed
in version 2.0.5a2.
-
OOF.Skeleton.Auto can create illegal elements
because of a poor choice of parameters in
SnapRefine, which can lead to a divide-by-zero error
in Rationalize. Fixed in version 2.0.5a2.
Past Problems:
-
Intersecting floating boundary conditions with
continuum profiles don't work. Fixed in
version 2.0.3.
-
Switching Skeleton modifiers can sometimes cause an
RWLock error. Fixed in version 2.0.2.
-
The "File/Save/Python Log" dialog box's "Save"
button is sometimes incorrectly disabled. A
workaround is to switch directories within the
dialog, and then switch back, if
necessary. Fixed in version 2.0.2.
-
The Nodes on the top and/or right edges of a
Skeleton sometimes move off of the edge when the
Skeleton is modified. Fixed in version
2.0.2.
-
The stress-free strain property and the thermal
expansion property with non-zero T0 do not work
correctly in plane-stress. Fixed in 2.0.2.
-
Material dependent output quantities (e.g, stress)
are not computed correctly in some cases if a mesh
is loaded from a data file. A workaround is
to solve the mesh, even if the saved state has
already been equilibrated. Fixed in 2.0.2.
-
In versions 2.0.2 and 2.0.3, OOF lets you use the CG
solver even for non-symmetric problems. The
workaround is to choose another solver when
using thermal expansion with an active temperature
field. Fixed in version 2.0.4.
-
OOF dumps core when quitting on some systems,
including NetBSD. This is harmless (you were
quitting anyway, right?), but annoying.
Fixed in version 2.0.4b2.
|
|
|
Send comments to the OOF team.
|
|