OOF: Finite Element Analysis of Microstructures

oof2 logo

OOF2 Changes

2.0.5a3
  • Bug Fixes:
    • 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.
    The program b42after.py will alter oof2 scripts and ascii data files from oof2 beta 4 so that they will work with beta 5.
  • 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.

Send comments to the OOF team.