bool Complejo::operator&&(Complejo z) { return (magnitud() != Complejo().magnitud() && z.magnitud() != Complejo().magnitud()); }
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,<); spkezr_c("10",et,FRAME,"NONE","599",x_sun,<); spkezr_c("6",et,FRAME,"NONE","599",x_saturn,<); 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,<); spkezr_c("399",et,FRAME,"NONE","599",x_earth,<); spkezr_c("10",et,FRAME,"NONE","599",x_sun,<); spkezr_c("501",et,FRAME,"NONE","599",x_io,<); spkezr_c("502",et,FRAME,"NONE","599",x_europa,<); spkezr_c("503",et,FRAME,"NONE","599",x_ganymede,<); spkezr_c("504",et,FRAME,"NONE","599",x_calisto,<); spkezr_c("6",et,FRAME,"NONE","599",x_saturn,<); //spkezr_c("7",et,FRAME,"NONE","599",x_uranus,<); // 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; }
bool Complejo::operator||(Complejo z) { return (magnitud() != Complejo().magnitud() || z.magnitud() != Complejo().magnitud()); }
bool Complejo::operator>=(Complejo z) { return (magnitud() >= z.magnitud()); }
bool Complejo::operator<(Complejo z) { return (magnitud() < z.magnitud()); }
bool Complejo::mag_ne(Complejo z) { return magnitud() != z.magnitud(); }
bool Complejo::mag_eq(Complejo z) { return magnitud() == z.magnitud(); }