OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
freewarping.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 "freewarping.h"
36 #include "crosssection.h"
37 #include "Elements/trwarp.h"
38 #include "nummet.h"
39 #include "timestep.h"
40 #include "element.h"
41 #include "dof.h"
42 #include "sparsemtrx.h"
43 #include "verbose.h"
45 #include "unknownnumberingscheme.h"
47 #include "datastream.h"
48 #include "contextioerr.h"
49 #include "classfactory.h"
50 #include "outputmanager.h"
51 #include "mathfem.h"
52 
53 //#define THROW_CIOERR(e) throw ContextIOERR(e, __FILE__, __LINE__); // km???
54 
55 #ifdef __PARALLEL_MODE
56  #include "problemcomm.h"
57  #include "communicator.h"
58 #endif
59 
60 #include <typeinfo>
61 
62 namespace oofem {
63 REGISTER_EngngModel(FreeWarping);
64 
65 FreeWarping :: FreeWarping(int i, EngngModel *_master) : StructuralEngngModel(i, _master), loadVector(), displacementVector()
66 {
67  ndomains = 1;
68  initFlag = 1;
70 }
71 
72 
74 {
75 }
76 
77 
79 {
80  if ( isParallel() ) {
81  if ( ( solverType == ST_Petsc ) || ( solverType == ST_Feti ) ) {
82  nMethod.reset( classFactory.createSparseLinSolver(solverType, this->giveDomain(1), this) );
83  }
84  } else {
85  nMethod.reset( classFactory.createSparseLinSolver(solverType, this->giveDomain(1), this) );
86  }
87 
88  if ( !nMethod ) {
89  OOFEM_ERROR("linear solver creation failed for lstype %d", solverType);
90  }
91 
92  return nMethod.get();
93 }
94 
97 {
98  IRResultType result; // Required by IR_GIVE_FIELD macro
99 
101  if ( result != IRRT_OK ) {
102  return result;
103  }
104 
105  int val = 0;
107  solverType = ( LinSystSolverType ) val;
108 
109  val = 0;
111  sparseMtrxType = ( SparseMtrxType ) val;
112 
113 
114 
115 
116 #ifdef __PARALLEL_MODE
117  if ( isParallel() ) {
119  communicator = new NodeCommunicator(this, commBuff, this->giveRank(),
120  this->giveNumberOfProcesses());
121  }
122 
123 #endif
124 
125 
126  return IRRT_OK;
127 }
128 
129 
130 void
132 {
133  int noCS = this->giveDomain(1)->giveNumberOfCrossSectionModels(); //number of warping Crosssections
134  CG.resize(noCS, 2);
135  // cg.resize(2);
136  FloatArray Sx, Sy, moments, domainArea;
137  Sx.resize(noCS);
138  Sy.resize(noCS);
139  domainArea.resize(noCS);
140  moments.resize(2);
141 
142  for ( int i = 1; i <= this->giveDomain(1)->giveNumberOfElements(); ++i ) {
143  int j = this->giveDomain(1)->giveElement(i)->giveCrossSection()->giveNumber();
144  Tr_Warp *trwarp = dynamic_cast< Tr_Warp * >( this->giveDomain(1)->giveElement(i) );
145  if ( trwarp ) {
146  trwarp->computeFirstMomentOfArea(moments);
147  Sx.at(j) += moments.at(1);
148  Sy.at(j) += moments.at(2);
149 
150  domainArea.at(j) += fabs( this->giveDomain(1)->giveElement(i)->computeArea() );
151  } else {
152  OOFEM_ERROR("Error during dynamic_cast");
153  }
154  }
155  for ( int j = 1; j <= noCS; ++j ) {
156  double A = domainArea.at(j);
157  if ( A != 0 ) {
158  CG.at(j, 1) = Sx.at(j) / A;
159  CG.at(j, 2) = Sy.at(j) / A;
160  } else {
161  OOFEM_ERROR("Zero crosssection area");
162  }
163  }
164 }
165 
166 void
168 {
169  int noCS = this->giveDomain(1)->giveNumberOfCrossSectionModels(); //number of warping Crosssections
170  SolutionAtCG.resize(noCS);
171  Element *closestElement;
172  FloatArray lcoords, closest, lcg;
174  sp->init();
175  lcoords.resize(2);
176  closest.resize(2);
177  lcg.resize(2);
178 
179  for ( int j = 1; j <= noCS; ++j ) {
180  lcg.at(1) = CG.at(j, 1);
181  lcg.at(2) = CG.at(j, 2);
182  closestElement = sp->giveElementClosestToPoint(lcoords, closest, lcg, 0);
183 
184  StructuralElement *sE = dynamic_cast< StructuralElement * >(closestElement);
185  FloatArray u, r, b;
186  FloatMatrix N;
187  sE->computeNmatrixAt(lcoords, N);
188  sE->computeVectorOf(VM_Total, tStep, u);
189  u.resizeWithValues(3);
190  r.beProductOf(N, u);
191 
192  SolutionAtCG.at(j) = r.at(1);
193  }
194 }
195 
196 
198 // returns unknown quantity like displacement, velocity of equation eq
199 // This function translates this request to numerical method language
200 {
201  int eq = dof->__giveEquationNumber();
202 #ifdef DEBUG
203  if ( eq == 0 ) {
204  OOFEM_ERROR("invalid equation number");
205  }
206 #endif
207 
208  if ( tStep != this->giveCurrentStep() ) {
209  OOFEM_ERROR("unknown time step encountered");
210  return 0.;
211  }
212 
213  switch ( mode ) {
214  case VM_Total:
215  case VM_Incremental:
216  if ( displacementVector.isNotEmpty() ) {
217  return displacementVector.at(eq);
218  } else {
219  return 0.;
220  }
221 
222  default:
223  OOFEM_ERROR("Unknown is of undefined type for this problem");
224  }
225 
226  return 0.;
227 }
228 
229 
231 {
232  int istep = this->giveNumberOfFirstStep();
233  StateCounterType counter = 1;
234 
235  if ( currentStep ) {
236  istep = currentStep->giveNumber() + 1;
237  counter = currentStep->giveSolutionStateCounter() + 1;
238  }
239 
240  previousStep = std :: move(currentStep);
241  currentStep.reset( new TimeStep(istep, this, 1, ( double ) istep, 0., counter) );
242  return currentStep.get();
243 }
244 
245 
247 {
248  this->computeCenterOfGravity();
249 
250  if ( this->isParallel() ) {
251  #ifdef __VERBOSE_PARALLEL
252  // force equation numbering before setting up comm maps
254  OOFEM_LOG_INFO("[process rank %d] neq is %d\n", this->giveRank(), neq);
255  #endif
256  this->initializeCommMaps();
257  }
258 
260 }
261 
262 
263 
265 {
266  //
267  // creates system of governing eq's and solves them at given time step
268  //
269  // first assemble problem at current time step
270 
271  if ( initFlag ) {
272 #ifdef VERBOSE
273  OOFEM_LOG_DEBUG("Assembling stiffness matrix\n");
274 #endif
275 
276  //
277  // first step assemble stiffness Matrix
278  //
280  if ( !stiffnessMatrix ) {
281  OOFEM_ERROR("sparse matrix creation failed");
282  }
283 
284  stiffnessMatrix->buildInternalStructure( this, 1, EModelDefaultEquationNumbering() );
285 
286  this->assemble( *stiffnessMatrix, tStep, TangentAssembler(TangentStiffness),
288  //
289  // original stiffnes Matrix is singular (no Dirichlet b.c's exist for free warping problem)
290  // thus one diagonal element is made stiffer (for each warping crosssection)
292 
293  initFlag = 0;
294  }
295 
296 #ifdef VERBOSE
297  OOFEM_LOG_DEBUG("Assembling load\n");
298 #endif
299 
300  //
301  // allocate space for displacementVector
302  //
305 
306  //
307  // assembling the load vector
308  //
310  loadVector.zero();
311  this->assembleVector( loadVector, tStep, ExternalForceAssembler(), VM_Total,
313 
314  //
315  // internal forces (from Dirichlet b.c's, or thermal expansion, etc.)
316  //
317  // no such forces exist for the free warping problem
318  /*
319  * FloatArray internalForces( this->giveNumberOfDomainEquations( 1, EModelDefaultEquationNumbering() ) );
320  * internalForces.zero();
321  * this->assembleVector( internalForces, tStep, InternalForceAssembler(), VM_Total,
322  * EModelDefaultEquationNumbering(), this->giveDomain(1) );
323  *
324  * loadVector.subtract(internalForces);
325  */
326 
328 
329  //
330  // set-up numerical model
331  //
332  this->giveNumericalMethod( this->giveMetaStep( tStep->giveMetaStepNumber() ) );
333 
334  //
335  // call numerical model to solve arose problem
336  //
337 #ifdef VERBOSE
338  OOFEM_LOG_INFO("\n\nSolving ...\n\n");
339 #endif
341  if ( !( s & NM_Success ) ) {
342  OOFEM_ERROR("No success in solving system.");
343  }
344 
345  //
346  // update computed "displacementVector" with the respect to the center of gravity
347  //
348  this->computeResultAtCenterOfGravity(tStep);
349  //
350  // results are shifted to be zero at the center of gravity (for each warping crosssection)
351  //
353 
354 
355  // update solution state counter
356  tStep->incrementStateCounter();
357 }
358 
359 
360 void
362 {
364  this->giveNumericalMethod( this->giveCurrentMetaStep() )->setDomain( this->giveDomain(1) );
365 }
366 
367 
368 void
370 {
371  if ( this->giveDomain(1)->giveOutputManager()->testTimeStepOutput(tStep) ) {
372  return;
373  }
374 
375  EngngModel :: printOutputAt(file, tStep);
376 
377  fprintf(file, "\n Center of gravity:");
378  for ( int j = 1; j <= this->giveDomain(1)->giveNumberOfCrossSectionModels(); ++j ) {
379  fprintf(file, "\n CrossSection %d x = %f y = %f", j, CG.at(j, 1), CG.at(j, 2) );
380  }
381 }
382 
383 
384 int
385 FreeWarping :: estimateMaxPackSize(IntArray &commMap, DataStream &buff, int packUnpackType)
386 {
387  int count = 0, pcount = 0;
388  Domain *domain = this->giveDomain(1);
389 
390  if ( packUnpackType == 0 ) {
391  for ( int map: commMap ) {
392  for ( Dof *jdof: *domain->giveDofManager( map ) ) {
393  if ( jdof->isPrimaryDof() && ( jdof->__giveEquationNumber() ) ) {
394  count++;
395  } else {
396  pcount++;
397  }
398  }
399  }
400 
401  // --------------------------------------------------------------------------------
402  // only pcount is relevant here, since only prescribed components are exchanged !!!!
403  // --------------------------------------------------------------------------------
404 
405  return ( buff.givePackSizeOfDouble(1) * pcount );
406  } else if ( packUnpackType == 1 ) {
407  for ( int map: commMap ) {
408  count += domain->giveElement( map )->estimatePackSize(buff);
409  }
410 
411  return count;
412  }
413 
414  return 0;
415 }
416 
417 
418 void
420 {
421  // increase diagonal stiffness (coresponding to the 1st node of 1st element ) for each crosssection
422  for ( int j = 1; j <= this->giveDomain(1)->giveNumberOfCrossSectionModels(); j++ ) {
423  for ( auto &elem : this->giveDomain(1)->giveElements() ) {
424  int CSnumber = elem->giveCrossSection()->giveNumber();
425  if ( CSnumber == j ) {
426  IntArray locationArray;
428  elem->giveLocationArray(locationArray, s);
429  if ( locationArray.at(1) != 0 ) {
430  int cn = locationArray.at(1);
431  if ( answer->at(cn, cn) != 0 ) {
432  answer->at(cn, cn) *= 2;
433  } else {
434  answer->at(cn, cn) = 1000;
435  }
436  }
437  break;
438  }
439  }
440  }
441 }
442 
443 
444 void
446 {
447  // value of result in the center of gravity is interpolated
448  // and substracted from the original solution vector
449  // (individualy for each crosssection)
450 
451 
452  // set up vector of crosssections numbers
453  // through all nodes
454  int length = answer.giveSize();
455  IntArray CSindicator(length);
457  for ( int i = 1; i <= this->giveDomain(1)->giveNumberOfElements(); i++ ) {
458  int CSnumber = this->giveDomain(1)->giveElement(i)->giveCrossSection()->giveNumber();
459  IntArray locationArray;
460  this->giveDomain(1)->giveElement(i)->giveLocationArray(locationArray, s);
461  for ( int j = 1; j <= 3; j++ ) {
462  int locationNumber = locationArray.at(j);
463  if ( locationNumber != 0 ) {
464  CSindicator.at(locationNumber) = CSnumber;
465  }
466  }
467  }
468 
469  // substracr answer for corresponding warping crosssection
470  for ( int i = 1; i <= length; i++ ) {
471  answer.at(i) -= SolutionAtCG.at( CSindicator.at(i) );
472  }
473 }
474 } // end namespace oofem
CrossSection * giveCrossSection()
Definition: element.C:495
The base class for all spatial localizers.
LinSystSolverType
The values of this type should be related not to specific solvers, but more to specific packages that...
std::unique_ptr< SparseMtrx > stiffnessMatrix
Definition: freewarping.h:67
The representation of EngngModel default unknown numbering.
void updateComputedResults(FloatArray &answer, TimeStep *tStep)
Definition: freewarping.C:445
SparseMtrxType sparseMtrxType
Definition: freewarping.h:72
#define NM_Success
Numerical method exited with success.
Definition: nmstatus.h:47
std::unique_ptr< TimeStep > currentStep
Current time step.
Definition: engngm.h:231
virtual NumericalMethod * giveNumericalMethod(MetaStep *mStep)
Returns reference to receiver&#39;s numerical method.
Definition: freewarping.C:78
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 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 void computeFirstMomentOfArea(FloatArray &answer)
Definition: trwarp.C:180
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description in input reader.
Definition: engngm.C:262
Base class for all matrices stored in sparse format.
Definition: sparsemtrx.h:60
void computeResultAtCenterOfGravity(TimeStep *tStep)
Definition: freewarping.C:167
FloatArray SolutionAtCG
Definition: freewarping.h:79
Class representing meta step.
Definition: metastep.h:62
int estimateMaxPackSize(IntArray &commMap, DataStream &buff, int packUnpackType)
Determines the space necessary for send/receive buffer.
Definition: freewarping.C:385
SparseMtrx * createSparseMtrx(SparseMtrxType type)
Creates new instance of sparse matrix corresponding to given keyword.
Definition: classfactory.C:105
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
std::unique_ptr< TimeStep > previousStep
Previous time step.
Definition: engngm.h:233
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
MetaStep * giveMetaStep(int i)
Returns the i-th meta step.
Definition: engngm.C:1765
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
long StateCounterType
StateCounterType type used to indicate solution state.
virtual void solveYourselfAt(TimeStep *tStep)
Solves problem for given time step.
Definition: freewarping.C:264
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to output domain stream, for given time step.
Definition: freewarping.C:369
This base class is an abstraction for numerical algorithm.
Definition: nummet.h:80
virtual TimeStep * giveNextStep()
Returns next time step (next to current step) of receiver.
Definition: freewarping.C:230
Implementation for assembling tangent matrices in standard monolithic FE-problems.
bool isParallel() const
Returns true if receiver in parallel mode.
Definition: engngm.h:1056
void updateStiffnessMatrix(SparseMtrx *answer)
Definition: freewarping.C:419
void incrementStateCounter()
Updates solution state counter.
Definition: timestep.h:190
Abstract base class for all finite elements.
Definition: element.h:145
int giveNumberOfProcesses() const
Returns the number of collaborating processes.
Definition: engngm.h:1060
virtual void solveYourself()
Starts solution process.
Definition: engngm.C:501
virtual int __giveEquationNumber() const =0
Returns equation number of receiver, usually assigned by emodel.
int giveNumberOfElements() const
Returns number of elements in domain.
Definition: domain.h:434
virtual double & at(int i, int j)=0
Returns coefficient at position (i,j).
REGISTER_EngngModel(ProblemSequence)
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
Computes interpolation matrix for element unknowns.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description in input reader.
Definition: freewarping.C:96
unsigned long NM_Status
Mask defining NumMetod Status; which can be asked after finishing computation by Numerical Method...
Definition: nmstatus.h:44
#define OOFEM_LOG_DEBUG(...)
Definition: logger.h:128
Class implementing an array of integers.
Definition: intarray.h:61
int & at(int i)
Coefficient access function.
Definition: intarray.h:103
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
Abstract base class for all "structural" finite elements.
MetaStep * giveCurrentMetaStep()
Returns current meta step.
Definition: engngm.C:1684
#define OOFEM_LOG_INFO(...)
Definition: logger.h:127
void computeCenterOfGravity()
Gives the sum of the first moment of area.
Definition: freewarping.C:131
Element * giveElement(int n)
Service for accessing particular domain fe element.
Definition: domain.C:160
#define _IFT_EngngModel_smtype
Definition: engngm.h:82
#define OOFEM_ERROR(...)
Definition: error.h:61
int ndomains
Number of receiver domains.
Definition: engngm.h:205
int updateSharedDofManagers(FloatArray &answer, const UnknownNumberingScheme &s, int ExchangeTag)
Exchanges necessary remote DofManagers data.
Definition: engngm.C:1957
SparseMtrxType
Enumerative type used to identify the sparse matrix type.
Implementation for assembling external forces vectors in standard monolithic FE-problems.
void giveLocationArray(IntArray &locationArray, const UnknownNumberingScheme &s, IntArray *dofIds=NULL) const
Returns the location array (array of code numbers) of receiver for given numbering scheme...
Definition: element.C:390
SpatialLocalizer * giveSpatialLocalizer()
Returns receiver&#39;s associated spatial localizer.
Definition: domain.C:1184
ProblemCommunicator * communicator
Communicator.
Definition: engngm.h:303
int giveNumberOfCrossSectionModels() const
Returns number of cross section models in domain.
Definition: domain.h:438
FloatArray loadVector
Definition: freewarping.h:68
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
CommunicatorBuff * commBuff
Common Communicator buffer.
Definition: engngm.h:301
virtual int giveNumberOfFirstStep(bool force=false)
Returns number of first time step used by receiver.
Definition: engngm.h:730
void resizeWithValues(int s, int allocChunk=0)
Checks size of receiver towards requested bounds.
Definition: floatarray.C:615
FloatMatrix CG
Definition: freewarping.h:78
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
Initializes the variable VERBOSE, in order to get a few intermediate messages on screen: beginning an...
virtual ~FreeWarping()
Definition: freewarping.C:73
Class representing vector of real numbers.
Definition: floatarray.h:82
int estimatePackSize(DataStream &buff)
Estimates the necessary pack size to hold all packed data of receiver.
Definition: element.C:1575
SparseLinearSystemNM * createSparseLinSolver(LinSystSolverType st, Domain *d, EngngModel *m)
Creates new instance of SparseLinearSystemNM corresponding to given type.
Definition: classfactory.C:120
virtual int init(bool force=false)
Initialize receiver data structure if not done previously If force is set to true, the initialization is enforced (useful if domain geometry has changed)
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
#define _IFT_EngngModel_lstype
Definition: engngm.h:81
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual int givePackSizeOfDouble(int count)=0
LinSystSolverType solverType
Definition: freewarping.h:71
int giveMetaStepNumber()
Returns receiver&#39;s meta step number.
Definition: timestep.h:135
virtual double giveUnknownComponent(ValueModeType type, TimeStep *tStep, Domain *d, Dof *dof)
Returns requested unknown.
Definition: freewarping.C:197
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
virtual Element * giveElementClosestToPoint(FloatArray &lcoords, FloatArray &closest, const FloatArray &coords, int region=0)=0
Returns the element closest to a given point.
Class representing the general Input Record.
Definition: inputrecord.h:101
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
FloatArray displacementVector
Definition: freewarping.h:69
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to output domain stream, for given time step.
Definition: engngm.C:695
std::unique_ptr< SparseLinearSystemNM > nMethod
Numerical method used to solve the problem.
Definition: freewarping.h:74
int giveRank() const
Returns domain rank in a group of collaborating processes (0..groupSize-1)
Definition: engngm.h:1058
void initializeCommMaps(bool forceInit=false)
Definition: engngm.C:1942
ClassFactory & classFactory
Definition: classfactory.C:59
FreeWarping(int i, EngngModel *_master=NULL)
Definition: freewarping.C:65
This class implements extension of EngngModel for structural models.
The Communicator and corresponding buffers (represented by this class) are separated in order to allo...
Definition: communicator.h:60
std::vector< std::unique_ptr< Element > > & giveElements()
Definition: domain.h:279
Abstract base class representing the "problem" under consideration.
Definition: engngm.h:181
virtual void setDomain(Domain *d)
Definition: nummet.h:114
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
virtual TimeStep * giveCurrentStep(bool force=false)
Returns current time step.
Definition: engngm.h:683
Triangle (2d) element with linear approximation for free warping analysis.
Definition: trwarp.h:50
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
virtual void updateDomainLinks()
Updates domain links after the domains of receiver have changed.
Definition: engngm.C:1521
the oofem namespace is to define a context or scope in which all oofem names are defined.
bool isNotEmpty() const
Returns true if receiver is not empty.
Definition: floatarray.h:220
Domain * giveDomain(int n)
Service for accessing particular problem domain.
Definition: engngm.C:1720
Abstract class Dof represents Degree Of Freedom in finite element mesh.
Definition: dof.h:93
int giveNumber() const
Definition: femcmpnn.h:107
DofManager * giveDofManager(int n)
Service for accessing particular domain dof manager.
Definition: domain.C:314
virtual void solveYourself()
Starts solution process.
Definition: freewarping.C:246
virtual void updateDomainLinks()
Updates domain links after the domains of receiver have changed.
Definition: freewarping.C:361
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
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:28 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011