76 status->setLocalStrainVectorForAverage(strainVector);
93 FloatArray princStress, nonlocalStrain, reducedSpaceStressVector;
94 FloatArray reducedNonlocStrainVector, fullNonlocStrainVector, principalStrain;
99 FloatArray reducedLocalStrainVector, localStrain;
108 for (
auto &lir: *list ) {
111 nonlocalContribution.
times(lir.weight);
113 reducedNonlocStrainVector.
add(nonlocalContribution);
123 reducedLocalStrainVector = totalStrain;
133 StructuralMaterial :: giveFullSymVectorForm( fullNonlocStrainVector, nonlocalStrain, gp->giveMaterialMode() );
137 fullNonlocStrainVector,
141 if ( status->
giveTempMode() == RCSDEMaterialStatus :: rcMode ) {
167 int anyOpeningCrack = 0;
168 for (
int i = 1; i <= 3; i++ ) {
175 if ( anyOpeningCrack ) {
177 double minSofteningPrincStress = this->
Ft,
E, Le, CurrFt,
Gf, Gf0, Gf1, e0,
ef, ef2, damage;
180 for (
int i = 1; i <= 3; i++ ) {
183 if ( princStress.
at(i) < minSofteningPrincStress ) {
184 minSofteningPrincStress = princStress.
at(i);
194 double G, minG, currG, princStressDis, princStrainDis;
201 StructuralMaterial :: giveVoigtSymVectorMask( indx, gp->giveMaterialMode() );
202 for (
int i = 4; i <= 6; i++ ) {
207 }
else if ( i == 5 ) {
210 }
else if ( i == 6 ) {
217 princStressDis = princStress.
at(ii) -
219 princStrainDis = principalStrain.
at(ii) -
220 principalStrain.
at(jj);
225 currG = princStressDis / ( 2.0 * princStrainDis );
229 minG =
min(minG, currG);
242 for (
int i = 1; i <= 3; i++ ) {
247 minSofteningPrincStress = princStress.
at(i);
250 if ( princStress.
at(i) < minSofteningPrincStress ) {
251 minSofteningPrincStress = princStress.
at(i);
262 OOFEM_ERROR(
"can not switch to sd mode, while no cracking");
272 e0 = principalStrain.
at(ipos);
276 ef2 = Gf1 / princStress.
at(ipos);
290 status->
setTempMode(RCSDEMaterialStatus :: sdMode);
293 }
else if ( status->
giveTempMode() == RCSDEMaterialStatus :: sdMode ) {
314 Ds0.
times(1.0 - damage);
329 reducedSpaceStressVector.
beProductOf(Ds0, localStrain);
331 answer = reducedSpaceStressVector;
345 StructuralNonlocalMaterialExtensionInterface :: initializeFrom(ir);
365 this->
Gf = this->
Ft * this->
ef;
368 this->
ef = this->
Gf / this->
Ft;
376RCSDNLMaterial :: giveMinCrackStrainsForFullyOpenCrack(
GaussPoint *gp,
int i)
const
389 if ( ( dist >= 0. ) && ( dist <= this->
R ) ) {
390 double help = ( 1. - dist * dist / (
R *
R ) );
433RCSDNLMaterialStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
437 RCSDEMaterialStatus :: printOutputAt(file, tStep);
439 fprintf(file,
"nonlocstatus { ");
440 fprintf(file,
" nonloc strains ");
442 for (
auto &val : helpVec ) {
443 fprintf( file,
" %.4e", val );
446 fprintf(file,
"}\n");
451RCSDNLMaterialStatus :: initTempStatus()
457 RCSDEMaterialStatus :: initTempStatus();
464RCSDNLMaterialStatus :: updateYourself(
TimeStep *tStep)
471 RCSDEMaterialStatus :: updateYourself(tStep);
479 RCSDEMaterialStatus :: saveContext(stream, mode);
491 RCSDEMaterialStatus :: restoreContext(stream, mode);
#define REGISTER_Material(class)
int givePackSize(DataStream &buff) const
contextIOResultType storeYourself(DataStream &stream) const
contextIOResultType restoreYourself(DataStream &stream)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
bool contains(int value) const
GaussPoint * gp
Associated integration point.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual void initTempStatus(GaussPoint *gp) const
void buildNonlocalPointTable(GaussPoint *gp) const
void endIPNonlocalAverage(GaussPoint *gp) const
void updateDomainBeforeNonlocAverage(TimeStep *tStep) const
std ::vector< localIntegrationRecord > * giveIPIntegrationList(GaussPoint *gp) const
double giveIntegrationScale()
Returns associated integration scale.
const IntArray & giveTempCrackStatus()
double giveCrackStrain(int icrack) const
const FloatArray & giveCrackStrainVector() const
double giveCharLength(int icrack) const
const FloatMatrix & giveTempCrackDirs()
void giveRealPrincipalStressVector3d(FloatArray &answer, GaussPoint *, FloatArray &, FloatMatrix &, TimeStep *) const
LinearElasticMaterial * linearElasticMaterial
LinearElasticMaterial * giveLinearElasticMaterial() const
virtual void updateCrackStatus(GaussPoint *gp, const FloatArray &crackStrain) const
virtual void giveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep) const
RCSDEMaterialStatus(GaussPoint *g)
double giveTransitionEpsCoeff() const
void setTempMaxEquivStrain(double val)
void setDs0Matrix(FloatMatrix &mtrx)
void setTransitionEpsCoeff(double val)
double giveEpsF2Coeff() const
double giveTempMaxEquivStrain() const
void setTempDamageCoeff(double val)
__rcsdModeType giveTempMode() const
void setTempMode(__rcsdModeType mode)
const FloatMatrix * giveDs0Matrix()
void setEpsF2Coeff(double val)
double give(int aProperty, GaussPoint *gp) const override
RCSDEMaterial(int n, Domain *d)
double computeDamageCoeff(double, double, double) const
double computeCurrEquivStrain(GaussPoint *, const FloatArray &, double, TimeStep *tStep) const
const FloatArray & giveLocalStrainVectorForAverage()
FloatArray localStrainVectorForAverage
void setTempNonlocalStrainVector(FloatArray ls)
FloatArray nonlocalStrainVector
void setLocalStrainVectorForAverage(FloatArray ls)
FloatArray tempNonlocalStrainVector
double computeStrength(GaussPoint *, double) const override
double SDTransitionCoeff2
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode)
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode) const
StructuralNonlocalMaterialExtensionInterface(Domain *d)
StructuralNonlocalMaterialStatusExtensionInterface()
FloatArrayF< N > min(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
FloatArrayF< N > max(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
@ principal_strain
For computing principal strains from engineering strains.
@ NonlocalMaterialStatusExtensionInterfaceType
@ NonlocalMaterialExtensionInterfaceType
double distance(const FloatArray &x, const FloatArray &y)
#define _IFT_RCSDNLMaterial_sdtransitioncoeff
#define _IFT_RCSDNLMaterial_gf
#define _IFT_RCSDNLMaterial_sdtransitioncoeff2
#define _IFT_RCSDNLMaterial_r
#define _IFT_RCSDNLMaterial_ft
#define _IFT_RCSDNLMaterial_ef