Source code for pyro.compressible_sr.problems.gresho

import sys

import numpy as np

from pyro.compressible_sr import eos
from pyro.mesh import patch
from pyro.util import msg


[docs] def init_data(my_data, rp): """ initialize the Gresho vortex problem """ msg.bold("initializing the Gresho vortex problem...") # make sure that we are passed a valid patch object if not isinstance(my_data, patch.CellCenterData2d): print("ErrrrOrr: patch invalid in bubble.py") print(my_data.__class__) sys.exit() # get the density and velocities dens = 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") dens_base = rp.get_param("gresho.dens_base") rr = rp.get_param("gresho.r") u0 = rp.get_param("gresho.u0") p0 = rp.get_param("gresho.p0") # initialize the components -- we'll get a psure too # but that is used only to initialize the base state xmom[:, :] = 0.0 ymom[:, :] = 0.0 # set the density to be stratified in the y-direction myg = my_data.grid pres = myg.scratch_array() dens[:, :] = dens_base pres[:, :] = p0 x_centre = 0.5 * (myg.x[0] + myg.x[-1]) y_centre = 0.5 * (myg.y[0] + myg.y[-1]) rad = np.sqrt((myg.x2d - x_centre)**2 + (myg.y2d - y_centre)**2) pres[rad <= rr] += 0.5 * (u0 * rad[rad <= rr]/rr)**2 pres[(rad > rr) & (rad <= 2*rr)] += u0**2 * \ (0.5 * (rad[(rad > rr) & (rad <= 2*rr)]/rr)**2 + 4 * (1 - rad[(rad > rr) & (rad <= 2*rr)]/rr + np.log(rad[(rad > rr) & (rad <= 2*rr)]/rr))) pres[rad > 2*rr] += u0**2 * (4 * np.log(2) - 2) # print(p[rad > 2*rr]) # uphi = np.zeros_like(pres) uphi[rad <= rr] = u0 * rad[rad <= rr]/rr uphi[(rad > rr) & (rad <= 2*rr)] = u0 * (2 - rad[(rad > rr) & (rad <= 2*rr)]/rr) xmom[:, :] = -uphi[:, :] * (myg.y2d - y_centre) / rad[:, :] ymom[:, :] = uphi[:, :] * (myg.x2d - x_centre) / rad[:, :] # rhoe # enerad[:, :] = p[:, :]/(gamma - 1.0) + \ # 0.5*(xmom[:, :]**2 + ymom[:, :]**2)/dens[:, :] # dens[:, :] = p[:, :]/(eint[:, :]*(gamma - 1.0)) rhoh = eos.rhoh_from_rho_p(gamma, dens, pres) w_lor = 1./np.sqrt(1. - xmom**2 - ymom**2) dens[:, :] *= w_lor xmom[:, :] *= rhoh*w_lor**2 ymom[:, :] *= rhoh*w_lor**2 ener[:, :] = rhoh*w_lor**2 - pres - dens
# print(ymom[5:-5, 5:-5]) # exit()
[docs] def finalize(): """ print out any information to the userad at the end of the run """