36 #include "../sm/Materials/structuralmaterial.h" 37 #include "../sm/Materials/structuralms.h" 152 OOFEM_LOG_INFO(
"** Microproblem %p instanciated\n\n", problemMicro);
174 OOFEM_ERROR(
"Should not be called, use giveInternalForcesVector instead");
284 stiffnessMatrixMicro->
zero();
286 stiffnessMatrixMicro->
zero();
296 Kbb.
at(i, j) = stiffnessMatrixMicro->
at(row, col);
304 Kbi->
at(i, j) = stiffnessMatrixMicro->
at(row, col);
324 tmpDouble += xVector.
at(j) * Kbi->
at(b, j);
327 Kii1KbiT->
at(i, b) = tmpDouble;
339 Kbb.
at(i, j) -= Kbb_1->
at(i, j);
365 if ( stiffnessMatrixMicro ) {
366 delete stiffnessMatrixMicro;
431 slaveMasterOnBoundary.
zero();
449 for (
int i = 1; i <= microBoundaryNodes.
giveSize(); i++ ) {
450 node = microBoundaryNodes.
at(i);
464 for (
int k = 0; k < 3; k++ ) {
468 OOFEM_ERROR(
"Row is outside the reduced stiffness matrix ");
472 OOFEM_ERROR(
"Column is outside the reduced stiffness matrix ");
475 slaveMasterOnBoundary.
at(row, col) = n.
at(j);
488 sum += slaveMasterOnBoundary.
at(i, j);
518 int numDofs, numDofMan;
519 int counterDefault = 1, counterBoundary = 1, counterInternal = 1;
526 for (
int nodeNum: microMasterNodes ) {
553 if ( numDofs != 3 ) {
557 for (
int j = 0; j < numDofs; j++ ) {
559 if ( microBoundaryNodes.
contains(numDofMan) ) {
600 OOFEM_ERROR(
"Number of domains on microproblem is greater than 1");
611 int numDofMan, numDof;
bool contains(int value) const
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
int giveNumberOfColumns() const
Returns number of columns of receiver.
EngngModel * problemMicro
Pointer to the underlying micro problem.
int giveDofEquationNumber(Dof *dof) const
Returns the equation number for corresponding DOF.
int giveGlobalNumber() const
EquationNumbering DofEquationNumbering
int giveNumberOfDofManagers() const
Returns number of dof managers in domain.
Base class for all matrices stored in sparse format.
virtual FloatArray * backSubstitutionWith(FloatArray &y) const
Computes the solution of linear system where A is receiver.
SparseMtrx * createSparseMtrx(SparseMtrxType type)
Creates new instance of sparse matrix corresponding to given keyword.
IntArray microBoundaryDofsArr
Array of equation numbers associated to boundary nodes.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
int totalBoundaryDofs
Number of equations associated with boundary nodes.
double & at(int i)
Coefficient access function.
MetaStep * giveMetaStep(int i)
Returns the i-th meta step.
IntArray microInternalDofsArr
Array of equation numbers associated to internal nodes.
virtual ~MicroMaterialStatus()
Destructor.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
This class implements a structural material status information.
int reqNumberOfDomainEquation
Required number of domain equations.
virtual FloatArray * giveCoordinates()
EngngModel * giveEngngModel()
Returns engineering model to which receiver is associated.
Implementation for assembling tangent matrices in standard monolithic FE-problems.
MicroMaterialStatus(int, Domain *d, GaussPoint *gp)
Constructor.
virtual TimeStep * giveNextStep()
Returns next time step (next to current step) of receiver.
Base class for dof managers.
std::vector< FloatArray > microMasterCoords
Array containing coordinates of 8 master nodes of microproblem.
virtual double & at(int i, int j)=0
Returns coefficient at position (i,j).
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
MicroMaterial(int n, Domain *d)
Constructor.
int NumberOfDofManagers
Number of DOF Managers.
virtual void giveRealStressVector_3d(FloatArray &answer, GaussPoint *, const FloatArray &, TimeStep *)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual int giveNumberOfNodes() const
Returns number of nodes of receiver.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
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.
EngngModel * InstanciateProblem(DataReader &dr, problemMode mode, int contextFlag, EngngModel *_master, bool parallelFlag)
Instanciates the new problem.
#define _IFT_MicroMaterial_fileName
MetaStep * giveCurrentMetaStep()
Returns current meta step.
int ** microBoundaryDofs
Array containing equation numbers for boundary nodes [DofManagerNumber][DOF].
bool microMatIsUsed
Flag signalizing whether micromaterial is used by other element.
#define OOFEM_LOG_INFO(...)
int giveNumberOfDofs() const
virtual int buildInternalStructure(EngngModel *eModel, int n, int m, const IntArray &I, const IntArray &J)
Builds internal structure of receiver based on I and J.
virtual int giveRequiredNumberOfDomainEquation() const
Returns required number of domain equation.
void clear()
Clears the array (zero size).
SparseMtrxType
Enumerative type used to identify the sparse matrix type.
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...
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
virtual void zero()=0
Zeroes the receiver.
double at(int i, int j) const
Coefficient access function.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
int giveDofManNumber() const
std::string inputFileNameMicro
Abstract base class representing a material status information.
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
void setMacroProperties(Domain *macroDomain, MacroLSpace *macroLSpaceElement, const IntArray µMasterNodes, const IntArray µBoundaryNodes)
int ** microInternalDofs
Array containing equation numbers for internal nodes to be condensed out [DofManagerNumber][DOF].
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
This class implements a macroelement.
virtual SparseMtrx * factorized()
Returns the receiver factorized.
virtual ~MicroMaterial()
Destructor.
Dof * giveDofWithID(int dofID) const
Returns DOF with given dofID; issues error if not present.
void followedBy(const IntArray &b, int allocChunk=0)
Appends array b at the end of receiver.
int giveNumberOfDomains()
Returns number of domains in problem.
int ** microDefaultDofs
Array containing default equation numbers for all nodes [DofManagerNumber][DOF].
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
ClassFactory & classFactory
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
int maxNumberOfDomainEquation
The maximum DOFs corresponding to released all of the boundary conditions.
Abstract base class for all "structural" constitutive models.
virtual FloatArray * giveCoordinates()
void zero()
Zeroes all coefficient of receiver.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
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...
Domain * giveDomain() const
int giveNumberOfColumns() const
Returns number of columns of receiver.
MacroLSpace * macroLSpaceElement
Pointer to the macroscale element.
REGISTER_Material(DummyMaterial)
Abstract base class representing the "problem" under consideration.
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
virtual bool isAllocatedAt(int i, int j) const
Checks whether memory is allocated at position (i,j).
Class representing the implementation of plain text date reader.
Node * giveNode(int n)
Service for accessing particular domain node.
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.
Abstract class Dof represents Degree Of Freedom in finite element mesh.
DofManager * giveDofManager(int n)
Service for accessing particular domain dof manager.
void giveMacroStiffnessMatrix(FloatMatrix &answer, TimeStep *tStep, MatResponseMode rMode, const IntArray µMasterNodes, const IntArray µBoundaryNodes)
int giveNumberOfRows() const
Returns number of rows of receiver.
Domain * macroDomain
Pointer to the macroscale domain.
int totalInternalDofs
Number of equations associated with boundary nodes.
Class representing integration point in finite element program.
Class representing solution step.
void init(void)
Related to numbering scheme.
int findFirstIndexOf(int value) const
Finds index of first occurrence of given value in array.