OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
planstrssxfem.C
Go to the documentation of this file.
1 /*
2  *
3  * ##### ##### ###### ###### ### ###
4  * ## ## ## ## ## ## ## ### ##
5  * ## ## ## ## #### #### ## # ##
6  * ## ## ## ## ## ## ## ##
7  * ## ## ## ## ## ## ## ##
8  * ##### ##### ## ###### ## ##
9  *
10  *
11  * OOFEM : Object Oriented Finite Element Code
12  *
13  * Copyright (C) 1993 - 2013 Borek Patzak
14  *
15  *
16  *
17  * Czech Technical University, Faculty of Civil Engineering,
18  * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19  *
20  * This library is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU Lesser General Public
22  * License as published by the Free Software Foundation; either
23  * version 2.1 of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28  * Lesser General Public License for more details.
29  *
30  * You should have received a copy of the GNU Lesser General Public
31  * License along with this library; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33  */
34 
35 #include "../sm/Elements/PlaneStress/planstrssxfem.h"
36 #include "../sm/Materials/structuralmaterial.h"
37 #include "../sm/CrossSections/structuralcrosssection.h"
40 #include "xfem/enrichmentitem.h"
41 #include "vtkxmlexportmodule.h"
42 #include "dynamicinputrecord.h"
43 #include "feinterpol.h"
44 #include "classfactory.h"
45 #include "mathfem.h"
46 
47 #ifdef __OOFEG
48  #include "oofeggraphiccontext.h"
49 #endif
50 
51 namespace oofem {
53 
54 void PlaneStress2dXfem :: updateYourself(TimeStep *tStep)
55 {
58 }
59 
61 {
64 }
65 
66 Interface *
68 {
69  if ( it == XfemElementInterfaceType ) {
70  return static_cast< XfemElementInterface * >(this);
71  } else if ( it == VTKXMLExportModuleElementInterfaceType ) {
72  return static_cast< VTKXMLExportModuleElementInterface * >(this);
73  } else {
75  }
76 }
77 
78 
79 void
81 {
82  if ( this->giveDomain()->hasXfemManager() ) {
83  XfemManager *xMan = this->giveDomain()->giveXfemManager();
84 
85  if ( xMan->isElementEnriched(this) ) {
87 
88  // Blending element
89 // increaseNumGP();
91  }
92  } else {
94  }
95  } else {
97  }
98 }
99 
101 {
102  switch(numberOfGaussPoints)
103  {
104  case(4):
106  break;
107  case(9):
108  numberOfGaussPoints = 16;
109  break;
110  case(16):
111  numberOfGaussPoints = 25;
112  break;
113  }
114 }
115 
117 {
118  XfemElementInterface_createEnrBmatrixAt(answer, * gp, * this);
119 }
120 
122 {
123  XfemElementInterface_createEnrBHmatrixAt(answer, * gp, * this);
124 }
125 
126 
128 {
129  XfemElementInterface_createEnrNmatrixAt(answer, iLocCoord, * this, false);
130 }
131 
132 
133 
135 {
136  int ndofs = 0;
137  for ( int i = 1; i <= this->giveNumberOfDofManagers(); i++ ) {
138  ndofs += this->giveDofManager(i)->giveNumberOfDofs();
139  }
140 
141  return ndofs;
142 }
143 
144 
145 void
147 {
148  // Continuous part
150 
151  // Discontinuous part
152  if( this->giveDomain()->hasXfemManager() ) {
153  DofManager *dMan = giveDofManager(inode);
155 
156  const std::vector<int> &nodeEiIndices = xMan->giveNodeEnrichmentItemIndices( dMan->giveGlobalNumber() );
157  for ( size_t i = 0; i < nodeEiIndices.size(); i++ ) {
158  EnrichmentItem *ei = xMan->giveEnrichmentItem(nodeEiIndices[i]);
159  if ( ei->isDofManEnriched(* dMan) ) {
160  IntArray eiDofIdArray;
161  ei->computeEnrichedDofManDofIdArray(eiDofIdArray, *dMan);
162  answer.followedBy(eiDofIdArray);
163  }
164  }
165  }
166 }
167 
168 
169 
171 {
173 }
174 
175 void
177 {
179 }
180 
182 {
183  PlaneStress2d :: computeStiffnessMatrix(answer, rMode, tStep);
185 
186  const double tol = 1.0e-6;
187  const double regularizationCoeff = 1.0e-6;
188  int numRows = answer.giveNumberOfRows();
189  for(int i = 0; i < numRows; i++) {
190  if( fabs(answer(i,i)) < tol ) {
191  answer(i,i) += regularizationCoeff;
192  //printf("Found zero on diagonal.\n");
193  }
194  }
195 }
196 
198 {
200 }
201 
202 void
203 PlaneStress2dXfem :: giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
204 {
205  PlaneStress2d :: giveInternalForcesVector(answer, tStep, useUpdatedGpRecord);
207 }
208 
211 {
212  if ( this->giveDomain()->hasXfemManager() ) {
213  XfemManager *xMan = this->giveDomain()->giveXfemManager();
214  if ( xMan->isElementEnriched(this) ) {
215  return EGT_Composite;
216  //return EGT_quad_1;
217  } else {
218  return EGT_Composite;
219  //return EGT_quad_1;
220  }
221  } else {
222  return EGT_quad_1;
223  }
224 }
225 
226 
227 
228 #ifdef __OOFEG
230 {
231  if ( !gc.testElementGraphicActivity(this) ) {
232  return;
233  }
234 #if 0
235  XfemManager *xf = this->giveDomain()->giveXfemManager();
236  if ( !xf->isElementEnriched(this) ) {
238  } else {
239  if ( integrationRulesArray.size() > 1 ) {
240  // TODO: Implement visualization
241  for ( auto &iRule: integrationRulesArray ) {
242  PatchIntegrationRule *piRule = dynamic_cast< PatchIntegrationRule * >( ir );
243  if ( piRule ) {
244  piRule->givePatch()->draw(context);
245  }
246  }
247  } else {
249  }
250  }
251 #endif
252 }
253 
255 {
256  if ( !gc.testElementGraphicActivity(this) ) {
257  return;
258  }
259 #if 0
260  XfemManager *xf = this->giveDomain()->giveXfemManager();
261  if ( !xf->isElementEnriched(this) ) {
263  } else {
264  if ( gc.giveIntVarMode() == ISM_local ) {
265  int indx;
266  double val;
267  FloatArray s(3), v;
268 
269  indx = gc.giveIntVarIndx();
270 
271  for ( auto &ir: integrationRulesArray ) {
272  PatchIntegrationRule *iRule = dynamic_cast< PatchIntegrationRule * >(ir);
273 
274  #if 0
275  val = iRule->giveMaterial();
276  #else
277  val = 0.0;
278  for ( GaussPoint *gp: *iRule ) {
279  giveIPValue(v, gp, gc.giveIntVarType(), tStep);
280  val += v.at(indx);
281  }
282 
283  val /= iRule->giveNumberOfIntegrationPoints();
284  #endif
285  s.at(1) = s.at(2) = s.at(3) = val;
286  // TODO: Implement visualization
287  // iRule->givePatch()->drawWD(context, s);
288  }
289  } else {
291  }
292  }
293 #endif
294 }
295 #endif
296 
297 
300 {
301  IRResultType result;
302 
303  result = PlaneStress2d :: initializeFrom(ir);
304  if ( result != IRRT_OK ) {
305  return result;
306  }
307 
309  return result;
310 }
311 
313 {
315 }
316 
318 {
321 }
322 
323 void
324 PlaneStress2dXfem :: giveCompositeExportData(std::vector< VTKPiece > &vtkPieces, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep)
325 {
326  vtkPieces.resize(1);
327 
328  const int numCells = mSubTri.size();
329 
330  if(numCells == 0) {
331  // Enriched but uncut element
332  // Visualize as a quad
333  vtkPieces[0].setNumberOfCells(1);
334 
335  int numTotalNodes = 4;
336  vtkPieces[0].setNumberOfNodes(numTotalNodes);
337 
338  // Node coordinates
339  std :: vector< FloatArray >nodeCoords;
340  for(int i = 1; i <= 4; i++) {
342  nodeCoords.push_back(x);
343 
344  vtkPieces[0].setNodeCoords(i, x);
345  }
346 
347  // Connectivity
348  IntArray nodes1 = {1, 2, 3, 4};
349  vtkPieces[0].setConnectivity(1, nodes1);
350 
351  // Offset
352  int offset = 4;
353  vtkPieces[0].setOffset(1, offset);
354 
355  // Cell types
356  vtkPieces[0].setCellType(1, 9); // Linear quad
357 
358 
359 
360 
361  // Export nodal variables from primary fields
362  vtkPieces[0].setNumberOfPrimaryVarsToExport(primaryVarsToExport.giveSize(), numTotalNodes);
363 
364  for ( int fieldNum = 1; fieldNum <= primaryVarsToExport.giveSize(); fieldNum++ ) {
365  UnknownType type = ( UnknownType ) primaryVarsToExport.at(fieldNum);
366 
367  for ( int nodeInd = 1; nodeInd <= numTotalNodes; nodeInd++ ) {
368 
369  if ( type == DisplacementVector ) { // compute displacement
370 
371  FloatArray u = {0.0, 0.0, 0.0};
372 
373  // Fetch global coordinates (in undeformed configuration)
374  const FloatArray &x = nodeCoords[nodeInd-1];
375 
376  // Compute local coordinates
377  FloatArray locCoord;
378  computeLocalCoordinates(locCoord, x);
379 
380  // Compute displacement in point
381  FloatMatrix NMatrix;
382  computeNmatrixAt(locCoord, NMatrix);
383  FloatArray solVec;
384  computeVectorOf(VM_Total, tStep, solVec);
385  FloatArray uTemp;
386  uTemp.beProductOf(NMatrix, solVec);
387 
388  if(uTemp.giveSize() == 3) {
389  u = uTemp;
390  }
391  else {
392  u = {uTemp[0], uTemp[1], 0.0};
393  }
394 
395  vtkPieces[0].setPrimaryVarInNode(fieldNum, nodeInd, u);
396  } else {
397  printf("fieldNum: %d\n", fieldNum);
398  // TODO: Implement
399 // ZZNodalRecoveryMI_recoverValues(values, layer, ( InternalStateType ) 1, tStep); // does not work well - fix
400 // for ( int j = 1; j <= numCellNodes; j++ ) {
401 // vtkPiece.setPrimaryVarInNode(fieldNum, nodeNum, values [ j - 1 ]);
402 // nodeNum += 1;
403 // }
404  }
405  }
406  }
407 
408 
409  // Export nodal variables from internal fields
410  vtkPieces[0].setNumberOfInternalVarsToExport(0, numTotalNodes);
411 
412 
413  // Export cell variables
414  vtkPieces[0].setNumberOfCellVarsToExport(cellVarsToExport.giveSize(), 1);
415  for ( int i = 1; i <= cellVarsToExport.giveSize(); i++ ) {
416  InternalStateType type = ( InternalStateType ) cellVarsToExport.at(i);
417  FloatArray average;
418  std :: unique_ptr< IntegrationRule >&iRule = integrationRulesArray [ 0 ];
419  VTKXMLExportModule :: computeIPAverage(average, iRule.get(), this, type, tStep);
420 
421  FloatArray averageVoigt;
422 
423  if( average.giveSize() == 6 ) {
424 
425  averageVoigt.resize(9);
426 
427  averageVoigt.at(1) = average.at(1);
428  averageVoigt.at(5) = average.at(2);
429  averageVoigt.at(9) = average.at(3);
430  averageVoigt.at(6) = averageVoigt.at(8) = average.at(4);
431  averageVoigt.at(3) = averageVoigt.at(7) = average.at(5);
432  averageVoigt.at(2) = averageVoigt.at(4) = average.at(6);
433  }
434  else {
435  if(average.giveSize() == 1) {
436  averageVoigt.resize(1);
437  averageVoigt.at(1) = average.at(1);
438  }
439  }
440 
441  vtkPieces[0].setCellVar( i, 1, averageVoigt );
442  }
443 
444 
445  // Export of XFEM related quantities
446  if ( domain->hasXfemManager() ) {
448 
449  int nEnrIt = xMan->giveNumberOfEnrichmentItems();
450  vtkPieces[0].setNumberOfInternalXFEMVarsToExport(xMan->vtkExportFields.giveSize(), nEnrIt, numTotalNodes);
451 
452  const int nDofMan = giveNumberOfDofManagers();
453 
454 
455  for ( int field = 1; field <= xMan->vtkExportFields.giveSize(); field++ ) {
456  XFEMStateType xfemstype = ( XFEMStateType ) xMan->vtkExportFields [ field - 1 ];
457 
458  for ( int enrItIndex = 1; enrItIndex <= nEnrIt; enrItIndex++ ) {
459  EnrichmentItem *ei = xMan->giveEnrichmentItem(enrItIndex);
460  for ( int nodeInd = 1; nodeInd <= numTotalNodes; nodeInd++ ) {
461 
462  const FloatArray &x = nodeCoords[nodeInd-1];
463  FloatArray locCoord;
464  computeLocalCoordinates(locCoord, x);
465 
466  FloatArray N;
468  interp->evalN( N, locCoord, FEIElementGeometryWrapper(this) );
469 
470 
471  if ( xfemstype == XFEMST_LevelSetPhi ) {
472  double levelSet = 0.0, levelSetInNode = 0.0;
473 
474  for(int elNodeInd = 1; elNodeInd <= nDofMan; elNodeInd++) {
475  DofManager *dMan = giveDofManager(elNodeInd);
476  ei->evalLevelSetNormalInNode(levelSetInNode, dMan->giveGlobalNumber(), *(dMan->giveCoordinates()) );
477 
478  levelSet += N.at(elNodeInd)*levelSetInNode;
479  }
480 
481 
482  FloatArray valueArray = {levelSet};
483  vtkPieces[0].setInternalXFEMVarInNode(field, enrItIndex, nodeInd, valueArray);
484 
485  } else if ( xfemstype == XFEMST_LevelSetGamma ) {
486  double levelSet = 0.0, levelSetInNode = 0.0;
487 
488  for(int elNodeInd = 1; elNodeInd <= nDofMan; elNodeInd++) {
489  DofManager *dMan = giveDofManager(elNodeInd);
490  ei->evalLevelSetTangInNode(levelSetInNode, dMan->giveGlobalNumber(), *(dMan->giveCoordinates()) );
491 
492  levelSet += N.at(elNodeInd)*levelSetInNode;
493  }
494 
495 
496  FloatArray valueArray = {levelSet};
497  vtkPieces[0].setInternalXFEMVarInNode(field, enrItIndex, nodeInd, valueArray);
498 
499  } else if ( xfemstype == XFEMST_NodeEnrMarker ) {
500  double nodeEnrMarker = 0.0, nodeEnrMarkerInNode = 0.0;
501 
502  for(int elNodeInd = 1; elNodeInd <= nDofMan; elNodeInd++) {
503  DofManager *dMan = giveDofManager(elNodeInd);
504  ei->evalNodeEnrMarkerInNode(nodeEnrMarkerInNode, dMan->giveGlobalNumber() );
505 
506  nodeEnrMarker += N.at(elNodeInd)*nodeEnrMarkerInNode;
507  }
508 
509 
510  FloatArray valueArray = {nodeEnrMarker};
511  vtkPieces[0].setInternalXFEMVarInNode(field, enrItIndex, nodeInd, valueArray);
512  }
513 
514  }
515  }
516  }
517  }
518 
519  }
520  else {
521  // Enriched and cut element
522 
523  XfemStructuralElementInterface::giveSubtriangulationCompositeExportData(vtkPieces, primaryVarsToExport, internalVarsToExport, cellVarsToExport, tStep);
524 
525 
526  }
527 }
528 
529 } // end namespace oofem
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *, TimeStep *tStep)
Computes constitutive matrix of receiver.
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
int testElementGraphicActivity(Element *)
Test if particular element passed fulfills various filtering criteria for its graphics output...
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int lowerIndx=1, int upperIndx=ALL_STRAINS)
Computes the geometrical matrix of receiver in given integration point.
Abstract class representing entity, which is included in the FE model using one (or more) global func...
virtual void XfemElementInterface_computeDeformationGradientVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
bool evalNodeEnrMarkerInNode(double &oNodeEnrMarker, int iNodeInd) const
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates the array of interpolation functions (shape functions) at given point.
void giveSubtriangulationCompositeExportData(std::vector< VTKPiece > &vtkPieces, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep)
VTK Interface.
virtual void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
Definition: planstrss.C:335
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
Returns local vector of unknowns.
Definition: element.C:86
virtual MaterialMode giveMaterialMode()
Returns material mode for receiver integration points.
bool isDofManEnriched(const DofManager &iDMan) const
virtual void computeEnrichedDofManDofIdArray(IntArray &oDofIdArray, DofManager &iDMan)
Compute Id&#39;s of enriched dofs for a given DofManager.
Element_Geometry_Type
Enumerative type used to classify element geometry Possible values are: EGT_point - point in space EG...
int giveGlobalNumber() const
Definition: dofmanager.h:501
Domain * domain
Link to domain object, useful for communicating with other FEM components.
Definition: femcmpnn.h:82
Provides Xfem interface for an element.
const std::vector< int > & giveNodeEnrichmentItemIndices(int iNodeIndex) const
Definition: xfemmanager.h:248
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
void XfemElementInterface_createEnrBHmatrixAt(FloatMatrix &oAnswer, GaussPoint &iGP, Element &iEl)
Creates enriched BH-matrix.
virtual void giveDofManDofIDMask(int inode, IntArray &answer) const
Returns dofmanager dof mask for node.
virtual void postInitialize()
Performs post initialization steps.
Definition: planstrssxfem.C:60
Elements with geometry defined as EGT_Composite are exported using individual pieces.
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual FloatArray * giveCoordinates()
Definition: dofmanager.h:382
Base class for dof managers.
Definition: dofmanager.h:113
virtual void computeDeformationGradientVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Computes the deformation gradient in Voigt form at integration point ip and at time step tStep...
MaterialMode
Type representing material mode of integration point.
Definition: materialmode.h:89
Class implementing an array of integers.
Definition: intarray.h:61
int & at(int i)
Coefficient access function.
Definition: intarray.h:103
MatResponseMode
Describes the character of characteristic material matrix.
void XfemElementInterface_createEnrBmatrixAt(FloatMatrix &oAnswer, GaussPoint &iGP, Element &iEl)
Creates enriched B-matrix.
virtual void giveCZInputRecord(DynamicInputRecord &input)
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
Definition: planstrss.C:406
XfemManager * giveXfemManager()
Definition: domain.C:375
virtual int giveNumberOfDofManagers() const
Definition: element.h:656
virtual IRResultType initializeCZFrom(InputRecord *ir)
virtual void computeCohesiveTangent(FloatMatrix &answer, TimeStep *tStep)
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
Class representing a general abstraction for finite element interpolation class.
Definition: feinterpol.h:132
int giveNumberOfEnrichmentItems() const
Definition: xfemmanager.h:185
InternalStateType giveIntVarType()
virtual int computeNumberOfDofs()
Computes or simply returns total number of element&#39;s local DOFs.
void updateYourselfCZ(TimeStep *tStep)
int giveNumberOfDofs() const
Definition: dofmanager.C:279
virtual void computeBHmatrixAt(GaussPoint *gp, FloatMatrix &answer)
Computes a matrix which, multiplied by the column matrix of nodal displacements, gives the displaceme...
REGISTER_Element(LSpace)
UnknownType
Type representing particular unknown (its physical meaning).
Definition: unknowntype.h:55
bool evalLevelSetNormalInNode(double &oLevelSet, int iNodeInd, const FloatArray &iGlobalCoord) const
void XfemElementInterface_createEnrNmatrixAt(FloatMatrix &oAnswer, const FloatArray &iLocCoord, Element &iEl, bool iSetDiscontContribToZero)
Creates enriched N-matrix.
Wrapper around element definition to provide FEICellGeometry interface.
Definition: feinterpol.h:95
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Definition: floatarray.C:676
#define N(p, q)
Definition: mdm.C:367
int numberOfGaussPoints
Number of integration points as specified by nip.
Definition: element.h:188
InternalStateMode giveIntVarMode()
bool hasXfemManager()
Definition: domain.C:386
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: planstrss.C:139
bool evalLevelSetTangInNode(double &oLevelSet, int iNodeInd, const FloatArray &iGlobalCoord) const
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
Class representing vector of real numbers.
Definition: floatarray.h:82
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
Definition: planstrss.C:255
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
This class manages the xfem part.
Definition: xfemmanager.h:109
virtual Element_Geometry_Type giveGeometryType() const
Returns the element geometry type.
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
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...
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
IntArray vtkExportFields
List with the fields that should be exported to VTK.
Definition: xfemmanager.h:167
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
virtual void postInitialize()
Performs post initialization steps.
Class representing the general Input Record.
Definition: inputrecord.h:101
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
Definition: planstrssxfem.C:67
bool isElementEnriched(const Element *elem)
Definition: xfemmanager.C:104
Class Interface.
Definition: interface.h:82
XFEMStateType
Definition: xfemmanager.h:92
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
void followedBy(const IntArray &b, int allocChunk=0)
Appends array b at the end of receiver.
Definition: intarray.C:145
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
Evaluates nodal representation of real internal forces.
Class representing the a dynamic Input Record.
virtual void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
EnrichmentItem * giveEnrichmentItem(int n)
Definition: xfemmanager.h:184
virtual FEInterpolation * giveInterpolation() const
Definition: planstrss.C:76
virtual bool computeLocalCoordinates(FloatArray &answer, const FloatArray &gcoords)
Computes the element local coordinates from given global coordinates.
Definition: element.C:1222
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
Definition: element.h:170
virtual bool XfemElementInterface_updateIntegrationRule()
Updates integration rule based on the triangulation.
Domain * giveDomain() const
Definition: femcmpnn.h:100
InterfaceType
Enumerative type, used to identify interface type.
Definition: interfacetype.h:43
void push_back(const double &iVal)
Add one element.
Definition: floatarray.h:118
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0)
Evaluates nodal representation of real internal forces.
virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the stress vector of receiver at given integration point, at time step tStep.
int giveSize() const
Definition: intarray.h:203
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
Computes interpolation matrix for element unknowns.
the oofem namespace is to define a context or scope in which all oofem names are defined.
DofManager * giveDofManager(int i) const
Definition: element.C:514
virtual void computeCohesiveForces(FloatArray &answer, TimeStep *tStep)
virtual void giveDofManDofIDMask(int inode, IntArray &answer) const
Returns dofmanager dof mask for node.
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
int giveNumberOfRows() const
Returns number of rows of receiver.
Definition: floatmatrix.h:156
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
Definition: planstrssxfem.C:80
Class representing integration point in finite element program.
Definition: gausspoint.h:93
Class representing solution step.
Definition: timestep.h:80
virtual void XfemElementInterface_computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *, TimeStep *tStep)
virtual void giveCompositeExportData(std::vector< VTKPiece > &vtkPieces, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep)
VTK Interface.
Temporary class for testing in the usual case instead of PlaneStress2dXfem there will be the standard...
Definition: planstrssxfem.h:50
PatchIntegrationRule provides integration over a triangle patch.
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631
virtual void XfemElementInterface_computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:30 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011