def velocity(current_data): """Compute velocity from strain and momentum""" from stegoton import setaux aux = setaux(current_data.x, rhoB=4, KB=4) velocity = current_data.q[1, :] / aux[0, :] return velocity
def stress(current_data): """Compute stress from strain and momentum""" from stegoton import setaux from clawpack.riemann.nonlinear_elasticity_1D_py import sigma aux=setaux(current_data.x) epsilon = current_data.q[0,:] stress = sigma(epsilon,aux[1,:]) return stress
def setup(use_petsc=0,kernel_language='Fortran',solver_type='classic',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 riemann if use_petsc: import clawpack.petclaw as pyclaw else: from clawpack import pyclaw if kernel_language=='Python': rs = riemann.nonlinear_elasticity_1D_py.nonlinear_elasticity_1D elif kernel_language=='Fortran': rs = riemann.nonlinear_elasticity_fwave_1D if solver_type=='sharpclaw': solver = pyclaw.SharpClawSolver1D(rs) solver.char_decomp=0 else: solver = pyclaw.ClawSolver1D(rs) solver.kernel_language = kernel_language 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_upper xlower=0.0; xupper=600.0 cellsperlayer=6; mx=int(round(xupper-xlower))*cellsperlayer x = pyclaw.Dimension('x',xlower,xupper,mx) domain = pyclaw.Domain(x) state = pyclaw.State(domain,solver.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'] = 250.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) qinit(state,ic=2,a2=1.0,xupper=xupper) tfinal=500.; num_output_times = 10; solver.max_steps = 5000000 solver.fwave = True solver.before_step = b4step solver.user_bc_lower=moving_wall_bc solver.user_bc_upper=zero_bc claw = pyclaw.Controller() claw.keep_copy = False claw.output_style = 1 claw.num_output_times = num_output_times claw.tfinal = tfinal claw.solution = pyclaw.Solution(state,domain) claw.solver = solver return claw
def velocity(current_data): """Compute velocity from strain and momentum""" from stegoton import setaux aux=setaux(current_data.x,rhoB=4,KB=4) velocity = current_data.q[1,:]/aux[0,:] return velocity
def setup(use_petsc=0, kernel_language='Fortran', solver_type='classic', outdir='./_output'): from clawpack import riemann if use_petsc: import clawpack.petclaw as pyclaw else: from clawpack import pyclaw if kernel_language == 'Python': rs = riemann.nonlinear_elasticity_1D_py.nonlinear_elasticity_1D elif kernel_language == 'Fortran': rs = riemann.nonlinear_elasticity_fwave_1D if solver_type == 'sharpclaw': solver = pyclaw.SharpClawSolver1D(rs) solver.char_decomp = 0 else: solver = pyclaw.ClawSolver1D(rs) solver.kernel_language = kernel_language solver.bc_lower[0] = pyclaw.BC.custom solver.bc_upper[0] = pyclaw.BC.extrap #Use the same BCs for the aux array solver.aux_bc_lower[0] = pyclaw.BC.extrap solver.aux_bc_upper[0] = pyclaw.BC.extrap xlower = 0.0 xupper = 300.0 cells_per_layer = 12 mx = int(round(xupper - xlower)) * cells_per_layer x = pyclaw.Dimension(xlower, xupper, mx, name='x') domain = pyclaw.Domain(x) state = pyclaw.State(domain, solver.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.1 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'] = 999999999.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) qinit(state, ic=1, a2=1.0, xupper=xupper) tfinal = 500. num_output_times = 20 solver.max_steps = 5000000 solver.fwave = True solver.before_step = b4step solver.user_bc_lower = moving_wall_bc solver.user_bc_upper = zero_bc claw = pyclaw.Controller() claw.output_style = 1 claw.num_output_times = num_output_times claw.tfinal = tfinal claw.solution = pyclaw.Solution(state, domain) claw.solver = solver claw.setplot = setplot claw.keep_copy = True return claw
def setup(use_petsc=0,kernel_language='Fortran',solver_type='classic',outdir='./_output'): from clawpack import riemann if use_petsc: import clawpack.petclaw as pyclaw else: from clawpack import pyclaw if kernel_language=='Python': rs = riemann.nonlinear_elasticity_1D_py.nonlinear_elasticity_1D elif kernel_language=='Fortran': rs = riemann.nonlinear_elasticity_fwave_1D if solver_type=='sharpclaw': solver = pyclaw.SharpClawSolver1D(rs) solver.char_decomp=0 else: solver = pyclaw.ClawSolver1D(rs) solver.kernel_language = kernel_language solver.bc_lower[0] = pyclaw.BC.custom solver.bc_upper[0] = pyclaw.BC.extrap #Use the same BCs for the aux array solver.aux_bc_lower[0] = pyclaw.BC.extrap solver.aux_bc_upper[0] = pyclaw.BC.extrap xlower=0.0; xupper=300.0 cells_per_layer=12; mx=int(round(xupper-xlower))*cells_per_layer x = pyclaw.Dimension('x',xlower,xupper,mx) domain = pyclaw.Domain(x) state = pyclaw.State(domain,solver.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.1 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'] = 999999999.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) qinit(state,ic=1,a2=1.0,xupper=xupper) tfinal=500.; num_output_times = 20; solver.max_steps = 5000000 solver.fwave = True solver.before_step = b4step solver.user_bc_lower=moving_wall_bc solver.user_bc_upper=zero_bc claw = pyclaw.Controller() claw.output_style = 1 claw.num_output_times = num_output_times claw.tfinal = tfinal claw.solution = pyclaw.Solution(state,domain) claw.solver = solver claw.setplot = setplot claw.keep_copy = True return claw