Source code for transfinite_mapping_helper
r"""这里我们提供参考域里的网格生成程序以及物理域里的网格可视化程序。
你可以使用它验证你编写的从参考域到物理域的transfinite mapping程序。你可以点击右侧[source]按键可以查看源代码。
或者直接点击 :download:`transfinite_mapping_helper.py<./transfinite_mapping_helper.py>` 下载。
"""
import numpy as np
import matplotlib.pyplot as plt
[docs]
def reference_mesh_generator(N):
r"""在参考域内生成含有 :math:`N^2` 个均匀网格单元的网格。
"""
assert isinstance(N, int) and N > 1, f"N={N} is wrong. It must be an integer larger than 1."
linspace = np.linspace(0, 1, 100)
Nspace = np.linspace(0, 1, N+1)
x_lines_xi = linspace[np.newaxis, :].repeat(N+1, axis=0)
x_lines_eta = Nspace[:, np.newaxis].repeat(100, axis=1)
y_lines_xi = x_lines_eta
y_lines_eta = x_lines_xi
xi = np.vstack([x_lines_xi, y_lines_xi])
eta = np.vstack([x_lines_eta, y_lines_eta])
return xi, eta
[docs]
def visualize_physical_mesh(x, y):
r"""用于可视化物理域下的网格信息 :math:`(x,y)`。如果你直接把 :math:`(\xi,\eta)` 传递给它,它也可以用于可视化参考域里的网格
"""
fig, ax = plt.subplots(figsize=(8, 6))
ax.set_aspect('equal')
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.xlabel(r"$x$")
plt.ylabel(r"$y$")
for line_x, line_y in zip(x, y):
plt.plot(line_x, line_y, linewidth=1, color='k')
plt.show()
if __name__ == '__main__':
xi, eta = reference_mesh_generator(10)
visualize_physical_mesh(xi, eta)