термодинамический расчет. Пояснительная записка к курсовой работе по дисциплине Топлива и рабочие процессы в АиРД
Скачать 0.63 Mb.
|
Выводы по разделу четыреАнализируя полученный диапазон зависимости работоспособности газов от коэффициента избытка окислителя α, можно сделать вывод, что максимальная работоспособность продуктов сгорания достигается при значении коэффициента избытка окислителя: . Полученное значение коэффициента избытка окислителя α является оптимальным для данного двигателя, при данном значении α двигатель выдает максимальный удельный импульс. СПИСОК ЛИТЕРАТУРЫ Теория жидкостных ракетных двигателей [Текст]: учебное пособие / Махин В. А. – М.: Изд-во «Наука», 1969. – 586 с. Топлива химических ракетных двигателей [Текст]: учебное пособие / В.С. Егорычев, В.С. Кондрусев. – Самара: Изд-во Самар. гос. аэрокосм. ун-та, 2007. – 72 с. Теория ракетных двигателей [Текст]: учебное пособие / В.Е. Алемасов, А.Ф. Дрегалин. – М.: Изд-во «Машиностроение», 1989. – 547 с. Приложения Приложение А (обязательное) Текст программы Основная часть программы: program main use dat01 implicit none integer :: you ! real (8) :: alph, k, k_0 !альфа - коэфф. избытка окислителя, k - фактическое стехиометрическое соотношение, k_0 - теоретическое стехиометрическое соотношение ! real (8) :: p_kam, p_sopl !давление газов ! real (8) :: mu_kam, mu_sopl !молекулярные массы газов ! real (8) :: R_kam, R_sopl !удельная газовая постоянная ! real (8) :: i_kam, i_sopl !энтальпия ! real (8) :: s_kam, s_sopl !энтропия продуктов сгорания ! real (8) :: T_kam, T_sopl !температура газов в камере и в сопле ! real (8) :: rho_kam, rho_sopl !плотность газов ! real (8) :: mu_sredn, w_sopl, gam ! !real (8) :: i_topl, i_gor, i_ok! 'энтальпия топлива, горючего и окислителя !real (8), dimension (8):: pi_kam, pi_sopl interface subroutine kamera !(p_kam, alph, i_topl, s_kam, T_kam, mu_kam, pi_kam, R_kam) use dat01 implicit none !real(8), intent(in) :: p_kam, alph, i_topl !real(8), intent(out) :: s_kam, T_kam, mu_kam, R_kam !real(8), dimension (8), intent (out) :: pi_kam end subroutine subroutine soplo !(p_sopl, alph, i_topl, s_sopl, i_sopl T_sopl, mu_sopl, pi_sopl, R_sopl) use dat01 implicit none !real(8) :: Tl, Tr, Trab, s_ras, delt !real(8), intent(in) :: p_sopl, alph, i_topl, s_sopl !real(8), intent(out) :: i_sopl, T_sopl, mu_sopl, R_sopl !real(8), dimension (8), intent (out) :: pi_sopl end subroutine end interface open (3,file="C:\Users\Ada_Lire\Desktop\toplivo\jrd.txt",status='replace') !ввод данных print *,"Vvedite i_gor - entalpiya goryuchego [J/kg]" !read(*,'(G12.3)') i_gor print *,"Vvedite i_ok - entalpiya okislitelya [J/kg]" !read(*,'(G12.3)') i_ok print *,"Vvedite k_0 - teoreticheskoe stehiometricheskoe sootnoshenie" !read(*,'(G12.3)') k_0 print *,"Vvedite p_kam - davlenie v kamere [bar]" !read(*,'(G12.3)') p_kam print *,"Vvedite p_sopl - davlenie na sreze sopla [bar]" !read(*,'(G12.3)') p_sopl i_ok = --398.8 i_gor = -1815.781 k_0=3.42 !p_kam=70 !p_sopl=0.6 !перевод в паскали p_kam=7000000.0!p_kam*100000 p_sopl=60000.0!p_sopl*100000 print *,"Iskhodnye dannye" print *, "entalpiya goryuchego" print *, "i_gor=", i_gor write (3,*) "entalpiya goryuchego" write (3,*) "i_gor=", i_gor print *, "entalpiya okislotelya" print *, "i_ok=", i_ok write (3,*) "entalpiya okislotelya" write (3,*) "i_ok=", i_ok print *, "teoreticheskoe stehiometricheskoe sootnoshenie" print *, "k_0=", k_0 write (3,*) "teoreticheskoe stehiometricheskoe sootnoshenie" write (3,*) "k_0=", k_0 print *, "davlenie v kamere" print *, "p_kam=", p_kam write (3,*) "davlenie v kamere" write (3,*) "p_kam=", p_kam print *, "davlenie na sreze sopla [Pa]" print *, "p_sopl=", p_sopl write (3,*) "davlenie na sreze sopla [Pa]" write (3,*) "p_sopl=", p_sopl print *,"_____Module_____" write(3,*)"_____Module_____" call mol_r call vicisli_g_gor call vicisli_abc print *,"_____End module_____" write(3,*)"_____End module_____" print *,"Osnovnoy tsykl" write (3,*)"Osnovnoy tsykl" print *," -----------------------------" print *," ----------------------------------- " print *,"-----------------------------------------" write (3,*)" -----------------------------" write (3,*)" ----------------------------------- " write (3,*)"-----------------------------------------" !основной цикл do you = speak, english alph=0.55+0.05*you print *, "\\||//" print *, "alpha= ",alph write(3,*) "\\||//" write(3,*) "alpha= ",alph k = k_0 * alph i_topl=(i_gor+k*i_ok)/(1+k) print *, "k= ",k write(3,*) "k= ",k print *, "i_topl= ",i_topl write(3,*) "i_topl= ",i_topl print *, "KAMERA" write(3,*) "KAMERA" call kamera !(p_kam, alph, i_topl, s_kam, T_kam, mu_kam, pi_kam, R_kam) !write (*,*) T_kam, s_kam !write (*,*) mu_kam, R_kam !write (*,*) part s_sopl=s_kam call soplo !(p_sopl, alph, i_topl, s_sopl, i_sopl, T_sopl, mu_sopl, pi_sopl, R_sopl) !mu_sopl=sum(part*mui)/p_sopl !R_sopl=R0/mu_sopl rho_kam=P_kam/(R_kam*T_kam) rho_sopl=P_sopl/(R_sopl*T_sopl) gam=log(P_kam/P_sopl)/log(rho_kam/rho_sopl)*k_0 w_sopl=sqrt(2*gam/(gam-1)*R_kam*T_kam*(1-(P_sopl/P_kam)**((gam-1)/gam))) print *,"T sopla=", T_sopl print *,"Mu sopla=", mu_sopl print *,"R sopla=", R_sopl !print *, part print *, w_sopl print *, "==============================" end do print *,"Konec" write (3,*)"Konec" print *,"-----------------------------------------" print *," ----------------------------------- " print *," -----------------------------" write (3,*)"-----------------------------------------" write (3,*)" ----------------------------------- " write (3,*)" -----------------------------" close (3,status='keep') end program Структура подпрограмм для расчета камеры и сопла фактически идентичны, за исключением основных используемых формул. subroutine kamera !(p_kam, alph, i_topl, s_kam, T_kam, mu_kam, pi_kam, R_kam) use dat01 use kis_mod implicit none real(8) :: Tl, Tr, Trab, i_ras, delt !real(8), intent(in) :: p_kam, alph, i_topl !real(8), intent(out) :: s_kam, T_kam, mu_kam, R_kam !real(8), dimension (8), intent (out) :: pi_kam print *, "KAMERA" write(3,*) "KAMERA" Tl=2000 Tr=5000 delt=0.01 pp=p_kam !замена для пард do Trab=(Tl+Tr)/2 print *, "Trab=", Trab write(3,*) "Trab=", Trab pause call kis (Trab) !вызываем подсчет коэфф диссоциации, энтальпии, энтропии call PARD (alph) Ii=1000*Ii/(mui*0.001) pi_kam=pi mu_kam=sum(pi_kam*mui)/p_kam R_kam=R0/mu_kam i_ras=sum(Ii*pi_kam)/(mu_kam*p_kam) print *, "pogreshnost i_rast-i_topl=", abs((i_ras-i_topl)/i_topl) write(3,*) "pogreshnost i_rast-i_topl=", abs((i_ras-i_topl)/i_topl) print *, "pogreshnost i_ras=", i_ras write(3,*) "pogreshnost i_ras=", i_ras print *, "pogreshnost i_topl=", i_topl write(3,*) "pogreshnost i_topl=", i_topl !pause if ((abs((i_ras-i_topl)/i_topl))>delt) then if (i_ras Tr=Trab else Tl=Trab end if else exit end if end do pause T_kam=Trab s_kam=sum((Si-R0*log(pi_kam))*pi_kam)/sum(mui*pi_kam) print *, "END KAMERA" write(3,*) "END KAMERA" end subroutine kamera Подпрограмма для расчета среза сопла: subroutine soplo !(p_sopl, alph, i_topl, s_sopl, i_sopl, T_sopl, mu_sopl, pi_sopl, R_sopl) use dat01 use kis_mod implicit none real(8) :: Tl, Tr, Trab, s_ras, delt !real(8), intent(in) :: p_sopl, alph, i_topl, s_sopl !real(8), intent(out) :: i_sopl, T_sopl, mu_sopl, R_sopl !real(8), dimension (8), intent (out) :: pi_sopl Tl=2000 Tr=5000 delt=0.01 pp=p_sopl !замена для пард do Trab=(Tl+Tr)/2 call kis (Trab) !вызываем подсчет коэфф диссоциации, энтальпии, энтропии call PARD (alph) pi_sopl=pi mu_sopl=sum(pi_sopl*mui)/p_sopl R_sopl=R0/mu_sopl s_ras=sum((Si-R0*log(pi_sopl))*pi_sopl)/sum(mui*pi_sopl) if ((abs((s_ras-s_sopl)/s_sopl))>delt) then if (s_ras Tl=Trab else Tr=Trab end if else exit end if end do T_sopl=Trab i_sopl=sum(Ii*mui*pi_sopl)/sum(mui*pi_sopl) end subroutine soplo Модуль для подсчета постоянных коэффициентов, молекулярных масс и газовых постоянных: module dat01 real(8) :: Aconst, Bconst, Cconst integer :: bruh enum, bind(C) enumerator :: H2=1, H, O2, O, OH, H2O, CO2, CO enumerator :: MU_H=1, MU_C, MU_O enumerator :: speak=1, english=10 enumerator :: low=1, hi enumerator :: CO2__CO_O2=1, H2O__H2_O2, H2O__OH_H2, H2__H, O2__O!, F2__F, HF__H_F, N2__N, N2O2__NO end enum real (8), parameter, dimension(3) :: mu = (/1, 12, 16/)!молярные массы real (8), parameter :: R0=8314.5!универсальная газовая постоянная !real (8), dimension(8) :: part !глобальная переменная real (8), dimension(8):: mui !массив с молярными массами real (8), dimension(8):: Ri !массив с газовыми постоянными real (8) :: g_gor!условная масса молекулы горючего real (8), dimension (3):: gi_gor!массовые доли эоементов горючего real (8), dimension (5) :: Ki !массив с постоянными диссоциации для реакций real (8), dimension (8):: pi !массив с парциальными давлениями для пард real (8) :: pp !костыль давления для парда real (8) :: alph, k, k_0 !альфа - коэфф. избытка окислителя, k - фактическое стехиометрическое соотношение, k_0 - теоретическое стехиометрическое соотношение real (8) :: p_kam, p_sopl !давление газов real (8) :: mu_kam, mu_sopl !молекулярные массы газов real (8) :: R_kam, R_sopl !удельная газовая постоянная real (8) :: i_kam, i_sopl !энтальпия real (8) :: s_kam, s_sopl !энтропия продуктов сгорания real (8) :: T_kam, T_sopl !температура газов в камере и в сопле real (8) :: rho_kam, rho_sopl !плотность газов real (8) :: mu_sredn, w_sopl, gam ! real (8) :: i_topl, i_gor, i_ok! 'энтальпия топлива, горючего и окислителя real (8), dimension (8):: pi_kam, pi_sopl!массивы с парциальными давлениями газов в камере и сопле contains subroutine mol_r mui(H)=mu(mu_H) mui(H2)=2*mu(mu_H) mui(O)=mu(mu_O) mui(O2)=2*mu(mu_O) mui(OH)=mu(mu_H)+mu(mu_O) mui(H2O)=2*mu(mu_H)+mu(mu_O) mui(CO)=mu(mu_C)+mu(mu_O) mui(CO2)=mu(mu_C)+2*mu(mu_O) do bruh=1,8 Ri(bruh)=R0/mui(bruh) end do print *, "subroutine mol_r" write (3,*) "subroutine mol_r" print *,"mui(H)=", mui(H) print *,"mui(H2)=", mui(H2) print *,"mui(O)=", mui(O) print *,"mui(O2)=", mui(O2) print *,"mui(OH)=", mui(OH) print *,"mui(H2O)=", mui(H2O) print *,"mui(CO)=", mui(CO) print *,"mui(CO2)=", mui(CO2) write (3,*)"mui(H)=", mui(H) write (3,*)"mui(H2)=", mui(H2) write (3,*)"mui(O)=", mui(O) write (3,*)"mui(O2)=", mui(O2) write (3,*)"mui(OH)=", mui(OH) write (3,*)"mui(H2O)=", mui(H2O) write (3,*)"mui(CO)=", mui(CO) write (3,*)"mui(CO2)=", mui(CO2) print *,"Ri(H)=", Ri(H) print *,"Ri(H2)=", Ri(H2) print *,"Ri(O)=", Ri(O) print *,"Ri(O2)=", Ri(O2) print *,"Ri(OH)=", Ri(OH) print *,"Ri(H2O)=", Ri(H2O) print *,"Ri(CO)=", Ri(CO) print *,"Ri(CO2)=", Ri(CO2) write (3,*)"Ri(H)=", Ri(H) write (3,*)"Ri(H2)=", Ri(H2) write (3,*)"Ri(O)=", Ri(O) write (3,*)"Ri(O2)=", Ri(O2) write (3,*)"Ri(OH)=", Ri(OH) write (3,*)"Ri(H2O)=", Ri(H2O) write (3,*)"Ri(CO)=", Ri(CO) write (3,*)"Ri(CO2)=", Ri(CO2) print *, "end subroutine mol_r" write (3,*) "end subroutine mol_r" !allocate (Ri(size(mui))) ! do you = 1, size(mui) ! Ri(you)=R0/mui(you) ! end do endsubroutine mol_r subroutine vicisli_g_gor g_gor=1 gi_gor(mu_H)=0.141 gi_gor(mu_O)=0.0 gi_gor(mu_C)=0.859 print *, "subroutine vicisli_g_gor" write (3,*) "subroutine vicisli_g_gor" print *, "g_gor=", g_gor print *, "gi_gor(H)=", gi_gor(mu_H) print *, "gi_gor(O)=", gi_gor(mu_O) print *, "gi_gor(C)=", gi_gor(mu_C) write (3,*) "g_gor=", g_gor write (3,*) "gi_gor(H)=", gi_gor(mu_H) write (3,*) "gi_gor(O)=", gi_gor(mu_O) write (3,*) "gi_gor(C)=", gi_gor(mu_C) print *, "end subroutine vicisli_g_gor" write (3,*) "end subroutine vicisli_g_gor" end subroutine vicisli_g_gor subroutine vicisli_abc Aconst=(mu(MU_H)*gi_gor(MU_O))/(mu(MU_O)*gi_gor(MU_H)) Bconst=(gi_gor(MU_H)*mu(MU_O))/(k_0*mu(MU_H)) Cconst=(mu(MU_H)*gi_gor(MU_C))/(mu(MU_C)*gi_gor(MU_H)) print *, "vicisli_abc" write (3,*) "vicisli_abc" print *, "A=",Aconst print *, "B=",Bconst print *, "C=",Cconst write (3,*) "A=",Aconst write (3,*) "B=",Bconst write (3,*) "C=",Cconst print *, "end vicisli_abc" write (3,*) "end vicisli_abc" end subroutine vicisli_abc end module dat01 Подсчет коэфф диссоциации, энтальпии, энтропии: module kis_mod integer :: i, j real(8) :: T real (8), dimension (8) :: hrt! H/RT real (8), dimension (8) :: sr! S/R real (8), dimension (8) :: grt! G/RT real (8), dimension (8) :: Si! энтропия в-ва real (8), dimension (8) :: Ii! энтальпия в-ва real (8), dimension (7,2,8) :: poly != reshape (//) () !7 - полином 2- low/hi 2 - в-во real (8), dimension (5) :: deltagrt !real (16), dimension (5) :: Ki contains subroutine kis (Trab) use dat01 implicit none real(8), intent(in) :: Trab !a(1,low,N) = 0.24159429E+01 !a(2,low,N) = 0.17489065E-03 !a(3,low,N) = -0.11902369E-06 !a(4,low,N) = 0.30226244E-10 !a(5,low,N) = -0.20360983E-14 !a(6,low,N) = 0.56133775E+05 !a(7,low,N) = 0.46496095E+01 !a(1,hi,N) = 0.25000000E+01 !a(2,hi,N) = 0.00000000E+00 !a(3,hi,N) = 0.00000000E+00 !a(4,hi,N) = 0.00000000E+00 !a(5,hi,N) = 0.00000000E+00 !a(6,hi,N) = 0.56104638E+05 !a(7,hi,N) = 0.41939088E+01 !a(1,low,N2) =2.95257637E+00 !a(2,low,N2) =1.39690040E-03 !a(3,low,N2) =-4.92631603E-07 !a(4,low,N2) =7.86010195E-11 !a(5,low,N2) =-4.60755204E-15 !a(6,low,N2) =-9.23948688E+02 !a(7,low,N2) =5.87188762E+00 !a(1,hi,N2) = 3.53100528E+00 !a(2,hi,N2) =-1.23660988E-04 !a(3,hi,N2) =-5.02999433E-07 !a(4,hi,N2) =2.43530612E-09 !a(5,hi,N2) =-1.40881235E-12 !a(6,hi,N2) =-1.04697628E+03 !a(7,hi,N2) =2.96747038E+00 poly(1,low,H2) = 2.93286575E+00 poly(2,low,H2) = 8.26608026E-04 poly(3,low,H2) = -1.46402364E-07 poly(4,low,H2) = 1.54100414E-11 poly(5,low,H2) = -6.88804800E-16 poly(6,low,H2) = -8.13065581E+02 poly(7,low,H2) = -1.02432865E+00 poly(1,hi,H2) = 2.34433112E+00 poly(2,hi,H2) = 7.98052075E-03 poly(3,hi,H2) = -1.94781510E-05 poly(4,hi,H2) = 2.01572094E-08 poly(5,hi,H2) = -7.37611761E-12 poly(6,hi,H2) = -9.17935173E+02 poly(7,hi,H2) = 6.83010238E-01 poly(1,low,H) = 0.25000000E+01 poly(2,low,H) = 0.00000000E+00 poly(3,low,H) = 0.00000000E+00 poly(4,low,H) = 0.00000000E+00 poly(5,low,H) = 0.00000000E+00 poly(6,low,H) = 0.25473660E+05 poly(7,low,H) = -0.44668285E+00 |