基于共线节点创建的元素中角度为零的问题网格创建(.vtu 文件)

问题描述 投票:0回答:0

我用 Python 创建了一个代码,帮助我读取 csv 文件并读取未来网格的节点。但是,创建的元素内部具有零角度,并且未正确创建网格。 你能帮我找到一个合适的解决方案吗?限制是我不能删除 de 节点,我需要保留创建的 .vtu 文件的结构,该文件是用外部程序读取的。

csv文件结构 X,Y 274431.1298,8944106.146 274787.4887,8944503.557 275063.569,8944861.591 274962.1268,8945052.067 275068.3516,8945366.36 274888.9677,8945728.005 274319.1971,8946276.679 ... .. .

import numpy as np
import matplotlib.pyplot as plt
import pyvista as pv
import os
from scipy.spatial import Delaunay

path = r"C:\Users\\"
filename = "old_mesh.csv"
datos = np.genfromtxt(path + filename, delimiter=',')

# delete X,Y first line
if np.array_equal(datos[0], np.array([0, 0])):
    datos = np.delete(datos, 0, axis=0)

#verifiy if there are NaN values
if np.isnan(datos).any():
    print("El archivo CSV contiene valores faltantes o NaN")
    # elimina las filas con valores faltantes o NaN
    datos = datos[~np.isnan(datos).any(axis=1)]

# creation of the mesh based in the nodes

tri = Delaunay(datos)

# vtu file creation 
with open(path + os.path.basename(filename)[0:-4] + '_outputmesh.vtu', "w") as f:
    f.write('<?xml version="1.0"?>\n')
    f.write('<VTKFile type="UnstructuredGrid" version="1" byte_order="LittleEndian" header_type="UInt64">\n')
    f.write('\t<UnstructuredGrid>\n')
    f.write('\t\t<Piece NumberOfPoints="{}" NumberOfCells="{}">\n'.format(len(datos), len(tri.simplices)))
    f.write('\t\t\t<Points>\n')
    f.write('\t\t\t\t<DataArray type="Float64" Name="Points" NumberOfComponents="3" format="ascii">\n')
    for i in range(len(datos)):
        f.write('\t\t\t\t\t{} {} {}\n'.format(datos[i][0], datos[i][1], 0))
    f.write('\t\t\t\t</DataArray>\n')
    f.write('\t\t\t</Points>\n')
    f.write('\t\t\t<Cells>\n')
    f.write('\t\t\t\t<DataArray type="Int64" Name="connectivity" NumberOfComponents="1" format="ascii">\n')
    for i in range(len(tri.simplices)):
        f.write('\t\t\t\t\t{} {} {}\n'.format(tri.simplices[i][0], tri.simplices[i][1], tri.simplices[i][2]))
    f.write('\t\t\t\t</DataArray>\n')
    f.write('\t\t\t\t<DataArray type="Int64" Name="offsets" NumberOfComponents="1" format="ascii">\n')
    for i in range(len(tri.simplices)):
        f.write('\t\t\t\t\t{}\n'.format((i+1)*3))
    f.write('\t\t\t\t</DataArray>\n')
    f.write('\t\t\t\t<DataArray type="UInt8" Name="types" NumberOfComponents="1" format="ascii">\n')
    for i in range(len(tri.simplices)):
        f.write('\t\t\t\t\t5\n')
    f.write('\t\t\t\t</DataArray>\n')
    f.write('\t\t\t</Cells>\n')
    f.write('\t\t</Piece>\n')
    f.write('\t</UnstructuredGrid>\n')
    f.write('</VTKFile>')

我尝试使用其他包(即三角形)什么问题还没有解决...

python mesh intel-vtune
© www.soinside.com 2019 - 2024. All rights reserved.