OOF: Finite Element Analysis of Microstructures

oof2 logo

OOF2 Changes

2.3.3
  • Improvements:
    • Brought the extension machinery for adding Properties up to date. If OOF2_DEV_INSTALL is set to ON in CMake, template Properties will be installed into <prefix>/share/oof2/templates, and oof2-extension-setup, a tool for instantiating the templates, will be installed into <prefix>/bin. Also, OOF2 header files will be installed into <prefix>/include/oof2. See the README file in OOF2/EXTENSION_TEMPLATES or <prefix>/share/oof2/templates.

    • Added a utility script, oof2-extension-setup, to make it easier to build extensions from the templates in EXTENSION_TEMPLATES.

    • Added OOF.File.Load.Module, to load python modules (such as OOF2 extensions).

    • Moved Misorientation_Calculator from the Help/Debug menu to the Help menu.

    • Moved the menu item OOF.Settings.Mesh_Defaults.SelfConsistency to OOF.Settings.Solver.Self_Consistency, and OOF.Settings.Mesh_Defaults.Numerical_Differentiation to OOF.Settings.Solver.Numerical_Differentiation.

    • All of the skeleton selection commands that have a list of points as an argument but only use two of them now use the first and the last points. It was inconsistent before. This probably doesn't matter to anyone because the GUI only put two points in the list. But if you edited scripts and added points to a list it might have an effect.

    • Upgraded Eigen to version 3.4.0.

    • Marginally better error detection. Some incompletely defined problems aren't detected before attempting to solve them, causing non-square matrices being passed to the solver. Now the matrix methods detect non-square matrices and raise an exception, which is better than crashing.

  • Bug fixes:
    • Disabled selection of interface segments since interface properties aren't enabled.

    • Fixed OOF.Settings.Theme. It now lists the built-in system themes and initialzes the list of themes properly.

    • Fixed a bug in the GUI for the "New" button on the Skeleton Boundaries page.

    • Fixed a bug that was preventing boundary condition initializers from being copied.

    • Fixed a bug that was making normally unlisted layers in the graphics window's layer list become listed after they were edited. That itself wasn't really so bad, but it meant that they were deleted when the window was cleared.

    • Fixed a bug that was garbling the Mesh Info toolbox's list of field values at a node when the set of defined fields changed.

2.3.2 Bug fixes.
  • Eliminated some opportunities for roundoff error in Rationalize that could lead to edge nodes not being recognized as edge nodes.

  • Fixed some Refine bugs that could allow newly created nodes on boundaries to move off of the boundaries in subsequent Skeleton modifications.

  • Rationalize is much faster, after correcting a python indentation error.

  • The minlength parameter for Bisection and Trisection is now interpreted in pixel units, not physical units, in Refine operations.

  • Fixed a bug that was preventing strain components from being displayed in the GUI or looped over in python.

  • The file selector now handles special characters in file names correctly.

  • Fixed a problem that was preventing Range outputs from being computed on edge boundaries and cross sections.

  • The antialias state is read correctly from script files.

  • Fixed a problem in displaying orientation maps as images.

  • The Sanity Check routine for Skeleton debugging is much faster. It no longer needs to be run in "quick" mode.

2.3.1 Minor changes in the build process. There's no need to update if you've already installed 2.3.0.
  • Changes for compatibility with MacPorts.

  • Changed the names of the user-settable variables in CMakeLists.txt. DESIRED_PYTHONVERSION is now OOF2_PYTHON3_VERSION, and DESIRED_SWIGVERSION is now OOF2_SWIG_VERSION.

2.3.0
  • Major Infrastructure Improvements:
    • OOF2 uses Python 3 (version 3.8 or later) instead of Python 2. This should require very few changes to existing OOF2 scripts, unless you have added Python3-incompatible code to them manually.

    • OOF2 uses cmake instead of distutils to build and install. Full instructions are on the main OOF2 page.

    • OOF2 uses swig4 to generate the Python/C++ interface code. An old version of swig is no longer distributed as part of OOF2.

    • Some of the installation prerequisites have changed.

  • New and Enhanced Features:
    • Segment homogeneity is computed differently. The new method gives better results when a segment is following a stair-stepped diagonal pixel boundary. It does not consider every stair-step to be a transition point between pixel categories. When a segment follows a pixel boundary, it's possible for the homogeneity to be different on the two sides of the segment.

    • The Refine and Snap Refine skeleton modifiers have been merged into a new Refine method, which works a bit differently. The old Liberal and Conservative options have been removed, so it is no longer possible to restrict the refinement to just triangles or quads. The new Refine command has two new parameters:

      • The divider parameter determines how element edges are subdivided, and replaces the old degree parameter. The choices are Bisection, Trisection, and TransitionPoints. Bisection and Trisection divide edges into two or three equal length segments.

        The effect of the old Snap Refine method is obtained by setting divider to TransitionPoints, which divides edges at the points where the pixel category changes. It will never divide an edge into more than three segments.

      • The rules parameter determines what refinement rules are applied to the interior of the elements, after its edges have been divided. The Large rule set considers many possibilities and chooses the best one, given a parameter alpha that determines the relative weight given to homogeneity and shape quality. The Quick rule set divides the elements in the simplest way and generally doesn't search for the best refinement.

      The criterion parameter has been removed. It allowed you to exclude elements below a certain area. It was inconsistent with the criterion parameter in other skeleton modifiers. Instead, there is a minlength subparameter in the divider. Existing element edges will not be subdivided into segments less than minlength (but new internal edges may be shorter).

    • The targets parameter for the skeleton modifiers Anneal and Smooth can be set to Non-boundary Nodes, which will preserve the positions of skeleton nodes that have more than one neighboring element category. Annealing with targets set to Non-boundary Nodes has the same effect as pinning internal boundary nodes and then annealing.

    • The Snap Nodes skeleton modifier has been rewritten and does a better job than it used to. In particular, it is less likely to move two nodes on a pixel boundary in a way that leaves no good choice for a third node between the first two.

    • The Snap Anneal skeleton modifier has been removed. It was mostly redundant with Snap Nodes.

    • Element aspect ratio is displayed in the Skeleton Info toolbox. The aspect ratio is calculated in a less ad hoc way, involving the ratio of the principle components of the element's moment of inertia tensor.

    • The number of digits displayed for floating point numbers in the GUI can be set with the GUI Digits item in the Settings menu.

    • The Next button in the tutorial window is always sensitive. If you want to go ahead without completing a task, you can. Detecting when the task was complete was error prone and confusing.

2.2.3
  • Mesh nodes are drawn at their actual positions by default. The old behavior, in which they were drawn at their undisplaced positions, can be selected in the Settings/Graphics_Defaults/Meshes menu.

  • Version 1.0.3 of OOFCanvas is now required. This fixes a bug that was causing the program to hang on some systems when a graphics window was used while loading a script.

2.2.1 and 2.2.2
  • Fixed some build problems on MacPorts.

2.2.0
  • New and Modified Features:
    • OOF2 now uses Gtk3 instead of gtk+2 for its user interface, so the installation prerequisites have changed.

      Instead of requiring libgnomecanvas, oof2 uses OOFCanvas.

    • Whether or not new objects (Images, Skeletons, Meshes, etc) are displayed automatically in a graphics window is now controlled by a "New Layer Policy" setting in the window's Settings menu. The choices are

      • Always: All new objects are displayed with their default representation.
      • Single: New objects are displayed only if no other similar object is being displayed.
      • Never: New objects are never displayed automatically. Use the "Layer/New" menu item to add them.
      Single is the closest to the old behavior. The default value for new graphics windows is Never, but it can be changed via the "Settings/Graphics Defaults/New Layer Policy" menu item in the main OOF2 window.

    • There is no more separate Layer Editor window for adding graphics layers. The "Layer/New" and "Layer/Edit" menu items in the graphics window now bring up a simple dialog box.

    • The "Save Image" command in the graphics window's File menu is now "Save Canvas". A new "Save Canvas Region" command can save any rectangular region of the canvas, and in graphics mode its parameters are initialized with the currently visible region.

    • Some commands that set colors used to have a separate opacity parameter, which was confusing when the color also had an alpha channel for the opacity. Now there are no separate opacity parameters, and all colors can be set to be translucent, except in a few cases where it doesn't make sense.

    • All widgets that can take an "automatic" value used to have a checkbox that had to be checked before a non-automatic value could be entered. Now the widgets are simple text entry boxes, and the automatic value will be used if the box is empty. To make it clear what's happening, the box displays "<automatic>" (in italics) if it's empty. To use a non-automatic value, just type it in the box. To change a non-automatic value to an automatic one, delete the contents of the box.

    • The Eigen linear algebra library was upgraded to version 3.3.9.

    • The test suites can be run by typing oof2-test and oof2-guitest, without having to be in the TEST or TEST/GUI subdirectories.

  • Bug Fixes:
    • Fixed a bug in Basic solver mode, which was trying to use an old solver for asymmetric matrices.

    • Changed the Rationalize Skeleton modifier. The old version could end up in an infinite loop. Now it takes an "iterations" argument, and repeats that many times. Each iteration is potentially less effective than the old method, but is sure to finish.

    • Sparse matrices are constructed more efficiently, reducing memory requirements when solving large systems.

    • Fixed the square brush in the pixel selection toolbox, which was confused about units and didn't work correctly unless the physical pixel size was 1x1.

    • Fixed the brush pixel selector, which was trying too hard to be efficient and could miss points.

2.1.19
  • New Features:
    • Von Mises stress can now be output or plotted.

    • A new ZStrain material property generalizes plane-strain by setting the fixed out-of-plane zz strain to a non-zero constant. To use it, add the ZStrain property to a Material, mark the Displacement field as defined, active, and in-plane, and activate the Force Balance equation.

    • Selection sizes are reported as percentages as well as in absolute numbers.

    • Skeleton modification routines report the total number of nodes and elements after each modification, as well as the changes in them.

  • Bug Fixes:
    • In rare cases, output quantities were being computed incorrectly because of round-off error in the routine that found the element enclosing a point, causing the output to be computed in the wrong element.

    • "python setup.py clean" is now more aggressive. Previously, doing a clean build after a system update could cause build errors.

2.1.18
  • New Features:
    • A new "Auto" button in the Pixel Groups pane on the Microstructure Page will automatically create pixel groups even if the image is noisy. It does not require all the pixels in a group to have identical values. It can operate either on color values or orientations, and can optionally create separate groups for the contiguous subsets of a set of similar pixels.

      The "Group" button on the Image Page is still present, but it doesn't work on orientation data, is not tolerant of noise (it only groups precisely identical pixels), and cannot be restricted to contiguous groups.

    • Local material properties can be included in output files, and queried in the Mesh Data Viewer window. Select "Aggregate" in the Output pane in the Analysis Page, and choose "Material Constants" in the Output menu.

    • Multiple output items can be included on a single line of an output file by choosing "Concatenate" in the Output pane on the Analysis Page.

2.1.17
  • New Features:
    • The pixel selection tools that use pixel color now have equivalents that use orientation, for selecting pixels in a Microstructure that contains an EBSD orientation map.

      In the Pixel Selection page, the Orientation Range method selects all pixels whose misorientation with respect to a given orientation is less than a given threshold. In the Pixel Selection toolbox in a graphics window, the Orientation tool selects all pixels whose misorientation with the clicked pixel is less than the given threshold, while the OrientationBurn tool selects contiguous pixels meeting the same criterion.

      The Pixel Info toolbox in the graphics windows can also compute the misorientation of the clicked pixel with a reference pixel, which is set using the Set Reference Point button.

      The misorientation is defined as the rotation that brings one orientation into agreement with another. Since it's a crystalline lattice that's rotating, there may be more than one equivalent rotation, depending on the lattice symmetry. All of the misorientation tools have a lattice_symmetry argument, which can be given as a space group number or a point group name in the Schoenflies or International conventions. The rotation that aligns the lattices is expressed in axis/angle form, and the misorientation is the absolute value of the angle, minimized over the equivalent orientations of the lattice.

      The Debug menu in the main OOF2 window now contains a Misorientation Calculator, which computes the misorientation between two orientations, given a lattice symmetry.

    • The new element homogeneity algorithm introduced in 2.1.16 is now much faster.
  • Bug Fixes:
    • Fixed a bug that could create inconsistent Skeleton boundaries when using the Rationalize modifier on periodic Skeletons. This could make it impossible to create a Mesh from a Skeleton.
    • Fixed a bug in the Quaternion class in some limiting cases.
2.1.16
  • Simpler and much more reliable code for computing element homogeneity.
2.1.15
  • Fixed a problem with displaying images in some situations, due to changes in the ImageMagick library.
  • Fixed a bug in the widgets for choosing Skeleton groups when used as command arguments.
2.1.14
  • Bug Fixes:
    • Fixed a bug that could cause spurious error messages when solving time-dependent problems involving both thermal diffusion and elasticity.
    • Fixed bugs that were raising spurious error messages in Relax.
    • Fixed a big in Fix Illegal Elements.
    • Fixed a bug that caused crashes during illegal Skeleton node moves in debug mode.
    • Fixed Copy_All_Solvers.
    • Fixed a bug that was causing OOF2 to fail to load when built with gcc 7.
2.1.13
  • New Features:
    • OOF2 now uses the Eigen linear algebra package. Matrix operations should be noticably faster.
    • More OOF2 operations are done in parallel if your compiler supports openMP and the --enable-openMP option is given when OOF2 is built. Speed-ups may not be noticable in small systems.
  • Bug Fixes:
    • Fixed a bug that was sometimes causing SnapRefine to create illegal elements and sometimes computing segment homogeneities incorrectly.
2.1.12
  • Bug Fixes:
    • Fixed a bug that was causing abaqus output for large Meshes to be very slow.
    • Fixed a bug that was effectively making all unmeshable pixel groups meshable.
    • Fixed a bug in annealing and smoothing periodic skeletons.
    • Fixed the Range output.
    • Fixed a bug in logarithmic progress bars.
  • Building and installing:
    • A separate swig installation is unnecessary. OOF2 now includes its own copy of swig.
    • OOF2 now uses Google's tcmalloc library for memory allocation.
    • Linux systems that declare themselves as "linux3" in python are accomodated.
2.1.11 This list combines changes in versions 2.1.10 and 2.1.11.
  • New Features:
    • Compatibility with the clang++ compiler on OS X 10.9.
  • Bug Fixes:
    • Fixed a possible divide by zero error that could arise from an unlikely and perverse choice of endpoints for a cross section.
    • Fixed a bug that could occur when two Skeleton edge boundaries wrapped around a single element in opposite directions.
2.1.9 Version 2.1.8 was never released publicly. This list combines changes in versions 2.1.8 and 2.1.9.
  • New Features:
    • The GUI Logging menu now contains a "Pause" button, which is handy when using the gui logging machinery to record a demo.
    • The build scripts now work on Macs using the Gentoo prefix package manager.
  • Bug Fixes:
    • Fixed a bug in abaqus format for saving skeletons.
    • The Save button on the Microstructure page now allows the file format to be specified.
    • Dense matrix multiplications now use a lot less memory.
    • Fixed a bug in the copying of Neumann boundary conditions.
    • Fixed the pole figure tests in the TEST directory.
2.1.7
  • New Feature:
    • The build scripts now check for the presence of the GraphicsMagick package, which is not a substitute for ImageMagick, no matter what they might claim.
  • Bug Fix:
    • Pole figures are generated from the Materials' orientation properties, not from the orientation maps directly. This allows them to be made for Microstructures that don't use orientation maps.
    • The hemisphere argument to the pole figure command has been removed, because it was confusing. Plots are now always limited to one hemisphere. Contact us if that's a problem for you, and we can figure something out.
2.1.6
  • New Features:
    • There is now a "Generic" orientation map data file reader that ought to be able to read most EBSD files. It can flip the data in the x or y directions and add an offset to the angles, so it can adapt to different coordinate and orientation conventions.
    • The TSL and TSL2 orientation map readers can now also flip the data and offset the angles, although the new Generic reader makes these readers unnecessary.
    • The Orientation Map menu now contains a "Pole Figure" menu item. It generates pole figures in pdf format from any Microstructure. The orientations are obtained from the Microstructure's Materials, so the command is most useful if the Materials' orientations come from an orientation map.
  • Bug Fixes:
    • Made changes to make the code compatible with the clang compiler in OS X 10.7.
    • Fixed an image modification memory leak.
    • Fixed a bug in reporting malformed materials.
    • Fixed a bug in setting the default display parameters for selected pixels.
    • Fixed the Skeleton boundary display method, which was confusing the line width and the arrow size.
2.1.5
  • Bug Fixes:
    • Rank 2 tensor parameters in scripts and ascii data files were being written in the wrong format, and components less than 1.e-6 were being truncated to zero.
    • The Tetragonal elasticity modulus was being stored incorrectly in binary data files.
2.1.4
  • Modifications:
    • The default values of the Hexagonal and Tetragonal elastic moduli in the GUI widgets for setting those values have been changed. The old values corresponded to singular elastic tensors.
  • Bug Fixes:
    • The program would hang intermittently when computing contour plots due to a bug in the progress bar code.
    • The program was consuming excessive amounts of memory during contour plotting.
    • Round-off error was causing the program to crash when using the OrientationMapProperty with Microstructures of particular unfortunate geometries.
    • The 9-noded quadrilateral element had a bug that would crash the program. Users probably shouldn't use this element anyhow, because it's less efficient and no more accurate than the 8-noded quadrilateral.
2.1.3
  • Bug Fix:
    • The program would crash when solving or evaluating flux output quantities on mesh with an orientation map.
2.1.2
  • New and modified features:
    • The sign of the heat source property has been changed, to make it sane. A positive heat source now adds heat to the system.
    • The offsets of floating boundary conditions can now be initialized in time dependent problems. The boundary conditions are now listed by name in the Initialization pane (formerly the Field Initialization pane) on the Solver Page, and can be set via the same buttons that initialize fields.
  • Bug fixes:
    • Time dependent boundary conditions weren't being treated correctly in quasistatic problems.
    • There was no way to assign an initial value to the offset of a floating boundary condition.
  • Administrivia:
    • The PREREQUISITES file has been removed from the distribution. The same information, only better, is available here.
2.1.1
  • New and modified features:
    • New images created from orientation maps are automatically displayed in the graphics window if there are no other images present.
    • There is now a new orientation map reader, "TSL2", which can read some more modern TSL .ang files. There is no good automatic way of detecting which is the appropriate reader. Try TSL2, and if it doesn't work, try TSL.
    • Scheduled Output data files are no longer automatically rewound, ever. When repeating a calculation, the files need to be rewound explicitly if the results of the first calculation should be overwritten.
    • The "Existing Stream" option for specifying a destination for output data is has been removed. Use "Output Stream" instead, even when writing more than one quantity to a single file.
    • The Schedule_Solution and Scrub_Solution commands in the OOF.Subproblem menu have been renamed to Enable_Solution and Disable_Solution. The old names were silly.
    • The Copy_All_Solvers command has been moved from the OOF.Subproblem menu to the OOF.Mesh menu.
  • Bug fixes:
    • When typing a time in the graphics window, the cursor isn't moved to the left after every keystroke.
    • The program no longer assumes that the points in TSL orientation map files are in order, or that the coordinates are all positive.
    • Some bugs in the abaqus output for skeletons and skeleton groups have been fixed.
    • OOF2 will now build with Python 2.7. The setup script includes a work-around for problems introduced by the Python 2.7 distutils library.
    • When sending multiple Scheduled Outputs to a single data file, the order of the outputs is no longer random.
2.1.0 See Getting Started with OOF2 2.1.0 for a list of the extensive changes between 2.0.5 and 2.1.0.
2.0.5a11
  • Bug Fix:
    • Fixed the piezoelectric material property.
2.0.5a10
  • Bug Fixes:
    • Fixed the geometric strain and plane-stress elasticity calculations, which had compensating incorrect factors of 1/2 in some components. Calculations that used plane-stress and measured or coupled to the xz or yz components of strain were incorrect. Stresses and the in-plane components of strain were not affected.
    • Fixed a bug on the Boundary Analysis page. The destination window's value wasn't being used, so output only went to the Message Window.
    • Added a temporary hack to work around an Ubuntu bug that could cause the progress bars to crash the program in text mode. Progress bars no longer adjust their length if the window width changes. This won't be an issue in 2.1 and later releases.
2.0.5a9
  • Bug Fix:
    • Fixed the image save functionality in displaying orientation map images.
2.0.5a8
  • Bug Fix:
    • The setup.py script has been modified to write the oofconfig.h file to the installation directory tree, to facilitate building extensions.
  • Additional Features:
    • Property API now includes begin_point and end_point hooks, called at the start and end of operations at a particular evaluation point. Properties with expensive point-specific operations can perform them and cache the result with this hook.
    • The SmallMatrix class now has an inversion function.
2.0.5a7
  • Bug Fix:
    • Abaqus output for meshes no longer contains split nodes at internal boundaries and interfaces.
2.0.5a6
  • Optimization:
    • Fixed more memory leaks, and added leak checking to the regression tests.
  • Bug Fix:
    • Fixed a bug in the AutoSkeleton command. It was specifying the min_distance for SnapRefine in the wrong units.
  • Hack:
    • The current versions of some of the libraries that OOF2 uses are put in strange places by the fink package manager on the Macintosh. The OOF2 build scripts now include a workaround for this.
2.0.5a5
  • New Features:
    • The Rationalize Skeleton modifier can remove high aspect ratio quadrilateral elements.
    • Added a --nanoHUB build option for building the nanoHUB version of OOF2. If present, using the console and loading python scripts are disabled for security reasons.
  • Optimizations:
    • Fixed a large number of memory leaks.
    • Homogeneity isn't computed when alpha==0.
  • Bug Fixes:
    • Constructing edge boundaries from node groups now works properly.
    • Fixed bugs in the Skeleton Info toolbox that made it impossible to select illegal elements by double clicking in the of a segment's or node's elements.
    • The min_distance parameter for Snap Refine now has a minimum allowed value of 1/100 the pixel size. This prevents Snap Refine from creating illegal elements.
2.0.5a3
  • Bug Fix:
    • The Heat Source property no longer raises an error when solving a system.
2.0.5a2
  • Bug Fixes:
    • Modified OOF.Skeleton.Auto so that it uses a non-zero min_distance in the SnapRefine step. This prevents it from creating illegal elements, which could trigger a divide-by-zero error in the Rationalize step. The divide-by-zero bug was also fixed, although it shouldn't occur independently.
    • Fixed a round-off error bug that could crash the program when the pixel size wasn't 1x1 in physical units.
    • Fixed a bug that prevented mesh data files from loading when the mesh contained initializers for out-of-plane fields.
    • Removed some of the adaptive mesh refinement tests from the regression suite, because they weren't portable. Apparently our refinement algorithm unstable and susceptible to round-off error.
2.0.5a1
  • New Features:
    • Right-clicking on the Graphics Window's Layer List brings up a pop-up menu for operating on the selected layer.
    • "Perimeter" display method for drawing the outline of a Mesh.
  • New Features (still under development and undocumented, so use them with caution!):
    • New "Interfaces" task page, which defines creates and manages new "Interface" objects, representing internal or external physical boundaries in a Microstructure. Unlike Skeleton Boundaries, Interfaces can be defined even in the absence of a Skeleton.
    • New Materials must be declared to be either "bulk" or "interface". The declaration restricts the types of Properties that can be assigned to them.
    • Interfacial material properties can be assigned to Interfaces and Skeleton Boundaries.
    • "Edgement" display method for drawing the Mesh segments that belong to an Interface or Skeleton Boundary.
  • Bug Fixes:
    • The "Save Image" menu item in the Graphics Window's "File" menu now works even when the window is displaying a Microstructure's Materials.
    • Modifying a Skeleton, creating a Mesh, unmodifying the Skeleton, and then modifying its boundaries no longer causes an error.
    • Adaptive Mesh Refinement can be applied to a Subproblem.
    • Defining a Field on a Subproblem no longer reinitializes the Field in locations where it's already been defined as part of another Subproblem.
2.0.4
  • Bug Fixes:
    • Fixed a divide by zero error that could occur if a Microstructure's x and y dimensions were integers with y>x.
    • Fixed a script loading bug for python versions ≥ 2.4. Code blocks in which the first left parenthesis ended a line weren't being parsed properly.
    • Fixed a bug that was allowing the CG solver to be used for some non-symmetric problems.
2.0.4b2
  • Bug Fixes:
    • OOF2 no longer crashes when quitting on NetBSD systems.
    • NetBSD systems are recognized by the setup.py file, and shouldn't require special arguments to build.
2.0.4b1
  • New Features:
    • Element, Node, and Segment groups in a Skeleton can now be created from existing Pixel Groups in a Microstructure.
    • The Skeleton Selection page has new buttons for clearing and for deleting all Skeleton groups of a given type.
    • The Image AutoGroup command has a new parameter, name_template, which determines how the automatically created pixel groups will be named. Any instance of '%c' in the template will be replaced by the pixel color. Any instance of '%n' will be replaced by an integer.
  • Bug Fixes:
    • TSL orientation map data files with points on a hexagonal lattice won't crash the program. However, every other row of data will be ignored, so that the remaining points are on a rectangular lattice.
    • Angles in TSL data files are read correctly. There was a degrees vs. radians problem earlier.
2.0.4a3
  • Various fixes and enhancements to the orientation mapping code:
    • It's no longer necessary to specify --enable-orientationmap when building. Orientation maps are always enabled.
    • TSL and HKL data files can now be read.
    • Pixel groups are automatically created from phase data in the orientation file.
    • Orientation maps can be converted to Images, so that OOF2's pixel selection tools can be used on them.
    • The Orientation display method for Microstructures was badly thought out. There are now two methods: Orientation displays the orientation of a pixel's Material, and OrientationMap displays a Microstructure's orientation map, whether or not it's used in a Material.
    • Orientation maps are now saved in Microstructure data files.
2.0.4a2 It turns out that "OIM" is a trademark, so the names of all of the new features for handling orientation mapping data have been changed from "OIM" to "Orientation Map".
2.0.4a1
  • Enhancements:
    • Added a "Deviator" invariant output for symmetric 3x3 tensors, which measures the amount of shear represented by a tensor.
    • The default initial graphics window size and the default Active Area display parameters can now be set in the OOF2.Settings.Graphics_Defaults menu.
    • Setup.py can now take a --with-swig argument, allowing a non-standard swig program to be used. For example, if you have swig 1.3 installed as "swig" and swig 1.1 build 883 (the version OOF2 requires) installed as "swig1.1", you can build OOF2 with python setup.py build --with-swig=swig1.1 etc.
    • Added support for Orientation Imaging Microscopy data files. See the OOF2 OIM page.
  • Bug Fixes:
    • Fixed some bugs in the Rationalize Skeleton modifier that could create inconsistent periodic Skeletons.
    • When a Skeleton node is pinned or unpinned, its periodic partners are now also pinned or unpinned.
    • The "Copy All..." button on the boundary conditions pages now also copies the periodic boundary conditions.
2.0.3
  • Enhancements:
    • Skeletons may be declared to be periodic in either the x or y direction, or both. Periodic boundary conditions can be applied to periodic skeletons.
    • A new "Auto" button has been added to the Skeleton page. It automatically creates and refines a Skeleton, given a Microstructure and estimates of the sizes of the microstructural features.
    • Default values for graphics display attributes (eg, mesh edge color) can be set via the OOF.Settings.Graphics_Defaults menu.
    • The setup.py script automatically detects whether or not libg2c is needed to link the blas libraries.
    • The SnapRefine Skeleton modification method has been improved. It now trisects element edges where appropriate.
  • Bug Fixes:
    • OOF2 is now compatible with Python 2.5.
    • Colons are prohibited in the names of Microstructures, Images, Skeletons, Meshes, SubProblems, and Properties. They caused errors before.
    • Fixed a bug that reported a spurious material property collision error when a property with a symmetric tensor parameter was reloaded from a data file or script.
    • Fixed a bug that would crash the program if the Activity Viewer window was closed while progress bars were still active. Thanks to Yu Dong for the bug report.
    • Fixed a bug that made Skeleton modifications fail if the Skeleton or its Microstructure had been renamed.
2.0.2
  • Enhancements:
    • Subproblems can now be defined on meshes. Different subproblems can contain different fields, or can be defined in different parts of the mesh. See the manual for more details.
    • Changes to the API for OOF2 extensions are documented in Appendix B in the manual.
    • The Mesh Info toolbox now lists the Fields that are defined on Nodes.
    • Added OOF.PixelSelection.Select_Material, which selects all pixels with a given Material assigned to them. The specified Material may be "<Any>", "<None>", or any defined Material.
    • Two new Skeleton modification methods have been added. SnapRefine refines elements but only divides their segments at pixel boundaries. SnapAnneal is an annealing method that only moves nodes to pixel boundaries.
  • Bug Fixes:
    • Fixed a bug that could crash the program if a Material was redefined in a data file, and that data file was loaded after a Mesh was created from a Microstructure that used the old definition of the Material.
    • Fixed an initialization bug for the cross-section widget on the analysis page. It was initialized incorrectly if there were already cross-sections in the mesh.
    • Fixed the energy computation in the stress-free strain.
    • Fixed the conversion routines for the Goldstein XYZ rotation convention.
    • Fixed a synchronization bug in the Materials page -- properties added via console/menu operations weren't synchronizing the Materials page correctly.
    • Added right-hand-side contribution code to the PlaneFluxEquation, so that plane-stress stress-free-strains are computed correctly.
    • Fixed a bug in the menus for the Analysis page, which could cause nonsense output to be generated because Material precomputation wasn't being done.
    • Progress bars are no longer drawn when using the --batch flag.
    • The "File/Save/Python Log" dialog box's OK button is now sensitized more or less correctly. It used to be insensitive if "File/Load/Script" had been used and the directory hadn't been changed. It's still not properly desensitized when the new file name is blank, but that's less bad than having it always be insensitive.
    • Fixed a bug that was causing locking errors when changing Skeleton modifiers.
    • Fixed a bug in the layer editor that caused the gui tests to fail intermittently, and may have caused the wrong layers to be sent to the graphics windows in real life, occasionally.
2.0.1
  • Enhancements:
    • The extensions subdirectory is now installed along with the rest of the examples.
    • The text of the tutorials can now be saved to a file via the Save Text item in the Tutorial Window's File menu.
  • Bug Fixes:
    • The Load button on the Image page is sensitized correctly.
    • The GUI tests should run more robustly. There are still timing problems, though. If a test freezes, try running it again.
    • Installation on Macintosh OS X should be more reliable. It's now unnecessary to set the DYLD_LIBRARY_PATH environment variable on Macs.
2.0.0
  • Enhancements:
    • There is now a GUI test suite, in the directory TEST/GUI.
    • The Boundary Analysis page has been improved, and doesn't look quite so half-hearted anymore.
    • Typing control-D in the console window no longer closes the window. It deletes a character instead. This is less destructive for people whose fingers think they're using emacs.
    • The pixel information toolbox can now display pixel colors in either RGB or HSV format.
  • Bug fixes:
    • A bug that could cause incorrect output for quantities that depend on property data has been fixed. In particular, the elastic energy density for anisotropic materials had been computed incorrectly.
    • The tetragonal Cijkl widget and the C4i widget have been fixed. They were displaying the wrong values for c26 and d32 respectively. The correct values were being used internally, though.
    • The orthorhombic Cijkl widget has been fixed. It was discarding c66 and using c55 instead.
    • The C3v tensor widget is now correct.
    • Skeleton nodes that were dragged outside the bounds of the microstructure couldn't be dragged back inside. This has been fixed.
    • The script loader code has been fixed so that it can handle else, elif, and except blocks. The new code can still be confused, but you have to go out of your way to confuse it.
    • A bug that could crash the program when selecting pixels with the brush tool has been fixed.
    • The topleft and topright boundary points for quadrilateral skeletons created on non-square microstructures are now constructed correctly.
    • The physical dimensions of images were being truncated to integer values, due to a typo which has been fixed. This was especially bad for images with sizes less than one.
2.0 beta 8
  • Enhancements:
    • The stiffness matrix calculation is faster, by a factor of 2 or 3.
    • Skeleton element homogeneity calculations are faster by a factor of 2 or more. Many skeleton operations benefit from this.
    • The size of the undo buffers can be set, in order to reduce memory usage for large meshes and microstructures.
    • The display of empty mesh elements (elements with no assigned material) can be toggled in the graphics window's Settings menu.
    • The Mesh Data Viewer updates itself correctly. The coordinates of the queried point can be edited.
    • Elements can be selected according to their Material.
  • Bug fixes:
    • Focussed zooming works properly.
    • python setup.py clean no longer removes the swig output files unless --swig is specified.
    • Many other bugs were fixed, relating to crashes, deadlocks, and other misbehavior.
2.0 beta 7
  • Enhancements:
    • The monolithic oofcppcmodule.so has been split into four separate shared libraries, and the swig-generated wrappers have each been given their own shared library. This means that code that's not needed doesn't have to be loaded, and it makes it possible for external oof2 extensions to be built without rebuilding oof2 itself.
    • Chapters on writing extensions to oof2 have been added to the manual. Example extensions are in examples/extension.
    • Skeletons and Meshes can be saved in abaqus format.
    • Images saved from graphics windows are now in PDF format, instead of postscript.
    • The SnapNodes function has been sped up by at least 25%.
    • The TEST subdirectory contains a test suite. The tests are reasonably, but not completely, comprehensive for the non-GUI parts of oof2.
    • Crystal orientations can be given in Bunge notation, as well as all of the other formats.
    • Boundary condition profiles can be saved.
    • The boundary condition dialog box stays open after assigning a boundary condition, making it easy to assign multiple conditions.
  • Selected Bug Fixes:
    • Buttons in the Layer Editor window are sensitized properly even after layers have been deleted.
    • The Conjugate Gradient solver is now the default solver when the stiffness matrix is symmetric, and unavailable when it isn't. oof2 is better at noticing when the matrix is symmetric.
    • An indexing error that was preventing the use of the IC and ILU preconditioners for plane stress elasticity problems has been fixed.
    • A bug that confused the microstructure material display after saving it as pdf or postscript has been fixed.
    • Rank 2 and rank 3 tensors are now saved properly in binary data files.
    • Active Areas are now saved with their Microstructures in data files.
    • A bug in the matrix GUIs has been fixed. Invalid inputs will no longer crash the program.
    • Warning message pop-up windows don't hang the program anymore.
    • The gaussian integration order was being computed incorrectly in a few cases. This has been fixed.
    • Loading a named Property from a data file will no longer change the parameters of an unnamed Property of the same type.
    • It's now impossible to choose plane-flux equations when setting boundary conditions.
  • Other Changes:
    • The "configure and make" installation scheme is no longer available. The only way to build and install oof2 is to use Python distutils. See the README file in the source distribution for more information.
    • The force density property has no z-component anymore.
    • Pixel selections aren't displayed unless there's a microstructure or image layer displayed in the graphics window.
    • Commands from the PinNodes toolbox now get a "skeleton" argument. Old scripts that use commands like OOF.Graphics_1.Toolbox.Pin_Nodes... will have to be modified.
    • The 'Refine' SkeletonModifier now has an 'alpha' parameter, because it uses the effective energy of skeleton elements to choose the best refinement geometry. This change will break old scripts, but they can be fixed by adding "alpha=0.5" to the Refine arguments.
    • The badly named 'selectable' argument in pixel selection commands has been changed. It's now 'microstructure' for commands in the OOF.PixelSelection menu, and 'source' for commands in the OOF.Graphics_n.Toolbox.Pixel_Select menu.
2.0 beta 6
  • Enhancements:
    • Switched gui libraries from gtk+1.2 to gtk+2.6. 2.6 should be much easier to install.
    • Added a "Settings" menu to the main window, and put a "Fonts" submenu in it. Fonts/Widgets command changes the font used in the GUI, and Fonts/Fixed changes the font used in the Message window and other text displays.
    • Added a "Theme" command to the Settings menu, allowing Gnome gui skins to be used.
    • If the file ".oof2rc" exists in the user's home directory, the OOF2 menu commands in it will be processed at the start of every OOF2 session.
    • Moved the image-save menu item from OOF.Image.Save to OOF.File.Save.Image, for consistency with the other who objects.
  • Bug fixes:
    • Fixed a sign error in the flux output calculation that was causing incorrect results for fluxes with offset values, such as stress when the thermal expansion property has a non-zero T0.
    • Fixed a bug that made it impossible to copy pixel groups.
    • Fixed a bug that could cause crashes when switching between contour plots with vastly different ranges of values.
    • Changed the way the matrix symmetrization is done, making it independent of the order in which equations are defined. This makes the preconditioners work more reliably.
2.0 beta 5.1 This release simply corrects a few errors in the tutorials. There is no functional difference between beta 5 and beta 5.1.
2.0 beta 5
  • New Features:
    • During execution, a Python log of the executed commands is stored in a temporary file. If the program exits properly, the file is removed.
    • Mesh elements with no Material assigned to them aren't drawn in the graphics window displays. Skeleton elements with no Material are still drawn, though.
    • Meshes are now automatically displayed, like Skeletons.
    • The Viewer toolbox has bee simplified and improved.
    • The Property hierarchy has been reorganized and rationalized. Elasticity is a now a subcategory of Mechanical, which also includes ForceDensity (eg, gravity). Thermal Conductivity and HeatSource are subcategories of Thermal. A new Couplings category includes ThermalExpansion and PiezoElectricity.
  • Bug Fixes:
    • A sign error was fixed that was causing thermal expansion with a non-zero T0 to yield incorrect results. Other properties that enter the equations in a similar way (such as gravitational forces) were similarly affected.
    • The Perimeter display for Meshes wasn't working, and has been removed. If anybody wants it back, let us know, and we'll fix it.
    • The solver now complains if asked to solve an equation to which no Materials contribute.
    • Field initializers are now stored correctly in binary data files.
    • The calculation of the effective energy of quadrilateral elements was fixed. The elements were much too susceptible to deformation.
    • A submatrix extraction bug that led to crashes when the stiffness matrix contained empty rows has been fixed.
    • A bug in the element-finding code that could cause infinite loops when selecting elements with the Skeleton Info toolbox has been fixed.
    • A bug in deleting boundaries from a copied Skeleton has been fixed.
    • A deadlock when attempting to copy data from a Mesh to itself has been eliminated.
    • A bug that could raise an exception when selecting a node in "keyboard" mode in the Move Node toolbox has been fixed.
    • The "Meshable" button in the Microstructure page is now set properly when the selected group changes.
    • A bug, introduced in beta 4, that prevented Materials from being saved has been fixed.
    • Cancelling the "Save Profile" dialog doesn't cause an error anymore.
    • A bug that was making modified Images lose their names has been fixed.
    • A bug that was preventing the Repeat button in the Selection toolboxes from working properly, sometimes, has been fixed.
    • Opening a Mesh Data Viewer window when no Fields are defined no longer crashes the program.
  • Script Interface Changes:
    • The following toolbox commands now take a single Point argument, instead of separate x and y arguments:
      • OOF.Graphics_n.Toolbox.Move_Nodes.SelectNode
      • OOF.Graphics_n.Toolbox.Skeleton_Info.QueryElement
      • OOF.Graphics_n.Toolbox.Skeleton_Info.QueryNode
      • OOF.Graphics_n.Toolbox.Skeleton_Info.QuerySegment
      • OOF.Graphics_n.Toolbox.Mesh_Info.QueryElement
      • OOF.Graphics_n.Toolbox.Mesh_Info.QueryNode
      • OOF.Graphics_n.Toolbox.Pin_Nodes.Pin
      • OOF.Graphics_n.Toolbox.Pin_Nodes.UnPin
      • OOF.Graphics_n.Toolbox.Pin_Nodes.TogglePin
    • The changes in the Property hierarchy described above affect all of the Property menus, as well as the way in which Properties are specified when assembling Materials.
    • The OOF.Mesh.New command now takes an element_types argument instead of the element3 and element4 arguments. The value of element_types is a list of names of elements.
    • Neumann boundary conditions aren't as wordy. The profile set can be abbreviated as profile=[profile1, profile2] instead of profile=FluxProfileSet([profile1,profile2]). The old verbose format is still acceptable, though.
  • Optimizations:
    • The area fractions of pixel categories within Skeleton elements are now computed via a new algorithm, which is 3-10 times faster than the old one, and scales better with element size. (Thanks to Jim Sethna for suggesting the new method).
2.0 beta 4
  • New Features:
    • Added a skeleton modifier, called Relax, that uses the local measure of inhomogeneity and shape quality to improve the mesh. The modifier creates a finite element mesh and minimizes an energy functional, analogous to the one of an elastic-plastic solid.
    • Added the Coulomb equation, electric fields, and piezoelectric couplings for all the crystallographic point groups.
    • Added a Newton-Raphson solver (for future applications).
    • Added a mechanism to make the stiffness matrix symmetric, if possible. The mesh status window in the solver page reports the symmetry status of the mesh.
    • Added a display method that colors skeleton elements according to their effective energy.
  • Improvements:
    • Improved the 'FixIllegal' Skeleton modifier.
  • Interface Changes:
    • Changed the 'skelname' parameter in all PinNodes operations to 'skeleton'.
    • Added a "Pin Nodes" page to accomodate pinning processes that don't need mouse clicks.
    • Put widgets for the DirectOutput parameters "comment character" and "separator" in the Mesh Cross-Section toolbox.
  • Bug Fixes:
    • Fixed a bug in the destruction of Skeletons when the undo buffer filled up.
    • Fixed a bug in which the selected Skeleton boundary would disappear from the display when its display parameters were edited.
    • Fixed a bug in which the Rationalize skeleton modifier sometimes destroyed skeleton edge boundaries.
    • Fixed menu sensitization errors. The Layer/Edit menu item was sensitive even when no layer was selected. The File/Save menu items were sensitive if there was nothing to save.
    • Fixed a bug in the node-hashing code which prevented node selections from working on sparse high-aspect-ratio skeletons.
    • Made it impossible to delete predefined Properties.
    • Added clean-up code to the Mesh Cross-Section widget. This fixes a bug where GTK errors would arise after this widget had been deselected on the analysis page.
    • Fixed the broken "Prev" and "Next" buttons. They worked in 2.0.b2 but not in 2.0.b3.
    • Fixed signalling problems in the skeleton and movenode tutorials. The "Next" button wasn't sensitizing correctly for many tutorial pages.
    • Fixed a bug in the labelled slider widgets which could cause them to reject typed in values.
    • Eliminated the spurious warnings about uncallable objects at shut down time.
2.0 beta 3
  • New Features:
    • Added a "--with-lapack=-l<custom lapack>" argument to the configuration script.
    • Completely reworked the Analysis page in the main OOF2 window.
  • Command Line Interface Changes. (These changes all potentially break scripts. Sorry about that. Contact us if you need to convert scripts from the old format to the new.)
    • Simplified the names of the Property classes (Elasticity:Anisotropic:CubicElasticity is now Elasticity:Anisotropic:Cubic). Added symmetries for thermal expansion and thermal conductivity. Changed the display of Properties in the Materials window so that the full names are shown.
    • The OOF.Mesh.Boundary_Conditions.New menu has been replaced with an OOF.Mesh.Boundary_Conditions.New command. The old submenus (Dirichlet, Neumann, etc) are now arguments to the New command. Similar changes were made to the OOF.Mesh.Profiles.New menu. This is more in line with the way other commands work.
    • Simple representations of functions (eg boundary condition profiles) are now allowed in scripts. Instead of "function=XYStrFunction('x+y')" it's now possible to use "function='x+y'". Doing this requires that *all* arguments used in scripts are keyword arguments, so 'Gray(0.8)' is now "Gray(value=0.8)".
  • Graphical User Interface Changes:
    • Simplified the Mesh Cross Section toolbox and display somewhat, by removing the Autodisplay button and adding a '<None>' entry in the cross section list.
    • Moved field and flux display out of the Mesh Info toolbox and into a separate data viewer window. It can display more values and is a better use of screen real estate.
    • Boundary construction is now context-sensitive, the GUI does not present disallowed "Directors" (i.e. you can't pick left-to-right if your segments form a loop).
  • Graphical User Interface Bug Fixes:
    • Fixed a sensitization error in dialog boxes with function parameters.
    • Fixed a bug in which using the window manager's close button (instead of the window's "Cancel" button) to close a file selection window could lead to a crash.
  • Command Line Interface Bug Fixes:
    • Two Pixel Groups cannot have the same names in a Microstructure -- it was possible before, because we thought it would be fun! Not any more.
  • General Bug Fixes:
    • Starting oof2 in the background ("% oof2 &") works in GUI mode.
    • Pixel selection and material assignment operations now all respect the active area, if appropriate.
    • The pixel selection modifier 'Intersect Group' now works correctly.
    • Attempting to move Skeleton nodes when no Skeleton is displayed doesn't generate errors anymore.
    • Boundary creation and removal operations which take place in skeletons are now propagated to meshes created from that skeleton.
    • Boundary modification now actually works for skeletons which differ from their parents only by node moves, and these boundary modifications are propagated to the meshes.
    • Fixed a divide by zero error that could arise when selecting nodes in a Skeleton with an unfortunate choice of dimensions.
    • Required that progress bar delay time be an integer number of milliseconds.
    • Made the graphics windows (more) thread safe.
    • Fixed the tutorial bug which would sometimes enable the "Next" button when the last entry was displayed.
    • Fixed a bug in the stopping criterion for iterative skeleton modifiers.
    • Fixed boundary intersection checking and the reset function for unpromoting promoted floating boundary conditions. These were resulting in spurious reports of boundary condition collisions.
  • Output Bug Fixes:
    • Fixed a bug in the post-script output for saved images -- selections were being drawn incorrectly for non-square images.
    • Added an extra margin around postscript output, so rounding errors in the bounding box or clipping path don't cause a loss of data.
    • Data files saved in the "script" format load correctly.
    • Skeleton groups (of nodes, segments, and elements) are stored in data files.
    • Selecting "actual" for the the "where" parameter in Mesh displays works even if the displacement field isn't defined on the Mesh.
  • Optimizations:
    • Upon creating simple skeleton, elements' homogeneity is automatically set to be 1.0.
    • When finding transition points for Snap Nodes, the homogeneity of the element is always checked beforehand -- Purely homogeneous elements will not be looked at.
    • Stiffness matrix reconstruction is now skipped if it's not required by changes in the status of the mesh.
2.0 beta 2
  • Used a common scheme for all parameter names.