def get_system_from_options(options_file=None, boundary_grid=None, block=None, velocity_name='Velocity', dist=None): """Derive particle system from options file.""" reader = Options.OptionsReader(options_file) if boundary_grid is None: mesh = IO.GmshMesh() mesh.read(reader.get_mesh_filename()) boundary_grid = IO.make_boundary_from_msh(mesh) boundary = IO.BoundaryData(bnd=boundary_grid, outlet_ids=reader.get_outlet_ids(), inlets=reader.get_inlets(), dist=dist) if block is None: system = System(boundary, base_name=reader.get_name(), gravity=reader.get_gravity(), omega=reader.get_rotation()[0], velocity_name=velocity_name) else: system = System(boundary, block=block, gravity=reader.get_gravity(), omega=reader.get_rotation()[0], velocity_name=velocity_name) return system
def test_gyre_collision(): """Regression test for Mclaury coefficient""" bndg = IO.BoundaryData('particle_model/tests/data/gyre_boundary.vtu') system = System.System(bndg, coeff=1.0, temporal_cache=temp_cache('gyre_0.vtu')) from math import pi pos = numpy.array((0.8, 0.45, 0.0)) vel = numpy.array((2.0 * pi, 0.0, 0.0)) part = Particles.Particle((pos, vel), delta_t=0.001, parameters=PAR1, system=system) for i in range(100): del i part.update(method="AdamsBashforth2") assert part.pos[0] < 1.0 assert part.pos[1] < 1.0 assert part.pos[0] > 0.0 assert part.pos[1] > 0.0 assert len(part.collisions) == 1 assert part.collisions[0].pos[0] == 1.0 assert abs(Collision.mclaury_mass_coeff(part.collisions[0]) - 16.444037345317486) < 1.0e-8
def test_stokes_terminal_velocity(): """Test stokes terminal""" bndc = IO.BoundaryData('particle_model/tests/data/boundary_circle.vtu') system = System.System(bndc, base_name='particle_model/tests/data/circle', gravity=numpy.array((0.0, -1.0, 0.0)), rho=0.0, viscosity=1.0) diameter = 1e-3 delta_t = 1.0e-8 par = ParticleBase.PhysicalParticle(diameter=diameter, drag=DragModels.stokes_drag, rho=1.0) pos = numpy.zeros((1, 3)) vel = numpy.zeros((1, 3)) bucket = Particles.ParticleBucket(pos, vel, 0.0, delta_t=delta_t, parameters=par, system=system) bucket.run(100*delta_t, write=False, method="RungeKutta4") assert abs(bucket.time - 100*delta_t) < 1.0e-8 assert all(abs(bucket.particles[0].vel - numpy.array((0, -1.0/18./system.viscosity*par.diameter**2, 0))) < 1.e-8)
def get_system_from_reader(reader, boundary_grid=None): """Derive system from options reader.""" if boundary_grid is None: mesh = IO.GmshMesh() mesh.read(reader.get_mesh_filename()) boundary_grid = IO.make_boundary_from_msh(mesh) boundary = IO.BoundaryData(bnd=boundary_grid) system = System(boundary, base_name=reader.get_name(), gravity=reader.get_gravity(), omega=reader.get_rotation()[0]) return system
def test_particle_bucket_step_do_nothing(): """ Test initializing a full particle bucket.""" from numpy import zeros bndc = IO.BoundaryData('particle_model/tests/data/boundary_circle.vtu') system = System.System(bndc, base_name='particle_model/tests/data/circle') num = 1 pres = zeros((num, 3)) vel = zeros((num, 3)) bucket = Particles.ParticleBucket(pres, vel, 0.0, delta_t=0.5, system=system) bucket.run(5.0, write=False) assert bucket.time == 5.0 assert all(bucket.particles[0].pos == 0.0) assert all(bucket.particles[0].vel == 0.0)
"""Factory function to mock a temporal cache.""" del time reader = vtk.vtkXMLUnstructuredGridReader() reader.SetFileName(self.ldir+'/'+self.fname) reader.Update() locator = vtk.vtkCellLocator() locator.SetDataSet(reader.GetOutput()) locator.BuildLocator() return ([[0.0, self.fname, reader.GetOutput(), locator], [1.0, self.fname, reader.GetOutput(), locator]], 0.0, [['Velocity', 'Pressure'], ['Velocity', 'Pressure']]) BOUNDARY = IO.BoundaryData('particle_model/tests/data/rightward_boundary.vtu') BOUNDARY3D = IO.BoundaryData('particle_model/tests/data/cube_boundary.vtu') SYSTEM = System.System(BOUNDARY, coeff=1.0, temporal_cache=temp_cache(), rho=1.0e3, ) SYSTEM3D = System.System(BOUNDARY3D, coeff=1.0, temporal_cache=temp_cache('cube_0.vtu')) MESH = IO.GmshMesh() MESH.read('particle_model/tests/data/Structured.msh') MESH3D = IO.GmshMesh() MESH3D.read('particle_model/tests/data/Structured_cube.msh') PAR0 = ParticleBase.PhysicalParticle(diameter=1.0e32,rho=1.0) PAR1 = ParticleBase.PhysicalParticle(diameter=100.0e-4,rho=1.0e3) def test_tests():