12 double g_cov[3][3] = { {Q[0], Q[1], Q[2]}, {Q[1], Q[3], Q[4]}, {Q[2], Q[4], Q[5]} };
13 double det = Q[0]*Q[3]*Q[5] - Q[0]*Q[4]*Q[4] - Q[1]*Q[1]*Q[5] + 2*Q[1]*Q[2]*Q[4] -Q[2]*Q[2]*Q[3];
14 double invdet = 1./det;
16 double g_contr[3][3] = {
17 { ( Q[3]*Q[5]-Q[4]*Q[4])*invdet, -( Q[1]*Q[5]-Q[2]*Q[4])*invdet, -(-Q[1]*Q[4]+Q[2]*Q[3])*invdet},
18 {-( Q[1]*Q[5]-Q[4]*Q[2])*invdet, ( Q[0]*Q[5]-Q[2]*Q[2])*invdet, -( Q[0]*Q[4]-Q[2]*Q[1])*invdet},
19 {-(-Q[1]*Q[4]+Q[3]*Q[2])*invdet, -( Q[0]*Q[4]-Q[1]*Q[2])*invdet, ( Q[0]*Q[3]-Q[1]*Q[1])*invdet}
22 double phi=std::pow(det,-1./6.);
26 double Kex[3][3] = { {Q[6], Q[7], Q[8]}, {Q[7], Q[9], Q[10]}, {Q[8], Q[10], Q[11]} };
28 for (
int j=0;j<3;j++) traceK += g_contr[i][j]*Kex[i][j];
31 for (
int i=0;i<6;i++) {
33 Q[i+6]= phisq*(Q[i+6]-1./3. * traceK * Q[i]/phisq);
37 const double np = 1.0;
38 Q[53]=traceK; Q[54]=std::pow(phi,np);
65 inline void AuxiliaryCal(
double* NOALIAS Q,
double* LgradQ,
int nVars){
66 double gradQ[3][59]={0};
68 for (
int i=0;i<nVars;i++) {gradQ[d][i]=LgradQ[d*nVars+i];}
71 double g_cov[3][3] = { {Q[0], Q[1], Q[2]}, {Q[1], Q[3], Q[4]}, {Q[2], Q[4], Q[5]} };
72 double det = Q[0]*Q[3]*Q[5] - Q[0]*Q[4]*Q[4] - Q[1]*Q[1]*Q[5] + 2*Q[1]*Q[2]*Q[4] -Q[2]*Q[2]*Q[3];
73 double invdet = 1./det;
75 double g_contr[3][3] = {
76 { ( Q[3]*Q[5]-Q[4]*Q[4])*invdet, -( Q[1]*Q[5]-Q[2]*Q[4])*invdet, -(-Q[1]*Q[4]+Q[2]*Q[3])*invdet},
77 {-( Q[1]*Q[5]-Q[4]*Q[2])*invdet, ( Q[0]*Q[5]-Q[2]*Q[2])*invdet, -( Q[0]*Q[4]-Q[2]*Q[1])*invdet},
78 {-(-Q[1]*Q[4]+Q[3]*Q[2])*invdet, -( Q[0]*Q[4]-Q[1]*Q[2])*invdet, ( Q[0]*Q[3]-Q[1]*Q[1])*invdet}
82 for (
int i=0;i<3;i++) Q[23+i]=gradQ[i][16];
86 for (
int j=0;j<3;j++) Q[26+i*3+j]=gradQ[i][17+j];
90 for (
int j=0;j<6;j++) Q[35+i*6+j]=0.5*gradQ[i][0+j];
93 for (
int i=0;i<3;i++) Q[55+i]=gradQ[i][54];
95 double Christoffel_tilde[3][3][3] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
96 double DD[3][3][3] = {
97 {{Q[35], Q[36], Q[37]}, {Q[36], Q[38], Q[39]}, {Q[37], Q[39], Q[40]}},
98 {{Q[41], Q[42], Q[43]}, {Q[42], Q[44], Q[45]}, {Q[43], Q[45], Q[46]}},
99 {{Q[47], Q[48], Q[49]}, {Q[48], Q[50], Q[51]}, {Q[49], Q[51], Q[52]}}};
100 for (
int j = 0; j < 3; j++)
101 for (
int i = 0; i < 3; i++)
102 for (
int k = 0; k < 3; k++)
103 for (
int l = 0; l < 3; l++) {Christoffel_tilde[i][j][k] += g_contr[k][l] * ( DD[i][j][l] + DD[j][i][l] - DD[l][i][j] );}
105 for (
int i = 0; i < 3; i++)
106 for (
int l = 0; l < 3; l++)
107 for (
int j = 0; j < 3; j++) {Q[13+i] += g_contr[j][l] * Christoffel_tilde[j][l][i];}