def create_ellipsoidal_LV(casename="ellipsoidal",
                          meshsize=0.5,
                          gmshcmd="gmsh",
                          iswritemesh=True,
                          verbose=True):

    print "starting script"
    if verbose:
        print '*** create_ellipsoidal_LV ***'

        cur_dir = os.path.dirname(
            os.path.abspath(inspect.getfile(inspect.currentframe())))

        print "cur_dir" + cur_dir
        geofile = cur_dir + "/ellipsoidal.geo"
        tempgeofile = "ellipsoidal_temp.geo"
        print tempgeofile
        print os.getcwd()

        meshfilename = casename + ".vtk"

        cmd = "cp " + geofile + " " + tempgeofile
        os.system(cmd)

        cmd = "sed -i.bak s/'<<Meshsize>>'/'" + str(
            meshsize) + "'/g " + tempgeofile
        os.system(cmd)
        cmd = gmshcmd + " -3 ellipsoidal_temp.geo -o " + meshfilename
        os.system(cmd)
        cmd = "rm ellipsoidal_temp.geo"
        os.system(cmd)

        ugrid = vtk_py.readUGrid(meshfilename)

        return ugrid
def create_BiVmesh(epicutfilename, LVendocutfilename, RVendocutfilename, casename="BiV", meshsize=0.5, gmshcmd="gmsh", iswritemesh=False, verbose=True):


        if (verbose): print '*** create_BiVmesh ***'

        cur_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) 

	geofile = cur_dir + "/BiV.geo"
	tempgeofile = "BiV_temp.geo"
	print tempgeofile
	print os.getcwd()

	meshfilename = casename+".vtk"

        cmd = "cp " + geofile + " " + tempgeofile
	os.system(cmd)
	
        cmd = "sed -i.bak s/'<<Meshsize>>'/'" + str(meshsize) + "'/g " + tempgeofile
	os.system(cmd)
	cmd = "sed -i.bak s/'<<LVfilename>>'/'" + "\""+ str(LVendocutfilename).replace("/", "\/") + "\"" + "'/g " + tempgeofile
	os.system(cmd)
	cmd = "sed -i.bak s/'<<RVfilename>>'/'" + "\""+ str(RVendocutfilename).replace("/", "\/") + "\"" + "'/g " + tempgeofile
	os.system(cmd)
	cmd = "sed -i.bak s/'<<Epifilename>>'/'" + "\""+ str(epicutfilename).replace("/", "\/") + "\"" + "'/g " + tempgeofile
	os.system(cmd)
	cmd = gmshcmd+" -3 BiV_temp.geo -o " + meshfilename
	os.system(cmd)
	cmd = "rm BiV_temp.geo "
	os.system(cmd)

	ugrid = vtk_py.readUGrid(meshfilename)
	cmd = "rm meshfilename"
	os.system(cmd)

	return ugrid
Beispiel #3
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
Beispiel #4
0
rotatedendopdata = vtk_py.rotatePData_w_axis(endopdata, angle, raxis)

height =  min(rotatedendopdata.GetBounds()[5], rotatedepipdata.GetBounds()[5]) - zoffset

clipped_endo, clipped_epi = vtk_py.clipSurfacesForCutLVMesh(rotatedendopdata, rotatedepipdata, height, verbose=True)



#vtk_py.writeSTL(clipped_epi, "clipped_epi_tmp.stl")
vtk_py.writeSTL(clipped_epi, output_dir + "clipped_epi_tmp.stl")

#vtk_py.writeSTL(clipped_endo, "clipped_endo_tmp.stl")
vtk_py.writeSTL(clipped_endo, output_dir +  "clipped_endo_tmp.stl")


#filename = 'New_mesh'
filename = output_info["mesh_name"]

vtk_py.createLVmesh(filename, 0.5, "clipped_epi_tmp.stl", "clipped_endo_tmp.stl")#(filename, 0.45, "clipped_epi_tmp.stl", "clipped_endo_tmp.stl") #



#os.remove("clipped_epi_tmp.stl")

#os.remove("clipped_endo_tmp.stl")
#os.remove("LVtemp.geo.bak")

ugridfilename = output_dir + filename + '.vtk'
pdatafilename = output_dir + filename + '.vtp'
ugrid = vtk_py.readUGrid(ugridfilename)
    mtvfile.close()


tol = 1e-1
parser = argparse.ArgumentParser()
parser.add_argument('--vtk_folder', type=str, required=True)
parser.add_argument('--vtk_filename', type=str, required=True)
parser.add_argument('--mtv_grid_directory', type=str, required=True)
parser.add_argument('--mtv_basename', type=str, required=True)
parser.add_argument('--isepispring', type=int, required=True)
args = parser.parse_args()

print "************* Entering vtkmtvtranslator_quadtets_v1.py *****************"

if (args.isepispring):
    print "Enforce spring B.C on epi"

if (args.vtk_filename[len(args.vtk_filename) -
                      3:len(args.vtk_filename)] == 'vtu'):
    mesh = vtk_py.readXMLUGrid(os.path.join(args.vtk_folder,
                                            args.vtk_filename))
else:
    mesh = vtk_py.readUGrid(os.path.join(args.vtk_folder, args.vtk_filename))

mesh = extract_tetra(mesh)

convert_quadtets_2_mtv(mesh, args.mtv_grid_directory, args.mtv_basename, 1, 1,
                       "z", tol, args.isepispring)

print "************* Leaving vtkmtvtranslator_quadtets_v1.py *****************"
## Use gmsh to generate biventricular mesh
#os.system(gmshcmd + " -3 " + meshname + ".geo" + " -o " + meshname+".vtk") kurtis commented out, already generated this file in newer version of gmsh
####################################################################

# Failing heart #####################################################
#meshname = "biv_idealized2_failing"
#directory = "./"

# Use gmsh to generate biventricular mesh
#os.system(gmshcmd + " -3 " + meshname + ".geo" + " -o " + meshname+".vtk")
####################################################################

#stop

# Read in vtk file
ugrid = vtk_py.readUGrid(meshname + ".vtk")

# Rotate mesh so that z = 0 at base
ugridrot = vtk_py.rotateUGrid(ugrid,
                              rx=0.0,
                              ry=-90.0,
                              rz=0.0,
                              sx=1.0,
                              sy=1.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 = [