31 newgcov[
GIND(jj,kk)]=0.0;
60 extern int tetlapack_func(
double (*metrin)[NDIM],
double (*tetrout)[NDIM],
double eigenvaluesout[]);
62 #if(SUPERLONGDOUBLE==0)
68 DLOOP(jj,kk) metrin[jj][kk] = (double)metr[jj][kk];
70 DLOOP(jj,kk) tetr[jj][kk] = (
FTYPE)tetrout[jj][kk];
71 DLOOPA(jj) eigenvalues[jj] = (
FTYPE)eigenvaluesout[jj];
90 DLOOP(jj,kk) generalmatrixlower[jj][kk] = gcov[
GIND(jj,kk)];
103 DLOOP(j,k) tmpgeneralmatrix[
j][k] = tetr_con[
j][k];
104 DLOOP(j,k) tetr_con[
j][k] = 0. ;
105 DLOOP(j,k)
for(l=0;l<
NDIM;l++) tetr_con[j][k] +=
mink(j,l)*tmpgeneralmatrix[l][k] ;
108 DLOOPA(j) tmpgeneralvec[
j] = eigenvalues[
j];
110 DLOOPA(j)
for(l=0;l<
NDIM;l++) eigenvalues[j] +=
mink(j,l)*tmpgeneralvec[l] ;
117 DLOOP(j,k) tmpgeneralmatrix[
j][k] = 0. ;
118 DLOOP(j,k)
for(l=0;l<
NDIM;l++) tmpgeneralmatrix[j][k] += tetr_con[j][l]*gcov[
GIND(l,k)] ;
119 DLOOP(j,k) tetr_cov[
j][k] = 0. ;
120 DLOOP(j,k)
for(l=0;l<
NDIM;l++) tetr_cov[j][k] +=
mink(j,l)*tmpgeneralmatrix[l][k] ;
124 DLOOP(j,k) tmpgeneralmatrix[j+1][k+1] = tetr_cov[
j][k] ;
125 gaussj(tmpgeneralmatrix,NDIM,NULL,0) ;
126 DLOOP(j,k) tetr_con[
j][k] = tmpgeneralmatrix[k+1][j+1] ;
147 #define DEBUGLAPACK 1
167 #if(DEBUGLAPACK && (USINGLAPACK))
170 if(generalmatrix[1][1]<=0.0) generalmatrix[1][1]=
NUMEPSILON+fabs(generalmatrix[1][1]);
186 errorlist[jj][kk]=0.0;
190 error1+=fabs(tetrcon[jj][ll]-tetrconother[kk][ll]);
194 error2+=fabs(tetrcon[jj][ll]+tetrconother[kk][ll]);
197 errorlist[jj][kk]=error2;
199 signlistmat[jj][kk]=-1.0;
202 errorlist[jj][kk]=error1;
203 signlistmat[jj][kk]=1.0;
210 DLOOPA(kk) newlist[kk]=-1;
218 int uniquecheck=0;
DLOOPA(pp)
if(pp!=kk) uniquecheck += (newlist[pp]==jj);
219 if(fabs(errorlist[jj][kk])<minerror && newlist[kk]==-1 && uniquecheck==0){
220 minerror=fabs(errorlist[jj][kk]);
224 signerror=
sign(signlistmat[jj][kk]);
227 if(minjj==-1 || minkk==-1){
228 dualfprintf(
fail_file,
"Problem in finding minimum error between eigenvectors\n");
232 newlist[minkk]=minjj;
233 signlist[minkk]=signerror;
234 int uniquecheck=0;
DLOOPA(kk)
if(kk!=minkk) uniquecheck += (newlist[kk]==minjj);
236 dualfprintf(
fail_file,
"Tried to double set: %d %d %d\n",minkk,minjj);
241 DLOOPA(kk)
if(newlist[kk]==-1) notfoundall=1;
245 DLOOP(jj,kk) temptetrcon[jj][kk]=tetrcon[jj][kk];
246 DLOOPA(jj) tempeigenvalues[jj]=eigenvalues[jj];
254 eigenvalues[jj]=tempeigenvalues[newlist[jj]];
258 tetrcon[jj][kk]=temptetrcon[newlist[jj]][kk]*signlist[jj];
266 dualfprintf(
fail_file,
"\ninfo=%d\n",info);
269 dualfprintf(
fail_file,
"jj=%d eigenorig=%21.15g eigen=%21.15g old=%21.15g\n",jj,tempeigenvalues[jj],eigenvalues[jj],eigenvaluesother[jj]);
272 dualfprintf(
fail_file,
"jj=%d kk=%d lapack=%21.15g old=%21.15g\n",jj,kk,tetrcon[jj][kk],tetrconother[jj][kk]);
282 #else // else if not debugging
301 #endif // end over debug/not debug
317 FTYPE gtt,grr,grt,ghh,gpp;
329 gtt=generalmatrix[0][0];
330 grr=generalmatrix[1][1];
331 grt=generalmatrix[1][0];
332 ghh=generalmatrix[2][2];
333 gpp=generalmatrix[3][3];
335 blob1=grr - sqrt(4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt))) + gtt;
341 tetrcon[0][0]=-(sqrt(grr + sqrt(4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt))) - gtt)/
342 pow((4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt)))*blob1sq,0.25));
344 tetrcon[0][1] = (2.0*grt)/(sqrt(4.0*((grt)*(grt)) + (grr - gtt)*(grr + sqrt(4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt))) - gtt))*
345 sqrt(fabs(grr - sqrt(4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt))) + gtt)));
350 tetrcon[1][0] = (2.0*grt)/sqrt((4.0*((grt)*(grt)) + (grr - gtt)*(grr + sqrt(4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt))) - gtt))*
351 (grr + sqrt(4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt))) + gtt));
353 tetrcon[1][1] = sqrt((grr + sqrt(4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt))) - gtt)/
354 (sqrt(4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt)))*(grr + sqrt(4.0*((grt)*(grt)) + ((grr - gtt)*(grr - gtt))) + gtt)));
361 tetrcon[2][2] = 1.0/fabs(sqrt(ghh));
367 tetrcon[3][3] = 1.0/fabs(sqrt(gpp));
369 eigenvalues[0]=0.5*(grr - 1.*sqrt(4.*pow(grt,2) + pow(grr - 1.*gtt,2)) + gtt);
370 eigenvalues[1]=0.5*(grr + sqrt(4.*pow(grt,2) + pow(grr - 1.*gtt,2)) + gtt);
407 dxdxprim_ijk(ptrgeom->i,ptrgeom->j,ptrgeom->k,ptrgeom->p,dxdxp);
412 DLOOP(jj,kk) dxdxp[jj][kk]=idxdxp[jj][kk]=0.0;
413 DLOOPA(jj) dxdxp[jj][jj]=idxdxp[jj][jj]=1.0;
430 tetrcovX[jj][kk]=0.0;
432 tetrcovX[jj][kk] += tetrcovV[jj][ll]*dxdxp[ll][kk];
438 tetrconX[jj][kk]=0.0;
440 tetrconX[jj][kk] += tetrconV[jj][ll]*idxdxp[kk][ll];
445 DLOOP(jj,kk) tmuup[jj][kk]=tetrcovX[jj][kk];
446 DLOOP(jj,kk) tmudn[jj][kk]=tetrconX[jj][kk];
451 DLOOP(jj,kk) tmuup[jj][kk]=tetrcovV[jj][kk];
452 DLOOP(jj,kk) tmudn[jj][kk]=tetrconV[jj][kk];
508 int calc_ZAMOes_old(
struct of_geom *ptrgeom,
FTYPE emuup[][NDIM],
FTYPE emudn[][NDIM])
510 FTYPE e2nu,e2psi,e2mu1,e2mu2,omega;
511 FTYPE gtt,gtph,gphph,grr,gthth;
518 gtt=ptrgeom->gcov[
GIND(0,0)];
519 gtph=ptrgeom->gcov[
GIND(0,3)];
520 gphph=ptrgeom->gcov[
GIND(3,3)];
521 grr=ptrgeom->gcov[
GIND(1,1)];
522 gthth=ptrgeom->gcov[
GIND(2,2)];
525 e2nu=-gtt+gtph*gtph/gphph;
538 emuup[0][0]=sqrt(e2nu);
539 emuup[1][1]=sqrt(e2mu1);
540 emuup[2][2]=sqrt(e2mu2);
541 emuup[0][3]=-omega*sqrt(e2psi);
542 emuup[3][3]=sqrt(e2psi);
544 emudn[3][0]=omega*1./sqrt(e2nu);
545 emudn[0][0]=1./sqrt(e2nu);
546 emudn[1][1]=1./sqrt(e2mu1);
547 emudn[2][2]=1./sqrt(e2mu2);
548 emudn[3][3]=1./sqrt(e2psi);
572 DLOOP(mu,nu) wcov[
nu] += wcon[
mu]*(ptrgeom->gcov[
GIND(mu,nu)]);
576 DLOOP(mu,nu) ucov[
nu] += ucon[
mu]*(ptrgeom->gcov[
GIND(mu,nu)]);
585 + (1.0/(1.0+gamma)) * (wcon[
mu]*wcov[
nu] + ucon[
mu]*ucov[
nu] - gamma *(ucon[
mu]*wcov[
nu] + wcon[
mu]*ucov[
nu]))
586 + (ucon[
mu]*wcov[
nu] - wcon[
mu]*ucov[
nu]);
616 + (1.0/(1.0+gamma)) * (wcon[
mu]*wcov[
nu] + ucon[
mu]*ucov[
nu] - gamma *(ucon[
mu]*wcov[
nu] + wcon[
mu]*ucov[
nu]))
617 + (ucon[
mu]*wcov[
nu] - wcon[
mu]*ucov[
nu]);
645 lower_vec(uconlab,ptrgeom,ucovlab);
653 #if(0) // STAY AS ZERO
655 wcovlab[
TT]=-ptrgeom->alphalapse;
659 DLOOP(mu,nu) wconlab[
nu] += wcovlab[
mu]*(ptrgeom->gcon[
GIND(mu,nu)]);
667 DLOOP(mu,nu) wcovlab[
nu] += wconlab[
mu]*(ptrgeom->gcov[
GIND(mu,nu)]);
677 DLOOP(mu,nu) wconlab[
nu] += wcovlab[
mu]*(ptrgeom->gcon[
GIND(mu,nu)]);
687 DLOOPA(mu) wconlabortho[
mu]=uconlabortho[
mu]=0.0;
689 DLOOP(mu,nu) wconlabortho[
mu] += tetrcov[
mu][
nu]*wconlab[
nu];
690 DLOOP(mu,nu) uconlabortho[
mu] += tetrcov[
mu][
nu]*uconlab[
nu];
768 FTYPE vector4incopy[NPR];
776 DLOOPA(jj) vector4incopy[jj]=vector4in[jj];
779 if(harm2orthofluid==
LAB2FF){
782 DLOOPA(jj) vector4incopy[jj] *= 1.0;
785 DLOOPA(jj) vector4incopy[jj] *= 1.0;
796 if(harm2orthofluid==
FF2LAB){
806 DLOOPA(jj) vector4out[jj] /= 1.0;
809 DLOOPA(jj) vector4out[jj] /= 1.0;
855 dualfprintf(
fail_file,
"No such uconcovtype=%d\n",uconcovtype);
867 if(lab2orthofluid==
LAB2FF){
869 DLOOP(mu,nu) vector4out[
nu] += transboostlo[
nu][
mu]*vector4in[
mu];
873 DLOOP(mu,nu) vector4out[
mu] += vector4in[
nu]*transboostup[
nu][
mu];
877 if(lab2orthofluid==
LAB2FF){
879 DLOOP(mu,nu) vector4out[
nu] += transboostup[
nu][
mu]*vector4in[
mu];
883 DLOOP(mu,nu) vector4out[
mu] += vector4in[
nu]*transboostlo[
nu][
mu];
887 dualfprintf(
fail_file,
"No such v4concovtype=%d\n",v4concovtype);
920 raise_vec(uconcov,ptrgeom,ucon);
923 dualfprintf(
fail_file,
"No such uconcovtype=%d\n",uconcovtype);
939 DLOOP(mu,nu)
DLOOP(aa,bb) tensor4out[
nu][bb] += transboostlo[
nu][
mu]*transboostlo[bb][aa]*tensor4in[
mu][aa];
947 tensor4out[
mu][aa] += tensor4in[
nu][bb]*transboostup[
nu][
mu]*transboostup[bb][aa];
957 DLOOP(mu,nu)
DLOOP(aa,bb) tensor4out[
nu][bb] += transboostlo[
nu][
mu]*transboostup[bb][aa]*tensor4in[
mu][aa];
961 DLOOP(mu,nu)
DLOOP(aa,bb) tensor4out[
mu][aa] += tensor4in[
nu][bb]*transboostup[
nu][
mu]*transboostlo[bb][aa];
967 DLOOP(mu,nu)
DLOOP(aa,bb) tensor4out[
nu][bb] += transboostup[
nu][
mu]*transboostlo[bb][aa]*tensor4in[
mu][aa];
971 DLOOP(mu,nu)
DLOOP(aa,bb) tensor4out[
mu][aa] += tensor4in[
nu][bb]*transboostlo[
nu][
mu]*transboostup[bb][aa];
977 DLOOP(mu,nu)
DLOOP(aa,bb) tensor4out[
nu][bb] += transboostup[
nu][
mu]*transboostup[bb][aa]*tensor4in[
mu][aa];
981 DLOOP(mu,nu)
DLOOP(aa,bb) tensor4out[
mu][aa] += tensor4in[
nu][bb]*transboostlo[
nu][
mu]*transboostlo[bb][aa];
985 dualfprintf(
fail_file,
"No such tconcovtypeA=%d tconcovtypeB=%d\n",tconcovtypeA,tconcovtypeB);
1025 DLOOPA(jj) finalvec[jj]=veclab[jj];
1028 DLOOPA(jj) tempcomp[jj]=0.0;
1034 DLOOP(jj,kk) tempcomp[kk] += tetrcov[kk][jj]*finalvec[jj];
1039 DLOOP(jj,kk) tempcomp[kk] += tetrcon[kk][jj]*finalvec[jj];
1042 dualfprintf(
fail_file,
"No such concovtype=%d\n",concovtype);
1045 DLOOPA(jj) finalvec[jj]=tempcomp[jj];
1051 DLOOPA(jj) vecortho[jj]=finalvec[jj];
1063 int failreturn = gsl_poly_solve_cubic(b/a,c/a,d/a,&x0,&x1,&x2);
1065 dualfprintf(
fail_file,
"Shouldn't be here with no GSL\n");
1086 FTYPE Delta = 18.0*a*b*c*d - 4.0*b*b*b*d + b*b*c*c - 4.0*a*c*c*c - 27.0*a*a*d*d;
1097 FTYPE Delta0 = b*b - 3.0*a*c;
1098 FTYPE Delta1 = 2.0*b*b*b - 9.0*a*b*c + 27.0*a*a*d;
1099 FTYPE Delta2sq = -27.0*a*a*Delta + 4.0*Delta0*Delta0*Delta0;
1100 FTYPE Delta2=sqrt(Delta2sq);
1102 FTYPE C = pow( (Delta1 + sqrt(Delta1*Delta1 - 4.0*Delta0*Delta0*Delta0))*0.5 ,1.0/3.0);
1104 FTYPE r1 = -1.0/(3.0*
a) * (b + u1*C + Delta0/(u1*C));
1105 FTYPE r2 = -1.0/(3.0*
a) * (b + u2*C + Delta0/(u2*C));
1106 FTYPE r3 = -1.0/(3.0*
a) * (b + u3*C + Delta0/(u3*C));
1124 FTYPE vec1a=vec1[0];
1125 FTYPE vec1b=vec1[1];
1126 FTYPE vec1c=vec1[2];
1127 FTYPE vec1d=vec1[3];
1129 FTYPE vec2a=vec2[0];
1130 FTYPE vec2b=vec2[1];
1131 FTYPE vec2c=vec2[2];
1132 FTYPE vec2d=vec2[3];
1134 FTYPE vec3a=vec3[0];
1135 FTYPE vec3b=vec3[1];
1136 FTYPE vec3c=vec3[2];
1137 FTYPE vec3d=vec3[3];
1139 FTYPE vec4a=vec4[0];
1140 FTYPE vec4b=vec4[1];
1141 FTYPE vec4c=vec4[2];
1142 FTYPE vec4d=vec4[3];