63 FloatArrayF<6> stress = (1.0 - tempDam) * nlStatus->giveTempEffectiveStress();
64 nlStatus->setTempDamage(tempDam);
65 nlStatus->letTempStrainVectorBe(totalStrain);
66 nlStatus->letTempStressVectorBe(stress);
67#ifdef keep_track_of_dissipated_energy
69 nlStatus->computeWork_PlaneStress(gp, gf);
71 return stress[{0, 1, 5}];
84 FloatArrayF<6> stress = (1.0 - tempDam) * nlStatus->giveTempEffectiveStress();
85 nlStatus->setTempDamage(tempDam);
86 nlStatus->letTempStrainVectorBe(totalStrain);
87 nlStatus->letTempStressVectorBe(stress);
88#ifdef keep_track_of_dissipated_energy
90 nlStatus->computeWork_1d(gp, gf);
97RankineMatNl :: givePlaneStressStiffMtrx(MatResponseMode mode,
GaussPoint *gp,
TimeStep *tStep)
const
99 if ( mode == ElasticStiffness ) {
105 if ( mode == SecantStiffness ) {
107 double damage = status->giveTempDamage();
108 return d * (1. - damage);
111 if ( mode == TangentStiffness ) {
112 double tempDamage = status->giveTempDamage();
113 double damage = status->giveDamage();
115 if ( tempDamage <= damage ) {
120 gprime *= ( 1. -
mm );
144 nlstatus->setLocalCumPlasticStrainForAverage(cumPlasticStrain);
152RankineMatNl :: giveNonlocalMetricModifierAt(
GaussPoint *gp)
const
156 if ( damage == 0. ) {
157 damage = status->giveDamage();
167 double nonlocalCumPlasticStrain = 0.0;
171 double localCumPlasticStrain = status->giveLocalCumPlasticStrainForAverage();
175 for (
auto &lir: *list ) {
178 if ( nonlocalContribution > 0 ) {
179 nonlocalContribution *= lir.weight;
182 nonlocalCumPlasticStrain += nonlocalContribution;
185 double scale = status->giveIntegrationScale();
187 nonlocalCumPlasticStrain *= 1. / scale;
190 nonlocalCumPlasticStrain *= 1. / scale;
192 nonlocalCumPlasticStrain += ( 1. - scale ) * status->giveLocalCumPlasticStrainForAverage();
196 double kappa =
mm * nonlocalCumPlasticStrain + ( 1. -
mm ) * localCumPlasticStrain;
197 status->setKappa_nl(nonlocalCumPlasticStrain);
198 status->setKappa_hat(kappa);
218 RankineMat :: initializeFrom(ir);
219 StructuralNonlocalMaterialExtensionInterface :: initializeFrom(ir);
226 RankineMat :: giveInputRecord(input);
227 StructuralNonlocalMaterialExtensionInterface :: giveInputRecord(input);
237 double dam = nlStatus->giveDamage();
239 if ( tempDam < dam ) {
270 for (
auto &lir: *list ) {
271 auto rmat =
dynamic_cast< RankineMatNl *
>( lir.nearGp->giveMaterial() );
273 rmat->giveRemoteNonlocalStiffnessContribution(lir.nearGp, rloc, s, rcontrib, tStep);
283std :: vector< localIntegrationRecord > *
284RankineMatNl :: NonlocalMaterialStiffnessInterface_giveIntegrationDomainList(
GaussPoint *gp)
288 return status->giveIntegrationDomainList();
300 double sum, damage, tempDamage;
307 if ( tempDamage <= damage ) {
321 for (
int i = 1; i <= nrows; i++ ) {
323 for (
int j = 1; j <= nsize; j++ ) {
324 sum += b.
at(j, i) * stress.
at(j);
327 lcontrib.
at(i) =
sum * factor;
349 if ( tempKappa <= kappa ) {
358 for (
int i = 1; i <= ncols; i++ ) {
360 for (
int j = 1; j <= nsize; j++ ) {
364 rcontrib.
at(i) =
sum;
372 if ( type == IST_CumPlasticStrain_2 ) {
379 }
else if ( type == IST_MaxEquivalentStrainLevel ) {
384 return RankineMat :: giveIPValue(answer, gp, type, tStep);
399RankineMatNlStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
401 StructuralMaterialStatus :: printOutputAt(file, tStep);
402 fprintf(file,
"status { ");
404#ifdef keep_track_of_dissipated_energy
407 fprintf(file,
" }\n");
411RankineMatNlStatus :: initTempStatus()
417 RankineMatStatus :: initTempStatus();
422RankineMatNlStatus :: updateYourself(
TimeStep *tStep)
429 RankineMatStatus :: updateYourself(tStep);
436 RankineMatStatus :: saveContext(stream, mode);
443 RankineMatStatus :: restoreContext(stream, mode);
453 return RankineMatStatus :: giveInterface(type);
474 double localCumPlasticStrainForAverage;
476 result = buff.
read(localCumPlasticStrainForAverage);
#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.
void giveLocationArray(IntArray &locationArray, const UnknownNumberingScheme &s, IntArray *dofIds=NULL) const
virtual double computeVolumeAround(GaussPoint *gp)
Index giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
*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.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual void initTempStatus(GaussPoint *gp) const
int averType
Parameter specifying how the weight function should be adjusted due to damage.
void buildNonlocalPointTable(GaussPoint *gp) const
ScalingType scaling
Parameter specifying the type of scaling of nonlocal weight function.
double mm
For "undernonlocal" or "overnonlocal" formulation.
void updateDomainBeforeNonlocAverage(TimeStep *tStep) const
void modifyNonlocalWeightFunctionAround(GaussPoint *gp) const
std ::vector< localIntegrationRecord > * giveIPIntegrationList(GaussPoint *gp) const
std ::vector< localIntegrationRecord > * giveIntegrationDomainList()
NonlocalMaterialStiffnessInterface()
Constructor.
double giveKappa_nl() const
void setLocalCumPlasticStrainForAverage(double ls)
double kappa_nl
For printing only.
double giveLocalCumPlasticStrainForAverage() const
int giveLocalNonlocalStiffnessContribution(GaussPoint *gp, IntArray &loc, const UnknownNumberingScheme &s, FloatArray &lcontrib, TimeStep *tStep)
double computeDamage(GaussPoint *gp, TimeStep *tStep) const
virtual double computeCumPlasticStrain(GaussPoint *gp, TimeStep *tStep) const
RankineMatNl(int n, Domain *d)
double computeLocalCumPlasticStrain(GaussPoint *gp, TimeStep *tStep) const
double giveTempDamage() const
double giveDamage() const
double giveTempCumulativePlasticStrain() const
const FloatArray & giveTempEffectiveStress() const
double stressWork
Density of total work done by stresses on strain increments.
double kappa
Cumulative plastic strain (initial).
double giveCumulativePlasticStrain() const
double damage
Damage (initial).
RankineMatStatus(GaussPoint *g)
double dissWork
Density of dissipated work.
LinearElasticMaterial * linearElasticMaterial
Reference to the basic elastic material.
double computeDamageParamPrime(double tempKappa) const
RankineMat(int n, Domain *d)
FloatMatrixF< 3, 3 > evaluatePlaneStressStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep, double gprime) const
double sig0
Initial (uniaxial) yield stress.
void computeEta(FloatArray &answer, RankineMatStatus *status)
Computes derivatives of final kappa with respect to final strain.
double computeDamageParam(double tempKappa) const
void performPlasticityReturn(GaussPoint *gp, const FloatArray &totalStrain) const
virtual int assemble(const IntArray &loc, const FloatMatrix &mat)=0
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int lowerIndx=1, int upperIndx=ALL_STRAINS)=0
StructuralNonlocalMaterialExtensionInterface(Domain *d)
StructuralNonlocalMaterialStatusExtensionInterface()
double sum(const FloatArray &x)
@ NonlocalMaterialStiffnessInterfaceType
@ NonlocalMaterialStatusExtensionInterfaceType
@ NonlocalMaterialExtensionInterfaceType