def test_put_variable(self): """Test put_variable method """ pool = NumerrinPool() pool.put_variable(self.variablename, self.variable) self.assertEqual(pool.get_variable(self.variablename), self.variable)
def test_variable_rank(self): """Test variable_rank method """ pool = NumerrinPool() pool.put_variable(self.variablename, self.variable) self.assertEqual(pool.variable_rank(self.variablename), 2)
def test_modify_variable(self): """Test modify_variable method """ pool = NumerrinPool() pool.put_variable(self.variablename, self.variable) oldvar = pool.get_variable(self.variablename) modvar = tuple([(10.0, 10.0, 10.0) for _ in oldvar]) pool.modify_variable(self.variablename, modvar) newvar = pool.get_variable(self.variablename) self.assertNotEqual(oldvar, newvar)
def test_delete_mesh_and_variables(self): """Test delete_mesh_and_variables method """ pool = NumerrinPool() pool.import_mesh(self.mesh.name, self.mesh, self.boundaries) pool.put_variable(self.variablename, self.variable) pool.delete_mesh_and_variables(self.mesh.name) with self.assertRaises(RuntimeError): pool.get_variable(self.variablename) with self.assertRaises(RuntimeError): numerrin.meshsize(pool.ph, self.mesh.name)
class NumerrinCodeTestCase(unittest.TestCase): """Test case for NumerrinCode class""" def setUp(self): numerrin.initlocal("", "PYNUMERRIN_LICENSE", liccode) self.pool = NumerrinPool() self.code = NumerrinCode(self.pool.ph) self.codestring = "a = 10.0\n" self.errorcodestring = "a = 10/b\n" self.exceptionstring = "Exception(\"Exception\")\n" def test_parse_file(self): """Test parse_file method """ codefile = 'test.num' with open(codefile, 'w') as f: f.write(self.codestring) self.code.parse_file(codefile) os.remove(codefile) def test_parse_string(self): """Test parse_string method """ self.code.parse_string(self.codestring) with self.assertRaises(RuntimeError): self.code.parse_string(self.errorcodestring) def test_execute(self): """Test execute method """ self.code.parse_string(self.codestring) self.code.execute(1) def test_clear(self): """Test clear method """ self.code.parse_string(self.exceptionstring) with self.assertRaises(RuntimeError): self.code.execute(1) self.code.clear() self.code.execute(1) def test_generate_code(self): """Test generate_init_code and generate_code method """ CM = DataContainer() SP = DataContainer() SPExt = DataContainer() BC = DataContainer() CMExt = {} mesh_name = "Mesh" CM[CUBA.NAME] = mesh_name CMExt[CUBAExt.GE] = (CUBAExt.INCOMPRESSIBLE, CUBAExt.LAMINAR_MODEL) SP[CUBA.TIME_STEP] = 1 SP[CUBA.NUMBER_OF_TIME_STEPS] = 2 SP[CUBA.DENSITY] = 1.0 SP[CUBA.DYNAMIC_VISCOSITY] = 1.0 BC[CUBA.VELOCITY] = {'boundary0': ('fixedValue', (0.1, 0, 0))} BC[CUBA.PRESSURE] = {'boundary0': 'zeroGradient'} boundary_names = ['boundary0', 'boundary1', 'boundary2', 'boundary3'] corner_points = ((0.0, 0.0), (20.0e-3, 0.0), (20.0e-3, 1.0e-3), (0.0, 1.0e-3)) mesh_code = textwrap.dedent( """ pts={%f,%f;%f,%f;%f,%f;%f,%f} Quadmesh(pts,{%i,%i},{0,0,0,0},{1.0,1.0,-1.0,-1.0},mesh2d,domains2d) dvec[0:1]=0.0 dvec[2]=%f Extrude(mesh2d,domains2d,dvec,%i,0,0.0,%s,domains) omega->domains[0] %s->domains[6] %s->domains[4] %s=Union(domains[3],domains[5]) %s=Union(domains[1],domains[2]) """ % (corner_points[0][0], corner_points[0][1], corner_points[1][0], corner_points[1][1], corner_points[2][0], corner_points[2][1], corner_points[3][0], corner_points[3][1], 1, 1, 1.0, 1, mesh_name, mesh_name + boundary_names[0], mesh_name + boundary_names[1], mesh_name + boundary_names[2], mesh_name + boundary_names[3])) self.code.parse_string(mesh_code) self.code.execute(1) smesh, _, boundaries = self.pool.export_mesh('simmesh', mesh_name, boundary_names) nummesh = NumerrinMesh(mesh_name, smesh, self.pool) uidmap = nummesh._uuidToNumLabel boundary_faces = {} for boundary in boundaries: boundary_faces[boundary] = [] for fuid in boundaries[boundary]: boundary_faces[boundary].append(uidmap[fuid]) nummesh.pool.add_boundaries(mesh_name, boundaries, boundary_faces) nummesh._boundaries = boundaries for key in SP: self.pool.put_variable(numname[key], SP[key]) nummesh.init_point_variables(get_numerrin_solver(CMExt)) codestring = self.code.generate_init_code(CM, SP, SPExt, BC, CMExt) codestring += self.code.generate_code(CM, SP, SPExt, BC, CMExt, nummesh) self.code.parse_string(codestring) self.assertEqual(self.pool.variable_type(mesh_name), "Mesh") self.assertEqual(self.pool.variable_type(numname[CUBA.TIME_STEP]), "Integer") self.assertEqual(self.pool.variable_type(numname[CUBA.DENSITY]), "Real")
class NumerrinCodeTestCase(unittest.TestCase): """Test case for NumerrinCode class""" def setUp(self): numerrin.initlocal("", "PYNUMERRIN_LICENSE", liccode) self.pool = NumerrinPool() self.code = NumerrinCode(self.pool.ph) self.codestring = "a = 10.0\n" self.errorcodestring = "a = 10/b\n" self.exceptionstring = "Exception(\"Exception\")\n" def test_parse_file(self): """Test parse_file method """ codefile = 'test.num' with open(codefile, 'w') as f: f.write(self.codestring) self.code.parse_file(codefile) os.remove(codefile) def test_parse_string(self): """Test parse_string method """ self.code.parse_string(self.codestring) with self.assertRaises(RuntimeError): self.code.parse_string(self.errorcodestring) def test_execute(self): """Test execute method """ self.code.parse_string(self.codestring) self.code.execute(1) def test_clear(self): """Test clear method """ self.code.parse_string(self.exceptionstring) with self.assertRaises(RuntimeError): self.code.execute(1) self.code.clear() self.code.execute(1) def test_generate_code(self): """Test generate_init_code and generate_code method """ CM = DataContainer() SP = DataContainer() SPExt = DataContainer() BC = DataContainer() CMExt = {} mesh_name = "Mesh" CM[CUBA.NAME] = mesh_name CMExt[CUBAExt.GE] = (CUBAExt.INCOMPRESSIBLE, CUBAExt.LAMINAR_MODEL) SP[CUBA.TIME_STEP] = 1 SP[CUBA.NUMBER_OF_TIME_STEPS] = 2 SP[CUBA.DENSITY] = 1.0 SP[CUBA.DYNAMIC_VISCOSITY] = 1.0 BC[CUBA.VELOCITY] = {'boundary0': ('fixedValue', (0.1, 0, 0))} BC[CUBA.PRESSURE] = {'boundary0': 'zeroGradient'} boundary_names = ['boundary0', 'boundary1', 'boundary2', 'boundary3'] corner_points = ((0.0, 0.0), (20.0e-3, 0.0), (20.0e-3, 1.0e-3), (0.0, 1.0e-3)) mesh_code = textwrap.dedent(""" pts={%f,%f;%f,%f;%f,%f;%f,%f} Quadmesh(pts,{%i,%i},{0,0,0,0},{1.0,1.0,-1.0,-1.0},mesh2d,domains2d) dvec[0:1]=0.0 dvec[2]=%f Extrude(mesh2d,domains2d,dvec,%i,0,0.0,%s,domains) omega->domains[0] %s->domains[6] %s->domains[4] %s=Union(domains[3],domains[5]) %s=Union(domains[1],domains[2]) """ % (corner_points[0][0], corner_points[0][1], corner_points[1][0], corner_points[1][1], corner_points[2][0], corner_points[2][1], corner_points[3][0], corner_points[3][1], 1, 1, 1.0, 1, mesh_name, mesh_name+boundary_names[0], mesh_name+boundary_names[1], mesh_name+boundary_names[2], mesh_name+boundary_names[3])) self.code.parse_string(mesh_code) self.code.execute(1) smesh, _, boundaries = self.pool.export_mesh('simmesh', mesh_name, boundary_names) nummesh = NumerrinMesh(mesh_name, smesh, self.pool) uidmap = nummesh._uuidToNumLabel boundary_faces = {} for boundary in boundaries: boundary_faces[boundary] = [] for fuid in boundaries[boundary]: boundary_faces[boundary].append(uidmap[fuid]) nummesh.pool.add_boundaries(mesh_name, boundaries, boundary_faces) nummesh._boundaries = boundaries for key in SP: self.pool.put_variable(numname[key], SP[key]) nummesh.init_point_variables(get_numerrin_solver(CMExt)) codestring = self.code.generate_init_code(CM, SP, SPExt, BC, CMExt) codestring += self.code.generate_code(CM, SP, SPExt, BC, CMExt, nummesh) self.code.parse_string(codestring) self.assertEqual(self.pool.variable_type(mesh_name), "Mesh") self.assertEqual(self.pool.variable_type(numname[CUBA.TIME_STEP]), "Integer") self.assertEqual(self.pool.variable_type(numname[CUBA.DENSITY]), "Real")