125 lines
2.8 KiB
Markdown
125 lines
2.8 KiB
Markdown
# 大型网格正交化
|
|
|
|
[返回示例目录](index.md)
|
|
|
|
以下保留原笔记本的代码和已保存输出;转换过程中未重新执行代码。
|
|
|
|
本示例演示如何加载大型二维网格并进行正交化。首先导入所需的库。这里还使用 UGrid 库正确加载二维网格。
|
|
|
|
```python
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
import pandas as pd
|
|
from meshkernel import (
|
|
GeometryList,
|
|
MeshKernel,
|
|
OrthogonalizationParameters,
|
|
ProjectionType,
|
|
Mesh2d,
|
|
)
|
|
from ugrid import UGrid, UGridMesh2D
|
|
```
|
|
|
|
定义正交性阈值和文件名。
|
|
|
|
```python
|
|
orthogonality_criteria = 0.3
|
|
input_file = "./Michigan_Huron_ORTHO_mc025_mn5_net.nc"
|
|
output_file = "./Michigan_Huron_orthogonality_issues.xyz"
|
|
```
|
|
|
|
读取网格几何数据。
|
|
|
|
```python
|
|
with UGrid(input_file, "r") as ug:
|
|
num_mesh2d_topologies = ug.mesh2d_get_num_topologies()
|
|
mesh2d_ugrid = ug.mesh2d_get(num_mesh2d_topologies - 1)
|
|
```
|
|
|
|
根据节点和边创建 `meshkernel` 的二维网格。
|
|
|
|
```python
|
|
mesh2d_mk = Mesh2d()
|
|
mesh2d_mk.node_x = mesh2d_ugrid.node_x
|
|
mesh2d_mk.node_y = mesh2d_ugrid.node_y
|
|
mesh2d_mk.edge_nodes = mesh2d_ugrid.edge_nodes
|
|
```
|
|
|
|
创建 `MeshKernel` 实例。
|
|
|
|
```python
|
|
mk = MeshKernel(ProjectionType.SPHERICAL)
|
|
```
|
|
|
|
设置网格,此调用计算开销较大。
|
|
|
|
```python
|
|
mk.mesh2d_set(mesh2d_mk)
|
|
```
|
|
|
|
获取网格。
|
|
|
|
```python
|
|
mesh2d_output = mk.mesh2d_get()
|
|
```
|
|
|
|
```python
|
|
fig, ax = plt.subplots()
|
|
mesh2d_output.plot_edges(ax, color="black")
|
|
```
|
|
|
|

|
|
|
|
查询正交性,此调用计算开销较大。
|
|
|
|
```python
|
|
orthogonality = mk.mesh2d_get_orthogonality().values
|
|
```
|
|
|
|
提取正交性指标值高于 `orthogonality_criteria` 的边。
|
|
|
|
```python
|
|
criteria_indices = np.where(orthogonality > orthogonality_criteria)[0]
|
|
```
|
|
|
|
将提取的边保存到文件。
|
|
|
|
```python
|
|
xyz_df = pd.DataFrame([])
|
|
xyz_df["edge_x"] = mesh2d_output.edge_x[criteria_indices]
|
|
xyz_df["edge_y"] = mesh2d_output.edge_y[criteria_indices]
|
|
xyz_df["orthogonality"] = orthogonality[criteria_indices]
|
|
xyz_df.to_csv(output_file, index=False, header=False, sep=" ")
|
|
```
|
|
|
|
## 执行正交化
|
|
|
|
```python
|
|
selecting_polygon = GeometryList(
|
|
np.empty(0, dtype=np.double), np.empty(0, dtype=np.double)
|
|
)
|
|
land_boundaries = GeometryList(
|
|
np.empty(0, dtype=np.double), np.empty(0, dtype=np.double)
|
|
)
|
|
```
|
|
|
|
```python
|
|
mk.mesh2d_compute_orthogonalization(
|
|
project_to_land_boundary_option=0,
|
|
orthogonalization_parameters=OrthogonalizationParameters(outer_iterations=1),
|
|
selecting_polygon=selecting_polygon,
|
|
land_boundaries=land_boundaries,
|
|
)
|
|
```
|
|
|
|
```python
|
|
mesh2d_output = mk.mesh2d_get()
|
|
```
|
|
|
|
```python
|
|
fig, ax = plt.subplots()
|
|
mesh2d_output.plot_edges(ax, color="black")
|
|
```
|
|
|
|

|