Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
AnalyticalSolidSolutionNoise.cpp
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 *
3 *
4 * MoDELib is distributed without any warranty under the
5 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
6 */
7
8#ifndef model_AnalyticalSolidSolutionNoise_cpp
9#define model_AnalyticalSolidSolutionNoise_cpp
10
12//#include <complex.h>
13
14namespace model
15{
16
17// // Cai's doubly-convoluted spreading function in Fourier space
18// typename AnalyticalSolidSolutionNoise::REAL_SCALAR AnalyticalSolidSolutionNoise::Wk_Cai(REAL_SCALAR kx, REAL_SCALAR ky, REAL_SCALAR kz, REAL_SCALAR a)
19// {
20// REAL_SCALAR k = sqrt(kx*kx + ky*ky + kz*kz);
21// if(k>0.0)
22// {
23// return a*k*sqrt(0.5*boost::math::cyl_bessel_k(2,a*k));
24// }
25// else
26// {
27// return 1.;
28// }
29// }
30//
31// // Square of Cai's doubly-convoluted spreading function in Fourier space
32// typename AnalyticalSolidSolutionNoise::REAL_SCALAR AnalyticalSolidSolutionNoise::Wk_Cai_squared(REAL_SCALAR kx, REAL_SCALAR ky, REAL_SCALAR kz, REAL_SCALAR a)
33// {
34// const REAL_SCALAR k2(kx*kx + ky*ky + kz*kz);
35// const REAL_SCALAR k(sqrt(k2));
36// if(k2>0.0)
37// {
38// return a*a*k2*0.5*boost::math::cyl_bessel_k(2,a*k);
39// }
40// else
41// {
42// return 1.;
43// }
44// }
45//
46// // Cai spreading function
47// typename AnalyticalSolidSolutionNoise::REAL_SCALAR AnalyticalSolidSolutionNoise::W_Cai(REAL_SCALAR r2, REAL_SCALAR a)
48// {
49// return 15.*a*a*a*a/(8.*M_PI*pow(r2+a*a,7./2.));
50// }
51//
52// typename AnalyticalSolidSolutionNoise::REAL_SCALAR AnalyticalSolidSolutionNoise::W_t_Cai(REAL_SCALAR r2, REAL_SCALAR a)
53// {
54// return 0.3425*W_Cai(r2,0.9038*a) + 0.6575*W_Cai(r2,0.5451*a);
55// }
56
57 // normalized auto-correlation function in Fourier space for sigma_xy
59 {
60 REAL_SCALAR k2 = kx*kx + ky*ky + kz*kz;
61 return stressPrefactor*(kx*kx*ky*ky)/(k2*k2)*exp(-a*a*k2);
62 }
63
64 // normalized auto-correlation function in Fourier space for sigma_xz
66 {
67 REAL_SCALAR k2 = kx*kx + ky*ky + kz*kz;
68 return stressPrefactor*(kx*kx*kz*kz)/(k2*k2)*exp(-a*a*k2);
69 }
70
71 // normalized auto-correlation function in Fourier space for sigma_yz
73 {
74 REAL_SCALAR k2 = kx*kx + ky*ky + kz*kz;
75 return stressPrefactor*(ky*ky*kz*kz)/(k2*k2)*exp(-a*a*k2);
76 }
77
79 const int& seed,
82 const Eigen::Matrix<double,2,2>& latticeBasis,
83 const double& a_in,
84 const double& a_Cai_in,
85 const double& MSSS) :
86 /* init */ GlidePlaneNoiseBase<2>("AnalyticalSolidSolutionNoise"+tag,seed,gridSize,gridSpacing,latticeBasis)
87 /* init */,a(a_in)
88 /* init */,a_cai(a_Cai_in)
89 /* init */,stressPrefactor(MSSS*120.0*M_PI*sqrt(M_PI)*a*a*a/(gridLength.prod()))
90 {
91 }
92
93 std::array<AnalyticalSolidSolutionNoise::COMPLEX,2> AnalyticalSolidSolutionNoise::kCorrelations(const Eigen::Matrix<double,3,1>& kv,const Eigen::Matrix<int,3,1>& kvID) const
94 {
95 const double foldingFactor((kvID(2)==0 || kvID(2)==NZ/2)? 2.0 : 1.0);
96 std::array<AnalyticalSolidSolutionNoise::COMPLEX,2> temp{this->S_xz_k(kv(0),kv(1),kv(2))*foldingFactor,this->S_yz_k(kv(0),kv(1),kv(2))*foldingFactor};
97 if(a_cai>0.0)
98 {
99 const double wkc2(this->Wk_Cai_squared(kv(0),kv(1),kv(2), a_cai)); // using the square because this is before the square root
100 temp[0]*=wkc2;
101 temp[1]*=wkc2;
102 }
103 return temp ; // /!\ special case for k=0 and k==NZ/2 because of folding of C2R Fourier transform
104 }
105
106}
107#endif
108
REAL_SCALAR S_xy_k(REAL_SCALAR kx, REAL_SCALAR ky, REAL_SCALAR kz) const
REAL_SCALAR S_yz_k(REAL_SCALAR kx, REAL_SCALAR ky, REAL_SCALAR kz) const
NoiseTraitsBase::GridSpacingType GridSpacingType
std::array< COMPLEX, 2 > kCorrelations(const Eigen::Matrix< double, 3, 1 > &kv, const Eigen::Matrix< int, 3, 1 > &kvID) const override
REAL_SCALAR S_xz_k(REAL_SCALAR kx, REAL_SCALAR ky, REAL_SCALAR kz) const
AnalyticalSolidSolutionNoise(const std::string &tag, const int &seed, const GridSizeType &gridSize, const GridSpacingType &gridSpacing, const Eigen::Matrix< double, 2, 2 > &latticeBasis, const double &a_in, const double &a_Cai_in, const double &MSSS)
GlidePlaneNoiseBase(const std::string &tag_in, const int &seed_in, const NoiseTraitsBase::GridSizeType &gridSize_in, const NoiseTraitsBase::GridSpacingType &gridSpacing_SI_in, const Eigen::Matrix< double, 2, 2 > &latticeBasis)
static REAL_SCALAR Wk_Cai_squared(REAL_SCALAR kx, REAL_SCALAR ky, REAL_SCALAR kz, REAL_SCALAR a)
vertex temp