コード例 #1
0
 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))
コード例 #2
0
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')))