Source code for pyro.compressible_fv4.problems.rt2
"""A RT problem with two distinct modes: short wavelength on theleft and long wavelength on the right. This allows one to seehow the growth rate depends on wavenumber."""importnumpyasnpfrompyro.utilimportmsgDEFAULT_INPUTS="inputs.rt2"PROBLEM_PARAMS={"rt2.dens1":1.0,"rt2.dens2":2.0,"rt2.amp":1.0,"rt2.sigma":0.1,"rt2.p0":10.0}
[docs]definit_data(my_data,rp):""" initialize the rt problem """ifrp.get_param("driver.verbose"):msg.bold("initializing the rt problem...")# get the density, momenta, and energy as separate variablesdens=my_data.get_var("density")xmom=my_data.get_var("x-momentum")ymom=my_data.get_var("y-momentum")ener=my_data.get_var("energy")gamma=rp.get_param("eos.gamma")grav=rp.get_param("compressible.grav")dens1=rp.get_param("rt2.dens1")dens2=rp.get_param("rt2.dens2")p0=rp.get_param("rt2.p0")amp=rp.get_param("rt2.amp")sigma=rp.get_param("rt2.sigma")# initialize the components, remember, that ener here is# rho*eint + 0.5*rho*v**2, where eint is the specific# internal energy (erg/g)xmom[:,:]=0.0ymom[:,:]=0.0dens[:,:]=0.0f_l=18f_r=3# set the density to be stratified in the y-directionmyg=my_data.gridycenter=0.5*(myg.ymin+myg.ymax)p=myg.scratch_array()j=myg.jlowhilej<=myg.jhi:ifmyg.y[j]<ycenter:dens[:,j]=dens1p[:,j]=p0+dens1*grav*myg.y[j]else:dens[:,j]=dens2p[:,j]=p0+dens1*grav*ycenter+dens2*grav*(myg.y[j]-ycenter)j+=1idx_l=myg.x2d<(myg.xmax-myg.xmin)/3.0idx_r=myg.x2d>=(myg.xmax-myg.xmin)/3.0ymom[idx_l]=amp*np.sin(4.0*np.pi*f_l*myg.x2d[idx_l]/(myg.xmax-myg.xmin))*np.exp(-(myg.y2d[idx_l]-ycenter)**2/sigma**2)ymom[idx_r]=amp*np.sin(4.0*np.pi*f_r*myg.x2d[idx_r]/(myg.xmax-myg.xmin))*np.exp(-(myg.y2d[idx_r]-ycenter)**2/sigma**2)ymom*=dens# set the energy (P = cs2*dens)ener[:,:]=p[:,:]/(gamma-1.0)+ \
0.5*(xmom[:,:]**2+ymom[:,:]**2)/dens[:,:]
[docs]deffinalize():""" print out any information to the user at the end of the run """