42#define MDM_USE_MMAClosestIPTransfer
48#define MDM_MAPPING_DEBUG 1
58#ifdef MDM_MAPPING_DEBUG
64 #ifdef MDM_USE_MMAShapeFunctProjection
67 #ifdef MDM_USE_MMALeastSquareProjection
77#define _IFT_MDM_Name "mdm"
78#define _IFT_MDM_talpha "talpha"
79#define _IFT_MDM_parmd "parmd"
80#define _IFT_MDM_nonloc "nonloc"
82#define _IFT_MDM_efp "efp"
83#define _IFT_MDM_ep "ep"
84#define _IFT_MDM_gf "gf"
85#define _IFT_MDM_ft "ft"
86#define _IFT_MDM_formulation "formulation"
87#define _IFT_MDM_mode "mode"
88#define _IFT_MDM_mapper "mapper"
89#define _IFT_MDM_sourceRegionSet "sourceregset"
196#ifdef MDM_MAPPING_DEBUG
206 #ifdef MDM_USE_MMAClosestIPTransfer
210 #ifdef MDM_USE_MMAShapeFunctProjection
214 #ifdef MDM_USE_MMALeastSquareProjection
FloatArray tempDamageTensorEigenValues
Principal damage directions.
const FloatMatrix * giveLocalDamageTensorForAveragePtr()
void setMicroplaneTempDamage(int m, double val)
FloatMatrix DamageTensorTemp
FloatMatrix localDamageTensor
Interface * giveInterface(InterfaceType it) override
const FloatMatrix & giveLocalDamageTensorForAverage()
void restoreContext(DataStream &stream, ContextMode mode) override
void initTempStatus() override
FloatArray Psi
Damage values on individual microplanes.
FloatMatrix damageTensorEigenVectors
const FloatMatrix & giveTempDamageTensorEigenVec()
void setLocalDamageTensorForAverage(FloatMatrix src)
double giveMicroplaneTempDamage(int m)
void setMicroplaneTempDamageValues(FloatArray src)
void setTempDamageTensorEigenVals(FloatArray src)
FloatArray damageTensorEigenValues
const FloatArray & giveTempDamageTensorEigenVals()
void setTempDamageTensor(FloatMatrix src)
void updateYourself(TimeStep *tStep) override
FloatMatrix tempDamageTensorEigenVectors
const FloatMatrix & giveTempDamageTensor()
MDMStatus(GaussPoint *g, int nsd, int nmplanes)
void saveContext(DataStream &stream, ContextMode mode) override
double giveMicroplaneDamage(int m)
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
const FloatArray & giveDamageTensorEigenVals()
const FloatMatrix & giveDamageTensorEigenVec()
const FloatMatrix & giveDamageTensor()
const FloatArray & giveMicroplaneDamageValues()
void setTempDamageTensorEigenVec(FloatMatrix src)
const char * giveClassName() const override
FloatMatrix DamageTensor
Macroscopic damage tensor.
void applyDamageToStiffness(FloatMatrix &d, GaussPoint *gp) const
double ParMd
THREAD UNSAFE. These are modified when evaluating the material. Why? This must be avoided at all cost...
MDMFormulatrionType formulation
void giveRawMDMParameters(double &Efp, double &Ep, const FloatArray &reducedStrain, GaussPoint *gp) const
void rotateTensor4(FloatMatrix &Dlocal, const FloatMatrix &t) const
void initializeData(int numberOfMicroplanes) override
void giveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
FloatMatrixF< 4, 4 > givePlaneStrainStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
double Ft
Macroscopic tensile strength (necessary to determine Ep and Efp if not given).
FloatArrayF< 4 > giveRealStressVector_PlaneStrain(const FloatArrayF< 4 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_3d.
const char * giveInputRecordName() const override
void giveInputRecord(DynamicInputRecord &input) override
void transformStrainToPDC(FloatArray &answer, FloatArray &strain, FloatMatrix &t, GaussPoint *gp) const
virtual void giveSupportRadius(double &radius)
double tempDillatCoeff
Temperature dilatation coeff.
void initializeFrom(InputRecord &ir) override
static MMAShapeFunctProjection mapperSFT
Mapper used to map internal variables in adaptivity.
int hasBoundedSupport() const override
int nonlocal
Flag indicating local or nonlocal mode.
void transformStiffnessfromPDC(FloatMatrix &de, const FloatMatrix &t) const
FloatArrayF< 3 > giveRealStressVector_PlaneStress(const FloatArrayF< 3 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
void applyDamageTranformation(FloatArray &strainPDC, const FloatArray &tempDamageTensorEigenVals) const
double mdm_Ep
Parameter controlling the elastic limit.
double mdm_Efp
Prescribed value of ef-ep.
int MMI_finish(TimeStep *tStep) override
const char * giveClassName() const override
IsotropicLinearElasticMaterial linearElasticMaterial
Reference to bulk (undamaged) material.
static MMALeastSquareProjection mapperLST
void computePDC(FloatMatrix &tempDamageTensor, FloatArray &tempDamageTensorEigenVals, FloatMatrix &tempDamageTensorEigenVec) const
double R
Interaction radius, related to the nonlocal characteristic length of material.
std::unique_ptr< Set > sourceElemSet
cached source element set used to map internal variables (adaptivity), created on demand
Interface * giveInterface(InterfaceType it) override
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
void computeDamageTensor(FloatMatrix &tempDamageTensor, const FloatArray &totalStrain, GaussPoint *gp, TimeStep *tStep) const
FloatMatrixF< 3, 3 > givePlaneStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
int estimatePackSize(DataStream &buff, GaussPoint *ip) override
bool hasMaterialModeCapability(MaterialMode mode) const override
double predictRelativeRedistributionCost(GaussPoint *gp) override
double computeDamageOnPlane(GaussPoint *gp, int mnumber, const FloatArray &strain) const
int MMI_update(GaussPoint *gp, TimeStep *tStep, FloatArray *estrain=nullptr) override
static MMAClosestIPTransfer mapper2
Mapper used to map stresses in adaptivity.
int MMI_map(GaussPoint *gp, Domain *oldd, TimeStep *tStep) override
int nsd
Number of spatial dimensions.
void formTransformationMatrix(FloatMatrix &answer, const FloatMatrix &t, int n) const
int packUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip) override
void updateBeforeNonlocAverage(const FloatArray &strainVector, GaussPoint *gp, TimeStep *tStep) const override
int unpackAndUpdateUnknowns(DataStream &buff, TimeStep *tStep, GaussPoint *ip) override
double Gf
Fracture energy (necessary to determine Ep and Efp if not given).
int ndc
Number of damage components.
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void transformStressFromPDC(FloatArray &answer, const FloatArray &stressPDC, const FloatMatrix &t, GaussPoint *gp) const
double computeWeightFunction(const double cl, const FloatArray &src, const FloatArray &coord) const override
FloatArrayF< 6 > giveThermalDilatationVector(GaussPoint *gp, TimeStep *tStep) const override
void computeEffectiveStress(FloatArray &stressPDC, const FloatArray &strainPDC, GaussPoint *gp, TimeStep *tStep) const
double predictRelativeComputationalCost(GaussPoint *gp) override
void computeLocalDamageTensor(FloatMatrix &tempDamageTensor, const FloatArray &totalStrain, GaussPoint *gp, TimeStep *tStep) const
FloatArrayF< 6 > giveRealStressVector_3d(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
MaterialModelMapperInterface()
Constructor.
int numberOfMicroplanes
Number of microplanes.
MicroplaneMaterial(int n, Domain *d)
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralNonlocalMaterialExtensionInterface(Domain *d)
StructuralNonlocalMaterialStatusExtensionInterface()