def test_parallel_mesh_gen(self, data_field_class): r""" only testing initializtion and merge_queue generation. The other functions are exercised during integration testing """ # # testing ParallelMeshGen init method # field = data_field_class() # testing defaults first pmg = ParallelMeshGen(field, 'system-test') assert pmg.system_dir == 'system-test' assert pmg.nprocs == 4 assert pmg.mesh_params == {} assert pmg.merge_groups == [] assert pmg.avg_fact == 1.0 assert pmg.nx == field.nx assert pmg.nz == field.nz assert sp.all(pmg._mask) # # checking pmg only has references to data initially, new references are # created if the 'threashold' method was used because it resets the arrays # using the internal _field which was cloned and independent of the original assert id(pmg.data_map) == id(field.data_map) assert id(pmg.data_vector) == id(field.data_vector) assert id(pmg.point_data) == id(field.point_data) assert id(pmg._field) != id(field) # # testing non default values params = {'test-key': 'test-value'} pmg = ParallelMeshGen(field, 'system-test', nprocs=15, avg_fact=7.0, mesh_params=params) assert pmg.nprocs == 15 assert pmg.avg_fact == 7.0 assert pmg.mesh_params == params # # Testing ParaMeshGen _create_merge_queue method # # testing merge queue for (2**, 2**n) grid shapes grid = sp.reshape(sp.arange(4, dtype=int), (2, 2)) queue, new_grid = pmg._create_merge_queue(grid, 'right') assert queue.qsize() == 2 pairs = [] while queue.qsize(): pairs.append(queue.get()) assert pairs == [(0, 1), (2, 3)] assert sp.all(new_grid == sp.array([[0], [2]], ndmin=2, dtype=int)) # grid = sp.reshape(sp.arange(4, dtype=int), (2, 2)) queue, new_grid = pmg._create_merge_queue(grid, 'top') assert queue.qsize() == 2 pairs = [] while queue.qsize(): pairs.append(queue.get()) assert pairs == [(0, 2), (1, 3)] assert sp.all(new_grid == sp.array([[0, 1]], ndmin=2, dtype=int)) # # testing merge queue for (n x n) grid shapes grid = sp.reshape(sp.arange(6, dtype=int), (2, 3)) queue, new_grid = pmg._create_merge_queue(grid, 'right') assert queue.qsize() == 2 pairs = [] while queue.qsize(): pairs.append(queue.get()) assert pairs == [(0, 1), (3, 4)] assert sp.all(new_grid == sp.array([[0, 2], [3, 5]], ndmin=2, dtype=int)) # grid = sp.reshape(sp.arange(6, dtype=int), (3, 2)) queue, new_grid = pmg._create_merge_queue(grid, 'top') assert queue.qsize() == 2 pairs = [] while queue.qsize(): pairs.append(queue.get()) assert pairs == [(0, 2), (1, 3)] assert sp.all(new_grid == sp.array([[0, 1], [4, 5]], ndmin=2, dtype=int))
def apm_parallel_mesh_generation(): r""" Processes the command line arguments and generates the mesh """ # namespace = parser.parse_args() if namespace.verbose: set_main_logger_level('debug') # # initial mesh parameters mesh_params = { 'convertToMeters': '2.680E-5', 'numbersOfCells': '(1 1 1)', # 'boundary.left.type': 'wall', 'boundary.right.type': 'wall', 'boundary.top.type': 'wall', 'boundary.bottom.type': 'wall', 'boundary.front.type': 'wall', 'boundary.back.type': 'wall' } # # reading params file if supplied if namespace.read_file: logger.info('Reading parameters file...') read_params_file(namespace.read_file, mesh_params) # # creating data field from aperture map logger.info('Processing aperture map...') map_field = DataField(namespace.map_file) # # reading offset file if provided offset_field = None if namespace.offset_file: offset_field = DataField(namespace.offset_file) # # setting up mesh generator system_dir = os.path.join(namespace.system_path,'system') np = namespace.np kwargs = {'nprocs': np, 'avg_fact': namespace.avg_fact, 'mesh_params': mesh_params, 'offset_field': offset_field} # logger.info('Setting generator up...') pmg = ParallelMeshGen(map_field, system_dir, **kwargs) # # creating the mesh logger.info('Creating the mesh...') pmg.generate_mesh(namespace.mesh_type, path=namespace.output_dir, overwrite=namespace.force) # # moving mesh files out of region directory out_path = namespace.output_dir reg_dir = os.path.join(out_path, 'mesh-region0', '*') if namespace.force: os.system('cp -ralf {} {}'.format(reg_dir, out_path)) os.system('rm -rf {}'.format(os.path.join(out_path, 'mesh-region0'))) else: os.system('mv {} {}'.format(reg_dir, out_path)) os.system('rmdir {}'.format(os.path.join(out_path, 'mesh-region0')))