柱坐标下多重网格法解泊松方程 | 您所在的位置:网站首页 › 柱坐标系方程 › 柱坐标下多重网格法解泊松方程 |
写了一个柱坐标下多重网格法解泊松方程的code,外边界采用的是第一类边界条件,直接用解析解赋值,内边界需要注意的是在x=0的转轴上面有奇点。 柱坐标下泊松方程形式为 当x趋向于0时, 将方程离散化,其中第三项采用中心差分格式。 开始采用了有残差的多重网格形式,一直不收敛,后来索性残差去掉了,收敛的还可以。 import math import numpy as np import matplotlib.pyplot as plt from scipy import interpolate import time def coarsen(x_fine, y_fine, phi_fine):# Lagrange type interpolation, two order x2 = np.linspace(x_fine[0],x_fine[-1],int(x_fine.size/2)) y2 = np.linspace(y_fine[0],y_fine[-1],int(y_fine.size/2)) f = interpolate.interp2d(x_fine, y_fine, phi_fine, kind='cubic')#{‘linear’, ‘cubic’, ‘quintic’} phi2 = f(x2,y2) return phi2, x2, y2 def fine(x_coarse, y_coarse, phi_coarse):# Lagrange type interpolation, two order x2 = np.linspace(x_coarse[0],x_coarse[-1],int(x_coarse.size*2)) y2 = np.linspace(y_coarse[0],y_coarse[-1],int(y_coarse.size*2)) f = interpolate.interp2d(x_coarse, y_coarse, phi_coarse, kind='cubic')#{‘linear’, ‘cubic’, ‘quintic’} phi2 = f(x2,y2) return phi2, x2, y2 def Relax2( b, phi, x, z,leveli): omega = 1.95 ite = 10*3**leveli # the iteration time, you can set by other condition k = 0 h_r = x[1]-x[0] h_z = z[1]-z[0] while(k |
CopyRight 2018-2019 实验室设备网 版权所有 |