# 大型网格正交化 [返回示例目录](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") ``` ![单元格 15 的绘图输出](images/08_mesh2d_orthogonalization_15_0.png) 查询正交性,此调用计算开销较大。 ```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") ``` ![单元格 26 的绘图输出](images/08_mesh2d_orthogonalization_26_0.png)