コード例 #1
0
def pig_lv():
    #print "starting pig_LV"
    casename = "New_mesh"  #"ellipsoidal" #"New_mesh" #"ellipsoidal_from_MRI"
    meshfilename = casename + ".vtk"  #"ellipsoidal.vtk"#

    print meshfilename

    outdir = "./" + casename + "/"
    directory = os.getcwd() + '/' + casename + "/"
    ugrid = vtk_py.readUGrid(meshfilename)

    #print (ugrid)

    mesh = vtk_py.convertUGridToXMLMesh(ugrid)

    print(mesh)
    comm2 = pyMPI.COMM_WORLD

    fenics_mesh_ref, fenics_facet_ref, fenics_edge_ref = vtk_py.extractFeNiCsBiVFacet(
        ugrid, geometry="LV")

    matid = MeshFunction('size_t', fenics_mesh_ref, 3, mesh.domains())

    meshname = casename
    ztop = max(fenics_mesh_ref.coordinates()[:, 2])
    ztrans = Expression(("0.0", "0.0", str(-ztop)), degree=1)

    if (dolfin.dolfin_version() != '1.6.0'):
        ALE.move(fenics_mesh_ref, ztrans)
    else:
        fenics_mesh_ref.move(ztrans)

    mesh = fenics_mesh_ref

    gdim = mesh.geometry().dim()

    quad_deg = 4
    VQuadelem = VectorElement("Quadrature",
                              mesh.ufl_cell(),
                              degree=quad_deg,
                              quad_scheme="default")
    VQuadelem._quad_scheme = 'default'
    fiberFS = FunctionSpace(mesh, VQuadelem)
    Quadelem = FiniteElement("Quadrature",
                             mesh.ufl_cell(),
                             degree=quad_deg,
                             quad_scheme="default")
    Quadelem._quad_scheme = 'default'
    hslFS = FunctionSpace(mesh, Quadelem)
    isepiflip = True
    isendoflip = True
    endo_angle = 30
    epi_angle = -30
    casedir = "./"
    hsl0_endo = 895.0
    hsl0_epi = 955.0

    hsl0, ef, es, en, eC, eL, eR = vtk_py.addLVfiber(mesh,
                                                     fiberFS,
                                                     hslFS,
                                                     "lv",
                                                     endo_angle,
                                                     epi_angle,
                                                     hsl0_endo,
                                                     hsl0_epi,
                                                     casedir,
                                                     isepiflip,
                                                     isendoflip,
                                                     isapexflip=False)

    matid_filename = outdir + meshname + "_matid.pvd"
    File(matid_filename) << matid

    f = HDF5File(mesh.mpi_comm(), directory + meshname + ".hdf5", 'w')
    f.write(mesh, meshname)
    f.close()

    f = HDF5File(mesh.mpi_comm(), directory + meshname + ".hdf5", 'a')
    f.write(fenics_facet_ref, meshname + "/" + "facetboundaries")
    f.write(fenics_edge_ref, meshname + "/" + "edgeboundaries")
    f.write(matid, meshname + "/" + "matid")
    f.write(ef, meshname + "/" + "eF")
    f.write(es, meshname + "/" + "eS")
    f.write(en, meshname + "/" + "eN")
    f.write(eC, meshname + "/" + "eC")
    f.write(eL, meshname + "/" + "eL")
    f.write(eR, meshname + "/" + "eR")
    #print hsl0
    #print eR
    f.write(hsl0, meshname + "/" + "hsl0")

    f.close()

    File(outdir + "_facetboundaries" + ".pvd") << fenics_facet_ref
    File(outdir + "_edgeboundaries" + ".pvd") << fenics_edge_ref
    File(outdir + "_mesh" + ".pvd") << mesh
    File(outdir + "matid" + ".pvd") << matid

    return 0
コード例 #2
0
                              sz=1.0)
vtk_py.writeUGrid(ugridrot, meshname + "_rot.vtk")

# For some reason vtkPointLocator in extractFenicsBiVFacet will give error if precision is too high
newpts = vtk.vtkPoints()
for p in range(0, ugridrot.GetNumberOfPoints()):
    pt = [
        ugridrot.GetPoints().GetPoint(p)[0],
        ugridrot.GetPoints().GetPoint(p)[1],
        ugridrot.GetPoints().GetPoint(p)[2]
    ]
    newpts.InsertNextPoint([round(pt[k], 5) for k in range(0, 3)])
ugridrot.SetPoints(newpts)

# Extract fenics mesh
fenics_mesh_ref, fenics_facet_ref, fenics_edge_ref = vtk_py.extractFeNiCsBiVFacet(
    ugridrot)
dolfin.File("bivmesh.pvd") << fenics_mesh_ref
dolfin.File("bivfacet.pvd") << fenics_facet_ref
dolfin.File("bivedge.pvd") << fenics_edge_ref

X = dolfin.SpatialCoordinate(fenics_mesh_ref)
N = dolfin.FacetNormal(fenics_mesh_ref)
ds = dolfin.ds(subdomain_data=fenics_facet_ref)
lv_vol_form = -dolfin.Constant(1.0 / 3.0) * dolfin.inner(N, X) * ds(2)
rv_vol_form = -dolfin.Constant(1.0 / 3.0) * dolfin.inner(N, X) * ds(3)
lv_vol = dolfin.assemble(lv_vol_form,
                         form_compiler_parameters={"representation": "uflacs"})
rv_vol = dolfin.assemble(rv_vol_form,
                         form_compiler_parameters={"representation": "uflacs"})

if (comm2.Get_rank() == 0):