在房屋形状的域

时间:2015-06-11 19:38:45

标签: python numpy matplotlib pde

目前我正在进行一项研究,以重新模拟几个房屋形状域中的温度分布(dirichlet)(首先,我将模拟稳态并将继续处于时间变量的不稳定状态。)

有三种不同的屋顶几何形状,这里是域的图片,使其更容易理解: https://www.dropbox.com/sh/92lmwv67k8chzi1/AABmozTBmQqeTz_fGigBsvsaa?dl=0

边界条件是屋顶(底部)的温度为30℃,墙壁(内部)的温度为25℃,地面(顶部)的温度为25℃。所有这些都是稳态模型的条件。

到目前为止,我已经完成了使用手写矩阵的数学方法中的矩形域,并使用一种强力的Python-numpy-matplotlib代码构造矩阵。这是代码:

import numpy as np
import matplotlib.pyplot as plt


floor=25
rightwall=25
leftwall=25
ceiling=30 
width=19
height=20
numofnodes=width*height
#all the variables above depend on user input

K=[]
K = [[0 for i in range(numofnodes)]for j in range(numofnodes)]

for i in range (numofnodes):
    for j in range (numofnodes):
        if(i==j):
            K[i][j]=-4
for i in range(numofnodes-1):
    K[i][i+1]=1
for i in range(1,numofnodes):
    K[i][i-1]=1
for i in range(numofnodes-width):
    K[i][i+width]=1
for i in range(width, numofnodes):
    K[i][i-width]=1
for i in range(1,height):
    K[width*i][(width*i)-1]=0
for i in range(height):
    K[(width*i)-1][(width*i)]=0 

D1=np.zeros([numofnodes,1])
for i in range(width):
    D1[i]=leftwall

D2=np.zeros([numofnodes,1])
for i in range(height):
    D2[(i*width)]=floor

D3=np.zeros([numofnodes,1])
for i in range(1,height+1):
    D3[(i*width)-1]=ceiling

D4=np.zeros([numofnodes,1])
for i in range(numofnodes-width, numofnodes):
    D4[i]=rightwall
D=np.zeros([numofnodes,1])
Dnew=np.negative(D1+D2+D3+D4)

Kinv=np.linalg.inv(K)
T=np.dot(Kinv,Dnew)

Tnew=np.reshape(T,(height,width))
Tmatrix=np.transpose(Tnew)

fig = plt.figure(figsize=(6, 4))
ax = fig.add_subplot(1,1,1)
ax.set_title('temp distribution')
plt.imshow(Tmatrix,origin='lower', interpolation='bilinear')
ax.set_aspect('auto')
plt.clim(25,30)
plt.colorbar(orientation='vertical')
plt.grid()
plt.show()

我对代码的残酷性表示道歉,代码旨在尽可能地作为纯算法。 现在,我很难构建“屋顶”形状,即使对于最简单的形状(在域图中最右边)。

这些是我的目标图片(复制自基于MATLAB的文献): https://www.dropbox.com/s/lxan6i5q0hr3ax3/goals.PNG?dl=0

有人能告诉我如何在屋顶一侧(任意或不规则域)实现稳态有限差分,并将其与矩形域代码一起加入,如上图所示?或者也许告诉我一些帮助文献或案例的例子来阅读?

如果问题违反了Stackoverflow的问题,请致歉,这是我第一次来这里,感谢您的帮助。

0 个答案:

没有答案