OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
intelline1intpen.C
Go to the documentation of this file.
1 /*
2  * intelline1intpen.C
3  *
4  * Created on: Nov 20, 2015
5  * Author: svennine
6  */
7 
8 #include "intelline1intpen.h"
9 #include "gausspoint.h"
10 #include "gaussintegrationrule.h"
11 #include "dofmanager.h"
12 #include "fei2dlinelin.h"
13 #include "fei2dlinequad.h"
14 #include "feinterpol.h"
15 #include "../sm/Materials/InterfaceMaterials/structuralinterfacematerialstatus.h"
16 
17 namespace oofem {
18 REGISTER_Element(IntElLine1IntPen);
19 
21  numberOfDofMans = 6;
22 
24 
25 }
26 
28 
29 }
30 
32  FloatArray N;
34  interp->evalN( N, lcoords, FEIElementGeometryWrapper(this) );
35 
36  answer.resize(this->giveDofManager(1)->giveCoordinates()->giveSize());
37  answer.zero();
38 
39 
40  double xi_0 = 0.;
41  FloatArray xiScaled = {0.};
42 
43  if(lcoords.at(1) < xi_0 ){
44  xiScaled = {lcoords.at(1)*2. + 1.};
45  interp->evalN( N, xiScaled, FEIElementGeometryWrapper(this) );
46 
47  const FloatArray &x1 = *(this->giveDofManager(1)->giveCoordinates());
48  answer.add(N.at(1), x1 );
49 
50  const FloatArray &x3 = *(this->giveDofManager(3)->giveCoordinates());
51  answer.add(N.at(2), x3 );
52  }
53  else {
54  xiScaled = {lcoords.at(1)*2. - 1.};
55  interp->evalN( N, xiScaled, FEIElementGeometryWrapper(this) );
56 
57  const FloatArray &x3 = *(this->giveDofManager(3)->giveCoordinates());
58  answer.add(N.at(1), x3 );
59 
60  const FloatArray &x2 = *(this->giveDofManager(2)->giveCoordinates());
61  answer.add(N.at(2), x2 );
62  }
63 
64 
65 
66 
67  return true;
68 }
69 
70 void
72 {
73 // printf("Entering IntElLine2IntPen :: computeCovarBaseVectorAt\n");
74 
75  // Since we are averaging over the whole element, always evaluate the base vectors at xi = 0.
76 
77  FloatArray xi_0 = {0.0};
78 // FloatArray xi_0 = {ip->giveNaturalCoordinate(1)};
79 
80  FloatMatrix dNdxi;
82 // interp->evaldNdxi( dNdxi, ip->giveNaturalCoordinates(), FEIElementGeometryWrapper(this) );
83  interp->evaldNdxi( dNdxi, xi_0, FEIElementGeometryWrapper(this) );
84 
85  G.resize(2);
86  G.zero();
87 
88  double X1_i = 0.5 * ( this->giveNode(1)->giveCoordinate(1) + this->giveNode(4)->giveCoordinate(1) ); // (mean) point on the fictious mid surface
89  double X2_i = 0.5 * ( this->giveNode(1)->giveCoordinate(2) + this->giveNode(4)->giveCoordinate(2) );
90  G.at(1) += dNdxi.at(1, 1) * X1_i;
91  G.at(2) += dNdxi.at(1, 1) * X2_i;
92 
93 
94  X1_i = 0.5 * ( this->giveNode(2)->giveCoordinate(1) + this->giveNode(5)->giveCoordinate(1) ); // (mean) point on the fictious mid surface
95  X2_i = 0.5 * ( this->giveNode(2)->giveCoordinate(2) + this->giveNode(5)->giveCoordinate(2) );
96  G.at(1) += dNdxi.at(2, 1) * X1_i;
97  G.at(2) += dNdxi.at(2, 1) * X2_i;
98 
99 }
100 
101 
102 
103 void
105 {
106 #if 1
107  // Computes the stiffness matrix of the receiver K_cohesive = int_A ( N^t * dT/dj * N ) dA
108  FloatMatrix N, D, DN;
109  bool matStiffSymmFlag = this->giveCrossSection()->isCharacteristicMtrxSymmetric(rMode);
110  answer.clear();
111 
112  FloatMatrix rotationMatGtoL;
113  FloatArray u;
114 
115  // First loop over GP: compute projection of test function and traction.
116  // The setting is as follows: we have an interface with quadratic interpolation and we
117  // wish to project onto the space of constant functions on each element.
118 
119  // Projecting the basis functions gives a constant for each basis function.
120  FloatMatrix proj_N;
121  proj_N.clear();
122 
123  FloatMatrix proj_DN;
124  proj_DN.clear();
125 
126  double area = 0.;
127 
128  for ( auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
129 
130  this->computeNmatrixAt(ip, N);
131 
132  if ( this->nlGeometry == 0 ) {
133  this->giveStiffnessMatrix_Eng(D, rMode, ip, tStep);
134  } else if ( this->nlGeometry == 1 ) {
135  this->giveStiffnessMatrix_dTdj(D, rMode, ip, tStep);
136  } else {
137  OOFEM_ERROR("nlgeometry must be 0 or 1!")
138  }
139 
140  this->computeTransformationMatrixAt(ip, rotationMatGtoL);
141  D.rotatedWith(rotationMatGtoL, 'n'); // transform stiffness to global coord system
142 
143  this->computeNmatrixAt(ip, N);
144  DN.beProductOf(D, N);
145 
146 
147  double dA = this->computeAreaAround(ip);
148  area += dA;
149 
150  proj_N.add(dA, N);
151  proj_DN.add(dA, DN);
152  }
153 
154 // printf("area: %e\n", area);
155  proj_N.times(1./area);
156  proj_DN.times(1./area);
157 
158 // printf("proj_N: "); proj_N.printYourself();
159 
160  for ( auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
161 
162  if ( this->nlGeometry == 0 ) {
163  this->giveStiffnessMatrix_Eng(D, rMode, ip, tStep);
164  } else if ( this->nlGeometry == 1 ) {
165  this->giveStiffnessMatrix_dTdj(D, rMode, ip, tStep);
166  } else {
167  OOFEM_ERROR("nlgeometry must be 0 or 1!")
168  }
169 
170  this->computeTransformationMatrixAt(ip, rotationMatGtoL);
171  D.rotatedWith(rotationMatGtoL, 'n'); // transform stiffness to global coord system
172 
173  DN.beProductOf(D, proj_N);
174 
175 
176  double dA = this->computeAreaAround(ip);
177  if ( matStiffSymmFlag ) {
178  answer.plusProductSymmUpper(proj_N, DN, dA);
179  } else {
180  answer.plusProductUnsym(proj_N, DN, dA);
181  }
182  }
183 
184 
185  if ( matStiffSymmFlag ) {
186  answer.symmetrized();
187  }
188 
189 #else
190 
191  // Computes the stiffness matrix of the receiver K_cohesive = int_A ( N^t * dT/dj * N ) dA
192  FloatMatrix N, D, DN;
193  bool matStiffSymmFlag = this->giveCrossSection()->isCharacteristicMtrxSymmetric(rMode);
194  answer.clear();
195 
196  FloatMatrix rotationMatGtoL;
197  FloatArray u;
198 
199  // First loop over GP: compute projection of test function and traction.
200  // The setting is as follows: we have an interface with quadratic interpolation and we
201  // wish to project onto the space of constant functions on each element.
202 
203  // Projecting the basis functions gives a constant for each basis function.
204  FloatMatrix proj_N;
205  proj_N.clear();
206 
207  FloatMatrix proj_DN;
208  proj_DN.clear();
209 
210  double area = 0.;
211 
212  for ( auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
213 
214  this->computeNmatrixAt(ip, N);
215 
216  if ( this->nlGeometry == 0 ) {
217  this->giveStiffnessMatrix_Eng(D, rMode, ip, tStep);
218  } else if ( this->nlGeometry == 1 ) {
219  this->giveStiffnessMatrix_dTdj(D, rMode, ip, tStep);
220  } else {
221  OOFEM_ERROR("nlgeometry must be 0 or 1!")
222  }
223 
224  this->computeTransformationMatrixAt(ip, rotationMatGtoL);
225  D.rotatedWith(rotationMatGtoL, 'n'); // transform stiffness to global coord system
226 
227  this->computeNmatrixAt(ip, N);
228  DN.beProductOf(D, N);
229 
230 
231  double dA = this->computeAreaAround(ip);
232  area += dA;
233 
234  proj_N.add(dA, N);
235  proj_DN.add(dA, DN);
236  }
237 
238 // printf("area: %e\n", area);
239  proj_N.times(1./area);
240  proj_DN.times(1./area);
241 
242 // printf("proj_N: "); proj_N.printYourself();
243 
244  for ( auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
245 
246  if ( this->nlGeometry == 0 ) {
247  this->giveStiffnessMatrix_Eng(D, rMode, ip, tStep);
248  } else if ( this->nlGeometry == 1 ) {
249  this->giveStiffnessMatrix_dTdj(D, rMode, ip, tStep);
250  } else {
251  OOFEM_ERROR("nlgeometry must be 0 or 1!")
252  }
253 
254 // this->computeTransformationMatrixAt(ip, rotationMatGtoL);
255 // D.rotatedWith(rotationMatGtoL, 'n'); // transform stiffness to global coord system
256 //
257 // DN.beProductOf(D, proj_N);
258 
259 
260  double dA = this->computeAreaAround(ip);
261  if ( matStiffSymmFlag ) {
262  answer.plusProductSymmUpper(proj_N, proj_DN, dA);
263 // answer.plusProductSymmUpper(proj_DN, proj_N, dA);
264  } else {
265  answer.plusProductUnsym(proj_N, proj_DN, dA);
266 // answer.plusProductUnsym(proj_DN, proj_N, dA);
267  }
268  }
269 
270 
271  if ( matStiffSymmFlag ) {
272  answer.symmetrized();
273  }
274 
275 
276 
277 #endif
278 
279 
280 }
281 
282 
283 void
285  TimeStep *tStep, int useUpdatedGpRecord)
286 {
287 #if 1
288  // Computes internal forces
289  // For this element we use an "interior penalty" formulation, where
290  // the cohesive zone contribution is weakened, i.e. the traction and
291  // test function for the cohesive zone are projected onto a reduced
292  // space. The purpose of the projection is to improve the stability
293  // properties of the formulation, thereby avoiding traction oscilations.
294 
295  FloatMatrix N;
296  FloatArray u, traction, jump;
297 
298  this->computeVectorOf(VM_Total, tStep, u);
299  // subtract initial displacements, if defined
300  if ( initialDisplacements.giveSize() ) {
302  }
303 
304  // zero answer will resize accordingly when adding first contribution
305  answer.clear();
306 
307 
308 
309  // First loop over GP: compute projection of test function and traction.
310  // The setting is as follows: we have an interface with quadratic interpolation and we
311  // wish to project onto the space of constant functions on each element.
312 
313  // The projection of t becomes a constant
314 // FloatArray proj_t;
315 // proj_t.clear();
316 
317 
318  FloatArray proj_jump;
319  proj_jump.clear();
320 
321  // Projecting the basis functions gives a constant for each basis function.
322  FloatMatrix proj_N;
323  proj_N.clear();
324 
325  double area = 0.;
326 
327  for ( auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
328 
329  this->computeNmatrixAt(ip, N);
330  jump.beProductOf(N, u);
331 // this->computeTraction(traction, ip, jump, tStep);
332 
333  double dA = this->computeAreaAround(ip);
334  area += dA;
335 
336  proj_jump.add(dA, jump);
337  proj_N.add(dA, N);
338  }
339 
340 // printf("area: %e\n", area);
341  proj_jump.times(1./area);
342  proj_N.times(1./area);
343 
344 // printf("proj_N: "); proj_N.printYourself();
345 
346 
348  //
349  // Find c2 such that c1 = t{c2}
350  //
352 
353 // // Initial guess
354 // FloatArray c2 = proj_jump;
355 // int maxIter = 10;
356 // for(int iter = 0; iter < maxIter; iter++) {
357 //
358 // this->computeTraction(traction, ip, c2, tStep);
359 //
360 //
361 // }
362 
363 
364  // Second loop over GP: assemble contribution to internal forces as we are used to.
365  for ( auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
366 // this->computeNmatrixAt(ip, N);
367 // jump.beProductOf(N, u);
368  this->computeTraction(traction, ip, proj_jump, tStep);
369 
370  // compute internal cohesive forces as f = N^T*traction dA
371  double dA = this->computeAreaAround(ip);
372  answer.plusProduct(proj_N, traction, dA);
373  }
374 
375 }
376 
377 #else
378 // Computes internal forces
379 // For this element we use an "interior penalty" formulation, where
380 // the cohesive zone contribution is weakened, i.e. the traction and
381 // test function for the cohesive zone are projected onto a reduced
382 // space. The purpose of the projection is to improve the stability
383 // properties of the formulation, thereby avoiding traction oscilations.
384 
385 FloatMatrix N;
386 FloatArray u, traction, jump;
387 
388 this->computeVectorOf(VM_Total, tStep, u);
389 // subtract initial displacements, if defined
392 }
393 
394 // zero answer will resize accordingly when adding first contribution
395 answer.clear();
396 
397 
398 
399 // First loop over GP: compute projection of test function and traction.
400 // The setting is as follows: we have an interface with quadratic interpolation and we
401 // wish to project onto the space of constant functions on each element.
402 
403 // The projection of t becomes a constant
404  FloatArray proj_t;
405  proj_t.clear();
406 
407 
408 //FloatArray proj_jump;
409 //proj_jump.clear();
410 
411 // Projecting the basis functions gives a constant for each basis function.
412 FloatMatrix proj_N;
413 proj_N.clear();
414 
415 double area = 0.;
416 
417 for ( auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
418 
419  this->computeNmatrixAt(ip, N);
420  jump.beProductOf(N, u);
421  this->computeTraction(traction, ip, jump, tStep);
422 
423  double dA = this->computeAreaAround(ip);
424  area += dA;
425 
426 // printf("traction: "); traction.printYourself();
427 // proj_jump.add(dA, jump);
428  proj_t.add(dA, traction);
429  proj_N.add(dA, N);
430 }
431 
432 // printf("area: %e\n", area);
433 //proj_jump.times(1./area);
434 proj_t.times(1./area);
435 //printf("proj_t: "); proj_t.printYourself();
436 //printf("\n\n");
437 proj_N.times(1./area);
438 
439 // printf("proj_N: "); proj_N.printYourself();
440 
441 FloatMatrix rotationMatGtoL;
442 
443 // Second loop over GP: assemble contribution to internal forces as we are used to.
444 for ( auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
445  this->computeNmatrixAt(ip, N);
446 // jump.beProductOf(N, u);
447 // this->computeTraction(traction, ip, proj_jump, tStep);
448 
449  // compute internal cohesive forces as f = N^T*traction dA
450  double dA = this->computeAreaAround(ip);
451  answer.plusProduct(proj_N, proj_t, dA);
452 // answer.plusProduct(N, proj_t, dA);
453 
454  StructuralInterfaceMaterialStatus *status = static_cast< StructuralInterfaceMaterialStatus * >( ip->giveMaterialStatus() );
455  FloatArray proj_t_gp = proj_t;
456 
457  this->computeTransformationMatrixAt(ip, rotationMatGtoL);
458  proj_t_gp.rotatedWith(rotationMatGtoL, 'n'); // transform to local coord system
459 
460  FloatArray proj_t_gp_3D = {proj_t_gp.at(1), 0., proj_t_gp.at(2)};
461  status->letProjectedTractionBe(proj_t_gp_3D);
462 
463 // FloatArray proj_t_gp = proj_t;
464 // printf("proj_t_gp: "); proj_t_gp.printYourself();
465 }
466 
467 }
468 
469 
470 #endif
471 
472 void
474 {
475  // Returns the modified N-matrix which multiplied with u give the spatial jump.
476 
477  FloatArray N;
479 // interp->evalN( N, ip->giveNaturalCoordinates(), FEIElementGeometryWrapper(this) );
480 
481  double xi_0 = 0.;
482  FloatArray xiScaled = {0.};
483 
484  answer.resize(2, 12);
485  answer.zero();
486 
487  if(ip->giveNaturalCoordinate(1) < xi_0 ){
488  xiScaled = {ip->giveNaturalCoordinate(1)*2. + 1.};
489  interp->evalN( N, xiScaled, FEIElementGeometryWrapper(this) );
490 
491  answer.at(1, 1) = answer.at(2, 2) = -N.at(1);
492 // answer.at(1, 3) = answer.at(2, 4) = -N.at(2);
493  answer.at(1, 5) = answer.at(2, 6) = -N.at(2);
494 
495  answer.at(1, 7) = answer.at(2, 8) = N.at(1);
496 // answer.at(1, 9) = answer.at(2, 10) = N.at(2);
497  answer.at(1, 11) = answer.at(2, 12) = N.at(2);
498  }
499  else {
500  xiScaled = {ip->giveNaturalCoordinate(1)*2. - 1.};
501  interp->evalN( N, xiScaled, FEIElementGeometryWrapper(this) );
502 
503 // answer.at(1, 1) = answer.at(2, 2) = -N.at(1);
504  answer.at(1, 3) = answer.at(2, 4) = -N.at(2);
505  answer.at(1, 5) = answer.at(2, 6) = -N.at(1);
506 
507 // answer.at(1, 7) = answer.at(2, 8) = N.at(1);
508  answer.at(1, 9) = answer.at(2, 10) = N.at(2);
509  answer.at(1, 11) = answer.at(2, 12) = N.at(1);
510  }
511 
512 }
513 
514 void
516 // Sets up the array of Gauss Points of the receiver.
517 {
518  if ( integrationRulesArray.size() == 0 ) {
519  integrationRulesArray.resize( 1 );
520 
521 // integrationRulesArray[ 0 ].reset( new LobattoIntegrationRule (1,this, 1, 2, false) );
522 // integrationRulesArray [ 0 ]->SetUpPointsOnLine(2, _2dInterface);
523 
524  int numGP = 4;
525  integrationRulesArray [ 0 ].reset( new GaussIntegrationRule(1, this, 1, 2) );
526  integrationRulesArray [ 0 ]->SetUpPointsOnLine(numGP, _2dInterface);
527  }
528 }
529 
530 
531 } /* namespace oofem */
CrossSection * giveCrossSection()
Definition: element.C:495
void subtract(const FloatArray &src)
Subtracts array src to receiver.
Definition: floatarray.C:258
virtual void evaldNdxi(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
Definition: feinterpol.h:193
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates the array of interpolation functions (shape functions) at given point.
Class and object Domain.
Definition: domain.h:115
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
Returns local vector of unknowns.
Definition: element.C:86
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Access method for default integration rule.
Definition: element.h:822
virtual void computeTraction(FloatArray &traction, IntegrationPoint *ip, const FloatArray &jump, TimeStep *tStep)
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Computes the global coordinates from given element&#39;s local coordinates.
void clear()
Clears receiver (zero size).
Definition: floatarray.h:206
virtual void computeTransformationMatrixAt(GaussPoint *gp, FloatMatrix &answer)
Definition: intelline1.C:197
virtual FloatArray * giveCoordinates()
Definition: dofmanager.h:382
virtual void computeNmatrixAt(GaussPoint *gp, FloatMatrix &answer)
Computes modified interpolation matrix (N) for the element which multiplied with the unknowns vector ...
static FEI2dLineLin interp
Definition: intelline1.h:58
virtual double giveCoordinate(int i)
Definition: node.C:82
virtual double computeAreaAround(GaussPoint *gp)
Definition: intelline1.C:121
MatResponseMode
Describes the character of characteristic material matrix.
void rotatedWith(FloatMatrix &r, char mode)
Returns the receiver a rotated according the change-of-base matrix r.
Definition: floatarray.C:799
FloatArray initialDisplacements
Initial displacement vector, describes the initial nodal displacements when element has been casted...
void letProjectedTractionBe(FloatArray iProjectedTraction)
Assigns projeted traction.
IntElLine1IntPen(int n, Domain *d)
Class representing a general abstraction for finite element interpolation class.
Definition: feinterpol.h:132
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
Definition: floatmatrix.C:780
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
Definition: gausspoint.h:136
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
virtual FEInterpolation * giveInterpolation() const
Definition: intelline1.C:218
#define OOFEM_ERROR(...)
Definition: error.h:61
REGISTER_Element(LSpace)
virtual void giveStiffnessMatrix_Eng(FloatMatrix &answer, MatResponseMode rMode, IntegrationPoint *ip, TimeStep *tStep)
Definition: intelline1.h:89
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
void rotatedWith(const FloatMatrix &r, char mode= 'n')
Returns the receiver &#39;a&#39; transformed using give transformation matrix r.
Definition: floatmatrix.C:1557
Wrapper around element definition to provide FEICellGeometry interface.
Definition: feinterpol.h:95
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode)
Check for symmetry of stiffness matrix.
Definition: crosssection.h:172
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Definition: floatarray.C:676
This class implements a structural interface material status information.
#define N(p, q)
Definition: mdm.C:367
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
Definition: floatmatrix.C:698
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
virtual void giveStiffnessMatrix_dTdj(FloatMatrix &answer, MatResponseMode rMode, IntegrationPoint *ip, TimeStep *tStep)
virtual void computeCovarBaseVectorAt(GaussPoint *gp, FloatArray &G)
int numberOfGaussPoints
Number of integration points as specified by nip.
Definition: element.h:188
Class representing vector of real numbers.
Definition: floatarray.h:82
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness/tangent matrix of receiver.
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
void add(const FloatMatrix &a)
Adds matrix to the receiver.
Definition: floatmatrix.C:1023
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
void times(double s)
Multiplies receiver with scalar.
Definition: floatarray.C:818
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0)
Returns equivalent nodal forces vectors.
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
void zero()
Zeroes all coefficient of receiver.
Definition: floatmatrix.C:1326
This class implements a two dimensional interface element.
Definition: intelline1.h:55
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
Definition: floatmatrix.C:337
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
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
void clear()
Sets size of receiver to be an empty matrix. It will have zero rows and zero columns size...
Definition: floatmatrix.h:516
Node * giveNode(int i) const
Returns reference to the i-th node of element.
Definition: element.h:610
void symmetrized()
Initializes the lower half of the receiver according to the upper half.
Definition: floatmatrix.C:1576
int nlGeometry
Flag indicating if geometrical nonlinearities apply.
Class representing integration point in finite element program.
Definition: gausspoint.h:93
Class representing solution step.
Definition: timestep.h:80
int numberOfDofMans
Number of dofmanagers.
Definition: element.h:149
void add(const FloatArray &src)
Adds array src to receiver.
Definition: floatarray.C:156
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
Adds the product .
Definition: floatarray.C:226

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:29 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011