一维对流方程在A、B、C三种差分格式
一、上机目的
用数值方法计算一维对流方程在A、B、C三种差分格式下的解。. ,1,2。并作相关讨论。
二、实验原理
三、上机要求:
-FORTRAN的基本操作。
、B、C三种格式下的解。
。
四、实验程序
以A格式为例,对微分方程进行离散化, 得出 A 格式的差分解的表达式:
B、C格式同理可以写出。由此编写如下的Fortran程序。
注:除了循环时间层的计算公式略有不同外,三个程序没有区别,因此这里只用一个主程序,并根据格式选择的不同,采用条件语句判断执行哪一部分循环体。
!空间节点321,dx= 输出依次为(时间,空间,数值)
program main
implicit none
real dx_dt !定义Δx/Δt的值
integer abc,r_t,i,j,k !定义变量,abc为格式类型,r_t为时间网格数,其余为循环变量
real,allocatable::s(:,:) !定义存储矩阵s
write(*,*) "输入dx_dt=,1,2"
read(*,*) dx_dt
write(*,*) "选择格式,A,B,C分别输入1,2或3"
read(*,*) abc
!根据格式选择生成相应的文件
if(abc==1) then
open(unit=8,file='')
elseif(abc==2) then
open(unit=8,file='')
elseif(abc==3) then
open(unit=8,file='')
endif
r_t=160/dx_dt !计算时间网格总数
do j=i,321,1
s(i,j)=s(i-1,j)-(s(i-1,j)-s(i-1,j-1))/dx_dt
write(8,*)i,',',j,',',s(i,j)
end do
do k=1,i-1,1
s(i,k)=0
write(8,*)i,',',k,',',s(i,k)
end do
end do
endif
!完成提示
write(*,*)'数据已输出至源目录'
pause
stop
end program
五、实验结果及分析
程序运行后在对应目录下生成csv表格文件,根据输入的ΔxΔt的值不同生成对应的网格并计算各节点数值。
这里以ΔxΔt=1为例,就A、B、C三种格式的结果进行分析。
首先我们用MATLAB软件画出初始波形,以便于对比(这里三个格式没有区别)。
A格式,根据输出结果,选取不同时间节点用MATLAB软件绘制波形
一维对流方程在A、B、C三种差分格式 来自淘豆网www.taodocs.com转载请标明出处.