pro setup_jet fin='glass_10x10x10' readnew,fin,h,'HEAD' readnew,fin,xin,'POS' xin[*,*] /= h.BOXSIZE Nin = TOTAL(h.npart,/int) Ndup1 = 10L Ndup2 = 30L Gap = 4L ; Gap = 0L fout='jet_100x300x10_light' Np_max = Nin * ndup1 * Ndup2 x = fltarr(3,Np_max) v = fltarr(3,Np_max) u = fltarr(Np_max) m = fltarr(Np_max) id = lindgen(Np_max) h.BOXSIZE=1 h.MASSARR[*]=0 gamma=5./3. rho = 1.0 P = 1.0 u_ini = P/(gamma-1)/rho m_ini = rho * (h.BOXSIZE^3 / 1000 / Ndup1^2) dv = -1.0 ; dv = 0 m[*] = m_ini u[*] = u_ini ; Lower 1/3 i=0L FOR ix=0,Ndup1-1 DO BEGIN FOR iy=0,Ndup1-1 DO BEGIN FOR j=0L,Nin-1 DO BEGIN x[0,i] = (xin[0,j] + ix) / Ndup1 x[1,i] = (xin[1,j] + iy) / Ndup1 x[2,i] = xin[2,j] / Ndup1 ; Bottom wall IF x[1,i] LT 1. / Ndup1 THEN BEGIN m[i] = m_ini * 4 u[i] = 1.1 * u_ini id[i] = 0 END i++ END END END ndup_thin=5L ; Upper 2/3 (hot air) FOR ix=0,ndup_thin-1 DO BEGIN FOR iy=0,2*ndup_thin-1 DO BEGIN FOR j=0L,Nin-1 DO BEGIN xx = (xin[0,j] + ix) / ndup_thin yy = (xin[1,j] + iy) / ndup_thin zz = xin[2,j] IF (yy LE Gap/float(Ndup1)) OR (yy GT Gap/float(Ndup1) AND ABS(xx-0.5) GT 0.15) THEN BEGIN x[0,i] = xx x[1,i] = yy + 1 x[2,i] = zz / Ndup1 u[i] = u_ini * Ndup1 / (ndup_thin/float(Ndup1)) m[i] = m_ini / ndup_thin i++ END END END END ; Upper 2/3 (tube walls) FOR iy=Gap,Ndup2-Ndup1-2 DO BEGIN FOR j=0L,Nin-1 DO BEGIN xx = xin[0,j] / Ndup1 + 0.35 IF xx LT 0.44 THEN BEGIN x[0,i] = xx x[1,i] = (xin[1,j] + iy) / Ndup1 + 1 x[2,i] = xin[2,j] / Ndup1 id[i] = 0 m[i] = m_ini * 4 u[i] = 1.1 * u_ini i++ END xx = xin[0,j] / Ndup1 + 0.55 IF xx GT 0.56 THEN BEGIN x[0,i] = xx x[1,i] = (xin[1,j] + iy) / Ndup1 + 1 x[2,i] = xin[2,j] / Ndup1 id[i] = 0 m[i] = m_ini * 4 u[i] = 1.1 * u_ini i++ END END END ; Upper 2/3 (top of tube, including moving part) FOR ix=0,2 DO BEGIN FOR j=0L,Nin-1 DO BEGIN x[0,i] = (xin[0,j] +ix)/ Ndup1 + 0.35 x[1,i] = xin[1,j] / Ndup1 + 2.9 x[2,i] = xin[2,j] / Ndup1 id[i] = 0 m[i] = m_ini * 8 u[i] = 2 * u_ini IF x[0,i] GT 0.44 AND x[0,i] LE 0.56 THEN v[1,i] = dv i++ END END ; Upper 2/3 (moving jet) FOR ix = 0,1 DO BEGIN FOR iz = 0,1 DO BEGIN FOR iy = 0,ROUND(2*(Ndup2-Ndup1-Gap-1) / 1.2) - 1 DO BEGIN FOR j=0L,Nin-1 DO BEGIN zz = (xin[2,j] + iz) / 2 / Ndup1 * 1.2 IF zz LT 1.0 / Ndup1 THEN BEGIN x[0,i] = (xin[0,j] + ix) / 2 / Ndup1 * 1.2 + 0.44 x[1,i] = (xin[1,j] + iy) / 2 / Ndup1 * 1.2 + 1 + Gap / float(Ndup1) x[2,i] = zz v[1,i] = dv u[i] = u_ini / 8 * 1.2^3 i++ END END END END END IF i GT Np_max THEN stop Np=i x=x[*,0:Np-1] v=v[*,0:Np-1] u=u[0:Np-1] m=m[0:Np-1] id=id[0:Np-1] h.npart[*]=0 h.npart[0]=Np h.PARTTOTAL[*]=0 h.PARTTOTAL[0]=Np ;Upper part light fluid (hotter and less dnese ; jj=WHERE(x[1,*] GT Ndup1) ; u[jj] = u_ini * 5 ; m[jj] = m_ini / 5 ;Solid bottom ; jj=WHERE(x[1,*] LT dL) ; id[jj] = 0 ; u[jj] *= 1.05 ;Solid tube on top (don't forget to make it heavy again) ; jj=WHERE((abs(x[0,*]-Ndup1/2-dL) LT dL/2 OR abs(x[0,*]-Ndup1/2+dL) LT dL/2) AND x[1,*] GT Ndup1+2*dL) ; id[jj] = 0 ; u[jj] = u_ini * 1.05 ; m[jj] = m_ini ;Moving Wall ; jj=WHERE(abs(x[0,*]-Ndup1/2) LT dL/2 AND x[1,*] GT Ndup2-dL) ; id[jj] = 0 ; u[jj] = u_ini * 1.05 ; m[jj] = m_ini ; v[1,jj] = dv ;Moving Jet ; jj=WHERE(abs(x[0,*]-Ndup1/2) LT dL/2 AND x[1,*] LE Ndup2-dL AND x[1,*] GE Ndup1 + 2*dL) ; u[jj] = u_ini / 5 ; m[jj] = m_ini * 5 ; v[1,jj] = dv ; Bring positions to [0,1] write_head,fout,h add_block,fout,x,'POS ' add_block,fout,v,'VEL ' add_block,fout,id,'ID ' add_block,fout,m,'MASS' add_block,fout,u,'U ' ; jj=where(abs(x[2,*]-0.5) LT 0.1) plot,x[0,*],x[1,*],psym=3 jj=where(id[*] EQ 0) oplot,x[0,jj],x[1,jj],psym=3,col=128 stop end