3.6 KiB
3.6 KiB
基于规则网格采样数据的二维网格加密
本教程简要介绍如何使用规则网格采样数据进行网格加密。加密时,通过双线性插值计算网格节点处的水深值。
以下保留原笔记本的代码和已保存输出;转换过程中未重新执行代码。
首先导入所需的库。
import matplotlib.pyplot as plt
import numpy as np
from meshkernel import (
GeometryList,
GriddedSamples,
MakeGridParameters,
MeshKernel,
MeshRefinementParameters,
RefinementType,
)
meshkernel 提供了一组便捷方法,用于创建常见网格。
这里使用 curvilinear_compute_rectangular_grid 方法创建一个简单的曲线网格。该方法的完整参数请参阅相应文档。
mk = MeshKernel()
make_grid_parameters = MakeGridParameters()
make_grid_parameters.num_columns = 4
make_grid_parameters.num_rows = 5
make_grid_parameters.angle = 0.0
make_grid_parameters.origin_x = 0.0
make_grid_parameters.origin_y = 0.0
make_grid_parameters.block_size_x = 100.0
make_grid_parameters.block_size_y = 100.0
mk.curvilinear_compute_rectangular_grid(make_grid_parameters)
将曲线网格转换为非结构网格,并获取生成的 mesh2d。
mk.curvilinear_convert_to_mesh2d()
mesh2d_input = mk.mesh2d_get()
生成的网格可以按如下方式可视化。
fig, ax = plt.subplots()
mesh2d_input.plot_edges(ax, color="black")
定义均匀间距的网格采样数据。
gridded_samples = GriddedSamples(
num_x=5,
num_y=6,
x_origin=-50.0,
y_origin=-50.0,
cell_size=100.0,
values=np.array([-0.05] * 42, dtype=np.float32),
)
设置网格加密算法的参数。
refinement_params = MeshRefinementParameters(
refine_intersected=False,
use_mass_center_when_refining=False,
min_edge_size=2.0,
refinement_type=RefinementType.WAVE_COURANT,
connect_hanging_nodes=True,
account_for_samples_outside_face=False,
max_refinement_iterations=5,
)
现在可以执行加密。
mk.mesh2d_refine_based_on_gridded_samples(gridded_samples, refinement_params, True)
绘制加密后的网格。
mesh2d_output = mk.mesh2d_get()
fig, ax = plt.subplots()
mesh2d_output.plot_edges(ax, color="black")
如果采样网格间距不均匀,可以省略部分 GriddedSamples 参数,以另一种方式创建网格采样数据。
首先重新生成初始网格。
mk.curvilinear_compute_rectangular_grid(make_grid_parameters)
mk.curvilinear_convert_to_mesh2d()
fig, ax = plt.subplots()
mesh2d_input.plot_edges(ax, color="black")
当采样网格的 x 或 y 方向间距不均匀时,可以使用 x_coordinates 和 y_coordinates 参数指定非均匀间距。
gridded_samples = GriddedSamples(
x_coordinates=np.array([-50.0, 50.0, 150.0, 250.0, 350.0, 450.0], dtype=np.double),
y_coordinates=np.array(
[-50.0, 50.0, 150.0, 250.0, 350.0, 450.0, 550.0], dtype=np.double
),
values=np.array([-0.05] * 42, dtype=np.float32),
)
mk.mesh2d_refine_based_on_gridded_samples(gridded_samples, refinement_params, True)
mesh2d_output = mk.mesh2d_get()
fig, ax = plt.subplots()
mesh2d_output.plot_edges(ax, color="black")



