def test_all_config(self): efconf = Config(TimeGridConf(200, 20, 2), SpatialMeshConf((5, 5, 5), (.1, .1, .1)), sources=[ParticleSourceConf('a', Box()), ParticleSourceConf('c', Cylinder()), ParticleSourceConf('d', Tube())], inner_regions=[InnerRegionConf('1', Box(), 1), InnerRegionConf('2', Sphere(), -2), InnerRegionConf('3', Cylinder(), 0), InnerRegionConf('4', Tube(), 4)], output_file=OutputFileConf(), boundary_conditions=BoundaryConditionsConf(-2.7), particle_interaction_model=ParticleInteractionModelConf('binary'), external_fields=[ExternalFieldUniformConf('x', 'electric', (-2, -2, 1)), ExternalFieldExpressionConf('y', 'magnetic', ('0', '0', '3*x + sqrt(y) - z**2'))]) parser = ConfigParser() parser.read_string(efconf.export_to_string()) sim = Config.from_configparser(parser).make() assert sim.time_grid == TimeGrid(200, 2, 20) assert sim.spat_mesh == SpatialMesh.do_init((5, 5, 5), (.1, .1, .1), BoundaryConditionsConf(-2.7)) assert sim.inner_regions == [InnerRegion('1', Box(), 1), InnerRegion('2', Sphere(), -2), InnerRegion('3', Cylinder(), 0), InnerRegion('4', Tube(), 4)] assert type(sim._field_solver) == FieldSolver assert sim.particle_sources == [ParticleSourceConf('a', Box()).make(), ParticleSourceConf('c', Cylinder()).make(), ParticleSourceConf('d', Tube()).make()] assert sim.electric_fields == [ExternalFieldUniform('x', 'electric', np.array((-2, -2, 1)))] assert sim.magnetic_fields == [ExternalFieldExpression('y', 'magnetic', '0', '0', '3*x + sqrt(y) - z**2')] assert sim.particle_interaction_model == ParticleInteractionModel("binary") assert sim._output_filename_prefix == "out_" assert sim._output_filename_suffix == ".h5"
def test_all_config(self, backend): efconf = Config( TimeGridConf(200, 20, 2), SpatialMeshConf((5, 5, 5), (.1, .1, .1)), sources=[ ParticleSourceConf('a', Box()), ParticleSourceConf('c', Cylinder()), ParticleSourceConf('d', Tube(start=(0, 0, 0), end=(0, 0, 1))) ], inner_regions=[ InnerRegionConf('1', Box(), 1), InnerRegionConf('2', Sphere(), -2), InnerRegionConf('3', Cylinder(), 0), InnerRegionConf('4', Tube(), 4) ], output_file=OutputFileConf(), boundary_conditions=BoundaryConditionsConf(-2.7), particle_interaction_model=ParticleInteractionModelConf('binary'), external_fields=[ ExternalElectricFieldUniformConf('x', (-2, -2, 1)), ExternalMagneticFieldExpressionConf( 'y', ('0', '0', '3*x + sqrt(y) - z**2')) ]) parser = ConfigParser() parser.read_string(efconf.export_to_string()) conf = Config.from_configparser(parser) sim = conf.make() assert_dataclass_eq(sim.time_grid, TimeGrid(200, 2, 20)) assert_dataclass_eq(sim.mesh, MeshGrid(5, 51)) assert_dataclass_eq( sim.electric_field, FieldOnGrid('spatial_mesh', 'electric', self.Array(sim.mesh, 3))) assert_dataclass_eq(sim.charge_density, self.Array(sim.mesh)) expected = np.full((51, 51, 51), -2.7) expected[1:-1, 1:-1, 1:-1] = 0 assert_dataclass_eq(sim.potential, self.Array(sim.mesh, (), expected)) _assert_value_eq(sim.inner_regions, [ InnerRegion('1', Box(), 1), InnerRegion('2', Sphere(), -2), InnerRegion('3', Cylinder(), 0), InnerRegion('4', Tube(), 4) ]) _assert_value_eq(sim.particle_sources, [ ParticleSourceConf('a', Box()).make(), ParticleSourceConf('c', Cylinder()).make(), ParticleSourceConf('d', Tube(start=(0, 0, 0), end=(0, 0, 1))).make() ]) assert_dataclass_eq( sim.electric_fields, FieldUniform('x', 'electric', np.array((-2, -2, 1)))) assert_dataclass_eq( sim.magnetic_fields, FieldExpression('y', 'magnetic', '0', '0', '3*x + sqrt(y) - z**2')) assert sim.particle_interaction_model == Model.binary
def test_read_conf(): p = ConfigParser() c = Config(output_file=OutputFileConf("conf-prefix", "conf-suffix")) p.read_string(c.export_to_string()) assert_dataclass_eq(read_conf(p, None, None, 'cpp'), c) assert_dataclass_eq(read_conf(p, 'prefix2', None, 'cpp'), Config(output_file=OutputFileConf("prefix2", "conf-suffix"))) assert_dataclass_eq(read_conf(p, 'prefix3', 'suffix3', 'cpp'), Config(output_file=OutputFileConf("prefix3", "suffix3"))) assert_dataclass_eq(read_conf(p, None, 'suffix4', 'cpp'), Config(output_file=OutputFileConf("conf-prefix", "suffix4")))
def test_init_from_config(self): efconf = Config() parser = ConfigParser() parser.read_string(efconf.export_to_string()) sim = Config.from_configparser(parser).make() assert sim.time_grid == TimeGrid(100, 1, 10) assert sim.spat_mesh == SpatialMesh.do_init((10, 10, 10), (1, 1, 1), BoundaryConditionsConf(0)) assert sim.inner_regions == [] assert type(sim._field_solver) == FieldSolver assert sim.particle_sources == [] assert sim.electric_fields == [] assert sim.magnetic_fields == [] assert sim.particle_interaction_model == ParticleInteractionModel("PIC") assert sim._output_filename_prefix == "out_" assert sim._output_filename_suffix == ".h5"
def test_init_from_config(self, backend): efconf = Config() parser = ConfigParser() parser.read_string(efconf.export_to_string()) sim = Config.from_configparser(parser).make() assert_dataclass_eq(sim.time_grid, TimeGrid(100, 1, 10)) g = MeshGrid(10, 11) assert_dataclass_eq(sim.mesh, g) assert_dataclass_eq(sim.potential, self.Array(g)) assert_dataclass_eq(sim.charge_density, self.Array(g)) assert_dataclass_eq( sim.electric_field, FieldOnGrid('spatial_mesh', 'electric', self.Array(g, 3))) assert sim.inner_regions == [] assert sim.particle_sources == [] assert_dataclass_eq(sim.electric_fields, FieldZero('ZeroSum', 'electric')) assert_dataclass_eq(sim.magnetic_fields, FieldZero('ZeroSum', 'magnetic')) assert sim.particle_interaction_model == Model.PIC
def test_conf_export(self): conf = Config(sources=[ParticleSourceConf()], inner_regions=(InnerRegionConf(), )) s = conf.export_to_string() c1 = Config.from_string(s) assert_dataclass_eq(c1, conf)