#define AA 49.05 // aceleración soportada por los astronautas 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 MC 2941.12E3 // masa del cohete Saturn V (misión Apollo 11) 2941.12 toneladas
#define S_IC_STAGE_EXPENDABLES 2149.72E3
#define FIRST_STAGE_INERT_WEIGHT 130975.0+5200.44
#define S_II_STAGE_EXPENDABLES 444752.0
#define SECOND_STAGE_INERT_WEIGHT 36251.1+3665.03
#define S_IVB_STAGE_EXPENDABLES 107572.0
#define THIRD_STAGE_INERT_WEIGHT 11339.8+1952.72
#define SPACECRAFT_INERT_WEIGHT 20538.7
#define DT 0.1 // incremento de tiempo por iteración de cálculo 0.1 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 356400E3 // 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 0;
printf("APAGADO 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;
}
}
vvi = vvf;
rri = rrf;
} while ((vvf < vescape) && (mm > mi));
if (vvf >= vescape) {
printf("ALCANZADA VELOCIDAD DE ESCAPE\n\n");
} else if (mm <= mi) {
printf("COMBUSTIBLE ACABADO ANTES DE ALCANZAR LA VELOCIDAD DE ESCAPE\n\n");
}
return 0;
}
Etapa : 3
Tiempo : 235.852 [s]
Velocidad de salida de los gases respecto al cohete : 4179.06 [m/s]
Masa de gas expulsada por segundo : 947.176 [kg/s]
Masa restante del cohete : 80699.4 [kg]
Masa restante del cohete (porcentaje) : 2.74383 [%]
Masa inerte del cohete en esta etapa: 33831.2 [kg]
Empuje del cohete : 3.95831e+006 [N] (3.83 motores J-2)
Fuerza total sobre el cohete : 3.38454e+006 [N]
Aceleración sufrida por los astronautas : 49.05 [m/(s^2)]
Aceleración del cohete : 41.94 [m/(s^2)]
Velocidad del cohete : 9489.73 [m/s]
Velocidad del cohete (km/h) : 34163 [km/h]
Velocidad de escape : 10183.7 [m/s] MAL
Velocidad de escape (km/h) : 36661.3 [km/h]
Posición del cohete : 7.48513e+006 [m]
Altura del cohete sobre la superficie de la Tierra : 1.10613e+006 [m]
Altura del cohete sobre la superficie de la Tierra (km) : 1106.13 [km]
Distancia del cohete a la superficie de la Luna : 3.47176e+008 [m]
Distancia del cohete a la superficie de la Luna (km) : 347176 [km]
AGOTADO COMBUSTIBLE DE LA TERCERA ETAPA: 107572 [kg]
LA EXPRESIÓN DE LA VELOCIDAD DE ESCAPE ESTÁ MAL.
TAMPOCO SE PUEDE DESPRECIAR EL EFECTO DEL SOL.
NOTA: He usado DT con valor 0.001 segundos en lugar de 0.1 segundos.
NOTA: He actualizado el impulso específico de los motores F-1 y J-2 con unos valores un poco más altos que he encontrado en un documento de la NASA. Pongo a continuación los enlaces a los parámetros del motor F-1 y del motor J-2 extraídos de ese documento.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.