def create_solver(self): kernel = Gaussian(dim=2) #kernel = WendlandQuintic(dim=2) self.wdeltap = kernel.kernel(rij=dx, h=hdx * dx) integrator = EPECIntegrator(projectile=SolidMechStep(), plate=SolidMechStep()) solver = Solver(kernel=kernel, dim=2, integrator=integrator) dt = 1e-9 tf = 8e-6 solver.set_time_step(dt) solver.set_final_time(tf) solver.set_print_freq(100) return solver
def create_solver(self): dim = 3 kernel = Gaussian(dim=dim) # kernel = WendlandQuintic(dim=dim) self.wdeltap = kernel.kernel(rij=dx, h=hdx * dx) integrator = EPECIntegrator(projectile=SolidMechStep(), plate=SolidMechStep()) dt = 5e-10 tf = 40e-7 solver = Solver(kernel=kernel, dim=dim, integrator=integrator, dt=dt, tf=tf, output_at_times=numpy.mgrid[0:40e-7:1e-7]) return solver
def get_projectile_particles(): x, y, z = numpy.mgrid[-r:r + 1e-6:dx, -r:r + 1e-6:dx, -r:r + 1e-6:dx] x = x.ravel() y = y.ravel() z = z.ravel() d = (x * x + y * y + z * z) keep = numpy.flatnonzero(d <= r * r) x = x[keep] y = y[keep] z = z[keep] x = x - (r + 2 * dx) print('%d Projectile particles' % len(x)) hf = numpy.ones_like(x) * h mf = numpy.ones_like(x) * dx * dy * dz * ro2 rhof = numpy.ones_like(x) * ro2 csf = numpy.ones_like(x) * cs2 u = numpy.ones_like(z) * v_s pa = projectile = get_particle_array(name="projectile", x=x, y=y, z=z, h=hf, m=mf, rho=rhof, cs=csf, u=u) # add requisite properties # sound speed etc. add_properties(pa, 'e') # velocity gradient properties add_properties(pa, 'v00', 'v01', 'v02', 'v10', 'v11', 'v12', 'v20', 'v21', 'v22') # artificial stress properties add_properties(pa, 'r00', 'r01', 'r02', 'r11', 'r12', 'r22') # deviatoric stress components add_properties(pa, 's00', 's01', 's02', 's11', 's12', 's22') # deviatoric stress accelerations add_properties(pa, 'as00', 'as01', 'as02', 'as11', 'as12', 'as22') # deviatoric stress initial values add_properties(pa, 's000', 's010', 's020', 's110', 's120', 's220') # standard acceleration variables add_properties(pa, 'arho', 'au', 'av', 'aw', 'ax', 'ay', 'az', 'ae') # initial values add_properties(pa, 'rho0', 'u0', 'v0', 'w0', 'x0', 'y0', 'z0', 'e0') pa.add_constant('G', G2) pa.add_constant('n', 4) kernel = Gaussian(dim=3) wdeltap = kernel.kernel(rij=dx, h=hdx * dx) pa.add_constant('wdeltap', wdeltap) # load balancing properties pa.set_lb_props(list(pa.properties.keys())) return projectile
def get_plate_particles(): gmsh.initialize() gmsh.open('t.msh') # Launch the GUI to see the results: # if '-nopopup' not in sys.argv: # gmsh.fltk.run() nodeTags, nodesCoord, parametricCoord = gmsh.model.mesh.getNodes() liquid_x = nodesCoord[1::3] liquid_y = nodesCoord[2::3] liquid_z = nodesCoord[0::3] liquid_y = liquid_y + abs(min(liquid_y)) liquid_x = liquid_x + abs(min(liquid_x)) liquid_x = liquid_x[0::5] * 1e-3 - 0.002 liquid_y = liquid_y[0::5] * 1e-3 - 0.1 liquid_z = liquid_z[0::5] * 1e-3 - 0.005 print('%d Target particles' % len(liquid_x)) hf = numpy.ones_like(liquid_x) * h mf = numpy.ones_like(liquid_x) * dx * dy * dz * ro1 rhof = numpy.ones_like(liquid_x) * ro1 csf = numpy.ones_like(liquid_x) * cs1 pa = plate = get_particle_array(name="plate", x=liquid_x, y=liquid_y, z=liquid_z, h=hf, m=mf, rho=rhof, cs=csf) # add requisite properties # sound speed etc. add_properties(pa, 'e') # velocity gradient properties add_properties(pa, 'v00', 'v01', 'v02', 'v10', 'v11', 'v12', 'v20', 'v21', 'v22') # artificial stress properties add_properties(pa, 'r00', 'r01', 'r02', 'r11', 'r12', 'r22') # deviatoric stress components add_properties(pa, 's00', 's01', 's02', 's11', 's12', 's22') # deviatoric stress accelerations add_properties(pa, 'as00', 'as01', 'as02', 'as11', 'as12', 'as22') # deviatoric stress initial values add_properties(pa, 's000', 's010', 's020', 's110', 's120', 's220') # standard acceleration variables add_properties(pa, 'arho', 'au', 'av', 'aw', 'ax', 'ay', 'az', 'ae') # initial values add_properties(pa, 'rho0', 'u0', 'v0', 'w0', 'x0', 'y0', 'z0', 'e0') pa.add_constant('G', G1) pa.add_constant('n', 4) kernel = Gaussian(dim=3) wdeltap = kernel.kernel(rij=dx, h=hdx * dx) pa.add_constant('wdeltap', wdeltap) # load balancing properties pa.set_lb_props(list(pa.properties.keys())) # removed S_00 and similar components plate.v[:] = 0.0 return plate
def get_plate_particles(): xarr = numpy.arange(0, 0.002 + dx, dx) yarr = numpy.arange(-0.020, 0.02 + dx, dx) zarr = numpy.arange(-0.02, 0.02 + dx, dx) x, y, z = numpy.mgrid[0:0.002 + dx:dx, -0.02:0.02 + dx:dx, -0.02:0.02 + dx:dx] x = x.ravel() y = y.ravel() z = z.ravel() print('%d Target particles' % len(x)) hf = numpy.ones_like(x) * h mf = numpy.ones_like(x) * dx * dy * dz * ro1 rhof = numpy.ones_like(x) * ro1 csf = numpy.ones_like(x) * cs1 pa = plate = get_particle_array(name="plate", x=x, y=y, z=z, h=hf, m=mf, rho=rhof, cs=csf) # add requisite properties # sound speed etc. add_properties(pa, 'e') # velocity gradient properties add_properties(pa, 'v00', 'v01', 'v02', 'v10', 'v11', 'v12', 'v20', 'v21', 'v22') # artificial stress properties add_properties(pa, 'r00', 'r01', 'r02', 'r11', 'r12', 'r22') # deviatoric stress components add_properties(pa, 's00', 's01', 's02', 's11', 's12', 's22') # deviatoric stress accelerations add_properties(pa, 'as00', 'as01', 'as02', 'as11', 'as12', 'as22') # deviatoric stress initial values add_properties(pa, 's000', 's010', 's020', 's110', 's120', 's220') # standard acceleration variables add_properties(pa, 'arho', 'au', 'av', 'aw', 'ax', 'ay', 'az', 'ae') # initial values add_properties(pa, 'rho0', 'u0', 'v0', 'w0', 'x0', 'y0', 'z0', 'e0') pa.add_constant('G', G1) pa.add_constant('n', 4) kernel = Gaussian(dim=3) wdeltap = kernel.kernel(rij=dx, h=hdx * dx) pa.add_constant('wdeltap', wdeltap) # load balancing properties pa.set_lb_props(list(pa.properties.keys())) # removed S_00 and similar components plate.v[:] = 0.0 return plate