Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   Related Pages  

rdMuscleZajac.h

00001 // rdMuscleZajac.h
00002 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00003 // AUTHOR: Frank C. Anderson
00004 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00005 #ifndef __rdMuscleZajac_h__
00006 #define __rdMuscleZajac_h__
00007 
00008 
00009 //=============================================================================
00010 // INCLUDES
00011 //=============================================================================
00012 #include <rdMath.h>
00013 #include <rdTools.h>
00014 #include <rdStorage.h>
00015 #include <rdModel.h>
00016 #include <rdForce.h>
00017 #include "rdActuators.h"
00018 
00019 
00020 //=============================================================================
00021 //=============================================================================
00044 class RDACTUATORS_API rdMuscleZajac : public rdForce 
00045 {
00046 //=============================================================================
00047 // DATA
00048 //=============================================================================
00049 public:
00050    // PROPERTIES
00051    static const char PROP_RISE_TIME[];
00052    static const char PROP_FALL_TIME[];
00053    static const char PROP_OPTIMAL_FORCE[];
00054    static const char PROP_OPTIMAL_FIBER_LENGTH[];
00055    static const char PROP_OPTIMAL_PENNATION_ANGLE[];
00056    static const char PROP_TENDON_SLACK_LENGTH[];
00057    static const char PROP_MAX_SHORTENING_VELOCITY[];
00058    // MUSCLE CONSTANTS
00059    static const double C1;
00060    static const double C2;
00061    static const double PE1;
00062    static const double SIG0;
00063    static const double LMNORMMAX;
00064    static const double flcoef[][6];
00065    static const double fvcoef[][6];
00066 
00067 protected:
00069    double _x;
00071    double _a;
00075    double _tRise;
00077    double _tFall;
00079    double _fmOpt;
00081    double _lmOpt;
00083    double _alphaOpt;
00086    double _vmMax;
00088    double _ltSlack;
00089    // INITIALIZED VARIABLES
00091    double _lmOptRecip;
00093    double _width;
00095    double _widthSquared;
00097    double _ktRecip;
00099    double _ktLmOptRecip;
00100    // WORK VARIABLES
00102    double _lmt;
00103 
00104 //=============================================================================
00105 // METHODS
00106 //=============================================================================
00107 public:
00108    rdMuscleZajac(int aQID=-1,int aNX=1,int aNY=2,int aNYP=0);
00109    rdMuscleZajac(IDOM_Element *aElement,
00110       int aNX=1,int aNY=2,int aNYP=0);
00111    rdMuscleZajac(const rdMuscleZajac &aActuator);
00112    virtual ~rdMuscleZajac();
00113    virtual rdActuator* copy() const;
00114    virtual rdActuator* copy(IDOM_Element *aElement) const;
00115 private:
00116    void setNull();
00117    void copyData(const rdMuscleZajac &aActuator);
00118 
00119 public:
00120 
00121    //--------------------------------------------------------------------------
00122    // OPERATORS
00123    //--------------------------------------------------------------------------
00124    rdMuscleZajac&
00125       operator=(const rdMuscleZajac &aActuator);
00126 
00127    //--------------------------------------------------------------------------
00128    // GET AND SET
00129    //--------------------------------------------------------------------------
00130    virtual void setControls(const double aX[]);
00131    virtual void getControls(double rX[]) const;
00132    virtual void setStates(const double aY[]);
00133    virtual void getStates(double rY[]) const;
00134    void setRiseTime(double aTime);
00135    double getRiseTime() const;
00136    void setFallTime(double aTime);
00137    double getFallTime() const;
00138    void setOptimalForce(double aForce);
00139    double getOptimalForce() const;
00140    void setOptimalFiberLength(double aLength);
00141    double getOptimalFiberLength() const;
00142    void setOptimalPennationAngle(double aAngle);
00143    double getOptimalPennationAngle() const;
00144    void setTendonSlackLength(double aLength);
00145    double getTendonSlackLength() const;
00146    void setMaxShorteningVelocity(double aVelocity);
00147    double getMaxShorteningVelocity() const;
00148 
00149    //--------------------------------------------------------------------------
00150    // APPLICATION
00151    //--------------------------------------------------------------------------
00152 
00153    //--------------------------------------------------------------------------
00154    // COMPUTATIONS
00155    //--------------------------------------------------------------------------
00156    virtual void promoteControlsToStates(const double aX[],double aDT);
00157    virtual void computeActuation();
00158    virtual void computeStateDerivatives(double rDYDT[]);
00159    virtual double computeDFDT();
00160    static double ComputeForceLengthCurve(double aLmNorm);
00161    static double ComputeShorteningVelocity(double aFmNormIso,double aFmNorm);
00162 
00163    //--------------------------------------------------------------------------
00164    // XML
00165    //--------------------------------------------------------------------------
00166    virtual void updateObject(bool aDeep=true);
00167    virtual void updateNode(bool aDeep=true);
00168    virtual void generateNode(IDOM_Element *aParent);
00169    void updateData();
00170 
00171 //=============================================================================
00172 }; // END of class rdMuscleZajac
00173 //=============================================================================
00174 //=============================================================================
00175 
00176 
00177 #endif // #ifndef __rdMuscleZajac_h__

Generated on Wed Aug 20 02:17:06 2003 for Simulation Software by doxygen1.3