数值风云

python画贴体网格

import numpy as np
from matplotlib import pyplot as plt
# Parameters
nx =201
ny =81
nt = 3
xmin =0
xmax = 50
ymin =0
ymax = 20
dx = (xmax - xmin) / (nx - 1)
dy = (ymax - ymin) / (ny - 1)
x = np.linspace(0, 50, nx)  #在指定的间隔内返回均匀间隔的数字。
y = np.linspace(0, 20, ny)
x,y = np.meshgrid(x, y)
#x = np.zeros((ny, nx))
#y = np.zeros((ny, nx))
a=(dx**2)+(dy**2)
b=dx*dy+dx*dy
c=(dx**2)+(dy**2)
d=dx*dy-dx*dy
def build_up_xy(a, b, c, d,nt):
    xn = np.empty_like(x)
    yn = np.empty_like(y)
    for n in range(nt):
        xn = x.copy()
        yn = y.copy()
        x[1:-1, 1:-1] = (a*(xn[1:-1, 2:] +xn[1:-1, 0:-2]) -0.5*b*(xn[2:, 2:] -xn[0:-2, 2:] -xn[2:, 0:-2] +xn[0:-2,0:-2]) +c*(xn[2:, 1:-1] + xn[0:-2, 1:-1]) +d**2)/(2*(a+c))
        y[1:-1, 1:-1] = (a * (yn[1:-1, 2:] + yn[1:-1, 0:-2]) - 0.5*b*(yn[2:, 2:] - yn[0:-2, 2:] -yn[2:, 0:-2] + yn[0:-2, 0: -2])+c*(yn[2:,1:-1] + yn[0:-2, 1:-1])+d**2)/(2*(a + c))
        x[0, 0] = 0
        x[0, -1] = 50
        x[-1, -1] = 50
        x[-1, 0 ]=0
        #x[2, 3] = 30
        #x[0, 4] = 50
        y[-1, 0] = 20
        y[0, 0 ]= 0
        y[-1, 10] = 20
        y[50:81, 160:201] = 0
        y[0, -1] = 0
    return x, y,
x,y =build_up_xy(a, b, c, d, nt)
#x,y = numpy.meshgrid(x, y)
print(x)
print(y)
'''x,y=np.meshgrid(x,y)
#x,y=build_up_xy(a, b, c, d,nt)
print(x)'''
plt.figure(figsize=(20,50)) # 图像尺寸18x9cm

plt.subplot(1,1,1)
plt.plot(x,y,color="C0")
plt.plot(x.transpose(),y.transpose(),color="C1",alpha=0.5)
#plt.plot(x.transpose(),y.transpose(),color="C1")

#plt.subplot(1,2,2)
#plt.title("$f(z)=z^2$")
#plt.plot(x2,y2,color="C0")
#plt.plot(x2.transpose(),y2.transpose(),color="C1")
plt.xlim(-10,60)
plt.ylim(-10,30)
plt.show()

'''fig = pyplot.figure(figsize=(60,25), dpi=100)
# plotting the pressure field as a contour
pyplot.scatter(x, y, alpha=0.5)
pyplot.grid(b=True, which='both', axis='both')
pyplot.xlabel('X')
pyplot.ylabel('Y');
pyplot.show();'''

请问一下,我这个那些地方有问题,总是画不出网格

你可以把你的需求说一下。你的帖子我给你调整格式了。学一下markdown

def wangyang():
    return 1 + 2

就是请老师们帮我看看我这个程序用于生成贴体网格合不合适,那些地方需要调整

1 个赞

你想做什么呀?把你的问题描述清楚呀。不然怎么帮你呢?

我想画一个结构性的贴体网格,但是利用我离散的公式画不出来,
是我公式的问题还是代码的问题

你大概要画什么样的网格。2维,3维?结构化
\Delta x = \Delta y
长度
1\times 1
还是什么?
这种叫贴体网格?
然后呢?你要求解什么问题?


就是画一个类似于这样的网格
老师我说的不清楚,不好意思

你这样,想清楚做什么再说,不行,画个草图好吧。

利用上面的公式和代码画一个这样的网格

好的。我抽时间给你画一个。

老师太谢谢您了,您有空也帮我看看我那个有什么问题

我现在帮你找到几个参考。你可以看一下。

  1. python - How can I plot 2d FEM results using matplotlib? - Stack Overflow
  2. GitHub - inducer/meshpy: 2D/3D simplicial mesh generator interface for Python (Triangle, TetGen, gmsh)
    可能你需要自己动下手。一下子我也不知道怎么用python帮你画。只能说不难啦。