1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
void Truc::get_precalc_B_optimized(const Vector3d & m, Vector3d & b,const TmpParamForBS & tmp)
{
Vector3d OM=Mrot.transpose()*(m-pos);
b=Vector3d(0,0,0);
double omx=OM[0];
double omy=OM[1];
double omz=OM[2];
double omx_dl2_L2=omx-tmp.dl2_L2;
std::vector<double> rx_list(tmp.rk);
for(int k=0;k<tmp.rk;k++)
rx_list[k]=(-k*tmp.dl+omx_dl2_L2);
std::vector<double> rx2_list(tmp.rk);
for(int k=0;k<tmp.rk;k++)
rx2_list[k]=rx_list[k]*rx_list[k];
//++++++
std::vector<double> vecTmp1(tmp);
std::vector<double> vecTmp2(tmp);
double omy_ray_c = 0.0;
double omz_ray_s = 0.0;
double omy_ray_c2_omz_ray_s2 = 0.0;
double ray = 0.0;
double rx = 0.0;
double nr2 = 0.0;
double nr = 0.0;
double ray = 0.0;
double si_r2_co_r1 = 0.0;
//++++++
for(int i=0;i<tmp.ri;i++)
{
double alpha=i*tmp.dtheta+tmp.dtheta2;
double co=cos(alpha);
double si=sin(alpha);
//++++++
for(int k=0;k<tmp.rk;k++)
{
vecTmp1[k] = -co*rx_list[k];
vecTmp2[k] = -si*rx_list[k];
}
//++++++
for(int j=0;j<tmp.rj;j++)
{
Vector3d Btemp(0,0,0);
ray = j * tmp.de + tmp.R_de2;
omy_ray_c = omy - ray * co;
omz_ray_s = omz - ray * si;
omy_ray_c2_omz_ray_s2 = omy_ray_c * omy_ray_c + omz_ray_s * omz_ray_s;
si_r2_co_r1 = si * omz_ray_s + co * omy_ray_c;
for(int k=0;k<tmp.rk;k++)
{
nr2 = rx2_list[k] + omy_ray_c2_omz_ray_s2;
nr = sqrt(nr2);
//if(nr>quantom_zero)
{
Btemp += Vector3d(si_r2_co_r1, vecTmp1[k], vecTmp2[k]) / (nr2*nr);
}
}
bFirst = false;
b+= (tmp.tmp1*j + tmp.tmp2)*Btemp;
}
}
b*=Mu0_Pi4*tmp.J ;
b=Mrot*b;
} |