50 static void __attribute__ ((constructor))
55 feenableexcept (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW);
81 for (
unsigned ir = 1; ir <= 3; ir++) {
86 for (
unsigned ir = 1; ir <= 3; ir++) {
88 for (
unsigned ic = ir + 1; ic <= 3; ic++) {
108 silent_cerr(
"Membrane isotropic constitutive law: Young's modulus already provided at line " << HP.
GetLineData() << std::endl);
114 silent_cerr(
"Membrane isotropic constitutive law: invalid Young's modulus " << dE <<
" at line " << HP.
GetLineData() << std::endl);
120 silent_cerr(
"Membrane isotropic constitutive law: Poisson's modulus already provided at line " << HP.
GetLineData() << std::endl);
125 if (dnu < 0. || dnu >= .5) {
126 silent_cerr(
"Membrane isotropic constitutive law: invalid Poisson's modulus " << dnu <<
" at line " << HP.
GetLineData() << std::endl);
132 silent_cerr(
"Membrane isotropic constitutive law: shear modulus already provided at line " << HP.
GetLineData() << std::endl);
138 silent_cerr(
"Membrane isotropic constitutive law: invalid shear modulus " << dG <<
" at line " << HP.
GetLineData() << std::endl);
144 silent_cerr(
"Membrane isotropic constitutive law: thickness already provided at line " << HP.
GetLineData() << std::endl);
150 silent_cerr(
"Membrane isotropic constitutive law: invalid thickness " << dh <<
" at line " << HP.
GetLineData() << std::endl);
165 silent_cerr(
"Membrane isotropic constitutive law: incomplete material data (need at least two among Young's modulus, Poisson's modulus, shear modulus)" << std::endl);
170 if (std::abs(dE/(2.*(1 + dnu)) - dG) >
171 std::numeric_limits<doublereal>::epsilon())
173 silent_cerr(
"Membrane isotropic constitutive law: inconsistent material data" << std::endl);
178 dG = dE/(2.*(1 + dnu));
180 }
else if (!bGot_E) {
181 dE = 2.*(1 + dnu)*dG;
183 }
else if (!bGot_nu) {
184 dnu = dE/(2.*dG) - 1.;
185 if (dnu <= 0. || dnu >= .5) {
186 silent_cerr(
"Membrane isotropic constitutive law: inconsistent material data (computed Poisson's modulus: " << dnu <<
")" << std::endl);
193 silent_cerr(
"Membrane isotropic constitutive law: shell thickness missing" << std::endl);
235 for (
unsigned ir = 1; ir <= 3; ir++) {
236 for (
unsigned ic = 1; ic <= 3; ic++) {
244 for (
unsigned ir = 1; ir <= 3; ir++) {
int ReadMembraneConstLaw(MBDynParser &HP, Membrane::fmh &pD, Membrane::vh &PreStress)
virtual integer iGetSize(void) const
virtual bool IsKeyWord(const char *sKeyWord)
#define ASSERT(expression)
Membrane(unsigned uLabel, const DofOwner *pDO, flag fOut)
virtual integer iGetNumCols(void) const
virtual HighParser::ErrOut GetLineData(void) const
virtual integer iGetNumRows(void) const
virtual doublereal GetReal(const doublereal &dDefval=0.0)