69 for (
unsigned ir = 1; ir <= 12; ir++) {
74 for (
unsigned ir = 1; ir <= 12; ir++) {
76 for (
unsigned ic = ir + 1; ic <= 12; ic++) {
100 silent_cerr(
"Shell isotropic constitutive law: Young's modulus already provided at line " << HP.
GetLineData() << std::endl);
106 silent_cerr(
"Shell isotropic constitutive law: invalid Young's modulus " << dE <<
" at line " << HP.
GetLineData() << std::endl);
112 silent_cerr(
"Shell isotropic constitutive law: Poisson's modulus already provided at line " << HP.
GetLineData() << std::endl);
117 if (dnu < 0. || dnu >= .5) {
118 silent_cerr(
"Shell isotropic constitutive law: invalid Poisson's modulus " << dnu <<
" at line " << HP.
GetLineData() << std::endl);
124 silent_cerr(
"Shell isotropic constitutive law: shear modulus already provided at line " << HP.
GetLineData() << std::endl);
130 silent_cerr(
"Shell isotropic constitutive law: invalid shear modulus " << dG <<
" at line " << HP.
GetLineData() << std::endl);
136 silent_cerr(
"Shell isotropic constitutive law: thickness already provided at line " << HP.
GetLineData() << std::endl);
142 silent_cerr(
"Shell isotropic constitutive law: invalid thickness " << dh <<
" at line " << HP.
GetLineData() << std::endl);
148 silent_cerr(
"Shell isotropic constitutive law: as (?) already provided at line " << HP.
GetLineData() << std::endl);
154 silent_cerr(
"Shell isotropic constitutive law: invalid as " << das <<
" at line " << HP.
GetLineData() << std::endl);
160 silent_cerr(
"Shell isotropic constitutive law: at (?) already provided at line " << HP.
GetLineData() << std::endl);
166 silent_cerr(
"Shell isotropic constitutive law: invalid at " << dat <<
" at line " << HP.
GetLineData() << std::endl);
181 silent_cerr(
"Shell isotropic constitutive law: incomplete material data (need at least two among Young's modulus, Poisson's modulus, shear modulus)" << std::endl);
186 if (std::abs(dE/(2.*(1 + dnu)) - dG) >
187 std::numeric_limits<doublereal>::epsilon())
189 silent_cerr(
"Shell isotropic constitutive law: inconsistent material data" << std::endl);
194 dG = dE/(2.*(1 + dnu));
196 }
else if (!bGot_E) {
197 dE = 2.*(1 + dnu)*dG;
199 }
else if (!bGot_nu) {
200 dnu = dE/(2.*dG) - 1.;
201 if (dnu <= 0. || dnu >= .5) {
202 silent_cerr(
"Shell isotropic constitutive law: inconsistent material data (computed Poisson's modulus: " << dnu <<
")" << std::endl);
209 silent_cerr(
"Shell isotropic constitutive law: shell thickness missing" << std::endl);
238 }
else if (HP.
IsKeyWord(
"plane" "stress" "orthotropic")) {
270 bool bGot_E_l(
false);
271 bool bGot_E_t(
false);
272 bool bGot_nu_lt(
false);
273 bool bGot_nu_tl(
false);
275 bool bGot_Beta(
false);
283 silent_cerr(
"Shell plane stress orthotropic constitutive law: longitudinal Young's modulus already provided at line " << HP.
GetLineData() << std::endl);
289 silent_cerr(
"Shell plane stress orthotropic constitutive law: invalid longitudinal Young's modulus " << dE_l <<
" at line " << HP.
GetLineData() << std::endl);
295 silent_cerr(
"Shell plane stress orthotropic constitutive law: transverse Young's modulus already provided at line " << HP.
GetLineData() << std::endl);
301 silent_cerr(
"Shell plane stress orthotropic constitutive law: invalid transverse Young's modulus " << dE_t <<
" at line " << HP.
GetLineData() << std::endl);
305 }
else if (HP.
IsKeyWord(
"nu_lt") || HP.
IsKeyWord(
"longitudinal" "transverse" "Poisson" "modulus")) {
307 silent_cerr(
"Shell plane stress orthotropic constitutive law: longitudinal transverse Poisson's modulus already provided at line " << HP.
GetLineData() << std::endl);
313 if (dnu_lt <= 0. || dnu_lt >= .5) {
314 silent_cerr(
"Shell plane stress orthotropic constitutive law: invalid longitudinal transverse Poisson's modulus " << dnu_lt <<
" at line " << HP.
GetLineData() << std::endl);
319 }
else if (HP.
IsKeyWord(
"nu_tl") || HP.
IsKeyWord(
"transverse" "longitudinal" "Poisson" "modulus")) {
321 silent_cerr(
"Shell plane stress orthotropic constitutive law: transverse longitudinal Poisson's modulus already provided at line " << HP.
GetLineData() << std::endl);
327 if (dnu_tl <= 0. || dnu_tl >= .5) {
328 silent_cerr(
"Shell plane stress orthotropic constitutive law: invalid transverse longitudinal Poisson's modulus " << dnu_lt <<
" at line " << HP.
GetLineData() << std::endl);
335 silent_cerr(
"Shell plane stress orthotropic constitutive law: shear modulus already provided at line " << HP.
GetLineData() << std::endl);
341 silent_cerr(
"Shell plane stress orthotropic constitutive law: invalid shear modulus " << dG <<
" at line " << HP.
GetLineData() << std::endl);
347 silent_cerr(
"Shell plane stress orthotropic constitutive law: fiber angle \"beta\" already provided at line " << HP.
GetLineData() << std::endl);
354 silent_cerr(
"Shell plane stress orthotropic constitutive law: fiber angle \"beta\" not supported yet" << std::endl);
359 silent_cerr(
"Shell plane stress orthotropic constitutive law: thickness already provided at line " << HP.
GetLineData() << std::endl);
365 silent_cerr(
"Shell plane stress orthotropic constitutive law: invalid thickness " << dh <<
" at line " << HP.
GetLineData() << std::endl);
371 silent_cerr(
"Shell plane stress orthotropic constitutive law: as (?) already provided at line " << HP.
GetLineData() << std::endl);
377 silent_cerr(
"Shell plane stress orthotropic constitutive law: invalid as " << das <<
" at line " << HP.
GetLineData() << std::endl);
383 silent_cerr(
"Shell plane stress orthotropic constitutive law: at (?) already provided at line " << HP.
GetLineData() << std::endl);
389 silent_cerr(
"Shell plane stress orthotropic constitutive law: invalid at " << dat <<
" at line " << HP.
GetLineData() << std::endl);
399 silent_cerr(
"Shell plane stress orthotropic constitutive law: longitudinal Young's modulus missing at line " << HP.
GetLineData() << std::endl);
404 silent_cerr(
"Shell plane stress orthotropic constitutive law: transverse Young's modulus missing at line " << HP.
GetLineData() << std::endl);
408 if (!bGot_nu_lt && !bGot_nu_tl) {
409 silent_cerr(
"Shell plane stress orthotropic constitutive law: Poisson's modulus missing at line " << HP.
GetLineData() << std::endl);
412 }
else if (bGot_nu_lt && bGot_nu_tl) {
413 if (std::abs(dnu_tl*dE_l - dnu_lt*dE_t) >
414 std::numeric_limits<doublereal>::epsilon())
416 silent_cerr(
"Shell plane stress orthotropic constitutive law: inconsistent material data" << std::endl);
420 }
else if (bGot_nu_tl) {
421 dnu_lt = dnu_tl*dE_l/dE_t;
425 silent_cerr(
"Shell plane stress orthotropic constitutive law: shear modulus missing at line " << HP.
GetLineData() << std::endl);
429 doublereal C = dh/(1. - dnu_lt*dnu_lt/dE_l*dE_t);
431 doublereal D = 1./12.*dh*dh*dh/(1. - dnu_lt*dnu_lt/dE_l*dE_t);
435 pD(1, 5) = C*dnu_lt*dE_t;
441 pD(5, 1) = C*dnu_lt*dE_t;
447 pD(7, 11) = D*dnu_lt*dE_t;
453 pD(11, 7) = D*dnu_lt*dE_t;
460 pD(8, 10) = -D*dnu_lt*dE_t;
464 pD(10, 8) = -D*dnu_lt*dE_t;
474 for (
unsigned ir = 1; ir <= 12; ir++) {
475 for (
unsigned ic = 1; ic <= 12; ic++) {
483 for (
unsigned ir = 1; ir <= 12; ir++) {
#define MBDYN_EXCEPT_ARGS
virtual integer iGetSize(void) const
virtual bool IsKeyWord(const char *sKeyWord)
#define ASSERT(expression)
virtual integer iGetNumCols(void) const
virtual HighParser::ErrOut GetLineData(void) const
virtual integer iGetNumRows(void) const
virtual doublereal GetReal(const doublereal &dDefval=0.0)