71 const double alpha=0.5;
74 const VectorDim chord(ds.sink->get_P()-ds.source->get_P());
80 for(
const auto& gb : ds.grainBoundarySet)
84 std::deque<int> gbIDdeq;
85 gbIDdeq.push_back(gb->grainBndID.first);
86 gbIDdeq.push_back(gb->grainBndID.second);
88 for(
const int& otherGrainID : gbIDdeq)
90 for(
const auto& slipSystem : gb->grain(otherGrainID).slipSystems())
93 if(fabs(slipSystem.n.cartesian().dot(chord))<FLT_EPSILON)
95 const VectorDim pkForce=(ds.midPointStress()*slipSystem.s.cartesian()).cross(-chord.normalized());
97 if(pkForce.dot(gb->latticePlane(otherGrainID).unitNormal)<0.0)
99 const VectorDim b2=slipSystem.s.cartesian();
101 const double theta=acos(gb->rotationAxis().normalized().dot(chord.normalized()));
103 assert(theta>FLT_EPSILON &&
"PARALLEL DISLOCATION AND GB-DISLOCATION");
105 const double R=0.5*(gb->grainBoundaryType().dislocationSpacing/sin(theta));
107 const double tau2= (pkForce-pkForce.dot(slipSystem.n.cartesian())*slipSystem.n.cartesian()).norm();
110 const double deltaE =
alpha*(2.0*R*(b1+b2).squaredNorm()+M_PI*R*b2.squaredNorm()-2.0*R*b1.squaredNorm());
111 const double deltaEgb=0.0;
112 const double work = tau2*0.5*M_PI*R*R*b2.norm();
114 std::cout<<
"deltaE="<<deltaE<<std::endl;
115 std::cout<<
"work="<<work<<std::endl;
118 slipSystemMap.emplace(deltaE+deltaEgb-work,std::make_pair(slipSystem,gb));
125 if(slipSystemMap.size())
127 if(slipSystemMap.begin()->first<0.0)
146 LatticePlane snapPlane(P1,(slipSystemMap.begin()->second).first.n);
151 auto temp=DislocationSharedObjects<dim>::mesh.searchWithGuess(midD,ds.source->includingSimplex());
153 if(
temp.second->region->regionID!=otherGrainID)
158 temp=DislocationSharedObjects<dim>::mesh.searchWithGuess(midD,ds.source->includingSimplex());