template<class T, class Tder, ConstLawType::Type Typ>
struct NLSFViscoElasticCLR< T, Tder, Typ >
Definition at line 311 of file constltp_nlsf.cc.
template<class T , class Tder , ConstLawType::Type Typ>
Implements ConstitutiveLawRead< T, Tder >.
Definition at line 313 of file constltp_nlsf.cc.
References ConstLawType::ELASTIC, MBDynParser::Get(), IncludeParser::GetLineData(), GetPreStress(), HighParser::GetReal(), HighParser::IsKeyWord(), MBDYN_EXCEPT_ARGS, ParseScalarFunction(), SAFENEWWITHCONSTRUCTOR, ConstLawType::VISCOELASTIC, and ConstLawType::VISCOUS.
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));
#define MBDYN_EXCEPT_ARGS
virtual bool IsKeyWord(const char *sKeyWord)
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
void GetPreStress(MBDynParser &HP, T &PreStress)
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)