\n",
"\n",
"\n",
"\n",
"\n",
"Pour ceux qui ne seraient pas familier avec le language python, vous pouvez consulter le Notebook Introduction au Python. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"matplotlib.style.use('fivethirtyeight')\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'objectif de ce TN est de se familiariser avec les relations isentropiques pour le calcul de la poussé d'un moteur fusée.\n",
"En effet, la poussée d'un moteur fusée est basée sur le principe d'ejection de gaz à grande vitesse en sortie de tuyère. La formule de la poussée est donnée par:\n",
"\n",
"$$\n",
"F=\\left[ (p_e-p_a)+\\rho_e U_e^2\\right] S_e \n",
"$$\n",
"\n",
"Ici $p_a$ représente la pression atmosphérique, et les indices $_e$ sont relatifs aux grandeurs en sortie de tuyère.\n",
"\n",
"La poussée d'un moteur fusée est généralement obtenue par combustion d'un carburant (ex: Hydrogène) et d'un comburant (ex: oxygène) qui réagissent à très grande température et à très grande pression. Ces propriétés initiales de la combustion sont appelées *conditions génératrices* et dépendent du couple carburant/comburant choisi. On les notes généralement avec un indice $_i$ ($T_i$: Température génératrices, $p_i$: pression génératrice). La tuyère est alors utilisé comme dispositif pour optimiser la détente des gaz issues de la combustion et augmenter leur vitesse d'éjection. On considérera ici que cette détente est isentropique pour pouvoir utiliser les relations vues en cours.\n",
"\n",
"En se plaçant dans le vide, ($p_a=0$) on peut exprimer la poussée en fonction des conditions génératrices $p_i$ et $T_i$:\n",
"\n",
"$$\n",
"F=p_e\\left[ 1+\\gamma M_e^2\\right] S_e = p_i \\dfrac{p_e}{p_i} \\left[ 1+\\gamma M_e^2\\right] S_c \\dfrac{S_e}{S_c}\n",
"$$\n",
"\n",
"On fait donc apparaitre la relation isentropique de la pression $\\dfrac{p_e}{p_i}$ et la loi des sections $\\dfrac{S_e}{S_c}$. Soit:\n",
"\n",
"$$\n",
"\\dfrac{p_e}{p_i}=\\left(1+\\dfrac{\\gamma-1}{2}M_e^2 \\right)^{-\\gamma/(\\gamma-1)}\n",
"$$\n",
"\n",
"et\n",
"\n",
"$$\n",
"\\dfrac{S_e}{S_c}=\\dfrac{1}{M_e}\\left(\\dfrac{2}{\\gamma+1}\\right)^{\\frac{\\gamma+1}{2(\\gamma-1)}}\\left(1+\\dfrac{\\gamma-1}{2}M_e^2\\right)^{\\frac{\\gamma+1}{2(\\gamma-1)}}\n",
"$$\n",
"\n",
"On remarque donc que l'on peut écrire la poussée sous la forme:\n",
"\n",
"$$\n",
"F=\\Phi(R_s,\\gamma) p_i S_c\n",
"$$\n",
"\n",
"Ou $\\Phi$ est une fonction ne dépendant que du $\\gamma$ et du rapport des sections $R_s=\\dfrac{S_e}{S_c}$.\n",
"\n",
"# Calcul du nombre de Mach en sortie $M_e$\n",
"\n",
"Pour calculer $M_e$ en connaissant $R_s$, il faut inverser la loi des sections. On peut le faire numériquement avec la fonction suivante:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def section( Rs,g ):\n",
"\tM=1\n",
"\tS=1\n",
"\twhile (abs(S-Rs)>1e-2):\n",
"\t\tS=(1./M)*((2./(g+1.))+((g-1.)/(g+1.))*M**2)**((g+1.)/(2.*(g-1.)))\n",
"\t\tM+=0.0005\n",
"\tM0=M\n",
"\treturn M0"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"section(10,1.4)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"section(10,1.27)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calcul de la fonction $\\Phi$\n",
"\n",
"On peut maintenant calculer la fonction $\\Phi(R_s,\\gamma)$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def Fpoussee(Rs,g):\n",
" '''\n",
" Calcul de la fonction de poussée en fonction du gamma et du rapport de section r\n",
" '''\n",
" Me=section( Rs,g )\n",
" pepi=(1+((g-1)/2.)*Me**2)**-(g/(g-1))\n",
" phi=pepi*Rs*(1+g*Me**2)\n",
" return phi\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calcul du débit de tuyère\n",
"\n",
"Le débit massique est supposé constant dans la tuyère. On peut donc l'exprimer au niveau du col ou le nombre de Mach vaut 1 ($U_c=c_c$):\n",
"\n",
"$$\n",
"q_m=\\rho_c S_c U_c=\\dfrac{\\rho_c}{\\rho_i}\\dfrac{c_c}{c_i}\\rho_i c_i S_c=\\dfrac{\\rho_c}{\\rho_i}\\dfrac{c_c}{c_i}\\dfrac{c_i}{rT_i}p_i S_c\n",
"$$\n",
"\n",
"On peut donc exprimer le débit sous la forme:\n",
"\n",
"$$\n",
"q_m=\\phi(\\gamma,T_i)p_i S_c\n",
"$$\n",
"\n",
"avec:\n",
"\n",
"$$\n",
"\\phi(\\gamma,T_i)=\\dfrac{\\rho_c}{\\rho_i}\\dfrac{c_c}{c_i}\\dfrac{\\sqrt{\\gamma r T_i}}{rT_i}=\\left(1+\\dfrac{\\gamma-1}{2}\\right)^{\\frac{-1}{\\gamma-1}}\\left(1+\\dfrac{\\gamma-1}{2}\\right)^{-1}\\sqrt{\\gamma}\\dfrac{1}{\\sqrt{rT_i}}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def qbar(Ti,r,g):\n",
" G=1+0.5*(g-1)\n",
" phi=np.sqrt(g)*G**(-g/(g-1))/np.sqrt(r*Ti)\n",
" return phi"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calcul de l'ISP d'un moteur\n",
"\n",
"L'impulsion spécifique d'un moteur fusée est caractéristique de ses performances dans le vide. Il s'exprime sous la forme:\n",
"\n",
"$$\n",
"ISP=\\dfrac{F}{q_m g_0}\n",
"$$\n",
"\n",
"Il exprime donc le rapport entre la force de poussée et le poid de carburant consommé par seconde pour produire cette poussée. Il s'exprime donc en seconde.\n",
"\n",
"D'après les résultats précédent on peut écrire:\n",
"\n",
"$$\n",
"ISP=\\dfrac{\\Phi(R_s,\\gamma)}{g_0\\phi(T_i,r,\\gamma)}\n",
"$$\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def ISP(Rs,g,r,Ti):\n",
" Phi=Fpoussee(Rs,g)\n",
" phi=qbar(Ti,r,g)\n",
" IS=Phi/phi\n",
" return IS/9.81\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ISP(60,1.4,245,3500)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n"
],
"text/plain": [
""
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.core.display import HTML\n",
"style=open('notebooks.css', \"r\").read()\n",
"HTML(style)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
""
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.16"
}
},
"nbformat": 4,
"nbformat_minor": 2
}