138 lines
3.7 KiB
Markdown
138 lines
3.7 KiB
Markdown
# 生成一维与二维网格之间的连接
|
|
|
|
本教程介绍使用 `meshkernel` 生成网格连接的基本方法。
|
|
|
|
[返回示例目录](index.md)
|
|
|
|
以下保留原笔记本的代码和已保存输出;转换过程中未重新执行代码。
|
|
|
|
```python
|
|
from meshkernel import MakeGridParameters, Mesh1d, Mesh2d, MeshKernel, GeometryList
|
|
from meshkernel.version import __version__
|
|
|
|
__version__
|
|
```
|
|
|
|
```text
|
|
'7.0.4'
|
|
```
|
|
|
|
导入其他所需的库。
|
|
|
|
```python
|
|
import numpy as np
|
|
from pathlib import Path
|
|
import matplotlib.pyplot as plt
|
|
```
|
|
|
|
```python
|
|
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()
|
|
```
|
|
|
|
# 设置二维网格和一维网格
|
|
|
|
```python
|
|
# 创建基础网格
|
|
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)
|
|
```
|
|
|
|
```python
|
|
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)
|
|
```
|
|
|
|

|
|
|
|
## 计算连接
|
|
|
|
```python
|
|
node_mask = np.full(mesh1d.node_x.size, True)
|
|
```
|
|
|
|
#### 计算多重连接
|
|
|
|
```python
|
|
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)
|
|
```
|
|
|
|

|
|
|
|
#### 计算单一连接
|
|
|
|
```python
|
|
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)
|
|
```
|
|
|
|

|
|
|
|
#### 根据指定点计算连接
|
|
|
|
```python
|
|
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)
|
|
```
|
|
|
|

|
|
|
|
### 计算边界连接
|
|
|
|
```python
|
|
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)
|
|
```
|
|
|
|

|