Professional Documents
Culture Documents
3-3 SRP
3-3 SRP
Predict Thrust
1) Case Study
Initial Reference
1000 psi (6894757.188 Pa)
Pressure
Cylindrical grain burning only one side
D_outer : 200 mm
Grain
D_inner : 100 mm
Length : 1000 mm
Chamber Gas Temp. : 4991 R (2772.8K)
Specific Heat Ratio(Cp/Cv) : 1.1971
Combustion Gas
Propellant Density : 0.06140 lbm/in3 (1699.546 kg/m3)
Characteristics
Average Mol. weight : 24.576 lbm/lbm-mole
Discharge Corection Factor : 1.00
Constant : 0.0274
Exponent : 0.33
Burning Rate
(St.Robert's law, US unit parameter)
Characteristics
PIKA : 0.366
PIKB : 0.000 (Temp Sensitivity)
Motor Coefficient : 0.98
Nozzle Nozzle Divergence Half Angle : 15 deg
Optimum expansion
Atmospere Pressure : 14.7 psia
Extra Information
Standard Value of Prop. Init. Temp. : 20deg
2)
. Case study
, .
,
.
x dx
.
Pc Runge-Kutta 4
.
START
Input
Parameter
Nt=0 Performance
Calculation
Plot
Geometry
Update
Pc Calculation Pc <= Pe
(Using RK4)
END Program
Initialization
cos
, average burning area for cylindrical one way burning
Geometry Update
, total chamber volume
Pc Calculation
P(x) Distribution
Performance
or
3) Result
Pc . vs . Time
120
100
80
Pc (atm)
60
40
20
-1 0 1 2 3 4 5 6 7 8
Time (sec)
Thrust . vs . Time
20
15
Thrust (kN)
10
0
-1 0 1 2 3 4 5 6 7 8
Time (sec)
.
. 7.3
.
t=4 sec
69.76
69.74
69.72
Pc(i) , atm
69.70
69.68
69.66
69.64
69.62
t=4 P(x)
.
, 0.13 atm(13172Pa) .
Appendix)) Program Source
Module para_mod
Implicit none
Integer,parameter :: dp =selected_real_kind(15,100)
use para_mod
Implicit none
Integer :: I,K,N
Real (dp) :: Pcnew ! rt : real time
EXTERNAL CalcPc
call Input
call Init
nt=0
rt=0.
Do
call geo_update
! call BC
call RK4th(rt,Pc,dt,Pcnew,CalcPc)
Pc=Pcnew
call PxDist
call perfor
call plot
nt=nt+1
call step
! if(nstep==0) exit
if(pc <= 1.1*pe) exit
END DO
use para_mod
namelist/input1/D_out,D_in,L,Tc,Pc,Ta,Pa,burn_a,burn_b,pika,pikb, &
gm,rho_p,MW_avg,C_dis,C_mot,angle_dis,dx,dt
open (1,file='input.dat',status='old')
read (1,input1)
phi=4.*atan(1.)
write(*,input1)
close (1)
use para_mod
Implicit none
Integer :: I
! middle-Area
R=Ru/MW_avg
Cp=R*gm/(gm-1)
Pe=Pa
cstar=sqrt(gm*R*Tc)/(gm*sqrt((2./(gm+1.))**((gm+1)/(gm-1))))
lambda=(1.+cos(angle_dis*phi/180.))/2.
Cf=lambda*sqrt(2.*gm**2/(gm-1)*(2./(gm+1))**((gm+1)/(gm-1))*(1-(Pe/Pc)**((gm-1)/gm)))
! +(Pe-Pa)/Pc*Ae/At ! if Pe=Pa, -> 0
Isp=cstar*Cf/g0
Gamma=sqrt(gm)*(2/(gm+1))**((gm+1)/(2*(gm-1)))
write(*,100) R,Cp,cstar,lambda,cf,isp,gamma
100 format(1x,'R=',f10.4,' Cp=',f10.4,' c*=',f10.4,' lambda=', &
f7.4,' Cf=',f7.4,' isp=',f8.4,' Gamma=',f7.4)
! rdot_avg=burn_a*Pc**burn_b
rdot_avg=burn_a*(Pc/101325.*14.7)**burn_b*0.0254 ! burn_a,b : USCS Unit
mdot_avg=Ab_avg*rho_p*rdot_avg
At=mdot_avg*cstar/Pc
Ae=At/(((gm+1)/2)**(1/(gm-1))*(pe/pc)**(1/gm) & ! eq 3.25
*sqrt((gm+1)/(gm-1)*(1-(pe/pc)**((gm-1)/gm))))
Do i=1,nx
P(i)=101325.*1.
T(i)=Tc
! V(i)=0.0
rho(i)=p(i)/(R*T(i))
end do
use para_mod
Implicit none
Integer :: i
volc=0.0
mdot_ig=0.0
mdot_in=0.0
do i=1,nx
call burnrate(i)
if (nt==0) then
d(i)=D_in
else
d(i)=d(i)+2.*rdot(i)*dt
If (D(i) >= D_out) then
D(i)=D_out
end if
end if
peri(i)=phi*D(i)
Ap(i)=1./4.*phi*d(i)**2. ! Port area (m2)
Ab(i)=peri(i)*dx ! Burning area (m2)
web(i)=d_out/2.-d(i)/2. ! web thickness (m)
if (web(i)<=0.0) then
web(i)=0.0
rdot(i)=0.0
end if
volc=volc+Ap(i)*dx
mdot_in=mdot_in+rdot(i)*rho_p*Ab(i)
end do
use para_mod
Implicit none
V(1)=0.0
T(1)=Tc
P(1)=Pc
End subroutine BC
!********************************************************************
Subroutine burnrate(i)
use para_mod
Implicit none
Integer :: i
rdot(i)=burn_a*(P(i)*14.7/101325.)**burn_b*0.0254
! ** a, b parameters are USCS Unit values
!********************************************************************
subroutine step
use Para_mod
Implicit none
Integer :: i
real(dp) :: web_max
web_max=0.0
Do i=1,nx
web(i)=web(i)-rdot(i)*dt
web_max=max(web(i),web_max)
If( web_max > 0.0 ) then ! all web thickness = 0, program stop
nstep=1
else
nstep=0 ! 0, stop calculate ; 1, continue
end if
End do
Implicit none
Integer :: I
P(1)=Pc*(1+0.5*Gamma**2/(Ap(1)/At)**2)
Do i=2,nx
P(i)=P(1)*(1-(Gamma*(At/Ap(i))*((i-1)*dx/L))**2)
End do
use para_mod
Implicit none
Integer :: i
Real (dp) :: Ve
Cf=lambda*sqrt(2.*gm**2/(gm-1)*(2./(gm+1))**((gm+1)/(gm-1)) &
*(1-(Pe/Pc)**((gm-1)/gm)))+(Pe-Pa)/Pc*Ae/At
Isp=cstar*Cf/g0
use para_mod
Implicit none
Integer :: i
namelist/input1/D_out,D_in,L,Tc,Pc,Ta,Pa,burn_a,burn_b,pika,pikb, &
gm,rho_p,MW_avg,C_dis,C_mot,angle_dis,dx,dt
Open(1,file='performance.txt')
Open(2,file='Geometry.txt')
If (nt==0) then
write(1,100)
write(*,100)
write(2,input1)
write(2,200)
! Geo. information of Grain
write(2,210) D_out,D_in,L
! Geo. information of Nozzle
write(2,220) At,sqrt(At*4/phi),Ae,sqrt(Ae*4/phi) &
,(sqrt(Ae*4/phi)-sqrt(At*4/phi))/2./dtan(angle_dis/180.*phi)
write(1,110) rt,Pc/101325.,Cf,Isp,F/1000.,mdot_in
write(*,110) rt,Pc/101325.,Cf,Isp,F/1000.,mdot_in
110 format(1x,6f10.5)
write(2,*) nt*dt,(P(i),i=1,nx)
230 format(1x,51f10.8)
!********************************************************************
! Runge-kutta 4th Order Method ======================================
!********************************************************************
SUBROUTINE RK4th (x,y,h,ynew,f_sys)
Use para_mod
IMPLICIT NONE
REAL(dp) :: x, y, h
REAL(dp) :: ym, ye, ynew, slope
REAL(dp) :: k1, k2, k3, k4
EXTERNAL F_SYS
Call F_sys(x,y,k1)
ym=y+k1*h/2.
Call F_sys(x+h/2.,ym,k2)
ym=y+k2*h/2.
Call F_sys(x+h/2.,ym,k3)
ye=y+k3*h
Call F_sys(x+h,ye,k4)
slope=(k1+2.*(k2+k3)+k4)/6.
ynew=y+slope*h
x=x+h
!===============================================================
!
!===============================================================
SUBROUTINE CalcPc(X,Y,DYDX)
Use para_mod
IMPLICIT NONE
REAL(dp) :: X,Y,DYDX
DYDX=(mdot_ig+mdot_in-Y*At/Cstar)*R*Tc/Volc ! Y=Pc