Upload 2 files
Browse files- bibliotecasnecessarias.txt +5 -0
- dinamica_dos_fluidos_rev2.py +110 -0
bibliotecasnecessarias.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
gradio
|
2 |
+
pandas
|
3 |
+
matplotlib
|
4 |
+
scipy
|
5 |
+
numpy
|
dinamica_dos_fluidos_rev2.py
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import math
|
2 |
+
import pandas as pd
|
3 |
+
import matplotlib.pyplot as plt
|
4 |
+
import numpy as np
|
5 |
+
from scipy.optimize import fsolve
|
6 |
+
import gradio as gr
|
7 |
+
|
8 |
+
def mach_from_area_ratio(area_ratio, gama) -> float:
|
9 |
+
def equation(M):
|
10 |
+
return (1 / M) * ((2 / (gama + 1)) * (1 + (gama - 1) / 2 * M ** 2)) ** ((gama + 1) / (2 * (gama - 1))) - area_ratio
|
11 |
+
M_initial_guess = 1.3
|
12 |
+
M_solution, = fsolve(equation, M_initial_guess)
|
13 |
+
return M_solution
|
14 |
+
|
15 |
+
def calculate_and_plot(gama, R, p, T, rt, raio_garganta, raio_saida, v):
|
16 |
+
# Área da garganta e da saída
|
17 |
+
A_star = math.pi * raio_garganta ** 2
|
18 |
+
A_saida = math.pi * raio_saida ** 2
|
19 |
+
|
20 |
+
max_area_ratio = A_saida / A_star
|
21 |
+
area_ratios = list(np.linspace(1.0, max_area_ratio, num=50))
|
22 |
+
|
23 |
+
# Condições totais
|
24 |
+
Tt = T * (1 + ((gama - 1) / 2))
|
25 |
+
pt = p * (1 + (gama - 1) / 2) ** (gama / (gama - 1))
|
26 |
+
|
27 |
+
# Calculo da velocidade do som e Mach na entrada
|
28 |
+
a = math.sqrt(gama * R * T)
|
29 |
+
M1 = v / a
|
30 |
+
|
31 |
+
# Relações após onda de choque
|
32 |
+
P1 = p
|
33 |
+
P2 = P1 * ((gama + 1) / (2 * M1 ** 2)) / (1 + (gama - 1) / (2 * M1 ** 2))
|
34 |
+
T2 = T * (1 + (gama - 1) / (2 * M1 ** 2)) / (1 + (gama - 1) / 2)
|
35 |
+
ro2 = rt * (P2 / P1) ** (1 / gama)
|
36 |
+
v2 = math.sqrt(2 * R * (Tt - T2))
|
37 |
+
|
38 |
+
# Cálculo na seção divergente
|
39 |
+
mach_numbers = []
|
40 |
+
pressures = []
|
41 |
+
temperatures = []
|
42 |
+
densities = []
|
43 |
+
velocities = []
|
44 |
+
|
45 |
+
for area_ratio in area_ratios:
|
46 |
+
M = mach_from_area_ratio(area_ratio, gama)
|
47 |
+
T = Tt / (1 + (gama - 1) / 2 * M ** 2)
|
48 |
+
p = pt / (1 + (gama - 1) / 2 * M ** 2) ** (gama / (gama - 1))
|
49 |
+
rho = p / (R * T)
|
50 |
+
v = M * math.sqrt(gama * R * T)
|
51 |
+
|
52 |
+
mach_numbers.append(M)
|
53 |
+
pressures.append(p)
|
54 |
+
temperatures.append(T)
|
55 |
+
densities.append(rho)
|
56 |
+
velocities.append(v)
|
57 |
+
|
58 |
+
# Cria DataFrame para armazenar resultados na seção divergente
|
59 |
+
df_divergente = pd.DataFrame({
|
60 |
+
"Área Relativa (A/A*)": area_ratios,
|
61 |
+
"Mach": mach_numbers,
|
62 |
+
"Pressão (Pa)": pressures,
|
63 |
+
"Temperatura (K)": temperatures,
|
64 |
+
"Densidade (kg/m³)": densities,
|
65 |
+
"Velocidade (m/s)": velocities
|
66 |
+
})
|
67 |
+
|
68 |
+
# Plotando os resultados na seção divergente
|
69 |
+
fig, axs = plt.subplots(3, 2, figsize=(10, 12))
|
70 |
+
fig.suptitle("Parâmetros do Escoamento na Seção Divergente com Relação de Área")
|
71 |
+
|
72 |
+
parameters = ["Mach", "Pressão (Pa)", "Temperatura (K)", "Densidade (kg/m³)", "Velocidade (m/s)"]
|
73 |
+
for i, param in enumerate(parameters):
|
74 |
+
ax = axs[i // 2, i % 2]
|
75 |
+
ax.plot(df_divergente["Área Relativa (A/A*)"], df_divergente[param], label=param)
|
76 |
+
ax.set_xlabel("Área Relativa (A/A*)")
|
77 |
+
ax.set_ylabel(param)
|
78 |
+
ax.set_ylim(df_divergente[param].min() * 0.95, df_divergente[param].max() * 1.05)
|
79 |
+
ax.legend()
|
80 |
+
|
81 |
+
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
|
82 |
+
|
83 |
+
return fig, P2, T2, ro2, v2
|
84 |
+
|
85 |
+
# Definir a interface do Gradio com as novas sintaxes de inputs e outputs
|
86 |
+
interface = gr.Interface(
|
87 |
+
fn=calculate_and_plot,
|
88 |
+
inputs=[
|
89 |
+
gr.Number(label="Gama"),
|
90 |
+
gr.Number(label="R (Constante do gás)"),
|
91 |
+
gr.Number(label="Pressão inicial (Pa)"),
|
92 |
+
gr.Number(label="Temperatura inicial (K)"),
|
93 |
+
gr.Number(label="Densidade inicial (kg/m³)"),
|
94 |
+
gr.Number(label="Raio da garganta (m)"),
|
95 |
+
gr.Number(label="Raio da saída (m)"),
|
96 |
+
gr.Number(label="Velocidade inicial (m/s)")
|
97 |
+
],
|
98 |
+
outputs=[
|
99 |
+
gr.Plot(label="Gráficos dos Parâmetros na Seção Divergente"),
|
100 |
+
gr.Textbox(label="Pressão após a onda de choque (Pa)"),
|
101 |
+
gr.Textbox(label="Temperatura após a onda de choque (K)"),
|
102 |
+
gr.Textbox(label="Densidade após a onda de choque (kg/m³)"),
|
103 |
+
gr.Textbox(label="Velocidade na saída (m/s)")
|
104 |
+
],
|
105 |
+
title="Análise de Escoamento em Tubeira",
|
106 |
+
description="Digite os valores dos parâmetros iniciais para calcular os parâmetros na seção divergente de uma tubeira padrão."
|
107 |
+
)
|
108 |
+
|
109 |
+
interface.launch()
|
110 |
+
interface.launch(share=True)
|