Пример #1
0
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));
}
Пример #2
0
  //----------------------------------------------------------------------
  // 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_);
  }
Пример #3
0
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;
}