35 #include "Shell7BasePhFi.h" 41 #include "equationid.h" 75 Shell7BasePhFi :: postInitialize()
85 Shell7BasePhFi :: giveDofManDofIDMask(
int inode, EquationID ut,
IntArray &answer)
const 89 this->giveDofManDofIDMask_u(answer);
90 this->giveDofManDofIDMask_d(answer_d);
96 Shell7BasePhFi :: giveDofManDofIDMask_u(
IntArray &answer)
const 98 answer.setValues(7, D_u, D_v, D_w, W_u, W_v, W_w, Gamma);
102 Shell7BasePhFi :: giveDofManDofIDMask_d(
IntArray &answer)
const 106 int sID = this->domain->giveNextFreeDofID(0);
107 for (
int i = 0; i < numberOfLayers; i++) {
119 this->computeDamageUnknowns(dVec, valueMode, stepN);
122 IntArray indx = computeDamageIndexArray(layer);
144 this->computeDamageUnknowns(dVec, valueMode, stepN);
146 this->computeDamageUnknowns(ddVec, VM_Incremental, stepN);
151 IntArray indx = computeDamageIndexArray(layer);
172 this->computeDamageUnknowns(dVec, valueMode, stepN);
174 if (valueMode == VM_Total)
177 }
else if (valueMode == VM_Incremental)
184 IntArray indx = computeDamageIndexArray(layer);
207 this->computeDamageUnknowns(dVec, valueMode, stepN);
211 IntArray indx = computeDamageIndexArray(layer);
218 if ( d_temp < 0.0 ) {
220 }
else if ( d_temp > 1.0 ) {
229 Shell7BasePhFi :: computeDamageIndexArray(
int layer)
231 int numberOfNodes = this->giveNumberOfDofManagers();
235 for (
int i = 1; i <= numberOfNodes; i++)
237 indx.
at(i) = layer + (i-1)*this->layeredCS->giveNumberOfLayers();
247 double d = this->computeOldDamageInLayerAt(layer, gp, valueMode, stepN);
251 return (1.0 - d) * (1.0 - d) + r0;
259 double d = this->computeDamageInLayerAt_dist(layer, indx, gp, valueMode, stepN);
262 return (1.0 - d) * (1.0 - d) + r0;
270 double d = this->computeDamageInLayerAt(layer, gp, valueMode, stepN);
271 return -2.0 * (1.0 - d);
279 double d = this->computeDamageInLayerAt_dist(layer, indx, gp, valueMode, stepN);
280 return -2.0 * (1.0 - d);
290 double d = this->computeDamageInLayerAt(layer, gp, valueMode, stepN);
301 Shell7BasePhFi :: giveNumberOfDofs()
303 return this->giveNumberOfuDofs() + this->giveNumberOfdDofs();
307 Shell7BasePhFi :: giveNumberOfuDofs()
309 return 7 * this->giveNumberOfDofManagers();
313 Shell7BasePhFi :: giveNumberOfdDofs()
315 return this->giveNumberOfDofManagers() * this->numberOfLayers;
331 int ndofs = Shell7BasePhFi :: giveNumberOfDofs();
332 int ndofs_u = Shell7BasePhFi :: giveNumberOfuDofs();
333 int ndofs_d = ndofs - ndofs_u;
335 answer.
resize( ndofs_u, ndofs_d);
338 int numberOfLayers = this->layeredCS->giveNumberOfLayers();
340 FloatArray fu(ndofs_u), fd(ndofs_d), ftemp_u, sectionalForces, sectionalForces_dv;
341 FloatArray genEps, genEpsD, solVec, lCoords, Nd;
342 FloatMatrix B, Bd, K_ud(ndofs_u, this->numberOfDofMans), K_temp;
343 this->giveUpdatedSolutionVector(solVec, tStep);
346 for (
int i = 1; i <= ndofs_u; i++ ) {
347 ordering_temp.
at(i) = i;
350 for (
int layer = 1; layer <= numberOfLayers; layer++ ) {
354 Material *mat = domain->giveMaterial( this->layeredCS->giveLayerMaterial(layer) );
355 IntArray indx_d = computeDamageIndexArray(layer);
358 this->computeDamageUnknowns(dVecTotal, VM_Total, tStep);
363 lCoords = *gp->giveCoordinates();
364 this->computeBmatrixAt(lCoords, B);
365 this->computeNdvectorAt(lCoords, Nd);
367 this->computeGeneralizedStrainVectorNew(genEpsD, solVec, B);
368 this->computeGeneralizedStrainVectorNew(genEps, solVec, B);
370 double zeta = giveGlobalZcoord( *gp->giveCoordinates() );
371 this->computeSectionalForcesAt(sectionalForces, gp, mat, tStep, genEps, genEpsD, zeta);
375 double dV = this->computeVolumeAroundLayer(gp, layer);
376 double Gprim = computeGprimInLayer(layer, gp, VM_Total, tStep);
378 fu.add(dV*Gprim, ftemp_u);
384 answer.
assemble(K_ud, ordering_temp, indx_d);
394 answer.
resize( this->numberOfDofMans*this->layeredCS->giveNumberOfLayers(), 42 );
405 int ndofs = Shell7BasePhFi :: giveNumberOfDofs();
406 int ndofs_u = Shell7BasePhFi :: giveNumberOfuDofs();
407 int ndofs_d = ndofs - ndofs_u;
409 answer.
resize( ndofs_d, ndofs_d );
412 int numberOfLayers = this->layeredCS->giveNumberOfLayers();
415 FloatMatrix Bd, Nd, temp(this->giveNumberOfDofManagers(),this->giveNumberOfDofManagers());
418 for (
int i = 1; i <= ndofs_u; i++ ) {
419 ordering_temp.
at(i) = i;
422 double l = this->giveInternalLength();
423 double g_c = this->giveCriticalEnergy();
424 double kp = this->givePenaltyParameter();
427 for (
int layer = 1; layer <= numberOfLayers; layer++ ) {
431 IntArray indx_d = computeDamageIndexArray(layer);
435 lCoords = *gp->giveCoordinates();
436 this->computeBdmatrixAt(lCoords, Bd);
437 this->computeNdMatrixAt(lCoords, Nd);
439 double Gbis = computeGbisInLayer(layer, gp, VM_Total, tStep);
440 double Psibar = this->computeFreeEnergy( gp, tStep );
441 double dV = this->computeVolumeAroundLayer(gp, layer);
445 double Delta_d = computeDamageInLayerAt(layer, gp, VM_Incremental, tStep);
446 double factorN = -kp * neg_MaCauleyPrime(Delta_d/Delta_t)/Delta_t + g_c / l + Gbis * Psibar;
451 double factorB = g_c * l;
455 answer.
assemble(temp, indx_d, indx_d);
468 loc_u = this->giveOrdering_Disp();
469 loc_d = this->giveOrdering_Damage();
471 int nDofs = this->computeNumberOfDofs();
472 answer.
resize( nDofs, nDofs );
475 FloatMatrix answer1, answer2, answer3, answer4, answer5, answer6;
476 this->computeStiffnessMatrix_uu(answer1, rMode, tStep);
478 this->computeStiffnessMatrix_dd(answer4, rMode, tStep);
493 answer.
assemble( answer1, loc_u, loc_u );
496 answer.
assemble( answer4, loc_d, loc_d );
506 int ndofs = Shell7BasePhFi :: giveNumberOfDofs();
507 int ndofs_u = Shell7BasePhFi :: giveNumberOfuDofs();
508 int ndofs_d = ndofs - ndofs_u;
511 answer.
resize( ndofs_u, ndofs_d);
514 FloatArray force, force_dist, forceTemp, solVec(42), force_small;
519 computeSectionalForces(force, tStep, solVec, upD);
522 int numberOfLayers = this->layeredCS->giveNumberOfLayers();
523 int numdofMans = this->giveNumberOfDofManagers();
525 for (
int indx = 1; indx <= numberOfLayers*numdofMans; indx++ ) {
526 computeSectionalForces_dist(force_dist, indx, tStep, solVec, upD);
535 const IntArray &indxDisp = this->giveOrderingPhFi(Displacement);
539 force_small.
times(1/disturB);
548 int ndofs = Shell7BasePhFi :: giveNumberOfDofs();
549 int ndofs_u = Shell7BasePhFi :: giveNumberOfuDofs();
550 int ndofs_d = ndofs - ndofs_u;
553 answer.
resize( ndofs_d, ndofs_d);
556 FloatArray force, force_dist, forceTemp, solVec(42), force_small;
561 computeSectionalForces(force, tStep, solVec, upD);
564 int numberOfLayers = this->layeredCS->giveNumberOfLayers();
565 int numdofMans = this->giveNumberOfDofManagers();
567 for (
int indx = 1; indx <= numberOfLayers*numdofMans; indx++ ) {
568 computeSectionalForces_dist(force_dist, indx, tStep, solVec, upD);
574 const IntArray &indxDam = this->giveOrderingPhFi(Damage);
578 force_small.
times(1/disturB);
589 FloatMatrix A [ 3 ] [ 3 ], lambdaI [ 3 ], lambdaJ [ 3 ];
593 int ndofs = Shell7BasePhFi :: giveNumberOfuDofs();
594 answer.
resize(ndofs, ndofs);
597 int numberOfLayers = this->layeredCS->giveNumberOfLayers();
601 for (
int layer = 1; layer <= numberOfLayers; layer++ ) {
607 lCoords = *gp->giveCoordinates();
609 this->computeBmatrixAt(lCoords, B, 0, 0);
610 this->computeGeneralizedStrainVectorNew(genEpsI, solVecI, B);
611 this->computeGeneralizedStrainVectorNew(genEpsJ, solVecJ, B);
612 this->computeGeneralizedStrainVectorNew(genEps , solVec , B);
616 double zeta = giveGlobalZcoord( *gp->giveCoordinates() );
617 this->computeLambdaGMatrices(lambdaI, genEpsI, zeta);
618 this->computeLambdaGMatrices(lambdaJ, genEpsJ, zeta);
624 for (
int j = 0; j < 3; j++ ) {
625 for (
int k = 0; k < 3; k++ ) {
626 this->computeTripleProduct(temp, lambdaI [ j ], A [ j ][ k ], lambdaJ [ k ]);
631 this->computeTripleProduct(K, B, L, B);
632 double dV = this->computeVolumeAroundLayer(gp, layer);
633 double g = this->computeGInLayer(layer, gp, VM_Total, tStep);
634 answer.
add( g*dV, K );
651 case IST_CauchyStressTensor:
652 this->computeCauchyStressVector(answer, gp, tStep);
671 this->giveDofManDofIDMask_d(dofIdArray);
673 this->computeVectorOfDofIDs(dofIdArray, VM_Total, tStep, temp);
674 answer.
assemble( temp, this->giveOrdering(AllInv) );
685 int ndofs = Shell7BasePhFi :: giveNumberOfDofs();
686 int ndofs_u = Shell7BasePhFi :: giveNumberOfuDofs();
687 int ndofs_d = ndofs - ndofs_u;
689 int numberOfLayers = this->layeredCS->giveNumberOfLayers();
690 double sectionalForces_ds = 0;
691 FloatArray fu(ndofs_u), fd(ndofs_d), ftemp_u, ftemp_d(this->giveNumberOfDofManagers()), sectionalForces, sectionalForces_dv;
692 FloatArray genEps, genEpsD, totalSolVec, lCoords, Nd, f_debug(this->giveNumberOfDofManagers()), F_debug(ndofs_d);
695 totalSolVec = solVec;
696 sectionalForces.
resize(2);
697 FloatArray dVecTotal, dVecLayer, Ddam_Dxi, gradd;
698 this->computeDamageUnknowns(dVecTotal, VM_Total, tStep);
704 this->computeStiffnessMatrix_dd(K_dd, TangentStiffness, tStep);
707 for (
int layer = 1; layer <= numberOfLayers; layer++ ) {
711 Material *mat = domain->giveMaterial( this->layeredCS->giveLayerMaterial(layer) );
712 IntArray indx_d = computeDamageIndexArray(layer);
717 lCoords = *gp->giveCoordinates();
718 this->computeBmatrixAt(lCoords, B);
719 this->computeBdmatrixAt(lCoords, Bd);
720 this->computeNdvectorAt(lCoords, Nd);
723 this->computeGeneralizedStrainVectorNew(genEps, totalSolVec, B);
724 double zeta = giveGlobalZcoord( *gp->giveCoordinates() );
727 this->computeSectionalForcesAt(sectionalForces, gp, mat, tStep, genEps, genEps, zeta);
729 double dV = this->computeVolumeAroundLayer(gp, layer);
730 double g = this->computeGInLayer(layer, gp, VM_Total, tStep);
731 fu.add(dV*g, ftemp_u);
734 this->computeSectionalForcesAt_d(sectionalForces_ds, sectionalForces_dv, gp, mat, tStep, zeta, layer, gradd);
737 double Psibar = this->computeFreeEnergy( gp, tStep );
738 f_debug.add( -2.0*Psibar*dV, Nd );
740 ftemp_d.add( sectionalForces_ds*dV, Nd );
741 ftemp_d.plusProduct(Bd, sectionalForces_dv, dV);
746 fd.assemble(ftemp_d, indx_d);
752 const IntArray &ordering_disp = this->giveOrderingPhFi(Displacement);
753 const IntArray &ordering_damage = this->giveOrderingPhFi(Damage);
755 answer.
assemble(fd, ordering_damage);
761 Shell7BasePhFi :: computeSectionalForces_dist(
FloatArray &answer,
int indx,
TimeStep *tStep,
FloatArray &solVec,
int useUpdatedGpRecord)
764 int ndofs = Shell7BasePhFi :: giveNumberOfDofs();
765 int ndofs_u = Shell7BasePhFi :: giveNumberOfuDofs();
766 int ndofs_d = ndofs - ndofs_u;
768 int numberOfLayers = this->layeredCS->giveNumberOfLayers();
769 double sectionalForces_ds = 0;
770 FloatArray fu(ndofs_u), fd(ndofs_d), ftemp_u, ftemp_d(this->giveNumberOfDofManagers()), sectionalForces, sectionalForces_dv;
771 FloatArray genEps, genEpsD, totalSolVec, lCoords, Nd;
773 this->giveUpdatedSolutionVector(totalSolVec, tStep);
776 for (
int layer = 1; layer <= numberOfLayers; layer++ ) {
779 Material *mat = domain->giveMaterial( this->layeredCS->giveLayerMaterial(layer) );
780 IntArray indx_d = computeDamageIndexArray(layer);
781 FloatArray dVecTotal, dVecLayer, Ddam_Dxi, gradd;
783 this->computeDamageUnknowns(dVecTotal, VM_Total, tStep);
790 lCoords = *gp->giveCoordinates();
791 this->computeBmatrixAt(lCoords, B);
792 this->computeBdmatrixAt(lCoords, Bd);
793 this->computeNdvectorAt(lCoords, Nd);
797 this->computeGeneralizedStrainVectorNew(genEpsD, solVec, B);
798 this->computeGeneralizedStrainVectorNew(genEps, totalSolVec, B);
800 double zeta = giveGlobalZcoord( *gp->giveCoordinates() );
804 this->computeSectionalForcesAt(sectionalForces, gp, mat, tStep, genEps, genEps, zeta);
806 double dV = this->computeVolumeAroundLayer(gp, layer);
807 double g = this->computeGInLayer_dist(layer, indx, gp, VM_Total, tStep);
808 fu.add(dV*g, ftemp_u);
812 this->computeSectionalForcesAt_d_dist(sectionalForces_ds, sectionalForces_dv, indx, gp, mat, tStep, zeta, layer, gradd);
814 ftemp_d.add( sectionalForces_ds*dV, Nd );
816 ftemp_d.plusProduct(Bd, sectionalForces_dv, dV);
820 fd.assemble(ftemp_d, indx_d);
826 const IntArray &ordering_disp = this->giveOrderingPhFi(Displacement);
827 const IntArray &ordering_damage = this->giveOrderingPhFi(Damage);
829 answer.
assemble(fd, ordering_damage);
834 Shell7BasePhFi :: neg_MaCauley(
double par)
836 return 0.5 * ( abs(par) - par );
840 Shell7BasePhFi :: neg_MaCauleyPrime(
double par)
842 return 0.5 * ( abs(par)/(par + 1.0e-12) - 1.0 );
846 Shell7BasePhFi :: computeSectionalForcesAt_d(
double §ionalForcesScal,
FloatArray §ionalForcesVec,
IntegrationPoint *gp,
850 sectionalForcesVec.
zero();
852 double kp = this->givePenaltyParameter();
854 double d = computeDamageInLayerAt(layer, gp, VM_Total, tStep);
855 double Delta_d = computeDamageInLayerAt(layer, gp, VM_Incremental, tStep);
856 double l = this->giveInternalLength();
857 double g_c = this->giveCriticalEnergy();
858 double Gprim = computeGprimInLayer(layer, gp, VM_Total, tStep);
859 double Psibar = this->computeFreeEnergy( gp, tStep );
862 OOFEM_ERROR1(
"Shell7BasePhFi :: computeSectionalForcesAt_d - negative strain energy predicted")
865 sectionalForcesScal = -kp * neg_MaCauley(Delta_d/Delta_t) + g_c / l * d + Gprim * Psibar;
868 sectionalForcesVec.
beScaled(g_c*l,gradd);
874 Shell7BasePhFi :: computeSectionalForcesAt_d_dist(
double §ionalForcesScal,
FloatArray §ionalForcesVec,
int indx,
IntegrationPoint *gp,
880 double kp = this->givePenaltyParameter();
882 double d = computeDamageInLayerAt_dist(layer, indx, gp, VM_Total, tStep);
883 double Delta_d = computeDamageInLayerAt_dist(layer, indx, gp, VM_Incremental, tStep);
884 double l = this->giveInternalLength();
885 double g_c = this->giveCriticalEnergy();
886 double Gprim = computeGprimInLayer_dist(layer, indx, gp, VM_Total, tStep);
887 double Psibar = this->computeFreeEnergy( gp, tStep );
889 sectionalForcesScal = -kp * neg_MaCauley(Delta_d/Delta_t) + g_c / l * d + Gprim * Psibar;
890 sectionalForcesVec.
zero();
892 sectionalForcesVec.
beScaled(g_c*l,gradd);
946 this->computeNdvectorAt(iLocCoords, Nvec);
948 for (
int i = 1; i<= Nvec.
giveSize(); i++ ){
949 answer.
at(1,i) = Nvec.
at(i);
965 answer.
resize( Shell7BasePhFi ::giveNumberOfDofs());
968 for (
int i = 1; i <= numberOfDofMans; i++ ) {
970 for (
int j = 1; j <= dofIdArray.
giveSize(); j++ ) {
993 int numCells = this->layeredCS->giveNumberOfLayers();
994 const int numCellNodes = 15;
995 int numTotalNodes = numCellNodes*numCells;
1000 std::vector <FloatArray> nodeCoords;
1007 for (
int layer = 1; layer <= numCells; layer++ ) {
1011 this->giveFictiousNodeCoordsForExport(nodeCoords, layer);
1019 for (
int i = 1; i <= numCellNodes; i++ ) {
1020 nodes.
at(i) = val++;
1025 offset += numCellNodes;
1036 std::vector<FloatArray> updatedNodeCoords;
1038 std::vector<FloatArray> values;
1039 FloatArray dVecTotal, dVecLayer, damageArray;
1040 this->computeDamageUnknowns(dVecTotal, VM_Total, tStep);
1042 for (
int fieldNum = 1; fieldNum <= primaryVarsToExport.
giveSize(); fieldNum++ ) {
1045 for (
int layer = 1; layer <= numCells; layer++ ) {
1047 if ( type == DisplacementVector ) {
1048 this->giveFictiousNodeCoordsForExport(nodeCoords, layer);
1049 this->giveFictiousUpdatedNodeCoordsForExport(updatedNodeCoords, layer, tStep);
1050 for (
int j = 1; j <= numCellNodes; j++ ) {
1051 u = updatedNodeCoords[j-1];
1052 u.subtract(nodeCoords[j-1]);
1056 }
else if ( type == ScalarDamage ) {
1059 IntArray indx_d = computeDamageIndexArray(layer);
1062 damageArray.setValues(15, dVecLayer.
at(1), dVecLayer.
at(2), dVecLayer.
at(3), dVecLayer.
at(1), dVecLayer.
at(2), dVecLayer.
at(3),
1063 dVecLayer.
at(4), dVecLayer.
at(5), dVecLayer.
at(6), dVecLayer.
at(4), dVecLayer.
at(5), dVecLayer.
at(6),
1064 dVecLayer.
at(1), dVecLayer.
at(2), dVecLayer.
at(3) );
1065 for (
int j = 1; j <= numCellNodes; j++ ) {
1066 damage.
at(1) = damageArray.
at(j);
1072 for (
int j = 1; j <= numCellNodes; j++ ) {
1083 for (
int fieldNum = 1; fieldNum <= internalVarsToExport.
giveSize(); fieldNum++ ) {
1087 for (
int layer = 1; layer <= numCells; layer++ ) {
1088 recoverValuesFromIP(values, layer, type, tStep);
1089 for (
int j = 1; j <= numCellNodes; j++ ) {
1101 for (
int i = 1; i <= cellVarsToExport.
giveSize(); i++ ) {
1104 for (
int layer = 1; layer <= numCells; layer++ ) {
1109 vtkPiece.
setCellVar(i, layer, convV6ToV9Stress(average) );
1125 Shell7BasePhFi :: recoverValuesFromIP(std::vector<FloatArray> &recoveredValues,
int layer,
InternalStateType type,
TimeStep *tStep)
1133 this->interpolationForExport.giveLocalNodeCoords(localNodeCoords);
1136 recoveredValues.resize(numNodes);
1145 for (
int i = 1; i <= numNodes; i++ ) {
1147 double distOld = 3.0;
1150 ipCoords = *ip->giveCoordinates();
1151 double dist = nodeCoords.
distance(ipCoords);
1152 if ( dist < distOld ) {
1153 closestIPArray.
at(i) = j;
1162 for (
int i = 1; i <= numNodes; i++ ) {
1164 this->giveIPValue(ipValues, ip, type, tStep);
1166 recoveredValues[i-1].resize(9);
1167 recoveredValues[i-1] = convV6ToV9Stress(ipValues);
1168 }
else if ( ipValues.
giveSize() == 0 && type == IST_AbaqusStateVector) {
1169 recoveredValues[i-1].resize(23);
1170 recoveredValues[i-1].zero();
1171 }
else if ( ipValues.
giveSize() == 0 ) {
1173 recoveredValues[i-1].zero();
1176 recoveredValues[i-1] = ipValues;
1184 Shell7BasePhFi :: recoverShearStress(
TimeStep *tStep)
1187 std::vector<FloatArray> recoveredValues;
1188 int numberOfLayers = this->layeredCS->giveNumberOfLayers();
1195 for (
int layer = 1; layer <= numberOfLayers; layer++ ) {
1197 this->recoverValuesFromIP(recoveredValues, layer, IST_StressTensor, tStep);
1199 double thickness = this->layeredCS->giveLayerThickness(layer);
1204 for (
int j = 1, pos = 0; j <= numNodes; j++, pos+=3 ) {
1205 aS.
at(pos + 1) = recoveredValues[j-1].at(1);
1206 aS.
at(pos + 2) = recoveredValues[j-1].at(2);
1207 aS.
at(pos + 3) = recoveredValues[j-1].at(6);
1209 int numInPlaneIP = 6;
1214 for (
int j = 0; j < numInPlaneIP; j++ ) {
1216 int point = i*numInPlaneIP + j;
1219 this->computeBmatrixForStressRecAt(*gp->giveCoordinates(), B, layer);
1225 Smat.
at(1,j+1) += dS.
at(1);
1226 Smat.
at(2,j+1) += dS.
at(2);
1231 Sold.
at(5) = Smat.
at(1,j+1);
1232 Sold.
at(4) = Smat.
at(2,j+1);
1254 const int numNodes = 15;
1255 std::vector<FloatArray> nodes;
1256 giveFictiousNodeCoordsForExport(nodes, layer);
1258 int VTKWedge2EL [] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
1262 for (
int i = 1; i <= numNodes; i++ ) {
1263 int pos = VTKWedge2EL[ i-1 ];
1264 coords[ i - 1 ] = &nodes[ pos - 1];
1276 int ndofs = numNodes*3;
1278 for (
int i = 1, j = 0; i <= numNodes; i++, j += 3 ) {
1279 answer.
at(1, j + 1) = dNdx.
at(i, 1);
1280 answer.
at(1, j + 3) = dNdx.
at(i, 2);
1281 answer.
at(2, j + 2) = dNdx.
at(i, 2);
1282 answer.
at(2, j + 3) = dNdx.
at(i, 1);
1292 Shell7BasePhFi :: giveFictiousNodeCoordsForExport(std::vector<FloatArray> &nodes,
int layer)
1296 this->interpolationForExport.giveLocalNodeCoords(localNodeCoords);
1303 this->vtkEvalInitialGlobalCoordinateAt(localCoords, layer, coords);
1304 nodes[i-1].resize(3);
1305 nodes[i-1] = coords;
1312 Shell7BasePhFi :: giveFictiousCZNodeCoordsForExport(std::vector<FloatArray> &nodes,
int interface)
1316 this->interpolationForCZExport.giveLocalNodeCoords(localNodeCoords);
1323 localCoords.
at(3) = 1.0;
1324 this->vtkEvalInitialGlobalCoordinateAt(localCoords, interface, coords);
1325 nodes[i-1].resize(3);
1326 nodes[i-1] = coords;
1332 Shell7BasePhFi :: giveFictiousUpdatedNodeCoordsForExport(std::vector<FloatArray> &nodes,
int layer,
TimeStep *tStep)
1337 this->interpolationForExport.giveLocalNodeCoords(localNodeCoords);
1343 this->vtkEvalUpdatedGlobalCoordinateAt(localCoords, layer, coords, tStep);
1344 nodes[i-1].resize(3);
1345 nodes[i-1] = coords;
void setInternalVarInNode(int varNum, int nodeNum, FloatArray valueArray)
void evalInitialContravarBaseVectorsAt(const FloatArray &lCoords, FloatMatrix &Gcon)
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
int giveNumberOfColumns() const
Returns number of columns of receiver.
void setCellVar(int varNum, int cellNum, FloatArray valueArray)
void subtract(const FloatArray &src)
Subtracts array src to receiver.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
Wrapper around cell with vertex coordinates stored in FloatArray**.
void setNumberOfNodes(int numNodes)
double & at(int i)
Coefficient access function.
void beSubMatrixOf(const FloatMatrix &src, int topRow, int bottomRow, int topCol, int bottomCol)
Assigns to the receiver the sub-matrix of another matrix.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
void setNumberOfInternalVarsToExport(int numVars, int numNodes)
This class implements a structural material status information.
Abstract class for phase field formulation.
virtual double giveUnknown(ValueModeType mode, TimeStep *tStep)=0
The key method of class Dof.
InternalStateValueType
Determines the type of internal variable.
Base class for dof managers.
void computeLinearizedStiffness(GaussPoint *gp, StructuralMaterial *mat, TimeStep *tStep, FloatMatrix A[3][3])
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
void setNumberOfCells(int numCells)
int giveInternalStateTypeSize(InternalStateValueType valType)
Abstract base class representing integration rule.
void beColumnOf(const FloatMatrix &mat, int col)
Reciever will be set to a given column in a matrix.
double giveTimeIncrement()
Returns solution step associated time increment.
void setNodeCoords(int nodeNum, FloatArray &coords)
double distance(const FloatArray &x) const
Computes the distance between position represented by receiver and position given as parameter...
Class representing a general abstraction for finite element interpolation class.
void beScaled(double s, const FloatArray &b)
Sets receiver to be .
void setCellType(int cellNum, int type)
void setNumberOfPrimaryVarsToExport(int numVars, int numNodes)
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
void setNumberOfCellVarsToExport(int numVars, int numCells)
DofIDItem
Type representing particular dof type.
virtual double giveWeight()
Returns integration weight of receiver.
UnknownType
Type representing particular unknown (its physical meaning).
Wrapper around element definition to provide FEICellGeometry interface.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
Abstract base class for all material models.
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
void setPrimaryVarInNode(int varNum, int nodeNum, FloatArray valueArray)
Class representing vector of real numbers.
bool hasDofID(DofIDItem id) const
Checks if receiver contains dof with given ID.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
GaussPoint * getIntegrationPoint(int n)
Access particular integration point of receiver.
static void computeIPAverage(FloatArray &answer, IntegrationRule *iRule, Element *elem, InternalStateType isType, TimeStep *tStep)
Computes a cell average of an InternalStateType varible based on the weights in the integrationpoints...
void setOffset(int cellNum, int offset)
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
void beSubArrayOf(const FloatArray &src, const IntArray &indx)
Extract sub vector form src array and stores the result into receiver.
IntegrationPointStatus * giveMaterialStatus()
Returns reference to associated material status (NULL if not defined).
void assemble(const FloatArray &fe, const IntArray &loc)
Assembles the array fe (typically, the load vector of a finite element) into the receiver, using loc as location array.
void addSubVectorCol(const FloatArray &src, int sr, int sc)
Adds given vector to receiver starting at given position.
This class represent a 7 parameter shell element.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
void add(const FloatMatrix &a)
Adds matrix to the receiver.
Dof * giveDofWithID(int dofID) const
Returns DOF with given dofID; issues error if not present.
void followedBy(const IntArray &b, int allocChunk=0)
Appends array b at the end of receiver.
int giveNumberOfIntegrationPoints() const
Returns number of integration points of receiver.
void zero()
Zeroes all coefficients of receiver.
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
void letStressVectorBe(const FloatArray &v)
Assigns stressVector to given vector v.
void times(double s)
Multiplies receiver with scalar.
void beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
Abstract base class for all "structural" constitutive models.
void zero()
Zeroes all coefficient of receiver.
void setConnectivity(int cellNum, IntArray &nodes)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
InternalStateValueType giveInternalStateValueType(InternalStateType type)
int giveSize() const
Returns the size of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
void assemble(const FloatMatrix &src, const IntArray &loc)
Assembles the contribution using localization array into receiver.
Abstract class Dof represents Degree Of Freedom in finite element mesh.
void symmetrized()
Initializes the lower half of the receiver according to the upper half.
Class representing integration point in finite element program.
Class representing solution step.
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
virtual void postInitialize()
Performs post initialization steps.
void resize(int s)
Resizes receiver towards requested size.