87 std::vector<std::unique_ptr<EnrichmentItem>> eiList;
90 std::vector<FloatArray> center_coord_inserted_cracks;
93 for(
auto &el :
mpDomain->giveElements() ) {
95 int numIR = el->giveNumberOfIntegrationRules();
97 int csNum = el->giveCrossSection()->giveNumber();
101 for(
int irInd = 0; irInd < numIR; irInd++) {
107 for(
int gpInd = 0; gpInd < numGP; gpInd++) {
127 FloatArray crackTangent = {-crackNormal(1), crackNormal(0)};
146 std::vector<FloatArray> intersecPoints;
150 if(intersecPoints.size() == 2) {
151 ps = std::move(intersecPoints[0]);
152 pe = std::move(intersecPoints[1]);
159 FloatArray points = {ps(0), ps(1), pc(0), pc(1), pe(0), pe(1)};
165 bool insertionAllowed =
true;
170 insertionAllowed =
false;
177 insertionAllowed =
false;
184 insertionAllowed =
false;
188 for(
const auto &x: center_coord_inserted_cracks) {
190 insertionAllowed =
false;
191 printf(
"Preventing insertion.\n");
196 if(insertionAllowed) {
198 std::unique_ptr<Crack> crack = std::make_unique<Crack>(n, xMan,
mpDomain);
202 std::unique_ptr<BasicGeometry> geom = std::make_unique<PolygonLine>();
203 geom->insertVertexBack(ps);
204 geom->insertVertexBack(pc);
205 geom->insertVertexBack(pe);
206 crack->setGeometry(std::move(geom));
209 crack->setEnrichmentFunction(std::make_unique<HeavisideFunction>(1,
mpDomain));
212 crack->setEnrichmentFrontStart(std::make_unique<EnrFrontCohesiveBranchFuncOneEl>());
214 crack->setEnrichmentFrontEnd(std::make_unique<EnrFrontCohesiveBranchFuncOneEl>());
220 auto pl = std::make_unique<PLPrincipalStrain>();
225 crack->setPropagationLaw(std::move(pl));
227 crack->updateDofIdPool();
229 center_coord_inserted_cracks.push_back(pc);
230 eiList.push_back( std::unique_ptr<EnrichmentItem>(std::move(crack)) );
232 printf(
"NCPrincipalStrain: Nucleating a crack. principalVals[0]: %e\n", principalVals[0] );