Files
mkdocs/doc/meshkernelpy/examples/14_contacts_generation.md
T
2026-10-10 21:56:35 +08:00

3.7 KiB

生成一维与二维网格之间的连接

本教程介绍使用 meshkernel 生成网格连接的基本方法。

返回示例目录

以下保留原笔记本的代码和已保存输出;转换过程中未重新执行代码。

from meshkernel import MakeGridParameters, Mesh1d, Mesh2d, MeshKernel, GeometryList
from meshkernel.version import __version__

__version__
'7.0.4'

导入其他所需的库。

import numpy as np
from pathlib import Path
import matplotlib.pyplot as plt
def plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0=None):
    fig, ax = plt.subplots()
    mesh1d_output_0.plot_edges(ax, color="blue")
    mesh2d_output_0.plot_edges(ax, color="black")
    if contacts_output_0:
        contacts_output_0.plot_edges(ax, mesh1d_output_0, mesh2d_output_0, color="red")
    ax.plot(
        mesh1d_output_0.node_x, mesh1d_output_0.node_y, "o", color="blue", markersize=5
    )
    plt.show()

设置二维网格和一维网格

# 创建基础网格
mk = MeshKernel()

make_grid_parameters = MakeGridParameters(
    angle=0,
    origin_x=0.0,
    origin_y=0.0,
    upper_right_x=100.0,
    upper_right_y=100.0,
    block_size_x=10.0,
    block_size_y=10.0,
)

mk.curvilinear_compute_rectangular_grid_on_extension(make_grid_parameters)
mk.curvilinear_convert_to_mesh2d()

mesh1d_node_x = [0.0, 50.0, 100.0]
mesh1d_node_y = [20.0, 20.0, 20.0]
mesh1d_edge_nodes = [0, 1, 1, 2]
mesh1d = Mesh1d(
    node_x=mesh1d_node_x, node_y=mesh1d_node_y, edge_nodes=mesh1d_edge_nodes
)
mk.mesh1d_set(mesh1d)
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)

单元格 7 的绘图输出

计算连接

node_mask = np.full(mesh1d.node_x.size, True)

计算多重连接

mk.contacts_compute_multiple(node_mask)
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)

单元格 11 的绘图输出

计算单一连接

x_coordinates = np.array([0.0, 100.0, 100.0, 0.0, 0.0], dtype=np.double)
y_coordinates = np.array([0.0, 0.0, 100.0, 100.0, 0.0], dtype=np.double)
area_selection = GeometryList(x_coordinates, y_coordinates)
mk.contacts_compute_single(node_mask, area_selection, projection_factor=0.0)
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)

单元格 13 的绘图输出

根据指定点计算连接

x_coordinates = np.array([10.000001], dtype=np.double)
y_coordinates = np.array([5.0], dtype=np.double)
point_cloud = GeometryList(x_coordinates, y_coordinates)

mk.contacts_compute_with_points(node_mask, point_cloud)
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)

单元格 15 的绘图输出

计算边界连接

mk.contacts_compute_boundary(node_mask, search_radius=50.0)
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)

单元格 17 的绘图输出