def taylor_green(): tf = 10 Lx = 2 * pi Ly = 2 * pi nx = 50 ny = 50 γ = 1.4 ρ = 1 p = 100 / γ A = eye(3) MP = material_params(EOS='sg', ρ0=ρ, cv=1, γ=γ, b0=10, μ=1e-2) dX = [Lx / nx, Ly / ny] u = zeros([nx, ny, 14]) for i in range(nx): for j in range(ny): x = (i + 0.5) * dX[0] y = (j + 0.5) * dX[1] v = array([sin(x) * cos(y), -cos(x) * sin(y)]) pi = p + (cos(2 * x) + cos(2 * y)) / 4 u[i, j] = Cvec(ρ, pi, v, MP, A) print("TAYLOR-GREEN VORTEX") return u, [MP], tf, dX
def boundary_layer(): tf = 10 Lx = 1.5 Ly = 0.4 nx = 75 ny = 100 γ = 1.4 ρ = 1 p = 100 / γ v = array([1, 0, 0]) A = eye(3) MP = material_params(EOS='sg', ρ0=ρ, cv=1, γ=γ, b0=8, μ=1e-3) u = zeros([nx, ny, 14]) Q = Cvec(ρ, p, v, MP, A) for i in range(nx): for j in range(ny): u[i, j] = Q print("LAMINAR BOUNDARY LAYER") return u, [MP], tf, [Lx / nx, Ly / ny], ''
def convected_vortex(μ=1e-6, κ=1e-6, t=0): tf = 1 Lx = 10 Ly = 10 nx = 10 ny = 10 ε = 5 γ = 1.4 ρ = 1 p = 1 v = array([1, 1, 0]) J = zeros(3) dX = [Lx / nx, Ly / ny] MP = material_params(EOS='sg', ρ0=ρ, cv=2.5, γ=γ, b0=0.5, cα=1, μ=μ, κ=κ) u = zeros([nx, ny, 17]) for i in range(nx): for j in range(ny): x = (i + 0.5) * dX[0] y = (j + 0.5) * dX[1] dv, dT, dρ, dp, A = vortex(x, y, Lx / 2 + t, Ly / 2 + t, ε, γ, ρ) u[i, j] = Cvec(ρ + dρ, p + dp, v + dv, MP, A, J) print("CONVECTED ISENTROPIC VORTEX") return u, [MP], tf, dX, 'periodic'
def double_shear_layer(): tf = 1.8 Lx = 1 Ly = 1 nx = 200 ny = 200 γ = 1.4 ρ = 1 p = 100 / γ A = eye(3) MP = material_params(EOS='sg', ρ0=ρ, cv=1, γ=γ, b0=8, μ=2e-4) dX = [Lx / nx, Ly / ny] ρ_ = 30 δ = 0.05 u = zeros([nx, ny, 14]) for i in range(nx): for j in range(ny): x = (i + 0.5) * dX[0] y = (j + 0.5) * dX[1] if y > 0.75: v1 = tanh(ρ_ * (0.75 - y)) else: v1 = tanh(ρ_ * (y - 0.25)) v2 = δ * sin(2 * pi * x) v = array([v1, v2, 0]) u[i, j] = Cvec(ρ, p, v, MP, A) print("DOUBLE SHEAR LAYER") return u, [MP], tf, dX
def viscous_shock(center=0): """ 10.1016/j.jcp.2016.02.015 4.13 Viscous shock profile """ tf = 0.2 nx = 100 Lx = 1 Ms = 2 γ = 1.4 μ = 2e-2 MP = material_params(EOS='sg', ρ0=1, cv=2.5, γ=γ, b0=5, cα=5, μ=μ, Pr=0.75) dX = [Lx / nx] x = arange(-Lx / 2, Lx / 2, 1 / nx) ρ = zeros(nx) p = zeros(nx) v = zeros(nx) for i in range(nx): ρ[i], p[i], v[i] = viscous_shock_exact(x[i], Ms, MP, μ, center=center) v -= v[0] # Velocity in shock 0 u = zeros([nx, 17]) for i in range(nx): A = (ρ[i])**(1 / 3) * eye(3) J = zeros(3) u[i] = Cvec(ρ[i], p[i], array([v[i], 0, 0]), MP, A, J) return u, [MP], tf, dX, 'transitive'
def heat_conduction(isMulti=False): """ 10.1016/j.jcp.2016.02.015 4.12 Heat conduction in a gas """ tf = 1 nx = 200 Lx = 1 MPs = [ material_params(EOS='sg', ρ0=1, cv=2.5, γ=1.4, b0=1, cα=2, μ=1e-2, κ=1e-2) ] if isMulti: MPs = 2 * MPs ρL = 2 pL = 1 vL = zeros(3) ρR = 0.5 pR = 1 vR = zeros(3) dX = [Lx / nx] u = primitive_IC(nx, dX, ρL, pL, vL, ρR, pR, vR, MPs) return u, MPs, tf, dX, 'transitive'
def shock_detonation(): tf = 0.5 L = 1 nx = 400 MP = material_params('sg', ρ0=1, γ=1.4, cv=2.5, b0=1e-8, μ=1e-4, Qc=1, Kc=250, Ti=0.25, REACTION='d') ρL = 1.4 pL = 1 vL = zeros(3) AL = ρL**(1 / 3) * eye(3) λL = 0 ρR = 0.887565 pR = 0.191709 vR = array([-0.57735, 0, 0]) AR = ρR**(1 / 3) * eye(3) λR = 1 QL = Cvec(ρL, pL, vL, MP, A=AL, λ=λL) QR = Cvec(ρR, pR, vR, MP, A=AR, λ=λR) u = zeros([nx, 15]) for i in range(nx): if i < nx / 4: u[i] = QL else: u[i] = QR return u, [MP], tf, [L / nx], 'transitive'
def circular_explosion(): tf = 0.2 Lx = 2 Ly = 2 nx = 400 ny = 400 R = 0.25 * Lx MP = material_params(EOS='sg', ρ0=1, cv=2.5, γ=1.4, b0=0.5, cα=0.5, μ=1e-4, κ=1e-4) dX = [Lx / nx, Ly / ny] v = zeros([3]) J = zeros([3]) ρi = 1 pi = 1 Ai = eye(3) Qi = Cvec(ρi, pi, v, MP, Ai, J) ρo = 0.125 po = 0.1 Ao = 0.5 * eye(3) Qo = Cvec(ρo, po, v, MP, Ao, J) u = zeros([nx, ny, 17]) for i in range(nx): for j in range(ny): x = -Lx / 2 + (i + 0.5) * dX[0] y = -Ly / 2 + (j + 0.5) * dX[1] r = sqrt(x**2 + y**2) if r < R: u[i, j] = Qi else: u[i, j] = Qo print("CIRCULAR EXPLOSION") return u, [MP], tf, dX, 'transitive'
def stokes(isMulti=False): """ 10.1016/j.jcp.2016.02.015 4.3 The first problem of Stokes """ tf = 1 nx = 200 Lx = 1 γ = 1.4 μ = 1e-2 # 1e-3 # 1e-4 MPs = [ material_params(EOS='sg', ρ0=1, cv=1, γ=γ, b0=1, cα=1e-16, μ=μ, Pr=0.75) ] if isMulti: MPs = 2 * MPs ρL = 1 pL = 1 / γ vL = array([0, -0.1, 0]) ρR = 1 pR = 1 / γ vR = array([0, 0.1, 0]) dX = [Lx / nx] u = primitive_IC(nx, dX, ρL, pL, vL, ρR, pR, vR, MPs) return u, MPs, tf, dX, 'transitive'
def dΧ(xh, dt): """ returns dΧ/dx and dΧ/dt at spatial node i and temporal node j """ dxdΧ = dot(DERVALS, xh) dxdτ = dot(xh, DERVALS.T) dΧdx = 1 / dxdΧ dΧdt = -dxdτ / (dxdΧ * dt) return dΧdx, dΧdt if __name__ == "__main__": MP = material_params(EOS='sg', ρ0=1, cv=1, γ=1.4, b0=1, cα=1, μ=1e-2, Pr=0.75) """ ρL = 1 pL = 1 vL = zeros(3) AL = ρL**(1/3) * eye(3) JL = zeros(3) MPL = MP ρR = 0.1 pR = 0.1 vR = zeros(3) AR = ρR**(1/3) * eye(3)
ε = rand(3, 3) ε -= 0.5 ε *= 2 Λ = rand(3) else: ε = array([[0.62, 0.40, 1.14], [-0.28, -1.41, 0.59], [-0.19, -0.72, -1.28]]) Λ = ones(3) τ = 1.45e-9 tScale = 10 includeSources = 1 n = 50 PAR = material_params('sg', 1, γ=1.4, b0=1, τ0=τ) ### Auxiliary Functions ### def sgn(x): if x >= 0: return 1 else: return -1 def sec(x): return 1 / lim(cos(x))
from gpr.misc.objects import material_params """ SI Units """ TNT_JWL_SI = material_params(EOS='jwl', ρ0=1840, cv=815, Γ0=0.25, A=854.5e9, B=20.5e9, R1=4.6, R2=1.35, b0=2100) PBX_SG_SI = material_params(EOS='sg', ρ0=1840, γ=2.85, b0=1, μ=1e-2) C4_JWL_SI = material_params(EOS='jwl', ρ0=1601, cv=2.487e6 / 1601, Γ0=0.8938, A=7.781e13, B=-5.031e9, R1=11.3, R2=1.13, b0=1487, REACTION='i', Qc=9e9 / 1601, I=4e6, G1=1.4e-20, G2=0, a=0.0367, b=2 / 3,
from gpr.misc.objects import material_params, hyperelastic_params # TODO: convert all tests from CGS to SI """ Hyperelastic """ Cu_HYP_SI = hyperelastic_params(ρ0=8930, α=1, β=3, γ=2, cv=390, T0=300, b0=2141, c0=4651) Al_HYP_CGS = hyperelastic_params(ρ0=2.71, α=1, β=3.577, γ=2.088, cv=9e-4, T0=300, b0=3.16, c0=6.22) Cu_HYP_CGS = hyperelastic_params(ρ0=8.9, α=1, β=3, γ=2, cv=4e-4, T0=300, b0=2.1, c0=4.6) """ Other """ VAC = material_params(EOS='vac', ρ0=0)
from gpr.misc.objects import material_params """ SI Units """ Al_GRP_SI = material_params(EOS='gr', ρ0=2710, cv=900, Tref=300, c0=5037, α=1, β=3.577, γ=2.088, b0=3160, σY=0.4e9, τ0=1, n=100) Cu_SMGP_SI = material_params(EOS='smg', ρ0=8930, cv=390, c0=3939, Γ0=2, s=1.5, b0=2244, σY=9e7, τ0=1, n=100) Cu_GR_SI = material_params(EOS='gr', ρ0=8930, cv=390, Tref=300,
from gpr.misc.objects import material_params """ SI Units """ Air_SG_SI = material_params(EOS='sg', ρ0=1.18, cv=718, γ=1.4, b0=50, cα=50, μ=1.85e-5, Pr=0.714) He_SG_SI = material_params(EOS='sg', ρ0=0.163, cv=3127, γ=5 / 3, b0=1, cα=1, μ=1.99e-5, Pr=0.688) H20_SG_SI = material_params(EOS='sg', ρ0=997, cv=950, γ=4.4, pINF=6e8, b0=1, cα=1, μ=1e-3, Pr=7)