注釈
Go to the end to download the full example code
データの積分#
pyvista.DataSetFilters.integrate_data()
フィルタを使用して,データを表面上で積分します.
import pyvista
from pyvista import examples
この例では,血管内の総流量と平均流速を計算します. 境界オブジェクトは,データセット形状のプロットにのみ使用されます. 流入面は,領域をスライスして生成します.領域内に流入する流体は負の z 方向に流れるので,新しい配列 normal_velocity
が作成されます.
dataset = examples.download_blood_vessels()
boundary = dataset.decimate_boundary().extract_all_edges()
inlet_surface = dataset.slice('z', origin=(0, 0, 182))
inlet_surface["normal_velocity"] = -1 * inlet_surface["velocity"][:, 2]
入口の流速を示します.
plotter = pyvista.Plotter()
plotter.add_mesh(boundary, color="grey", opacity=0.25)
plotter.add_mesh(
inlet_surface,
scalars="normal_velocity",
component=2,
scalar_bar_args=dict(vertical=True, title_font_size=16),
lighting=False,
)
plotter.add_axes()
plotter.camera_position = [(10, 9.5, -43), (87.0, 73.5, 123.0), (-0.5, -0.7, 0.5)]
plotter.show()
pyvista.DataSetFilters.integrate_data()
フィルターを使用して,総流量が計算されます. データは pyvista.UnstructuredGrid
オブジェクトで,1 つのポイントと 1 つのセルのみであることに注意してください.
integrated_data = inlet_surface.integrate_data()
integrated_data
積分データ integrated_data
の各配列には,積分データが格納されます.
integrated_data["normal_velocity"]
pyvista_ndarray([25.79937191])
Area
や Volume
の配列が追加されます.
print(f"Original arrays: {inlet_surface.array_names}")
new_arrays = [name for name in integrated_data.array_names if name not in inlet_surface.array_names]
print(f"New arrays : {new_arrays}")
Original arrays: ['normal_velocity', 'node_value', 'simerr_type', 'density', 'velocity', 'shearstress']
New arrays : ['Area']
総流量,吸込面面積,平均流速を表示します.
total_flow_rate = integrated_data["normal_velocity"][0]
area = integrated_data["Area"][0]
average_velocity = total_flow_rate / area
print(f"Total flow rate : {total_flow_rate:.1f}")
print(f"Area : {area:.0f}")
print(f"Average velocity: {average_velocity:.3f}")
Total flow rate : 25.8
Area : 265
Average velocity: 0.097
体積積分#
また,体積を積分することもできます.ここでは,セルと点のデータを体積全体で効果的に合計します.データセットの体積で割ることで,平均値を計算するのに使うことができます.
計算された体積は pyvista.DataSet.volume
と同じであることに注意してください.
また,データセットの中心は積算量の "point" であることに注意してください.
integrated_volume = dataset.integrate_data()
center = integrated_volume.points[0]
volume = integrated_volume['Volume'][0]
mean_density = integrated_volume['density'][0] / volume
mean_velocity = integrated_volume['velocity'][0] / volume
print(f"Center : {center}")
print(f"Volume : {volume:.0f}")
print(f"Mean density : {mean_density:.4f}")
print(f"Mean velocity : {mean_velocity}")
Center : [ 90.54132 78.15124 116.79401]
Volume : 39353
Mean density : 0.3361
Mean velocity : [-0.00754452 0.012869 -0.11734917]
Total running time of the script: (0 minutes 0.695 seconds)