OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
mixedgradientpressuredirichlet.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 
37 #include "dofiditem.h"
38 #include "dofmanager.h"
39 #include "dof.h"
40 #include "valuemodetype.h"
41 #include "floatarray.h"
42 #include "floatmatrix.h"
43 #include "engngm.h"
44 #include "node.h"
45 #include "activedof.h"
46 #include "masterdof.h"
47 #include "classfactory.h"
48 #include "sparsemtrxtype.h"
49 #include "sparsemtrx.h"
50 #include "sparselinsystemnm.h"
51 #include "dynamicinputrecord.h"
52 #include "domain.h"
53 #include "unknownnumberingscheme.h"
54 #include "assemblercallback.h"
55 
56 namespace oofem {
57 REGISTER_BoundaryCondition(MixedGradientPressureDirichlet);
58 
60  voldman( new Node(1, d) ),
61  devdman( new Node(2, d) )
62 {
64  // The unknown volumetric strain
66  voldman->appendDof( new MasterDof( voldman.get(), (DofIDItem)vol_id ) );
67 
68  int nsd = d->giveNumberOfSpatialDimensions();
69  int components = ( nsd + 1 ) * nsd / 2;
70  // The prescribed strains.
71  dev_id.clear();
72  for ( int i = 0; i < components; i++ ) {
73  int dofid = d->giveNextFreeDofID();
74  dev_id.followedBy(dofid);
75  // Just putting in X_i id-items since they don't matter.
76  // These don't actually need to be active, they are masterdofs with prescribed values, its
77  // easier to just have them here rather than trying to make another Dirichlet boundary condition.
78  devdman->appendDof( new ActiveDof( devdman.get(), (DofIDItem)dofid, this->giveNumber() ) );
79  }
80 }
81 
82 
84 {
85 }
86 
87 
89 {
90  return *voldman->begin();
91 }
92 
93 
95 {
96  return 2;
97 }
98 
99 
101 {
102  if ( i == 1 ) {
103  return this->voldman.get();
104  } else {
105  return this->devdman.get();
106  }
107 }
108 
109 
111 {
112  if ( this->isDevDof(dof) ) {
113  return 1;
114  }
115  return devdman->giveNumberOfDofs() + 1;
116 }
117 
118 
120 {
121  if ( this->isDevDof(dof) ) {
122  return NULL;
123  }
124  if ( mdof == 1 ) {
125  return *voldman->begin();
126  } else {
127  return devdman->giveDofWithID(dev_id[mdof - 2]);
128  }
129 }
130 
131 
133 {
134  DofIDItem id = dof->giveDofID();
135  FloatArray *coords = dof->giveDofManager()->giveCoordinates();
136 
137  FloatArray dx;
138  dx.beDifferenceOf(* coords, this->centerCoord);
139 
140  int nsd = dx.giveSize(); // Number of spatial dimensions
141 
142  masterContribs.resize(devdman->giveNumberOfDofs() + 1);
143 
144  if ( id == D_u || id == V_u ) {
145  masterContribs.at(1) = dx.at(1) / 3.0; // d_vol
146  if ( nsd == 2 ) {
147  masterContribs.at(2) = dx.at(1); // d_dev_11
148  masterContribs.at(3) = 0.0; // d_dev_22
149  masterContribs.at(4) = dx.at(2) / 2.0; // gamma_12
150  } else if ( nsd == 3 ) {
151  masterContribs.at(2) = dx.at(1); // d_dev_11
152  masterContribs.at(3) = 0.0; // d_dev_22
153  masterContribs.at(4) = 0.0; // d_dev_33
154  masterContribs.at(5) = 0.0; // gamma_23
155  masterContribs.at(6) = dx.at(3) / 2.0; // gamma_13
156  masterContribs.at(7) = dx.at(2) / 2.0; // gamma_12
157  }
158  } else if ( id == D_v || id == V_v ) {
159  masterContribs.at(1) = dx.at(2) / 3.0; // d_vol
160  masterContribs.at(2) = 0.0; // d_dev_11
161  masterContribs.at(3) = dx.at(2); // d_dev_22
162  masterContribs.at(4) = dx.at(1) / 2.0; // gamma_12
163  if ( nsd == 3 ) {
164  masterContribs.at(2) = 0.0; // d_dev_11
165  masterContribs.at(3) = dx.at(2); // d_dev_22
166  masterContribs.at(4) = 0.0; // d_dev_33
167  masterContribs.at(5) = dx.at(3) / 2.0; // gamma_23
168  masterContribs.at(6) = 0.0; // gamma_13
169  masterContribs.at(7) = dx.at(1) / 2.0; // gamma_12
170  }
171  } else if ( id == D_w || id == V_w ) { // 3D only:
172  masterContribs.at(1) = dx.at(3) / 3.0; // d_vol
173  masterContribs.at(2) = 0.0; // d_dev_11
174  masterContribs.at(3) = 0.0; // d_dev_22
175  masterContribs.at(4) = dx.at(3); // d_dev_33
176  masterContribs.at(5) = dx.at(2) / 2.0; // gamma_23
177  masterContribs.at(6) = dx.at(1) / 2.0; // gamma_13
178  masterContribs.at(7) = 0.0; // gamma_12
179  } else {
180  OOFEM_ERROR("Incompatible id on subjected dof");
181  }
182 }
183 
184 
186 {
187  DofIDItem id = dof->giveDofID();
188  FloatArray *coords = dof->giveDofManager()->giveCoordinates();
189 
190  if ( coords == NULL || coords->giveSize() != this->centerCoord.giveSize() ) {
191  OOFEM_ERROR("Size of coordinate system different from center coordinate (%d) in b.c.", this->centerCoord.giveSize() );
192  }
193 
194  FloatArray dx;
195  dx.beDifferenceOf(* coords, this->centerCoord);
196 
197  int nsd = dx.giveSize(); // Number of spatial dimensions
198 
199  double dev11, dev22, dev33 = 0., dev12, dev23 = 0., dev13 = 0.;
200  if ( nsd == 2 ) {
201  dev11 = dev.at(1);
202  dev22 = dev.at(2);
203  dev12 = dev.at(3) * 0.5;
204  } else { /*if (nsd == 3)*/
205  dev11 = dev.at(1);
206  dev22 = dev.at(2);
207  dev33 = dev.at(3);
208  dev23 = dev.at(4) * 0.5;
209  dev13 = dev.at(5) * 0.5;
210  dev12 = dev.at(6) * 0.5;
211  }
212 
213  double val;
214  if ( id == D_u || id == V_u ) {
215  val = dx.at(1) / 3.0 * vol;
216  if ( nsd >= 2 ) {
217  val += dx.at(1) * dev11 + dx.at(2) * dev12;
218  }
219  if ( nsd == 3 ) {
220  val += dx.at(3) * dev13;
221  }
222  } else if ( id == D_v || id == V_v ) {
223  val = dx.at(2) / 3.0 * vol + dx.at(1) * dev12 + dx.at(2) * dev22;
224  if ( nsd == 3 ) {
225  val += dx.at(3) * dev23;
226  }
227  } else { /*if ( id == D_w || id == V_w )*/ // 3D only:
228  val = dx.at(3) / 3.0 * vol + dx.at(1) * dev13 + dx.at(2) * dev23 + dx.at(3) * dev33;
229  }
230  return val;
231 }
232 
233 
235 {
236  EngngModel *emodel = this->giveDomain()->giveEngngModel();
237  FloatArray tmp;
238  vol = this->giveVolDof()->giveUnknown(VM_Total, tStep);
240  // sigma = residual (since we use the slave dofs) = f_ext - f_int
241  sigmaDev.resize(npeq);
242  sigmaDev.zero();
243  emodel->assembleVector(sigmaDev, tStep, InternalForceAssembler(), VM_Total, EModelDefaultPrescribedEquationNumbering(), this->domain);
244  tmp.resize(npeq);
245  tmp.zero();
247  sigmaDev.subtract(tmp);
248  // Divide by the RVE-volume
249  sigmaDev.times( 1.0 / this->domainSize() );
250  // Above, full sigma = sigmaDev - p*I is assembled, so to obtain the deviatoric part we add p to the diagonal part.
251  int nsd = this->domain->giveNumberOfSpatialDimensions();
252  for ( int i = 1; i <= nsd; ++i ) {
253  sigmaDev.at(i) += this->pressure;
254  }
255 }
256 
257 
259 {
260  double rve_size = this->domainSize();
261  // Fetch some information from the engineering model
262  EngngModel *rve = this->giveDomain()->giveEngngModel();
264  std :: unique_ptr< SparseLinearSystemNM > solver(
265  classFactory.createSparseLinSolver( ST_Petsc, this->domain, this->domain->giveEngngModel() ) ); // = rve->giveLinearSolver();
266  SparseMtrxType stype = solver->giveRecommendedMatrix(true);
269 
270  // Set up and assemble tangent FE-matrix which will make up the sensitivity analysis for the macroscopic material tangent.
271  FloatMatrix ddev_pert;
272  FloatMatrix rhs_d; // RHS for d_dev [d_dev11, d_dev22, d_dev12] in 2D
273  FloatMatrix s_d; // Sensitivity fields for d_dev
274  FloatArray rhs_p; // RHS for pressure
275  FloatArray s_p; // Sensitivity fields for p
276 
277  // Indices and such of internal dofs
278  int dvol_eq = this->giveVolDof()->giveEqn();
279  int ndev = this->devGradient.giveSize();
280 
281  {
282  // Sets up RHS for all sensitivity problems;
283  std :: unique_ptr< SparseMtrx > Kfp( classFactory.createSparseMtrx(stype) );
284  Kfp->buildInternalStructure(rve, 1, fnum, pnum);
285  rve->assemble(*Kfp, tStep, TangentAssembler(TangentStiffness), fnum, pnum, this->domain);
286 
287  // Setup up indices and locations
288  int neq = Kfp->giveNumberOfRows();
289  // Matrices and arrays for sensitivities
290  int npeq = Kfp->giveNumberOfColumns();
291 
292  if ( npeq != ndev ) {
293  OOFEM_ERROR("Size mismatch, ndev != npeq");
294  }
295 
296  // Unit pertubations for d_dev
297  ddev_pert.resize(ndev, ndev); // In fact, npeq should most likely equal ndev
298  ddev_pert.zero();
299  for ( int i = 1; i <= ndev; ++i ) {
300  int eqn = this->devdman->giveDofWithID(dev_id.at(i))->__givePrescribedEquationNumber();
301  ddev_pert.at(eqn, i) = -1.0; // Minus sign for moving it to the RHS
302  }
303  Kfp->times(ddev_pert, rhs_d);
304  s_d.resize(neq, ndev);
305 
306  // Sensitivity analysis for p (already in rhs, just set value directly)
307  rhs_p.resize(neq);
308  rhs_p.zero();
309  rhs_p.at(dvol_eq) = -1.0 * rve_size; // dp = 1.0 (unit size)
310  s_p.resize(neq);
311  }
312 
313  {
314  // Solve all sensitivities
315  std :: unique_ptr< SparseMtrx > Kff( classFactory.createSparseMtrx(stype) );
316  if ( !Kff ) {
317  OOFEM_ERROR("MixedGradientPressureDirichlet :: computeTangents - Couldn't create sparse matrix of type %d\n", stype);
318  }
319  Kff->buildInternalStructure(rve, 1, fnum);
320  rve->assemble(*Kff, tStep, TangentAssembler(TangentStiffness), fnum, this->domain);
321  solver->solve(*Kff, rhs_p, s_p);
322  solver->solve(*Kff, rhs_d, s_d);
323  }
324 
325  // Sensitivities for d_vol is solved for directly;
326  Cp = - s_p.at(dvol_eq); // Note: Defined with negative sign de = - C * dp
327  Cd.resize(ndev);
328  for ( int i = 1; i <= ndev; ++i ) {
329  Cd.at(i) = s_d.at(dvol_eq, i); // Copy over relevant row from solution
330  }
331 
332  {
333  // Sensitivities for d_dev is obtained as reactions forces;
334  std :: unique_ptr< SparseMtrx > Kpf( classFactory.createSparseMtrx(stype) );
335  std :: unique_ptr< SparseMtrx > Kpp( classFactory.createSparseMtrx(stype) );
336  Kpf->buildInternalStructure(rve, 1, pnum, fnum);
337  Kpp->buildInternalStructure(rve, 1, pnum);
338  rve->assemble(*Kpf, tStep, TangentAssembler(TangentStiffness), pnum, fnum, this->domain);
339  rve->assemble(*Kpp, tStep, TangentAssembler(TangentStiffness), pnum, this->domain);
340 
341  FloatMatrix tmpMat;
342  Kpp->times(ddev_pert, tmpMat);
343  Kpf->times(s_d, Ed);
344  Ed.subtract(tmpMat);
345  Ed.times(1.0 / rve_size);
346  Kpf->times(s_p, Ep);
347  Ep.times(1.0 / rve_size);
348  }
349 
350  // Not sure if i actually need to do this part, but the obtained tangents are to dsigma/dp, not dsigma_dev/dp, so they need to be corrected;
351  int nsd = this->domain->giveNumberOfSpatialDimensions();
352  for ( int i = 1; i <= nsd; ++i ) {
353  Ep.at(i) += 1.0;
354  Cd.at(i) += 1.0;
355  }
356 
357 #if 0
358  // Makes Ed 4th order deviatoric, in Voigt form (!)
359  for ( int i = 1; i <= Ed.giveNumberOfColumns(); ++i ) {
360  // Take the mean of the "diagonal" part of each column
361  double mean = 0.0;
362  for ( int j = 1; j <= nsd; ++j ) {
363  mean += Ed.at(i, j);
364  }
365  mean /= ( double ) nsd;
366  // And subtract it from that column
367  for ( int j = 1; j <= nsd; ++j ) {
368  Ed.at(i, j) -= mean;
369  }
370  }
371 #endif
372 }
373 
374 
376 {
377  if ( this->isDevDof(dof) ) {
378  return this->devGradient( dev_id.findFirstIndexOf(dof->giveDofID()) );
379  }
380  return this->giveUnknown(this->giveVolDof()->giveUnknown(field, mode, tStep), this->devGradient, mode, tStep, dof);
381 }
382 
383 
385 {
386  if ( this->isDevDof(dof) ) {
387  return this->devGradient( dev_id.findFirstIndexOf(dof->giveDofID()) );
388  }
389  return this->giveUnknown(this->giveVolDof()->giveUnknown(mode, tStep), this->devGradient, mode, tStep, dof);
390 }
391 
392 
394 {
395  devGradient = t;
396 }
397 
398 
400  CharType type, ValueModeType mode, const UnknownNumberingScheme &s, FloatArray *eNorms)
401 {
402  if ( type != ExternalForcesVector ) {
403  return;
404  }
405 
406  Dof *vol = this->giveVolDof();
407  int vol_loc = vol->giveEquationNumber(s);
408  if ( vol_loc ) {
409  double rve_size = this->domainSize();
410  answer.at(vol_loc) -= rve_size * pressure; // Note the negative sign (pressure as opposed to mean stress)
411  if ( eNorms ) {
412  eNorms->at( vol->giveDofID() ) = rve_size * pressure * rve_size * pressure;
413  }
414  }
415 }
416 
417 
419 {
420  return this->isDevDof(dof);
421 }
422 
423 
425 {
426  if ( this->isDevDof(dof) ) {
427  return this->devGradient( dev_id.findFirstIndexOf(dof->giveDofID()) );
428  }
429  OOFEM_ERROR("Has no prescribed value from bc.");
430  return 0.0;
431 }
432 
433 
435 {
436  return this->isDevDof(dof);
437 }
438 
439 
441 {
442  return devdman.get() == dof->giveDofManager();
443 }
444 
445 
447 {
448  IRResultType result;
449 
451  this->centerCoord.zero();
453 
455 }
456 
457 
459 {
464 }
465 } // end namespace oofem
void setField(int item, InputFieldType id)
int giveNumberOfColumns() const
Returns number of columns of receiver.
Definition: floatmatrix.h:158
The representation of EngngModel default unknown numbering.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
Definition: floatarray.C:258
virtual void computeDofTransformation(ActiveDof *dof, FloatArray &masterContribs)
virtual double giveBcValue(Dof *dof, ValueModeType mode, TimeStep *tStep)
Returns the prescribed value of a dof (if any).
virtual void assembleVector(FloatArray &answer, TimeStep *tStep, CharType type, ValueModeType mode, const UnknownNumberingScheme &s, FloatArray *eNorms=NULL)
Assembles B.C.
REGISTER_BoundaryCondition(BoundaryCondition)
Class and object Domain.
Definition: domain.h:115
Implementation for assembling internal forces vectors in standard monolithic, nonlinear FE-problems...
#define _IFT_MixedGradientPressure_devGradient
virtual int giveNumberOfDomainEquations(int di, const UnknownNumberingScheme &num)
Returns number of equations for given domain in active (current time step) time step.
Definition: engngm.C:391
virtual Dof * giveMasterDof(ActiveDof *dof, int mdof)
Give the pointer to master dof belonging to active DOF.
virtual void computeFields(FloatArray &stressDev, double &vol, TimeStep *tStep)
Computes the homogenized fields through sensitivity analysis.
Domain * domain
Link to domain object, useful for communicating with other FEM components.
Definition: femcmpnn.h:82
SparseMtrx * createSparseMtrx(SparseMtrxType type)
Creates new instance of sparse matrix corresponding to given keyword.
Definition: classfactory.C:105
Abstract class representing field of primary variables (those, which are unknown and are typically as...
Definition: primaryfield.h:104
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
virtual int giveEqn()
Gives number for equation, negative for prescribed equations.
Definition: dof.h:407
double domainSize()
Computes the size (including pores) by surface integral over the domain.
virtual int giveNumberOfMasterDofs(ActiveDof *dof)
Allows for active boundary conditions to handle their own special DOF.
virtual FloatArray * giveCoordinates()
Definition: dofmanager.h:382
virtual double giveUnknown(ValueModeType mode, TimeStep *tStep)=0
The key method of class Dof.
EngngModel * giveEngngModel()
Returns engineering model to which receiver is associated.
Definition: domain.C:433
Implementation for assembling tangent matrices in standard monolithic FE-problems.
FloatArray devGradient
Prescribed gradient in Voigt form.
Base class for dof managers.
Definition: dofmanager.h:113
int giveNumberOfSpatialDimensions()
Returns number of spatial dimensions.
Definition: domain.C:1067
int & at(int i)
Coefficient access function.
Definition: intarray.h:103
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
Definition: floatarray.C:341
virtual void assemble(SparseMtrx &answer, TimeStep *tStep, const MatrixAssembler &ma, const UnknownNumberingScheme &s, Domain *domain)
Assembles characteristic matrix of required type into given sparse matrix.
Definition: engngm.C:803
Class representing "master" degree of freedom.
Definition: masterdof.h:92
virtual int giveNumberOfInternalDofManagers()
Returns the number of internal DOF managers (=2).
virtual bool hasBc(Dof *dof, TimeStep *tStep)
Returns the prescribed value of a dof (if any).
std::unique_ptr< Node > devdman
DOF-manager containing the known deviatoric strain(rate).
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void computeTangents(FloatMatrix &Ed, FloatArray &Ep, FloatArray &Cd, double &Cp, TimeStep *tStep)
Computes the macroscopic tangents through sensitivity analysis.
#define OOFEM_ERROR(...)
Definition: error.h:61
void clear()
Clears the array (zero size).
Definition: intarray.h:177
DofIDItem
Type representing particular dof type.
Definition: dofiditem.h:86
SparseMtrxType
Enumerative type used to identify the sparse matrix type.
#define _IFT_MixedGradientPressure_pressure
Implementation for assembling external forces vectors in standard monolithic FE-problems.
void times(double f)
Multiplies receiver by factor f.
Definition: floatmatrix.C:1594
Abstract base class allowing to control the way, how equations are assigned to individual DOFs...
DofIDItem giveDofID() const
Returns DofID value of receiver, which determines type of of unknown connected to receiver (e...
Definition: dof.h:276
virtual bool isPrimaryDof(ActiveDof *dof)
Checks to see if the dof is a primary DOF.
std::unique_ptr< Node > voldman
DOF-manager containing the unknown volumetric strain(rate).
#define _IFT_MixedGradientPressure_centerCoords
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Class representing "slave" degree of freedom with an active boundary condition.
Definition: activedof.h:48
void subtract(const FloatMatrix &a)
Subtracts matrix from the receiver.
Definition: floatmatrix.C:1084
int giveNextFreeDofID(int increment=1)
Gives the next free dof ID.
Definition: domain.C:1411
Class representing vector of real numbers.
Definition: floatarray.h:82
SparseLinearSystemNM * createSparseLinSolver(LinSystSolverType st, Domain *d, EngngModel *m)
Creates new instance of SparseLinearSystemNM corresponding to given type.
Definition: classfactory.C:120
virtual DofManager * giveInternalDofManager(int i)
Returns the volumetric DOF manager for i == 1, and the deviatoric manager for i == 2...
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
CharType
Definition: chartype.h:87
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
The representation of EngngModel default prescribed unknown numbering.
void followedBy(const IntArray &b, int allocChunk=0)
Appends array b at the end of receiver.
Definition: intarray.C:145
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
Class representing the a dynamic Input Record.
void times(double s)
Multiplies receiver with scalar.
Definition: floatarray.C:818
ClassFactory & classFactory
Definition: classfactory.C:59
MixedGradientPressureDirichlet(int n, Domain *d)
Creates boundary condition with given number, belonging to given domain.
#define new
double giveUnknown(double vol, const FloatArray &dev, ValueModeType mode, TimeStep *tStep, ActiveDof *dof)
void zero()
Zeroes all coefficient of receiver.
Definition: floatmatrix.C:1326
Domain * giveDomain() const
Definition: femcmpnn.h:100
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
int giveEquationNumber(const UnknownNumberingScheme &s)
Returns equation number of receiver for given equation numbering scheme.
Definition: dof.C:56
Abstract base class representing the "problem" under consideration.
Definition: engngm.h:181
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
DofManager * giveDofManager() const
Definition: dof.h:123
bool isDevDof(Dof *dof)
Returns true is DOF represents one of the deviatoric parts.
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
virtual void setPrescribedDeviatoricGradientFromVoigt(const FloatArray &ddev)
Sets the prescribed tensor from the matrix from given Voigt notation.
the oofem namespace is to define a context or scope in which all oofem names are defined.
Class implementing node in finite element mesh.
Definition: node.h:87
Abstract class Dof represents Degree Of Freedom in finite element mesh.
Definition: dof.h:93
int giveNumber() const
Definition: femcmpnn.h:107
General class for boundary condition that prolongates macroscopic fields to incompressible flow...
void assembleVector(FloatArray &answer, TimeStep *tStep, const VectorAssembler &va, ValueModeType mode, const UnknownNumberingScheme &s, Domain *domain, FloatArray *eNorms=NULL)
Assembles characteristic vector of required type from dofManagers, element, and active boundary condi...
Definition: engngm.C:986
Class representing solution step.
Definition: timestep.h:80
int findFirstIndexOf(int value) const
Finds index of first occurrence of given value in array.
Definition: intarray.C:331
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:30 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011