Permalink
Switch branches/tags
Nothing to show
Commits on Mar 14, 2012
  1. Simple handling of timesteps and options. Good enough for now.

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

    randyheydon committed Jan 21, 2012
    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.

    randyheydon committed Jan 21, 2012
    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.

    randyheydon committed Jan 21, 2012
    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.

    randyheydon committed Jan 17, 2012
    And tests.
  2. Added rigid interface support to the .cnfg reader.

    randyheydon committed Jan 17, 2012
    And tests, of course.
  3. Finalized approach for contact.

    randyheydon committed Jan 17, 2012
    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.

    randyheydon committed Jan 13, 2012
    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.

    randyheydon committed Jan 13, 2012
    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.

    randyheydon committed Jan 12, 2012
    This passes previously failing tests.  Also added some loadcurve tests.
  2. Implemented feb output of global node constraints.

    randyheydon committed Jan 12, 2012
    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.

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

    randyheydon committed Jan 12, 2012
    "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.

    randyheydon committed Jan 9, 2012
    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…

    randyheydon committed Jan 9, 2012
    …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.

    randyheydon committed Jan 4, 2012
    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.

    randyheydon committed Dec 24, 2011
    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.

    randyheydon committed Dec 18, 2011
    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).

    randyheydon committed Dec 18, 2011
    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.

    randyheydon committed Dec 7, 2011
    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.

    randyheydon committed Nov 19, 2011
    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.

    randyheydon committed Nov 18, 2011
    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.

    randyheydon committed Nov 18, 2011
    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.

    randyheydon committed Nov 15, 2011
    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.

    randyheydon committed Nov 12, 2011
    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.

    randyheydon committed Nov 12, 2011
    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.

    randyheydon committed Nov 2, 2011
    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.

    randyheydon committed Oct 27, 2011
    Implemented the three basic material axis types available in FEBio, and created
    tests for them.  Now to create materials that use these axes.