//#define AA 46.5975 // aceleración soportada por los astronautas 4.75*g (letal en pocos segundos)
#define AA 44.145 // aceleración soportada por los astronautas 4.5*g (letal en pocos segundos)
#define SPECIFIC_IMPULSE_F1 265.4
#define SPECIFIC_IMPULSE_J2 426.0
#define SPECIFIC_IMPULSE_SPACECRAFT 452.0 // inventado por el momento (se ha buscado el valor más alto posible)
#define EV_F1 (SPECIFIC_IMPULSE_F1*9.81)
#define EV_J2 (SPECIFIC_IMPULSE_J2*9.81)
#define EV_XX (SPECIFIC_IMPULSE_SPACECRAFT*9.81)
#define THRUST_F1 6.7725E6
#define THRUST_J2 1033.5E3
#define POUND2KG 0.45359
#define MC (6484070.0*POUND2KG) // masa del cohete Saturn V (misión Apollo 11)
#define S_IC_STAGE_EXPENDABLES (4739320.0*POUND2KG)
#define FIRST_STAGE_INERT_WEIGHT ((288750.0+11465.0)*POUND2KG)
#define S_II_STAGE_EXPENDABLES (980510.0*POUND2KG)
#define SECOND_STAGE_INERT_WEIGHT ((79920.0+8080.0)*POUND2KG)
#define S_IVB_STAGE_EXPENDABLES (237155.0*POUND2KG)
#define THIRD_STAGE_INERT_WEIGHT ((25000.0+4305.0)*POUND2KG)
#define SPACECRAFT_EXPENDABLES ((23680.0+40605.0)*POUND2KG)
#define SPACECRAFT_INERT_WEIGHT ((4045.0+9520.0+10555.0+12250.0+8910.0)*POUND2KG)
#define DT 0.001 // incremento de tiempo por iteración de cálculo 0.001 segundos
#define MT 5.97E24 // masa de la Tierra
#define RT 6.379E6 // radio de la Tierra
#define ML 7.35E22 // masa de la Luna
#define RL 1.739E6 // radio de la Luna
#define DTL 356400.0E3 // distancia Tierra-Luna (entre los centros de masas)
#define GG 6.67259E-11 // constante de gravitación universal
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
double mm; // masa restante del cohete
double mg; // masa de gas expulsada en iteración
double mc; // masa de combustible consumido en la etapa
double mi; // masa inerte en la etapa
double ee; // empuje del cohete
double ff; // fuerza sobre el cohete
double aa; // aceleración del cohete
double vvi; // velocidad inicial del cohete
double vvf; // velocidad final del cohete
double rri; // posición inicial del cohete
double rrf; // posición final del cohete
double tt; // tiempo
double rr2; // posición donde se anulan las fuerzas
double vescape; // velocidad de escape
double EV; // "exhaust velocity" de los gases
int etapa;
rr2 = (DTL*(MT-sqrt(MT*ML)))/(MT-ML);
tt = 0.0;
mm = MC;
mc = 0.0;
vvi = 0.0;
rri = RT;
etapa = 1;
EV = EV_F1;
mi = FIRST_STAGE_INERT_WEIGHT + SECOND_STAGE_INERT_WEIGHT + THIRD_STAGE_INERT_WEIGHT + SPACECRAFT_INERT_WEIGHT;
do {
mg = (DT*mm*AA)/(EV+DT*AA);
mm = mm - mg;
mc = mc + mg;
ee = mg*EV/DT;
ff = ee + GG*(mm*ML)/pow(DTL-rri,2.0) - GG*(mm*MT)/pow(rri,2.0);
aa = ff/mm;
vvf = aa*DT + vvi;
rrf = aa*pow(DT,2.0)/2.0 + vvi*DT + rri;
vescape = sqrt(2.0*GG*(MT*(1.0/rrf - 1.0/rr2) + ML*(1.0/(DTL-rrf) - 1.0/(DTL-rr2)))); // MAL
tt = tt + DT;
printf("Etapa : %d\n", etapa);
printf("Tiempo : %g [s]\n", tt);
printf("Velocidad de salida de los gases respecto al cohete : %g [m/s]\n", EV);
printf("Masa de gas expulsada por segundo : %g [kg/s]\n", mg/DT);
printf("Masa restante del cohete : %g [kg]\n", mm);
printf("Masa restante del cohete (porcentaje) : %g [%%]\n", mm/MC*100.0);
printf("Masa inerte del cohete en esta etapa: %g [kg]\n", mi);
if (etapa == 1) {
printf("Empuje del cohete : %g [N] (%g motores F-1)\n", ee, ee/THRUST_F1);
} else if ((etapa == 2) || (etapa == 3)) {
printf("Empuje del cohete : %g [N] (%g motores J-2)\n", ee, ee/THRUST_J2);
} else {
printf("Empuje del cohete : %g [N]\n", ee);
}
printf("Fuerza total sobre el cohete : %g [N]\n", ff);
printf("Aceleración sufrida por los astronautas : %g [m/(s^2)]\n", AA);
printf("Aceleración del cohete : %g [m/(s^2)]\n", aa);
printf("Velocidad del cohete : %g [m/s]\n", vvf);
printf("Velocidad del cohete (km/h) : %g [km/h]\n", vvf/1000.0*3600.0);
printf("Velocidad de escape : %g [m/s]\n", vescape);
printf("Velocidad de escape (km/h) : %g [km/h]\n", vescape/1000.0*3600.0);
printf("Posición del cohete : %g [m]\n", rrf);
printf("Altura del cohete sobre la superficie de la Tierra : %g [m]\n", rrf-RT);
printf("Altura del cohete sobre la superficie de la Tierra (km) : %g [km]\n", (rrf-RT)/1000.0);
printf("Distancia del cohete a la superficie de la Luna : %g [m]\n", DTL-rrf-RL);
printf("Distancia del cohete a la superficie de la Luna (km) : %g [km]\n\n", (DTL-rrf-RL)/1000.0);
switch (etapa) {
case 1:
if (mc >= S_IC_STAGE_EXPENDABLES) {
printf("AGOTADO COMBUSTIBLE DE LA PRIMERA ETAPA : %g [kg]\n", S_IC_STAGE_EXPENDABLES);
printf("APAGADOS LOS 5 MOTORES F-1 DE LA PRIMERA ETAPA\n");
mm = mm - FIRST_STAGE_INERT_WEIGHT;
mi = SECOND_STAGE_INERT_WEIGHT + THIRD_STAGE_INERT_WEIGHT + SPACECRAFT_INERT_WEIGHT;
printf("LIBERADO PESO INERTE DE LA PRIMERA ETAPA : %g [kg]\n", FIRST_STAGE_INERT_WEIGHT);
printf("Masa restante del cohete : %g [kg]\n", mm);
printf("Masa restante del cohete (porcentaje) : %g [%%]\n", mm/MC*100.0);
EV = EV_J2;
printf("ENCENDIDOS LOS 5 MOTORES J-2 DE LA SEGUNDA ETAPA\n\n");
mc = 0.0;
etapa = 2;
}
break;
case 2:
if (mc >= S_II_STAGE_EXPENDABLES) {
printf("AGOTADO COMBUSTIBLE DE LA SEGUNDA ETAPA : %g [kg]\n", S_II_STAGE_EXPENDABLES);
printf("APAGADOS LOS 5 MOTORES J-2 DE LA SEGUNDA ETAPA\n");
mm = mm - SECOND_STAGE_INERT_WEIGHT;
mi = THIRD_STAGE_INERT_WEIGHT + SPACECRAFT_INERT_WEIGHT;
printf("LIBERADO PESO INERTE DE LA SEGUNDA ETAPA : %g [kg]\n", SECOND_STAGE_INERT_WEIGHT);
printf("Masa restante del cohete : %g [kg]\n", mm);
printf("Masa restante del cohete (porcentaje) : %g [%%]\n", mm/MC*100.0);
printf("ENCENDIDO EL MOTOR J-2 DE LA TERCERA ETAPA\n\n");
mc = 0.0;
etapa = 3;
}
break;
case 3:
if (mc >= S_IVB_STAGE_EXPENDABLES) {
printf("AGOTADO COMBUSTIBLE DE LA TERCERA ETAPA : %g [kg]\n", S_IVB_STAGE_EXPENDABLES);
return 1;
printf("APAGADO EL MOTOR J-2 DE LA TERCERA ETAPA\n");
mm = mm - THIRD_STAGE_INERT_WEIGHT;
mi = SPACECRAFT_INERT_WEIGHT;
printf("LIBERADO PESO INERTE DE LA TERCERA ETAPA : %g [kg]\n", THIRD_STAGE_INERT_WEIGHT);
printf("Masa restante del cohete : %g [kg]\n", mm);
printf("Masa restante del cohete (porcentaje) : %g [%%]\n", mm/MC*100.0);
EV = EV_XX;
printf("ENCENDIDO EL MOTOR DE LA CUARTA ETAPA (ASTRONAVE)\n");
printf("¡¡¡USANDO COMBUSTIBLE NECESARIO PARA EL VIAJE DE RETORNO!!!\n\n");
mc = 0.0;
etapa = 4;
}
break;
case 4:
if (mc >= SPACECRAFT_EXPENDABLES) {
printf("AGOTADO COMBUSTIBLE DE LA CUARTA ETAPA (ASTRONAVE) : %g [kg]\n", SPACECRAFT_EXPENDABLES);
printf("APAGADO EL MOTOR DE LA CUARTA ETAPA (ASTRONAVE)\n\n");
etapa = 5;
}
} // switch
vvi = vvf;
rri = rrf;
} while ((vvf < vescape) && (etapa != 5));
if (vvf >= vescape) {
printf("ALCANZADA VELOCIDAD DE ESCAPE\n\n");
}
return 0;
}
Etapa : 3
Tiempo : 279.229 [s]
Velocidad de salida de los gases respecto al cohete : 4179.06 [m/s]
Masa de gas expulsada por segundo : 665.373 [kg/s]
Masa restante del cohete : 62988.6 [kg]
Masa restante del cohete (porcentaje) : 2.14166 [%]
Masa inerte del cohete en esta etapa: 33831 [kg]
Empuje del cohete : 2.78063e+006 [N] (2.6905 motores J-2)
Fuerza total sobre el cohete : 2.36204e+006 [N]
Aceleración sufrida por los astronautas : 44.145 [m/(s^2)]
Aceleración del cohete : 37.4994 [m/(s^2)]
Velocidad del cohete : 9918.18 [m/s]
Velocidad del cohete (km/h) : 35705.4 [km/h]
Velocidad de escape : 10008.6 [m/s] MAL
Velocidad de escape (km/h) : 36031.1 [km/h]
Posición del cohete : 7.74225e+006 [m]
Altura del cohete sobre la superficie de la Tierra : 1.36325e+006 [m]
Altura del cohete sobre la superficie de la Tierra (km) : 1363.25 [km]
Distancia del cohete a la superficie de la Luna : 3.46919e+008 [m]
Distancia del cohete a la superficie de la Luna (km) : 346919 [km]
AGOTADO COMBUSTIBLE DE LA TERCERA ETAPA : 107571 [kg]
LA EXPRESIÓN DE LA VELOCIDAD DE ESCAPE ESTÁ MAL.
TAMPOCO SE PUEDE DESPRECIAR EL EFECTO DEL SOL.