• Non ci sono risultati.

Subroutine break per iniettore pintle APPENDICE A

N/A
N/A
Protected

Academic year: 2021

Condividi "Subroutine break per iniettore pintle APPENDICE A"

Copied!
15
0
0

Testo completo

(1)

APPENDICE A

Subroutine break per iniettore pintle

subroutine break c c =================================================================== === c

c spray droplet aerodynamic breakup, using the TAB (Taylor Analogy c Breakup) model. this model is based upon a taylor analogy

c between an oscillating and distorting droplet and a spring-mass c system. c c =================================================================== === c include 'comkiva.i' c c <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>< c data distant / 1.5 / data alfa /0.750/ do 70 n=1,np distance=sqrt((xp(n)-xinj(1))**2+(yp(n)-yinj(1))**2 & +(zp(n)-zinj(1))**2) vtot=sqrt(up(n)**2+vp(n)**2+wp(n)**2) distance=distance*cos(alfa) c ================================================= if(distance.lt.distant)then

(2)

discri(n)=1.0 goto 70 endif if(discri(n).eq.1.0)then rdrop=radp(n) rdrop=0.0017 partn(n)=partn(n)*rdrop**3/radp(n)**3 discri(n)=0.0 c ******************ricalcolo velocità******************** urelx=up(n)-(u(imom)+utrb(n)) urely=vp(n)-(v(imom)+vtrb(n)) urelz=wp(n)-(w(imom)+wtrb(n)) rrelvl=urelx/(relvel(n)**2+1.e-20) v1x=1.0-rrelvl*urelx v1y=0.0-rrelvl*urely v1z=0.0-rrelvl*urelz

if(v1x.eq.0.0 .and. v1y.eq.0.0 .and. v1z.eq.0.0) v1y=1.0 rv1=1.0/sqrt(v1x**2+v1y**2+v1z**2) en1x=v1x*rv1 en1y=v1y*rv1 en1z=v1z*rv1 v2x=urely*en1z-urelz*en1y v2y=urelz*en1x-urelx*en1z v2z=urelx*en1y-urely*en1x

if(urelx.eq.0.0 .and. urely.eq.0.0 .and. urelz.eq.0.0) then v2x=0.0 v2y=1.0 v2z=0.0 endif rv2=1.0/sqrt(v2x**2+v2y**2+v2z**2) en2x=v2x*rv2 en2y=v2y*rv2 en2z=v2z*rv2 delv=400.0

(3)

thv=pi2*fran(0.0) costhv=cos(thv) sinthv=sin(thv) up(n)=up(n)+delv*(costhv*en1x+sinthv*en2x) vp(n)=vp(n)+delv*(costhv*en1y+sinthv*en2y) wp(n)=wp(n)+delv*(costhv*en1z+sinthv*en2z) c **************************************** goto 70 endif c ======================================== imom=i4mom(n) tdrop=tp(n)

if(imom.gt.999999 .or. tdrop.ge.tcrit) go to 70 relvel(n)=sqrt((u(imom)+utrb(n)-up(n))**2 & +(v(imom)+vtrb(n)-vp(n))**2 & +(w(imom)+wtrb(n)-wp(n))**2) if(relvel(n).eq.0.0)goto 70

c +++

c +++ 1st, calculate surface tension, droplet weber number, c +++ oscillation frequency (omega), and viscous damping term c +++ for oscillations (t sub d)

c +++ tb=tdrop*0.1 itb=tb fr=tb-itb surten=fr*surften(itb+2)+(1.0-fr)*surften(itb+1) surten=max(surten,1.e-6) i4=i4p(n) rdrop=radp(n) weber=ro(i4)*relvel(n)**2*rdrop/surten viscp=fr*visliq(itb+2)+(1.0-fr)*visliq(itb+1) viscp=max(viscp,1.e-10) rtd=0.5*csubmu*viscp/(rhop*rdrop**2) omsq=csubk*surten/(rhop*rdrop**3)-rtd**2 if(omsq.le.0.0)goto 50

(4)

om=sqrt(omsq) rom=1.0/om webte=cfocbck*weber yweb1=y0p(n)-webte yweb2=rom*y0pdot(n) c +++

c +++ 2nd, calculate amplitude of oscillation and see if c +++ breakup is possible c +++ asq=yweb1**2+yweb2**2 a=sqrt(asq) if(a+webte.le.1.0)goto 60 c +++

c +++ breakup is possible, and will occur if breakup time falls c +++ within current cycle, so 3rd, calculate breakup time t sub b c +++ recipa=1.0/a phicos=min(yweb1*recipa,1.0) phicos=max(phicos,-1.0) phite=acos(phicos) quad=-yweb2*recipa phi=phite if(quad.lt.0.0) phi=pi2-phite tsubb=t if(abs(y0p(n)).ge.1.0)goto 20 coste=1.0

if((webte-a.lt.-1.0 .and. y0pdot(n).lt.0.0)) coste=-1.0 theta=acos((coste-webte)*recipa) if(theta.ge.phi)goto 10 if(pi2-theta.ge.phi) theta=-theta theta=pi2+theta 10 tsubb=t+(theta-phi)*rom if(t+dt.lt.tsubb)goto 60 c +++

(5)

c +++ a) calculate new radius that conserves energy, and c +++ new droplet number that conserves mass: c +++ y0p(n)=1.0 y0pdot(n)=-a*om*sin(om*(tsubb-t)+phi) c write(*,*)'faccio breakup' c write(12,*)'faccio breakup' 20 smrb=rdrop/(1.0+4.0*third*y0p(n)**2 & +rhop*rdrop**3/surten*0.125*y0pdot(n)**2) c +++

c +++ aldo: il frammento di programma che segue è stato modificato c +++ cercando di ottenere una distribuzione di gocce più

c +++ rispondente alle attese (ho provato con 20<m<70)! c +++ ======== inizio ======== c +++ xx=fran(0.0) c +++ do 30 m=1,100 c +++ if(rdinj(m).gt.xx) go to 40 c +++ 30 continue c +++ 40 radp(n)=min(0.04*m*smrb,rdrop) c +++ ========= fine ========= c +++ c write(12,*)'smrb',smrb c write(*,*)'smrb',smrb radp(n)=min(smrb,rdrop)

c write(12,*)'raggio dopo breakup',radp(n) c write(*,*)'raggio dopo breakup',radp(n) radpp(n)=radp(n)

partn(n)=partn(n)*rdrop**3/radp(n)**3 c +++

c +++ b) change drop velocity. here, v1 is a vector orthogonal c +++ to urel, n1 is a unit vector in direction of v1, v2 c +++ is a 2nd vector orthogonal to urel and n1, and n2 is c +++ a unit vector in direction of v2

(6)

25 urelx=up(n)-(u(imom)+utrb(n)) urely=vp(n)-(v(imom)+vtrb(n)) urelz=wp(n)-(w(imom)+wtrb(n)) rrelvl=urelx/(relvel(n)**2+1.e-20) v1x=1.0-rrelvl*urelx v1y=0.0-rrelvl*urely v1z=0.0-rrelvl*urelz

if(v1x.eq.0.0 .and. v1y.eq.0.0 .and. v1z.eq.0.0) v1y=1.0 rv1=1.0/sqrt(v1x**2+v1y**2+v1z**2) en1x=v1x*rv1 en1y=v1y*rv1 en1z=v1z*rv1 v2x=urely*en1z-urelz*en1y v2y=urelz*en1x-urelx*en1z v2z=urelx*en1y-urely*en1x

if(urelx.eq.0.0 .and. urely.eq.0.0 .and. urelz.eq.0.0) then v2x=0.0 v2y=1.0 v2z=0.0 endif rv2=1.0/sqrt(v2x**2+v2y**2+v2z**2) en2x=v2x*rv2 en2y=v2y*rv2 en2z=v2z*rv2 c +++

c +++ to determine velocity direction, increment normal to drop path. c +++ delv is magnitude of velocity change

c +++ delv=0.5*rdrop*y0pdot(n) thv=pi2*fran(0.0) costhv=cos(thv) sinthv=sin(thv) up(n)=up(n)+delv*(costhv*en1x+sinthv*en2x) vp(n)=vp(n)+delv*(costhv*en1y+sinthv*en2y) wp(n)=wp(n)+delv*(costhv*en1z+sinthv*en2z)

(7)

relvel(n)=sqrt((u(imom)+utrb(n)-up(n))**2 & +(v(imom)+vtrb(n)-vp(n))**2 & +(w(imom)+wtrb(n)-wp(n))**2) c +++

c +++ c) reset droplet distortion parameters to zero c +++

50 y0p(n)=0.0 y0pdot(n)=0.0 go to 70 c +++

c +++ particle does not break up this cycle, so update its c +++ distortion parameters c +++ 60 cosodt=cos(om*dt) sinodt=sin(om*dt) ex=exp(-dt*rtd) yweb2=rom*(y0pdot(n)+yweb1*rtd) y0p(n)=webte+ex*(yweb1*cosodt+yweb2*sinodt) y0pdot(n)=(webte-y0p(n))*rtd+ex*om*(yweb2*cosodt-yweb1*sinodt) 70 continue return end

APPENDICE B

(8)

Subroutine break per iniettore swirl

subroutine break c c =================================================================== c

c spray droplet aerodynamic breakup, using the TAB (Taylor Analogy c Breakup) model. this model is based upon a taylor analogy

c between an oscillating and distorting droplet and a spring-mass c system.

c aldo:simula liquid sheet sia per iniettori swirle cheper pintl c c =================================================================== c include 'comkiva.i' c c <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>< c data distant / 1.5 / do 70 n=1,np distance=sqrt((xp(n)-xinj(1))**2+(yp(n)-yinj(1))**2 & +(zp(n)-zinj(1))**2) vtot=sqrt(up(n)**2+vp(n)**2+wp(n)**2) alfa=0.349 distance=distance*cos(alfa) if(distance.lt.distant)then discri(n)=1.0 goto 70 endif if(discri(n).eq.1.0)then rdrop=radp(n)

(9)

if(n.eq.1)write(*,*)'wtang,wtanz(n)',wtang,wtanz(n) teta=(atan(yp(n)/xp(n))) if((xp(n).lt.0.0).and.(yp(n).ge.0.0))teta=pi+teta if((xp(n).le.0.0).and.(yp(n).lt.0.0))teta=pi+teta if((xp(n).gt.0.0).and.(yp(n).lt.0.0))teta=2*pi+teta vass=-wp(n) vsw=vass*1.1 up(n)=-vsw*sin(teta) vp(n)=vsw*cos(teta) wp(n)=-vass rdrop=radp(n) partn(n)=partn(n)*rdrop**3/radp(n)**3 discri(n)=0.0 c ******************ricalcolo velocità******************** urelx=up(n)-(u(imom)+utrb(n)) urely=vp(n)-(v(imom)+vtrb(n)) urelz=wp(n)-(w(imom)+wtrb(n)) rrelvl=urelx/(relvel(n)**2+1.e-20) v1x=1.0-rrelvl*urelx v1y=0.0-rrelvl*urely v1z=0.0-rrelvl*urelz

If(v1x.eq.0.0 .and. v1y.eq.0.0 .and. v1z.eq.0.0) v1y=1.0 rv1=1.0/sqrt(v1x**2+v1y**2+v1z**2) en1x=v1x*rv1 en1y=v1y*rv1 en1z=v1z*rv1 v2x=urely*en1z-urelz*en1y v2y=urelz*en1x-urelx*en1z v2z=urelx*en1y-urely*en1x

if(urelx.eq.0.0 .and. urely.eq.0.0 .and. urelz.eq.0.0) then v2x=0.0

v2y=1.0 v2z=0.0 endif

(10)

en2x=v2x*rv2 en2y=v2y*rv2 en2z=v2z*rv2 delv=400.0 thv=pi2*fran(0.0) costhv=cos(thv) sinthv=sin(thv) up(n)=up(n)+delv*(costhv*en1x+sinthv*en2x) vp(n)=vp(n)+delv*(costhv*en1y+sinthv*en2y) wp(n)=wp(n)+delv*(costhv*en1z+sinthv*en2z) c **************************************** c goto 70 endif c ======================================== imom=i4mom(n) tdrop=tp(n)

if(imom.gt.999999 .or. tdrop.ge.tcrit) go to 70 relvel(n)=sqrt((u(imom)+utrb(n)-up(n))**2 & +(v(imom)+vtrb(n)-vp(n))**2 & +(w(imom)+wtrb(n)-wp(n))**2)

c if(distance.lt.2.5)write(*,*)'velocità relativa cuore',relvel(n) c if(distance.lt.2.5)write(12,*)'velocità relativa cuore',relvel(n) c if(distance.gt.2.5)write(*,*)'velocità relativa fuori',relvel(n) c if(distance.gt.2.5)write(12,*)'velocità relativa fuori',relvel(n) if(relvel(n).eq.0.0)goto 70

c +++

c +++ 1st, calculate surface tension, droplet weber number, c +++ oscillation frequency (omega), and viscous damping term c +++ for oscillations (t sub d)

c +++

tb=tdrop*0.1 itb=tb fr=tb-itb

(11)

surten=max(surten,1.e-6) i4=i4p(n) rdrop=radp(n) c write(12,*)'raggio nuovo',rdrop c write(*,*)'raggio nuovo',rdrop weber=ro(i4)*relvel(n)**2*rdrop/surten viscp=fr*visliq(itb+2)+(1.0-fr)*visliq(itb+1) viscp=max(viscp,1.e-10) rtd=0.5*csubmu*viscp/(rhop*rdrop**2) omsq=csubk*surten/(rhop*rdrop**3)-rtd**2 if(omsq.le.0.0)goto 50 om=sqrt(omsq) rom=1.0/om webte=cfocbck*weber yweb1=y0p(n)-webte yweb2=rom*y0pdot(n) c +++

c +++ 2nd, calculate amplitude of oscillation and see if c +++ breakup is possible c +++ asq=yweb1**2+yweb2**2 a=sqrt(asq) if(a+webte.le.1.0)goto 60 c +++

c +++ breakup is possible, and will occur if breakup time falls c +++ within current cycle, so 3rd, calculate breakup time t sub b c +++ recipa=1.0/a phicos=min(yweb1*recipa,1.0) phicos=max(phicos,-1.0) phite=acos(phicos) quad=-yweb2*recipa phi=phite if(quad.lt.0.0) phi=pi2-phite tsubb=t

(12)

if(abs(y0p(n)).ge.1.0)goto 20 coste=1.0

if((webte-a.lt.-1.0 .and. y0pdot(n).lt.0.0)) coste=-1.0 theta=acos((coste-webte)*recipa) if(theta.ge.phi)goto 10 if(pi2-theta.ge.phi) theta=-theta theta=pi2+theta 10 tsubb=t+(theta-phi)*rom if(t+dt.lt.tsubb)goto 60 c +++

c +++ 4th, parcel breakup -- replace old parcel with new parcel: c +++ a) calculate new radius that conserves energy, and c +++ new droplet number that conserves mass: c +++ y0p(n)=1.0 y0pdot(n)=-a*om*sin(om*(tsubb-t)+phi) c write(*,*)'faccio breakup' c write(12,*)'faccio breakup' 20 smrb=rdrop/(1.0+4.0*third*y0p(n)**2 & +rhop*rdrop**3/surten*0.125*y0pdot(n)**2) c +++

c +++ aldo: il frammento di programma che segue è stato modificato c +++ cercando di ottenere una distribuzione di gocce più

c +++ rispondente alle attese (ho provato con 20<m<70)! c +++ ======== inizio ======== c +++ xx=fran(0.0) c +++ do 30 m=1,100 c +++ if(rdinj(m).gt.xx) go to 40 c +++ 30 continue c +++ 40 radp(n)=min(0.04*m*smrb,rdrop) c +++ ========= fine ========= c +++ radp(n)=min(smrb,rdrop) radpp(n)=radp(n)

(13)

partn(n)=partn(n)*rdrop**3/radp(n)**3 c +++

c +++ b) change drop velocity. here, v1 is a vector orthogonal c +++ to urel, n1 is a unit vector in direction of v1, v2 c +++ is a 2nd vector orthogonal to urel and n1, and n2 is c +++ a unit vector in direction of v2

c +++ 25 urelx=up(n)-(u(imom)+utrb(n)) urely=vp(n)-(v(imom)+vtrb(n)) urelz=wp(n)-(w(imom)+wtrb(n)) rrelvl=urelx/(relvel(n)**2+1.e-20) v1x=1.0-rrelvl*urelx v1y=0.0-rrelvl*urely v1z=0.0-rrelvl*urelz

if(v1x.eq.0.0 .and. v1y.eq.0.0 .and. v1z.eq.0.0) v1y=1.0 rv1=1.0/sqrt(v1x**2+v1y**2+v1z**2) en1x=v1x*rv1 en1y=v1y*rv1 en1z=v1z*rv1 v2x=urely*en1z-urelz*en1y v2y=urelz*en1x-urelx*en1z v2z=urelx*en1y-urely*en1x

if(urelx.eq.0.0 .and. urely.eq.0.0 .and. urelz.eq.0.0) then v2x=0.0 v2y=1.0 v2z=0.0 endif rv2=1.0/sqrt(v2x**2+v2y**2+v2z**2) en2x=v2x*rv2 en2y=v2y*rv2 en2z=v2z*rv2 c +++

c +++ to determine velocity direction, increment normal to drop path. c +++ delv is magnitude of velocity change

(14)

delv=0.5*rdrop*y0pdot(n) thv=pi2*fran(0.0) costhv=cos(thv) sinthv=sin(thv) up(n)=up(n)+delv*(costhv*en1x+sinthv*en2x) vp(n)=vp(n)+delv*(costhv*en1y+sinthv*en2y) wp(n)=wp(n)+delv*(costhv*en1z+sinthv*en2z) relvel(n)=sqrt((u(imom)+utrb(n)-up(n))**2 & +(v(imom)+vtrb(n)-vp(n))**2 & +(w(imom)+wtrb(n)-wp(n))**2) c +++

c +++ c) reset droplet distortion parameters to zero c +++

50 y0p(n)=0.0 y0pdot(n)=0.0 go to 70 c +++

c +++ particle does not break up this cycle, so update its c +++ distortion parameters c +++ 60 cosodt=cos(om*dt) sinodt=sin(om*dt) ex=exp(-dt*rtd) yweb2=rom*(y0pdot(n)+yweb1*rtd) y0p(n)=webte+ex*(yweb1*cosodt+yweb2*sinodt) y0pdot(n)=(webte-y0p(n))*rtd+ex*om*(yweb2*cosodt-yweb1*sinodt) 70 continue return end

APPENDICE C

(15)

Altri modelli utilizzati nelle simulazioni

Modello di turbolenza

Si è fatto uso di una variante del modello di turbolenza k-ε: la teoria RNG, implementata in KIVA da Han e Reitz. Questo modello di turbolenza tiene conto dell’effetto della compressibilità del gas, il quale sappiamo essere caratteristica non trascurabile dei flussi tipicamente presenti all’interno del motore.

Modello di Impingement e coalescenza

Il fenomeno dell’impiengement è di fondamentale importanza nei motori GDI. Per trattarlo al meglio si è fatto uso del modello Nauber-Reitz, che è in grado di considerare le possibili situazioni di interazione liquido-parete, cioè: il caso di una goccia liquida che colpisce una superficie e vi rimane fino all’evaporazione, oppure il caso di una goccia che ancora colpisce la superficie, ma ne viene riflessa con un certo angolo. La scelta è realizzata in funzione del numero di Weber.

Modello di evaporazione

Si è fatto uso del modello di evaporazione implementato nativamente nel KIVA e descritto da Amsden in [19].

Riferimenti

Documenti correlati

Questa seconda evenienza è da considerare oggi di gran lunga la più sfavorevole per l’odontoiatra in quanto la presenza di dolore durante un intervento è un elemento di

Fissato A, esiste quindi un unico valore di Z 0 che corrisponde ad un isobaro stabile (vedi fig. La figura 3.3 a) mostra che, poichè due nuclei contigui sulla stessa

In particolare il Bells Beach è un prodotto altamente innovativo, di gamma molto elevata, prodotto con macchinari ad alta tecnologia, adatto ai professionisti e la cui diffusione

apprendere ad abitare meglio il mondo SPAzIo spazi flessibili superfici ampie Centro di arte contemporanea riqualificazione ex- mulino solo collezioni temporaneee FuNzIoNI nuovi

e può colpire i bambini nel primo anno di vita. Le cause sono ancora sconosciute ma sono ben conosciuti

Sudden Infant Death Syndrome SIDS este moartea neprevazuta a sugarului numita si moarte în leagan. Poate lovi copiii în primul an

Come detto in precedenza le istruzioni PUSH e POP non sono vere e proprio istruzioni che appartengono al set del PD32, bensì sono.. istruzioni che il compilatore traduce in

L’istruzione JSR inserisce (PUSH) in cima allo stack il valore del PC, ovvero l’indirizzo di ritorno della subroutine.