Beispiel #1
0
def build2DMesh(p, nnx, nny):
    return MeshTools.MultilevelTriangularMesh(nnx,nny,1,
                                              p.domain.x[0], p.domain.x[1], 1.0,
                                              p.domain.L[0], p.domain.L[1], 1.0,
                                              refinementLevels=1,
                                              nLayersOfOverlap=0,
                                              parallelPartitioningType=MeshTools.MeshParallelPartitioningTypes.node)
Beispiel #2
0
    def PUMI_reallocate(self, mesh):
        p0 = self.pList[0]
        n0 = self.nList[0]
        if self.TwoPhaseFlow:
            nLevels = p0.myTpFlowProblem.general['nLevels']
            nLayersOfOverlapForParallel = p0.myTpFlowProblem.general[
                'nLayersOfOverlapForParallel']
            parallelPartitioningType = MeshTools.MeshParallelPartitioningTypes.element
            domain = p0.myTpFlowProblem.domain
            domain.MeshOptions.setParallelPartitioningType('element')
        else:
            nLevels = n0.nLevels
            nLayersOfOverlapForParallel = n0.nLayersOfOverlapForParallel
            parallelPartitioningType = n0.parallelPartitioningType
            domain = p0.domain

        logEvent("Generating %i-level mesh from PUMI mesh" % (nLevels, ))
        if domain.nd == 3:
            mlMesh = MeshTools.MultilevelTetrahedralMesh(
                0,
                0,
                0,
                skipInit=True,
                nLayersOfOverlap=nLayersOfOverlapForParallel,
                parallelPartitioningType=parallelPartitioningType)
        if domain.nd == 2:
            mlMesh = MeshTools.MultilevelTriangularMesh(
                0,
                0,
                0,
                skipInit=True,
                nLayersOfOverlap=nLayersOfOverlapForParallel,
                parallelPartitioningType=parallelPartitioningType)
        if self.comm.size() == 1:
            mlMesh.generateFromExistingCoarseMesh(
                mesh,
                nLevels,
                nLayersOfOverlap=nLayersOfOverlapForParallel,
                parallelPartitioningType=parallelPartitioningType)
        else:
            mlMesh.generatePartitionedMeshFromPUMI(
                mesh, nLevels, nLayersOfOverlap=nLayersOfOverlapForParallel)
        self.mlMesh_nList = []
        for p in self.pList:
            self.mlMesh_nList.append(mlMesh)
        if (domain.PUMIMesh.size_field_config() == "isotropicProteus"):
            mlMesh.meshList[0].subdomainMesh.size_field = numpy.ones(
                (mlMesh.meshList[0].subdomainMesh.nNodes_global, 1),
                'd') * 1.0e-1
        if (domain.PUMIMesh.size_field_config() == 'anisotropicProteus'):
            mlMesh.meshList[0].subdomainMesh.size_scale = numpy.ones(
                (mlMesh.meshList[0].subdomainMesh.nNodes_global, 3), 'd')
            mlMesh.meshList[0].subdomainMesh.size_frame = numpy.ones(
                (mlMesh.meshList[0].subdomainMesh.nNodes_global, 9), 'd')

        #may want to trigger garbage collection here
        self.modelListOld = self.modelList
        logEvent("Allocating models on new mesh")
        self.allocateModels()
def refine_uniform_from_triangle(filebase,refinementLevels,index_base=0,EB=False):
    from proteus import MeshTools,Archiver
    mesh = MeshTools.TriangularMesh()
    mesh.generateFromTriangleFiles(filebase,index_base)

    MLMesh = MeshTools.MultilevelTriangularMesh(0,0,0,skipInit=True)

    MLMesh.generateFromExistingCoarseMesh(mesh,refinementLevels)

    MLMesh.meshList[-1].writeTriangleFiles(filebase+'_out',index_base)

    ar = Archiver.XdmfArchive('.',filebase+'_out')
    import xml.etree.ElementTree as ElementTree
    ar.domain = ElementTree.SubElement(ar.tree.getroot(),"Domain")
    mesh.writeMeshXdmf(ar,'mesh_coarse'+'_out',init=True,EB=EB,tCount=0)
    MLMesh.meshList[-1].writeMeshXdmf(ar,'mesh_fine'+'_out',init=True,EB=EB,tCount=1)
    ar.close()
Beispiel #4
0
     def PUMI_reallocate(self,mesh):
        p0 = self.pList[0]
        n0 = self.nList[0]

        nLevels = n0.nLevels
        nLayersOfOverlapForParallel = n0.nLayersOfOverlapForParallel
        parallelPartitioningType = MeshTools.MeshParallelPartitioningTypes.element
        domain = p0.domain
        domain.MeshOptions.setParallelPartitioningType('element')

        logEvent("Generating %i-level mesh from PUMI mesh" % (nLevels,))
        if domain.nd == 3:
          mlMesh = MeshTools.MultilevelTetrahedralMesh(
              0,0,0,skipInit=True,
              nLayersOfOverlap=nLayersOfOverlapForParallel,
              parallelPartitioningType=parallelPartitioningType)
        if domain.nd == 2:
          mlMesh = MeshTools.MultilevelTriangularMesh(
              0,0,0,skipInit=True,
              nLayersOfOverlap=nLayersOfOverlapForParallel,
              parallelPartitioningType=parallelPartitioningType)
        if self.comm.size()==1:
            mlMesh.generateFromExistingCoarseMesh(
                mesh,nLevels,
                nLayersOfOverlap=nLayersOfOverlapForParallel,
                parallelPartitioningType=parallelPartitioningType)
        else:
            mlMesh.generatePartitionedMeshFromPUMI(
                mesh,nLevels,
                nLayersOfOverlap=nLayersOfOverlapForParallel)
        
        #need to remove old mlMesh references to ensure the number of mesh entities is properly updated
        self.mlMesh_nList.clear()
        for p in self.pList:
            self.mlMesh_nList.append(mlMesh)
        if (b"isotropicProteus" in self.domain.AdaptManager.sizeInputs):
            mlMesh.meshList[0].subdomainMesh.size_field = numpy.ones((mlMesh.meshList[0].subdomainMesh.nNodes_global,1),'d')*1.0e-1
        if (b'anisotropicProteus' in self.domain.AdaptManager.sizeInputs):
            mlMesh.meshList[0].subdomainMesh.size_scale = numpy.ones((mlMesh.meshList[0].subdomainMesh.nNodes_global,3),'d')
            mlMesh.meshList[0].subdomainMesh.size_frame = numpy.ones((mlMesh.meshList[0].subdomainMesh.nNodes_global,9),'d')

        #may want to trigger garbage collection here
        self.modelListOld = self.modelList
        logEvent("Allocating models on new mesh")
        self.allocateModels()