35 #include "../sm/EngineeringModels/structengngmodel.h" 36 #include "../sm/Elements/structuralelement.h" 37 #include "../sm/Elements/structuralelementevaluator.h" 38 #include "../sm/Elements/Interfaces/structuralinterfaceelement.h" 48 #include "../sm/Materials/structuralmaterial.h" 49 #include "../sm/CrossSections/structuralcrosssection.h" 70 if ( epsilonTemperature.
giveSize() > 0 ) {
84 static_cast< StructuralElement &
>( element ).computeInitialStressMatrix(answer, tStep);
90 internalVarUpdateStamp(0), internalForcesEBENorm()
105 IntArray dofManMap, dofidMap, eqnMap;
117 fprintf(out,
"\n\n\tR E A C T I O N S O U T P U T:\n\t_______________________________\n\n\n");
125 for (
int i = 1; i <= dofManMap.
giveSize(); i++ ) {
127 fprintf(out,
"\tNode %8d iDof %2d reaction % .4e [bc-id: %d]\n",
129 dofidMap.
at(i), reactions.
at( eqnMap.
at(i) ),
130 domain->
giveDofManager( dofManMap.
at(i) )->giveDofWithID( dofidMap.
at(i) )->giveBcId() );
147 int rindex, count = 0;
150 restrDofMans.
resize(numRestrDofs);
151 restrDofs.
resize(numRestrDofs);
154 for (
int i = 1; i <= ndofMan; i++ ) {
156 for (
Dof *jdof: *inode ) {
157 if ( jdof->isPrimaryDof() && ( jdof->hasBc(tStep) ) ) {
158 rindex = jdof->__givePrescribedEquationNumber();
161 restrDofMans.
at(count) = i;
162 restrDofs.
at(count) = jdof->giveDofID();
163 eqn.
at(count) = rindex;
249 if ( sePtr == NULL && see == NULL && siePtr == NULL ) {
250 OOFEM_WARNING(
"Element %d has no structural support", elem->giveLabel());
264 if ( !this->
giveDomain(1)->giveOutputManager()->testTimeStepOutput(tStep) ) {
278 for (
auto &dman : domain->giveDofManagers() ) {
283 for (
auto &bc : domain->giveBcs() ) {
286 if ( ( abc = dynamic_cast< ActiveBoundaryCondition * >(bc.get()) ) ) {
288 for (
int j = 1; j <= ndman; j++ ) {
295 for (
auto &elem : domain->giveElements() ) {
296 elem->updateInternalState(tStep);
317 elem->showSparseMtrxStructure(TangentStiffnessMatrix, gc, tStep);
This class represent a new concept on how to define elements.
int testDofManOutput(int, TimeStep *)
Tests if given dof manager is required to do its output for given time step.
The representation of EngngModel default unknown numbering.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
virtual void vectorFromElement(FloatArray &vec, Element &element, TimeStep *tStep, ValueModeType mode) const
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Access method for default integration rule.
Implementation for assembling internal forces vectors in standard monolithic, nonlinear FE-problems...
virtual int giveNumberOfDomainEquations(int di, const UnknownNumberingScheme &num)
Returns number of equations for given domain in active (current time step) time step.
int giveNumberOfDofManagers() const
Returns number of dof managers in domain.
std::vector< std::unique_ptr< Domain > > domainList
List of problem domains.
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)=0
Computes constitutive matrix of receiver.
double & at(int i)
Coefficient access function.
virtual int checkConsistency()
Allows programmer to test some receiver's internal data, before computation begins.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
virtual int requiresUnknownsDictionaryUpdate()
Indicates if EngngModel requires Dofs dictionaries to be updated.
void clear()
Clears receiver (zero size).
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual DofManager * giveInternalDofManager(int i)
Gives an internal dof manager from receiver.
void incrementStateCounter()
Updates solution state counter.
Abstract base class for all finite elements.
virtual void terminate(TimeStep *tStep)
Terminates the solution of time step.
Base class for dof managers.
StateCounterType internalVarUpdateStamp
Contains last time stamp of internal variable update.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
virtual void giveInternalForces(FloatArray &answer, bool normFlag, int di, TimeStep *tStep)
Evaluates the nodal representation of internal forces by assembling contributions from individual ele...
void printReactionForces(TimeStep *tStep, int id, FILE *out)
Computes and prints reaction forces, computed from nodal internal forces.
virtual int giveNumberOfInternalDofManagers()
Gives the number of internal dof managers.
void buildReactionTable(IntArray &restrDofMans, IntArray &restrDofs, IntArray &eqn, TimeStep *tStep, int di)
Builds the reaction force table.
Abstract base class for all "structural" finite elements.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
StateCounterType giveSolutionStateCounter()
Returns current solution state counter.
int updateSharedDofManagers(FloatArray &answer, const UnknownNumberingScheme &s, int ExchangeTag)
Exchanges necessary remote DofManagers data.
virtual void terminate(TimeStep *tStep)
Terminates the solution of time step.
Implementation for assembling external forces vectors in standard monolithic FE-problems.
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
virtual void updateYourself(TimeStep *tStep)
Updates internal state after finishing time step.
void resizeWithValues(int n, int allocChunk=0)
Checks size of receiver towards requested bounds.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
Abstract base class for all active boundary conditions.
void resize(int n)
Checks size of receiver towards requested bounds.
virtual void updateYourself(TimeStep *tStep)
Updates internal state after finishing time step.
Class representing vector of real numbers.
virtual int checkConsistency()
Allows programmer to test some receiver's internal data, before computation begins.
Implementation of matrix containing floating point numbers.
virtual void updateDofUnknownsDictionary(DofManager *, TimeStep *)
Updates necessary values in Dofs unknown dictionaries.
The representation of EngngModel default prescribed unknown numbering.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to output domain stream, for given time step.
void zero()
Zeroes all coefficients of receiver.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to output domain stream, for given time step.
virtual void showSparseMtrxStructure(int type, oofegGraphicContext &gc, TimeStep *tStep)
Shows the sparse structure of required matrix, type == 1 stiffness.
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int lowerIndx=1, int upperIndx=ALL_STRAINS)=0
Computes the geometrical matrix of receiver in given integration point.
Abstract base class for all "structural" constitutive models.
OutputManager * giveOutputManager()
Returns domain output manager.
FloatArray internalForcesEBENorm
Norm of nodal internal forces evaluated on element by element basis (squared)
std::vector< std::unique_ptr< Element > > & giveElements()
void computeReaction(FloatArray &answer, TimeStep *tStep, int di)
Computes reaction forces.
virtual void giveCharacteristicVector(FloatArray &answer, CharType type, ValueModeType mode, TimeStep *tStep)
Computes characteristic vector of receiver of requested type in given time step.
Abstract base class representing the "problem" under consideration.
Abstract base class for all structural interface elements.
virtual void matrixFromElement(FloatMatrix &mat, Element &element, TimeStep *tStep) const
int giveSize() const
Returns the size of receiver.
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.
virtual ~StructuralEngngModel()
Destructor.
Abstract class Dof represents Degree Of Freedom in finite element mesh.
DofManager * giveDofManager(int n)
Service for accessing particular domain dof manager.
virtual void computeExternalLoadReactionContribution(FloatArray &reactions, TimeStep *tStep, int di)
Computes the contribution external loading to reaction forces in given domain.
void updateInternalState(TimeStep *tStep)
Updates nodal values (calls also this->updateDofUnknownsDictionary for updating dofs unknowns diction...
#define OOFEM_WARNING(...)
Assembles the internal forces, without updating the strain.
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...
Class representing solution step.
virtual Material * giveMaterial(IntegrationPoint *ip)
Returns the material associated with the GP.
StructuralEngngModel(int i, EngngModel *_master=NULL)
Creates new StructuralEngngModel with number i, associated to domain d.
virtual void vectorFromElement(FloatArray &vec, Element &element, TimeStep *tStep, ValueModeType mode) const
void resize(int s)
Resizes receiver towards requested size.
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
Adds the product .