Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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], ''
Ejemplo n.º 3
0
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'
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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'
Ejemplo n.º 6
0
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'
Ejemplo n.º 7
0
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'
Ejemplo n.º 8
0
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'
Ejemplo n.º 9
0
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'
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
    ε = 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))

Ejemplo n.º 12
0
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,
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
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,
Ejemplo n.º 15
0
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)