59GradientDamageElement :: GradientDamageElement()
76 for (
int j = 1; j <= dofIdArray_u.
giveSize(); j++ ) {
83 for (
int j = 1; j <= dofIdArray_d.
giveSize(); j++ ) {
130GradientDamageElement :: computeNonlocalDegreesOfFreedom(
FloatArray &answer,
TimeStep *tStep, ValueModeType mode)
136GradientDamageElement :: computeStressVector_and_localDamageDrivingVariable(
FloatArray &answer,
double &localDamageDrivingVariable,
GaussPoint *gp,
TimeStep *tStep)
140 double nlDamageDrivingVariable;
148 OOFEM_ERROR(
"Material doesn't implement the required Gradient damage interface!");
156 }
else if ( nlGeo == 1 ) {
201 if ( matMode == _3dMat || matMode == _PlaneStrain ) {
205 }
else if ( matMode == _PlaneStress ) {
208 }
else if ( matMode == _1dMat ) {
211 OOFEM_ERROR(
"MaterialMode is not supported yet (%s)", __MaterialModeToString(matMode) );
216GradientDamageElement :: computeNonlocalDamageDrivingVariable(
double &answer,
GaussPoint *gp,
TimeStep *tStep)
239GradientDamageElement :: giveInternalForcesVector_d(
FloatArray &answer,
TimeStep *tStep,
int useUpdatedGpRecord)
243 double localDamageDrivingVariable = 0., f_dN = 0., nonlocalDamageDrivingVariable;
244 FloatArray Nd, stress, d_d, nonlocalDamageDrivingVariable_grad, f_dB;
254 if ( useUpdatedGpRecord == 1 ) {
268 nonlocalDamageDrivingVariable = Nd.
dotProduct(d_d);
269 nonlocalDamageDrivingVariable_grad.
beProductOf(Bd, d_d);
277 OOFEM_ERROR(
"Material doesn't implement the required Gradient damage interface!");
293 for (
int i = 1; i <= d.
giveSize(); i++ ) {
294 if ( d.
at(i) <= 0. ) {
302GradientDamageElement :: computeInternalForces_dN(
double &answer,
double localDamageDrivingVariable,
double nonlocalDamageDrivingVariable,
GaussPoint *gp,
TimeStep *tStep)
310 OOFEM_ERROR(
"Material doesn't implement the required Gradient damage interface!");
326 OOFEM_ERROR(
"Material doesn't implement the required Gradient damage interface!");
334GradientDamageElement :: giveInternalForcesVector_u(
FloatArray &answer,
TimeStep *tStep,
int useUpdatedGpRecord)
338 double localDamageDrivingVariable;
345 }
else if ( nlGeo == 1 ) {
349 if ( useUpdatedGpRecord == 1 ) {
360 StructuralMaterial :: giveReducedSymVectorForm( vRedStress, vStress, gp->giveMaterialMode() );
378GradientDamageElement :: giveInternalForcesVector(
FloatArray &answer,
TimeStep *tStep,
int useUpdatedGpRecord)
400GradientDamageElement :: computeStiffnessMatrix(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
418GradientDamageElement :: computeStiffnessMatrix_uu(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
431 OOFEM_ERROR(
"Material doesn't implement the required DpGrad interface!");
435 }
else if ( nlGeo == 1 ) {
445 if ( matStiffSymmFlag ) {
453 if ( matStiffSymmFlag ) {
460GradientDamageElement :: computeStiffnessMatrix_du(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
476 OOFEM_ERROR(
"Material doesn't implement the required DpGrad interface!");
505GradientDamageElement :: computeStiffnessMatrix_dd(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
520 OOFEM_ERROR(
"Material doesn't implement the required Gradient damage interface!");
557 for (
int i = 1; i <= d.
giveSize(); i++ ) {
558 if ( d.
at(i) <= 0. ) {
567GradientDamageElement :: computeStiffnessMatrix_ud(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
583 OOFEM_ERROR(
"Material doesn't implement the required gradient interface!");
612GradientDamageElement :: postInitialize()
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) const
bool hasDofID(DofIDItem id) const
int giveNumberOfDofs() const
EngngModel * giveEngngModel()
virtual IntegrationRule * giveIntegrationRule(int i)
virtual int giveNumberOfDofManagers() const
DofManager * giveDofManager(int i) const
CrossSection * giveCrossSection()
virtual double computeVolumeAround(GaussPoint *gp)
virtual fMode giveFormulation()
Domain * giveDomain() const
Domain * domain
Link to domain object, useful for communicating with other FEM components.
void assemble(const FloatArray &fe, const IntArray &loc)
double dotProduct(const FloatArray &x) const
Index giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
static FloatMatrix fromArray(const FloatArray &vector, bool transpose=false)
void resize(Index rows, Index cols)
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
void beProductTOf(const FloatMatrix &a, const FloatMatrix &b)
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
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.
void assemble(const FloatMatrix &src, const IntArray &loc)
double at(std::size_t i, std::size_t j) const
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
void computeDisplacementDegreesOfFreedom(FloatArray &answer, TimeStep *tStep)
void computeInternalForces_dB(FloatArray &answer, double localDamageDrivingVariable, FloatArray damage_grad, GaussPoint *gp, TimeStep *tStep)
void computeNonlocalDegreesOfFreedom(FloatArray &answer, TimeStep *tStep, ValueModeType vmt=VM_Total)
virtual void computeBdMatrixAt(GaussPoint *gp, FloatMatrix &answer)=0
void computeInternalForces_dN(double &answer, double localDamageDrivingVariable, double damage, GaussPoint *gp, TimeStep *tStep)
void computeDeformationGradientVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
virtual StructuralElement * giveStructuralElement()=0
void computeNonlocalDamageDrivingVariable(double &answer, GaussPoint *gp, TimeStep *tStep)
void computeStressVector_and_localDamageDrivingVariable(FloatArray &answer, double &localCumulatedPlasticStrain, GaussPoint *gp, TimeStep *tStep)
void computeStiffnessMatrix_ud(FloatMatrix &, MatResponseMode, TimeStep *)
void computeStiffnessMatrix_du(FloatMatrix &, MatResponseMode, TimeStep *)
void computeStiffnessMatrix_uu(FloatMatrix &, MatResponseMode, TimeStep *)
virtual void giveLocationArray_d(IntArray &answer)=0
void computeStiffnessMatrix_dd(FloatMatrix &, MatResponseMode, TimeStep *)
void giveInternalForcesVector_d(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
virtual void giveLocationArray_u(IntArray &answer)=0
virtual NLStructuralElement * giveNLStructuralElement()=0
void giveInternalForcesVector_u(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
void computeStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
virtual void computeNdMatrixAt(GaussPoint *gp, FloatArray &answer)=0
virtual void giveRealStressVectorGradientDamage(FloatArray &answer1, double &answer2, GaussPoint *gp, const FloatArray &totalStrain, double nonlocalDamageDrivningVariable, TimeStep *tStep)
gradient - based giveRealStressVector
virtual void giveGradientDamageStiffnessMatrix_du(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Left lower block.
virtual void giveGradientDamageStiffnessMatrix_dd_BB(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
virtual void giveGradientDamageStiffnessMatrix_dd_NN(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Right lower block.
virtual void giveNonlocalInternalForces_N_factor(double &answer, double nlddv, GaussPoint *gp, TimeStep *tStep)=0
virtual void giveFirstPKStressVectorGradientDamage(FloatArray &answer1, double &answer2, GaussPoint *gp, const FloatArray &totalStrain, double nonlocalDamageDrivningVariable, TimeStep *tStep)
virtual void giveGradientDamageStiffnessMatrix_ud(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Right upper block.
virtual void giveCauchyStressVectorGradientDamage(FloatArray &answer1, double &answer2, GaussPoint *gp, const FloatArray &totalStrain, double nonlocalDamageDrivningVariable, TimeStep *tStep)
virtual void giveGradientDamageStiffnessMatrix_uu(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Left upper block.
virtual void giveGradientDamageStiffnessMatrix_dd_BN(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void giveNonlocalInternalForces_B_factor(FloatArray &answer, const FloatArray &nlddv, GaussPoint *gp, TimeStep *tStep)=0
virtual void computeBHmatrixAt(GaussPoint *gp, FloatMatrix &answer)
virtual Interface * giveMaterialInterface(InterfaceType t, IntegrationPoint *ip)
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int lowerIndx=1, int upperIndx=ALL_STRAINS)=0
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
#define _IFT_GradientDamageElement_penalty
@ GradientDamageMaterialExtensionInterfaceType