Esempio n. 1
0
def stress(current_data):
    """Compute stress from strain and momentum"""
    from stegoton import setaux
    from clawpack.riemann.rp_nonlinear_elasticity import sigma
    aux = setaux(current_data.x)
    epsilon = current_data.q[0, :]
    stress = sigma(epsilon, aux[1, :])
    return stress
Esempio n. 2
0
def stress(current_data):
    """Compute stress from strain and momentum"""
    from stegoton import setaux
    from clawpack.riemann.rp_nonlinear_elasticity import sigma 
    aux=setaux(current_data.x)
    epsilon = current_data.q[0,:]
    stress = sigma(epsilon,aux[1,:])
    return stress
Esempio n. 3
0
def stegoton(rkm, tol, iplot=0, htmlplot=0, outdir="./_output"):
    """
    Stegoton problem.
    Nonlinear elasticity in periodic medium.
    See LeVeque & Yong (2003).

    $$\\epsilon_t - u_x = 0$$
    $$\\rho(x) u_t - \\sigma(\\epsilon,x)_x = 0$$
    """

    from clawpack import pyclaw

    solver = pyclaw.SharpClawSolver1D()
    solver.time_integrator = "RK"
    solver.A = rkm.A
    solver.b = rkm.b
    solver.b_hat = rkm.bhat
    solver.c = rkm.c
    solver.error_tolerance = tol
    solver.dt_variable = True
    solver.cfl_max = 2.5
    solver.cfl_desired = 1.5
    solver.weno_order = 5

    from clawpack import riemann

    solver.rp = riemann.rp1_nonlinear_elasticity_fwave

    solver.bc_lower[0] = pyclaw.BC.periodic
    solver.bc_upper[0] = pyclaw.BC.periodic

    # Use the same BCs for the aux array
    solver.aux_bc_lower = solver.bc_lower
    solver.aux_bc_upper = solver.bc_lower

    xlower = 0.0
    xupper = 300.0
    cellsperlayer = 6
    mx = int(round(xupper - xlower)) * cellsperlayer
    x = pyclaw.Dimension("x", xlower, xupper, mx)
    domain = pyclaw.Domain(x)
    num_eqn = 2
    state = pyclaw.State(domain, num_eqn)

    # Set global parameters
    alpha = 0.5
    KA = 1.0
    KB = 4.0
    rhoA = 1.0
    rhoB = 4.0
    state.problem_data = {}
    state.problem_data["t1"] = 10.0
    state.problem_data["tw1"] = 10.0
    state.problem_data["a1"] = 0.0
    state.problem_data["alpha"] = alpha
    state.problem_data["KA"] = KA
    state.problem_data["KB"] = KB
    state.problem_data["rhoA"] = rhoA
    state.problem_data["rhoB"] = rhoB
    state.problem_data["trtime"] = 25000.0
    state.problem_data["trdone"] = False

    # Initialize q and aux
    xc = state.grid.x.centers
    state.aux = setaux(xc, rhoB, KB, rhoA, KA, alpha, xlower=xlower, xupper=xupper)

    a2 = 1.0
    sigma = a2 * np.exp(-((xc - xupper / 2.0) / 5.0) ** 2.0)
    state.q[0, :] = np.log(sigma + 1.0) / state.aux[1, :]
    state.q[1, :] = 0.0

    tfinal = 100.0
    num_output_times = 10

    solver.max_steps = 5000000
    solver.fwave = True
    solver.num_waves = 2

    solver.lim_type = 2
    solver.char_decomp = 0

    claw = pyclaw.Controller()
    claw.keep_copy = True
    claw.output_style = 1
    claw.num_output_times = num_output_times
    claw.tfinal = tfinal
    claw.solution = pyclaw.Solution(state, domain)
    claw.solver = solver

    # Solve
    status = claw.run()
    print claw.solver.status["totalsteps"]

    if htmlplot:
        pyclaw.plot.html_plot(outdir=outdir)
    if iplot:
        pyclaw.plot.interactive_plot(outdir=outdir)

    epsilon = claw.frames[-1].q[0, :]
    aux = claw.frames[1].aux
    from clawpack.riemann.rp_nonlinear_elasticity import sigma

    stress = sigma(epsilon, aux[1, :])
    dx = state.grid.delta[0]
    work = solver.status["totalsteps"]

    return stress, dx, work
Esempio n. 4
0
def stegoton(rkm, tol, iplot=0, htmlplot=0, outdir='./_output'):
    """
    Stegoton problem.
    Nonlinear elasticity in periodic medium.
    See LeVeque & Yong (2003).

    $$\\epsilon_t - u_x = 0$$
    $$\\rho(x) u_t - \\sigma(\\epsilon,x)_x = 0$$
    """

    from clawpack import pyclaw

    solver = pyclaw.SharpClawSolver1D()
    solver.time_integrator = 'RK'
    solver.A = rkm.A
    solver.b = rkm.b
    solver.b_hat = rkm.bhat
    solver.c = rkm.c
    solver.error_tolerance = tol
    solver.dt_variable = True
    solver.cfl_max = 2.5
    solver.cfl_desired = 1.5
    solver.weno_order = 5

    from clawpack import riemann
    solver.rp = riemann.rp1_nonlinear_elasticity_fwave

    solver.bc_lower[0] = pyclaw.BC.periodic
    solver.bc_upper[0] = pyclaw.BC.periodic

    #Use the same BCs for the aux array
    solver.aux_bc_lower = solver.bc_lower
    solver.aux_bc_upper = solver.bc_lower

    xlower = 0.0
    xupper = 300.0
    cellsperlayer = 6
    mx = int(round(xupper - xlower)) * cellsperlayer
    x = pyclaw.Dimension('x', xlower, xupper, mx)
    domain = pyclaw.Domain(x)
    num_eqn = 2
    state = pyclaw.State(domain, num_eqn)

    #Set global parameters
    alpha = 0.5
    KA = 1.0
    KB = 4.0
    rhoA = 1.0
    rhoB = 4.0
    state.problem_data = {}
    state.problem_data['t1'] = 10.0
    state.problem_data['tw1'] = 10.0
    state.problem_data['a1'] = 0.0
    state.problem_data['alpha'] = alpha
    state.problem_data['KA'] = KA
    state.problem_data['KB'] = KB
    state.problem_data['rhoA'] = rhoA
    state.problem_data['rhoB'] = rhoB
    state.problem_data['trtime'] = 25000.0
    state.problem_data['trdone'] = False

    #Initialize q and aux
    xc = state.grid.x.centers
    state.aux = setaux(xc,
                       rhoB,
                       KB,
                       rhoA,
                       KA,
                       alpha,
                       xlower=xlower,
                       xupper=xupper)

    a2 = 1.0
    sigma = a2 * np.exp(-((xc - xupper / 2.) / 5.)**2.)
    state.q[0, :] = np.log(sigma + 1.) / state.aux[1, :]
    state.q[1, :] = 0.

    tfinal = 100.
    num_output_times = 10

    solver.max_steps = 5000000
    solver.fwave = True
    solver.num_waves = 2

    solver.lim_type = 2
    solver.char_decomp = 0

    claw = pyclaw.Controller()
    claw.keep_copy = True
    claw.output_style = 1
    claw.num_output_times = num_output_times
    claw.tfinal = tfinal
    claw.solution = pyclaw.Solution(state, domain)
    claw.solver = solver

    # Solve
    status = claw.run()
    print claw.solver.status['totalsteps']

    if htmlplot: pyclaw.plot.html_plot(outdir=outdir)
    if iplot: pyclaw.plot.interactive_plot(outdir=outdir)

    epsilon = claw.frames[-1].q[0, :]
    aux = claw.frames[1].aux
    from clawpack.riemann.rp_nonlinear_elasticity import sigma
    stress = sigma(epsilon, aux[1, :])
    dx = state.grid.delta[0]
    work = solver.status['totalsteps']

    return stress, dx, work