181void PlaneStress2dXfem :: computeStiffnessMatrix(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
183 PlaneStress2d :: computeStiffnessMatrix(answer, rMode, tStep);
184 XfemStructuralElementInterface :: computeCohesiveTangent(answer, tStep);
186 const double tol = 1.0e-6;
187 const double regularizationCoeff = 1.0e-6;
189 for(
int i = 0; i < numRows; i++) {
190 if( fabs(answer(i,i)) < tol ) {
191 answer(i,i) += regularizationCoeff;
317PlaneStress2dXfem :: giveCompositeExportData(std::vector< ExportRegion > &vtkPieces,
IntArray &primaryVarsToExport,
IntArray &internalVarsToExport,
IntArray cellVarsToExport,
TimeStep *tStep)
321 const int numCells =
mSubTri.size();
326 vtkPieces[0].setNumberOfCells(1);
328 int numTotalNodes = 4;
329 vtkPieces[0].setNumberOfNodes(numTotalNodes);
332 std :: vector< FloatArray >nodeCoords;
333 for(
int i = 1; i <= 4; i++) {
335 nodeCoords.push_back(x);
337 vtkPieces[0].setNodeCoords(i, x);
342 vtkPieces[0].setConnectivity(1, nodes1);
346 vtkPieces[0].setOffset(1, offset);
349 vtkPieces[0].setCellType(1, 9);
355 vtkPieces[0].setNumberOfPrimaryVarsToExport(primaryVarsToExport, numTotalNodes);
357 for (
int fieldNum = 1; fieldNum <= primaryVarsToExport.
giveSize(); fieldNum++ ) {
360 for (
int nodeInd = 1; nodeInd <= numTotalNodes; nodeInd++ ) {
362 if ( type == DisplacementVector ) {
385 u = {uTemp[0], uTemp[1], 0.0};
388 vtkPieces[0].setPrimaryVarInNode(type, nodeInd, u);
390 printf(
"fieldNum: %d\n", fieldNum);
403 vtkPieces[0].setNumberOfInternalVarsToExport(internalVarsToExport, numTotalNodes);
407 vtkPieces[0].setNumberOfCellVarsToExport(cellVarsToExport, 1);
408 for (
int i = 1; i <= cellVarsToExport.
giveSize(); i++ ) {
412 VTKXMLExportModule :: computeIPAverage(average, iRule.get(),
this, type, tStep);
420 averageVoigt.
at(1) = average.
at(1);
421 averageVoigt.
at(5) = average.
at(2);
422 averageVoigt.
at(9) = average.
at(3);
423 averageVoigt.
at(6) = averageVoigt.
at(8) = average.
at(4);
424 averageVoigt.
at(3) = averageVoigt.
at(7) = average.
at(5);
425 averageVoigt.
at(2) = averageVoigt.
at(4) = average.
at(6);
430 averageVoigt.
at(1) = average.
at(1);
434 vtkPieces[0].setCellVar( type, 1, averageVoigt );
439 if (
domain->hasXfemManager() ) {
451 for (
int enrItIndex = 1; enrItIndex <= nEnrIt; enrItIndex++ ) {
453 for (
int nodeInd = 1; nodeInd <= numTotalNodes; nodeInd++ ) {
464 if ( xfemstype == XFEMST_LevelSetPhi ) {
465 double levelSet = 0.0, levelSetInNode = 0.0;
467 for(
int elNodeInd = 1; elNodeInd <= nDofMan; elNodeInd++) {
471 levelSet +=
N.at(elNodeInd)*levelSetInNode;
476 vtkPieces[0].setInternalXFEMVarInNode(field, enrItIndex, nodeInd, valueArray);
478 }
else if ( xfemstype == XFEMST_LevelSetGamma ) {
479 double levelSet = 0.0, levelSetInNode = 0.0;
481 for(
int elNodeInd = 1; elNodeInd <= nDofMan; elNodeInd++) {
485 levelSet +=
N.at(elNodeInd)*levelSetInNode;
490 vtkPieces[0].setInternalXFEMVarInNode(field, enrItIndex, nodeInd, valueArray);
492 }
else if ( xfemstype == XFEMST_NodeEnrMarker ) {
493 double nodeEnrMarker = 0.0, nodeEnrMarkerInNode = 0.0;
495 for(
int elNodeInd = 1; elNodeInd <= nDofMan; elNodeInd++) {
499 nodeEnrMarker +=
N.at(elNodeInd)*nodeEnrMarkerInNode;
504 vtkPieces[0].setInternalXFEMVarInNode(field, enrItIndex, nodeInd, valueArray);
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]