56 SUBROUTINE zn_sswsb(G_ZN, P, qr, To, rhoc, rb, Ts, Tf, fr, Tn)
65 REAL(DBL),
INTENT(IN) :: p, qr, to, rhoc
66 REAL(DBL),
INTENT(OUT) :: rb, ts, tf, fr
67 REAL(DBL),
INTENT(OUT) :: tn(:)
70 REAL(DBL),
parameter :: tol=1.0
d-5
78 REAL(DBL) ::
j(2,2),xx(2),e(2)
80 REAL(DBL) :: term0, term1, term2, term3, term4, term5
81 REAL(DBL) :: xcd, da, xg, xcond, frj
94 IF(g_zn%Model_combustion == 1)
THEN
104 rb=g_zn%a_p*(p**g_zn%n_p)
109 DO iter=0,g_zn%itermax
115 xreac=2.0*rhoc*g_zn%alfac*g_zn%R*xx(2)/xx(1)/g_zn%Ec
116 term0=1.0-g_zn%Ka*xreac
118 term1=g_zn%Ac*g_zn%R*(xx(2)*rhoc)**2*g_zn%alfac*g_zn%C* &
119 dexp(-g_zn%Ec/g_zn%R/xx(2))/g_zn%Ec
121 fr=dexp(-xreac*g_zn%Ka)
122 term2=g_zn%C*(xx(2)-to)-g_zn%Qc/2.0-fr*qr/xx(1)
126 j(1,1)=2.0*xx(1)+term3/term2*fr*qr/xx(1)**2 &
128 j(1,2)=-xx(1)**2*((2.0d0+g_zn%Ec/g_zn%R/xx(2))/xx(2) - &
129 (g_zn%C+g_zn%Ka*xreac*qr*fr/xx(1)/xx(2))/term2)
135 xcd=g_zn%lamg/g_zn%C/xx(1)
136 da=4.0*g_zn%Bg*g_zn%C/g_zn%lamg*(p*g_zn%MW*xcd/g_zn%R)**2
138 xg=2.0*xcd/(term4-1.0)
139 term5=g_zn%Qc-g_zn%C*(xx(2)-to)
140 tf=(qr/xx(1)+g_zn%Qc+g_zn%Qg)/g_zn%C+to
142 e(2)=(tf-xx(2))/xg+(qr+xx(1)*term5)/g_zn%lamg
143 j(2,1)=-qr/xg/xx(1)**2/g_zn%C- &
144 (tf-xx(2))/xg/xx(1)/term4+term5/g_zn%lamg
145 j(2,2)=-1.0/xg-1.0/xcd
152 IF(xx(1).LT.0.0)
THEN
154 print *,
' ROCBURN_ZN: rank=',g_zn%rank
155 print *,
' rb negative xx(1)=',xx(1)
161 IF(abs(e(1)).LT.tol .AND. abs(e(2)).LT.tol)
THEN
168 xreac=2.0*g_zn%alfac*g_zn%R*ts/rb/g_zn%Ec
169 fr=dexp(-xreac*g_zn%Ka)
170 xcd=g_zn%lamg/g_zn%C/xx(1)
171 da=4.0*g_zn%Bg*g_zn%C/g_zn%lamg*(p*g_zn%MW*xcd/g_zn%R)**2
173 xg=2.0*xcd/(term4-1.0)
174 tf=(qr/xx(1)+g_zn%Qc+g_zn%Qg)/g_zn%C+to
181 xreac=xcond*g_zn%R*ts*2.0/g_zn%Ec
182 fr=dexp(-xreac*g_zn%Ka)
183 frj=fr*qr/rhoc/rb/g_zn%C/(ts-to)/(1.-g_zn%Ka*xcond)
185 tn(
i)=to+(ts-to)*((1.0-frj)* &
186 dexp(g_zn%x(
i)/xcond)+ frj*exp(g_zn%x(
i)*g_zn%Ka))
189 IF(abs(tn(g_zn%nx)-to)/to .GT. 0.001)
THEN
191 WRITE(*,*)
'ROCBURN_ZN: rank=',g_zn%rank
192 WRITE(*,*)
' Error: xmax not large enough'
193 WRITE(*,*)
' To boundary condition not satisfied'
194 CALL mpi_abort( mpi_comm_world, -1)
207 print *,
' ROCBURN_ZN: rank=',g_zn%rank
208 print *,
' ROCBURN_ZN: Error-steady state WSB' &
209 ,
' in ignition_combustion'
210 print *,
' ROCBURN_ZN: Maximum # of ',g_zn%itermax &
211 ,
' iterations exceeded'
212 CALL mpi_abort( mpi_comm_world, -1)
220 IF(g_zn%Model_combustion == 2)
THEN
230 rb=g_zn%a_p*p**g_zn%n_p
235 DO iter=0,g_zn%itermax
241 xreac=2.0*rhoc*g_zn%alfac*g_zn%R*xx(2)/xx(1)/g_zn%Ec
242 term0=1.0-g_zn%Ka*xreac
243 term1=g_zn%Ac*g_zn%R*(xx(2)*rhoc)**2*g_zn%alfac*g_zn%C* &
244 dexp(-g_zn%Ec/g_zn%R/xx(2))/g_zn%Ec
246 fr=dexp(-xreac*g_zn%Ka)
247 term2=g_zn%C*(xx(2)-to)-g_zn%Qc/2.0-fr*qr/xx(1)
251 j(1,1)=2.0*xx(1)+term3/term2*fr*qr/xx(1)**2 &
253 j(1,2)=-xx(1)**2*((2.0d0+g_zn%Ec/g_zn%R/xx(2))/xx(2) - &
254 (g_zn%C+g_zn%Ka*xreac*qr*fr/xx(1)/xx(2))/term2)
255 e(2)=g_zn%a_T*((xx(2) - to - qr/(xx(1)*g_zn%C) )/ &
256 (xx(2)-300.0))**g_zn%n_T - rhoc*g_zn%a_p*p**g_zn%n_p/xx(1)
257 j(2,1)=rhoc*g_zn%a_p*p**g_zn%n_p/(xx(1)*xx(1))
258 j(2,2)=g_zn%n_T*g_zn%a_T*((xx(2)-to)/(xx(2)-300.0))**(g_zn%n_T-1.0) &
259 *(to-300.0)/(xx(2)-300.0)**2
265 IF(xx(1).lt.0.0)
THEN
267 print *,
' ROCBURN_ZN: rank=',g_zn%rank
268 print *,
' rb negative xx(1)=',xx(1)
273 IF(abs(e(1)).LT.tol .AND. abs(e(2)).LT.tol)
THEN
280 xreac=2.0*g_zn%alfac*g_zn%R*ts/rb/g_zn%Ec
281 fr=dexp(-xreac*g_zn%Ka)
282 tf=(qr/xx(1)+g_zn%Qc+g_zn%Qg)/g_zn%C+to
289 xreac=xcond*g_zn%R*ts*2.0/g_zn%Ec
290 fr=dexp(-xreac*g_zn%Ka)
291 frj=fr*qr/rhoc/rb/g_zn%C/(ts-to)/(1.-g_zn%Ka*xcond)
293 tn(
i)=to+(ts-to)*((1.0-frj)* &
294 dexp(g_zn%x(
i)/xcond)+frj*exp(g_zn%x(
i)*g_zn%Ka))
297 IF(abs(tn(g_zn%nx)-to)/to .gt. 0.001)
THEN
299 WRITE(*,*)
' ROCBURN: rank=',g_zn%rank
300 WRITE(*,*)
' ROCBURN: Error: xmax' &
302 WRITE(*,*)
' ROCBURN: To boundary' &
303 ,
' condition not satisfied'
304 CALL mpi_abort( mpi_comm_world, -1)
319 print *,
' ROCBURN_ZN: rank=',g_zn%rank
320 print *,
' ROCBURN_ZN: Error-steady state ZN' &
321 ,
' in ignition_combustion'
322 print *,
' ROCBURN_ZN: Maximum # of ',g_zn%itermax &
323 ,
' iterations exceeded'
324 CALL mpi_abort( mpi_comm_world, -1)
332 IF(g_zn%Model_combustion == 3)
THEN
342 rb=g_zn%a_p*p**g_zn%n_p
350 WRITE(*,*)
' ROCBURN_ZN: rank=',g_zn%rank
351 WRITE(*,*)
' ROCBURN_ZN: Error-ssWSB:'
352 WRITE(*,*)
' No appropriate combustion model'
353 WRITE(*,*)
' ROCBURN_ZN: Model_combustion=', g_zn%Model_combustion
354 CALL mpi_abort( mpi_comm_world, -1)
381 REAL(DBL) ::
x(2),
j(2,2),e(2),detj,delx(2),dum
384 detj=
j(1,1)*
j(2,2)-
j(2,1)*
j(1,2)
387 write(*,*)
'ROCBUNR_ZN Error: singular matrix encountered-could not invert'
404 delx(
i)=
j(
i,1)*e(1)+
j(
i,2)*e(2)
subroutine zn_sswsb(G_ZN, P, qr, To, rhoc, rb, Ts, Tf, fr, Tn)
subroutine newton(x, J, e)