57mRadius(0.0),mIncrementLength(0.0),mStrainThreshold(0.0), mUseRadialBasisFunc(false)
72 int useRadialBasisFunc = 0;
74 if ( useRadialBasisFunc == 1 ) {
112 if ( el !=
nullptr ) {
121 std :: vector< double >sigTTArray, sigRTArray;
135 const double l = 1.0 *
distance(x1, x2);
139 const double searchRadius = 3.0 * l;
147 double sumWiVi = 0.0;
148 for (
int elIndex: elIndices ) {
175 bool inFrontOfCrack =
true;
177 inFrontOfCrack =
false;
180 double r =
distance(x, globalCoord);
182 if ( r < l && inFrontOfCrack ) {
183 double w = ( ( l - r ) / ( pow(2.0 *
M_PI, 1.5) * pow(l, 3) ) ) * exp( -0.5 * pow(r, 2) / pow(l, 2) );
190 if ( ms ==
nullptr ) {
202 sumQiWiVi.
add(w * V, strainVecGP);
211 if ( fabs(sumWiVi) > 1.0e-12 ) {
212 strainVec.
beScaled(1.0 / sumWiVi, sumQiWiVi);
216 bool useCZGP =
false;
222 if ( ms ==
nullptr ) {
231 bool useCZGP =
false;
237 if ( ms ==
nullptr ) {
252 printf(
"Max principal strain: %e\n", principalVals[0]);
261 propTangent.
times(-1.0);
#define REGISTER_PropagationLaw(class)
double giveCoordinate(int i) const
const FloatArray & giveCoordinates() const
SpatialLocalizer * giveSpatialLocalizer()
Element * giveElement(int n)
virtual FEInterpolation * giveInterpolation() const
virtual int giveNumberOfDofManagers() const
DofManager * giveDofManager(int i) const
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
virtual double computeVolumeAround(GaussPoint *gp)
const TipInfo & giveTipInfo() const
virtual bool propagationIsAllowed() const
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
double dotProduct(const FloatArray &x) const
Index giveSize() const
Returns the size of receiver.
void beColumnOf(const FloatMatrix &mat, int col)
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
void zero()
Zeroes all coefficients of receiver.
void beScaled(double s, const FloatArray &b)
void add(const FloatArray &src)
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
const char * giveInputRecordName() const override
virtual ~PLPrincipalStrain()
virtual GaussPoint * giveClosestIP(const FloatArray &coords, int region, bool iCohesiveZoneGP=false)=0
virtual Element * giveElementContainingPoint(const FloatArray &coords, const IntArray *regionList=nullptr)=0
virtual void giveAllElementsWithIpWithinBox(elementContainerType &elemSet, const FloatArray &coords, const double radius)=0
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode)
static FloatArray Vec2(const double &a, const double &b)
@ principal_strain
For computing principal strains from engineering strains.
double distance(const FloatArray &x, const FloatArray &y)
#define _IFT_PLPrincipalStrain_IncLength
Increment length per time step.
#define _IFT_PLPrincipalStrain_RadialBasisFunc
If radial basis functions should be used for strain interpolation.
#define _IFT_PLPrincipalStrain_StrainThreshold
Threshold for crack propagation.
#define _IFT_PLPrincipalStrain_Radius
Radius away from tip used when picking sampling point.
double mPropagationLength
FloatArray mPropagationDir