【问题标题】:2D Heat Conduction with Python使用 Python 进行二维热传导
【发布时间】:2020-11-11 13:13:56
【问题描述】:

the output of the study///// 我刚开始学习Python,所以我是python新手。我为二维热传导编写了一个简单的代码。我不知道我的代码有什么问题。结果太奇怪了。我认为温度分布没有正确显示。我已经搜索了很多,但不幸的是我找不到我的问题的任何答案。谁能帮我? 谢谢

# Library

import numpy                           
from matplotlib import pyplot     



# Grid Generation

nx = 200
ny = 200                                    
dx = 2 / (nx-1)
dy = 2 / (ny-1)

# Time Step

nt = 50                                                                   
alpha = 1                                 
dt = 0.001                     

# Initial Condition (I.C) and Boundry Condition (B.C)

T = numpy.ones((nx, ny))                         # I.C (U = Velocity)
x = numpy.linspace(0,2,nx)                       # B.C
y = numpy.linspace(0,2,ny)                       # B.C

Tn = numpy.empty_like(T)                         #initialize a temporary array
X, Y = numpy.meshgrid(x,y)

T[0, :] = 20          #  B.C
T[-1,:] = -100        #  B.C
T[:, 0] = 150         #  B.C
T[:,-1] = 100         #  B.C
# Solver
###Run through nt timesteps
    
for n in range(nt + 1): 
    Tn = T.copy()
        
    T[1:-1, 1:-1] = (Tn[1:-1,1:-1] + 
                        ((alpha * dt / dx**2) * 
                        (Tn[1:-1, 2:] - 2 * Tn[1:-1, 1:-1] + Tn[1:-1, 0:-2])) +
                        ((alpha * dt / dy**2) * 
                        (Tn[2:,1: -1] - 2 * Tn[1:-1, 1:-1] + Tn[0:-2, 1:-1])))
        
    T[0, :] = 20          # From B.C
    T[-1,:] = -100        # From B.C
    T[:, 0] = 150         # From B.C
    T[:,-1] = 100         # From B.C

   
fig = pyplot.figure(figsize=(11, 7), dpi=100)
pyplot.contourf(X, Y, T)
pyplot.colorbar()
pyplot.contour(X, Y, T)
pyplot.xlabel('X')
pyplot.ylabel('Y');

    

【问题讨论】:

  • 什么是“奇怪”?请清楚说明问题所在。显示代码的输出以及预期的输出。是计算的问题吗?随着可视化?
  • 谢谢。我添加了结果的照片。问题是,我认为温度分布没有正确显示。任何帮助将不胜感激。

标签: python python-3.x numpy matplotlib heat


【解决方案1】:

您正在使用Forward Time Centered Space 离散化方案求解当且仅当alpha*dt/dx**2 + alpha*dt/dy**2 < 0.5 时稳定的热方程。使用 dtdxdyalpha 的值,您将获得

alpha*dt/dx**2 + alpha*dt/dy**2 = 19.8 > 0.5

这意味着您的数值解会很快发散。要解决这个问题,您需要使dt 更小和/或dxdy 更大。例如,对于dt=2.5e-5 和其他在你得到alpha*dt/dx**2 + alpha*dt/dy**2 = 0.495 之前的其余部分,1000 次迭代后的解决方案将如下所示: 或者,您可以使用不同的离散化方案,例如 API scheme,它是无条件稳定的,但更难实现。

【讨论】:

    猜你喜欢
    • 2019-03-03
    • 2018-05-21
    • 2011-01-27
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2014-05-06
    • 1970-01-01
    相关资源
    最近更新 更多