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
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
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
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