70void MicroMaterialStatus :: initTempStatus()
72 StructuralMaterialStatus :: initTempStatus();
75void MicroMaterialStatus :: updateYourself(
TimeStep *tStep)
77 StructuralMaterialStatus :: updateYourself(tStep);
80void MicroMaterialStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
122 OOFEM_ERROR(
"Should not be called, use giveInternalForcesVector instead");
174std::unique_ptr<MaterialStatus>
177 return std::make_unique<MicroMaterialStatus>(gp);
199 std::unique_ptr<SparseMtrx> stiffnessMatrixMicro;
200 std::unique_ptr<SparseMtrx> Kii;
219 Kii->buildInternalStructure(microEngngModel, 1, *
this);
229 stiffnessMatrixMicro =
classFactory.createSparseMtrx(sparseMtrxType);
230 stiffnessMatrixMicro->buildInternalStructure(microEngngModel, 1, *
this);
238 if ( stiffnessMatrixMicro->isAllocatedAt(row, col) ) {
240 Kbb.
at(i, j) = stiffnessMatrixMicro->at(row, col);
247 if ( stiffnessMatrixMicro->isAllocatedAt(row, col) ) {
248 Kbi.
at(i, j) = stiffnessMatrixMicro->at(row, col);
256 FloatArray xVector( Kii->giveNumberOfColumns() );
263 Kii->backSubstitutionWith(xVector);
268 tmpDouble += xVector.
at(j) * Kbi.
at(b, j);
271 Kii1KbiT.
at(i, b) = tmpDouble;
282 Kbb.
at(i, j) -= Kbb_1.
at(i, j);
354 slaveMasterOnBoundary.
zero();
372 for (
int i = 1; i <= microBoundaryNodes.
giveSize(); i++ ) {
373 node = microBoundaryNodes.
at(i);
387 for (
int k = 0; k < 3; k++ ) {
391 OOFEM_ERROR(
"Row is outside the reduced stiffness matrix ");
395 OOFEM_ERROR(
"Column is outside the reduced stiffness matrix ");
398 slaveMasterOnBoundary.
at(row, col) = n.
at(j);
411 sum += slaveMasterOnBoundary.
at(i, j);
441 int numDofs, numDofMan;
442 int counterDefault = 1, counterBoundary = 1, counterInternal = 1;
449 for (
int nodeNum: microMasterNodes ) {
471 for (
int i = 0; i < this->NumberOfDofManagers; i++ ) {
475 if ( numDofs != 3 ) {
479 for (
int j = 0; j < numDofs; j++ ) {
481 if ( microBoundaryNodes.
contains(numDofMan) ) {
519void MicroMaterial :: init(
void)
522 OOFEM_ERROR(
"Number of domains on microproblem is greater than 1");
530int MicroMaterial :: giveDofEquationNumber(
Dof *dof)
const
552int MicroMaterial :: giveRequiredNumberOfDomainEquation()
const
#define REGISTER_Material(class)
int giveGlobalNumber() const
int giveNumberOfDofs() const
const FloatArray & giveCoordinates() const
Dof * giveDofWithID(int dofID) const
DofIDItem giveDofID() const
int giveDofManNumber() const
int giveNumberOfDofManagers() const
Returns number of dof managers in domain.
DofManager * giveDofManager(int n)
EngngModel * giveEngngModel()
virtual TimeStep * giveNextStep()
Returns next time step (next to current step) of receiver.
MetaStep * giveCurrentMetaStep()
Returns current meta step.
MetaStep * giveMetaStep(int i)
Returns the i-th meta step.
virtual void assemble(SparseMtrx &answer, TimeStep *tStep, const MatrixAssembler &ma, const UnknownNumberingScheme &s, Domain *domain)
void zero()
Zeroes all coefficients of receiver.
void resize(Index rows, Index cols)
int giveNumberOfColumns() const
Returns number of columns of receiver.
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void zero()
Zeroes all coefficient of receiver.
int giveNumberOfRows() const
Returns number of rows of receiver.
double at(std::size_t i, std::size_t j) const
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
bool contains(int value) const
GaussPoint * gp
Associated integration point.
int totalBoundaryDofs
Number of equations associated with boundary nodes.
IntArray microBoundaryDofsArr
Array of equation numbers associated to boundary nodes.
int NumberOfDofManagers
Number of DOF Managers.
std::vector< IntArray > microDefaultDofs
Array containing default equation numbers for all nodes [DofManagerNumber][DOF].
MacroLSpace * macroLSpaceElement
Pointer to the macroscale element.
std::unique_ptr< EngngModel > problemMicro
Pointer to the underlying micro problem.
int totalInternalDofs
Number of equations associated with boundary nodes.
Domain * macroDomain
Pointer to the macroscale domain.
std::vector< IntArray > microBoundaryDofs
Array containing equation numbers for boundary nodes [DofManagerNumber][DOF].
std::vector< IntArray > microInternalDofs
Array containing equation numbers for internal nodes to be condensed out [DofManagerNumber][DOF].
int reqNumberOfDomainEquation
Required number of domain equations.
std::string inputFileNameMicro
int giveDofEquationNumber(Dof *dof) const override
bool microMatIsUsed
Flag signalizing whether micromaterial is used by other element.
EquationNumbering DofEquationNumbering
int maxNumberOfDomainEquation
The maximum DOFs corresponding to released all of the boundary conditions.
int giveRequiredNumberOfDomainEquation() const override
IntArray microInternalDofsArr
Array of equation numbers associated to internal nodes.
std::vector< FloatArray > microMasterCoords
Array containing coordinates of 8 master nodes of microproblem.
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)
UnknownNumberingScheme(void)
#define OOFEM_LOG_INFO(...)
#define _IFT_MicroMaterial_fileName
std::unique_ptr< EngngModel > InstanciateProblem(DataReader &dr, problemMode mode, int contextFlag, EngngModel *_master, bool parallelFlag)
double sum(const FloatArray &x)
ClassFactory & classFactory