70 nlStatus->letTempStrainVectorBe(strainVector);
74 nlStatus->setLocalCumPlastStrainForAverage(cumPlastStrain);
79TrabBoneNL3D :: give3dMaterialStiffnessMatrix(MatResponseMode mode,
GaussPoint *gp,
84 if ( mode == ElasticStiffness ) {
86 auto elasticity =
inv(compliance);
88 }
else if ( mode == SecantStiffness ) {
90 auto elasticity =
inv(compliance);
91 auto tempDam = nlStatus->giveTempDam();
92 return elasticity * (1.0 - tempDam);
94 double kappa = nlStatus->giveKappa();
95 double tempKappa = nlStatus->giveTempKappa();
96 double dKappa = tempKappa - kappa;
97 if ( dKappa < 10.e-9 ) {
101 if ( dKappa > 0.0 ) {
103 auto &tempEffectiveStress = nlStatus->giveTempEffectiveStress();
105 double tempDam = nlStatus->giveTempDam();
106 double dam = nlStatus->giveDam();
107 auto &plasFlowDirec = nlStatus->givePlasFlowDirec();
108 auto &SSaTensor = nlStatus->giveSSaTensor();
109 double beta = nlStatus->giveBeta();
112 auto prodTensor =
Tdot(SSaTensor, plasFlowDirec);
114 auto secondTerm =
dyad(
dot(SSaTensor, plasFlowDirec), prodTensor) * (-( 1.0 - tempDam ) /
beta);
116 auto tangentMatrix = SSaTensor * (1.0 - tempDam) + secondTerm;
119 if ( tempDam - dam > 0 ) {
123 return tangentMatrix;
126 double tempDam = nlStatus->giveTempDam();
129 auto elasticity =
inv(compliance);
130 return elasticity * (1.0 - tempDam);
151 for (
auto &lir: *list ) {
152 auto rmat =
dynamic_cast< TrabBoneNL3D *
>( lir.nearGp->giveMaterial() );
154 rmat->giveRemoteNonlocalStiffnessContribution(lir.nearGp, rloc, s, rcontrib, tStep);
164std :: vector< localIntegrationRecord > *
165TrabBoneNL3D :: NonlocalMaterialStiffnessInterface_giveIntegrationDomainList(
GaussPoint *gp)
169 return nlStatus->giveIntegrationDomainList();
180 double dam = nlStatus->giveDam();
181 double tempDam = nlStatus->giveTempDam();
183 if ( ( tempDam - dam ) > 0.0 ) {
186 elem->giveLocationArray(loc, s);
187 auto &localNu = nlStatus->giveTempEffectiveStress();
190 elem->computeBmatrixAt(gp, b);
194 int nsize = localNu.giveSize();
196 for (
int i = 1; i <= nrows; i++ ) {
198 for (
int j = 1; j <= nsize; j++ ) {
199 sum += b.
at(j, i) * localNu.at(j);
221 elem->giveLocationArray(rloc, s);
222 elem->computeBmatrixAt(gp, b);
224 double kappa = nlStatus->giveKappa();
225 double tempKappa = nlStatus->giveTempKappa();
226 double dKappa = tempKappa - kappa;
227 if ( dKappa < 10.e-9 ) {
231 if ( dKappa > 0.0 ) {
233 const FloatArray &plasFlowDirec = nlStatus->givePlasFlowDirec();
234 const FloatMatrix &SSaTensor = nlStatus->giveSSaTensor();
235 double beta = nlStatus->giveBeta();
238 remoteNu = 1 /
beta * prodTensor;
257 auto &effStress = nlStatus->giveTempEffectiveStress();
259 auto stress = ( 1 - tempDam ) * effStress;
261 for (
int i = 1; i <= 6; i++ ) {
262 if ( sqrt( stress.at(i) * stress.at(i) ) < 1e-8 ) {
273 nlStatus->setTempDam(tempDam);
274 nlStatus->letTempStrainVectorBe(strain);
275 nlStatus->letTempStressVectorBe(stress);
288 auto list = nlStatus->giveIntegrationDomainList();
290 double nonlocalCumPlastStrain = 0.0;
291 for (
auto &lir: *list ) {
294 nonlocalContribution *= lir.weight;
295 nonlocalCumPlastStrain += nonlocalContribution;
298 nonlocalCumPlastStrain *= 1. / nlStatus->giveIntegrationScale();
300 double localCumPlastStrain = nlStatus->giveLocalCumPlastStrainForAverage();
301 return mParam * nonlocalCumPlastStrain + ( 1 -
mParam ) * localCumPlastStrain;
321 TrabBone3D :: initializeFrom(ir);
322 StructuralNonlocalMaterialExtensionInterface :: initializeFrom(ir);
337 TrabBone3D :: giveInputRecord(input);
349 if ( ( dist >= 0. ) && ( dist <= this->
R ) ) {
350 double help = ( 1. - dist * dist / (
R *
R ) );
369TrabBoneNL3DStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
371 StructuralMaterialStatus :: printOutputAt(file, tStep);
372 fprintf(file,
"status {");
373 fprintf(file,
" plastrains ");
375 fprintf( file,
" %.4e", val );
379 fprintf(file,
" kappa %.4e ,",
kappa);
380 fprintf(file,
" dam %.4e ,",
tempDam);
382 fprintf(file,
" psed %.4e ,", this->
tempPSED);
383 fprintf(file,
" tsed %.4e", this->
tempTSED);
384 fprintf(file,
"}\n");
389TrabBoneNL3DStatus :: initTempStatus()
391 TrabBone3DStatus :: initTempStatus();
396TrabBoneNL3DStatus :: updateYourself(
TimeStep *tStep)
398 TrabBone3DStatus :: updateYourself(tStep);
435 double localEquivalentStrainForAverage;
437 result = buff.
read(localEquivalentStrainForAverage);
#define REGISTER_Material(class)
virtual int read(int *data, std::size_t count)=0
Reads count integer values into array pointed by data.
virtual int givePackSizeOfDouble(std::size_t count)=0
virtual int write(const int *data, std::size_t count)=0
Writes count integer values from array pointed by data.
virtual double computeVolumeAround(GaussPoint *gp)
void zero()
Zeroes all coefficients of receiver.
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
int giveNumberOfColumns() const
Returns number of columns of receiver.
void plusDyadUnsym(const FloatArray &a, const FloatArray &b, double dV)
double at(std::size_t i, std::size_t j) const
Element * giveElement()
Returns corresponding element to receiver.
double giveLocalEquivalentStrainForAverage()
Returns the local equivalent strain to be averaged.
void setLocalEquivalentStrainForAverage(double ls)
Sets the localEquivalentStrainForAverage to given value.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual void initTempStatus(GaussPoint *gp) const
void buildNonlocalPointTable(GaussPoint *gp) const
void updateDomainBeforeNonlocAverage(TimeStep *tStep) const
std ::vector< localIntegrationRecord > * giveIntegrationDomainList()
NonlocalMaterialStiffnessInterface()
Constructor.
virtual int assemble(const IntArray &loc, const FloatMatrix &mat)=0
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode) const
StructuralNonlocalMaterialExtensionInterface(Domain *d)
StructuralNonlocalMaterialStatusExtensionInterface()
TrabBone3DStatus(GaussPoint *g)
FloatMatrixF< 6, 6 > constructAnisoComplTensor() const
Construct anisotropic compliance tensor.
void computePlasStrainEnerDensity(GaussPoint *gp, const FloatArrayF< 6 > &strain, const FloatArrayF< 6 > &stress) const
TrabBone3D(int n, Domain *d)
void performPlasticityReturn(GaussPoint *gp, const FloatArrayF< 6 > &strain, TimeStep *tStep) const
double computeDamage(GaussPoint *gp, TimeStep *tStep) const
FloatArrayF< 6 > computeDensificationStress(GaussPoint *gp, const FloatArrayF< 6 > &totalStrain, TimeStep *tStep) const
double giveLocalCumPlastStrainForAverage() const
double computeCumPlastStrain(GaussPoint *gp, TimeStep *tStep) const override
TrabBoneNL3D(int n, Domain *d)
int giveLocalNonlocalStiffnessContribution(GaussPoint *gp, IntArray &loc, const UnknownNumberingScheme &s, FloatArray &lcontrib, TimeStep *tStep)
double computeLocalCumPlastStrain(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const
FloatMatrixF< N, P > Tdot(const FloatMatrixF< M, N > &a, const FloatMatrixF< M, P > &b)
Computes .
FloatMatrixF< N, M > dyad(const FloatArrayF< N > &a, const FloatArrayF< M > &b)
Computes the dyadic product .
double sum(const FloatArray &x)
double dot(const FloatArray &x, const FloatArray &y)
FloatMatrixF< N, N > inv(const FloatMatrixF< N, N > &mat, double zeropiv=1e-24)
Computes the inverse.
@ NonlocalMaterialStiffnessInterfaceType
@ NonlocalMaterialStatusExtensionInterfaceType
@ NonlocalMaterialExtensionInterfaceType
double distance(const FloatArray &x, const FloatArray &y)
#define _IFT_TrabBoneNL3D_m
#define _IFT_TrabBoneNL3D_r