97 Eigen::Matrix<double,iSize,mSize>
sinkStrengths(
const Eigen::Matrix<double,iSize,1>& sinkValue,
const size_t& gID)
const
101 Eigen::Matrix<double,iSize,1> correctedSinkValue(sinkValue);
102 for(
int dof=0;dof<
iSize/2;dof++)
104 const double cmin =
cdp.n_min(dof)*
cdp.omega*correctedSinkValue(dof);
105 if(correctedSinkValue(
iSize/2+dof)<cmin)
107 correctedSinkValue(
iSize/2+dof)=cmin;
111 const std::vector<Eigen::Matrix<double,3,3>> Dlocal(
cdp.getDlocal());
112 Eigen::Array<double,1,mSize> aveD(Eigen::Array<double,1,mSize>::Zero());
113 Eigen::Array<double,1,mSize>
p(Eigen::Array<double,1,mSize>::Zero());
116 aveD(
k)=pow(Dlocal[
k].determinant(),1.0/3.0);
117 p(
k) =pow(Dlocal[
k](2,2)/Dlocal[
k](0,0),1.0/6.0);
125 assert(correctedSinkValue.minCoeff()>=0.0 &&
"Sink Value is smaller than or equals 0.");
134 const Eigen::Matrix<double,
iSize/2,1> disDensity((Eigen::Matrix<double,iSize/2,1>()<<
cdp.dislocationSinks(0),
135 cdp.dislocationSinks(1),
136 cdp.dislocationSinks(2),
137 cdp.dislocationSinks(3)).finished());
138 const Eigen::Matrix<double,
iSize/2,1> defectDensity(
cdp.clusterDensity(correctedSinkValue.template block<iSize/2,1>(
iSize/2,0).array(),correctedSinkValue.template block<iSize/2,1>(0,0).array()).transpose().matrix());
139 const Eigen::Array<double,
iSize/2,
mSize> rholD((defectDensity*aveD.matrix()).array());
140 const Eigen::Array<double,
iSize/2,
mSize> rhodD((disDensity*aveD.matrix()).array());
143 const Eigen::Array<double,
iSize/2,
mSize> Zloop = ZDAD*ZDRIFT;
144 const Eigen::Array<double,
iSize/2,
mSize> Zpyr(Eigen::Array<double,iSize/2,mSize>::Ones());
145 Eigen::Array<double,
iSize/2,
mSize> Ztotal(Eigen::Array<double,iSize/2,mSize>::Zero());
149 Ztotal.col(
k) =
cdp.sigmoidalVectorInterpolation(correctedSinkValue.template block<iSize/2,1>(
iSize/2,0).array(),correctedSinkValue.template block<iSize/2,1>(0,0).array(),Zpyr.col(
k),Zloop.col(
k));
152 const Eigen::Matrix<double,
iSize/2,
mSize> loopStrength(Ztotal*rholD);
153 const Eigen::Matrix<double,
iSize/2,
mSize> disStrengh(Zloop*rhodD);
155 Eigen::Matrix<double,iSize,mSize> sStrengh;
156 sStrengh << loopStrength,
171 const Eigen::Matrix<double,mSize,1> Cvalue(
inFactors.asDiagonal()*(*
cMe)(ele,bary));
172 const Eigen::Array<double,rows,1> sinkvalue((*
cIe)(ele,bary).array());
187 const size_t gID(*(ele.simplex.regionIDs().begin()));
189 const Eigen::Matrix<double,rows,mSize> sStrengh(
sinkStrengths(sinkvalue,gID));
190 const Eigen::Matrix<double,mSize,mSize> speciesFactors(
cdp.msVector.matrix().asDiagonal());
191 const Eigen::Array<double,
rows/2,1> fluxs((sStrengh.template block<rows/2,mSize>(0,0)*(speciesFactors*Cvalue)).array());
193 Eigen::Matrix<double,rows,cols>
temp(Eigen::Matrix<double,rows,cols>::Zero());
194 temp.template block<
rows/2,
cols>(
rows/2,0) = (
cdp.immobileSpeciesVector.transpose()*fluxs).matrix();