MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
MusclePennestriReflexiveCL Class Reference
Inheritance diagram for MusclePennestriReflexiveCL:
Collaboration diagram for MusclePennestriReflexiveCL:

Public Member Functions

 MusclePennestriReflexiveCL (const TplDriveCaller< doublereal > *pTplDC, doublereal dPreStress, doublereal Li, doublereal L0, doublereal V0, doublereal F0, const DriveCaller *pAct, bool bActivationOverflow, doublereal dKp, doublereal dKd, const DriveCaller *pReferenceLength)
 
virtual ~MusclePennestriReflexiveCL (void)
 
virtual ConstitutiveLaw
< doublereal, doublereal > * 
pCopy (void) const
 
virtual void Update (const doublereal &Eps, const doublereal &EpsPrime)
 
- Public Member Functions inherited from MusclePennestriCL
 MusclePennestriCL (const TplDriveCaller< doublereal > *pTplDC, doublereal dPreStress, doublereal Li, doublereal L0, doublereal V0, doublereal F0, const DriveCaller *pAct, bool bActivationOverflow)
 
virtual ~MusclePennestriCL (void)
 
virtual ConstLawType::Type GetConstLawType (void) const
 
virtual std::ostream & Restart (std::ostream &out) const
 
virtual std::ostream & OutputAppend (std::ostream &out) const
 
- Public Member Functions inherited from ElasticConstitutiveLaw< doublereal, doublereal >
 ElasticConstitutiveLaw (const TplDriveCaller< doublereal > *pDC, const doublereal &PStress)
 
virtual ~ElasticConstitutiveLaw (void)
 
ConstLawType::Type GetConstLawType (void) const
 
void SetValue (DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
 
virtual HintParseHint (DataManager *pDM, const char *s) const
 
- Public Member Functions inherited from ConstitutiveLaw< doublereal, doublereal >
 ConstitutiveLaw (void)
 
virtual ~ConstitutiveLaw (void)
 
virtual void AfterConvergence (const doublereal &Eps, const doublereal &EpsPrime=mb_zero< doublereal >())
 
virtual const doublerealGetEpsilon (void) const
 
virtual const doublerealGetEpsilonPrime (void) const
 
virtual const doublerealGetF (void) const
 
virtual const doublerealGetFDE (void) const
 
virtual const doublerealGetFDEPrime (void) const
 
virtual unsigned int iGetNumDof (void) const
 
virtual std::ostream & DescribeDof (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeDof (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual std::ostream & DescribeEq (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeEq (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual DofOrder::Order GetDofType (unsigned int i) const
 
- Public Member Functions inherited from WithLabel
 WithLabel (unsigned int uL=0, const std::string &sN="")
 
virtual ~WithLabel (void)
 
void PutLabel (unsigned int uL)
 
void PutName (const std::string &sN)
 
unsigned int GetLabel (void) const
 
const std::string & GetName (void) const
 
- Public Member Functions inherited from SimulationEntity
 SimulationEntity (void)
 
virtual ~SimulationEntity (void)
 
virtual bool bIsValidIndex (unsigned int i) const
 
virtual DofOrder::Order GetEqType (unsigned int i) const
 
virtual void BeforePredict (VectorHandler &, VectorHandler &, VectorHandler &, VectorHandler &) const
 
virtual void AfterPredict (VectorHandler &X, VectorHandler &XP)
 
virtual void Update (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void DerivativesUpdate (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void Update (const VectorHandler &XCurr, InverseDynamics::Order iOrder)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP, const VectorHandler &XPP)
 
virtual unsigned int iGetNumPrivData (void) const
 
virtual unsigned int iGetPrivDataIdx (const char *s) const
 
virtual doublereal dGetPrivData (unsigned int i) const
 
virtual void ReadInitialState (MBDynParser &HP)
 
- Public Member Functions inherited from TplDriveOwner< doublereal >
 TplDriveOwner (const TplDriveCaller< doublereal > *pDC=0)
 
virtual ~TplDriveOwner (void)
 
void Set (const TplDriveCaller< doublereal > *pDC)
 
TplDriveCaller< doublereal > * pGetDriveCaller (void) const
 
doublereal Get (const doublereal &dVar) const
 
doublereal Get (void) const
 
virtual bool bIsDifferentiable (void) const
 
virtual doublereal GetP (void) const
 

Protected Member Functions

virtual std::ostream & Restart_int (std::ostream &out) const
 

Protected Attributes

doublereal dKp
 
doublereal dKd
 
DriveOwner ReferenceLength
 
- Protected Attributes inherited from MusclePennestriCL
doublereal Li
 
doublereal L0
 
doublereal V0
 
doublereal F0
 
DriveOwner Activation
 
bool bActivationOverflow
 
doublereal a
 
- Protected Attributes inherited from ElasticConstitutiveLaw< doublereal, doublereal >
doublereal PreStress
 
- Protected Attributes inherited from ConstitutiveLaw< doublereal, doublereal >
doublereal Epsilon
 
doublereal EpsilonPrime
 
doublereal F
 
doublereal FDE
 
doublereal FDEPrime
 
- Protected Attributes inherited from WithLabel
unsigned int uLabel
 
std::string sName
 
- Protected Attributes inherited from TplDriveOwner< doublereal >
TplDriveCaller< doublereal > * pTplDriveCaller
 

Additional Inherited Members

- Public Types inherited from ConstitutiveLaw< doublereal, doublereal >
typedef ConstitutiveLaw
< doublereal, doublereal >
::ErrNotAvailable 
Err
 
- Public Types inherited from SimulationEntity
typedef std::vector< Hint * > Hints
 

Detailed Description

Definition at line 188 of file module-muscles.cc.

Constructor & Destructor Documentation

MusclePennestriReflexiveCL::MusclePennestriReflexiveCL ( const TplDriveCaller< doublereal > *  pTplDC,
doublereal  dPreStress,
doublereal  Li,
doublereal  L0,
doublereal  V0,
doublereal  F0,
const DriveCaller pAct,
bool  bActivationOverflow,
doublereal  dKp,
doublereal  dKd,
const DriveCaller pReferenceLength 
)
inline

Definition at line 196 of file module-muscles.cc.

References NO_OP.

Referenced by pCopy().

200  : MusclePennestriCL(pTplDC, dPreStress, Li, L0, V0, F0, pAct, bActivationOverflow),
201  dKp(dKp), dKd(dKd), ReferenceLength(pReferenceLength)
202  {
203  NO_OP;
204  };
MusclePennestriCL(const TplDriveCaller< doublereal > *pTplDC, doublereal dPreStress, doublereal Li, doublereal L0, doublereal V0, doublereal F0, const DriveCaller *pAct, bool bActivationOverflow)
#define NO_OP
Definition: myassert.h:74
virtual MusclePennestriReflexiveCL::~MusclePennestriReflexiveCL ( void  )
inlinevirtual

Definition at line 206 of file module-muscles.cc.

References NO_OP.

206  {
207  NO_OP;
208  };
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

virtual ConstitutiveLaw<doublereal, doublereal>* MusclePennestriReflexiveCL::pCopy ( void  ) const
inlinevirtual

Reimplemented from MusclePennestriCL.

Definition at line 210 of file module-muscles.cc.

References MusclePennestriCL::Activation, MusclePennestriCL::bActivationOverflow, dKd, dKp, MusclePennestriCL::F0, MusclePennestriCL::L0, MusclePennestriCL::Li, MusclePennestriReflexiveCL(), DriveCaller::pCopy(), TplDriveOwner< doublereal >::pGetDriveCaller(), DriveOwner::pGetDriveCaller(), ElasticConstitutiveLaw< doublereal, doublereal >::PreStress, ReferenceLength, SAFENEWWITHCONSTRUCTOR, and MusclePennestriCL::V0.

210  {
212 
213  // pass parameters to copy constructor
216  PreStress,
217  Li, L0, V0, F0,
220  dKp, dKd,
222  return pCL;
223  };
MusclePennestriReflexiveCL(const TplDriveCaller< doublereal > *pTplDC, doublereal dPreStress, doublereal Li, doublereal L0, doublereal V0, doublereal F0, const DriveCaller *pAct, bool bActivationOverflow, doublereal dKp, doublereal dKd, const DriveCaller *pReferenceLength)
virtual ConstitutiveLaw< doublereal, doublereal > * pCopy(void) const
TplDriveCaller< doublereal > * pGetDriveCaller(void) const
Definition: tpldrive.h:105
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
Definition: mynewmem.h:698
DriveCaller * pGetDriveCaller(void) const
Definition: drive.cc:658
virtual DriveCaller * pCopy(void) const =0
DriveOwner Activation

Here is the call graph for this function:

virtual std::ostream& MusclePennestriReflexiveCL::Restart_int ( std::ostream &  out) const
inlineprotectedvirtual

Reimplemented from MusclePennestriCL.

Definition at line 265 of file module-muscles.cc.

References dKd, dKp, DriveOwner::pGetDriveCaller(), ReferenceLength, and DriveCaller::Restart().

265  {
266  out
267  << ", reflexive"
268  << ", proportional gain, " << dKp
269  << ", derivative gain, " << dKd
270  << ", reference length, ", ReferenceLength.pGetDriveCaller()->Restart(out);
271  return out;
272  };
virtual std::ostream & Restart(std::ostream &out) const =0
DriveCaller * pGetDriveCaller(void) const
Definition: drive.cc:658

Here is the call graph for this function:

virtual void MusclePennestriReflexiveCL::Update ( const doublereal Eps,
const doublereal EpsPrime 
)
inlinevirtual

Reimplemented from MusclePennestriCL.

Definition at line 225 of file module-muscles.cc.

References MusclePennestriCL::a, MusclePennestriCL::Activation, grad::atan(), MusclePennestriCL::bActivationOverflow, DriveOwner::dGet(), dKd, dKp, grad::exp(), MusclePennestriCL::F0, TplDriveOwner< T >::Get(), MusclePennestriCL::L0, MusclePennestriCL::Li, grad::pow(), ElasticConstitutiveLaw< doublereal, doublereal >::PreStress, ReferenceLength, and MusclePennestriCL::V0.

225  {
228 
229  doublereal dxdEps = Li/L0;
230  doublereal dvdEpsPrime = Li/V0;
233 
234  doublereal dLRef = ReferenceLength.dGet()/L0;
235 
236  doublereal aRef = Activation.dGet();
237  a = aRef + dKp*(x - dLRef) + dKd*v;
238  if (a < 0.) {
239  silent_cerr("MusclePennestriCL: activation underflow (a=" << a << ")" << std::endl);
240  if (bActivationOverflow) {
241  a = 0.;
242  }
243 
244  } else if (a > 1.) {
245  silent_cerr("MusclePennestriCL: activation overflow (a=" << a << ")" << std::endl);
246  if (bActivationOverflow) {
247  a = 1.;
248  }
249  }
250 
251  doublereal f1 = std::exp(std::pow(x - 0.95, 2) - 40*std::pow(x - 0.95, 4));
252  doublereal f2 = 1.6 - 1.6*std::exp(0.1/std::pow(v - 1., 2) - 1.1/std::pow(v - 1., 4));
253  doublereal f3 = 1.3*std::atan(0.1*std::pow(x - 0.22, 10));
254 
255  doublereal df1dx = f1*(2*(x - 0.95) - 4*40.*std::pow(x - 0.95, 3));
256  doublereal df2dv = 1.6*std::exp(0.1/std::pow(v - 1., 2) - 1.1/std::pow(v - 1, 4))*(2*0.1/std::pow(v - 1., 3) - 4*1.1/std::pow(v - 1., 5));
257  doublereal df3dx = 1.3*std::pow(x - 0.22, 9)/(0.01*std::pow(x - 0.22, 20) + 1);
258 
260  ConstitutiveLaw<doublereal, doublereal>::FDE = F0*((df1dx*aRef + f1*dKp)*f2 + df3dx)*dxdEps;
261  ConstitutiveLaw<doublereal, doublereal>::FDEPrime = F0*f1*(df2dv*aRef + f2*dKd)*dvdEpsPrime;
262  };
GradientExpression< UnaryExpr< FuncExp, Expr > > exp(const GradientExpression< Expr > &u)
Definition: gradient.h:2975
GradientExpression< BinaryExpr< FuncPow, LhsExpr, RhsExpr > > pow(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
Definition: gradient.h:2961
DriveOwner Activation
doublereal dGet(const doublereal &dVar) const
Definition: drive.cc:664
GradientExpression< UnaryExpr< FuncAtan, Expr > > atan(const GradientExpression< Expr > &u)
Definition: gradient.h:2985
double doublereal
Definition: colamd.c:52
T Get(void) const
Definition: tpldrive.h:113

Here is the call graph for this function:

Member Data Documentation

doublereal MusclePennestriReflexiveCL::dKd
protected

Definition at line 192 of file module-muscles.cc.

Referenced by pCopy(), Restart_int(), and Update().

doublereal MusclePennestriReflexiveCL::dKp
protected

Definition at line 191 of file module-muscles.cc.

Referenced by pCopy(), Restart_int(), and Update().

DriveOwner MusclePennestriReflexiveCL::ReferenceLength
protected

Definition at line 193 of file module-muscles.cc.

Referenced by pCopy(), Restart_int(), and Update().


The documentation for this class was generated from the following file: