35 #ifndef CONSTLTP_IMPL_H
36 #define CONSTLTP_IMPL_H
49 template <
class T,
class Tder>
54 std::vector<ConstitutiveLaw<T, Tder> *>
m_clv;
62 type |= (*i)->GetConstLawType();
81 (*i)->SetValue(pDM, X, XP, ph);
88 std::vector<ConstitutiveLaw<T, Tder> *> clv(
m_clv.size());
89 for (
unsigned i = 0; i <
m_clv.size(); i++) {
90 clv[i] =
m_clv[i]->pCopy();
98 virtual std::ostream&
Restart(std::ostream& out)
const {
99 out <<
"array, " <<
m_clv.size();
101 out <<
", ", (*i)->Restart(out);
106 virtual void Update(
const T& Eps,
const T& EpsPrime = ::mb_zero<T>()) {
117 bool bChangeJac(
false);
120 (*i)->Update(Eps, EpsPrime);
126 if (
m_type & ConstLawType::ELASTIC) {
130 if (
m_type & ConstLawType::VISCOUS) {
151 (*i)->OutputAppend(out);
162 template <
class T,
class Tder>
168 virtual std::ostream&
171 out <<
", prestress, ",
174 out <<
", prestrain, single, ",
203 for (
unsigned i = 0; i < ph->size(); ++i) {
216 silent_cerr(
"ElasticConstitutiveLaw: "
217 "unable to create prestrain drive after hint "
218 "#" << i << std::endl);
232 if (strncasecmp(s,
"prestress{" ,
STRLENOF(
"prestress{" )) == 0) {
235 size_t len = strlen(s);
237 if (s[len - 1] !=
'}') {
241 char *sStr =
new char[len + 1];
242 memcpy(sStr, s, len + 1);
247 }
else if (strncasecmp(s,
"prestrain{" ,
STRLENOF(
"prestrain{" )) == 0) {
250 size_t len = strlen(s);
252 if (s[len - 1] !=
'}') {
256 char *sStr =
new char[len + 1];
257 memcpy(sStr, s, len + 1);
276 template <
class T,
class Tder>
305 virtual std::ostream&
Restart(std::ostream& out)
const {
306 out <<
"linear elastic isotropic, " <<
dStiffness;
310 virtual void Update(
const T& Eps,
const T& = mb_zero<T>()) {
326 template <
class T,
class Tder>
331 const T& PStress,
const Tder& Stiff)
352 virtual std::ostream&
Restart(std::ostream& out)
const {
353 out <<
"linear elastic generic, ",
358 virtual void Update(
const T& Eps,
const T& = mb_zero<T>()) {
374 template <
class T,
class Tder>
380 const Tder& = mb_zero<Tder>(),
384 "is allowed only for beams (6x6)"));
395 virtual std::ostream&
Restart(std::ostream& out)
const {
399 virtual void Update(
const T& ,
const T& = mb_zero<T>()) {
406 :
public ElasticConstitutiveLaw6D {
416 : ElasticConstitutiveLaw6D(pDC, PStress),
418 dRefTorsion(Stiffness.dGet(4, 4)),
419 dAxialTorsionCoupling(dAxTors) {
436 dAxialTorsionCoupling));
441 virtual std::ostream&
Restart(std::ostream& out)
const {
442 out <<
"linear elastic generic axial torsion coupling, ",
443 Write(out,
FDE,
", ") <<
", " << dAxialTorsionCoupling;
450 FDE.Put(4, 4, dRefTorsion + d*dAxialTorsionCoupling);
460 template <
class T,
class Tder>
465 const T& PStress,
const T& Stiff1,
const T& Stiff2,
const T& Stiff3)
468 "is allowed only for scalar and 3x3"));
479 virtual std::ostream&
Restart(std::ostream& out)
const {
483 virtual void Update(
const T& Eps,
const T& = mb_zero<T>()) {
490 :
public ElasticConstitutiveLaw1D {
500 : ElasticConstitutiveLaw1D(pDC, PStress),
501 Stiff1(Stiff1), Stiff2(Stiff2), Stiff3(Stiff3)
518 Stiff1, Stiff2, Stiff3));
522 virtual std::ostream&
Restart(std::ostream& out)
const {
523 out <<
"cubic elastic generic, ",
524 Write(out, Stiff1,
", ") <<
", ",
525 Write(out, Stiff2,
", ") <<
", ",
526 Write(out, Stiff3,
", ") <<
", ";
539 + Stiff1*e1 + Stiff2*f2 + Stiff3*e3;
545 :
public ElasticConstitutiveLaw3D {
553 const Vec3& PStress,
const Vec3& Stiff1,
554 const Vec3& Stiff2,
const Vec3& Stiff3)
555 : ElasticConstitutiveLaw3D(pDC, PStress),
556 Stiff1(Stiff1), Stiff2(Stiff2), Stiff3(Stiff3)
573 Stiff1, Stiff2, Stiff3));
577 virtual std::ostream&
Restart(std::ostream& out)
const {
578 out <<
"cubic elastic generic, ",
579 Write(out, Stiff1,
", ") <<
", ",
580 Write(out, Stiff2,
", ") <<
", ",
581 Write(out, Stiff3,
", ") <<
", ";
590 #if defined(MBDYN_X_WORKAROUND_GCC_3_2) || defined(MBDYN_X_WORKAROUND_GCC_3_3)
592 #endif // MBDYN_X_WORKAROUND_GCC_3_2 || MBDYN_X_WORKAROUND_GCC_3_3
594 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
601 #if defined(MBDYN_X_WORKAROUND_GCC_3_2) || defined(MBDYN_X_WORKAROUND_GCC_3_3)
605 + 3.*Stiff3(iCnt)*e2);
606 FTmp(iCnt) = Stiff1(iCnt)*e1
609 #else // ! MBDYN_X_WORKAROUND_GCC_3_2 && ! MBDYN_X_WORKAROUND_GCC_3_3
612 #endif // ! MBDYN_X_WORKAROUND_GCC_3_2 && ! MBDYN_X_WORKAROUND_GCC_3_3
615 #if defined(MBDYN_X_WORKAROUND_GCC_3_2) || defined(MBDYN_X_WORKAROUND_GCC_3_3)
617 #endif // MBDYN_X_WORKAROUND_GCC_3_3 || MBDYN_X_WORKAROUND_GCC_3_3
627 :
public ElasticConstitutiveLaw1D {
636 : ElasticConstitutiveLaw1D(pDC, PStress),
657 virtual std::ostream&
Restart(std::ostream& out)
const {
658 out <<
"inverse square, " <<
m_A <<
", " <<
m_L0;
677 template <
class T,
class Tder>
696 virtual std::ostream&
Restart(std::ostream& out)
const {
700 virtual void Update(
const T& ,
const T& = mb_zero<T>()) {
707 :
public ElasticConstitutiveLaw1D {
715 : ElasticConstitutiveLaw1D(pDC, PStress),
716 dStiffness(dStiff), dCurrEps(0.) {
737 virtual std::ostream&
Restart(std::ostream& out)
const {
738 out <<
"log elastic, " << dStiffness;
746 dCurrEps = 1. +
Epsilon - dPreStrain;
747 ASSERT(dCurrEps > std::numeric_limits<doublereal>::epsilon());
749 if (dCurrEps < std::numeric_limits<doublereal>::epsilon()) {
751 dCurrEps = std::numeric_limits<doublereal>::epsilon();
755 FDE = dStiffness/dCurrEps;
764 template <
class T,
class Tder>
776 "is allowed only for rods and 3D hinges"));
787 virtual std::ostream&
Restart(std::ostream& out)
const {
791 virtual void Update(
const T& ,
const T& = mb_zero<T>()) {
798 :
public ElasticConstitutiveLaw1D {
813 : ElasticConstitutiveLaw1D(pDC, PStress),
815 dUpperLimitStrain(dUppLimStrain),
816 dLowerLimitStrain(dLowLimStrain),
817 dSecondStiffness(dSecondStiff) {
841 virtual std::ostream&
Restart(std::ostream& out)
const {
842 out <<
"double linear elastic, "
843 << dStiffness <<
", "
844 << dUpperLimitStrain <<
", "
845 << dLowerLimitStrain <<
", "
855 if (dCurrStrain <= dUpperLimitStrain && dCurrStrain >= dLowerLimitStrain) {
859 FDE = dSecondStiffness;
861 if (dCurrStrain > dUpperLimitStrain) {
863 + dSecondStiffness*(dCurrStrain - dUpperLimitStrain);
866 + dSecondStiffness*(dCurrStrain - dLowerLimitStrain);
875 :
public ElasticConstitutiveLaw3D {
889 : ElasticConstitutiveLaw3D(pDC, PStress),
891 dUpperLimitStrain(dUppLimStrain),
892 dLowerLimitStrain(dLowLimStrain),
893 dSecondStiffness(dSecondStiff) {
917 virtual std::ostream&
Restart(std::ostream& out)
const {
918 out <<
"double linear elastic, "
919 << dStiffness <<
", "
920 << dUpperLimitStrain <<
", "
921 << dLowerLimitStrain <<
", "
933 if (dCurrStrain <= dUpperLimitStrain && dCurrStrain >= dLowerLimitStrain) {
934 FDE.Put(3, 3, dStiffness);
937 FDE.Put(3, 3, dSecondStiffness);
939 if (dCurrStrain > dUpperLimitStrain) {
941 CurrStrain.
dGet(2)*dStiffness,
942 dUpperLimitStrain*dStiffness
943 + (dCurrStrain - dUpperLimitStrain)*dSecondStiffness);
946 CurrStrain.
dGet(2)*dStiffness,
947 dLowerLimitStrain*dStiffness
948 + (dCurrStrain - dLowerLimitStrain)*dSecondStiffness);
959 template <
class T,
class Tder>
983 ASSERT(dEpsHard > std::numeric_limits<doublereal>::epsilon());
984 ASSERT(dStiff > std::numeric_limits<doublereal>::epsilon());
986 dAlpha = 3./(dEpsHard*dEpsHard);
987 dBeta = dStiff0/dStiff;
1009 virtual std::ostream&
Restart(std::ostream& out)
const {
1010 out <<
"isotropic hardening elastic, " <<
dStiffness <<
", "
1038 template <
class T,
class Tder>
1049 "is allowed only for rods"));
1060 virtual std::ostream&
Restart(std::ostream& out)
const {
1064 virtual void Update(
const T& ,
const T& = mb_zero<T>()) {
1081 :
public ElasticConstitutiveLaw1D {
1091 : ElasticConstitutiveLaw1D(pDC, PStress), dKappa(dKappa), dGamma(dGamma) {
1113 virtual std::ostream&
Restart(std::ostream& out)
const {
1114 out <<
"contact elastic, "
1130 FDE = dGamma*dKappa/
pow(1. + dE, dGamma + 1.);
1138 :
public ElasticConstitutiveLaw3D {
1145 const Vec3& PStress,
1148 : ElasticConstitutiveLaw3D(pDC, PStress), dKappa(dKappa), dGamma(dGamma) {
1171 virtual std::ostream&
Restart(std::ostream& out)
const {
1172 out <<
"contact elastic, "
1187 F.Put(3, dKappa*(1. - 1./
pow(1. + dE, dGamma)));
1188 FDE.Put(3, 3, dGamma*dKappa/
pow(1. + dE, dGamma + 1.));
1202 template <
class T,
class Tder>
1236 virtual std::ostream&
Restart(std::ostream& out)
const {
1237 out <<
"linear viscous isotropic, "
1242 virtual void Update(
const T& ,
const T& EpsPrime = mb_zero<T>()) {
1253 template <
class T,
class Tder>
1258 const Tder& StiffPrime)
1283 virtual std::ostream&
Restart(std::ostream& out)
const {
1284 out <<
"linear viscous generic, ",
1289 virtual void Update(
const T& ,
const T& EpsPrime = mb_zero<T>()) {
1300 template <
class T,
class Tder>
1340 virtual std::ostream&
Restart(std::ostream& out)
const {
1341 out <<
"linear viscoelastic isotropic, "
1347 virtual void Update(
const T& Eps,
const T& EpsPrime = mb_zero<T>()) {
1365 template <
class T,
class Tder>
1372 const Tder& StiffPrime)
1400 virtual std::ostream&
Restart(std::ostream& out)
const {
1401 out <<
"linear viscoelastic generic, ",
1407 virtual void Update(
const T& Eps,
const T& EpsPrime = mb_zero<T>()) {
1424 template <
class T,
class Tder>
1440 const Tder& StiffPrime,
1474 virtual std::ostream&
Restart(std::ostream& out)
const {
1475 out <<
"linear time variant viscoelastic generic, ",
1483 virtual void Update(
const T& Eps,
const T& EpsPrime = mb_zero<T>()) {
1510 template <
class T,
class Tder>
1517 const Tder& StiffPrime,
1521 "is allowed only for beams (6x6)"));
1536 virtual std::ostream&
Restart(std::ostream& out)
const {
1540 virtual void Update(
const T& Eps,
const T& EpsPrime = mb_zero<T>()) {
1554 const Vec6& PStress,
1556 const Mat6x6& StiffPrime,
1559 dRefTorsion(Stiff(4, 4)),
1560 dAxialTorsionCoupling(dAxTors) {
1583 dAxialTorsionCoupling));
1587 virtual std::ostream&
Restart(std::ostream& out)
const {
1589 out <<
"linear viscoelastic generic axial torsion coupling, ",
1615 template <
class T,
class Tder>
1620 const T& PStress,
const T& Stiff1,
const T& Stiff2,
const T& Stiff3,
1621 const Tder& StiffPrime)
1624 "is allowed only for scalar and 3x3"));
1635 virtual std::ostream&
Restart(std::ostream& out)
const {
1639 virtual void Update(
const T& Eps,
const T& = mb_zero<T>()) {
1646 :
public ElasticConstitutiveLaw1D {
1657 : ElasticConstitutiveLaw1D(pDC, PStress),
1658 Stiff1(Stiff1), Stiff2(Stiff2), Stiff3(Stiff3)
1679 virtual std::ostream&
Restart(std::ostream& out)
const {
1680 out <<
"cubic elastic generic, ",
1681 Write(out, Stiff1,
", ") <<
", ",
1682 Write(out, Stiff2,
", ") <<
", ",
1683 Write(out, Stiff3,
", ") <<
", ",
1704 :
public ElasticConstitutiveLaw3D {
1712 const Vec3& PStress,
const Vec3& Stiff1,
1713 const Vec3& Stiff2,
const Vec3& Stiff3,
1714 const Mat3x3& StiffPrime)
1715 : ElasticConstitutiveLaw3D(pDC, PStress),
1716 Stiff1(Stiff1), Stiff2(Stiff2), Stiff3(Stiff3)
1737 virtual std::ostream&
Restart(std::ostream& out)
const {
1738 out <<
"cubic elastic generic, ",
1739 Write(out, Stiff1,
", ") <<
", ",
1740 Write(out, Stiff2,
", ") <<
", ",
1741 Write(out, Stiff3,
", ") <<
", ",
1752 #if defined(MBDYN_X_WORKAROUND_GCC_3_2) || defined(MBDYN_X_WORKAROUND_GCC_3_3)
1754 #endif // MBDYN_X_WORKAROUND_GCC_3_2 || MBDYN_X_WORKAROUND_GCC_3_3
1756 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
1763 #if defined(MBDYN_X_WORKAROUND_GCC_3_2) || defined(MBDYN_X_WORKAROUND_GCC_3_3)
1766 + 2.*Stiff2(iCnt)*f1
1767 + 3.*Stiff3(iCnt)*e2);
1768 FTmp(iCnt) = Stiff1(iCnt)*e1
1771 #else // ! MBDYN_X_WORKAROUND_GCC_3_2 && ! MBDYN_X_WORKAROUND_GCC_3_3
1773 + 2.*Stiff2(iCnt)*f1 + 3.*Stiff3(iCnt)*e2;
1775 + Stiff2(iCnt)*f2 + Stiff3(iCnt)*e3;
1776 #endif // ! MBDYN_X_WORKAROUND_GCC_3_2 && ! MBDYN_X_WORKAROUND_GCC_3_3
1779 #if defined(MBDYN_X_WORKAROUND_GCC_3_2) || defined(MBDYN_X_WORKAROUND_GCC_3_3)
1781 #endif // ! MBDYN_X_WORKAROUND_GCC_3_2 && ! MBDYN_X_WORKAROUND_GCC_3_3
1791 template <
class T,
class Tder>
1805 "is allowed only for rods ad 3D hinges"));
1820 virtual std::ostream&
Restart(std::ostream& out)
const {
1824 virtual void Update(
const T& ,
const T& = mb_zero<T>()) {
1832 :
public ElasticConstitutiveLaw1D {
1850 : ElasticConstitutiveLaw1D(pDC, PStress),
1852 dUpperLimitStrain(dUpp), dLowerLimitStrain(dLow),
1853 dSecondStiffness(dSecondS),
1854 dStiffnessPrime(dStiffPrime),
1855 dSecondStiffnessPrime(dSecondSPrime)
1881 dSecondStiffnessPrime));
1886 virtual std::ostream&
Restart(std::ostream& out)
const {
1887 out <<
"double linear viscoelastic, "
1888 << dStiffness <<
", "
1889 << dUpperLimitStrain <<
", "
1890 << dLowerLimitStrain <<
", "
1891 << dSecondStiffness <<
", "
1892 << dStiffnessPrime <<
", "
1893 "second damping, " << dSecondStiffnessPrime <<
", ";
1903 if (dCurrStrain <= dUpperLimitStrain && dCurrStrain >= dLowerLimitStrain) {
1909 FDE = dSecondStiffness;
1912 if (dCurrStrain > dUpperLimitStrain) {
1914 +dSecondStiffness*(dCurrStrain-dUpperLimitStrain)
1918 +dSecondStiffness*(dCurrStrain-dLowerLimitStrain)
1928 :
public ElasticConstitutiveLaw3D {
1939 const Vec3& PStress,
1946 : ElasticConstitutiveLaw3D(pDC, PStress),
1948 dUpperLimitStrain(dUppLimStrain),
1949 dLowerLimitStrain(dLowLimStrain),
1950 dSecondStiffness(dSecondStiff),
1951 dStiffnessPrime(dStiffPrime),
1952 dSecondStiffnessPrime(dSecondStiffPrime)
1979 dSecondStiffnessPrime));
1984 virtual std::ostream&
Restart(std::ostream& out)
const {
1985 out <<
"double linear viscoelastic, "
1986 << dStiffness <<
", "
1987 << dUpperLimitStrain <<
", "
1988 << dLowerLimitStrain <<
", "
1989 << dSecondStiffness <<
", "
1990 << dStiffnessPrime <<
", "
1991 << dSecondStiffnessPrime <<
", ";
2003 if (dCurrStrain <= dUpperLimitStrain && dCurrStrain >= dLowerLimitStrain) {
2004 FDE.Put(3, 3, dStiffness);
2005 FDEPrime.Put(3, 3, dStiffnessPrime);
2008 FDE.Put(3, 3, dSecondStiffness);
2009 FDEPrime.Put(3, 3, dSecondStiffnessPrime);
2011 if (dCurrStrain > dUpperLimitStrain) {
2014 CurrStrain(2)*dStiffness +
EpsilonPrime(2)*dStiffnessPrime,
2015 dUpperLimitStrain*dStiffness
2016 +(dCurrStrain-dUpperLimitStrain)*dSecondStiffness
2022 dLowerLimitStrain*dStiffness
2023 +(dCurrStrain-dLowerLimitStrain)*dSecondStiffness
2035 template <
class T,
class Tder>
2047 "is allowed only for rods"));
2062 virtual std::ostream&
Restart(std::ostream& out)
const {
2066 virtual void Update(
const T& ,
const T& = mb_zero<T>()) {
2074 :
public ElasticConstitutiveLaw1D {
2088 : ElasticConstitutiveLaw1D(pDC, PStress),
2089 dStiffness(dStiff), dStiffnessPrime(dStiffPrime),
2090 dTreshold(dTres), dParabolicStiffness(dParabStiff) {
2113 dParabolicStiffness));
2118 virtual std::ostream&
Restart(std::ostream& out)
const {
2119 out <<
"turbulent viscoelastic, "
2120 << dStiffness <<
", "
2121 << dStiffnessPrime <<
", "
2122 << dTreshold <<
", "
2123 << dParabolicStiffness <<
", ";
2134 if (d < dTreshold) {
2139 FDEPrime = 2.*dParabolicStiffness*d;
2150 template <
class T,
class Tder>
2165 bool bInitialStatus,
2182 return m_pCL->GetConstLawType();
2200 virtual std::ostream&
2202 out <<
"bistop, initial status, ";
2212 return m_pCL->Restart(out);
2216 Update(
const T& Eps,
const T& EpsPrime = mb_zero<T>()) {
2219 bool bChangeJac(
false);
2278 PreStress = HP.
Get(PreStress);
2297 #endif // CONSTLTP_IMPL_H
virtual const T & GetF(void) const
LinearViscoElasticIsotropicConstitutiveLaw< doublereal, doublereal > LinearViscoElasticIsotropicConstitutiveLaw1D
LinearViscoElasticIsotropicConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, doublereal dStiff, doublereal dStiffPrime)
doublereal dStiffnessPrime
LinearViscoElasticGenericConstitutiveLaw< Vec6, Mat6x6 > LinearViscoElasticGenericConstitutiveLaw6D
DoubleLinearViscoElasticConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, doublereal=0., doublereal=0., doublereal=0., doublereal=0., doublereal=0., doublereal=0.)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual ~LinearElasticGenericAxialTorsionCouplingConstitutiveLaw(void)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
TplDriveCaller< T > * GetTplDriveCaller(void)
CubicElasticGenericConstitutiveLaw(const TplDriveCaller< doublereal > *pDC, const doublereal &PStress, const doublereal &Stiff1, const doublereal &Stiff2, const doublereal &Stiff3)
IsotropicHardeningConstitutiveLaw< doublereal, doublereal > IsotropicHardeningConstitutiveLaw1D
const Vec3 Zero3(0., 0., 0.)
const Vec6 & mb_zero< Vec6 >(void)
virtual ~ElasticConstitutiveLaw(void)
virtual std::ostream & Restart(std::ostream &out) const
const DriveCaller * m_pActivatingCondition
virtual ConstitutiveLaw< Vec6, Mat6x6 > * pCopy(void) const
virtual void Update(const T &Eps, const T &=Zero3)
virtual ~LinearElasticGenericConstitutiveLaw(void)
virtual std::ostream & Restart(std::ostream &out) const
ConstLawType::Type GetConstLawType(void) const
GradientExpression< BinaryExpr< FuncPow, LhsExpr, RhsExpr > > pow(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
#define MBDYN_EXCEPT_ARGS
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
doublereal dAxialTorsionCoupling
virtual std::ostream & Restart(std::ostream &out) const
LinearViscoElasticGenericConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, const Tder &Stiff, const Tder &StiffPrime)
doublereal dSecondStiffness
virtual ~CubicViscoElasticGenericConstitutiveLaw(void)
ConstitutiveLaw< T, Tder > * m_pCL
virtual std::ostream & Restart(std::ostream &out) const
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual ~LinearViscoElasticGenericConstitutiveLaw(void)
ContactConstitutiveLaw< Vec3, Mat3x3 > ContactConstitutiveLaw3D
IsotropicHardeningConstitutiveLaw< Vec6, Mat6x6 > IsotropicHardeningConstitutiveLaw6D
ConstLawType::Type GetConstLawType(void) const
LinearElasticIsotropicConstitutiveLaw< doublereal, doublereal > LinearElasticIsotropicConstitutiveLaw1D
ConstLawType::Type GetConstLawType(void) const
virtual ConstitutiveLaw1D * pCopy(void) const
virtual std::ostream & Restart(std::ostream &out) const
ConstLawType::Type m_type
LinearViscoElasticIsotropicConstitutiveLaw< Vec3, Mat3x3 > LinearViscoElasticIsotropicConstitutiveLaw3D
std::ostream & Write(std::ostream &out, const FullMatrixHandler &m, const char *s, const char *s2)
virtual std::ostream & Restart(std::ostream &out) const
LinearElasticGenericConstitutiveLaw< Vec3, Mat3x3 > LinearElasticGenericConstitutiveLaw3D
LTVViscoElasticGenericConstitutiveLaw< Vec6, Mat6x6 > LTVViscoElasticGenericConstitutiveLaw6D
virtual ~LinearElasticGenericAxialTorsionCouplingConstitutiveLaw(void)
CubicViscoElasticGenericConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, const T &Stiff1, const T &Stiff2, const T &Stiff3, const Tder &StiffPrime)
virtual const Tder & GetFDE(void) const
virtual std::ostream & Restart(std::ostream &out) const
DoubleLinearViscoElasticConstitutiveLaw(const TplDriveCaller< Vec3 > *pDC, const Vec3 &PStress, doublereal dStiff, doublereal dUppLimStrain, doublereal dLowLimStrain, doublereal dSecondStiff, doublereal dStiffPrime, doublereal dSecondStiffPrime)
virtual void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
virtual std::ostream & Restart(std::ostream &out) const
virtual void AfterConvergence(const T &Eps, const T &EpsPrime=mb_zero< T >())
virtual void Update(const T &, const T &=mb_zero< T >())
doublereal dLowerLimitStrain
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual ~LTVViscoElasticGenericConstitutiveLaw(void)
virtual void AfterConvergence(const T &Eps, const T &EpsPrime=mb_zero< T >())
ElasticConstitutiveLaw< doublereal, doublereal > ElasticConstitutiveLaw1D
virtual ~LinearViscoElasticIsotropicConstitutiveLaw(void)
virtual ~LogConstitutiveLaw(void)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual std::ostream & Restart(std::ostream &out) const
virtual ~LinearViscoElasticGenericAxialTorsionCouplingConstitutiveLaw(void)
std::vector< Hint * > Hints
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
doublereal dUpperLimitStrain
TurbulentViscoElasticConstitutiveLaw(const TplDriveCaller< doublereal > *pDC, const doublereal &PStress, doublereal dStiff, doublereal dStiffPrime, doublereal dTres, doublereal dParabStiff)
DoubleLinearElasticConstitutiveLaw(const TplDriveCaller< Vec3 > *pDC, const Vec3 &PStress, doublereal dStiff, doublereal dUppLimStrain, doublereal dLowLimStrain, doublereal dSecondStiff)
virtual ~CubicElasticGenericConstitutiveLaw(void)
ContactConstitutiveLaw< Vec6, Mat6x6 > ContactConstitutiveLaw6D
virtual ~LinearViscoElasticGenericAxialTorsionCouplingConstitutiveLaw(void)
GradientExpression< UnaryExpr< FuncFabs, Expr > > fabs(const GradientExpression< Expr > &u)
virtual ~TurbulentViscoElasticConstitutiveLaw(void)
LinearElasticGenericConstitutiveLaw< Vec6, Mat6x6 > LinearElasticGenericConstitutiveLaw6D
IsotropicHardeningConstitutiveLaw< Vec3, Mat3x3 > IsotropicHardeningConstitutiveLaw3D
doublereal dAxialTorsionCoupling
LogConstitutiveLaw(const TplDriveCaller< doublereal > *pDC, const doublereal &PStress, doublereal dStiff)
virtual std::ostream & Restart(std::ostream &out) const
doublereal dUpperLimitStrain
virtual ~CubicViscoElasticGenericConstitutiveLaw(void)
const Mat3x3DEye_Manip Mat3x3DEye
virtual std::ostream & Restart(std::ostream &out) const
ConstLawType::Type GetConstLawType(void) const
virtual ~CubicElasticGenericConstitutiveLaw(void)
virtual std::ostream & Restart(std::ostream &out) const =0
void Set(const TplDriveCaller< T > *pDC)
virtual std::ostream & Restart_int(std::ostream &out) const
LinearElasticIsotropicConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, doublereal dStiff)
virtual void Update(const Vec6 &Eps, const Vec6 &=mb_zero< Vec6 >())
doublereal dUpperLimitStrain
ConstLawType::Type GetConstLawType(void) const
virtual std::ostream & Restart(std::ostream &out) const
virtual std::ostream & Restart(std::ostream &out) const
virtual std::ostream & Restart(std::ostream &out) const
BiStopCLWrapper(ConstitutiveLaw< T, Tder > *pCL, bool bInitialStatus, const DriveCaller *pA, const DriveCaller *pD)
CubicElasticGenericConstitutiveLaw(const TplDriveCaller< Vec3 > *pDC, const Vec3 &PStress, const Vec3 &Stiff1, const Vec3 &Stiff2, const Vec3 &Stiff3)
const Mat3x3 Zero3x3(0., 0., 0., 0., 0., 0., 0., 0., 0.)
virtual std::ostream & Restart(std::ostream &out) const
virtual std::ostream & Restart(std::ostream &out) const
doublereal dStiffnessPrime
virtual ConstitutiveLaw< Vec6, Mat6x6 > * pCopy(void) const
virtual void Update(const doublereal &Eps, const doublereal &=0.)
virtual ConstitutiveLaw1D * pCopy(void) const
virtual void Update(const doublereal &Eps, const doublereal &=0.)
virtual void Update(const T &Eps, const T &=mb_zero< T >())
virtual void Update(const T &Eps, const T &EpsPrime=::mb_zero< T >())
virtual std::ostream & Restart(std::ostream &out) const
TplDriveCaller< T > * pGetDriveCaller(void) const
virtual ~IsotropicHardeningConstitutiveLaw(void)
ElasticConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
LinearViscousGenericConstitutiveLaw(const T &PStress, const Tder &StiffPrime)
LinearViscoElasticGenericConstitutiveLaw< doublereal, doublereal > LinearViscoElasticGenericConstitutiveLaw1D
DoubleLinearViscoElasticConstitutiveLaw(const TplDriveCaller< doublereal > *pDC, const doublereal &PStress, doublereal dStiff, doublereal dUpp, doublereal dLow, doublereal dSecondS, doublereal dStiffPrime, doublereal dSecondSPrime)
#define SAFENEW(pnt, item)
virtual ~BiStopCLWrapper(void)
virtual ~TurbulentViscoElasticConstitutiveLaw(void)
GradientExpression< UnaryExpr< FuncLog, Expr > > log(const GradientExpression< Expr > &u)
LTVViscoElasticGenericConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, const Tder &Stiff, const DriveCaller *pdc, const Tder &StiffPrime, const DriveCaller *pdcp)
virtual ConstitutiveLaw< doublereal, doublereal > * pCopy(void) const
LinearElasticIsotropicConstitutiveLaw< Vec6, Mat6x6 > LinearElasticIsotropicConstitutiveLaw6D
virtual bool IsKeyWord(const char *sKeyWord)
ConstLawType::Type GetConstLawType(void) const
virtual std::ostream & Restart(std::ostream &out) const
virtual ~DoubleLinearViscoElasticConstitutiveLaw(void)
virtual ~DoubleLinearElasticConstitutiveLaw(void)
virtual std::ostream & Restart(std::ostream &out) const
ConstitutiveLawArray(const std::vector< ConstitutiveLaw< T, Tder > * > &clv)
const doublereal & dGet(unsigned short int iRow) const
LinearElasticIsotropicConstitutiveLaw< Vec3, Mat3x3 > LinearElasticIsotropicConstitutiveLaw3D
virtual std::ostream & OutputAppend(std::ostream &out) const
doublereal dLowerLimitStrain
doublereal dSecondStiffness
virtual void Update(const T &, const T &=mb_zero< T >())
ElasticConstitutiveLaw< Vec6, Mat6x6 > ElasticConstitutiveLaw6D
LinearViscoElasticGenericAxialTorsionCouplingConstitutiveLaw(const TplDriveCaller< Vec6 > *pDC, const Vec6 &PStress, const Mat6x6 &Stiff, const Mat6x6 &StiffPrime, doublereal dAxTors)
LogConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, doublereal=0.)
TurbulentViscoElasticConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, doublereal=0., doublereal=0., doublereal=0., doublereal=0.)
virtual std::ostream & Restart(std::ostream &out) const
virtual ~CubicViscoElasticGenericConstitutiveLaw(void)
virtual void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
ConstLawType::Type GetConstLawType(void) const
const DriveCaller * m_pDeactivatingCondition
virtual void Update(const Vec6 &Eps, const Vec6 &EpsPrime=mb_zero< Vec6 >())
virtual void Update(const Vec3 &Eps, const Vec3 &EpsPrime=Zero3)
virtual void Update(const T &Eps, const T &=mb_zero< T >())
#define ASSERT(expression)
TplDriveCaller< T > * pCreateDrive(DataManager *pDM) const
doublereal dPrevScaleFactor
virtual void Update(const T &, const T &=mb_zero< T >())
virtual ~DoubleLinearViscoElasticConstitutiveLaw(void)
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
CubicViscoElasticGenericConstitutiveLaw(const TplDriveCaller< Vec3 > *pDC, const Vec3 &PStress, const Vec3 &Stiff1, const Vec3 &Stiff2, const Vec3 &Stiff3, const Mat3x3 &StiffPrime)
ElasticConstitutiveLaw< Vec3, Mat3x3 > ElasticConstitutiveLaw3D
virtual void Update(const doublereal &Eps, const doublereal &=0.)
doublereal dStiffnessPrime
virtual std::ostream & Restart(std::ostream &out) const
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
DriveCaller * pGetDriveCaller(void) const
virtual void Update(const doublereal &Eps, const doublereal &EpsPrime=0.)
LTVViscoElasticGenericConstitutiveLaw< Vec3, Mat3x3 > LTVViscoElasticGenericConstitutiveLaw3D
virtual void Update(const T &, const T &EpsPrime=mb_zero< T >())
void GetPreStress(MBDynParser &HP, T &PreStress)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
doublereal dLowerLimitStrain
virtual void AfterConvergence(const T &Eps, const T &EpsPrime=mb_zero< T >())
virtual std::ostream & Restart(std::ostream &out) const
virtual ~DoubleLinearViscoElasticConstitutiveLaw(void)
doublereal dParabolicStiffness
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual void Update(const T &, const T &=mb_zero< T >())
virtual DriveCaller * pCopy(void) const =0
LinearElasticGenericAxialTorsionCouplingConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, const Tder &=mb_zero< Tder >(), doublereal=0.)
virtual void Update(const Vec3 &Eps, const Vec3 &=Zero3)
doublereal dPrevScaleFactorPrime
virtual doublereal dGet(const doublereal &dVar) const =0
virtual void Update(const T &, const T &=mb_zero< T >())
virtual ConstitutiveLaw< doublereal, doublereal > * pCopy(void) const
LinearViscousIsotropicConstitutiveLaw(const T &PStress, doublereal dStiffPrime)
IsotropicHardeningConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, doublereal dStiff, doublereal dStiff0, doublereal dEpsHard)
virtual ~LinearViscousGenericConstitutiveLaw(void)
doublereal dStiffnessPrime
doublereal dSecondStiffness
void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
std::vector< ConstitutiveLaw< T, Tder > * > m_clv
ConstLawType::Type GetConstLawType(void) const
virtual void Update(const Vec3 &Eps, const Vec3 &=Zero3)
virtual ~InverseSquareConstitutiveLaw(void)
void Manipulate(Mat3x3 &m, const doublereal d) const
virtual ConstitutiveLaw1D * pCopy(void) const
doublereal dSecondStiffnessPrime
LinearViscoElasticIsotropicConstitutiveLaw< Vec6, Mat6x6 > LinearViscoElasticIsotropicConstitutiveLaw6D
ConstLawType::Type GetConstLawType(void) const
virtual ~LogConstitutiveLaw(void)
doublereal dSecondStiffness
doublereal dSecondStiffnessPrime
virtual std::ostream & Restart(std::ostream &out) const
doublereal dGet(const doublereal &dVar) const
virtual ConstitutiveLaw< Vec3, Mat3x3 > * pCopy(void) const
virtual void Update(const doublereal &Eps, const doublereal &EpsPrime=0.)
virtual ~CubicElasticGenericConstitutiveLaw(void)
ConstLawType::Type GetConstLawType(void) const
CubicElasticGenericConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, const T &Stiff1, const T &Stiff2, const T &Stiff3)
virtual ~ConstitutiveLawArray(void)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual ~DoubleLinearElasticConstitutiveLaw(void)
virtual ConstitutiveLaw< Vec3, Mat3x3 > * pCopy(void) const
virtual void Update(const T &Eps, const T &=mb_zero< T >())
virtual std::ostream & Restart(std::ostream &out) const
doublereal dStiffnessPrime
virtual const Tder & GetFDEPrime(void) const
LinearElasticGenericAxialTorsionCouplingConstitutiveLaw(const TplDriveCaller< Vec6 > *pDC, const Vec6 &PStress, const Mat6x6 &Stiff, doublereal dAxTors)
void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
virtual std::ostream & Restart(std::ostream &out) const
virtual ~DoubleLinearElasticConstitutiveLaw(void)
virtual void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
ConstLawType::Type GetConstLawType(void) const
ConstLawType::Type GetConstLawType(void) const
virtual ~LinearElasticIsotropicConstitutiveLaw(void)
virtual void Update(const T &Eps, const T &EpsPrime=mb_zero< T >())
void Put(unsigned short int iRow, unsigned short int iCol, const doublereal &dCoef)
ConstLawType::Type GetConstLawType(void) const
virtual ~LinearViscousIsotropicConstitutiveLaw(void)
T pCreateVec(DataManager *pDM) const
virtual void Update(const Vec3 &Eps, const Vec3 &EpsPrime=Zero3)
DoubleLinearElasticConstitutiveLaw(const TplDriveCaller< doublereal > *pDC, const doublereal &PStress, doublereal dStiff, doublereal dUppLimStrain, doublereal dLowLimStrain, doublereal dSecondStiff)
virtual doublereal Get(const doublereal &d)
virtual void Update(const doublereal &Eps, const doublereal &=0.)
ConstLawType::Type GetConstLawType(void) const
virtual void Update(const T &Eps, const T &=mb_zero< T >())
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
InverseSquareConstitutiveLaw(const TplDriveCaller< doublereal > *pDC, const doublereal &PStress, const doublereal &A, const doublereal &L0)
LinearElasticGenericConstitutiveLaw< doublereal, doublereal > LinearElasticGenericConstitutiveLaw1D
virtual std::ostream & Restart(std::ostream &out) const
LTVViscoElasticGenericConstitutiveLaw< doublereal, doublereal > LTVViscoElasticGenericConstitutiveLaw1D
virtual ConstitutiveLaw< doublereal, doublereal > * pCopy(void) const
DoubleLinearElasticConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, doublereal=0., doublereal=0., doublereal=0., doublereal=0.)
virtual void Update(const doublereal &Eps, const doublereal &EpsPrime=0.)
virtual std::ostream & Restart(std::ostream &out) const
ContactConstitutiveLaw< doublereal, doublereal > ContactConstitutiveLaw1D
virtual std::ostream & Restart(std::ostream &out) const
virtual ConstitutiveLaw3D * pCopy(void) const
virtual Hint * ParseHint(DataManager *pDM, const char *s) const
virtual std::ostream & Restart(std::ostream &out) const
LinearViscoElasticGenericAxialTorsionCouplingConstitutiveLaw< Vec6, Mat6x6 > LinearViscoElasticGenericAxialTorsionCouplingConstitutiveLaw6D
LinearViscoElasticGenericAxialTorsionCouplingConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, const Tder &Stiff, const Tder &StiffPrime, doublereal dAxTors)
virtual ConstitutiveLaw3D * pCopy(void) const
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
doublereal dUpperLimitStrain
virtual std::ostream & Restart(std::ostream &out) const
virtual void Update(const T &, const T &EpsPrime=mb_zero< T >())
ConstLawType::Type GetConstLawType(void) const
doublereal dLowerLimitStrain
LinearElasticGenericConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, const Tder &Stiff)
virtual ConstitutiveLaw< doublereal, doublereal > * pCopy(void) const
CubicViscoElasticGenericConstitutiveLaw(const TplDriveCaller< doublereal > *pDC, const doublereal &PStress, const doublereal &Stiff1, const doublereal &Stiff2, const doublereal &Stiff3, const doublereal &StiffPrime)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
virtual std::ostream & Restart(std::ostream &out) const
LinearViscoElasticGenericConstitutiveLaw< Vec3, Mat3x3 > LinearViscoElasticGenericConstitutiveLaw3D
TplDriveCaller< T > * GetPreStrain(const DataManager *pDM, MBDynParser &HP)