一维对流方程在A、B、C三种差分格式.docxVIP

一维对流方程在A、B、C三种差分格式.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、上机目的 用数值方法计算一维对流方程在A、B、C三种差分格式下的解。取为0.05. 取值为0.5,1,2。并作相关讨论。 二、实验原理 三、上机要求: 1.学会对MS-FORTRAN的基本操作。 2.用Fortran编写程序计算一维对流方程在A、B、C三种格式下的解。 3.讨论各种格式下不同的值的差分格式解的特点。 四、实验程序 以A格式为例,对微分方程进行离散化, 得出 A 格式的差分解的表达式: B、C格式同理可以写出。由此编写如下的Fortran程序。 注:除了循环时间层的计算公式略有不同外,三个程序没有区别,因此这里只用一个主程序,并根据格式选择的不同,采用条件语句判断执行哪一部分循环体。 !空间节点321,dx=0.05 输出依次为(时间,空间,数值) 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=0.5,1,2 read(*,*) dx_dt write(*,*) 选择格式,A,B,C分别输入1,2或3 read(*,*) abc !根据格式选择生成相应的文件 if(abc==1) then open(unit=8,file=out_a.csv) elseif(abc==2) then open(unit=8,file=out_b.csv) elseif(abc==3) then open(unit=8,file=out_c.csv) endif r_t=160/dx_dt !计算时间网格总数 allocate(s(r_t+1,321)) !分配存储矩阵的空间 !第一层赋初值 do i=1,140,1 s(1,i)=0 write(8,*)1,,,i,,,s(1,i) end do do i=141,161,1 s(1,i)=1+0.05*(i-161) write(8,*)1,,,i,,,s(1,i) end do do i=162,181,1 s(1,i)=1-0.05*(i-161) write(8,*)1,,,i,,,s(1,i) end do do i=182,321,1 s(1,i)=0 write(8,*)1,,,i,,,s(1,i) end do !循环时间层,根据格式的选择来判断执行哪一部分 if(abc==1) then do i=2,r_t,1 do j=i,322-i,1 s(i,j)=s(i-1,j)-(s(i-1,j+1)-s(i-1,j-1))/(dx_dt*2) write(8,*)i,,,j,,,s(i,j) end do do k=1,i-1,1 !余下部分赋值0,下同 s(i,k)=0 write(8,*)i,,,k,,,s(i,k) end do do k=322-i,321,1 s(i,k)=0 write(8,*)i,,,k,,,s(i,k) end do end do elseif(abc==2) then do i=2,r_t+1,1 do j=1,322-i,1 s(i,j)=s(i-1,j)-(s(i-1,j+1)-s(i-1,j))/dx_dt write(8,*)i,,,j,,,s(i,j) end do do k=322-i,321,1 s(i,k)=0 write(8,*)i,,,k,,,s(i,k) end do end do elseif(abc==3) then do i=2,r_t+1,1 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

文档评论(0)

139****4073 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档