200 double us, SCC, SCT, psi2, comp, tol = 0.0, crit = 0.0, nez = 0.0, effstold = 0.0, dezold = 0.0, effst = 0.0, dez = 0.0;
201 double epsult = 0.0, ep1 = -1.0, ep2 = -1.0, ep3 = -1.0, relus, G, ez;
202 int ifsh, i, ifplas, ifupd;
203 FloatArray plasticStrainVector, plasticStrainIncrementVector;
206 FloatArray currentStress, currentStrain, currentEffStrain(6), pVal, ep, pStress, strainIncr, plasticStrain, help, reducedStrain, helpR;
219 totalStrain, tStep, VM_Total);
221 StructuralMaterial :: giveFullSymVectorForm( currentStrain, reducedStrain, gp->giveMaterialMode() );
222 StructuralMaterial :: giveFullSymVectorForm( currentStress, status->
giveStressVector(), gp->giveMaterialMode() );
236 StructuralMaterial :: giveFullSymVectorForm( plasticStrain, plasticStrainVector, gp->giveMaterialMode() );
264 currentEffStrain.at(1) = currentStrain.
at(1) - plasticStrain.
at(1);
265 currentEffStrain.at(2) = currentStrain.
at(2) - plasticStrain.
at(2);
266 currentEffStrain.at(3) = ez - plasticStrain.
at(3);
267 currentEffStrain.at(4) = currentStrain.
at(4) - plasticStrain.
at(4);
268 currentEffStrain.at(5) = currentStrain.
at(5) - plasticStrain.
at(5);
269 currentEffStrain.at(6) = currentStrain.
at(6) - plasticStrain.
at(6);
271 currentEffStrain.at(1) = currentStrain.
at(1);
272 currentEffStrain.at(2) = currentStrain.
at(2);
273 currentEffStrain.at(3) = ez;
274 currentEffStrain.at(4) = currentStrain.
at(4);
275 currentEffStrain.at(5) = currentStrain.
at(5);
276 currentEffStrain.at(6) = currentStrain.
at(6);
283 psi2 = currentEffStrain.at(4) * currentEffStrain.at(4) +
284 currentEffStrain.at(5) * currentEffStrain.at(5);
285 comp = sqrt(currentEffStrain.at(1) * currentEffStrain.at(1) +
286 currentEffStrain.at(2) * currentEffStrain.at(2) +
287 currentEffStrain.at(3) * currentEffStrain.at(3) +
288 currentEffStrain.at(6) * currentEffStrain.at(6) +
292 for ( i = 1; i <= 6; i++ ) {
293 currentStress.
at(i) = 0.;
299 StructuralMaterial :: giveReducedSymVectorForm( helpR, currentStress, gp->giveMaterialMode() );
303 StructuralMaterial :: giveReducedSymVectorForm( help, plasticStrain, gp->giveMaterialMode() );
306 plasticStrainIncrementVector.
subtract(plasticStrainVector);
307 plasticStrainIncrementVector.
add(help);
313 StructuralMaterial :: giveReducedSymVectorForm( answer, currentStress, gp->giveMaterialMode() );
323 if ( ( ez != 0. ) && ( ( sqrt(psi2) / comp ) < this->
give(
c2_SHEARTOL, gp) ) ) {
334 if ( pDir.
at(3, 2) > pDir.
at(3, j) ) {
338 if ( pDir.
at(3, 3) > pDir.
at(3, j) ) {
346 for ( k = 1; k <= 3; k++ ) {
347 swap = pDir.
at(k, 3);
348 pDir.
at(k, 3) = pDir.
at(k, j);
349 pDir.
at(k, j) = swap;
353 pVal.
at(3) = pVal.
at(j);
357 this->
dtp2(gp, pVal, pStress, ep, SCC, SCT, & ifplas);
382 this->
dtp3(gp, pVal, pStress, ep, SCC, SCT, & ifplas);
391 us = ( pDir.
at(3, 1) * pStress.
at(1) * pDir.
at(3, 1) +
392 pDir.
at(3, 2) * pStress.
at(2) * pDir.
at(3, 2) +
393 pDir.
at(3, 3) * pStress.
at(3) * pDir.
at(3, 3) );
416 if ( ( ifplas ) && ( us < 0. ) ) {
420 if ( pVal.
at(1) > pVal.
at(2) ) {
421 if ( pVal.
at(1) > pVal.
at(3) ) {
422 effst = pDir.
at(3, 1);
424 effst = pDir.
at(3, 3);
427 if ( pVal.
at(2) > pVal.
at(3) ) {
428 effst = pDir.
at(3, 2);
430 effst = pDir.
at(3, 3);
434 effst = ( 1. - effst * effst );
436 if ( effst < 1.e-6 ) {
456 if ( dez * dezold < 0. ) {
468 strainIncr.
at(1) = dez;
490 this->
strsoft(gp, epsult, ep, ep1, ep2, ep3, SCC, SCT, ifupd);
497 relus = fabs(us) / crit;
498 if ( ( tol > 0. ) && ( relus > tol ) ) {
502 currentEffStrain.at(1) += pDir.
at(3, 1) * dez * pDir.
at(3, 1);
503 currentEffStrain.at(2) += pDir.
at(3, 2) * dez * pDir.
at(3, 2);
504 currentEffStrain.at(3) += pDir.
at(3, 3) * dez * pDir.
at(3, 3);
505 currentEffStrain.at(4) += pDir.
at(3, 2) * dez * pDir.
at(3, 3);
506 currentEffStrain.at(5) += pDir.
at(3, 1) * dez * pDir.
at(3, 3);
507 currentEffStrain.at(6) += pDir.
at(3, 1) * dez * pDir.
at(3, 2);
511 plasticStrain.
at(1) += ( pDir.
at(1, 1) * ep1 * pDir.
at(1, 1) +
512 pDir.
at(1, 2) * ep2 * pDir.
at(1, 2) +
513 pDir.
at(1, 3) * ep3 * pDir.
at(1, 3) );
514 plasticStrain.
at(2) += ( pDir.
at(2, 1) * ep1 * pDir.
at(2, 1) +
515 pDir.
at(2, 2) * ep2 * pDir.
at(2, 2) +
516 pDir.
at(2, 3) * ep3 * pDir.
at(2, 3) );
517 plasticStrain.
at(3) += ( pDir.
at(3, 1) * ep1 * pDir.
at(3, 1) +
518 pDir.
at(3, 2) * ep2 * pDir.
at(3, 2) +
519 pDir.
at(3, 3) * ep3 * pDir.
at(3, 3) );
520 plasticStrain.
at(4) += 2. * ( pDir.
at(2, 1) * ep1 * pDir.
at(3, 1) +
521 pDir.
at(2, 2) * ep2 * pDir.
at(3, 2) +
522 pDir.
at(2, 3) * ep3 * pDir.
at(3, 3) );
523 plasticStrain.
at(5) += 2. * ( pDir.
at(1, 1) * ep1 * pDir.
at(3, 1) +
524 pDir.
at(1, 2) * ep2 * pDir.
at(3, 2) +
525 pDir.
at(1, 3) * ep3 * pDir.
at(3, 3) );
526 plasticStrain.
at(6) += 2. * ( pDir.
at(1, 1) * ep1 * pDir.
at(2, 1) +
527 pDir.
at(1, 2) * ep2 * pDir.
at(2, 2) +
528 pDir.
at(1, 3) * ep3 * pDir.
at(2, 3) );
547 plasticStrain.
at(1) += ( pDir.
at(1, 1) * ep1 * pDir.
at(1, 1) +
548 pDir.
at(1, 2) * ep2 * pDir.
at(1, 2) );
549 plasticStrain.
at(2) += ( pDir.
at(2, 1) * ep1 * pDir.
at(2, 1) +
550 pDir.
at(2, 2) * ep2 * pDir.
at(2, 2) );
551 plasticStrain.
at(6) += 2. * ( pDir.
at(1, 1) * ep1 * pDir.
at(2, 1) +
552 pDir.
at(1, 2) * ep2 * pDir.
at(2, 2) );
557 plasticStrain.
at(1) += ( pDir.
at(1, 1) * ep1 * pDir.
at(1, 1) +
558 pDir.
at(1, 2) * ep2 * pDir.
at(1, 2) +
559 pDir.
at(1, 3) * ep3 * pDir.
at(1, 3) );
560 plasticStrain.
at(2) += ( pDir.
at(2, 1) * ep1 * pDir.
at(2, 1) +
561 pDir.
at(2, 2) * ep2 * pDir.
at(2, 2) +
562 pDir.
at(2, 3) * ep3 * pDir.
at(2, 3) );
563 plasticStrain.
at(3) += ( pDir.
at(3, 1) * ep1 * pDir.
at(3, 1) +
564 pDir.
at(3, 2) * ep2 * pDir.
at(3, 2) +
565 pDir.
at(3, 3) * ep3 * pDir.
at(3, 3) );
566 plasticStrain.
at(4) += 2. * ( pDir.
at(2, 1) * ep1 * pDir.
at(3, 1) +
567 pDir.
at(2, 2) * ep2 * pDir.
at(3, 2) +
568 pDir.
at(2, 3) * ep3 * pDir.
at(3, 3) );
569 plasticStrain.
at(5) += 2. * ( pDir.
at(1, 1) * ep1 * pDir.
at(3, 1) +
570 pDir.
at(1, 2) * ep2 * pDir.
at(3, 2) +
571 pDir.
at(1, 3) * ep3 * pDir.
at(3, 3) );
572 plasticStrain.
at(6) += 2. * ( pDir.
at(1, 1) * ep1 * pDir.
at(2, 1) +
573 pDir.
at(1, 2) * ep2 * pDir.
at(2, 2) +
574 pDir.
at(1, 3) * ep3 * pDir.
at(2, 3) );
587 currentStress.
at(1) = ( pDir.
at(1, 1) * pStress.
at(1) * pDir.
at(1, 1) +
588 pDir.
at(1, 2) * pStress.
at(2) * pDir.
at(1, 2) );
589 currentStress.
at(2) = ( pDir.
at(2, 1) * pStress.
at(1) * pDir.
at(2, 1) +
590 pDir.
at(2, 2) * pStress.
at(2) * pDir.
at(2, 2) );
591 currentStress.
at(3) = 0.;
592 currentStress.
at(4) = currentStrain.
at(4) * G;
593 currentStress.
at(5) = currentStrain.
at(5) * G;
594 currentStress.
at(6) = ( pDir.
at(1, 1) * pStress.
at(1) * pDir.
at(2, 1) +
595 pDir.
at(1, 2) * pStress.
at(2) * pDir.
at(2, 2) );
597 currentStress.
at(1) = ( pDir.
at(1, 1) * pStress.
at(1) * pDir.
at(1, 1) +
598 pDir.
at(1, 2) * pStress.
at(2) * pDir.
at(1, 2) +
599 pDir.
at(1, 3) * pStress.
at(3) * pDir.
at(1, 3) );
600 currentStress.
at(2) = ( pDir.
at(2, 1) * pStress.
at(1) * pDir.
at(2, 1) +
601 pDir.
at(2, 2) * pStress.
at(2) * pDir.
at(2, 2) +
602 pDir.
at(2, 3) * pStress.
at(3) * pDir.
at(2, 3) );
603 currentStress.
at(3) = us;
604 currentStress.
at(4) = ( pDir.
at(2, 1) * pStress.
at(1) * pDir.
at(3, 1) +
605 pDir.
at(2, 2) * pStress.
at(2) * pDir.
at(3, 2) +
606 pDir.
at(2, 3) * pStress.
at(3) * pDir.
at(3, 3) );
607 currentStress.
at(5) = ( pDir.
at(1, 1) * pStress.
at(1) * pDir.
at(3, 1) +
608 pDir.
at(1, 2) * pStress.
at(2) * pDir.
at(3, 2) +
609 pDir.
at(1, 3) * pStress.
at(3) * pDir.
at(3, 3) );
610 currentStress.
at(6) = ( pDir.
at(1, 1) * pStress.
at(1) * pDir.
at(2, 1) +
611 pDir.
at(1, 2) * pStress.
at(2) * pDir.
at(2, 2) +
612 pDir.
at(1, 3) * pStress.
at(3) * pDir.
at(2, 3) );
623 StructuralMaterial :: giveReducedSymVectorForm( helpR, currentStress, gp->giveMaterialMode() );
626 StructuralMaterial :: giveFullSymVectorForm( help, plasticStrain, gp->giveMaterialMode() );
628 plasticStrainIncrementVector.
subtract(plasticStrainVector);
629 plasticStrainIncrementVector.
add(help);
636 StructuralMaterial :: giveFullSymVectorForm( answer, currentStress, gp->giveMaterialMode() );
643 double SCC,
double SCT,
int *ifplas)
const
669 int i, ii = 0, j, k, jj = 0, kk = 0;
670 double yy, ey, e0, yy1, yy2, s0, sci = 0.0, scj = 0.0, sck = 0.0;
672 if ( e.giveSize() != 3 ) {
676 if ( s.giveSize() != 3 ) {
680 if ( ep.giveSize() != 3 ) {
688 e0 = this->
give(
c2_E, gp) / ( 1. + yy ) / ( 1. - yy - yy );
692 if ( this->
give(
c2_E, gp) < 1.e-6 ) {
693 for ( i = 1; i <= 3; i++ ) {
701 if ( this->
give(
c2_n, gp) >= 0.01 ) {
702 s.at(1) = e0 * ( yy1 * e.at(1) + yy * ( e.at(2) + e.at(3) ) );
703 s.at(2) = e0 * ( yy1 * e.at(2) + yy * ( e.at(1) + e.at(3) ) );
704 s.at(3) = e0 * ( yy1 * e.at(3) + yy * ( e.at(2) + e.at(1) ) );
709 for ( i = 1; i <= 3; i++ ) {
710 if ( ( s.at(i) - SCT - s0 ) > 0. ) {
716 if ( ( SCC - s.at(i) - s0 ) > 0. ) {
742 s.at(j) = ( yy * sci + ey / yy2 * ( e.at(j) + yy * e.at(k) ) ) / yy1;
743 s.at(k) = ( yy * sci + ey / yy2 * ( e.at(k) + yy * e.at(j) ) ) / yy1;
748 if ( ( s.at(j) - SCT - s0 ) > 0. ) {
755 if ( ( SCC - s.at(j) - s0 ) > 0. ) {
762 if ( ( s.at(k) - SCT - s0 ) > 0. ) {
769 if ( ( SCC - s.at(k) - s0 ) > 0. ) {
779 ep.at(i) = e.at(i) - sci / yy1 / e0 + yy / yy1 * ( e.at(j) + e.at(k) );
792 s.at(k) = yy * ( sci + scj ) + ey *e.at(k);
796 if ( ( s.at(k) - SCT ) > 0. ) {
799 if ( ( SCC - s.at(k) ) > 0. ) {
805 ep.at(i) = e.at(i) + yy *e.at(k) + yy2 / ey * ( yy * scj - yy1 * sci );
806 ep.at(j) = e.at(j) + yy *e.at(k) + yy2 / ey * ( yy * sci - yy1 * scj );
816 ep.at(i) = e.at(i) - ( sci - yy * ( scj + sck ) ) / ey;
817 ep.at(j) = e.at(j) - ( scj - yy * ( sck + sci ) ) / ey;
818 ep.at(k) = e.at(k) - ( sck - yy * ( sci + scj ) ) / ey;
824 for ( i = 1; i <= 3; i++ ) {
827 s.at(i) = e.at(i) * ey;
828 if ( s.at(i) > SCT ) {
832 ep.at(i) -= sci / ey;
834 if ( s.at(i) < SCC ) {
837 ep.at(i) -= sci / ey;
846 double SCC,
double SCT,
int *ifplas)
const
873 double yy, ey, e0, so, scj = 0.0, sck = 0.0, sci = 0.0;
876 if ( e.giveSize() != 3 ) {
880 if ( s.giveSize() != 3 ) {
884 if ( ep.giveSize() != 3 ) {
895 s.at(1) = s.at(2) = 0.;
896 ep.at(1) = ep.at(2) = 0.;
901 e0 = ey / ( 1. - yy * yy );
903 s.at(1) = e0 * ( e.at(1) + yy * e.at(2) );
904 s.at(2) = e0 * ( e.at(2) + yy * e.at(1) );
910 for ( j = 1; j <= 2; j++ ) {
911 if ( ( s.at(j) - SCT - so ) > 0. ) {
917 if ( ( SCC - s.at(j) - so ) > 0. ) {
940 s.at(k) = ey * e.at(k) + scj * yy;
944 if ( ( s.at(k) - SCT ) > 0. ) {
947 if ( ( SCC - s.at(k) ) > 0. ) {
953 ep.at(j) = e.at(j) + yy *e.at(k) - scj / e0;
963 ep.at(j) = e.at(j) - ( s.at(j) - yy * s.at(k) ) / ey;
964 ep.at(k) = e.at(k) - ( s.at(k) - yy * s.at(j) ) / ey;
970 for ( i = 1; i <= 2; i++ ) {
973 s.at(i) = e.at(i) * ey;
974 if ( s.at(i) > SCT ) {
982 ep.at(i) = e.at(i) - sci / ey;