精华内容
下载资源
问答
  • 一维对流扩散方程逆过程LS-SVM
  • 一维扩散方程差分格式的数值计算

    千次阅读 2018-12-24 16:19:12
    摘要:采用FTCS显格式、Dufort-Frankel显格式、Lassonen隐格式、Grank-Nicolson隐格式对一维扩散方程进行数值计算,得到不同时间y方向扩散的速度。结果表明了不同差分格式的差别。 关键词:扩散方程;差分格式;...

    摘要:采用FTCS显格式、Dufort-Frankel显格式、Lassonen隐格式、Grank-Nicolson隐格式对一维扩散方程进行数值计算,得到不同时间y方向扩散的速度。结果表明了不同差分格式的差别。
    关键词:扩散方程;差分格式;FORTRAN;

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    module global
      implicit none
      real::u(1000,1000)
    end module
      
    program main
      use global
      implicit none
      
      ! 声明变量
      integer i,n,h
      real nu,dt,dy,t,m
      integer nt,ny
      character(len=20) chazhi
      real::e(1000),b(1000),c(1000)
     
    
      ! 输入数据
      nu = 0.000217      ! 扩散系数
      ny  = 41           ! y方向
      t  = 1.08          ! 时间(s)
      dy = 0.001         ! 网格大小
      dt = 0.002         ! 时间步长
      nt = int(t/dt)     ! 总的时间步数
      m  = nu*dt/dy**2   ! 系数
       
      ! 初值及边界条件
      do i = 1,ny
        u(i,1) = 0.0
      end do
      do n = 1,nt
        u(1,n)  = 40.0
        u(ny,n) = 0.0
      end do
      
      !选择插值方式
      write(*,*)"FTCS  or    DF   or    LA   or   CN  ?"
      read(*,*) chazhi
      
      if(chazhi == 'FTCS')then   ! FTCS
        do n = 1,nt-1            !时间递进
          do i = 2,ny-1          ! y方向空间递进
            u(i,n+1) = u(i,n) + m *(u(i+1,n)-2*u(i,n)+u(i-1,n))
          end do
        end do
        
      else if(chazhi == 'DF')then  ! DF
        do n = 2,nt-1  
          do i = 2,ny-1 
            u(i,n+1) = (1-2*m)/(1+2*m) * u(i,n-1) + 2*m/(1+2*m) *(u(i+1,n)+u(i-1,n))
          end do
        end do
        
      else if(chazhi == 'LA')then  ! LA
          do i = 1, 1000
            e(i)  = m              ! LA方法系数A,i-1
            b(i)  = -(2*m+1)       ! LA方法系数B,i
            c(i)  = m              ! LA方法系数C,i+1
          end do
          
          do n = 1,nt-1
            call LAsolve(e,b,c,ny,n)  ! 求解n+1时刻的三对角方程组
          end do
          
      else if(chazhi == 'CN')then  ! CN
          do i = 1, 1000
            e(:)  = m/2            ! LA方法系数A,i-1
            b(:)  = -(m+1)         ! LA方法系数B,i
            c(:)  = m/2            ! LA方法系数C,i+1
          end do
          
          do n = 1,nt-1
            call CNsolve(e,b,c,ny,n,m) ! 求解n+1时刻的三对角方程组
          end do
      else
        write(*,*)"错误"
        stop
        
      end if
      
      ! 输出
      open(unit=11,file=trim(chazhi)//'_result.txt')
      write(11,*)"    TIME           U            Y"
      do n = 1,nt
        if(n*dt==0.18 .or. n*dt==0.36.or.n*dt==0.54.or.n*dt==0.72.or.n*dt==0.90.or.n*dt==1.08)then
          do i = 1,ny
            write(11,*)n*dt,u(i,n),(i-1)*dy!读入这些时刻u的值。
          end do
          write(11,*)
        end if
      end do
    
      close(11)
      
      stop 
      end program
    
    subroutine  LAsolve(e,b,c,ny,n)
      use global
      implicit none
      
      integer i,k
      integer n,ny
      real::e(1000),b(1000),c(1000),y(1000),f(1000)
      real::L(1000),M(1000)
        
      M(1) = b(1)
      do i=2,ny
        L(i)=e(i)/M(i-1)
        M(i)=b(i)-L(i)*c(i-1)
      end do
      f(1) = -u(1,n)-e(1)*u(1,n)        ! 1处的边界值
      f(ny) = -u(ny,n)-c(ny)*u(ny,n)    ! ny处的边界值
      do i = 2,ny-1
        f(i) = -u(i,n)
      end do
    
        
      !------开始回带,求得y,1>>ny
      y(1)=f(1)
      do i=2,ny
        y(i)=f(i)-L(i)*y(i-1)
      end do
      
      !-----开始回带,求得n+1时刻的u,ny>>1
      u(ny-1,n+1)=y(ny)/m(ny)   
      do i=ny-1,2,-1
        u(i,n+1)=(y(i)-c(i)*u(i+1,n))/m(i)
      end do
    end subroutine LAsolve
      
      
    subroutine  CNsolve(e,b,c,ny,n,w)
      use global
      implicit none
      
      integer i,k
      integer n,ny
      real w
      real::e(1000),b(1000),c(1000),y(1000),f(1000)
      real::L(1000),M(1000)
        
      M(2) = b(2)
      do i=3,ny-1
        L(i)=e(i)/M(i-1)
        M(i)=b(i)-L(i)*c(i-1)
      end do
                                                                           
      f(2)    = (w-1)*u(2,n) - w/2*(u(3,n)+u(1,n))-e(1)*u(1,n)           ! 1处的边界值
      f(ny-1) = (w-1)*u(ny-1,n) - w/2*(u(ny,n)+u(ny-1,n))-c(ny)*u(ny,n)  ! ny处的边界值
      do i = 3,ny-2
        f(i) = (w-1)*u(i,n) - w/2*(u(i+1,n)+u(i-1,n))
      end do
        
      !------开始回带,求得y,1>>ny
      y(2)=f(2)
      do i=3,ny-1
        y(i)=f(i)-L(i)*y(i-1)
      end do
      
      !-----开始回带,求得n+1时刻的u,ny>>1
      u(ny-1,n+1)=y(ny-1)/m(ny-1)   
      do i=ny-2,2,-1
        u(i,n+1)=(y(i)-c(i)*u(i+1,n))/m(i)
      end do
      
    end subroutine CNsolve
    
    
    展开全文
  • 对于求解二维扩散方程,构造了类简单、实用的有限差分并行算法。采用斜向差分算子[1],建立斜向隐式差分格式,再结合边界条件,对扩散方程进行求解。此算法虽然是隐格式,但可以利用边界条件显式计算,既保持了...
  • 2、第次接触matplotlib中ion()和ioff()。ion()开启了交互模式,ioff() 感觉像暂停图像 同时,查阅其他博客得到: python可视化库matplotlib有两种显示模式: 阻塞(block)模式 交互(interactive)模式 在...

    来自流沙
    来自流沙公众号

    认识:
    1、理论:差分离散,较为基础
    2、第一次接触matplotlib中ion()和ioff()。ion()开启了交互模式,ioff() 感觉像暂停图像
    同时,查阅其他博客得到:
    python可视化库matplotlib有两种显示模式:
    阻塞(block)模式
    交互(interactive)模式
    在Python Consol命令行中,默认是交互模式。而在python脚本中,matplotlib默认是阻塞模式。
    3、第一次接触pause(time)
    4、%.4f s"% (n*dt) 的用法
    5、动态打印,每次打印完用cla().

    import numpy as np
    import matplotlib.pyplot as plt
    
    nx = 41 # 网格节点数
    dx = 2 / (nx - 1)  # 网格尺寸
    nt = 40 # 时间步长
    nu = 0.3 # 扩散系数
    sigma = 0.2 # 定义中间变量,用于确定时间步长dt
    dt = dx**2 * sigma / nu
    
    # 初始条件
    u = 2 * np.ones(nx)
    u[int(0.5/dx):int(1/dx)] = 1
    un = np.ones(nx)
    plt.ion() # 开启了交互模式,打开交互模式 ,同时打开两个窗口显示图片
    plt.show()
    for n in range(nt):
    	plt.cla()   # 清空
    	un = u.copy()
    	for i in range(1,nx-1):
    		u[i] = un[i] + dt * nu / dx**2 * (un[i+1] - 2 * un[i] + u[i-1])
    		#绘制图形
    	plt.plot(np.linspace(0,2,nx),u,'r',linewidth=3)
    	plt.ylim(0.9,2.1)    # 确定y上下轴
    	plt.title("time: %.4f s"% (n*dt)) # 将时间打印到图形
    	plt.pause(0.2)  # 控制图形显示时间
    plt.ioff()      #没有使用ioff()关闭的话,则图像会一闪而过,并不会常留。要想防止这种情况,需要在plt.show()之前加上ioff()命令。
    plt.show()
    

    在这里插入图片描述
    其中查询资料的过程遇到figure,故简单记录一下figure用法
    plt.figure(num = “as”, figsize = (4, 4)) # num 若是数字则figure 数字;若是字母则为名字

    import numpy as np
    import matplotlib.pyplot as plt
    x = np.linspace(-1, 1, 50)
    y1 = 2 * x + 1
    y2 = x**2
    plt.figure(num = "as", figsize = (4, 4))   # num 若是数字则figure 数字;若是字母则为名字
    plt.plot(x, y1)
    plt.plot(x, y2, color = 'red', linewidth = 1.0, linestyle = '--')
    plt.show()
    

    在这里插入图片描述
    本文纯粹是记录学习过程所用。

    展开全文
  • 对于变量ϕ\phiϕ的输运方程为: ∂(ρϕ)∂t+∇⋅(ρϕu)=∇⋅(Γ∇ϕ)+Sϕ(1) \frac{\partial ( \rho \phi)}{\partial t} + \...其中,Γ\GammaΓ为扩散系数。 方程(1)(1)(1)从左到右的各项分别是时间项、对流项、

    对于变量ϕ\phi输运方程为:

    (ρϕ)t+(ρϕu)=(Γϕ)+Sϕ(1) \frac{\partial ( \rho \phi)}{\partial t} + \nabla \cdot (\rho \phi \bold u) = \nabla \cdot (\Gamma \nabla \phi) + S_\phi \tag{1}

    其中,Γ\Gamma为扩散系数。
    方程(1)(1)从左到右的各项分别是时间项、对流项、扩散项和源项。将方程(1)(1)中略去时间项和对流项就是稳态扩散方程
    (Γϕ)+Sϕ=0(2) \nabla \cdot (\Gamma \nabla \phi) + S_\phi = 0 \tag{2}

    对方程(2)(2)在有限控制体内积分,并根据高斯散度定理有,
    CV(Γϕ)dV+CVSϕdV=A~n(Γϕ)dA+CVSϕdV=0(3)\begin{aligned} &\int_{CV} \nabla \cdot (\Gamma \nabla \phi) dV + \int_{CV} S_\phi dV \\ \\ &= \int_{\tilde A} \bold n \cdot (\Gamma \nabla \phi) dA + \int_{CV} S_\phi dV = 0 \end{aligned} \tag{3}

    其中,n\bold n为边界面A~\tilde A的法向量。
    考虑一维模型,扩散方程为
    ddx(Γdϕdx)+S=0(4) \frac{d}{dx}\left( \Gamma \frac{d\phi}{dx} \right) + S = 0 \tag{4}

    要离散方程(4)(4)首先要生成网格,如下图,将一维计算域分成5段(即5个网格单元),每个网格单元就是一个有限控制体。两端边界为A和B,每个网格单元有一个节点,如W、P和E,节点一般为网格单元的中心点,也是变量保存的位置。两个相邻节点的中点是网格单元的边界。
    网格划分
    网格与边界之间的距离关系如下图,
    在这里插入图片描述
    扩散方程的离散主要包括两个部分:散度的离散和梯度的离散。

    散度的离散

    根据方程式(3)(3),一维扩散方程(4)(4)在控制体单元ΔV\Delta V(边界为A~\tilde A)上的积分有,
    ΔVddx(Γdϕdx)dV+ΔVSdV=A~nddx(Γdϕdxi)dA+ΔVSdV=(ΓAdϕdx)e(ΓAdϕdx)w+SˉΔV=0(5)\begin{aligned} &\int_{\Delta V} \frac{d}{dx} \left( \Gamma \frac{d \phi}{dx} \right)dV + \int_{\Delta V} SdV \\ \\ &= \int_{\tilde A} \bold n \cdot \frac{d}{dx}\left( \Gamma \frac{d \phi}{dx} \bold i \right) dA + \int_{\Delta V}SdV \\ \\ &= \left( \Gamma A \frac{d \phi}{dx} \right)_e - \left( \Gamma A \frac{d \phi}{dx} \right)_w + \bar{S} \Delta V = 0 \end{aligned} \tag{5}

    其中,AA是边界面的面积, Sˉ\bar{S}为控制体单元内的平均值。从上图中可见,在边界ww处,边界的法向量n\bold n是指向x轴负向的,所以ni=1\bold n \cdot \bold i = -1

    梯度的离散

    方程式(5)(5)仅是半离散方程,需要进一步对梯度项dϕdx\frac{d \phi}{dx}进行离散。从式中看见,梯度项都是位于单元边界面位置的,而边界处是不保存变量值,边界面两边的节点会保存变量值,因此可以用有限差分法求解边界面的导数,比如用二阶中心差分格式,
    (Γdϕdx)w=ΓwϕPϕWδxWP(6a) \left( \Gamma \frac{d \phi}{dx} \right)_w = \Gamma_w \frac{\phi_P - \phi_W}{\delta x_{WP}} \tag{6a}

    (Γdϕdx)e=ΓeϕEϕPδxPE(6b) \left( \Gamma \frac{d \phi}{dx} \right)_e = \Gamma_e \frac{\phi_E - \phi_P}{\delta x_{PE}} \tag{6b}

    源项SˉΔV\bar S \Delta V通常是变量ϕP\phi_P的函数,这里假设为线性关系,即
    SˉΔV=Su+SPϕP(7) \bar S \Delta V = S_u + S_P \phi_P \tag{7}

    将式(6a)(6a)(6b)(6b)(7)(7)带入到式(5)(5)中,
    ΓeAeϕEϕPδxPEΓwAwϕPϕWδxWP+(Su+SPϕP)=0(8) \Gamma_e A_e \frac{\phi_E - \phi_P}{\delta x_{PE}} - \Gamma_w A_w \frac{\phi_P - \phi_W}{\delta x_{WP}} + (S_u + S_P \phi_P) = 0 \tag{8}
    重新整理方程式(8)(8)得,
    (ΓeδxPE+ΓwδxWPSP)ϕP=(ΓwδxWP)ϕW+(ΓeδxPE)ϕE+Su(9) \left( \frac{\Gamma_e}{\delta x_{PE}} + \frac{\Gamma_w}{\delta x_{WP}} - S_P\right) \phi_P = \left( \frac{\Gamma_w}{\delta x_{WP}} \right) \phi_W + \left( \frac{\Gamma_e}{\delta x_{PE}} \right) \phi_E + S_u \tag{9}
    简化一下,
    aPϕP=aWϕW+aEϕE+Su(10) a_P \phi_P = a_W \phi_W + a_E \phi_E + S_u \tag{10}
    其中各系数为
    {aW=ΓwδxWPaE=ΓeδxPEaP=aW+aESP(11)\begin{cases} a_W &= \frac{\Gamma_w}{\delta x_{WP}} \\ \\ a_E &= \frac{\Gamma_e}{\delta x_{PE}} \\ \\ a_P &= a_W + a_E - S_P \end{cases}\tag{11}

    方程式(5)(5)中的扩散系数Γ\Gamma有两种方法来计算:算术平均法(相当于线性插值)和调和平均法(详见文献[2])。这里先采用简单的线性插值来表示,即
    Γw=ΓW+ΓP2(12a) \Gamma_w = \frac{\Gamma_W + \Gamma_P}{2} \tag{12a}

    Γe=ΓP+ΓE2(12b) \Gamma_e = \frac{\Gamma_P + \Gamma_E}{2} \tag{12b}

    参考资料:
    1. Versteeg H K , Malalasekera W . An introduction to computational fluid dynamics : the finite volume method = 计算流体动力学导论[M]. 世界图书出版公司, 2010.
    2. 陶文铨. 数值传热学-第2版[M]. 西安交通大学出版社, 2001.
    展开全文
  • 提出了种求解二维扩散方程的分块隐式格式,它结合了古典显格式、古典隐式格式和crank-nicolson格式,该格式具有明显的并行性、很高的精度、很好的稳定性。
  • 萨科多尔戈扎特 一维对流扩散方程求解器 具有恒定系数 具有时间相关系数 具有时间和空间相关的系数
  • | | | |--|--| | | |

    | 在这里插入图片描述 |在这里插入图片描述 |
    |-在这里插入图片描述-|-在这里插入图片描述-|
    | | |

    展开全文
  • 利用积分模估计的方法研究一维与二维情形中快扩散方程解的消失现象。研究过程中巧妙利用低维空间中的 Sobolev嵌入不等式和Holder不等式得出解发生消失的充分条件及其衰退估计。特别是,临界情形时解的消失行为依赖于...
  • 用对流步进行计算,并将 其结果作为已知值运用到扩散步的求解中,构造出一种新的一维对流扩散方程的数值求解格式。数值试验表明,相 比其他已有格式,该格式可有效控制格式的数值振荡和数值扩散问题,易于编程,精度高,...
  • 一维扩散方程的比例和积分输出调节的Riesz基方法
  • 研究了来自于半导体器件和等离子体中的一维双极量子漂移-扩散模型的稳态.在有合适边界条件的有界区域里,先利用Schauder不动点定理和能量估计的技巧,证明一维双极量子漂移-扩散模型的稳态的存在性和唯一性;其次,...
  • 考虑一根细棒的导热问题,假设截面内温度均匀,问题简化为一维稳态导热问题。棒两端边界是恒温边界条件,TA=100℃T_A=100℃TA​=100℃,TB=500℃T_B=500℃TB​=500℃。导热系数k=1000W/m.Kk=1000 W/m.Kk=1000W/m.K,...
  • 运用待定系数方法,将一维纯对流下的 HAUC2格式推广应用到一维对流扩散方程的数值模拟中.数值试验结果表明,新推导的格式具有数值耗散和数值频散都比较小的优点.与其他格式计算结果比较,该格式能较好地模拟对流扩散波...
  • 主要需要的专业知识:计算热物理,matlab编程语言(研究生课程,还是需要一些基础知识的) 举个栗子: 对于具有常扩散系数的一维扩散方程: 其中D是常数,初始条件为: 边界条件为: 按照将方程和定条件无量纲化,...
  • 该方法首先利用截断误差为O(τ2 + h 4 )的四阶紧致交替方向隐式( ADI)差分格式在不同尺寸的网格上对原方程进行求解,然后利用 Richard-son外推技术外推次,得到了三维扩散方程具有 O(τ4 + h 6 )精度的数值 。...
  • 77中)和示例,用于求解一维和二维空间中的React扩散方程。 在数学界的区域中,积分因子与频谱方法一起用于消除与React扩散模型中的扩散项相关的刚度,从而允许使用明确的高阶时间步长。 这对于两个(或更高)空间...
  • 适用于线性,非线性对流,一维和二维的Burger's和Poisson方程,使用标准壁函数的一维扩散方程,具有Dirichlet和Neumann BC的二维导热对流方程,完整的Navier-Stokes方程以及与Poisson方程耦合的腔体和二维通道流。
  • 求解一维对流扩散方程的有限差分方法(上风格式)c++
  • 本文提出了全新的格子行走方法求解对流扩散方程.对流扩散方程广泛应用于水中污染物的运移模拟.然而在对流占优的情况下,常用的求解对流扩散方程的有限差分方法和有限元法会出现严重的数值弥散和数值振荡等不良数值...
  • 一维扩散方程的离散推导中方程式 (4)(4)(4)的形式,这里相当于 Γ=1S=n2(T−T∞)}(4)\left. \begin{aligned} \Gamma =&1 \\ \\ S =& n^2(T-T_\infin) \end{aligned} \right \} \tag{4}Γ=S=​1n2(T−T∞​)​⎭⎪...
  • 冯立伟+张成+屈福志"""摘要:针对二对流扩散方程边值问题,采用三角形剖分,使用二线性有限元进行计算分析。采用matlab编写了计算程序,使用算例进行了数值实验,实验结果表明数值具有较高的计算精度。关键词...
  • 一维非定常对流扩散方程的新型差分方法 ,王红月,王坤,文章旨在构造了一种新型的有限差分方法来求解一维非定常的对流扩散方程。首先,本文通过基变换将非定常的对流扩散方程转化为非定
  • 提出了数值求解一维非定常对流扩散方程的一种两层四阶紧致隐式差分格式,其截断误差为O(τ2+h4)。采用VOltNeumann方法证明了格式是无条件稳定的,并且由于每一时间层上只用到了3个网格点,所以可直接采用追赶法...
  • 把局部一维方法与一维交替分段方法相结合构造了解二维扩散问题的交替分段显-稳方法(LASE-I),方法简单且是无条件稳定,特别适用于并行和肉量计算。数值结果表明,该方法在计算速度和精度方面优于Evans...
  • 为了利用Crank-Nicholson和ADI开发二对流扩散方程的有效数值方案,讨论了时变非线性系统。 这些方案在每个时间级别上的时间和求解时间都是二阶准确的。 该程序与迭代方法相结合来求解非线性系统。 通过选择两个...
  • 本文首先讨论了类(2+1)非线性扩散方程的一般形式并对其进行对称分类,然后利用对称约化得到了(2+1)非线性扩散方程相应于这些单参数不变群的群不变.
  • 一维变系数的对流扩散方程提出了一个紧致差分格式,从而将格式的收敛阶提高为O(τ2+h4),通过Fou-rier级数的方法和Lax等价性定理证明了差分格式的稳定性和收敛性,数值实验结果很好地验证了理论的正确性。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,430
精华内容 972
关键字:

一维扩散方程的解