OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
tet21stokes.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 "tet21stokes.h"
36 #include "node.h"
37 #include "dof.h"
38 #include "domain.h"
39 #include "gaussintegrationrule.h"
40 #include "gausspoint.h"
41 #include "bcgeomtype.h"
43 #include "load.h"
44 #include "bodyload.h"
45 #include "boundaryload.h"
46 #include "mathfem.h"
47 #include "fluiddynamicmaterial.h"
48 #include "fei3dtetlin.h"
49 #include "fei3dtetquad.h"
50 #include "fluidcrosssection.h"
51 #include "assemblercallback.h"
52 #include "classfactory.h"
53 
54 namespace oofem {
55 REGISTER_Element(Tet21Stokes);
56 
57 // Set up interpolation coordinates
60 // Set up ordering vectors (for assembling)
61 IntArray Tet21Stokes :: momentum_ordering = {1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17, 18, 19,
62  20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34};
63 IntArray Tet21Stokes :: conservation_ordering = {4, 8, 12, 16};
64 IntArray Tet21Stokes :: surf_ordering [ 4 ] = {
65  { 1, 2, 3, 9, 10, 11, 5, 6, 7, 23, 24, 25, 20, 21, 22, 17, 18, 19},
66  { 1, 2, 3, 5, 6, 7, 13, 14, 15, 17, 18, 19, 29, 30, 31, 26, 27, 28},
67  { 5, 6, 7, 9, 10, 11, 13, 14, 15, 20, 21, 22, 32, 33, 34, 29, 30, 31},
68  { 1, 2, 3, 13, 14, 15, 9, 10, 11, 26, 27, 28, 32, 33, 34, 23, 24, 25}
69 };
70 
72 {
73  this->numberOfDofMans = 10;
74  this->numberOfGaussPoints = 5;
75 }
76 
78 { }
79 
81 {
82  if ( integrationRulesArray.size() == 0 ) {
83  integrationRulesArray.resize(1);
84  integrationRulesArray [ 0 ].reset( new GaussIntegrationRule(1, this, 1, 3) );
86  }
87 }
88 
90 {
91  return 34;
92 }
93 
94 void Tet21Stokes :: giveDofManDofIDMask(int inode, IntArray &answer) const
95 {
96  if ( inode <= 4 ) {
97  answer = {V_u, V_v, V_w, P_f};
98  } else {
99  answer = {V_u, V_v, V_w};
100  }
101 }
102 
104  TimeStep *tStep)
105 {
106  // Compute characteristic vector for this element. I.e the load vector(s)
107  if ( mtrx == ExternalForcesVector ) {
108  this->computeExternalForcesVector(answer, tStep);
109  } else if ( mtrx == InternalForcesVector ) {
110  this->computeInternalForcesVector(answer, tStep);
111  } else {
112  OOFEM_ERROR("Unknown Type of characteristic mtrx.");
113  }
114 }
115 
117  CharType mtrx, TimeStep *tStep)
118 {
119  // Compute characteristic matrix for this element. The only option is the stiffness matrix...
120  if ( mtrx == TangentStiffnessMatrix ) {
121  this->computeStiffnessMatrix(answer, TangentStiffness, tStep);
122  } else {
123  OOFEM_ERROR("Unknown Type of characteristic mtrx.");
124  }
125 }
126 
128 {
129  FluidDynamicMaterial *mat = static_cast< FluidCrossSection * >( this->giveCrossSection() )->giveFluidMaterial();
130  FloatArray a_pressure, a_velocity, devStress, epsp, Nh, dN_V(30);
131  FloatMatrix dN, B(6, 30);
132  double r_vol, pressure;
133  this->computeVectorOfVelocities(VM_Total, tStep, a_velocity);
134  this->computeVectorOfPressures(VM_Total, tStep, a_pressure);
135  FloatArray momentum, conservation;
136 
137  B.zero();
138  for ( GaussPoint *gp: *integrationRulesArray [ 0 ] ) {
139  const FloatArray &lcoords = gp->giveNaturalCoordinates();
140 
141  double detJ = fabs( this->interpolation_quad.evaldNdx( dN, lcoords, FEIElementGeometryWrapper(this) ) );
142  this->interpolation_lin.evalN( Nh, lcoords, FEIElementGeometryWrapper(this) );
143  double dV = detJ * gp->giveWeight();
144 
145  for ( int j = 0, k = 0; j < dN.giveNumberOfRows(); j++, k += 3 ) {
146  dN_V(k + 0) = B(0, k + 0) = B(3, k + 1) = B(4, k + 2) = dN(j, 0);
147  dN_V(k + 1) = B(1, k + 1) = B(3, k + 0) = B(5, k + 2) = dN(j, 1);
148  dN_V(k + 2) = B(2, k + 2) = B(4, k + 0) = B(5, k + 1) = dN(j, 2);
149  }
150 
151  epsp.beProductOf(B, a_velocity);
152  pressure = Nh.dotProduct(a_pressure);
153  mat->computeDeviatoricStressVector(devStress, r_vol, gp, epsp, pressure, tStep);
154 
155  momentum.plusProduct(B, devStress, dV);
156  momentum.add(-pressure * dV, dN_V);
157  conservation.add(r_vol * dV, Nh);
158  }
159 
160  answer.resize(34);
161  answer.zero();
162  answer.assemble(momentum, this->momentum_ordering);
163  answer.assemble(conservation, this->conservation_ordering);
164 }
165 
167 {
168  int load_number, load_id;
169  Load *load;
170  BodyLoad *bLoad;
171  bcGeomType ltype;
172  FloatArray vec;
173 
174  int nLoads = this->boundaryLoadArray.giveSize() / 2;
175  answer.clear();
176 
177  for ( int i = 1; i <= nLoads; i++ ) { // For each Neumann boundary condition
178  load_number = this->boundaryLoadArray.at(2 * i - 1);
179  load_id = this->boundaryLoadArray.at(2 * i);
180  load = this->domain->giveLoad(load_number);
181  ltype = load->giveBCGeoType();
182 
183  if ( ltype == SurfaceLoadBGT ) {
184  this->computeBoundarySurfaceLoadVector(vec, static_cast< BoundaryLoad * >(load), load_id, ExternalForcesVector, VM_Total, tStep);
185  answer.add(vec);
186  }
187  }
188 
189  nLoads = this->giveBodyLoadArray()->giveSize();
190  for ( int i = 1; i <= nLoads; i++ ) {
191  load = domain->giveLoad( bodyLoadArray.at(i) );
192  if ((bLoad=dynamic_cast<BodyLoad*>(load))) {
193  ltype = load->giveBCGeoType();
194  if ( ltype == BodyLoadBGT && load->giveBCValType() == ForceLoadBVT ) {
195  this->computeLoadVector(vec, bLoad, ExternalForcesVector, VM_Total, tStep);
196  answer.add(vec);
197  }
198  }
199  }
200 }
201 
203 {
204  if ( type != ExternalForcesVector ) {
205  answer.clear();
206  return;
207  }
208 
209  FloatArray N, gVector, temparray(30);
210 
211  load->computeComponentArrayAt(gVector, tStep, VM_Total);
212  temparray.zero();
213  if ( gVector.giveSize() ) {
214  for ( GaussPoint *gp: *integrationRulesArray [ 0 ] ) {
215  const FloatArray &lcoords = gp->giveNaturalCoordinates();
216 
217  double rho = static_cast< FluidCrossSection * >( this->giveCrossSection() )->giveDensity(gp);
218  double detJ = fabs( this->interpolation_quad.giveTransformationJacobian( lcoords, FEIElementGeometryWrapper(this) ) );
219  double dA = detJ * gp->giveWeight();
220 
221  this->interpolation_quad.evalN( N, lcoords, FEIElementGeometryWrapper(this) );
222  for ( int j = 0; j < N.giveSize(); j++ ) {
223  temparray(3 * j + 0) += N(j) * rho * gVector(0) * dA;
224  temparray(3 * j + 1) += N(j) * rho * gVector(1) * dA;
225  temparray(3 * j + 2) += N(j) * rho * gVector(2) * dA;
226  }
227  }
228  }
229 
230  answer.resize(34);
231  answer.zero();
232  answer.assemble(temparray, this->momentum_ordering);
233 }
234 
235  void Tet21Stokes :: computeBoundarySurfaceLoadVector(FloatArray &answer, BoundaryLoad *load, int iSurf, CharType type, ValueModeType mode, TimeStep *tStep, bool global)
236 {
237  if ( type != ExternalForcesVector ) {
238  answer.clear();
239  return;
240  }
241 
242  answer.resize(34);
243  answer.zero();
244 
245  if ( load->giveType() == TransmissionBC ) { // Neumann boundary conditions (traction)
246 
247  int numberOfSurfaceIPs = ( int ) ceil( ( load->giveApproxOrder() + 1. ) / 2. ) * 2;
248 
249  GaussIntegrationRule iRule(1, this, 1, 1);
250  FloatArray N, t, f(18);
251 
252  f.zero();
253  iRule.SetUpPointsOnTriangle(numberOfSurfaceIPs, _Unknown);
254 
255  for ( GaussPoint *gp: iRule ) {
256  const FloatArray &lcoords = gp->giveNaturalCoordinates();
257 
258  this->interpolation_quad.surfaceEvalN( N, iSurf, lcoords, FEIElementGeometryWrapper(this) );
259  double dA = gp->giveWeight() * this->interpolation_quad.surfaceGiveTransformationJacobian( iSurf, lcoords, FEIElementGeometryWrapper(this) );
260 
261  if ( load->giveFormulationType() == Load :: FT_Entity ) { // load in xi-eta system
262  load->computeValueAt(t, tStep, lcoords, VM_Total);
263  } else { // Edge load in x-y system
264  FloatArray gcoords;
265  this->interpolation_quad.surfaceLocal2global( gcoords, iSurf, lcoords, FEIElementGeometryWrapper(this) );
266  load->computeValueAt(t, tStep, gcoords, VM_Total);
267  }
268 
269  // Reshape the vector
270  for ( int j = 0; j < N.giveSize(); j++ ) {
271  f(3 * j + 0) += N(j) * t(0) * dA;
272  f(3 * j + 1) += N(j) * t(1) * dA;
273  f(3 * j + 2) += N(j) * t(2) * dA;
274  }
275  }
276 
277  answer.assemble(f, this->surf_ordering [ iSurf - 1 ]);
278  } else {
279  OOFEM_ERROR("Strange boundary condition type");
280  }
281 }
282 
284 {
285  FluidDynamicMaterial *mat = static_cast< FluidCrossSection * >( this->giveCrossSection() )->giveFluidMaterial();
286  FloatMatrix B(6, 30), EdB, K, G, Dp, DvT, C, Ed, dN;
287  FloatArray dN_V(30), Nlin, Ep, Cd, tmpA, tmpB;
288  double Cp;
289 
290  B.zero();
291 
292  for ( GaussPoint *gp: *this->integrationRulesArray [ 0 ] ) {
293  // Compute Gauss point and determinant at current element
294  const FloatArray &lcoords = gp->giveNaturalCoordinates();
295 
296  double detJ = fabs( this->interpolation_quad.evaldNdx( dN, lcoords, FEIElementGeometryWrapper(this) ) );
297  double dV = detJ * gp->giveWeight();
298  this->interpolation_lin.evalN( Nlin, lcoords, FEIElementGeometryWrapper(this) );
299 
300  for ( int j = 0, k = 0; j < dN.giveNumberOfRows(); j++, k += 3 ) {
301  dN_V(k + 0) = B(0, k + 0) = B(3, k + 1) = B(4, k + 2) = dN(j, 0);
302  dN_V(k + 1) = B(1, k + 1) = B(3, k + 0) = B(5, k + 2) = dN(j, 1);
303  dN_V(k + 2) = B(2, k + 2) = B(4, k + 0) = B(5, k + 1) = dN(j, 2);
304  }
305 
306  // Computing the internal forces should have been done first.
307  // dsigma_dev/deps_dev dsigma_dev/dp deps_vol/deps_dev deps_vol/dp
308  mat->giveStiffnessMatrices(Ed, Ep, Cd, Cp, mode, gp, tStep);
309 
310  EdB.beProductOf(Ed, B);
311  K.plusProductSymmUpper(B, EdB, dV);
312  G.plusDyadUnsym(dN_V, Nlin, -dV);
313  C.plusDyadSymmUpper(Nlin, Cp * dV);
314 
315  tmpA.beTProductOf(B, Ep);
316  Dp.plusDyadUnsym(tmpA, Nlin, dV);
317 
318  tmpB.beTProductOf(B, Cd);
319  DvT.plusDyadUnsym(Nlin, tmpB, dV);
320  }
321 
322  K.symmetrized();
323  C.symmetrized();
324  FloatMatrix GTDvT, GDp;
325  GTDvT.beTranspositionOf(G);
326  GTDvT.add(DvT);
327  GDp = G;
328  GDp.add(Dp);
329 
330  answer.resize(34, 34);
331  answer.zero();
332  answer.assemble(K, this->momentum_ordering);
333  answer.assemble(GDp, this->momentum_ordering, this->conservation_ordering);
334  answer.assemble(GTDvT, this->conservation_ordering, this->momentum_ordering);
335  answer.assemble(C, this->conservation_ordering);
336  // K.printYourself();
337  // GDp.printYourself();
338  // GTDvT.printYourself();
339  // C.printYourself();
340 }
341 
343 {
344  return & interpolation_quad;
345 }
346 
348 {
349  if ( id == P_f ) {
350  return & interpolation_lin;
351  } else {
352  return & interpolation_quad;
353  }
354 }
355 
357 {
359 }
360 
361 // Some extension Interfaces to follow:
362 
364 {
365  switch ( it ) {
367  return static_cast< NodalAveragingRecoveryModelInterface * >(this);
368 
370  return static_cast< SpatialLocalizerInterface * >(this);
371 
373  return static_cast< EIPrimaryUnknownMapperInterface * >(this);
374 
375  default:
376  return FMElement :: giveInterface(it);
377  }
378 }
379 
381  TimeStep *tStep, const FloatArray &lcoords, FloatArray &answer)
382 {
383  FloatArray n, n_lin;
384  this->interpolation_quad.evalN( n, lcoords, FEIElementGeometryWrapper(this) );
385  this->interpolation_lin.evalN( n_lin, lcoords, FEIElementGeometryWrapper(this) );
386  answer.resize(4);
387  answer.zero();
388  for ( int i = 1; i <= n.giveSize(); i++ ) {
389  answer(0) += n.at(i) * this->giveNode(i)->giveDofWithID(V_u)->giveUnknown(mode, tStep);
390  answer(1) += n.at(i) * this->giveNode(i)->giveDofWithID(V_v)->giveUnknown(mode, tStep);
391  answer(2) += n.at(i) * this->giveNode(i)->giveDofWithID(V_w)->giveUnknown(mode, tStep);
392  }
393 
394  for ( int i = 1; i <= n_lin.giveSize(); i++ ) {
395  answer(3) += n_lin.at(i) * this->giveNode(i)->giveDofWithID(P_f)->giveUnknown(mode, tStep);
396  }
397 }
398 
400 {
401  if ( type == IST_Pressure ) {
402  answer.resize(1);
403  if ( node <= 4 ) {
404  answer.at(1) = this->giveNode(node)->giveDofWithID(P_f)->giveUnknown(VM_Total, tStep);
405  } else {
406  IntArray eNodes;
407  this->interpolation_quad.computeLocalEdgeMapping(eNodes, node - 4);
408  answer.at(1) = 0.5 * (
409  this->giveNode( eNodes.at(1) )->giveDofWithID(P_f)->giveUnknown(VM_Total, tStep) +
410  this->giveNode( eNodes.at(2) )->giveDofWithID(P_f)->giveUnknown(VM_Total, tStep) );
411  }
412  } else {
413  answer.clear();
414  }
415 }
416 
417 } // end namespace oofem
CrossSection * giveCrossSection()
Definition: element.C:495
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
The element interface required by NodalAvergagingRecoveryModel.
virtual void giveCharacteristicVector(FloatArray &answer, CharType type, ValueModeType mode, TimeStep *tStep)
Computes characteristic vector of receiver of requested type in given time step.
Definition: tet21stokes.C:103
static FEI3dTetQuad interpolation_quad
Interpolation for geometry and velocity.
Definition: tet21stokes.h:64
Class and object Domain.
Definition: domain.h:115
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
Definition: tet21stokes.C:363
Fluid cross-section.
virtual double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the determinant of the transformation.
Definition: feinterpol.C:43
Abstract base class for all fluid materials.
Domain * domain
Link to domain object, useful for communicating with other FEM components.
Definition: femcmpnn.h:82
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
Definition: tet21stokes.C:399
bcGeomType
Type representing the geometric character of loading.
Definition: bcgeomtype.h:40
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
Class implementing element body load, acting over whole element volume (e.g., the dead weight)...
Definition: bodyload.h:49
virtual ~Tet21Stokes()
Definition: tet21stokes.C:77
void clear()
Clears receiver (zero size).
Definition: floatarray.h:206
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
Definition: fei3dtetquad.C:147
virtual double giveUnknown(ValueModeType mode, TimeStep *tStep)=0
The key method of class Dof.
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
Definition: element.C:779
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
Definition: fei3dtetlin.C:43
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
Computes boundary condition value - its components values at given time.
Definition: load.C:82
void plusDyadUnsym(const FloatArray &a, const FloatArray &b, double dV)
Adds to the receiver the product .
Definition: floatmatrix.C:811
virtual void giveStiffnessMatrices(FloatMatrix &dsdd, FloatArray &dsdp, FloatArray &dedd, double &dedp, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the 4 tangents of the compressible material response in 3D.
virtual void computeLocalEdgeMapping(IntArray &edgeNodes, int iedge)
Definition: fei3dtetquad.C:354
virtual void giveDofManDofIDMask(int inode, IntArray &answer) const
Gives the dof ID mask for the element.
Definition: tet21stokes.C:94
virtual FEInterpolation * giveInterpolation() const
Definition: tet21stokes.C:342
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.
Distributed body load.
Definition: bcgeomtype.h:43
void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, TimeStep *tStep)
Definition: tet21stokes.C:283
Class representing a general abstraction for finite element interpolation class.
Definition: feinterpol.h:132
Tet21Stokes(int n, Domain *d)
Definition: tet21stokes.C:71
virtual void computeVectorOfPressures(ValueModeType mode, TimeStep *tStep, FloatArray &pressures)
Definition: fmelement.C:55
virtual void computeBoundarySurfaceLoadVector(FloatArray &answer, BoundaryLoad *load, int boundary, CharType type, ValueModeType mode, TimeStep *tStep, bool global=true)
Computes the contribution of the given load at the given boundary surface in global coordinate system...
Definition: tet21stokes.C:235
static IntArray surf_ordering[4]
Ordering of dofs on surfaces. Used to assemble edge loads (only momentum balance) ...
Definition: tet21stokes.h:70
void computeExternalForcesVector(FloatArray &answer, TimeStep *tStep)
Definition: tet21stokes.C:166
virtual void surfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of edge interpolation functions (shape functions) at given point.
Definition: fei3dtetquad.C:396
virtual void computeDeviatoricStressVector(FloatArray &stress_dev, double &epsp_vol, GaussPoint *gp, const FloatArray &eps, double pressure, TimeStep *tStep)
Computes the deviatoric stress vector and volumetric strain rate from given deviatoric strain and pre...
Abstract base class representing a boundary load (force, momentum, ...) that acts directly on a bound...
Definition: boundaryload.h:110
virtual void computeVectorOfVelocities(ValueModeType mode, TimeStep *tStep, FloatArray &velocities)
Definition: fmelement.C:48
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
Definition: floatarray.C:463
#define OOFEM_ERROR(...)
Definition: error.h:61
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
Definition: fei3dtetquad.C:125
REGISTER_Element(LSpace)
DofIDItem
Type representing particular dof type.
Definition: dofiditem.h:86
virtual FormulationType giveFormulationType()
Specifies is load should take local or global coordinates.
Definition: load.h:155
Neumann type (prescribed flux).
Definition: bctype.h:43
virtual void EIPrimaryUnknownMI_computePrimaryUnknownVectorAtLocal(ValueModeType u, TimeStep *tStep, const FloatArray &coords, FloatArray &answer)
Computes the element vector of primary unknowns at given point in the local coordinate system...
Definition: tet21stokes.C:380
Wrapper around element definition to provide FEICellGeometry interface.
Definition: feinterpol.h:95
static FEI3dTetLin interpolation_lin
Interpolation for pressure.
Definition: tet21stokes.h:62
IntArray * giveBodyLoadArray()
Returns array containing load numbers of loads acting on element.
Definition: element.C:372
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Definition: floatarray.C:676
IntArray bodyLoadArray
Array containing indexes of loads (body loads and boundary loads are kept separately), that apply on receiver.
Definition: element.h:160
#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
virtual double surfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the edge jacobian of transformation between local and global coordinates.
Definition: fei3dtetquad.C:485
virtual int giveApproxOrder()=0
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
Definition: floatarray.C:708
virtual bcType giveType() const
Returns receiver load type.
Definition: boundaryload.h:166
Distributed surface load.
Definition: bcgeomtype.h:45
virtual int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element)
Sets up integration rule for the given element.
Definition: crosssection.C:54
int numberOfGaussPoints
Number of integration points as specified by nip.
Definition: element.h:188
Class representing vector of real numbers.
Definition: floatarray.h:82
void plusDyadSymmUpper(const FloatArray &a, double dV)
Adds to the receiver the dyadic product .
Definition: floatmatrix.C:756
This abstract class represent a general base element class for fluid dynamic problems.
Definition: fmelement.h:54
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
static IntArray conservation_ordering
Ordering of conservation dofs in element. Used to assemble the element stiffness. ...
Definition: tet21stokes.h:68
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.
Definition: floatarray.C:551
CharType
Definition: chartype.h:87
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
virtual int computeNumberOfDofs()
Computes or simply returns total number of element&#39;s local DOFs.
Definition: tet21stokes.C:89
void add(const FloatMatrix &a)
Adds matrix to the receiver.
Definition: floatmatrix.C:1023
Dof * giveDofWithID(int dofID) const
Returns DOF with given dofID; issues error if not present.
Definition: dofmanager.C:119
Class Interface.
Definition: interface.h:82
virtual void computeLoadVector(FloatArray &answer, BodyLoad *load, CharType type, ValueModeType mode, TimeStep *tStep)
Computes the contribution of the given body load (volumetric).
Definition: tet21stokes.C:202
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
virtual bcGeomType giveBCGeoType() const
Returns geometry character of boundary condition.
virtual Interface * giveInterface(InterfaceType t)
Interface requesting service.
Definition: femcmpnn.h:179
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
Definition: tet21stokes.C:356
void beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
Definition: floatmatrix.C:323
The spatial localizer element interface associated to spatial localizer.
void computeInternalForcesVector(FloatArray &answer, TimeStep *tStep)
Definition: tet21stokes.C:127
virtual void surfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates edge global coordinates from given local ones.
Definition: fei3dtetquad.C:413
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
The element interface class related to Element Interpolation Mappers.
void zero()
Zeroes all coefficient of receiver.
Definition: floatmatrix.C:1326
InterfaceType
Enumerative type, used to identify interface type.
Definition: interfacetype.h:43
Load is base abstract class for all loads.
Definition: load.h:61
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
Definition: floatmatrix.C:337
int giveSize() const
Definition: intarray.h:203
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.
void assemble(const FloatMatrix &src, const IntArray &loc)
Assembles the contribution using localization array into receiver.
Definition: floatmatrix.C:251
virtual bcValType giveBCValType() const
Returns receiver load type.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
Definition: element.h:610
virtual void computeValueAt(FloatArray &answer, TimeStep *tStep, const FloatArray &coords, ValueModeType mode)
Computes components values of load at given point - global coordinates (coordinates given)...
Definition: boundaryload.C:58
int giveNumberOfRows() const
Returns number of rows of receiver.
Definition: floatmatrix.h:156
Load * giveLoad(int n)
Service for accessing particular domain load.
Definition: domain.C:222
void symmetrized()
Initializes the lower half of the receiver according to the upper half.
Definition: floatmatrix.C:1576
Class representing integration point in finite element program.
Definition: gausspoint.h:93
IntArray boundaryLoadArray
Definition: element.h:160
Class representing solution step.
Definition: timestep.h:80
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
Definition: tet21stokes.C:80
static IntArray momentum_ordering
Ordering of momentum balance dofs in element. Used to assemble the element stiffness.
Definition: tet21stokes.h:66
int numberOfDofMans
Number of dofmanagers.
Definition: element.h:149
void add(const FloatArray &src)
Adds array src to receiver.
Definition: floatarray.C:156
virtual void giveCharacteristicMatrix(FloatMatrix &answer, CharType type, TimeStep *tStep)
Computes characteristic matrix of receiver of requested type in given time step.
Definition: tet21stokes.C:116
virtual int SetUpPointsOnTriangle(int nPoints, MaterialMode mode)
Sets up receiver&#39;s integration points on triangular (area coords) integration domain.
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:31 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011