OOF: Finite Element Analysis of Microstructures

Changes to the API for OOF2 Property Extensions

This page is still under construction.

A number of changes will have to be made to OOF2 Property extensions to get them to work with version 2.1.0. Probably the easiest way to update old Properties is to compare with an example from the OOF2 2.1.0 source code. This brief summary may help, as will referring to the relevant section of the old OOF2 manual.

The Property Class

User defined Properties should now be derived from one of three Property subclasses, FluxProperty, EqnProperty, or AuxiliaryProperty.

The Python versions of these base classes are PyFluxProperty and PyEqnProperty. These should be used instead of the old PyPropertyWrapper class. There is no Python version of AuxiliaryProperty (although we could construct one, if necessary).

Property methods discussed in the OOF2 2.0 manual but not mentioned in the following list are unchanged.

EqnPropertys differ from FluxPropertys in that they make contributions directly to equations, instead of to Fluxes. The general form of an OOF2 time-dependent divergence equation is

    M d2u/dt2 + C du/dt u + K u + f = 0
  
where M is the mass matrix, C is the damping matrix, and K is the stiffness matrix. f is the vector of external forces, and u is the vector of unknowns. FluxPropertys contribute to K (and sometimes C) indirectly, via their divergences. EqnPropertys, by definition, contribute directly to M, C, K, or f.

The SmallSystem Class

The FluxData object used in 2.0.x to hold the data generated by the Property methods has been replaced by a SmallSystem object, defined in SRC/engine/smallsystem.h. (We need a better name for this class. It's called SmallSystem because it contains a small part of the full linear system of equations.

SmallSystem contains the following methods:

Property Registrations

Caveats

Properties written in C++ can't cross reference Properties written in Python. For example, a ThermalExpansion Property needs to be able to find its Material's Elasticity Property, so that it can call Elasticity::cijkl(). If ThermalExpansion is in C++ and Elasticity is in Python, this won't work, because as far as C++ is concerned, the Python Elasticity object is a generic PyFluxProperty instance, with no cijkl method. It will work the other way around, because cijkl() is a swigged method of the Elasticity class.

This page is still under construction.