Esempio n. 1
0
bool Complejo::operator&&(Complejo z) {
	return (magnitud() != Complejo().magnitud() && z.magnitud() != Complejo().magnitud());
}
Esempio n. 2
0
int eom_impactor(double t,const double x[],double dxdt[],void *params)
{


  char *param=(char *)params;
  const double *r,*v;
  double R_io,R_europa,R_calisto,R_ganymede,R_uranus,x_ie[4];
  double Rj,R_sun,R_saturn,rho,G1,G2,alpha,delta;
  double *a,gx,gy,gz,r_ie;
  double ratio,zdivR;
  double RI,Vimpc;
  double xeqj[3],xecl[3];
  int i;
  
  SpiceDouble et,ET;
  SpiceDouble lt;
  SpiceDouble x_io[6],x_calisto[6],x_ganymede[6],x_uranus[6];
  SpiceDouble x_europa[6],x_sun[6],x_saturn[6],x_earth[6],x_jup[6];
	  
	  
  r=&x[0];
  v=&x[3];
  a=&dxdt[3];
  /*
  RI=sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2])*UL;
  Vimpc=sqrt(x[3]*x[3]+x[4]*x[4]+x[5]*x[5])*(UL/UT);
  cout.setf(ios::scientific);
  cout.setf(ios::showpoint);
  cout.precision(15);
  cout<<"***************************************************"<<endl;
  cout<<"Elementos de estado del impactor en EOM-impactor:  "<<endl;
  cout<<"x:  "<<x[0]*UL<<" y:  "<<x[1]*UL<<" z:  "<<x[2]*UL<<"\n"
      <<"vx: "<<x[3]*(UL/UT)<<" vy: "<<x[4]*(UL/UT)<<" vz: "<<x[5]*(UL/UT)<<"\n"
      <<"Distance: "<<RI<<" Velocity:  "<< Vimpc<<"\n"<<endl;
  cout<<"***************************************************"<<endl;
  //*/

  if(!strcmp(param,"NOMOONS"))
    {
      //cout<<"In if of NOMOONS"<<endl;
      //Velocidades en x, y, z
      dxdt[0]=x[3];
      dxdt[1]=x[4];
      dxdt[2]=x[5];

      et=t*UT;
    

      spkezr_c("399",et,FRAME,"NONE","599",x_earth,&lt);
      spkezr_c("10",et,FRAME,"NONE","599",x_sun,&lt);
      spkezr_c("6",et,FRAME,"NONE","599",x_saturn,&lt);


      x_sun[0]/=UL; x_sun[1]/=UL; x_sun[2]/=UL;
      x_saturn[0]/=UL; x_saturn[1]/=UL; x_saturn[2]/=UL;

      rho=sqrt(x[0]*x[0]+x[1]*x[1]);  // Distancia polar (plano x-y) de la nave
      
      
      Rj=magnitud(x);
      R_sun=Distance(x,x_sun);
      R_saturn=Distance(x,x_saturn);


      gx=-G*MASA_JUPITER*x[0]/(Rj*Rj*Rj);
      gy=-G*MASA_JUPITER*x[1]/(Rj*Rj*Rj);
      gz=-G*MASA_JUPITER*x[2]/(Rj*Rj*Rj);


      // ACELERACIONES EN X, Y, Z
      dxdt[3]= gx-(G*MASA_SUN*(x[0]-x_sun[0])/(R_sun*R_sun*R_sun)-			
		   G*MASA_SATURNO*(x[0]-x_saturn[0])/(R_saturn*R_saturn*R_saturn));
		   //G*MASA_URANUS*(x[0]-x_uranus[0])/(R_uranus*R_uranus*R_uranus));
      
		     
      dxdt[4]= gy-(G*MASA_SUN*(x[1]-x_sun[1])/(R_sun*R_sun*R_sun)-
		   G*MASA_SATURNO*(x[1]-x_saturn[1])/(R_saturn*R_saturn*R_saturn));
		   //G*MASA_URANUS*(x[1]-x_uranus[1])/(R_uranus*R_uranus*R_uranus));
      
      
      dxdt[5]= gz-(G*MASA_SUN*(x[2]-x_sun[2])/(R_sun*R_sun*R_sun)-
		   G*MASA_SATURNO*(x[2]-x_saturn[2])/(R_saturn*R_saturn*R_saturn));
		   //G*MASA_URANUS*(x[2]-x_uranus[2])/(R_uranus*R_uranus*R_uranus));
	    
    }


  if(!strcmp(param,"MOONS"))
    {
      //cout<<"In if of MOONS"<<endl;
      //Velocidades en x, y, z
      dxdt[0]=x[3];
      dxdt[1]=x[4];
      dxdt[2]=x[5];
      
      
      //Se calculan las efemerides del sol, saturno y las lunas mayores de jupiter
      //Tengase en cuenta que el t pasado a esta rutina es el et de la efemeride.
      //---------------------------------------------------------------------------
      
      et=t*UT;
      // 	  spkezr_c("599",et,FRAME,"NONE","399",x_jup,&lt);
      spkezr_c("399",et,FRAME,"NONE","599",x_earth,&lt);
      spkezr_c("10",et,FRAME,"NONE","599",x_sun,&lt);
      spkezr_c("501",et,FRAME,"NONE","599",x_io,&lt);
      spkezr_c("502",et,FRAME,"NONE","599",x_europa,&lt);
      spkezr_c("503",et,FRAME,"NONE","599",x_ganymede,&lt);
      spkezr_c("504",et,FRAME,"NONE","599",x_calisto,&lt);
      spkezr_c("6",et,FRAME,"NONE","599",x_saturn,&lt);
      //spkezr_c("7",et,FRAME,"NONE","599",x_uranus,&lt);
      
      
      // Se hace la conversion al sistema de unidades utilizados
      //--------------------------------------------------------
      x_sun[0]/=UL; x_sun[1]/=UL; x_sun[2]/=UL;
      x_io[0]/=UL; x_io[1]/=UL; x_io[2]/=UL;
      x_europa[0]/=UL; x_europa[1]/=UL; x_europa[2]/=UL;
      x_ganymede[0]/=UL; x_ganymede[1]/=UL; x_ganymede[2]/=UL;
      x_calisto[0]/=UL; x_calisto[1]/=UL; x_calisto[2]/=UL;
      x_saturn[0]/=UL; x_saturn[1]/=UL; x_saturn[2]/=UL;
      //x_uranus[0]/=UL; x_uranus[1]/=UL; x_uranus[2]/=UL;
      
      // Se calcula la distancia de la nave a cada luna galileana,
      // a saturno y al sol:
      //-----------------------------------------------------------
      rho=sqrt(x[0]*x[0]+x[1]*x[1]);  // Distancia polar (plano x-y) de la nave
      
      //*
      Rj=magnitud(x);
      R_sun=Distance(x,x_sun);
      R_io=Distance(x,x_io);
      R_europa=Distance(x,x_europa);
      R_ganymede=Distance(x,x_ganymede);
      R_calisto=Distance(x,x_calisto);
      R_saturn=Distance(x,x_saturn);
      //R_uranus=Distance(x,x_uranus);
      //*/
      
      
      /*
      // PARA EL POTENCIAL AXISIMETRICO DE JUPITER:
      
      
      // Se hace la transformacion de coordenadas, del
      // sistema ecliptico al sistema ecuatorial de jupiter
      //----------------------------------------------------
      
      xecl[0]=x[0];
      xecl[1]=x[1];
      xecl[2]=x[2];
      Ecl2EqJ(xecl,xeqj);
      /*
	xeqj[0]=x[0];
	xeqj[1]=x[1];
	xeqj[2]=x[2];
      ///
      
      // Terminos del potencial axisimetrico de jupiter
      //-----------------------------------------------
      ratio=(R_eq/UL)/Rj;
      zdivR=xeqj[2]/Rj; 
      
      /*
	cout<<"IN EOM_IMPACTOR:"<<endl;
	cout<<"Rj-ecl: "<<Rj*UL/AU<<"  Rj-eq: "<<magnitud(xeqj)*UL/AU<<endl;
	cout<<"xeqj: "<<xeqj[0]<<"  yeqj: "<<xeqj[1]<<"  zeqj: "<<xeqj[2]<<"\n"
	<<"xecl: "<<xecl[0]<<"  yecl: "<<xecl[1]<<"  zecl: "<<xecl[2]<<"\n"<<endl;
      ///
      
      //***************************************************
      // Aceleracion de la particula debida a Jupiter
      // considerando un potencial axisimetrico.
      //***************************************************
      //*
      if(param=="OBLATE")
	{
	  
	  //cout<<"in oblate"<<endl;
	  gx=-xeqj[0]*(G*MASA_JUPITER/(Rj*Rj*Rj))*			
	    ( 1 - (3*J2/2.)*ratio*ratio*( 5*zdivR*zdivR - 1 ));
	  //  -(5*J4*pow(ratio,4)/8.0)*( 3 - 42*zdivR*zdivR + 63*pow(zdivR,4)));
	  
	  gy=xeqj[1]*gx/xeqj[0];
	  
	  gz=-xeqj[2]*(G*MASA_JUPITER/(Rj*Rj*Rj))*	
	    ( 1 + (3*J2/2.)*pow(ratio,3)*( 3 - 5*zdivR*zdivR));
	  // -(5*J4/8.)*pow(ratio,4)*( 15 - 70*zdivR*zdivR + 63*pow(zdivR,4)));
	  
	}    
      
      
      // PARA EL POTENCIAL ESFERICO:
      //-----------------------------
      if(param=="SPHERICAL")
	{
	  //cout<<"in spherical"<<endl;
	  gx=-G*MASA_JUPITER*x[0]/(Rj*Rj*Rj);
	  gy=-G*MASA_JUPITER*x[1]/(Rj*Rj*Rj);
	  gz=-G*MASA_JUPITER*x[2]/(Rj*Rj*Rj);
	  
	}//*/
      
      gx=-G*MASA_JUPITER*x[0]/(Rj*Rj*Rj);
      gy=-G*MASA_JUPITER*x[1]/(Rj*Rj*Rj);
      gz=-G*MASA_JUPITER*x[2]/(Rj*Rj*Rj);
         
     
      // ACELERACIONES EN X, Y, Z
      dxdt[3]= gx-(G*MASA_IO*(x[0]-x_io[0])/(R_io*R_io*R_io)-	       
		   G*MASA_EUROPA*(x[0]-x_europa[0])/(R_europa*R_europa*R_europa)-	
		   G*MASA_GANYMEDE*(x[0]-x_ganymede[0])/(R_ganymede*R_ganymede*R_ganymede)- 
		   G*MASA_CALISTO*(x[0]-x_calisto[0])/(R_calisto*R_calisto*R_calisto)- 
		   G*MASA_SUN*(x[0]-x_sun[0])/(R_sun*R_sun*R_sun)-			
		   G*MASA_SATURNO*(x[0]-x_saturn[0])/(R_saturn*R_saturn*R_saturn));
		   //G*MASA_URANUS*(x[0]-x_uranus[0])/(R_uranus*R_uranus*R_uranus));
      
		     
      dxdt[4]= gy-(G*MASA_IO*(x[1]-x_io[1])/(R_io*R_io*R_io)-
		   G*MASA_EUROPA*(x[1]-x_europa[1])/(R_europa*R_europa*R_europa)-
		   G*MASA_GANYMEDE*(x[1]-x_ganymede[1])/(R_ganymede*R_ganymede*R_ganymede)-
		   G*MASA_CALISTO*(x[1]-x_calisto[1])/(R_calisto*R_calisto*R_calisto)-
		   G*MASA_SUN*(x[1]-x_sun[1])/(R_sun*R_sun*R_sun)-
		   G*MASA_SATURNO*(x[1]-x_saturn[1])/(R_saturn*R_saturn*R_saturn));
		   //G*MASA_URANUS*(x[1]-x_uranus[1])/(R_uranus*R_uranus*R_uranus));
      
      
      dxdt[5]= gz-(G*MASA_IO*(x[2]-x_io[2])/(R_io*R_io*R_io)-
		   G*MASA_EUROPA*(x[2]-x_europa[2])/(R_europa*R_europa*R_europa)-
		   G*MASA_GANYMEDE*(x[2]-x_ganymede[2])/(R_ganymede*R_ganymede*R_ganymede)-
		   G*MASA_CALISTO*(x[2]-x_calisto[2])/(R_calisto*R_calisto*R_calisto)-
		   G*MASA_SUN*(x[2]-x_sun[2])/(R_sun*R_sun*R_sun)-
		   G*MASA_SATURNO*(x[2]-x_saturn[2])/(R_saturn*R_saturn*R_saturn));
		   //G*MASA_URANUS*(x[2]-x_uranus[2])/(R_uranus*R_uranus*R_uranus));
		    
    }

		   		         
      return 0;
}      
Esempio n. 3
0
bool Complejo::operator||(Complejo z) {
	return (magnitud() != Complejo().magnitud() || z.magnitud() != Complejo().magnitud());
}
Esempio n. 4
0
bool Complejo::operator>=(Complejo z) {
	return (magnitud() >= z.magnitud());
}
Esempio n. 5
0
bool Complejo::operator<(Complejo z) {
	return (magnitud() < z.magnitud());
}
Esempio n. 6
0
bool Complejo::mag_ne(Complejo z) {
	return magnitud() != z.magnitud();
}
Esempio n. 7
0
bool Complejo::mag_eq(Complejo z) {
	return magnitud() == z.magnitud();
}