42 static std::complex<double>
zero(0.0,0.0);
43 static std::complex<double>
one (1.0,0.0);
46 static const double kK1 = 2.53386551601e-00;
47 static const double kK2 = 4.62711492217e-09;
62 double dms21,
double dms32)
64 this->
SetMix(th12, th23, th13, deltacp);
74 <<
"| "<<M[0][0]<<
"\t"<<M[0][1]<<
"\t"<<M[0][2]<<
" |\n" 75 <<
"| "<<M[1][0]<<
"\t"<<M[1][1]<<
"\t"<<M[1][2]<<
" |\n" 76 <<
"| "<<M[2][0]<<
"\t"<<M[2][1]<<
"\t"<<M[2][2]<<
" |\n" 89 double s12, s23, s13, c12, c23, c13;
92 s12 = sin(th12); s23 = sin(th23); s13 = sin(th13);
93 c12 = cos(th12); c23 = cos(th23); c13 = cos(th13);
97 fU[0][2] = s13*exp(-idelta);
99 fU[1][0] = -s12*c23-c12*s23*s13*exp(idelta);
100 fU[1][1] = c12*c23-s12*s23*s13*exp(idelta);
103 fU[2][0] = s12*s23-c12*c23*s13*exp(idelta);
104 fU[2][1] = -c12*s23-s12*c23*s13*exp(idelta);
108 for (i=0; i<3; ++
i) {
109 for (j=0; j<3; ++j) {
120 double s1, s2, s3,
c1, c2, c3;
122 s1 = sin(th1); s2 = sin(th2); s3 = sin(th3);
123 c1 = cos(th1); c2 = cos(th2); c3 = cos(th3);
130 fU[1][1] = c1*c2*c3+s2*s3*exp(
id);
131 fU[1][2] = c1*c2*s3-s2*c3*exp(
id);
134 fU[2][1] = c1*s2*c3-c2*s3*exp(
id);
135 fU[2][2] = c1*s2*s3+c2*c3*exp(
id);
138 for (i=0; i<3; ++
i) {
139 for (j=0; j<3; ++j) {
170 if (dm21==0.0) {msqr[0] -= 0.5*eps; msqr[1] += 0.5*eps; }
171 if (dm32==0.0) {msqr[1] -= 0.5*eps; msqr[2] += 0.5*eps; }
175 for (
register int i=0;
i<3; ++
i) {
176 for (
register int j=0; j<3; ++j) {
182 fdmsqr[
i][j] = -(msqr[
i] - msqr[j]);
190 register int i, j,
k;
191 for (i=0; i<3; ++
i) {
192 for (j=0; j<3; ++j) {
194 for (k=0; k<3; ++
k) {
195 A[
i][j] += B[
i][
k]*C[
k][j];
205 const double dmsqr[][3],
209 register int a,
b,
i;
210 for (a=0; a<3; ++
a) {
211 for (b=0; b<3; ++
b) {
213 for (i=0; i<3; ++
i) {
215 A[
a][
b] += U[
a][
i]*exp(phase)*Udagg[
i][
b];
225 const double dmsqr[][3],
231 double k2r2GNeE =
kK2*2.0*M_SQRT2*Gf*Ne*(
kGeV2eV*
E);
232 for (k=0; k<3; ++
k) {
233 for (j=0; j<3; ++j) {
235 if (k==j) twoEH[
k][j] = dmsqr[j][0];
236 twoEH[
k][j] -= k2r2GNeE*U[0][j]*Udagg[
k][0];
248 this->
Multi(tmp, X, Udagg);
249 this->
Multi(A, U, tmp);
258 const double dMsqr[][3])
261 static const double One[3][3] = {{1.,0.,0.},
265 register int a,
b,
k;
276 for (a=0; a<3; ++
a) {
277 for (b=0; b<3; ++
b) {
278 EHM0[
a][
b] = twoEH[
a][
b]-Msqr[0]*One[
a][
b];
279 EHM1[
a][
b] = twoEH[
a][
b]-Msqr[1]*One[
a][
b];
280 EHM2[
a][
b] = twoEH[
a][
b]-Msqr[2]*One[
a][
b];
283 this->
Multi(EHM21,EHM2,EHM1);
284 this->
Multi(EHM20,EHM2,EHM0);
285 this->
Multi(EHM10,EHM1,EHM0);
288 for (a=0; a<3; ++
a) {
289 for (b=0; b<3; ++
b) {
291 for (k=0; k<3; ++
k) {
292 phase = exp(
complex(0.0,-
kK1*dMsqr[k][0]*L/E));
294 X[
a][
b] += (EHM21[
a][
b]/(dMsqr[
k][2]*dMsqr[
k][1]))*phase;
297 X[
a][
b] += (EHM20[
a][
b]/(dMsqr[
k][2]*dMsqr[
k][0]))*phase;
300 X[
a][
b] += (EHM10[
a][
b]/(dMsqr[
k][1]*dMsqr[
k][0]))*phase;
323 static const double k2PiOver3 = 2.0*M_PI/3.0;
324 double alpha2 = alpha*alpha;
325 double alpha3 = alpha*alpha2;
326 double alpha2Minus3beta = alpha2-3.0*beta;
329 (2.0*alpha3 - 9.0*alpha*beta + 27.0*gamma)/
330 (2.0*
pow(alpha2Minus3beta,1.5));
336 if (fabs(arg-1.0)>1.E-9) abort();
337 if (arg<-1.0) arg = -1.00;
338 if (arg>+1.0) arg = +1.00;
343 theta0 = acos(arg)/3.0;
344 theta1 = theta0-k2PiOver3;
345 theta2 = theta0+k2PiOver3;
348 fac = -2.0*sqrt(alpha2Minus3beta)/3.0;
349 constant = -alpha/3.0;
352 Msqr[0] = fac*cos(theta0) + constant;
353 Msqr[1] = fac*cos(theta1) + constant;
354 Msqr[2] = fac*cos(theta2) + constant;
363 const double dmsqr[][3],
367 double k2r2EGNe =
kK2*2.0*M_SQRT2*Gf*Ne*(
kGeV2eV*
E);
369 alpha = k2r2EGNe + dmsqr[0][1] + dmsqr[0][2];
372 dmsqr[0][1]*dmsqr[0][2] +
373 k2r2EGNe*(dmsqr[0][1]*(1.0-
norm(U[0][1])) +
374 dmsqr[0][2]*(1.0-
norm(U[0][2])));
376 gamma = k2r2EGNe*dmsqr[0][1]*dmsqr[0][2]*
norm(U[0][0]);
381 const double dmsqr[][3],
382 const double MsqrVac[],
387 double MsqrTmp[3] = {-99.9E9,-99.9E9,-99.9E9};
388 int flg[3] = {0,0,0};
392 for (i=0; i<3; ++
i) {
395 for (j=0; j<3; ++j) {
396 delta = fabs(MsqrVac[i] - dmsqr[j][0]);
397 if (delta<best) { best = delta; k = j; }
399 if (best>1.
E-9) abort();
400 if (k<0 || k>2) abort();
402 MsqrTmp[
i] = Msqr[
k];
405 for (i=0; i<3; ++
i)
if (flg[i]!=1) abort();
407 for (i=0; i<3; ++
i) {
408 Msqr[
i] = MsqrTmp[
i];
409 for (j=0; j<3; ++j) {
410 dMsqr[
i][j] = (MsqrTmp[
i] - MsqrTmp[j]);
425 for (i=0; i<3; ++
i) {
426 for (j=0; j<3; ++j) {
427 fA[
i][j] = Aout[
i][j];
434 static const double Gf = 1.166371E-5;
441 double alpha, beta, gamma;
442 double alpha0, beta0, gamma0;
453 this->
EvalEqn21(Msqr, alpha, beta, gamma);
458 this->
EvalEqn21(MsqrV, alpha0, beta0, gamma0);
462 this->
EvalEqn11(X, L, E, twoEH, Msqr, dMsqr);
470 this->
EvalEqn21(Msqr, alpha, beta, gamma);
472 this->
EvalEqn21(MsqrV, alpha0, beta0, gamma0);
474 this->
EvalEqn11(X, L, E, twoEH, Msqr, dMsqr);
481 for (i=0; i<3; ++
i) {
482 for (j=0; j<3; ++j) {
483 fA[
i][j] = Aout[
i][j];
491 const std::list<double>& Ne,
494 if (L.size()!=Ne.size()) abort();
498 for (; Li!=Lend; ++Li, ++Ni) {
500 static const double kRhoCutoff = 1.0E-6;
501 if (*Ni<kRhoCutoff) this->
PropVacuum(*Li, E, anti);
510 for (i=0; i<3; ++
i) {
511 for (j=0; j<3; ++j) {
void EvalEqn2(complex A[][3], const complex U[][3], const complex Udagg[][3], const double dmsqr[][3], double L, double E)
void EvalEqn21(double Msqr[], double alpha, double beta, double gamma)
void SetMixBWCP(double th1, double th2, double th3, double deltacp)
void PrintDeltaMsqrs() const
void DumpMatrix(const complex M[][3]) const
static std::complex< double > zero(0.0, 0.0)
void PropMatter(double L, double E, double Ne, int anti)
static std::complex< double > one(1.0, 0.0)
auto norm(Vector const &v)
Return norm of the specified vector.
void SetDeltaMsqrs(double dm21, double dm32)
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
void EvalEqn5(complex twoEH[][3], const complex U[][3], const complex Udagg[][3], const double dmsqr[][3], double E, double Gf, double Ne)
void SetMix(double th12, double th23, double th13, double deltacp)
std::complex< double > complex
void EvalEqn11(complex X[][3], double L, double E, const complex twoEH[][3], const double Msqr[], const double dMsqr[][3])
void SortEigenvalues(double dMsqr[][3], const double dmsqr[][3], const double MsqrVac[], double Msqr[])
static const double kGeV2eV
void EvalEqn22(double &alpha, double &beta, double &gamma, double E, double Gf, double Ne, const double dmsqr[][3], const complex U[][3])
void PropVacuum(double L, double E, int anti)
double P(int i, int j) const
void EvalEqn10(complex A[][3], const complex U[][3], const complex X[][3], const complex Udagg[][3])
void Multi(complex A[][3], const complex B[][3], const complex C[][3])
QTextStream & endl(QTextStream &s)