22 for(
const auto& pair : noiseFiles)
25 if(noiseFileString!=
"none" && noiseFileString!=
"None")
27 const std::string noiseFileName(std::filesystem::path(mat.materialFile).parent_path().string()+
"/"+noiseFileString);
31 const int seed(parser.readScalar<
int>(
"seed",
true));
32 const Eigen::Matrix<int,1,3> gridSize(parser.readMatrix<
int,1,3>(
"gridSize",
true));
33 const Eigen::Matrix<double,1,3> gridSpacing(parser.readMatrix<
double,1,3>(
"gridSpacing_SI",
true)/mat.b_SI);
35 if(type==
"AnalyticalSolidSolutionNoise")
37 const double a(parser.readScalar<
double>(
"spreadLstress_SI",
true)/mat.b_SI);
38 const double a_Cai(parser.readScalar<
double>(
"a_cai_SI",
true)/mat.b_SI);
39 const double MSSS(parser.readScalar<
double>(
"MSSS_SI",
true)/std::pow(mat.mu_SI,2));
40 const auto success(
solidSolutionNoise().emplace(tag,
new AnalyticalSolidSolutionNoise(tag,seed,gridSize,gridSpacing,Eigen::Matrix<double,2,2>::Identity(),
a,a_Cai,MSSS)));
44 throw std::runtime_error(
"Could not insert noise "+tag);
47 if(type==
"MDSolidSolutionNoise")
49 const double a_Cai(parser.readScalar<
double>(
"a_cai_SI",
true)/mat.b_SI);
52 const std::string correlationFile_xz(std::filesystem::path(mat.materialFile).parent_path().string()+
"/"+
StrUtilities::removeSpaces(parser.readString(
"correlationFile_xz",
true)));
53 const std::string correlationFile_yz(std::filesystem::path(mat.materialFile).parent_path().string()+
"/"+
StrUtilities::removeSpaces(parser.readString(
"correlationFile_yz",
true)));
55 const auto success(
solidSolutionNoise().emplace(tag,
new MDSolidSolutionNoise(mat,tag,correlationFile_xz,correlationFile_yz,seed,gridSize,gridSpacing,Eigen::Matrix<double,2,2>::Identity(),a_Cai)));
58 throw std::runtime_error(
"Could not insert noise "+tag);
61 if(type==
"MDStackingFaultNoise")
64 const std::string correlationFile_stackingFault(std::filesystem::path(mat.materialFile).parent_path().string()+
"/"+
StrUtilities::removeSpaces(parser.readString(
"correlationFile",
true)));
70 throw std::runtime_error(
"Could not insert noise "+tag);
73 if(type==
"MDShortRangeOrderNoise")
83 pair.second->computeRealNoise();
84 pair.second->computeRealNoiseStatistics(mat);
89 pair.second->computeRealNoise();
90 pair.second->computeRealNoiseStatistics(mat);
97 double effsolNoiseXZ(0.0);
98 double effsolNoiseYZ(0.0);
101 const auto idxAndWeights(noise.second->posToPeriodicCornerIdxAndWeights(localPos));
102 for(
size_t p=0;
p<idxAndWeights.first.size();++
p)
104 const int storageID(noise.second->storageIndex(idxAndWeights.first[
p](0),idxAndWeights.first[
p](1)));
105 effsolNoiseXZ+=noise.second->operator[](storageID)(0)*idxAndWeights.second[
p];
106 effsolNoiseYZ+=noise.second->operator[](storageID)(1)*idxAndWeights.second[
p];
110 double effsfNoise(0.0);
115 const auto idxAndWeights(noise.second->posToPeriodicCornerIdxAndWeights(noise.second->invTransposeLatticeBasis*localPos));
117 for(
size_t p=0;
p<idxAndWeights.first.size();++
p)
119 const int storageID(noise.second->storageIndex(idxAndWeights.first[
p](0),idxAndWeights.first[
p](1)));
120 effsfNoise+=noise.second->operator[](storageID)*idxAndWeights.second[
p];
123 return std::make_tuple(effsolNoiseXZ,effsolNoiseYZ,effsfNoise);
129 double effsolNoiseXZ(0.0);
130 double effsolNoiseYZ(0.0);
133 const Eigen::Array<int,2,1> pidx(noise.second->idxToPeriodicIdx(idx));
134 const int storageID(noise.second->storageIndex(pidx(0),pidx(1)));
135 effsolNoiseXZ+=noise.second->operator[](storageID)(0);
136 effsolNoiseYZ+=noise.second->operator[](storageID)(1);
139 double effsfNoise(0.0);
142 const Eigen::Array<int,2,1> pidx(noise.second->idxToPeriodicIdx(idx));
143 const int storageID(noise.second->storageIndex(pidx(0),pidx(1)));
144 effsfNoise+=noise.second->operator[](storageID);
147 return std::make_tuple(effsolNoiseXZ,effsolNoiseYZ,effsfNoise);
std::vector< std::pair< std::string, std::string > > readStringVector(const std::string &key)