45 template <
class T,
class Tder>
52 std::vector<const DifferentiableScalarFunction *>
FDEsc;
53 std::vector<const DifferentiableScalarFunction *>
FDEPrimesc;
60 const std::vector<const DifferentiableScalarFunction *>& fdesc,
61 const Tder& fdeprime0,
62 const std::vector<const DifferentiableScalarFunction *>& fdeprimesc)
91 virtual std::ostream&
Restart(std::ostream& out)
const {
92 silent_cerr(
"NLSFViscoElasticConstitutiveLaw: Restart not implemented"
97 out <<
"nlp viscoelastic, ",
98 FDE0.Write(out,
", ");
100 for (
unsigned i = 0; i <
FDEsc.size(); i++) {
103 FDEsc[i]->Restart(out);
112 for (
unsigned i = 0; i <
FDEPrimesc.size(); i++) {
126 virtual void Update(
const T& Eps,
const T& EpsPrime = 0.) {
143 for (
unsigned i = 0; i <
FDEsc.size(); i++) {
158 if ((
CLType & ConstLawType::ELASTIC) &&
FDEsc[i]) {
160 f += (*
FDEsc[i])(dEps);
184 std::vector<const DifferentiableScalarFunction *>
FDEsc;
185 std::vector<const DifferentiableScalarFunction *>
FDEPrimesc;
192 const std::vector<const DifferentiableScalarFunction *>& fdesc,
194 const std::vector<const DifferentiableScalarFunction *>& fdeprimesc)
223 virtual std::ostream&
Restart(std::ostream& out)
const {
224 silent_cerr(
"NLSFViscoElasticConstitutiveLaw: Restart not implemented"
229 out <<
"nlp viscoelastic, ",
230 FDE0.Write(out,
", ");
232 for (
unsigned i = 0; i <
FDEsc.size(); i++) {
235 FDEsc[i]->Restart(out);
244 for (
unsigned i = 0; i <
FDEPrimesc.size(); i++) {
289 if ((
CLType & ConstLawType::ELASTIC) &&
FDEsc[0]) {
290 f += (*
FDEsc[0])(dEps);
310 template <
class T,
class Tder, ConstLawType::Type Typ>
321 }
else if (
typeid(T) ==
typeid(
Vec3)) {
324 }
else if (
typeid(T) ==
typeid(
Vec6)) {
328 silent_cerr(
"Invalid dimensionality "
329 "for NLSF viscoelastic constitutive law "
336 Tder FDE0(mb_zero<Tder>());
337 bool bElastic(
false);
338 std::vector<const DifferentiableScalarFunction *> FDEsc(dim);
339 for (
unsigned i = 0; i < dim; i++) {
346 bElastic = !IsNull<Tder>(FDE0);
347 for (
unsigned i = 0; i < dim; i++) {
353 silent_cerr(
"NLSFViscoElasticCLR: "
354 "stiffness scalar function #" << i <<
" "
356 "must be differentiable" << std::endl);
365 Tder FDEPrime0(mb_zero<Tder>());
366 bool bViscous(
false);
367 std::vector<const DifferentiableScalarFunction *> FDEPrimesc(dim);
368 for (
unsigned i = 0; i < dim; i++) {
373 if ((Typ & ConstLawType::ELASTIC) && HP.
IsKeyWord(
"proportional")) {
376 FDEPrime0 = HP.
Get(FDEPrime0);
379 bViscous = !IsNull<Tder>(FDEPrime0);
380 for (
unsigned i = 0; i < dim; i++) {
385 if (FDEPrimesc[i] == 0) {
386 silent_cerr(
"NLSFViscoElasticCLR: "
387 "damping scalar function #" << i <<
" "
389 "must be differentiable" << std::endl);
398 T PreStress(mb_zero<T>());
402 if (bElastic && bViscous) {
404 }
else if (bElastic) {
406 }
else if (bViscous) {
418 FDEPrime0, FDEPrimesc));
430 if (!
SetCL1D(
"nlsf" "viscoelastic", rf1D)) {
433 silent_cerr(
"NLSFViscoElasticConstitutiveLaw1D: "
434 "init failed" << std::endl);
441 if (!
SetCL1D(
"nlsf" "elastic", rf1D)) {
444 silent_cerr(
"NLSFElasticConstitutiveLaw1D: "
445 "init failed" << std::endl);
452 if (!
SetCL1D(
"nlsf" "viscous", rf1D)) {
455 silent_cerr(
"NLSFViscousConstitutiveLaw1D: "
456 "init failed" << std::endl);
464 if (!
SetCL3D(
"nlsf" "viscoelastic", rf3D)) {
467 silent_cerr(
"NLSFViscoElasticConstitutiveLaw3D: "
468 "init failed" << std::endl);
475 if (!
SetCL3D(
"nlsf" "elastic", rf3D)) {
478 silent_cerr(
"NLSFElasticConstitutiveLaw3D: "
479 "init failed" << std::endl);
486 if (!
SetCL3D(
"nlsf" "viscous", rf3D)) {
489 silent_cerr(
"NLSFViscousConstitutiveLaw3D: "
490 "init failed" << std::endl);
498 if (!
SetCL6D(
"nlsf" "viscoelastic", rf6D)) {
501 silent_cerr(
"NLSFViscoElasticConstitutiveLaw6D: "
502 "init failed" << std::endl);
509 if (!
SetCL6D(
"nlsf" "elastic", rf6D)) {
512 silent_cerr(
"NLSFElasticConstitutiveLaw6D: "
513 "init failed" << std::endl);
520 if (!
SetCL6D(
"nlsf" "viscous", rf6D)) {
523 silent_cerr(
"NLSFViscousConstitutiveLaw6D: "
524 "init failed" << std::endl);
NLSFViscoElasticConstitutiveLaw< doublereal, doublereal > NLSFViscoElasticConstitutiveLaw1D
virtual ConstitutiveLaw< doublereal, doublereal > * pCopy(void) const
ConstLawType::Type CLType
virtual std::ostream & Restart(std::ostream &out) const
#define MBDYN_EXCEPT_ARGS
NLSFViscoElasticConstitutiveLaw(const TplDriveCaller< doublereal > *pDC, const doublereal &PStress, const ConstLawType::Type &cltype, const doublereal &fde0, const std::vector< const DifferentiableScalarFunction * > &fdesc, const doublereal &fdeprime0, const std::vector< const DifferentiableScalarFunction * > &fdeprimesc)
std::vector< const DifferentiableScalarFunction * > FDEsc
NLSFViscoElasticConstitutiveLaw(const TplDriveCaller< T > *pDC, const T &PStress, const ConstLawType::Type &cltype, const Tder &fde0, const std::vector< const DifferentiableScalarFunction * > &fdesc, const Tder &fdeprime0, const std::vector< const DifferentiableScalarFunction * > &fdeprimesc)
std::vector< const DifferentiableScalarFunction * > FDEsc
ConstLawType::Type CLType
virtual void Update(const T &Eps, const T &EpsPrime=0.)
std::vector< const DifferentiableScalarFunction * > FDEPrimesc
virtual ~NLSFViscoElasticConstitutiveLaw(void)
virtual std::ostream & Restart_int(std::ostream &out) const
NLSFViscoElasticConstitutiveLaw< Vec3, Mat3x3 > NLSFViscoElasticConstitutiveLaw3D
virtual void Update(const doublereal &Eps, const doublereal &EpsPrime=0.)
virtual std::ostream & Restart(std::ostream &out) const
std::vector< const DifferentiableScalarFunction * > FDEPrimesc
virtual bool IsKeyWord(const char *sKeyWord)
ConstLawType::Type GetConstLawType(void) const
bool SetCL3D(const char *name, ConstitutiveLawRead< Vec3, Mat3x3 > *rf)
virtual ~NLSFViscoElasticConstitutiveLaw(void)
virtual ConstitutiveLaw< T, Tder > * pCopy(void) const
bool SetCL1D(const char *name, ConstitutiveLawRead< doublereal, doublereal > *rf)
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
void GetPreStress(MBDynParser &HP, T &PreStress)
ConstLawType::Type GetConstLawType(void) const
bool SetCL6D(const char *name, ConstitutiveLawRead< Vec6, Mat6x6 > *rf)
NLSFViscoElasticConstitutiveLaw< Vec6, Mat6x6 > NLSFViscoElasticConstitutiveLaw6D
virtual ConstitutiveLaw< T, Tder > * Read(const DataManager *pDM, MBDynParser &HP, ConstLawType::Type &CLType)
virtual doublereal Get(const doublereal &d)
virtual HighParser::ErrOut GetLineData(void) const
const BasicScalarFunction *const ParseScalarFunction(MBDynParser &HP, DataManager *const pDM)
virtual doublereal GetReal(const doublereal &dDefval=0.0)