Пример #1
0
/*!
 \fn TPZCartsys::RotationAngle()
 */
double TPZCartsys::RotationAngle()
{
	double rot = acos (fTr(0,0));
	double aux_rot = asin (fTr(0,1));
	
	if (aux_rot < 0.) rot = 2.*M_PI - rot;
	
	return rot;
}
Пример #2
0
void TPZCartsys::SetAxes(TPZVec<REAL> &x, TPZVec<REAL> &z){
	
	x[0] -= fOrigin[0];
	x[1] -= fOrigin[1];
	x[2] -= fOrigin[2];
	Normalise(x);
	
	fTr(0,0) = x[0];
	fTr(0,1) = x[1];
	fTr(0,2) = x[2];
	
	z[0] -= fOrigin[0];
	z[1] -= fOrigin[1];
	z[2] -= fOrigin[2];
	Normalise(z);
	
	fTr(2,0) = z[0];
	fTr(2,1) = z[1];
	fTr(2,2) = z[2];
	
	TPZVec<REAL> y(3,0.);
	GetNormal(z,x,y);
	fTr(1,0) = y[0];
	fTr(1,1) = y[1];
	fTr(1,2) = y[2];
}
Пример #3
0
void TPZCartsys::RotateToReference (TPZVec<REAL> &point)
{
	TPZVec<REAL> newp(3,0.);
	newp[0] = fTr(0,0)*point[0] + fTr(1,0)*point[1] + fTr(2,0)*point[2];
	newp[1] = fTr(0,1)*point[0] + fTr(1,1)*point[1] + fTr(2,1)*point[2];
	newp[2] = fTr(0,2)*point[0] + fTr(1,2)*point[1] + fTr(2,2)*point[2];
	point[0] = newp[0];
	point[1] = newp[1];
	point[2] = newp[2];
}
Пример #4
0
void TPZCartsys::CalcRotMatrix(TPZVec<REAL> &angle){
	fTr(0,0)=cos(angle[1])*cos(angle[2]);
	fTr(0,1)=cos(angle[1])*sin(angle[2]);
	fTr(0,2)=sin(angle[1]);
	fTr(1,0)=-(cos(angle[2])*sin(angle[0])*sin(angle[1])) - cos(angle[0])*sin(angle[2]);
	fTr(1,1)=cos(angle[0])*cos(angle[2]) - sin(angle[0])*sin(angle[1])*sin(angle[2]);
	fTr(1,2)=cos(angle[1])*sin(angle[0]);
	fTr(2,0)=-(cos(angle[0])*cos(angle[2])*sin(angle[1])) + sin(angle[0])*sin(angle[2]);
	fTr(2,1)=-(cos(angle[2])*sin(angle[0])) - cos(angle[0])*sin(angle[1])*sin(angle[2]);
	fTr(2,2)=cos(angle[0])*cos(angle[1]);
}
Пример #5
0
/**Constructor - 
 * create one object from a reference coordinate system
 * and a origin and a rotation matrix
 */
TPZCartsys::TPZCartsys(int num, TPZCartsys * ref, TPZVec<REAL> * org, TPZFMatrix *angles):TPZCosys(num,ref),fOrigin(3,0.){
	int i,j;
	if (org) fOrigin = *org;
	if (angles) fTr = *angles;
	else 
		for (i=0; i<3; i++)
			for (j=0; j<3; j++)
				fTr(i,j) = (i == j) ? 1.0 : 0.0;
}
Пример #6
0
/**Constructor - 
 * create one object from a reference coordinate system
 * and a origin and euller angles
 */
TPZCartsys::TPZCartsys(int num, TPZCartsys * ref, TPZVec<REAL> * org, TPZVec<REAL> *angles):TPZCosys(num,ref),fOrigin(3,0.){
	int i,j;
	if (org) {
		fOrigin = *org;
	}
	if (angles) CalcRotMatrix(*angles);
	else {
		for (i=0; i<3; i++)
			for (j=0; j<3; j++)
				fTr(i,j) = (i == j) ? 1.0 : 0.0;
	}
}
Пример #7
0
/**
 *  Default empty constructor
 */
TPZCartsys::TPZCartsys():TPZCosys(),fOrigin(3,0.){
	int i,j;
	fOrigin.Resize(3,0.);
	//	fOrigin->Redim(3);
	for (i=0 ; i<3 ; ++i)	fOrigin[i] = 0.;
	fReference = NULL;
	fTr.Redim(3,3);
	fTr.Zero();
	for (i=0; i<3; i++)
		for (j=0; j<3; j++)
			fTr(i,j)=(i == j) ? 1.0 : 0.0;
}
Пример #8
0
void TPZCartsys::TransformGradient(TPZVec<REAL> &X, TPZFMatrix &GradX, TPZVec<REAL> &x, TPZFMatrix &Gradx, TPZCosys *dest)  {
	int i,j;
	Gradx.Zero();
	for (i=0;i<3;i++){
		x=X;
		for (j=0;j<3;j++)
			Gradx(i,i)+=fTr(i,j)*GradX(j,j);
	}
	if (dest != fReference) {
		TPZFMatrix gradin(GradX);
		FromReference(x);
		TransformGradient(x,gradin,x,Gradx,dest);
	}
}
Пример #9
0
int main()
{
  cout<<"Effective confs: "<<nconfs<<endl;
  
  fin=open_file("rende_new","r");
  vector<pair<vector<int>,string>> full_Tr_map(nfull_Tr);
  
  //prepare all maps
  DEF_MAP_1(M_dM);
  DEF_MAP_1(M_d2M);
  DEF_MAP_1(M_dM_M_dM);
  DEF_MAP_1(M_d3M);
  DEF_MAP_1(M_dM_M_d2M);
  DEF_MAP_1(M_dM_M_dM_M_dM);
  DEF_MAP_1(M_d2M_M_d2M);
  DEF_MAP_1(M_d2M_M_dM_M_dM);
  DEF_MAP_1(M_dM_M_dM_M_dM_M_dM);
  DEF_MAP_2(M_dM,M_dM);
  DEF_MAP_2(M_dM,M_dM_M_dM);
  DEF_MAP_2(M_dM,M_d2M);
  DEF_MAP_3(M_dM,M_dM,M_dM);
  DEF_MAP_2(M_dM,M_dM_M_d2M);
  DEF_MAP_2(M_d2M,M_dM_M_dM);
  DEF_MAP_2(M_dM_M_dM,M_dM_M_dM);
  DEF_MAP_2(M_dM_M_dM_M_dM,M_dM);
  DEF_MAP_2(M_d2M,M_d2M);
  DEF_MAP_3(M_dM_M_dM,M_dM,M_dM);
  DEF_MAP_3(M_d2M,M_dM,M_dM);
  DEF_MAP_4(M_dM,M_dM,M_dM,M_dM);
  
  //read all flavour, confs and take all trace products conf by conf
  for(int iconf=0;iconf<nconfs;iconf++)
    {
      const int ijack=iconf/clust_size;
      
      read_conf();
      
      for(int iflav=0;iflav<nflavs;iflav++)
  	for(int ifull=0;ifull<nfull_Tr;ifull++)
  	  full_Tr[ind_full(iflav,ifull)][ijack]+=
  	    Tr(full_Tr_map[ifull].first,iflav).real();
      
  //     dcompl a=0;
  //     double nc=0;
  //     for(int icopy=0;icopy<ncopies;icopy++)
  //     	for(int jcopy=icopy+1;jcopy<ncopies;jcopy++)
  //     	   for(int kcopy=jcopy+1;kcopy<ncopies;kcopy++)
  // 	     for(int lcopy=kcopy+1;lcopy<ncopies;lcopy++)
  // 	     {
  // 	       a+=
  // 		 base_Tr[ind(0,M_dM,icopy)]*
  // 		 base_Tr[ind(0,M_dM,jcopy)]*
  // 		 base_Tr[ind(0,M_dM,kcopy)]*
  // 		 base_Tr[ind(0,M_dM,lcopy)];
  // 	       nc+=1;
  //     	      }
      
  //     double ex=a.real()/nc;
  //     double al=full_Tr[ind_full(0,Tr_M_dM_Tr_M_dM_Tr_M_dM_Tr_M_dM)][iconf];
  //     cout<<"exact: "<<ex<<", algo: "<<al<<", rel diff: "<<(ex-al)/(ex+al)<<", nc: "<<nc<<" "<<((1.0)*(nconfs)*(ncopies)*(ncopies-1)*(ncopies-2)*(ncopies-3))<<endl;
    }
  
  //close and clusterize
  fclose(fin);
  full_Tr.clusterize(clust_size);
  
  for(int ifull=0;ifull<nfull_Tr;ifull++)
    cout<<full_Tr_map[ifull].second<<" ("<<Tr_get_nperm(full_Tr_map[ifull].first)<<" "<<Tr_get_mult(full_Tr_map[ifull].first)<<") = "<<fTr(ifull)<<endl;
  
  //compute susc2
  jack susc2_disc=(fTr(Tr_M_dM_Tr_M_dM)-sqr(fTr(Tr_M_dM)))/(16*V4);
  jack susc2_conn=(fTr(Tr_M_d2M)-fTr(Tr_M_dM_M_dM))/(4*V4);
  jack susc2_tot=susc2_conn+susc2_disc;
  
  jack susc4=
    -6*fTr(Tr_M_dM_M_dM_Tr_M_dM_Tr_M_dM)/64
    +1*fTr(Tr_M_dM_Tr_M_dM_Tr_M_dM_Tr_M_dM)/256
    +6*fTr(Tr_M_d2M_Tr_M_dM_Tr_M_dM)/64
    -3*fTr(Tr_M_dM_Tr_M_dM)*fTr(Tr_M_d2M)/64
    +3*fTr(Tr_M_dM_Tr_M_dM)*fTr(Tr_M_dM_M_dM)/64
    -3*fTr(Tr_M_dM_Tr_M_dM)*fTr(Tr_M_dM_Tr_M_dM)/256
    -6*fTr(Tr_M_d2M_Tr_M_dM_M_dM)/16
    +3*fTr(Tr_M_dM_M_dM_Tr_M_dM_M_dM)/16
    +1*fTr(Tr_M_dM_M_dM_M_dM_Tr_M_dM)/2
    +1*fTr(Tr_M_dM_Tr_M_dM)/16
    +3*fTr(Tr_M_d2M_Tr_M_d2M)/16
    -33*fTr(Tr_M_dM_Tr_M_dM_M_d2M)/64
    -3*fTr(Tr_M_d2M)*fTr(Tr_M_d2M)/16
    +3*fTr(Tr_M_d2M)*fTr(Tr_M_dM_M_dM)/16
    -3*fTr(Tr_M_d2M)*fTr(Tr_M_dM_Tr_M_dM)/64
    -3*fTr(Tr_M_d2M_M_d2M)/4
    +3*fTr(Tr_M_d2M_M_dM_M_dM)/1
    -1*fTr(Tr_M_dM_M_dM)/1
    -3*fTr(Tr_M_dM_M_dM_M_dM_M_dM)/2
    +1*fTr(Tr_M_d2M)/4
    +3*fTr(Tr_M_dM_M_dM)*fTr(Tr_M_d2M)/16
    -3*fTr(Tr_M_dM_M_dM)*fTr(Tr_M_dM_M_dM)/16
    +3*fTr(Tr_M_dM_M_dM)*fTr(Tr_M_dM_Tr_M_dM)/64;
  
  susc4/=V4*Nt*Nt;
  
  cout<<"susc2 = "<<susc2_tot<<endl;
  cout<<"susc4 = "<<susc4<<endl;
  
  return 0;
}