OOF: Finite Element Analysis of Microstructures

Recent Changes to OOF

This file lists the latest OOF modifications last.

Modifications to PPM2OOF are listed separately.

version 0.1.0 6/97. This is the first numbered version.
  • Thermal color map.
  • Bug fix: disconnected nodes weren't reconnected when empty elements were replaced with non-empty elements.
version 0.1.1 6/4/97
  • Replace spaces in group names with underscores. Spaces couldn't be parsed properly.
version 0.1.2 6/5/97
  • Installed new menu routines. Changes in variables set in scripts are now reflected in GUI menus.
version 0.1.3 6/97
  • Moved preconditioner setting from separate menu to enumerated variable with pull down menu.
  • Got rid of conversion from StressStrain to MV_Vector_double, which was confusing the 64 bit compiler.
version 0.1.4 6/5/97
  • Moved statistics type to enumerated variable w/ pull down menu.
version 0.1.5 6/6/97
  • Print all settable variables in binary goof file. Print empty strings with quotation marks so that they don't look like missing arguments when reading the goof file.
version 0.1.6 6/10/97
  • Print all settable variables in ascii goof file too.
version 0.2 Identical to version 0.1.6, put on the web site.
version 0.2.1 6/24/97
  • Increased blocksize for groups so they can be allocated faster.
version 0.2.2 7/1/97
  • Fixed bug in arithmetic with stress & strain classes that was causing "Incompatible vector length" errors.
version 0.3 7/2/97
  • Reorganized "distort" menu. This breaks (slightly) existing goof files. The distortions stored in them won't be read correctly. But it turns out that if the files were written by oof, they weren't written correctly since version 0.1.5 anyway.
version 0.3.1 7/7/97
  • Got rid of old "axis" output commands. Nobody used them anyway, presumably.
version 0.3.2 7/9/97
  • Changed 11 to XX in menus, to avoid confusion. We're told that 11 is the principle component, not the xx component, of stress.
version 0.3.3 7/15/97
  • Fixed bug wrt proliferation of disconnected nodes.
version 0.3.4 7/30/97
  • "distort set reset_params" now works properly.
version 0.3.5 8/5/97
  • Clumsy bug fix. bc & distort commands read from goof file are stored in cmdlist with "oof" prefix, since that's the way they appear in the file. But then they're written with another "oof" prefix, so the next time they're read errors are generated. Clumsy fix is to put a oof->oof loop in the root menu. The problem with this is that the goof file keeps getting bigger each time it's written.
version 0.3.6 8/6/97
  • fixed clumsiness in 0.3.5. Goof file still keeps getting bigger, because commands are repeated, but oof->oof loop isn't needed.
  • Plot principal values of stress & strain.
  • Got rid of "suffix" variable.
version 0.4.0 8/21/97
  • 8-bit graphics, new ScrollCanvas
version 0.4.1 8/22/97
  • pixmap backing for color bar, so that it draws faster, and draws correctly in 8-bit mode. Not working yet.
version 0.4.2 9/5/97
  • don't include "principal" and "shear" in element info eigenvalues. They were nonsense.
version 0.4.3 9/9/97
  • change colors in colorbar by clicking on them. Left mouse changes color, right mouse prints color info, middle mouse reverts to default color.
version 0.5 9/16/97
  • Nothing new. Changed number to have a round number to put on the web.
version 0.5.1 9/16/97
  • Can turn wallpaper on and off. Can't change color, though.
version 0.5.2 9/23/97
  • "Save" button now works in graphics windows.
version 0.5.3 9/25/97
  • Removed "bc force" command. Forces can be applied to all nodes.
  • New "distort clear" menu to clear incremental and absolute distortions from node groups.
version 0.5.4 10/30/97
  • Got rid of "-t" command line option, and disabled graphics menu when "-g" isn't specified.
  • Fancy text start-up screen.
version 0.5.5 10/97 -- 11/97
  • Fixed bugs wrt saving macros and defining macros that set variables.
  • Use XForms code for handling command line arguments. -l <logfile> added. -f <cmdfilelist> now requires comma delimited list of files, without spaces. -f can't be specified multiple times anymore.
  • -g is no longer needed. Use -t to use the text interface.
version 0.5.6 11/19/97
  • Mouse clicks are recorded in log files and can be played back. Colorbar editing temporarily disabled.
  • Record window size changes in log file.
  • Catch "close" events from window manager, and ignore them, mostly.
  • Ask to save log file when quitting.
version 0.5.7 11/20/97
  • Fixed bug in colorbar editing. Middle mouse made colors revert to slightly wrong colors.
  • Reinstated color bar editing. Mouse clicks on the colorbar are now recorded in the log file.
  • X cursors are defined only once and freed at the end, instead of being defined in each drawer.
version 0.5.8 1/98
  • Inserted missing space in ascii output for hexagonal elements.
  • No longer require element indices to be in order in ascii goof files.
  • "Empty Elements" button in Attributes dashboard now works. Had been broken in 0.5.6, probably.
version 0.6.0 2/3/98
  • Installed XForms version 0.88
  • Changed -f option to -file, since XForms 0.88 uses -f.
  • Fixed bug. Coordinates Dashboard would sometimes not show limits of visible region.
  • Got rid of single character command line options. XForms processes its own options before the application's options, so single character options can be mistaken for abbreviated XForms options.
  • Cleaned up memory leaks in dashboards.
  • Use fl_share_canvas_colormap. Should allow windows to be closed w/out crashing on 8 bit displays.
version 0.6.1 3/17/98
  • Workaround for bugs caused by new XForms library.
  • Fixed bug with spaces in EulerAngle input.
  • Allowed E format for floating point inputs.
version 0.6.2 3/18/98
  • More workarounds for bugs caused by new XForms library. Color dashboards with fullscale turned off would crash when switching or closing drawers.
version 0.6.3 3/26/98
  • Upgraded to XForms version 0.88.1 from 0.88.
version 0.6.4 3/27/98
  • Weight statistical output by element area.
version 0.6.5 4/17/98
  • Griffith element.
version 0.6.6 5/4/98
  • Disable "debug Xdebug" in text mode.
version 0.6.7 5/15/98
  • Don't use fast malloc library -- it uses too much space!
version 0.6.8 5/26/98
  • Avoid resizing arrays, improved connectivity detection.
  • Add Nelements and Nnodes lines to the goof files.
version 0.6.9 5/98 -- 6/98
  • Tie degrees of freedom together, so that all the nodes on an edge can move in unison. (Not working yet...)
  • Bug fix: internally generated grids put the wrong node in the topright node group unless nx == ny.
  • Graphics output for shear stress & strain.
version 0.7.0 6/98
  • Slaved nodes finally working, I think.
  • Zimmer & Griffith elements revert to unmutated state properly when reset.
  • Changed single/double click behavior in menus. Single clicks now bring up function windows, and double clicks execute functions immediately. This is the safe way to do it if you're running over a slow connection and the double clicks aren't getting through in time. You can recover the old behavior by starting with the -singleclickfns option.
version 0.7.1 7/98
  • "Home" key on keyboard brings the root menu to the front.
  • "select node number" command
  • "select element number" command
version 0.7.2 7/30/98
  • Added "griffith_element2" as a stopgap measure. It's still not quite correct.
version 0.7.3 8/98
  • Didn't succeed in fixing "output energy" command to account for stress free strains. "output force" is still broken.
  • "log save" command to save log file now, without quitting.
  • Fixed InfoDashboard "node type" button.
version 0.7.4 8/98
  • Fixed "output force" command (sign error was causing bad output when deltaT was non-zero).
  • Fixed "output force" -- possible wrong output if force measured after nodes were freed.
version 0.7.5 9/15/98
  • Mutated elements are stored in goof files correctly.

version 1.0 9/15/98
  • Just renamed version 0.7.5
version 1.0.1 9/29/98
  • Made the question mark cursor like the one in PPM2OOF, with the hotspot below the dot.
version 1.0.2 10/30/98
  • Fixed bug in "output force". Program would crash if system hadn't been equilibrated.
version 1.0.3 11/4/98
  • Fixed bug in application of incremental distortions when a node was in two fixed groups. For example,
    OOF >> bc fix both (top; right)
    OOF >> distort set (xshift = .1; right)
    OOF >> distort increment
    didn't move the top right node.
version 1.0.4 1/7/99
  • Use new ostream class for output. Colored text in message window.
  • New commands "output tee ..."
version 1.0.5 1/27/99
  • New button in Element Info dashboard, for printing element index.
  • Fixed bug in which applied forces weren't being applied! Bug existed since version 1.0.3.
version 1.0.6 3/2/99
  • Installed kludge that lets programs compiled under IRIX 6.5 run under IRIX 6.2.
version 1.0.7 3/99 -- 4/99
  • Fixed bug in unmutating elements. Zimmer elements didn't revert to original orientation. Fixing the bug invalidates old goof files that store mutated elements, though.
  • Mutate and equilibrate commands can be interrupted with "STOP" button.
  • Fixed crash when reading ascii goof file after "init uniform ..."
  • Avoid double redraw after reading goof file.
  • Correct placement of initial image after reading ascii goof file.
  • New more robust vec.C.
version 1.0.8 5/99
  • Fixed a bug in which the shear stresses weren't being reported properly for some elements.
  • Fixed a bug in which forces weren't being reported correctly for enslaved nodes. The sign convention for forces has also been changed -- a positive force on the right edge now means that the system is being pulled to the right. (The old convention was that "output force" showed the force that the sample exerted on the boundaries, rather than the force the boundaries exerted on the sample.) Changed "applied force" button in NodeInfo dashboard to "force".
  • Ported to Sun!
  • Clicking in the wrong spot on the dashboard selector would bring up the main menu window. Fixed by moving a hidden button.
  • When mutating elements, the principal stress is computed in 3D, not just in the XY plane, in order to determine the coordinate system in which the knockdown is performed.
  • Fixed bug: Damage element applied knockdown2 to C_45 twice.
  • Restructured Element Info dashboard. All components of stress and/or strain are printed when the "components" button is lit, and all invariants are printed when the "invariants" button is lit.
  • Fixed bug in which not all element info buttons were recorded properly in the log file.
  • Strain outputs ("output strain" command, and graphics windows) report the total strain, not the elastic strain. The strain reported in previous versions was the two-dimensional elastic strain used in plane stress and plane strain calculations, which is not the true elastic strain when using plane strain and thermal expansion.
  • Fixed bug. The griffith2 element hadn't been appearing in the menus, but the griffith menu options created griffith2 elements. Binary files written by PPM2OOF were read correctly. Binary files written by OOF created only griffith elements. Ascii files written by OOF created only griffith2 elements.
  • "STOP" button now doesn't take up 25% of the CPU, uses forked process.
  • comp_equil now stops if the equilibration step fails to converge.
  • Fixed plane stress calculation. It no longer crashes when out-of-plane moduli vanish.

(OK, it's more useful to list beta version numbers than dates...)

1.0.8 beta 9
  • The STOP button works properly.
  • There are now drawers for the 3rd principal and 3rd invariants of stress and strain.
  • The Element Info dashboard reports the direction of the eigenvectors for each eigenvalue, expressed as an Euler angle rotation from the z axis.
  • The griffith2 element compares the surface energy to (1-knockdown1) times the energy stored in the direction of the principal stress, ie, the amount of energy that would be released if the modulus in the direction of the principal stress were reduced by knockdown1.  It's still not a real Griffith criterion, but it's getting closer.
1.0.8 beta 10
  • Bugs were found and fixed in the computation of the stress in plane-stress calculations.
  • The program no longer crashes when an out-of-plane modulus is zero in plane-stress calculations.
1.0.8 beta 12
  • The "STOP" button was redone once again.  It now doesn't require a separate process, and still doesn't take CPU time away from the ongoing computation.
  • The "plot out" command works, again (I think).
  • Output from "output tee" is line buffered, so that you can view results before the file is complete.
1.0.8 beta 13
  • Removed garbage at the beginning of lines in files written by the "Save" buton in the Message Window.
  • Graphics windows remember their settings when switching between different views.  For example, if you manually set the range of displayed values in a Stress XX window, that range will be retained if you switch to Stress YY and back to XX.
  • The elements in the files written by commands in the "output individual" menu are now sorted by element index.
1.0.8 beta 14
  • Fixed a bug introduced in beta 13 when making graphics windows remember their settings.
1.0.8 beta 15
  • Fixed a bug in the zimmer element that caused the "reset" command to fail if the element had mutated more than once.
1.0.8 beta 17
  • Added trigonalA, trigonalB, trigonalCrack, and zimmer2 elements.
  • Fixed a bug that put garbage in the log file when then elementtype button was changed in he element info dashboard.
1.0.8 beta 18
  • Unknown element types in the header of the binary .goof file no longer cause an error unless they're actually used in the mesh.
1.0.8 beta 19
  • Fixed a bug introduced in 1.0.8 beta 13 that was preventing the graphics windows from updating properly in some circumstances.
1.0.8 beta 20
  • Added tetragonal elements and kessler element. The Kessler element implements a model of ferroelastic switching from Hannes Kessler.
  • Worked around a bug (maybe a feature) in the GNU iostream library that was breaking the output/individual commands in the Linux versions of OOF.
1.0.8 beta 21
  • Added Nelements and Nnodes data to the output/grid/ascii file format. Their absence made grids read from ascii files take up more memory than they should have, but didn't otherwise affect the program.
1.0.8 beta 22-24
  • Added an "enhancement" variable to the main menu for enhancing the displayed displacements. Nodes are drawn at their original position plus enhancement times their displacements, so enhancement=1 is the normal display, and enhancement=0 is the undistorted mesh.
  • Added the Cross Section dashboard to the Drawers, for plotting the displayed quantity along a line. Currently it only puts uniformly spaced points on the line; in a later version it will optionally put points only at the element boundaries.
  • Added an output/crosssection menu, giving access to the functionality of the Cross Section dashboard even in text mode.
  • Changed output/stress/statistics/type=invariant to eigenvalues and added a new option called invariants that prints statistics on the first, second, and third invariants of the stress. The same change applies to output/strain/statistics/type.
  • Fixed a obscure bug that prevented Drawers from being updated if they had been opened but were not visible when the mesh was created.
1.0.8 beta 25
  • The Cross Section dashboard can plot with unevenly spaced points. It tries to put points only at the element boundaries.
1.0.8 beta 26
  • Moved the enhancement variable from the main menu to the graphics menu. This wouldn't normally merit its own version number, but I was updating the manual and didn't want it to get ahead of the program.
1.0.8 beta 27
  • Changed the way in which the Cross Section commands work with non-uniformly spaced points. Now points are placed at element boundaries, regardless of whether or not the function being plotted changes value.
  • Split the /ouptut/crosssection menu into two submenus, named "uniform" and "nonuniform", for uniformly and nonuniformly spaced plot points. In the original scheme it was impossible to set the tolerance for nonuniformly spaced points.
1.0.8 beta 28
  • Added output for two-dimensional shear stress, which is only guaranteed to be correct if the out-of-plane stresses are zero.
1.0.8 beta 29
  • Fixed a bug in the force output. The thermal stresses hadn't been included.
  • Added the "pause" command.
1.0.8 beta 30
  • Added a "rename" command for element and node groups.
  • Added a pause command to put in scripts.
1.0.8 beta 31
  • Made "output/stress/statistics" use the original element areas for weights, rather than the disorted areas.
  • Check for and warn about nonpositive areas after equilibrating.
  • Added "output/strain/statistics" menu, which does for total strain what the "output/stress/statistics" menu does for stress.
  • Fixed the arclength button on the cross section dashboard.
  • Added "output/current_area/<group>" and "output/original_area/<group>" to get the total area of a group of elements.
  • Added "output/stress/all" and "output/strain/all" to get average stress and strain on the whole system.
  • After equilibration, move disconnected nodes to the average position of their neighbors, so that they don't screw up the warning about nonpositive element areas.
  • Avoid nan's in statistics output when roundoff error makes the variance slightly negative.
1.0.8 beta 32
  • Give a warning when one or both ends of the line are off the edge of the grid in the cross section dashboard, and try to do something sensible.
1.0.8 beta 32
  • Give a warning when one or both ends of the line are off the edge of the grid in the cross section dashboard, and try to do something sensible.
1.0.8 beta 33
  • Don't close the whole program when closing the color browser with a window-manager close button.

version 1.1 9/00-10/00
  • Added thermal fields.
  • Changed the way that enslaved degrees of freedom are implemented. Now it's possible to enslave two groups that share the same degrees of freedom.
  • Changed the way that boundary conditions and distortions are stored in the goof files. Instead of storing the command list, the distortion and bc state of each nodegroup is stored with the group information. Storing the command list could lead to errors when a group had been enslaved and then emancipated before writing the goof file.
version 1.1.1 10/13/00
  • Merged source for thermal and regular versions. Compiling with the compiler flag -DTHERMAL gives the thermal version. Both versions now have the same version number.
  • Added Doug Twisselmann's Twissel Element (isotropic with a T independent stress free strain). The strain is proportional to a fictive temperature, which appears in the main OOF menu.
version 1.1.2 10/17/00
  • Workaround for XForms bug which makes command line argument parsing fail when the program name has more than one dot in it (as in "oof1.1.1").
version 1.1.3 10/19/00
  • Added the gas element (thermal conductivity but no elasticity) to the thermal version. The elastic-only version is unchanged.
version 1.1.4 10/00
  • Added select/nodes/nearest and select/nodes/rectangle commands for selecting nodes in text mode.
  • Added output/position/group commands to print the average position of a node group.
version 1.1.5 11/02/00
  • Upgraded to XForms library version 0.89.5
  • Added a -start command line option, ala ppm2oof. It's really just a clone of the -file option. Both of them now take as an argument a comma separated list of command files to be read and commands to execute, with the command preceded by an exclamation point. For example,
      oof -start initialize.cmd,\!equilibrate,output.cmd
    The exclamation point is preceded by a backslash to prevent the Unix shell from interpreting it. If the commands contain spaces, the whole string must be enclosed in quotation marks, or the spaces must be preceded by backslashes. Commas in commands must be preceded by backslashes.
  • Added a cubic_crack element, which is like the griffith2 element but has cubic symmetry.
version 1.1.6 11/00
  • Fixed a meaningless error message when the -start command line option was used and -file wasn't.
  • Reworked the way distortions and enslavements are implemented, since they weren't working correctly for groups which were both fixed and enslaved. There's not much need for fixed enslaved groups, but they could arise by accident.
  • Added "bc/emancipate/all".
version 1.1.7 11/00
  • Fixed a bug that was causing problems in reading configuration files in ppm2oof. Don't know if it was causing problems in oof, though...
  • Added "output/comment" to allow annotation in files written by "output/tee".
  • Commands that affect the boundary conditions applied via node groups no longer apply those boundary conditions immediately. The boundary conditions are postponed until abolutely needed, in order to speed up their application to multiple groups. A consequence is that the display may not reflect the current boundary conditions. Use "bc/apply" to force the boundary conditions to be applied immediately. Clicking on a node in the NodeInfo dashboard will also apply the boundary conditions.
version 1.1.8 1/11/01
  • Restored the preconditioner variable to the root menu in the elastic version of the program. It had somehow been lost when the thermal code was added.
version 1.1.9 2/01
  • Added "output/traction" to print the dot product of the stress with the surface normal, integrated over the length of a surface defined by a nodegroup. It should be the same as "output/force", but may treat corners better in some cases. It will get confused if the nodegroup does not represent a real edge.
  • The "Save" button in the graphics windows will now generate PostScript output if the output file name ends in ".ps" or ".eps".
version 1.1.10 6/4/01
  • Reordered operations at exit to avoid a rare segmentation fault.
version 1.1.11 6/27/01
  • Added the "effective property" menu to compute effective macroscopic properties.
version 1.1.12 11/01
  • Added "gradyation" element requested by Grady White.
  • Fixed the "effective property" menu commands in the thermal version.
version 1.1.13 11/30/01
  • Fixed the "effective property" menu commands, again. They hadn't been dividing by the edge length.
version 1.1.14 11/30/01
  • Fixed a bug that caused crashes when equilibrating with empty elements in the thermal version.
version 1.1.15 12/11/01
  • Fixed errant factors of 0.5 in the calculation of the TrigonalA modulus. C46 and C56 were half the size they should have been.
version 1.1.16 02/05/02
  • Minor changes to make gcc 2.96 happy. No additional features.
version 1.1.17 10/16/02
  • Modifications to allow compilation with gcc 3.1. No additional features.
version 1.1.18 8/21/03
  • Added valeria element.
version 1.1.19 10/31/03
  • Minor changes to accomodate gcc3.3 and OS X 10.3.
version 1.1.20 2/18/05
  • New output routines for saving data in OOF2 format, and minor fixes to accomodate newer compilers.
version 1.1.21 8/1/05
  • Minor changes to accomodate gcc 3.4.
version 1.1.22 8/21/07
  • Minor changes to accomodate gcc 4.1.