Example #1
0
def read_foammesh(name, path):
    """Read mesh from OpenFoam case files.

    Parameters
    ----------
    name : str
    name to give to mesh
    path : str
    case directory

    Raises
    ------
    Exception if some mesh from mesh names list not found

    """

    mapContent = get_dictionary_maps('pimpleFoam', False)
    controlDict = parse_map(mapContent['controlDict'])
    foamface.init_IO(name, path, controlDict)
    foamface.readMesh(name)
    nPoints = foamface.getPointCount(name)
    nCells = foamface.getCellCount(name)
    nFaces = foamface.getFaceCount(name)
    nEdges = 0
    foamMesh = FoamMesh(name, {}, 'pimpleFoam')
    foamMesh.generate_uuidmapping(nPoints, nEdges, nFaces, nCells)
    patchNames = foamface.getBoundaryPatchNames(name)
    patchFaces = foamface.getBoundaryPatchFaces(name)
    boundaries = {}
    i = 0
    k = 0
    while i < len(patchFaces):
        boundaries[patchNames[k]] = []
        start = i + 1
        end = start + patchFaces[i]
        i += 1
        for j in range(start, end):
            boundaries[patchNames[k]].append(
                foamMesh._foamFaceLabelToUuid[patchFaces[j]])
            i += 1
        k += 1
    foamMesh._boundaries = boundaries

    return foamMesh
Example #2
0
def read_foammesh(name, path):
    """Read mesh from OpenFoam case files.

    Parameters
    ----------
    name : str
    name to give to mesh
    path : str
    case directory

    Raises
    ------
    Exception if some mesh from mesh names list not found

    """

    mapContent = get_dictionary_maps('pimpleFoam', False)
    controlDict = parse_map(mapContent['controlDict'])
    foamface.init_IO(name, path, controlDict)
    foamface.readMesh(name)
    nPoints = foamface.getPointCount(name)
    nCells = foamface.getCellCount(name)
    nFaces = foamface.getFaceCount(name)
    nEdges = 0
    foamMesh = FoamMesh(name, {}, 'pimpleFoam')
    foamMesh.generate_uuidmapping(nPoints, nEdges, nFaces, nCells)
    patchNames = foamface.getBoundaryPatchNames(name)
    patchFaces = foamface.getBoundaryPatchFaces(name)
    boundaries = {}
    i = 0
    k = 0
    while i < len(patchFaces):
        boundaries[patchNames[k]] = []
        start = i+1
        end = start+patchFaces[i]
        i += 1
        for j in range(start, end):
            boundaries[patchNames[k]].append(
                foamMesh._foamFaceLabelToUuid[patchFaces[j]])
            i += 1
        k += 1
    foamMesh._boundaries = boundaries

    return foamMesh
Example #3
0
def create_quad_mesh(path, name, corner_points, nex, ney, nez):
    """ create and add mesh to engine

    Parameters
    ----------
    path : str
        path to mesh parent directory
    name : str
        name of mesh
    corner_points : list
        list of 8 [x,y,z] corner points
    nex : int
        number of elements in x -direction
    ney : int
        number of elements in y -direction
    nez : int
        number of elements in z -direction

    Return
    ------------
    mesh : FoamMesh
       created mesh

    """

    case = os.path.join(path, name)

    create_directories(case)

    solver = 'blockMesh'
    dictionary_name = 'controlDict'
    full_path = os.path.join(case, 'system')

    map_content = get_dictionary_maps(solver, False)

    controlDict = parse_map(map_content[dictionary_name])

    write_dictionary(full_path, dictionary_name, controlDict)
    dictionary_name = 'fvSchemes'
    controlDict = parse_map(map_content[dictionary_name])
    write_dictionary(full_path, dictionary_name, controlDict)

    dictionary_name = 'fvSolution'
    controlDict = parse_map(map_content[dictionary_name])
    write_dictionary(full_path, dictionary_name, controlDict)

    dictionary_name = 'blockMeshDict'
    control = map_content[dictionary_name]

    dictionary_path = os.path.join('constant', 'polyMesh')
    full_name = os.path.join(os.path.join(case, dictionary_path),
                             dictionary_name)

    corners = "("
    for i in range(8):
        corners += str(corner_points[i]).replace(',', ' ')
    corners += ")"

    control['vertices'] = corners

    control['blocks'] =\
        '(hex (0 1 2 3 4 5 6 7) (%i %i %i) simpleGrading (1 1 1))'\
        % (nex, ney, nez)

    control['boundary'] =\
        """
    (
    walls
    {
        type wall;
        faces
        (
            (3 7 6 2)
            (1 5 4 0)
        );
    }
    inlet
    {
        type patch;
        faces
        (
            (0 4 7 3)
        );
    }
    outlet
    {
        type patch;
        faces
        (
            (2 6 5 1)
        );
    }
    frontAndBack
    {
        type empty;
        faces
        (
            (0 3 2 1)
            (4 5 6 7)
        );
    }
)
"""

    blockMeshDict = parse_map(control)
    write_dictionary(os.path.join(case, dictionary_path), dictionary_name,
                     blockMeshDict)
    # this to overcome bug in blockMesh case attribute
    # blockMesh searches blockMeshDict -file from doubled case directory
    # copy file to that directory
    blockMesh_file_name = case + os.sep + full_name

    if not os.path.exists(os.path.dirname(blockMesh_file_name)):
        os.makedirs(os.path.dirname(blockMesh_file_name))
    shutil.copy(full_name, blockMesh_file_name)

    ncores = 1
    solver = 'blockMesh'
    runner = FoamRunner(solver, name, case, ncores)
    runner.run()

    return read_foammesh(name, path)
Example #4
0
def create_block_mesh(path, name, block_mesh_dict):
    """ create and add mesh to engine

    Parameters
    ----------
    path : str
        path to mesh parent directory
    name : str
        name of mesh
    block_mesh_dict : str
        blockMeshDict -file as a string

    Return
    ------------
    mesh : FoamMesh
       created mesh

    """

    case = os.path.join(path, name)

    create_directories(case)

    solver = 'blockMesh'
    dictionary_name = 'controlDict'
    full_path = os.path.join(case, 'system')

    map_content = get_dictionary_maps(solver, False)

    controlDict = parse_map(map_content[dictionary_name])
    write_dictionary(full_path, dictionary_name, controlDict)

    dictionary_name = 'fvSchemes'
    controlDict = parse_map(map_content[dictionary_name])
    write_dictionary(full_path, dictionary_name, controlDict)

    dictionary_name = 'fvSolution'
    controlDict = parse_map(map_content[dictionary_name])
    write_dictionary(full_path, dictionary_name, controlDict)

    dictionary_name = 'blockMeshDict'
    dictionary_path = os.path.join('constant', 'polyMesh')
    full_name = os.path.join(os.path.join(case, dictionary_path),
                             dictionary_name)

    write_dictionary(os.path.join(case, dictionary_path), dictionary_name,
                     block_mesh_dict)

    # this to overcome bug in blockMesh case attribute
    # blockMesh searches blockMeshDict -file from doubled case directory
    # copy file to that directory
    blockMesh_file_name = case + os.sep + full_name

    if not os.path.exists(os.path.dirname(blockMesh_file_name)):
        os.makedirs(os.path.dirname(blockMesh_file_name))
    shutil.copy(full_name, blockMesh_file_name)

    ncores = 1
    solver = 'blockMesh'
    runner = FoamRunner(solver, name, case, ncores)
    runner.run()

    return read_foammesh(name, path)
    def setUp(self):
        self.name = 'mesh1'
        self.test_dir = 'test'
        self.path = os.path.join(self.test_dir, self.name)
        self.time = '0'
        self.mesh = Mesh(self.name)

        self.points = [
            Point(
                (0.0, 0.0, 0.0)),
            Point(
                (1.0, 0.0, 0.0)),
            Point(
                (1.0, 1.0, 0.0)),
            Point(
                (0.0, 1.0, 0.0)),
            Point(
                (0.0, 0.0, 1.0)),
            Point(
                (1.0, 0.0, 1.0)),
            Point(
                (1.0, 1.0, 1.0)),
            Point(
                (0.0, 1.0, 1.0))
        ]

        puids = self.mesh.add(self.points)

        self.faces = [
            Face([puids[0], puids[3], puids[7], puids[4]],
                 data=DataContainer({CUBA.LABEL: 0})),
            Face([puids[1], puids[2], puids[6], puids[5]],
                 data=DataContainer({CUBA.LABEL: 1})),
            Face([puids[0], puids[1], puids[5], puids[4]],
                 data=DataContainer({CUBA.LABEL: 2})),
            Face([puids[3], puids[2], puids[6], puids[7]],
                 data=DataContainer({CUBA.LABEL: 3})),
            Face([puids[0], puids[1], puids[2], puids[3]],
                 data=DataContainer({CUBA.LABEL: 4})),
            Face([puids[4], puids[5], puids[6], puids[7]],
                 data=DataContainer({CUBA.LABEL: 5}))

        ]

        self.mesh.add(self.faces)

        self.cells = [
            Cell(puids)
        ]

        self.puids = puids

        self.mesh.add(self.cells)

        self._uuidToFoamLabelAndType = {}
        self._foamCellLabelToUuid = {}
        self._foamFaceLabelToUuid = {}
        self._foamEdgeLabelToUuid = {}
        self._foamPointLabelToUuid = {}
        # generate uuid mapping
        label = 0
        for point in self.mesh.iter(item_type=CUBA.POINT):
            uid = point.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.POINT)
            self._foamPointLabelToUuid[label] = uid
            label += 1

        label = 0
        for edge in self.mesh.iter(item_type=CUBA.EDGE):
            uid = edge.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.EDGE)
            self._foamEdgeLabelToUuid[label] = uid
            label += 1

        label = 0
        for face in self.mesh.iter(item_type=CUBA.FACE):
            uid = face.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.FACE)
            self._foamFaceLabelToUuid[label] = uid
            label += 1

        label = 0
        for cell in self.mesh.iter(item_type=CUBA.CELL):
            uid = cell.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.CELL)
            self._foamCellLabelToUuid[label] = uid
            label += 1

        # find out boundary patches
        patchNameFacesMap = OrderedDict()
        self.facePoints = []
        i = 0
        for face in self.mesh.iter(item_type=CUBA.FACE):
                boundary = 'boundary' + str(i)
                i += 1
                if boundary not in patchNameFacesMap:
                    patchNameFacesMap[boundary] = []
                patchNameFacesMap[boundary].append(
                    self._uuidToFoamLabelAndType[face.uid][0])

            # make compressed list of faces points
                self.facePoints.append(len(face.points))
                for puid in face.points:
                    self.facePoints.append(
                        self._uuidToFoamLabelAndType[puid][0])

        # make points coordinate list
        self.pointCoordinates = []
        for point in self.mesh.iter(item_type=CUBA.POINT):
            for coord in point.coordinates:
                self.pointCoordinates.append(coord)

        # make compressed list of cells points
        self.cellPoints = []
        for cell in self.mesh.iter(item_type=CUBA.CELL):
            self.cellPoints.append(len(cell.points))
            for puid in cell.points:
                self.cellPoints.append(self._uuidToFoamLabelAndType[puid][0])

        # make patch information
        self.patchNames = []
        self.patchFaces = []
        self.patchTypes = []

        for patchName in patchNameFacesMap:
            self.patchNames.append(patchName)
            self.patchFaces.append(len(patchNameFacesMap[patchName]))
            for face in patchNameFacesMap[patchName]:
                self.patchFaces.append(face)
            self.patchTypes.append("patch")

        if not self.patchNames:
            error_str = 'Could not initialize with mesh  {}. '
            error_str += 'Mesh has not boundary face definitions.'
            raise ValueError(error_str.format(self.mesh.name))

        # this to have controlDict file for mesh definition
        mapContent = get_dictionary_maps('simpleFoam', False)
        controlDict = parse_map(mapContent['controlDict'])

        foamface.init_IO(self.name, os.path.abspath(os.path.join(self.path,
                                                                 os.pardir)),
                         controlDict)
        foamface.addMesh(self.name, self.pointCoordinates,
                         self.cellPoints, self.facePoints,
                         self.patchNames, self.patchFaces,
                         self.patchTypes)
Example #6
0
    def __init__(self, name, cuds, solver, mesh=None, path=None):
        super(FoamMesh, self).__init__(name)

        self._time = 0
        self._uuidToFoamLabelAndType = {}
        self._foamCellLabelToUuid = {}
        self._foamFaceLabelToUuid = {}
        self._foamEdgeLabelToUuid = {}
        self._foamPointLabelToUuid = {}
        self._boundaries = {}
        self._foamPhaseNameToMaterial = {}

        if path:
            self.path = path
        else:
            self.path = os.path.join(tempfile.mkdtemp(), name)
        if mesh:
            # generate uuid mapping
            if hasattr(mesh, '_get_packed_coordinate_list'):
                pointCoordinates = mesh._get_packed_coordinate_list()
                i = 0
                label = 0
                while i < len(pointCoordinates):
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.POINT)
                    self._foamPointLabelToUuid[label] = uid
                    label += 1
                    i += 3
            else:
                label = 0
                pointCoordinates = []
                pointMap = {}
                for point in mesh.iter(item_type=CUBA.POINT):
                    pointMap[point.uid] = label
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.POINT)
                    self._foamPointLabelToUuid[label] = uid
                    for coord in point.coordinates:
                        pointCoordinates.append(coord)
                    label += 1

            label = 0
            for edge in mesh.iter(item_type=CUBA.EDGE):
                uid = self._generate_uuid()
                self._uuidToFoamLabelAndType[uid] = (label, CUBA.EDGE)
                self._foamEdgeLabelToUuid[label] = uid
                label += 1

            faceMap = {}

            if hasattr(mesh, '_get_packed_face_list'):
                label = -1
                facePoints = mesh._get_packed_face_list()
                i = 0
                while i < len(facePoints):
                    label += 1
                    n_points = facePoints[i]
                    i += 1 + n_points
                    face_uid = mesh._foamFaceLabelToUuid[label]
                    faceMap[face_uid] = label
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.FACE)
                    self._foamFaceLabelToUuid[label] = uid
            else:
                label = 0
                facePoints = []
                for face in mesh.iter(item_type=CUBA.FACE):
                    faceMap[face.uid] = label
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.FACE)
                    self._foamFaceLabelToUuid[label] = uid
                    # make compressed list of faces points
                    facePoints.append(len(face.points))
                    for puid in face.points:
                        facePoints.append(pointMap[puid])
                    label += 1

            if hasattr(mesh, '_get_packed_cell_list'):
                cellPoints = mesh._get_packed_cell_list()
                cell_label = -1
                i = 0
                while i < len(cellPoints):
                    cell_label += 1
                    n_points = cellPoints[i]
                    i += 1
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (cell_label, CUBA.CELL)
                    self._foamCellLabelToUuid[cell_label] = uid
                    i += n_points
            else:
                label = 0
                cellPoints = []
                cellMap = {}
                for cell in mesh.iter(item_type=CUBA.CELL):
                    uid = self._generate_uuid()
                    cellMap[cell.uid] = uid
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.CELL)
                    self._foamCellLabelToUuid[label] = uid
                    cellPoints.append(len(cell.points))
                    for puid in cell.points:
                        cellPoints.append(pointMap[puid])
                    label += 1
                pointMap.clear()

            if hasattr(mesh, '_foamPhaseNameToMaterial') and \
                    mesh._foamPhaseNameToMaterial:
                self._foamPhaseNameToMaterial = mesh._foamPhaseNameToMaterial
            elif cuds and not_empty(cuds.iter(item_type=CUBA.MATERIAL)):
                materials = list(cuds.iter(item_type=CUBA.MATERIAL))
                im = 0
                for material in materials:
                    self._foamPhaseNameToMaterial[phaseNames[im]] = material
                    im += 1

            if hasattr(mesh, '_get_cell_data_map'):
                cell_data_map = mesh._get_cell_data_map()
            else:
                cell_data_map = {}
                nCells = mesh.count_of(CUBA.CELL)
                for cell in mesh.iter(item_type=CUBA.CELL):
                    label, _ = self._uuidToFoamLabelAndType[cellMap[cell.uid]]
                    for key in cell.data:
                        if key not in cell_data_map:
                            if dataTypeMap[key] == "scalar":
                                cell_data_map[key] = [0] * nCells
                            elif dataTypeMap[key] == "vector":
                                cell_data_map[key] = [0] * (nCells * 3)
                            elif dataTypeMap[key] == "tensor":
                                cell_data_map[key] = [0] * (nCells * 9)
                        if dataTypeMap[key] == "scalar":
                            cell_data_map[key][label] = cell.data[key]
                        elif dataTypeMap[key] == "vector":
                            for i in range(len(cell.data[key])):
                                k = 3 * label + i
                                cell_data_map[key][k] = cell.data[key][i]
                        elif dataTypeMap[key] == "tensor":
                            for i in range(len(cell.data[key])):
                                k = 9 * label + i
                                cell_data_map[key][k] = cell.data[key][i]

            # make patch information
            patchNames = []
            patchFaces = []
            if hasattr(mesh, '_boundaries'):
                for patchName in mesh._boundaries:
                    patchNames.append(patchName)
                    self._boundaries[patchName] = []
                    patchFaces.append(len(mesh._boundaries[patchName]))
                    for fuid in mesh._boundaries[patchName]:
                        flabel = faceMap[fuid]
                        new_fuid = self._foamFaceLabelToUuid[flabel]
                        self._boundaries[patchName].append(new_fuid)
                        patchFaces.append(flabel)

            faceMap.clear()

            patchTypes = []
            if cuds:
                bcs = {}
                for boundary in cuds.iter(item_type=CUBA.BOUNDARY):
                    bcs[boundary.name] = \
                        get_foam_boundary_condition(
                        boundary.condition[0], self._foamPhaseNameToMaterial,
                        solver)
                check_boundary_names(bcs.keys(), patchNames)

                for patchName in patchNames:
                    if patchName in bcs and bcs[patchName] == "empty":
                        patchTypes.append("empty")
                    else:
                        patchTypes.append("patch")
            else:
                for patchName in patchNames:
                    patchTypes.append("patch")

            mapContent = get_dictionary_maps(solver, False)
            controlDict = parse_map(mapContent['controlDict'])

            # init objectRegistry and map to mesh name
            foamface.init_IO(name, os.path.abspath(
                os.path.join(self.path, os.pardir)), controlDict)

            # update time
            foamface.updateTime(name, self._time)
            # add mesh to objectRegisty
            foamface.addMesh(name, pointCoordinates, cellPoints, facePoints,
                             patchNames, patchFaces, patchTypes)

            # create default fields
            foamface.createDefaultFields(name, solver, True)
            # write mesh to disk
            foamface.writeMesh(name)

            # copy possible cell data to time register
            self.copy_cells(cell_data_map)
            cell_data_map.clear()

            foamface.writeFields(name)

            # correct boundary face labels
            patchNames = foamface.getBoundaryPatchNames(name)
            patchFaces = foamface.getBoundaryPatchFaces(name)

            boundaries = {}
            i = 0
            k = 0
            while i < len(patchFaces):
                boundaries[patchNames[k]] = []
                start = i+1
                end = start+patchFaces[i]
                i += 1
                for j in range(start, end):
                    boundaries[patchNames[k]].append(
                        self._foamFaceLabelToUuid[patchFaces[j]])
                    i += 1
                k += 1
            self._boundaries = boundaries
Example #7
0
    def __init__(self, name, cuds, solver, mesh=None, path=None):
        super(FoamMesh, self).__init__(name)

        self._time = 0
        self._uuidToFoamLabelAndType = {}
        self._foamCellLabelToUuid = {}
        self._foamFaceLabelToUuid = {}
        self._foamEdgeLabelToUuid = {}
        self._foamPointLabelToUuid = {}
        self._boundaries = {}
        self._foamPhaseNameToMaterial = {}

        if path:
            self.path = path
        else:
            self.path = os.path.join(tempfile.mkdtemp(), name)
        if mesh:
            # generate uuid mapping
            if hasattr(mesh, '_get_packed_coordinate_list'):
                pointCoordinates = mesh._get_packed_coordinate_list()
                i = 0
                label = 0
                while i < len(pointCoordinates):
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.POINT)
                    self._foamPointLabelToUuid[label] = uid
                    label += 1
                    i += 3
            else:
                label = 0
                pointCoordinates = []
                pointMap = {}
                for point in mesh.iter(item_type=CUBA.POINT):
                    pointMap[point.uid] = label
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.POINT)
                    self._foamPointLabelToUuid[label] = uid
                    for coord in point.coordinates:
                        pointCoordinates.append(coord)
                    label += 1

            label = 0
            for edge in mesh.iter(item_type=CUBA.EDGE):
                uid = self._generate_uuid()
                self._uuidToFoamLabelAndType[uid] = (label, CUBA.EDGE)
                self._foamEdgeLabelToUuid[label] = uid
                label += 1

            faceMap = {}

            if hasattr(mesh, '_get_packed_face_list'):
                label = -1
                facePoints = mesh._get_packed_face_list()
                i = 0
                while i < len(facePoints):
                    label += 1
                    n_points = facePoints[i]
                    i += 1 + n_points
                    face_uid = mesh._foamFaceLabelToUuid[label]
                    faceMap[face_uid] = label
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.FACE)
                    self._foamFaceLabelToUuid[label] = uid
            else:
                label = 0
                facePoints = []
                for face in mesh.iter(item_type=CUBA.FACE):
                    faceMap[face.uid] = label
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.FACE)
                    self._foamFaceLabelToUuid[label] = uid
                    # make compressed list of faces points
                    facePoints.append(len(face.points))
                    for puid in face.points:
                        facePoints.append(pointMap[puid])
                    label += 1

            if hasattr(mesh, '_get_packed_cell_list'):
                cellPoints = mesh._get_packed_cell_list()
                cell_label = -1
                i = 0
                while i < len(cellPoints):
                    cell_label += 1
                    n_points = cellPoints[i]
                    i += 1
                    uid = self._generate_uuid()
                    self._uuidToFoamLabelAndType[uid] = (cell_label, CUBA.CELL)
                    self._foamCellLabelToUuid[cell_label] = uid
                    i += n_points
            else:
                label = 0
                cellPoints = []
                cellMap = {}
                for cell in mesh.iter(item_type=CUBA.CELL):
                    uid = self._generate_uuid()
                    cellMap[cell.uid] = uid
                    self._uuidToFoamLabelAndType[uid] = (label, CUBA.CELL)
                    self._foamCellLabelToUuid[label] = uid
                    cellPoints.append(len(cell.points))
                    for puid in cell.points:
                        cellPoints.append(pointMap[puid])
                    label += 1
                pointMap.clear()

            if hasattr(mesh, '_foamPhaseNameToMaterial') and \
                    mesh._foamPhaseNameToMaterial:
                self._foamPhaseNameToMaterial = mesh._foamPhaseNameToMaterial
            elif cuds and not_empty(cuds.iter(item_type=CUBA.MATERIAL)):
                materials = list(cuds.iter(item_type=CUBA.MATERIAL))
                im = 0
                for material in materials:
                    self._foamPhaseNameToMaterial[phaseNames[im]] = material
                    im += 1

            if hasattr(mesh, '_get_cell_data_map'):
                cell_data_map = mesh._get_cell_data_map()
            else:
                cell_data_map = {}
                nCells = mesh.count_of(CUBA.CELL)
                for cell in mesh.iter(item_type=CUBA.CELL):
                    label, _ = self._uuidToFoamLabelAndType[cellMap[cell.uid]]
                    for key in cell.data:
                        if key not in cell_data_map:
                            if dataTypeMap[key] == "scalar":
                                cell_data_map[key] = [0] * nCells
                            elif dataTypeMap[key] == "vector":
                                cell_data_map[key] = [0] * (nCells * 3)
                            elif dataTypeMap[key] == "tensor":
                                cell_data_map[key] = [0] * (nCells * 9)
                        if dataTypeMap[key] == "scalar":
                            cell_data_map[key][label] = cell.data[key]
                        elif dataTypeMap[key] == "vector":
                            for i in range(len(cell.data[key])):
                                k = 3 * label + i
                                cell_data_map[key][k] = cell.data[key][i]
                        elif dataTypeMap[key] == "tensor":
                            for i in range(len(cell.data[key])):
                                k = 9 * label + i
                                cell_data_map[key][k] = cell.data[key][i]

            # make patch information
            patchNames = []
            patchFaces = []
            if hasattr(mesh, '_boundaries'):
                for patchName in mesh._boundaries:
                    patchNames.append(patchName)
                    self._boundaries[patchName] = []
                    patchFaces.append(len(mesh._boundaries[patchName]))
                    for fuid in mesh._boundaries[patchName]:
                        flabel = faceMap[fuid]
                        new_fuid = self._foamFaceLabelToUuid[flabel]
                        self._boundaries[patchName].append(new_fuid)
                        patchFaces.append(flabel)

            faceMap.clear()

            patchTypes = []
            if cuds:
                bcs = {}
                for boundary in cuds.iter(item_type=CUBA.BOUNDARY):
                    bcs[boundary.name] = \
                        get_foam_boundary_condition(
                        boundary.condition[0], self._foamPhaseNameToMaterial,
                        solver)
                check_boundary_names(bcs.keys(), patchNames)

                for patchName in patchNames:
                    if patchName in bcs and bcs[patchName] == "empty":
                        patchTypes.append("empty")
                    else:
                        patchTypes.append("patch")
            else:
                for patchName in patchNames:
                    patchTypes.append("patch")

            mapContent = get_dictionary_maps(solver, False)
            controlDict = parse_map(mapContent['controlDict'])

            # init objectRegistry and map to mesh name
            foamface.init_IO(
                name, os.path.abspath(os.path.join(self.path, os.pardir)),
                controlDict)

            # update time
            foamface.updateTime(name, self._time)
            # add mesh to objectRegisty
            foamface.addMesh(name, pointCoordinates, cellPoints, facePoints,
                             patchNames, patchFaces, patchTypes)

            # create default fields
            foamface.createDefaultFields(name, solver, True)
            # write mesh to disk
            foamface.writeMesh(name)

            # copy possible cell data to time register
            self.copy_cells(cell_data_map)
            cell_data_map.clear()

            foamface.writeFields(name)

            # correct boundary face labels
            patchNames = foamface.getBoundaryPatchNames(name)
            patchFaces = foamface.getBoundaryPatchFaces(name)

            boundaries = {}
            i = 0
            k = 0
            while i < len(patchFaces):
                boundaries[patchNames[k]] = []
                start = i + 1
                end = start + patchFaces[i]
                i += 1
                for j in range(start, end):
                    boundaries[patchNames[k]].append(
                        self._foamFaceLabelToUuid[patchFaces[j]])
                    i += 1
                k += 1
            self._boundaries = boundaries
    def setUp(self):
        self.name = 'mesh1'
        self.test_dir = 'test'
        self.path = os.path.join(self.test_dir, self.name)
        self.time = '0'
        self.mesh = Mesh(self.name)

        self.points = [
            Point((0.0, 0.0, 0.0)),
            Point((1.0, 0.0, 0.0)),
            Point((1.0, 1.0, 0.0)),
            Point((0.0, 1.0, 0.0)),
            Point((0.0, 0.0, 1.0)),
            Point((1.0, 0.0, 1.0)),
            Point((1.0, 1.0, 1.0)),
            Point((0.0, 1.0, 1.0))
        ]

        puids = self.mesh.add(self.points)

        self.faces = [
            Face([puids[0], puids[3], puids[7], puids[4]],
                 data=DataContainer({CUBA.LABEL: 0})),
            Face([puids[1], puids[2], puids[6], puids[5]],
                 data=DataContainer({CUBA.LABEL: 1})),
            Face([puids[0], puids[1], puids[5], puids[4]],
                 data=DataContainer({CUBA.LABEL: 2})),
            Face([puids[3], puids[2], puids[6], puids[7]],
                 data=DataContainer({CUBA.LABEL: 3})),
            Face([puids[0], puids[1], puids[2], puids[3]],
                 data=DataContainer({CUBA.LABEL: 4})),
            Face([puids[4], puids[5], puids[6], puids[7]],
                 data=DataContainer({CUBA.LABEL: 5}))
        ]

        self.mesh.add(self.faces)

        self.cells = [Cell(puids)]

        self.puids = puids

        self.mesh.add(self.cells)

        self._uuidToFoamLabelAndType = {}
        self._foamCellLabelToUuid = {}
        self._foamFaceLabelToUuid = {}
        self._foamEdgeLabelToUuid = {}
        self._foamPointLabelToUuid = {}
        # generate uuid mapping
        label = 0
        for point in self.mesh.iter(item_type=CUBA.POINT):
            uid = point.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.POINT)
            self._foamPointLabelToUuid[label] = uid
            label += 1

        label = 0
        for edge in self.mesh.iter(item_type=CUBA.EDGE):
            uid = edge.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.EDGE)
            self._foamEdgeLabelToUuid[label] = uid
            label += 1

        label = 0
        for face in self.mesh.iter(item_type=CUBA.FACE):
            uid = face.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.FACE)
            self._foamFaceLabelToUuid[label] = uid
            label += 1

        label = 0
        for cell in self.mesh.iter(item_type=CUBA.CELL):
            uid = cell.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.CELL)
            self._foamCellLabelToUuid[label] = uid
            label += 1

        # find out boundary patches
        patchNameFacesMap = OrderedDict()
        self.facePoints = []
        i = 0
        for face in self.mesh.iter(item_type=CUBA.FACE):
            boundary = 'boundary' + str(i)
            i += 1
            if boundary not in patchNameFacesMap:
                patchNameFacesMap[boundary] = []
            patchNameFacesMap[boundary].append(
                self._uuidToFoamLabelAndType[face.uid][0])

            # make compressed list of faces points
            self.facePoints.append(len(face.points))
            for puid in face.points:
                self.facePoints.append(self._uuidToFoamLabelAndType[puid][0])

        # make points coordinate list
        self.pointCoordinates = []
        for point in self.mesh.iter(item_type=CUBA.POINT):
            for coord in point.coordinates:
                self.pointCoordinates.append(coord)

        # make compressed list of cells points
        self.cellPoints = []
        for cell in self.mesh.iter(item_type=CUBA.CELL):
            self.cellPoints.append(len(cell.points))
            for puid in cell.points:
                self.cellPoints.append(self._uuidToFoamLabelAndType[puid][0])

        # make patch information
        self.patchNames = []
        self.patchFaces = []
        self.patchTypes = []

        for patchName in patchNameFacesMap:
            self.patchNames.append(patchName)
            self.patchFaces.append(len(patchNameFacesMap[patchName]))
            for face in patchNameFacesMap[patchName]:
                self.patchFaces.append(face)
            self.patchTypes.append("patch")

        if not self.patchNames:
            error_str = 'Could not initialize with mesh  {}. '
            error_str += 'Mesh has not boundary face definitions.'
            raise ValueError(error_str.format(self.mesh.name))

        # this to have controlDict file for mesh definition
        mapContent = get_dictionary_maps('simpleFoam', False)
        controlDict = parse_map(mapContent['controlDict'])

        foamface.init_IO(self.name,
                         os.path.abspath(os.path.join(self.path, os.pardir)),
                         controlDict)
        foamface.addMesh(self.name, self.pointCoordinates, self.cellPoints,
                         self.facePoints, self.patchNames, self.patchFaces,
                         self.patchTypes)
    def setUp(self):

        print "Running FOAM interface test"

        self.name = 'mesh1'
        self.test_dir = 'test'
        self.path = os.path.join(self.test_dir, self.name)
        self.time = '0'
        self.mesh = Mesh(self.name)

        self.points = [
            Point(
                (0.0, 0.0, 0.0)),
            Point(
                (1.0, 0.0, 0.0)),
            Point(
                (1.0, 1.0, 0.0)),
            Point(
                (0.0, 1.0, 0.0)),
            Point(
                (0.0, 0.0, 1.0)),
            Point(
                (1.0, 0.0, 1.0)),
            Point(
                (1.0, 1.0, 1.0)),
            Point(
                (0.0, 1.0, 1.0))
        ]

        puids = self.mesh.add(self.points)

        self.faces = [
            Face([puids[0], puids[3], puids[7], puids[4]]),
            Face([puids[1], puids[2], puids[6], puids[5]]),
            Face([puids[0], puids[1], puids[5], puids[4]]),
            Face([puids[3], puids[2], puids[6], puids[7]]),
            Face([puids[0], puids[1], puids[2], puids[3]]),
            Face([puids[4], puids[5], puids[6], puids[7]])
        ]

        self.mesh.add(self.faces)

        self.cells = [
            Cell(puids)
        ]

        self.puids = puids

        self.mesh.add(self.cells)

        self._uuidToFoamLabelAndType = {}
        self._foamCellLabelToUuid = {}
        self._foamFaceLabelToUuid = {}
        self._foamEdgeLabelToUuid = {}
        self._foamPointLabelToUuid = {}
        # generate uuid mapping
        label = 0
        for point in self.mesh.iter(item_type=CUBA.POINT):
            uid = point.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.POINT)
            self._foamPointLabelToUuid[label] = uid
            label += 1

        label = 0
        for edge in self.mesh.iter(item_type=CUBA.EDGE):
            uid = edge.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.EDGE)
            self._foamEdgeLabelToUuid[label] = uid
            label += 1

        label = 0
        for face in self.mesh.iter(item_type=CUBA.FACE):
            uid = face.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.FACE)
            self._foamFaceLabelToUuid[label] = uid
            label += 1

        label = 0
        for cell in self.mesh.iter(item_type=CUBA.CELL):
            uid = cell.uid
            self._uuidToFoamLabelAndType[uid] = (label, CUBA.CELL)
            self._foamCellLabelToUuid[label] = uid
            label += 1

        # find out boundary patches
        patchNameFacesMap = OrderedDict()
        self.facePoints = []
        i = 0
        for face in self.mesh.iter(item_type=CUBA.FACE):
            boundary = 'boundary' + str(i)
            i += 1
            if boundary not in patchNameFacesMap:
                patchNameFacesMap[boundary] = []
            patchNameFacesMap[boundary].append(
                self._uuidToFoamLabelAndType[face.uid][0])
            # make compressed list of faces points
            self.facePoints.append(len(face.points))
            for puid in face.points:
                self.facePoints.append(self._uuidToFoamLabelAndType[puid][0])

        # make points coordinate list
        self.pointCoordinates = []
        for point in self.mesh.iter(item_type=CUBA.POINT):
            for coord in point.coordinates:
                self.pointCoordinates.append(coord)

        # make compressed list of cells points
        self.cellPoints = []
        for cell in self.mesh.iter(item_type=CUBA.CELL):
            self.cellPoints.append(len(cell.points))
            for puid in cell.points:
                self.cellPoints.append(self._uuidToFoamLabelAndType[puid][0])

        # make patch information
        self.patchNames = []
        self.patchFaces = []
        for patchName in patchNameFacesMap:
            self.patchNames.append(patchName)
            self.patchFaces.append(len(patchNameFacesMap[patchName]))
            for face in patchNameFacesMap[patchName]:
                self.patchFaces.append(face)

        if not self.patchNames:
            error_str = 'Could not initialize with mesh  {}. '
            error_str += 'Mesh has not boundary face definitions.'
            raise ValueError(error_str.format(self.mesh.name))

        self.patchTypes = []

        for i in range(len(self.patchNames)):
            self.patchTypes.append("patch")

        # this to have controlDict file for mesh definition
        mapContent = foam_dicts.dictionaryMaps['pimpleFoam']
        controlDict = foam_dicts.parse_map(mapContent['controlDict'])

        # init objectRegistry and map to mesh name
        foamface.init(self.name, controlDict)

        # add mesh to objectRegisty
        foamface.addMesh(self.name,
                         self.pointCoordinates,
                         self.cellPoints,
                         self.facePoints,
                         self.patchNames,
                         self.patchFaces,
                         self.patchTypes)

        foamface.createDefaultFields(self.name, 'pimpleFoam', True)