OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
macrolspace.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 "../sm/Elements/3D/macrolspace.h"
36 #include "../sm/Materials/micromaterial.h"
37 #include "../sm/EngineeringModels/structengngmodel.h"
38 #include "../sm/Elements/3D/lspace.h"
39 #include "fei3dhexalin.h"
40 #include "constantfunction.h"
41 #include "domain.h"
42 #include "classfactory.h"
43 #include "dynamicinputrecord.h"
44 #include "node.h"
45 
46 namespace oofem {
47 REGISTER_Element(MacroLSpace);
48 
49 //derived from linear brick element
50 MacroLSpace :: MacroLSpace(int n, Domain *aDomain) : LSpace(n, aDomain)
51 {
52  this->microMasterNodes.clear();
53  this->microBoundaryNodes.clear();
54  this->firstCall = true;
55  microMaterial = NULL;
56  microDomain = NULL;
57  microEngngModel = NULL;
58  this->iteration = 1;
59  this->lastStiffMatrixTimeStep = NULL;
60 }
61 
63 
64 
66 {
67  IRResultType result; // Required by IR_GIVE_FIELD macro
68 
70 
71  if ( this->microMasterNodes.giveSize() != 8 ) {
72  OOFEM_WARNING("Need 8 master nodes from the microproblem defined on macroLspace element");
73  return IRRT_BAD_FORMAT;
74  }
75 
77 
79 
80 #if 0
82  IR_GIVE_OPTIONAL_FIELD(ir, this->stiffMatrxFileName, _IFT_MacroLspace_stiffMatrxFileName);
83  if ( fopen(this->stiffMatrxFileName, "r") != NULL ) { //if the file exist
84  stiffMatrxFile = fopen(this->stiffMatrxFileName, "r");
86  } else { //or create a new one
87  if ( ( stiffMatrxFile = fopen(this->stiffMatrxFileName, "w") ) == NULL ) {
88  OOFEM_ERROR("Can not create a new file %s\n", this->stiffMatrxFileName);
89  }
91  }
92  }
93 #endif
94  return LSpace :: initializeFrom(ir);;
95 }
96 
97 
98 
99 /*Stiffness matrix is taken from the microproblem. No GPs are presented here on macroscale.
100  * Stiffness matrix (24,24) goes in order node 1 (u,v,w) to node 2 (u,v,w) ... 8 (u,v,w). Displacements are in global coordinates.
101  */
103 {
104  //MatResponseMode rMode specifies tangent, secant, or initial matrix
105  if ( !this->isActivated(tStep) ) {
106  return;
107  }
108 
109 
110  //called the first time and initiates the microproblem
111  if ( this->firstCall ) {
112  this->microMaterial = static_cast< MicroMaterial * >( this->giveMaterial() );
113  if ( this->microMaterial->microMatIsUsed == true ) {
114  OOFEM_ERROR("Micromaterial is already used on another element. Only one micromaterial can be assigned to one macro element");
115  }
116 
117  this->microDomain = this->microMaterial->problemMicro->giveDomain(1); //from engngm.h
118  this->microEngngModel = this->microDomain->giveEngngModel();
119  this->microEngngModel->setProblemScale(microScale); //set microScale attribute
121  this->microMaterial->init(); //from UnknownNumberingScheme()
123  this->firstCall = false;
124  }
125 
126  //call microproblem
127  //activeMStep = microMat->problemMicro->giveMetaStep(1);//->setNumberOfSteps(1);
128  //activeMStep->giveMetaStepNumber();
129  //microEngngModel->timer.startTimer(EngngModelTimer :: EMTT_AnalysisTimer);
130  //microproblem must have the same actual time and zero time increment
131 
132  this->microEngngModel->giveCurrentStep()->setTargetTime( tStep->giveTargetTime() ); //adjust total time
133  this->microEngngModel->giveCurrentStep()->setIntrinsicTime( tStep->giveIntrinsicTime() ); //adjust intrinsic time
134  this->microEngngModel->giveCurrentStep()->setTimeIncrement(0.); //no time increment
135  this->microEngngModel->initMetaStepAttributes( microEngngModel->giveCurrentMetaStep() ); //updates numerical method
136 
137  OOFEM_LOG_INFO( "\n** Assembling %s stiffness matrix of microproblem %p on macroElement %d, micTimeStep %d, micTime %f\n", __MatResponseModeToString(rMode), this->microMaterial->problemMicro, this->giveNumber(), this->microEngngModel->giveCurrentStep()->giveNumber(), this->microEngngModel->giveCurrentStep()->giveTargetTime() );
138 
139  //this->microEngngModel->solveYourselfAt( microEngngModel->giveCurrentStep() );
140  //this->microEngngModel->terminate( microEngngModel->giveCurrentStep() );
141 
142  if ( tStep != this->lastStiffMatrixTimeStep ) {
144  this->stiffMatrix = answer;
145  this->lastStiffMatrixTimeStep = tStep;
146  OOFEM_LOG_INFO("** Assembled now\n\n");
147  } else {
148  answer = this->stiffMatrix;
149  OOFEM_LOG_INFO("** Assembled previously in this time step\n\n");
150  }
151 }
152 
153 
154 //assign values to DOF on the boundary according to definition on macrolspace and actual displacement stage
156 {
157  GeneralBoundaryCondition *GeneralBoundaryCond;
158  Function *timeFunct;
159  DynamicInputRecord ir_func, ir_bc;
160  FloatArray n(8), answer, localCoords;
161  double displ;
162  FloatArray displ_x(8), displ_y(8), displ_z(8);
163  int counter;
164 
165  //dofManArray has the node order as specified in input file
166  for ( int i = 1; i <= this->giveNumberOfNodes(); i++ ) { //8 nodes
167  //global displacements
168  displ_x.at(i) = this->giveNode(i)->giveDofWithID(D_u)->giveUnknown(VM_Total, tStep);
169  displ_y.at(i) = this->giveNode(i)->giveDofWithID(D_v)->giveUnknown(VM_Total, tStep);
170  displ_z.at(i) = this->giveNode(i)->giveDofWithID(D_w)->giveUnknown(VM_Total, tStep);
171  }
172 
173  //overrides the first load-time function to be a constant
176  }
177 
178  ir_func.setRecordKeywordField("constantfunction", 1);
179  ir_func.setField(1.0, _IFT_ConstantFunction_f);
180  if ( ( timeFunct = classFactory.createFunction("constantfunction", 1, microDomain) ) == NULL ) {
181  OOFEM_ERROR("Couldn't create constant time function");
182  }
183  timeFunct->initializeFrom(& ir_func);
184  microDomain->setFunction(1, timeFunct);
185 
186 
187  /*assign to each boundary node the form "bc 3 # # #", set 0s on free nodes
188  * modify bcList = corresponds to "nbc"
189  */
190  microDomain->clearBoundaryConditions(); //from domain.C
192 
193  counter = 1;
194  for ( auto &DofMan : microDomain->giveDofManagers() ) { //go through all nodes on microDomain
195  if ( microBoundaryNodes.contains( DofMan->giveGlobalNumber() ) ) { //if the node number is on boundary
196  this->evalInterpolation( n, microMaterial->microMasterCoords, * DofMan->giveCoordinates() );
197  //n.printYourself();
198 
199  for ( Dof *dof: *DofMan ) {
200  this->microBoundaryDofManager.at(counter) = DofMan->giveGlobalNumber();
201  dof->setBcId(counter);
202  DofIDItem id = dof->giveDofID();
203  displ = n.dotProduct( id == D_u ? displ_x : ( id == D_v ? displ_y : displ_z ) );
204  ir_bc.setRecordKeywordField("boundarycondition", counter);
207  if ( ( GeneralBoundaryCond = classFactory.createBoundaryCondition("boundarycondition", counter, microDomain) ) == NULL ) {
208  OOFEM_ERROR("Couldn't create boundary condition.");
209  }
210  GeneralBoundaryCond->initializeFrom(& ir_bc);
211  microDomain->setBoundaryCondition(counter, GeneralBoundaryCond);
212  counter++;
213  }
214  } else {
215  for ( Dof *dof: *DofMan ) {
216  dof->setBcId(0);
217  }
218  }
219  }
220 }
221 
222 //obtain nodal forces from underlying microScale
223 //node numbering on element is in the same order as in the input file
224 //useUpdatedGpRecord=1 is used for printing of reactions
225 void MacroLSpace :: giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
226 {
227  //StructuralEngngModel *microStructuralEngngModel;
228  FloatArray reactions, localCoords, n(8);
229  DofManager *DofMan;
230  double reactionForce;
231 
232  this->microEngngModel->giveCurrentStep()->setTargetTime( tStep->giveTargetTime() ); //adjust total time
233  this->microEngngModel->giveCurrentStep()->setIntrinsicTime( tStep->giveIntrinsicTime() ); //adjust total time
234  this->microEngngModel->giveCurrentStep()->setTimeIncrement(0.); //no time increment
235 
236  //OOFEM_LOG_INFO("*** useUpdatedGpRecord %d\n", useUpdatedGpRecord);
237 
238  if ( useUpdatedGpRecord ) { //printing of data
239  answer = this->internalMacroForcesVector;
240  } else {
241  OOFEM_LOG_INFO( "\n*** Solving reactions %p of macroElement %d, micTimeStep %d, macIteration %d, micTime %f\n", this->microMaterial->problemMicro, this->giveNumber(), this->microEngngModel->giveCurrentStep()->giveNumber(), this->iteration, this->microEngngModel->giveCurrentStep()->giveTargetTime() );
242 
243  this->iteration++;
244  this->changeMicroBoundaryConditions(tStep);
245 
248  //this->microEngngModel->terminate( this->microEngngModel->giveCurrentStep() );
249  StructuralEngngModel *microStructuralEngngModel = dynamic_cast< StructuralEngngModel * >(this->microEngngModel);
250 
251  //reaction vector contains contributions from unknownNumberingScheme
252  microStructuralEngngModel->computeReaction(reactions, this->microEngngModel->giveCurrentStep(), 1);
253  //reactions.printYourself();
254  answer.resize(24);
255  answer.zero();
256  /*for ( i = 1; i <= this->giveNumberOfNodes(); i++ ) { //8 nodes
257  * DofMan = microDomain->giveDofManager(i);
258  */
259 
260  for ( int i = 1; i <= this->microBoundaryDofManager.giveSize() / 3; i++ ) { //Number of DoFManagers stored in triplets
261  DofMan = microDomain->giveDofManager( this->microBoundaryDofManager.at(3 * i - 2) );
263  for ( int j = 1; j <= DofMan->giveNumberOfDofs(); j++ ) { //3
264  reactionForce = reactions.at(3 * i + j - 3);
265  for ( int k = 1; k <= 8; k++ ) {
266  answer.at(3 * k + j - 3) += reactionForce * n.at(k);
267  }
268  }
269  }
270 
271  this->internalMacroForcesVector = answer;
272  OOFEM_LOG_INFO("*** Reactions done\n", this->microMaterial->problemMicro);
273  }
274 
275  //answer.printYourself();
276  //OOFEM_ERROR("STOP");
277 }
278 
279 void MacroLSpace :: evalInterpolation(FloatArray &answer, const std::vector< FloatArray > &coords, const FloatArray &gcoords)
280 {
281  FloatArray localCoords;
282 
283  //this->interpolation.global2local(localCoords, coords, gcoords, 0.0);//returns even outside the element boundaries
284  //this->interpolation.evalN(answer, localCoords, 0.0);
285  this->interpolation.global2local( localCoords, gcoords, FEIVertexListGeometryWrapper(coords) ); //returns even outside the element boundaries
286  this->interpolation.evalN( answer, localCoords, FEIVertexListGeometryWrapper(coords) );
287 }
288 
289 
290 // Updates the receiver at end of time step.
292 {
293  FloatArray answer;
294 
295  for ( auto &iRule: integrationRulesArray ) {
296  iRule->updateYourself(tStep);
297  }
298 
299  OOFEM_LOG_INFO("*** Updating macroelement\n");
300  //set number of timestep so the microproblem counts from 1 to nsteps in each iteration but not totally
301  //this->microEngngModel->giveCurrentStep()->setNumber(1);
302  //recalculate microproblem
303  //this->giveInternalForcesVector(answer, tStep, 0);
304 
305  this->microEngngModel->terminate( this->microEngngModel->giveCurrentStep() ); //perform output, VTK
306  this->iteration = 1;
307  this->microEngngModel->giveNextStep(); //time step used in ouput file name
308 }
309 } // end namespace oofem
bool contains(int value) const
Definition: intarray.h:283
void setField(int item, InputFieldType id)
virtual bool isActivated(TimeStep *tStep)
Definition: element.C:793
Domain * microDomain
Definition: macrolspace.h:97
EngngModel * problemMicro
Pointer to the underlying micro problem.
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
Definition: macrolspace.C:102
TimeStep * lastStiffMatrixTimeStep
Last time step when stiffness matrix was assembled.
Definition: macrolspace.h:109
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: macrolspace.C:65
Function * createFunction(const char *name, int num, Domain *domain)
Creates new instance of load time function corresponding to given keyword.
Definition: classfactory.C:219
void initMetaStepAttributes(MetaStep *mStep)
Update e-model attributes attributes according to step metaStep attributes.
Definition: engngm.C:580
Class and object Domain.
Definition: domain.h:115
void setBoundaryCondition(int i, GeneralBoundaryCondition *obj)
Sets i-th component. The component will be further managed and maintained by domain object...
Definition: domain.C:459
virtual int global2local(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates local coordinates from given global ones.
Definition: fei3dhexalin.C:94
void setIntrinsicTime(double newt)
Sets only intrinsic time.
Definition: timestep.h:161
Wrapper around cell with vertex coordinates stored in FloatArray**.
Definition: feinterpol.h:115
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0)
Evaluates nodal representation of real internal forces.
Definition: macrolspace.C:225
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
Definition: macrolspace.C:291
virtual void changeMicroBoundaryConditions(TimeStep *tStep)
Related to setting the boundary conditions of micro problem.
Definition: macrolspace.C:155
void resizeFunctions(int _newSize)
Resizes the internal data structure to accommodate space for _newSize load time functions.
Definition: domain.C:451
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
const char * __MatResponseModeToString(MatResponseMode _value)
Definition: cltypes.C:326
virtual bool hasField(InputFieldType id)=0
Returns true if record contains field identified by idString keyword.
double giveTargetTime()
Returns target time.
Definition: timestep.h:146
void setTimeIncrement(double newDt)
Sets solution step time increment.
Definition: timestep.h:152
virtual void terminate(TimeStep *tStep)
Terminates the solution of time step.
Definition: engngm.C:656
virtual TimeStep * giveNextStep()
Returns next time step (next to current step) of receiver.
Definition: engngm.h:701
Base class for dof managers.
Definition: dofmanager.h:113
std::vector< FloatArray > microMasterCoords
Array containing coordinates of 8 master nodes of microproblem.
std::vector< std::unique_ptr< DofManager > > & giveDofManagers()
Definition: domain.h:400
GeneralBoundaryCondition * createBoundaryCondition(const char *name, int num, Domain *domain)
Creates new instance of boundary condition corresponding to given keyword.
Definition: classfactory.C:179
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: lspace.C:91
int & at(int i)
Coefficient access function.
Definition: intarray.h:103
MatResponseMode
Describes the character of characteristic material matrix.
MacroLSpace(int n, Domain *d)
Definition: macrolspace.C:50
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
Definition: fei3dhexalin.C:43
#define _IFT_GeneralBoundaryCondition_timeFunct
virtual int giveNumberOfNodes() const
Returns number of nodes of receiver.
Definition: element.h:662
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
#define _IFT_MacroLspace_microBoundaryNodes
Definition: macrolspace.h:44
MetaStep * giveCurrentMetaStep()
Returns current meta step.
Definition: engngm.C:1684
This class is a base class for microproblem.
Definition: micromaterial.h:89
bool microMatIsUsed
Flag signalizing whether micromaterial is used by other element.
int giveNumber()
Returns receiver&#39;s number.
Definition: timestep.h:129
#define OOFEM_LOG_INFO(...)
Definition: logger.h:127
int giveNumberOfDofs() const
Definition: dofmanager.C:279
#define OOFEM_ERROR(...)
Definition: error.h:61
REGISTER_Element(LSpace)
void clear()
Clears the array (zero size).
Definition: intarray.h:177
DofIDItem
Type representing particular dof type.
Definition: dofiditem.h:86
virtual void updateYourself(TimeStep *tStep)
Updates internal state after finishing time step.
Definition: engngm.C:612
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: femcmpnn.C:89
Abstract base class for all boundary conditions of problem.
EngngModel * microEngngModel
Definition: macrolspace.h:98
void setFunction(int i, Function *obj)
Sets i-th component. The component will be further managed and maintained by domain object...
Definition: domain.C:461
void resize(int n)
Checks size of receiver towards requested bounds.
Definition: intarray.C:124
double giveIntrinsicTime()
Returns intrinsic time, e.g. time in which constitutive model is evaluated.
Definition: timestep.h:148
IntArray microBoundaryNodes
Definition: macrolspace.h:93
Class representing vector of real numbers.
Definition: floatarray.h:82
virtual int checkProblemConsistency()
Allows programmer to test problem its internal data, before computation begins.
Definition: engngm.C:1844
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
Abstract base class representing a function with vector input and output.
Definition: function.h:88
void clearBoundaryConditions()
Clear all boundary conditions.
Definition: domain.C:465
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
void setMacroProperties(Domain *macroDomain, MacroLSpace *macroLSpaceElement, const IntArray &microMasterNodes, const IntArray &microBoundaryNodes)
IntArray microMasterNodes
Array containing the node mapping from microscale (which microMasterNodes corresponds to which macroN...
Definition: macrolspace.h:92
FloatMatrix stiffMatrix
Definition: macrolspace.h:103
IntArray microBoundaryDofManager
Stores node number on the boundary in the triplets.
Definition: macrolspace.h:102
This class implements a Linear 3d 8-node finite element for stress analysis.
Definition: lspace.h:60
Class representing the general Input Record.
Definition: inputrecord.h:101
int giveNumberOfFunctions() const
Returns number of load time functions in domain.
Definition: domain.h:444
Dof * giveDofWithID(int dofID) const
Returns DOF with given dofID; issues error if not present.
Definition: dofmanager.C:119
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
#define _IFT_ConstantFunction_f
Class representing the a dynamic Input Record.
FloatArray internalMacroForcesVector
Array containg the force vector from nodes (if condensation is skipped, use this vector).
Definition: macrolspace.h:107
ClassFactory & classFactory
Definition: classfactory.C:59
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
#define _IFT_BoundaryCondition_PrescribedValue
[rn,optional] Prescribed value of all DOFs
static FEI3dHexaLin interpolation
Definition: lspace.h:66
void setRecordKeywordField(std::string keyword, int number)
virtual void evalInterpolation(FloatArray &answer, const std::vector< FloatArray > &coords, const FloatArray &gcoords)
Evaluates shape function at a given pointnodal representation of real internal forces obtained from m...
Definition: macrolspace.C:279
Domain * giveDomain() const
Definition: femcmpnn.h:100
#define _IFT_MacroLspace_stiffMatrxFileName
Definition: macrolspace.h:45
This class implements extension of EngngModel for structural models.
int iteration
Information of iteration number.
Definition: macrolspace.h:100
void computeReaction(FloatArray &answer, TimeStep *tStep, int di)
Computes reaction forces.
void setTargetTime(double newt)
Sets only target time.
Definition: timestep.h:159
virtual void solveYourselfAt(TimeStep *tStep)
Solves problem for given time step.
Definition: engngm.h:451
virtual ~MacroLSpace()
Definition: macrolspace.C:62
void resizeBoundaryConditions(int _newSize)
Resizes the internal data structure to accommodate space for _newSize boundary conditions.
Definition: domain.C:449
#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
int giveSize() const
Definition: intarray.h:203
the oofem namespace is to define a context or scope in which all oofem names are defined.
Domain * giveDomain(int n)
Service for accessing particular problem domain.
Definition: engngm.C:1720
#define IR_GIVE_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:69
Abstract class Dof represents Degree Of Freedom in finite element mesh.
Definition: dof.h:93
MicroMaterial * microMaterial
Definition: macrolspace.h:96
DofManager * giveDofManager(int n)
Service for accessing particular domain dof manager.
Definition: domain.C:314
void giveMacroStiffnessMatrix(FloatMatrix &answer, TimeStep *tStep, MatResponseMode rMode, const IntArray &microMasterNodes, const IntArray &microBoundaryNodes)
#define _IFT_MacroLspace_microMasterNodes
Definition: macrolspace.h:43
Node * giveNode(int i) const
Returns reference to the i-th node of element.
Definition: element.h:610
#define OOFEM_WARNING(...)
Definition: error.h:62
Class representing solution step.
Definition: timestep.h:80
int stiffMatrxFileNoneReadingWriting
Process with external file for the storage of stiffness matrix 0-None, 1-read, 2-write.
Definition: macrolspace.h:105
void init(void)
Related to numbering scheme.
void setProblemScale(problemScale pscale)
Sets scale in multiscale simulation.
Definition: engngm.h:416
virtual Material * giveMaterial()
Definition: element.C:484
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