60 std::ifstream FILEDmumu;
61 FILEDmumu.open(PATHfile);
64 if (!FILEDmumu.is_open()) {
65 std::cerr<<
"Error opening file "<<PATHfile<<
"!"<<std::endl;
66 if (FILEDmumu.fail()) {
67 std::cerr<<strerror(errno)<<std::endl;
74 for (
int i = 0;
i < 2;
i++) {
75 std::getline(FILEDmumu,lineBeta);
77 std::istringstream issBeta(lineBeta);
79 while ((issBeta >> numBeta)) {
84 std::string lineTaniso;
85 for (
int i = 0;
i < 2;
i++) {
86 std::getline(FILEDmumu,lineTaniso);
88 std::istringstream issTaniso(lineTaniso);
90 while ((issTaniso >> numTaniso)) {
96 for (
int i = 0;
i < 1;
i++) {
97 std::getline(FILEDmumu,lineDUMP);
107 std::getline(FILEDmumu,linenu0);
108 std::istringstream issnu0(linenu0);
109 std::vector<Real> tempLINE;
111 while((issnu0 >> numTEMP)) {
112 tempLINE.push_back(numTEMP);
115 std::cerr<<
"ERROR! line "<<
i<<
" entry in "<<PATHfile<<
" has "<<tempLINE.size()<<
" entries instead of expected "<<
n_Taniso<<
"!"<<std::endl;
130 const Real Taniso_in,
131 const Real betaParallel_in
133 Real Taniso = Taniso_in;
134 Real betaParallel = betaParallel_in;
148 if ( (betaIndx < 0) || (TanisoIndx < 0) ) {
171 const Real w11 = (beta2 - betaParallel)*(Taniso2 - Taniso) / ( (beta2 - beta1)*(Taniso2-Taniso1) );
172 const Real w12 = (beta2 - betaParallel)*(Taniso - Taniso1) / ( (beta2 - beta1)*(Taniso2-Taniso1) );
173 const Real w21 = (betaParallel - beta1)*(Taniso2 - Taniso) / ( (beta2 - beta1)*(Taniso2-Taniso1) );
174 const Real w22 = (betaParallel - beta1)*(Taniso - Taniso1) / ( (beta2 - beta1)*(Taniso2-Taniso1) );
182 const uint popID,
const size_t CellIdx,
bool& currentSpatialLoopComplete,
183 Realf& sparsity, std::array<Real,3>& b,
Real& nu0
188 currentSpatialLoopComplete =
false;
197 const Real Bnorm =
sqrt(B[0]*B[0] + B[1]*B[1] + B[2]*B[2]);
208 std::cerr<<
" ERROR! Attempting to interpolate nu0 value but file has not been read."<<std::endl;
213 Eigen::Matrix3d rot = Eigen::Quaterniond::FromTwoVectors(Eigen::Vector3d{b[0], b[1], b[2]}, Eigen::Vector3d{0, 0, 1}).normalized().toRotationMatrix();
214 Eigen::Matrix3d Ptensor {
219 Eigen::Matrix3d transposerot = rot.transpose();
220 Eigen::Matrix3d Pprime = rot * Ptensor * transposerot;
224 if (Pprime(2, 2) > std::numeric_limits<Real>::min()) {
225 Taniso = (Pprime(0, 0) + Pprime(1, 1)) / (2 * Pprime(2, 2));
228 Real betaParallel = 0.0;
239 currentSpatialLoopComplete =
true;
void computePitchAngleDiffusionParameters(SpatialCell &cell, const uint popID, const size_t CellIdx, bool ¤tSpatialLoopComplete, Realf &sparsity, std::array< Real, 3 > &b, Real &nu0)