我在3D域中有一个标量字段(幸运的是它可以在结构化网格中表示).但是,一个轴域比另外两个轴大得多.
为清楚起见,我的'vts'文件等同于下面的文件:
from pyevtk.hl import gridToVTK
import numpy as np
import random as rnd
# Dimensions
nx, ny, nz = 6, 6, 30
lx, ly, lz = 1.0, 1.0, 10.0
dx, dy, dz = lx/nx, ly/ny, lz/nz
ncells = nx * ny * nz
npoints = (nx + 1) * (ny + 1) * (nz + 1)
# Coordinates
X = np.arange(0, lx + 0.1*dx, dx, dtype='float64')
Y = np.arange(0, ly + 0.1*dy, dy, dtype='float64')
Z = np.arange(0, lz + …Run Code Online (Sandbox Code Playgroud) 我想自动从vtk/vtu文件导出csv文件.
现在,我采取的步骤是:
这会为每个时间步执行一个名为basefilename#timestepno#.csv的csv文件
有没有办法从命令行执行此操作(计算机上没有X服务器正在进行计算),例如使用python接口?
默认的3D旋转模式是一种滚球模式.是否可以围绕给定的轴(比如x,y或z轴)进行交互式旋转?我看到你可以通过在视图详细信息对话框中键入数字来实现,但这很痛苦.
我需要在paraview中添加我自己的自制qt gui.我听说应该允许的paraview插件.但我没有找到它的教程.如何在Paraview中添加按钮,复选框,组合框?有人能告诉我一个例子吗?提前致谢
对于那些想要将简单的3D numpy数组(以及轴)导出到.vtk(或.vtr)文件以进行后期处理并在Paraview或Mayavi中显示的人,有一个名为PyEVTK的小模块就是这样做的.该模块支持结构化和非结构化数据等.不幸的是,即使代码在基于unix的系统中工作正常,我也无法在任何简单地使事情变得复杂的Windows安装上工作(不断崩溃).我联系了开发人员,但他的建议没有用
因此我的问题是:如何使用该from vtk.util import numpy_support函数将3D数组(函数本身不支持3D数组)导出到.vtk文件?有没有一种简单的方法可以在不创建vtkDatasets等的情况下完成它?
非常感谢!
我知道您可以将不同数据文件类型的读取器添加到paraview中,但是,所有人都在谈论在c ++中做很多VTK东西,以及(可能更糟)重新编译paraview以使其了解您的数据文件格式。另一方面,paraview还支持python中的脚本编写。也许是因为我对VTK不熟悉,但是对我来说,我只能从pvpython 操作 VTK对象。有什么方法可以使用pvpython动态地将阅读器添加到paraview中?
对于盖驱动腔(CFD)的Lattice Boltzmann模拟,我将立方域分解为(也是立方)8个子域,这些子域由8个等级独立计算。每个MPI等级都会为每个时间步生成一个VTK文件,并且由于我使用的是ParaView,因此我希望将整个内容可视化为一个多维数据集。更具体地说明我要实现的目标:
lbm_out_<rank>.<timestep>.vtsVTK StructuredGrid格式的文件中。.pvts文件,该*.vts文件收集文件并将包含子域的文件合并为一个文件,ParaView可以将其视为整个域。不幸的是,我遇到了许多问题,因为我觉得ParaView和VTK的文档记录非常差,并且来自ParaView的错误消息完全没有用。
我有以下*.pvts文件,其中包括一个幽灵层和:
<?xml version="1.0"?>
<VTKFile type="PStructuredGrid" version="0.1" byte_order="LittleEndian">
<PStructuredGrid WholeExtent="0 7 0 7 0 7 " GhostLevel="1">
<PPoints>
<PDataArray NumberOfComponents="3" type="Float32" />
</PPoints>
<Piece Extent="0 4 0 4 0 4" Source="lbm_out_0.0.vts"/>
<Piece Extent="3 7 0 4 0 4" Source="lbm_out_1.0.vts"/>
<Piece Extent="0 4 3 7 0 4" Source="lbm_out_2.0.vts"/>
<Piece Extent="3 7 3 7 0 4" Source="lbm_out_3.0.vts"/>
<Piece Extent="0 4 0 …Run Code Online (Sandbox Code Playgroud) 在性能方面,以下代码片段在mayavi.
import numpy as np
from mayavi import mlab
n = 5000
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)
s = np.sin(x)**2 + np.cos(y)
mlab.points3d(x, y, z, s, colormap="RdYlBu", scale_factor=0.02, scale_mode='none')
Run Code Online (Sandbox Code Playgroud)
而是mayavi开始噎住了n >= 10000。matplotlib, ( Axes3D.scatter) 中类似的 3d 绘图例程同样难以处理这种大小的数据集(为什么我首先开始研究mayavi)。
首先,在mayavi(琐碎的或非平凡的)中是否有一些我遗漏的东西会使 10,000 多个点散点图更容易渲染?
其次,如果上面的答案是否定的,那么mayavi我还需要哪些其他选项(在python 包中或不同的 python 包中)来绘制这种量级的数据集?
我标记 ParaView 只是为了添加在 ParaView 中渲染我的数据非常顺利,这让我相信我并没有试图做任何不合理的事情。
更新:
将模式指定为 2D 字形对加快速度大有帮助。例如
mlab.points3d(x, y, z, s, colormap="RdYlBu", scale_factor=0.02,
scale_mode='none', mode='2dcross') …Run Code Online (Sandbox Code Playgroud) 与这个问题最相关的问题是:在Ipython中,如何将参数传递给单元格,就像它是自己的脚本一样?
我正在编写一个ipython笔记本进行模拟,然后在paraview中创建动画。我这样做的方法是使用magic命令运行单元
%%script pvpython
Run Code Online (Sandbox Code Playgroud)
因为paraview有自己的解释器。问题是我需要它将vtu文件的目录作为参数传递给它(这是IPython内核中的变量)。到目前为止,我还无法弄清楚这一点。我试过了:
%%script pvpython path/to/files
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('foo')
args = parser.parse_args()
print(args.foo)
Run Code Online (Sandbox Code Playgroud)
但这会导致错误:`未知参数:path / to / files,因为该参数被传递给了magic命令而不是python脚本。有办法解决这个问题吗?
编辑:这不同于链接的问题,因为我使用的是单元魔术而不是线魔术。我希望将所有代码单独在笔记本中可见。
我目前正在尝试使用 ParaView 计算器过滤器将给定的笛卡尔坐标 (x,y,z) 转换为球面坐标 (r, theta, phi),其中 theta 是极角,phi 是方位角。我想在四分之一球体的域上执行此操作:
(r 在 [r_inn, r_out] 中,theta 在 [0, pi] 中,phi 在 [0, 2pi] 中。
到目前为止,我定义了以下结果变量,它们给出了预期的结果:
r = sqrt(坐标X^2 + 坐标Y^2 + 坐标Z^2)
θ = acos(坐标Z/r)
对于方位矢量,我知道在使用时必须注意 (x,y) 的象限
phi = atan(y/x)。
这通常是使用 C 中的atan2等额外函数来实现的。计算器过滤器或 Python 计算器过滤器似乎没有提供这样的函数。
有没有简单的方法可以使用图形界面实现像atan2这样的东西?
非常感谢任何评论,谢谢!
更新:
Neil Twist 指出,在 Python 计算器中,反正切函数可以称为 arctan2(y, x),我现在面临的问题是无法通过变量 coordsX/Y 访问单元格的坐标/Z,可在简单的计算器过滤器中使用。
现在的问题是:如何访问 Python 计算器中的单元格坐标?