OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
htselement.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 //last edit: 07/02/2013 by Jan Novak
35 
36 #include "../sm/Elements/htselement.h"
37 #include "gausspoint.h"
38 #include "floatmatrix.h"
39 #include "floatarray.h"
40 #include "intarray.h"
41 #include "node.h"
42 #include "mathfem.h"
43 #include "boundaryload.h"
44 #include "classfactory.h"
45 
46 namespace oofem {
47 REGISTER_Element(HTSelement);
48 
49 HTSelement :: HTSelement(int n, Domain *aDomain) : StructuralElement(n, aDomain)
50  // Constructor.
51 {
52  this->lambda = 8;
53  this->mu = 8;
54  this->numberOfStressDofs = 12;
55  // numberOfEdges = 3;
56  numberOfEdges = 4;
59 }
60 
61 
62 void
64 
65 {
66  if ( inode <= numberOfEdges ) {
67  answer.clear();
68  } else {
69  answer = {D_u_edge_const, D_u_edge_lin, D_v_edge_const, D_v_edge_lin};
70  }
71 }
72 
73 
76 {
77  IRResultType result; // Required by IR_GIVE_FIELD macro
79  if ( result != IRRT_OK ) {
80  return result;
81  }
83  //IR_GIVE_FIELD(ir, numberOfEdges, _IFT_HTSelement_numberOfEdges, "numberOfEdges");
84  //numberOfEdges = 3;
85 
86  this->computeCenterOfGravity();
87  return IRRT_OK;
88 }
89 
90 void
92 {
93  if ( integrationRulesArray.size() == 0 ) {
95 
96  for ( int i = 0; i < numberOfEdges; i++ ) {
97  integrationRulesArray [ i ].reset( new GaussIntegrationRule(i + 1, this, 1, 100) );
98  integrationRulesArray [ i ]->SetUpPointsOnLine(numberOfGaussPoints, _1dMat);
99  }
100  }
101 }
102 
103 void
105 {
106  double area = 0, sX = 0, sY = 0;
107  double aX, aY, bX, bY;
108  Node *nodeA, *nodeB;
109 
110  for ( int i = 0; i < numberOfEdges; i++ ) {
111  nodeA = this->giveSideNode(i + 1, 1);
112  nodeB = this->giveSideNode(i + 1, 2);
113 
114  aX = nodeA->giveCoordinate(1);
115  aY = nodeA->giveCoordinate(2);
116  bX = nodeB->giveCoordinate(1);
117  bY = nodeB->giveCoordinate(2);
118  area += ( bX - aX ) * ( bY + aY ) / 2;
119 
120  sY += ( ( aX * aX ) + ( bX - aX ) * aX + ( bX - aX ) * ( bX - aX ) / 3 ) * ( bY - aY ) / 2.0;
121  sX += ( ( aY * aY ) + ( bY - aY ) * aY + ( bY - aY ) * ( bY - aY ) / 3 ) * ( bX - aX ) / 2.0;
122  }
123 
124  cgX = -sY / area;
125  cgY = sX / area;
126 }
127 
128 Node *
129 HTSelement :: giveSideNode(int elementSideNumber, int nodeNumber)
130 {
131  int firstNodeNumber = elementSideNumber;
132  int secondNodeNumber = elementSideNumber + 1;
133  if ( secondNodeNumber > numberOfEdges ) {
134  secondNodeNumber = 1;
135  }
136  if ( nodeNumber == 1 ) {
137  return this->giveNode(firstNodeNumber);
138  } else if ( nodeNumber == 2 ) {
139  return this->giveNode(secondNodeNumber);
140  } else {
141  //error("Only two nodes per side");
142  return 0;
143  }
144 }
145 
146 
147 double
149 // Returns the length of the receiver. This method is valid only if 1
150 // Gauss point is used.
151 {
152  return 0.5 * this->giveSideLength(elemSideNumber) * gp->giveWeight(); // * this->giveCrossSection()->give(CS_Area);
153 }
154 
155 double
157 {
158  Node *nodeA;
159  Node *nodeB;
160  double dx, dy;
161  nodeA = this->giveSideNode(sideNumber, 1);
162  nodeB = this->giveSideNode(sideNumber, 2);
163  dx = nodeB->giveCoordinate(1) - nodeA->giveCoordinate(1);
164  dy = nodeB->giveCoordinate(2) - nodeA->giveCoordinate(2);
165  return sqrt(dx * dx + dy * dy);
166 }
167 
168 
169 void
171  TimeStep *tStep)
172 // Computes numerically the stiffness matrix of the receiver.
173 {
174  double dV;
176  answer.zero();
177 
178  FloatMatrix Fedge, Aedge, F, A, N;
180  F.zero();
182  A.zero();
183  for ( int i = 0; i < numberOfEdges; i++ ) {
184  this->computeOutwardNormalMatrix(N, i + 1);
185  for ( GaussPoint *gp: *this->giveIntegrationRule(i) ) {
186  dV = this->computeVolumeAroundSide(gp, i + 1);
187  this->computeFMatrixAt(Fedge, N, gp, i + 1);
188  Fedge.times(dV);
189  this->computeAMatrixAt(Aedge, N, gp, i + 1);
190  Aedge.times(dV);
191  F.add(Fedge);
192  }
193  for ( int k = 0; k < numberOfStressDofs; k++ ) {
194  for ( int l = 0; l < 4; l++ ) {
195  A(k, l + i * 4) = Aedge(k, l);
196  }
197  }
198  }
199 
200  // kondenzace
201  FloatMatrix invF;
202  invF.beInverseOf(F);
203 
204  FloatMatrix FG;
205  FG.beProductOf(invF, A);
206  answer.beTProductOf(A, FG);
207 }
208 
209 
210 void
211 HTSelement :: computePuVectorAt(FloatArray &answer, FloatMatrix N, FloatArray u, GaussPoint *gp, int sideNumber) //\int{(NSv)^T*u}
212 {
213  FloatMatrix Sv, NSv;
214  //answer.resize() ??? otazka zda bude nutne ji preskejlovat, asi alo jo vzhledem k tomu jaky element vracim (ctverec, trojuhelnik)
215  answer.zero(); //radsi ano
216  this->computeSvMatrixAt(Sv, gp, sideNumber); //the quation is whether (NSv)^t Uv will operate on the same gp
217  //if so, this matrix should be calculated just once in F matrix
218  NSv.beProductOf(N, Sv);
219  // answer.beTProductOf(NSv, u);
220 } //end of computePuVectorAt
221 
222 
223 void
225 {
226  FloatMatrix Ugamma;
227  //answer.resize() ??? otazka zda bude nutne ji preskejlovat, asi alo jo vzhledem k tomu jaky element vracim (ctverec, trojuhelnik)
228  answer.zero(); //radsi ano
229  //vytahnout t - zatizeni na hrane
230  this->computeUgammaMatrixAt(Ugamma, gp);
231  answer.beTProductOf(Ugamma, t);
232 } //end of computePsVectorAt
233 
234 void
236 {
237  //double dV;
238 
239  // FloatArray PuEdge,Pu(numberOfDofs);
240  //FloatMatrix N;
241  //IntegrationRule* iRule;
242 
243  FloatArray u;
244  FloatMatrix K;
245 
246  this->computeVectorOf(mode, tStep, u);
247  if ( u.containsOnlyZeroes() ) {
248  answer.clear();
249  } else {
250  this->computeStiffnessMatrix(K, TangentStiffness, tStep);
251  answer.beProductOf(K, u);
252  answer.negated();
253  }
254 
255 #if 0
256  Pu.zero();
257  answer.resize(numberOfDofs);
258  for ( int i = 0; i < numberOfEdges; i++ ) {
259  this->computeOutwardNormalMatrix(N, i + 1);
260  iRule = this->giveIntegrationRule(i);
261  for ( GaussPoint *gp: *iRule ) {
262  dV = this->computeVolumeAroundSide(gp, i + 1);
263  this->computePuVectorAt(PuEdge, N, u, gp, i + 1);
264  PuEdge.times(dV);
265  answer.add(PuEdge);
266  }
267  }
268 #endif
269 }
270 
271 
272 
273 /*Public functions*/
274 
275 //element stifness matrix
276 
277 
278 /*Protected functions*/
279 
280 
281 void
283 {
284  double Ax = this->giveSideNode(sideNumber, 1)->giveCoordinate(1);
285  double Bx = this->giveSideNode(sideNumber, 2)->giveCoordinate(1);
286  double Ay = this->giveSideNode(sideNumber, 1)->giveCoordinate(2);
287  double By = this->giveSideNode(sideNumber, 2)->giveCoordinate(2);
288 
289  answer.resize(2, 3);
290  answer.zero();
291  answer.at(1, 1) = answer.at(2, 3) = ( By - Ay );
292  answer.at(1, 3) = answer.at(2, 2) = -( Bx - Ax );
293  double norm = sqrt( answer.at(1, 1) * answer.at(1, 1) + answer.at(2, 2) * answer.at(2, 2) );
294  answer.times(1. / norm);
295 }
296 
297 
298 
299 //generalized stress degrees of freedom: v
300 void
301 HTSelement :: computeFMatrixAt(FloatMatrix &answer, FloatMatrix N, GaussPoint *gp, int sideNumber) //\int{(NSv)^T Uv}
302 {
303  FloatMatrix Uv, Sv, NSv;
304  //answer.resize() ??? otazka zda bude nutne ji preskejlovat, asi alo jo vzhledem k tomu jaky element vracim (ctverec, trojuhelnik)
305  answer.zero(); //radsi ano
306 
307  this->computeUvMatrixAt(Uv, gp, sideNumber);
308  this->computeSvMatrixAt(Sv, gp, sideNumber);
309 
310  NSv.beProductOf(N, Sv);
311  answer.beTProductOf(NSv, Uv);
312 } //end of computeFMatrixAt
313 
314 
315 //addtional displacements degrees of freedom: q (also called G matrix)
316 void
317 HTSelement :: computeAMatrixAt(FloatMatrix &answer, FloatMatrix N, GaussPoint *gp, int sideNumber) //\int{(NSv)^T Ug}
318 {
319  //answer.resize() ??? otazka zda bude nutne ji preskejlovat, asi alo jo vzhledem k tomu jaky element vracim (ctverec, trojuhelnik)
320  answer.zero(); //radsi ano
321  FloatMatrix Sv, Ugamma, NSv;
322 
323  this->computeUgammaMatrixAt(Ugamma, gp);
324  this->computeSvMatrixAt(Sv, gp, sideNumber);
325  NSv.beProductOf(N, Sv);
326  answer.beTProductOf(NSv, Ugamma);
327 } //end of computeAMatrixAt
328 
329 
330 void
332 {
333  FloatArray uv;
335  uv.resize(2);
336 
337 
338  double t = ( gp->giveNaturalCoordinate(1) + 1. ) / 2.;
339 
340  double Ax = ( this->giveSideNode(sideNumber, 1)->giveCoordinate(1) ) - cgX;
341  double Bx = this->giveSideNode(sideNumber, 2)->giveCoordinate(1) - cgX;
342 
343  double x = ( Bx - Ax ) * t + Ax;
344 
345  double Ay = this->giveSideNode(sideNumber, 1)->giveCoordinate(2) - cgY;
346  double By = this->giveSideNode(sideNumber, 2)->giveCoordinate(2) - cgY;
347  double y = ( By - Ay ) * t + Ay;
348 
349  //v1 ... vi generalized stress variables the following matrices are associated with
350  this->uv1(uv, x, y);
351  Uv(0, 0) = uv(0);
352  Uv(0, 1) = uv(1);
353  //v2
354  this->uv3(uv, x, y);
355  Uv(1, 0) = uv(0);
356  Uv(1, 1) = uv(1);
357  //v3
358  this->uv4(uv, x, y);
359  Uv(2, 0) = uv(0);
360  Uv(2, 1) = uv(1);
361  //v4
362  this->uv5(uv, x, y);
363  Uv(3, 0) = uv(0);
364  Uv(3, 1) = uv(1);
365  //v5
366  this->uv6(uv, x, y);
367  Uv(4, 0) = uv(0);
368  Uv(4, 1) = uv(1);
369  //v6
370  this->uv7(uv, x, y);
371  Uv(5, 0) = uv(0);
372  Uv(5, 1) = uv(1);
373  //v7
374  this->uv8(uv, x, y);
375  Uv(6, 0) = uv(0);
376  Uv(6, 1) = uv(1);
377  //v8
378  this->uv9(uv, x, y);
379  Uv(7, 0) = uv(0);
380  Uv(7, 1) = uv(1);
381  //v9
382  this->uv10(uv, x, y);
383  Uv(8, 0) = uv(0);
384  Uv(8, 1) = uv(1);
385  //v10
386  this->uv11(uv, x, y);
387  Uv(9, 0) = uv(0);
388  Uv(9, 1) = uv(1);
389  //v11
390  this->uv12(uv, x, y);
391  Uv(10, 0) = uv(0);
392  Uv(10, 1) = uv(1);
393  //v12
394  this->uv25_4(uv, x, y);
395  Uv(11, 0) = uv(0);
396  Uv(11, 1) = uv(1);
397  //transpose Uv in order to conform with Texeira notation
398  answer.beTranspositionOf(Uv);
399 } //end of computeUvMatrixAt
400 
401 void
403 {
404  FloatArray sv;
405  FloatMatrix Sv;
406  sv.resize(3);
407  Sv.resize(numberOfStressDofs, 3);
408 
409 
410  double t = ( gp->giveNaturalCoordinate(1) + 1. ) / 2.;
411 
412  double Ax = this->giveSideNode(sideNumber, 1)->giveCoordinate(1);
413  double Bx = this->giveSideNode(sideNumber, 2)->giveCoordinate(1);
414 
415  double x = ( Bx - Ax ) * t + Ax - cgX;
416 
417  double Ay = this->giveSideNode(sideNumber, 1)->giveCoordinate(2);
418  double By = this->giveSideNode(sideNumber, 2)->giveCoordinate(2);
419  double y = ( By - Ay ) * t + Ay - cgY;
420 
421 
422 
423 
424  //v1
425  this->sv1(sv, x, y);
426  Sv(0, 0) = sv(0);
427  Sv(0, 1) = sv(1);
428  Sv(0, 2) = sv(2);
429  //v2
430  this->sv3(sv, x, y);
431  Sv(1, 0) = sv(0);
432  Sv(1, 1) = sv(1);
433  Sv(1, 2) = sv(2);
434  //v3
435  this->sv4(sv, x, y);
436  Sv(2, 0) = sv(0);
437  Sv(2, 1) = sv(1);
438  Sv(2, 2) = sv(2);
439  //v4
440  this->sv5(sv, x, y);
441  Sv(3, 0) = sv(0);
442  Sv(3, 1) = sv(1);
443  Sv(3, 2) = sv(2);
444  //v5
445  this->sv6(sv, x, y);
446  Sv(4, 0) = sv(0);
447  Sv(4, 1) = sv(1);
448  Sv(4, 2) = sv(2);
449  //v6
450  this->sv7(sv, x, y);
451  Sv(5, 0) = sv(0);
452  Sv(5, 1) = sv(1);
453  Sv(5, 2) = sv(2);
454  //v7
455  this->sv8(sv, x, y);
456  Sv(6, 0) = sv(0);
457  Sv(6, 1) = sv(1);
458  Sv(6, 2) = sv(2);
459  //v8
460  this->sv9(sv, x, y);
461  Sv(7, 0) = sv(0);
462  Sv(7, 1) = sv(1);
463  Sv(7, 2) = sv(2);
464  //v9
465  this->sv10(sv, x, y);
466  Sv(8, 0) = sv(0);
467  Sv(8, 1) = sv(1);
468  Sv(8, 2) = sv(2);
469  //v10
470  this->sv11(sv, x, y);
471  Sv(9, 0) = sv(0);
472  Sv(9, 1) = sv(1);
473  Sv(9, 2) = sv(2);
474  //v11
475  this->sv12(sv, x, y);
476  Sv(10, 0) = sv(0);
477  Sv(10, 1) = sv(1);
478  Sv(10, 2) = sv(2);
479  //v12
480  this->sv25_4(sv, x, y);
481  Sv(11, 0) = sv(0);
482  Sv(11, 1) = sv(1);
483  Sv(11, 2) = sv(2);
484 
485  //transpose Sv in order to conform with Texeira notation
486  answer.beTranspositionOf(Sv);
487 } //end of computeSvMatrixAt
488 
489 
490 void
492 {
493  FloatMatrix Ugamma(4, 2);
494  Ugamma.zero();
495 
496  //following constatnts should be sent from elsewhere
497  // int d = 2, p = 2; //@p - polynomial order (number of hierarchical functions)
498  //@d - task dimension d={2,3}
499 
500  //single edge
501  //q_const
502  Ugamma(0, 0) = Ugamma(1, 1) = u_gammaConst(gp);
503  //q_linear
504  Ugamma(2, 0) = Ugamma(3, 1) = u_gammaLin(gp);
505  answer.beTranspositionOf(Ugamma);
506 } //end of computeUgammaMatrixAt
507 
508 
509 
510 /*Private functions*/
511 
512 //Uv and Sv basis definition:
513 //@lambda - lame elastic constant
514 //@mu - lame elastic constant
515 void
516 HTSelement :: uv1(FloatArray &answer, double x, double y)
517 {
518  answer(0) = x;
519  answer(1) = 0;
520 } //end of uv1
521 
522 void
523 HTSelement :: uv2(FloatArray &answer, double x, double y)
524 {
525  answer(0) = y;
526  answer(1) = 0;
527 } //end of uv2
528 
529 void
530 HTSelement :: uv3(FloatArray &answer, double x, double y)
531 {
532  answer(0) = 0;
533  answer(1) = x;
534 } //end of uv3
535 
536 void
537 HTSelement :: uv4(FloatArray &answer, double x, double y)
538 {
539  answer(0) = 0;
540  answer(1) = y;
541 } //end of uv4
542 
543 void
544 HTSelement :: sv1(FloatArray &answer, double x, double y)
545 {
546  answer(0) = 2 * mu + lambda;
547  answer(1) = lambda;
548  answer(2) = 0;
549 } //end of sv1
550 
551 void
552 HTSelement :: sv2(FloatArray &answer, double x, double y)
553 {
554  answer(0) = 0;
555  answer(1) = 0;
556  answer(2) = mu;
557 } //end of sv2
558 
559 void
560 HTSelement :: sv3(FloatArray &answer, double x, double y)
561 {
562  answer(0) = 0;
563  answer(1) = 0;
564  answer(2) = mu;
565 } //end of sv3
566 
567 void
568 HTSelement :: sv4(FloatArray &answer, double x, double y)
569 {
570  answer(0) = lambda;
571  answer(1) = 2 * mu + lambda;
572  answer(2) = 0;
573 } //end of sv4
574 
575 void
576 HTSelement :: uv5(FloatArray &answer, double x, double y)
577 {
578  answer(0) = x * y;
579  answer(1) = -0.5 * y * y * ( lambda + mu ) / ( 2 * mu + lambda );
580 } //end of uv5
581 
582 void
583 HTSelement :: uv6(FloatArray &answer, double x, double y)
584 {
585  answer(0) = -( -2 * y * y * mu - y * y * lambda + x * x * mu ) / ( 2 * mu + lambda );
586  answer(1) = 0;
587 } //end of uv6
588 
589 void
590 HTSelement :: uv7(FloatArray &answer, double x, double y)
591 {
592  answer(0) = 0;
593  answer(1) = ( 2 * x * x * mu + x * x * lambda - y * y * mu ) / ( 2 * mu + lambda );
594 } //end of uv7
595 
596 void
597 HTSelement :: uv8(FloatArray &answer, double x, double y)
598 {
599  answer(0) = -0.5 * x * x * ( lambda + mu ) / ( 2 * mu + lambda );
600  answer(1) = x * y;
601 } //end of uv8
602 
603 void
604 HTSelement :: sv5(FloatArray &answer, double x, double y)
605 {
606  answer(0) = mu * y * ( 4 * mu + 3 * lambda ) / ( 2 * mu + lambda );
607  answer(1) = -mu * y;
608  answer(2) = mu * x;
609 } //end of sv5
610 
611 void
612 HTSelement :: sv6(FloatArray &answer, double x, double y)
613 {
614  answer(0) = -2 * mu * x;
615  answer(1) = -2 * lambda * mu * x / ( 2 * mu + lambda );
616  answer(2) = 2 * mu * y;
617 } //end of sv6
618 
619 void
620 HTSelement :: sv7(FloatArray &answer, double x, double y)
621 {
622  answer(0) = -2 * lambda * y * mu / ( 2 * mu + lambda );
623  answer(1) = -2 * mu * y;
624  answer(2) = 2 * mu * x;
625 } //end of sv7
626 
627 void
628 HTSelement :: sv8(FloatArray &answer, double x, double y)
629 {
630  answer(0) = -mu * x;
631  answer(1) = mu * x * ( 4 * mu + 3 * lambda ) / ( 2 * mu + lambda );
632  answer(2) = mu * y;
633 } //end of sv8
634 
635 void
636 HTSelement :: uv9(FloatArray &answer, double x, double y)
637 {
638  answer(0) = -( 1 / 3.0 ) * x * x * x * mu / ( 2 * mu + lambda ) + x * y * y;
639  answer(1) = -( 1 / 3.0 ) * y * y * y * ( lambda + mu ) / ( 2 * mu + lambda );
640 } //end of uv9
641 
642 void
643 HTSelement :: uv10(FloatArray &answer, double x, double y)
644 {
645  answer(0) = -3 * x * x * y * ( 2 * mu + lambda ) / ( 2 * lambda + 3 * mu ) + y * y * y;
646  answer(1) = 3 * x * y * y * ( lambda + mu ) / ( 2 * lambda + 3 * mu );
647 } //end of uv10
648 
649 void
650 HTSelement :: uv11(FloatArray &answer, double x, double y)
651 {
652  answer(0) = -3 * x * x * y * ( -mu - lambda ) / ( 2 * lambda + 3 * mu );
653  answer(1) = x * x * x + 3 * x * y * y * ( -lambda - 2 * mu ) / ( 2 * lambda + 3 * mu );
654 } //end of uv11
655 
656 void
657 HTSelement :: uv12(FloatArray &answer, double x, double y)
658 {
659  answer(0) = -( 1 / 3.0 ) * x * x * x * ( lambda + mu ) / ( 2 * mu + lambda );
660  answer(1) = x * x * y - ( 1 / 3.0 ) * y * y * y * mu / ( 2 * mu + lambda );
661 } //end of uv12
662 
663 void
664 HTSelement :: sv9(FloatArray &answer, double x, double y)
665 {
666  answer(0) = -mu * ( -4 * mu * y * y - 3 * lambda * y * y + 2 * x * x * mu + lambda * x * x ) / ( 2 * mu + lambda );
667  answer(1) = -mu * ( lambda * y * y + 2 * mu * y * y + lambda * x * x ) / ( 2 * mu + lambda );
668  answer(2) = 2 * mu * x * y;
669 } //end of sv9
670 
671 void
672 HTSelement :: sv10(FloatArray &answer, double x, double y)
673 {
674  answer(0) = -6 * x * y * mu * ( 4 * mu + 3 * lambda ) / ( 2 * lambda + 3 * mu );
675  answer(1) = 6 * mu * x * y * ( 2 * mu + lambda ) / ( 2 * lambda + 3 * mu );
676  answer(2) = -3 * mu * ( 2 * x * x * mu + x * x * lambda - 3 * lambda * y * y - 4 * mu * y * y ) / ( 2 * lambda + 3 * mu );
677 } //end of sv10
678 
679 void
680 HTSelement :: sv11(FloatArray &answer, double x, double y)
681 {
682  answer(0) = 6 * mu * x * y * ( 2 * mu + lambda ) / ( 2 * lambda + 3 * mu );
683  answer(1) = -6 * x * y * mu * ( 4 * mu + 3 * lambda ) / ( 2 * lambda + 3 * mu );
684  answer(2) = 3 * mu * ( -2 * mu * y * y - lambda * y * y + 3 * x * x * lambda + 4 * x * x * mu ) / ( 2 * lambda + 3 * mu );
685 } //end of sv11
686 
687 void
688 HTSelement :: sv12(FloatArray &answer, double x, double y)
689 {
690  answer(0) = -mu * ( x * x * lambda + 2 * x * x * mu + lambda * y * y ) / ( 2 * mu + lambda );
691  answer(1) = mu * ( 4 * x * x * mu + 3 * x * x * lambda - 2 * mu * y * y - lambda * y * y ) / ( 2 * mu + lambda );
692  answer(2) = 2 * mu * x * y;
693 } //end of sv12
694 
695 #if 0
696 void
697 HTSelement :: sv13(FloatArray &answer, double x, double y)
698 {
699  answer(0) = ( 6 * x * x * y * y * mu + x * x * x * x * lambda - 2 * y * y * y * y * mu - y * y * y * y * lambda ) / lambda;
700  answer(1) = -4 * x * x * x * y * ( lambda + mu ) / lambda;
701 } //end of sv13
702 
703 void
704 HTSelement :: uv13(FloatArray &answer, double x, double y)
705 {
706  answer(0) = x * y * ( y * y * mu + x * x * lambda ) / lambda;
707  answer(1) = 0.5 * x * x * ( lambda + mu ) * ( x * x - 3 * y * y ) / lambda;
708 } //end of uv13
709 
710 void
711 HTSelement :: uv15(FloatArray &answer, double x, double y)
712 {
713  answer(0) = -0.5 * y * y * ( lambda + mu ) * ( 3 * x * x - y * y ) / lambda;
714  answer(1) = x * y * ( x * x * mu + y * y * lambda ) / lambda;
715 } //end of uv15
716 
717 void
718 HTSelement :: uv16(FloatArray &answer, double x, double y)
719 {
720  answer(0) = -4 * x * y * y * y * ( lambda + mu ) / lambda;
721  answer(1) = -( -6 * x * x * y * y * mu - y * y * y * y * lambda + x * x * x * x * lambda + 2 * x * x * x * x * mu ) / lambda;
722 } //end of uv16
723 
724 void
725 HTSelement :: sv13(FloatArray &answer, double x, double y)
726 {
727  answer(0) = 4 * mu * x * ( 6 * y * y * mu + x * x * lambda + 3 * y * y * lambda ) / lambda;
728  answer(1) = -4 * mu * x * ( 3 * x * x * lambda + 2 * x * x * mu - 3 * lambda * y * y ) / lambda;
729  answer(2) = -4 * mu * y * ( 2 * y * y * mu + y * y * lambda + 3 * x * x * lambda ) / lambda;
730 } //end of sv13
731 
732 void
733 HTSelement :: sv14(FloatArray &answer, double x, double y)
734 {
735  answer(0) = mu * y * ( 2 * y * y * mu + 3 * x * x * lambda + lambda * y * y ) / lambda;
736  answer(1) = -mu * y * ( 9 * x * x * lambda + 6 * x * x * mu - lambda * y * y ) / lambda;
737  answer(2) = mu * x * ( 3 * x * x * lambda - 3 * y * y * lambda + 2 * x * x * mu ) / lambda;
738 } //end of sv14
739 
740 void
741 HTSelement :: sv15(FloatArray &answer, double x, double y)
742 {
743  answer(0) = mu * x * ( -9 * y * y * lambda - 6 * y * y * mu + lambda * x * x ) / lambda;
744  answer(1) = mu * x * ( 3 * y * y * lambda + 2 * x * x * mu + lambda * x * x ) / lambda;
745  answer(2) = -mu * y * ( -3 * y * y * lambda - 2 * y * y * mu + 3 * x * x * lambda ) / lambda;
746 } //end of sv15
747 
748 void
749 HTSelement :: sv16(FloatArray &answer, double x, double y)
750 {
751  answer(0) = 4 * y * mu * ( -3 * y * y * lambda - 2 * y * y * mu + 3 * lambda * x * x ) / lambda;
752  answer(1) = 4 * mu * y * ( y * y * lambda + 6 * x * x * mu + 3 * lambda * x * x ) / lambda;
753  answer(2) = -4 * mu * x * ( x * x * lambda + 2 * x * x * mu + 3 * y * y * lambda ) / lambda;
754 } //end of sv16
755 
756 void
757 HTSelement :: uv17(FloatArray &answer, double x, double y)
758 {
759  answer(0) = x * ( 2 * x * x * x * x * lambda + x * x * x * x * mu - 5 * y * y * y * y * mu - 10 * x * x * y * y * lambda ) / ( 2 * lambda + mu );
760  answer(1) = -10 * x * x * y * ( lambda + mu ) * ( x * x - y * y ) / ( 2 * lambda + mu );
761 } //end of uv17
762 
763 void
764 HTSelement :: uv18(FloatArray &answer, double x, double y)
765 {
766  answer(0) = ( 1 / 5.0 ) * y * ( 10 * x * x * y * y * mu - y * y * y * y * lambda - 2 * y * y * y * y * mu + 5 * x * x * x * x * lambda ) / lambda;
767  answer(1) = ( 2 / 5.0 ) * x * x * x * ( lambda + mu ) * ( -5 * y * y + x * x ) / lambda;
768 } //end of uv18
769 
770 void
771 HTSelement :: uv19(FloatArray &answer, double x, double y)
772 {
773  answer(0) = -( 2 / 5.0 ) * y * y * y * ( lambda + mu ) * ( 5 * x * x - y * y ) / lambda;
774  answer(1) = -( 1 / 5.0 ) * x * ( x * x * x * x * lambda + 2 * x * x * x * x * mu - 5 * y * y * y * y * lambda - 10 * x * x * y * y * mu ) / lambda;
775 } //end of uv19
776 
777 void
778 HTSelement :: uv20(FloatArray &answer, double x, double y)
779 {
780  answer(0) = 10 * x * y * y * ( lambda + mu ) * ( -y * y + x * x ) / ( 2 * lambda + mu );
781  answer(1) = -y * ( 5 * x * x * x * x * mu - 2 * y * y * y * y * lambda - y * y * y * y * mu + 10 * x * x * y * y * lambda ) / ( 2 * lambda + mu );
782 } //end of uv20
783 
784 void
785 HTSelement :: sv17(FloatArray &answer, double x, double y)
786 {
787  answer(0) = 5 * mu * ( -6 * x * x * y * y * lambda + 3 * x * x * x * x * lambda + 2 * x * x * x * x * mu - 2 * y * y * y * y * mu - lambda * y * y * y * y ) / ( 2 * lambda + mu );
788  answer(1) = -5 * mu * ( 5 * x * x * x * x * lambda - 18 * x * x * y * y * lambda + 4 * x * x * x * x * mu - 12 * x * x * y * y * mu + lambda * y * y * y * y ) / ( 2 * lambda + mu );
789  answer(2) = -20 * mu * x * y * ( 3 * x * x * lambda + 2 * x * x * mu - y * y * lambda ) / ( 2 * lambda + mu );
790 } //end of sv17
791 
792 void
793 HTSelement :: sv18(FloatArray &answer, double x, double y)
794 {
795  answer(0) = 4 * mu * x * y * ( 2 * y * y * mu + x * x * lambda + lambda * y * y ) / lambda;
796  answer(1) = -4 * mu * x * y * ( 3 * x * x * lambda + 2 * x * x * mu - lambda * y * y ) / lambda;
797  answer(2) = mu * ( 3 * x * x * x * x * lambda + 2 * x * x * x * x * mu - y * y * y * y * lambda - 2 * y * y * y * y * mu - 6 * x * x * y * y * lambda ) / lambda;
798 } //end of sv18
799 
800 void
801 HTSelement :: sv19(FloatArray &answer, double x, double y)
802 {
803  answer(0) = 4 * mu * x * y * ( -3 * y * y * lambda - 2 * y * y * mu + lambda * x * x ) / lambda;
804  answer(1) = 4 * mu * x * y * ( 2 * x * x * mu + y * y * lambda + lambda * x * x ) / lambda;
805  answer(2) = -mu * ( 6 * x * x * y * y * lambda + x * x * x * x * lambda + 2 * x * x * x * x * mu - 3 * y * y * y * y * lambda - 2 * y * y * y * y * mu ) / lambda;
806 } //end of sv19
807 
808 void
809 HTSelement :: sv20(FloatArray &answer, double x, double y)
810 {
811  answer(0) = -5 * mu * ( -18 * x * x * y * y * lambda + 5 * y * y * y * y * lambda - 12 * x * x * y * y * mu + 4 * y * y * y * y * mu + lambda * x * x * x * x ) / ( 2 * lambda + mu );
812  answer(1) = -5 * mu * ( 6 * x * x * y * y * lambda - 3 * y * y * y * y * lambda - 2 * y * y * y * y * mu + 2 * x * x * x * x * mu + lambda * x * x * x * x ) / ( 2 * lambda + mu );
813  answer(2) = 20 * mu * x * y * ( -3 * y * y * lambda + x * x * lambda - 2 * y * y * mu ) / ( 2 * lambda + mu );
814 } //end of sv20
815 
816 void
817 HTSelement :: uv21(FloatArray &answer, double x, double y)
818 {
819  answer(0) = ( -15 * x * x * y * y * y * y * mu - 15 * x * x * x * x * y * y * lambda + 2 * x * x * x * x * x * x * lambda + x * x * x * x * x * x * mu + y * y * y * y * y * y * lambda + \
820  2 * y * y * y * y * y * y * mu ) / ( 2 * lambda + mu );
821  answer(1) = -4 * x * x * x * y * ( lambda + mu ) * ( -5 * y * y + 3 * x * x ) / ( 2 * lambda + mu );
822 } //end of uv21
823 
824 void
825 HTSelement :: uv22(FloatArray &answer, double x, double y)
826 {
827  answer(0) = ( 1 / 3.0 ) * x * y * ( -10 * x * x * y * y * lambda - 3 * y * y * y * y * mu + 6 * x * x * x * x * lambda + 3 * x * x * x * x * mu ) / ( 2 * lambda + mu );
828  answer(1) = 0.5 * x * x * ( lambda + mu ) * ( 5 * y * y * y * y + x * x * x * x - 10 * x * x * y * y ) / ( 2 * lambda + mu );
829 } //end of uv22
830 
831 void
832 HTSelement :: uv23(FloatArray &answer, double x, double y)
833 {
834  answer(0) = 0.5 * y * y * ( lambda + mu ) * ( y * y * y * y + 5 * x * x * x * x - 10 * x * x * y * y ) / ( 2 * lambda + mu );
835  answer(1) = -( 1 / 3.0 ) * x * y * ( -6 * y * y * y * y * lambda - 3 * y * y * y * y * mu + 3 * x * x * x * x * mu + 10 * x * x * y * y * lambda ) / ( 2 * lambda + mu );
836 } //end of uv23
837 
838 void
839 HTSelement :: uv24(FloatArray &answer, double x, double y)
840 {
841  answer(0) = 4 * x * y * y * y * ( lambda + mu ) * ( 5 * x * x - 3 * y * y ) / ( 2 * lambda + mu );
842  answer(1) = ( 2 * y * y * y * y * y * y * lambda + y * y * y * y * y * y * mu + x * x * x * x * x * x * lambda + 2 * x * x * x * x * x * x * mu - 15 * x * x * x * x * y * y * mu - \
843  15 * x * x * y * y * y * y * lambda ) / ( 2 * lambda + mu );
844 } //end of uv24
845 
846 void
847 HTSelement :: sv21(FloatArray &answer, double x, double y)
848 {
849  answer(0) = 6 * mu * x * ( 3 * x * x * x * x * lambda + 2 * x * x * x * x * mu - 10 * y * y * y * y * mu - 10 * x * x * y * y * lambda - 5 * lambda * y * y * y * y ) / ( 2 * lambda + mu );
850  answer(1) = -6 * mu * x * ( -30 * x * x * y * y * lambda + 5 * x * x * x * x * lambda - 20 * x * x * y * y * mu + 4 * x * x * x * x * mu + 5 * lambda * y * y * y * y ) / ( 2 * lambda + mu );
851  answer(2) = -6 * mu * y * ( -y * y * y * y * lambda - 2 * y * y * y * y * mu + 15 * x * x * x * x * lambda - 10 * x * x * y * y * lambda + 10 * x * x * x * x * mu ) / ( 2 * lambda + mu );
852 } //end of sv21
853 
854 void
855 HTSelement :: sv22(FloatArray &answer, double x, double y)
856 {
857  answer(0) = mu * y * ( -10 * x * x * y * y * lambda - 2 * y * y * y * y * mu + 15 * x * x * x * x * lambda + 10 * x * x * x * x * mu - lambda * y * y * y * y ) / ( 2 * lambda + mu );
858  answer(1) = -mu * y * ( -30 * x * x * y * y * lambda + 25 * x * x * x * x * lambda - 20 * x * x * y * y * mu + 20 * x * x * x * x * mu + lambda * y * y * y * y ) / ( 2 * lambda + mu );
859  answer(2) = mu * x * ( -30 * x * x * y * y * lambda + 5 * x * x * x * x * lambda + 4 * x * x * x * x * mu + 5 * y * y * y * y * lambda - 20 * x * x * y * y * mu ) / ( 2 * lambda + mu );
860 } //end of sv22
861 
862 void
863 HTSelement :: sv23(FloatArray &answer, double x, double y)
864 {
865  answer(0) = -mu * x * ( 25 * y * y * y * y * lambda - 30 * x * x * y * y * lambda + 20 * y * y * y * y * mu - 20 * x * x * y * y * mu + lambda * x * x * x * x ) / ( 2 * lambda + mu );
866  answer(1) = -mu * x * ( 2 * x * x * x * x * mu - 15 * y * y * y * y * lambda - 10 * y * y * y * y * mu + 10 * x * x * y * y * lambda + lambda * x * x * x * x ) / ( 2 * lambda + mu );
867  answer(2) = mu * y * ( 5 * x * x * x * x * lambda + 5 * y * y * y * y * lambda + 4 * y * y * y * y * mu - 30 * x * x * y * y * lambda - 20 * x * x * y * y * mu ) / ( 2 * lambda + mu );
868 } //end of sv23
869 
870 void
871 HTSelement :: sv24(FloatArray &answer, double x, double y)
872 {
873  answer(0) = -6 * mu * y * ( -30 * x * x * y * y * lambda + 5 * y * y * y * y * lambda - 20 * x * x * y * y * mu + 4 * y * y * y * y * mu + 5 * lambda * x * x * x * x ) / ( 2 * lambda + mu );
874  answer(1) = -6 * mu * y * ( 10 * x * x * x * x * mu - 3 * y * y * y * y * lambda - 2 * y * y * y * y * mu + 10 * x * x * y * y * lambda + 5 * lambda * x * x * x * x ) / ( 2 * lambda + mu );
875  answer(2) = 6 * mu * x * ( -15 * y * y * y * y * lambda - 10 * y * y * y * y * mu + x * x * x * x * lambda + 2 * x * x * x * x * mu + 10 * x * x * y * y * lambda ) / ( 2 * lambda + mu );
876 } //end of sv24
877 #endif
878 
879 void
880 HTSelement :: uv25_4(FloatArray &answer, double x, double y)
881 {
882  answer(0) = -5 * x * x * x * x + 30 * x * x * y * y - 5 * y * y * y * y;
883  answer(1) = 20 * x * x * x * y - 20 * x * y * y * y;
884 } //end of uv25_4
885 
886 void
887 HTSelement :: sv25_4(FloatArray &answer, double x, double y)
888 {
889  answer(0) = 2 * mu * ( -20 * x * x * x + 60 * x * y * y );
890  answer(1) = 2 * mu * ( 20 * x * x * x - 60 * x * y * y );
891  answer(2) = mu * ( 120 * x * x * y - 40 * y * y * y );
892 } //end of sv25_4
893 
894 
895 //u_gamma functions
896 double
898 {
899  return 1;
900 } //end of u_gammaConst
901 
902 double
904 {
905  // double ksi = 1; must be calculated
906  return gp->giveNaturalCoordinate(1);
907 } //end of u_gammaLin
908 } // end namespace oofem
double computeVolumeAroundSide(GaussPoint *gp, int elemSideNumber)
Definition: htselement.C:148
void uv5(FloatArray &answer, double x, double y)
Definition: htselement.C:576
void uv12(FloatArray &answer, double x, double y)
Definition: htselement.C:657
void uv3(FloatArray &answer, double x, double y)
Definition: htselement.C:530
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
void uv4(FloatArray &answer, double x, double y)
Definition: htselement.C:537
virtual IntegrationRule * giveIntegrationRule(int i)
Definition: element.h:835
void sv1(FloatArray &answer, double x, double y)
Definition: htselement.C:544
void computePrescribedDisplacementLoadVectorAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
Definition: htselement.C:235
void uv8(FloatArray &answer, double x, double y)
Definition: htselement.C:597
void computeFMatrixAt(FloatMatrix &answer, FloatMatrix N, GaussPoint *gp, int sideNumber)
Definition: htselement.C:301
void uv6(FloatArray &answer, double x, double y)
Definition: htselement.C:583
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
void uv7(FloatArray &answer, double x, double y)
Definition: htselement.C:590
void clear()
Clears receiver (zero size).
Definition: floatarray.h:206
void sv11(FloatArray &answer, double x, double y)
Definition: htselement.C:680
void sv7(FloatArray &answer, double x, double y)
Definition: htselement.C:620
void uv10(FloatArray &answer, double x, double y)
Definition: htselement.C:643
void computeCenterOfGravity()
Definition: htselement.C:104
void sv12(FloatArray &answer, double x, double y)
Definition: htselement.C:688
virtual double giveCoordinate(int i)
Definition: node.C:82
Class implementing an array of integers.
Definition: intarray.h:61
MatResponseMode
Describes the character of characteristic material matrix.
void computeSvMatrixAt(FloatMatrix &answer, GaussPoint *gp, int sideNumber)
Definition: htselement.C:402
void uv11(FloatArray &answer, double x, double y)
Definition: htselement.C:650
void uv9(FloatArray &answer, double x, double y)
Definition: htselement.C:636
Abstract base class for all "structural" finite elements.
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
Definition: gausspoint.h:136
void computeAMatrixAt(FloatMatrix &answer, FloatMatrix N, GaussPoint *gp, int sideNumber)
Definition: htselement.C:317
void sv5(FloatArray &answer, double x, double y)
Definition: htselement.C:604
void sv2(FloatArray &answer, double x, double y)
Definition: htselement.C:552
REGISTER_Element(LSpace)
void clear()
Clears the array (zero size).
Definition: intarray.h:177
void sv8(FloatArray &answer, double x, double y)
Definition: htselement.C:628
virtual double giveWeight()
Returns integration weight of receiver.
Definition: gausspoint.h:181
void sv3(FloatArray &answer, double x, double y)
Definition: htselement.C:560
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: htselement.C:75
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
Node * giveSideNode(int elementSideNumber, int nodeNumber)
Definition: htselement.C:129
void sv10(FloatArray &answer, double x, double y)
Definition: htselement.C:672
void computeOutwardNormalMatrix(FloatMatrix &answer, int sideNumber)
Definition: htselement.C:282
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
void uv25_4(FloatArray &answer, double x, double y)
Definition: htselement.C:880
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
Definition: floatarray.C:708
void sv9(FloatArray &answer, double x, double y)
Definition: htselement.C:664
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
void sv25_4(FloatArray &answer, double x, double y)
Definition: htselement.C:887
void computePsVectorAt(FloatArray &answer, FloatArray t, GaussPoint *gp)
Definition: htselement.C:224
double u_gammaLin(GaussPoint *gp)
Definition: htselement.C:903
int numberOfGaussPoints
Number of integration points as specified by nip.
Definition: element.h:188
void sv4(FloatArray &answer, double x, double y)
Definition: htselement.C:568
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes numerically stiffness matrix of receiver.
Definition: htselement.C:170
Class representing vector of real numbers.
Definition: floatarray.h:82
void computePuVectorAt(FloatArray &answer, FloatMatrix N, FloatArray u, GaussPoint *gp, int sideNumber)
Definition: htselement.C:211
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
void computeUgammaMatrixAt(FloatMatrix &answer, GaussPoint *gp)
Definition: htselement.C:491
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual void giveDofManDofIDMask(int inode, IntArray &) const
Returns dofmanager dof mask for node.
Definition: htselement.C:63
HTSelement(int n, Domain *d)
Definition: htselement.C:49
double norm(const FloatArray &x)
Definition: floatarray.C:985
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
Class representing the general Input Record.
Definition: inputrecord.h:101
void add(const FloatMatrix &a)
Adds matrix to the receiver.
Definition: floatmatrix.C:1023
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
Definition: htselement.C:91
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
Definition: floatmatrix.C:367
void uv2(FloatArray &answer, double x, double y)
Definition: htselement.C:523
void beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
Definition: floatmatrix.C:323
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 computeUvMatrixAt(FloatMatrix &answer, GaussPoint *gp, int sideNubmer)
Definition: htselement.C:331
void zero()
Zeroes all coefficient of receiver.
Definition: floatmatrix.C:1326
double u_gammaConst(GaussPoint *gp)
Definition: htselement.C:897
void uv1(FloatArray &answer, double x, double y)
Definition: htselement.C:516
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
Definition: floatmatrix.C:337
bool containsOnlyZeroes() const
Returns nonzero if all coefficients of the receiver are 0, else returns zero.
Definition: floatarray.C:646
the oofem namespace is to define a context or scope in which all oofem names are defined.
void sv6(FloatArray &answer, double x, double y)
Definition: htselement.C:612
Class implementing node in finite element mesh.
Definition: node.h:87
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
Definition: floatmatrix.C:835
void negated()
Switches the sign of every coefficient of receiver.
Definition: floatarray.C:739
double giveSideLength(int sideNumber)
Definition: htselement.C:156
Node * giveNode(int i) const
Returns reference to the i-th node of element.
Definition: element.h:610
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
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

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