int dele::detR(double *x, double *y, double *z, double Time, char *planet, int proizv, int centr, int sk) { int nplanet = planet_num(planet); if(nplanet<0) return 1; return(detR(x, y, z, Time, nplanet, proizv, centr, sk)); }
//---------------------------------------------------------------------- // sets lo_ and hi_ to the smallest and largest values that // R_(i_,j_) can assume and still be positive definite void SepStratSampler::find_limits(){ double f1 = detR(1); double f0 = detR(0); double fn = detR(-1); double a = .5*(f1 + fn - 2*f0); double b = .5*(f1-fn); double c = f0; double d2 = b*b - 4 * a * c; if(d2 <=0){ lo_ = hi_ = 0; return; } double d = sqrt(d2); double a2 = 2*a; lo_ = (-b - d)/a2; hi_ = (-b + d)/a2; if(hi_ < lo_) std::swap(lo_,hi_); }
int dele::detRtt(double *x, double *y, double *z, double Time, int nplanet, int centr, int sk) { //Initialize_Ephemeris(fileName); //List4 *cs; QList <double*> cs; double *xk, *xk1; int npl; int i; for(i=0; i<11; i++) { xk = new double[7]; detR(&xk[0], &xk[1], &xk[2], Time, i, 0, centr, sk); detR(&xk[3], &xk[4], &xk[5], Time, i, 1, centr, sk); //this->g1041->getElem(rc, 8+i); xk[6] = H2.data.constValue[8+i];//rc->value; cs << xk; } xk = new double[7]; xk1 = new double[7]; detR(&xk[0], &xk[1], &xk[2], Time, nplanet, 0, centr, sk); detR(&xk[3], &xk[4], &xk[5], Time, nplanet, 1, centr, sk); npl = nplanet; if(nplanet==GEOCENTR_NUM) npl = 2; //this->g1041->getElem(rc, 8+npl); xk[6] = H2.data.constValue[8+npl];//rc->value; cs << xk; xk = cs[9]; xk1 = cs[11]; double rmod1; rmod1 = sqrt(xk1[0]*xk1[0] + xk1[1]*xk1[1] + xk1[2]*xk1[2]); *x = -(xk[6] + xk1[6])*xk1[0]/pow(rmod1, 3.0); *y = -(xk[6] + xk1[6])*xk1[1]/pow(rmod1, 3.0); *z = -(xk[6] + xk1[6])*xk1[2]/pow(rmod1, 3.0); double A[3]; double c; c = H2.data.constValue[6];//rc->value; double vmod1 = sqrt(xk1[3]*xk1[3] + xk1[4]*xk1[4] + xk1[5]*xk1[5]); for(i=0; i<3; i++) A[i] = xk[6]*((4.0*xk[6]/rmod1 - pow(vmod1, 2.0))*xk1[i+3] + 4.0*(xk1[i]*xk1[i+3])*xk1[i+3])/(c*c*pow(rmod1, 3.0)); *x+=A[0]; *y+=A[1]; *z+=A[2]; int k; double rmodij, rmodj; for(i=0; i<3; i++) { A[i] = 0.0; for(k=0; k<9; k++) { if(k==npl) continue; xk = cs[k]; rmodij = sqrt((xk[0]-xk1[0])*(xk[0]-xk1[0]) + (xk[1]-xk1[1])*(xk[1]-xk1[1]) + (xk[2]-xk1[2])*(xk[2]-xk1[2])); rmodj = sqrt(xk[0]*xk[0] + xk[1]*xk[1] + xk[2]*xk[2]); A[i] += xk[6]*((xk[i]-xk1[i])/pow(rmodij, 3.0)-(xk[i])/pow(rmodj, 3.0)); } } *x+=A[0]; *y+=A[1]; *z+=A[2]; return 0; }