Skip to content
Commits on Mar 14, 2012
  1. Simple handling of timesteps and options. Good enough for now.

    committed
    Also minor update to acknowledgements in readme.
Commits on Jan 21, 2012
  1. Added spring support to .cnfg reader.

    committed
    Each spring is given a unique material with stiffness calculated as per the
    Open Knee's abq2feb.py.  The corresponding tests are far too limited, though.
  2. Added spring support to .feb output.

    committed
    It currently only supports linear springs, expecting each spring element to use
    a LinearIsotropic material object.  Similar to the TransIsoElastic problem, all
    materials used in springs are removed from FEBio's main material listing, which
    could be a problem if solid or shell elements reference the same material
    object as a spring.  I'll fix it later.
  3. Added contact support to .feb output.

    committed
    This includes rigid interfaces, tied contact, and all four types of sliding
    contact.  Also tests.
Commits on Jan 17, 2012
  1. Added sliding contact support to .cnfg reader.

    committed
    And tests.
  2. Added rigid interface support to the .cnfg reader.

    committed
    And tests, of course.
  3. Finalized approach for contact.

    committed
    There are currently three contact classes: SlidingContact, TiedContact, and
    RigidInterface.  They were created with the idea that the API should focus on
    representing the situation to be solved, while details on how to solve it are
    passed in as a dictionary of options.
    
    In the case of SlidingContact, the situation is elaborated upon with three
    extra parameters outside of the options dict.  There is float
    friction_coefficient (if zero, FEBio will use facet-to-facet sliding; else use
    sliding_with_gaps), boolean biphasic (if true, FEBio will use sliding2), and
    solute (if true, FEBio will use sliding3).  Perhaps these would be better as
    separate classes, but for now I consider them extra details on the basic idea
    of a sliding contact interface.
Commits on Jan 13, 2012
  1. Implemented feb output of switch constraints for nodes and rigid bodies.

    committed
    And, of course, tests.  Much of the code was copy-pasted (OMG, so bad!), but it
    worked first try, so stop judging me.
  2. Modified Switch to use default objects rather than always None.

    committed
    Correspondingly modified SwitchConstraint to use free as its default object.
    Therefore, if SwitchConstraint.get_active is called with a time earlier than
    the first time specified in the points dictionary, free will be returned.
Commits on Jan 12, 2012
  1. Implemented feb output of global rigid body constraints.

    committed
    This passes previously failing tests.  Also added some loadcurve tests.
  2. Implemented feb output of global node constraints.

    committed
    Added corresponding tests.  Also included tests for global rigid body
    constraints that currently fail.  That will be implemented next.
  3. Moved get_descendants_sorted from FEproblem to Base.

    committed
    Now any FEbabel object can use it!  Not that I expect them to, but hey.
  4. Created static "free" and "fixed" constraints.

    committed
    "Fixed" had previously been a subclass of "Displacement", while a free
    constraint was represented by None.  None is an insufficiently explicit way of
    representing free, so that was changed to a Force constraint with zero
    strength.  And for both free and fixed, there's no reason to have multiple
    instances of each.
Commits on Jan 11, 2012
Commits on Jan 9, 2012
  1. Replaced FEproblem.get_* methods with a get_descendants_sorted.

    committed
    This is a little more efficient, as the set of descendants is sorted by type
    once.  It effectively trades processing time with storage, but hopefully a few
    extra references to already-existing objects won't take any notable amount of
    RAM.
    
    The write_feb method was modified accordingly.  The only notable change was
    having to modify the materials output code so that TransIsoElastic base
    materials are not given their own entries.
  2. All objects now inherit from Base. AxisOrientation objects are theref…

    committed
    …ore required.
    
    Having the common Base now allows the entire FEproblem structure to be
    traversed in a sane way.  Each object has its own get_children method to share
    everything it carries, while the Base.get_descendants allows all relevant
    objects to be found easily.  The various FEproblem.get_* methods will need to
    be rewritten to take advantage of this, but this commit is already big enough.
    
    It was also decided to make AxisOrientation objects inherit from Base as well,
    thereby being included in the whole descendants structure.  But that means that
    an axis can no longer be an arbitrary callable; it must inherit from Base to
    behave correctly.  Comments were changed to reflect this, __call__ was changed
    to get_at_element, axis_func was changed to axis, and a bunch of tests had to
    follow suit.
Commits on Jan 4, 2012
  1. Loadcurve output in feb files, plus supporting FEproblem methods.

    committed
    This is the start of constraint output in feb format.  The constraints
    themselves must still be output, but all their loadcurves are supported.  But
    no tests for this yet.
    
    This also necessitated creating three new methods for the FEproblem class:
    get_constrainables, get_constraints, and get_loadcurves.  Might also need to
    create get_switches.  But all these methods are yet untested.
Commits on Dec 24, 2011
  1. Added support for constraints to cnfg reader.

    committed
    Generates switching constraints for each degree of freedom on each rigid body.
    That's the extent of allowed constraints in cnfg (other than contact), but it
    works.
Commits on Dec 18, 2011
  1. Broke test_formats.py into a separate file for each format.

    committed
    The readers and writers are where the majority of test code has been done, so
    it's foolish to put it all in one file.  This also means that individual
    formats can be tested without having to wait 11 seconds for TestInp and
    TestCnfg every time.
  2. Finalized approach for switching (aka steps in FEBio).

    committed
    This approach is rather different from FEBio's.  Rather than having specific
    steps, objects can instead be wrapped in a derivative of the Switch class.  It
    gets used as a mixin, allowing it to present itself as other types (eg. one
    that acts as a Constraint), and contains a series of that type, each mapped to
    a specific time.
    
    As currently implemented, it's only useful for Constraints, allowing different
    constraints to activate or deactivate at different times.  It will also be used
    for Contact, and who knows what else.
Commits on Dec 7, 2011
  1. Constrainables are starting to take form.

    committed
    Each Constrainable subclass specifies its degrees of freedom when calling
    Constrainable.__init__.  Each DOF then gets a dictionary entry defaulting to
    None for unconstrained.
Commits on Nov 19, 2011
  1. Removed the FEproblem.elements set.

    committed
    It was intended to be the set of all elements in the problem, but it's kind of
    redundant with the FEproblem.sets dict.  Consequently created a
    FEproblem.get_elements method, modified get_nodes and get_materials, and
    slightly changed a couple _formats.
Commits on Nov 18, 2011
  1. Added material handling to .cnfg reader.

    committed
    It parses the material definitions into objects, then applies them to the
    appropriate elements.  Currently only handles the four elements used in
    existing Open Knee config files.
  2. Changed FungOrthotropic to use E, G, and v instead of mu and l.

    committed
    Current FEBio documentation shows Fung using Lame parameters (mu and lambda),
    but old documentation shows E, G, and nu.  The old form still appears to work.
    Since the Open Knee default.cnfg uses the E,G,v approach, the implementation
    here was changed to match.
Commits on Nov 15, 2011
  1. Modified feb.py's handling of user orientation to be less stateful.

    committed
    In the previous code, each material that needed user orientation data would get
    an extra attribute to mark it.  But this attribute would persist even after
    writeout was complete, causing potential problems if the material was
    subsequently modified and rewritten.  These changes ensure that the user state
    doesn't escape beyond write_feb.
Commits on Nov 13, 2011
Commits on Nov 12, 2011
  1. User fiber orientations now output fully in write_feb.

    committed
    This allows arbitrary functions to define axis orientation for transversely
    isotropic materials.  The axis for each element appears in the ElementData
    section of the feb file.
    
    This also supports shell element thickness in the ElementData section, though
    this is not yet tested.
  2. Added support for materials in write_feb.

    committed
    It's pretty massive, involving a bevy of hidden methods that get added to
    material classes in order to help it along.  Consequently, the same thing was
    done for geometry classes, eliminating the element_write_map used before.
    
    Implementing everything also involved a small fix to FEproblem.get_materials to
    ignore Nones, and a fix to test_materials.py to reflect the replacement of the
    parameters dict with a list.  And while we're at it, a single comment fix to
    geometry.py.
Commits on Nov 2, 2011
  1. Moved format registration into individual format files.

    committed
    Rather than having febabel.problem add each reader and writer to the FEproblem
    class, we have each format file do so.  Also quick driveby fix to translateFE.
Commits on Oct 27, 2011
  1. Finally have a good model for material axes.

    committed
    Implemented the three basic material axis types available in FEBio, and created
    tests for them.  Now to create materials that use these axes.
Something went wrong with that request. Please try again.