explicitscheme.f90
来自「求解粘性Burger方程和非粘性Burger方程的各种差分格式」· F90 代码 · 共 63 行
F90
63 行
subroutine SchemeOne(unOne,unZero,lenX,deltX,deltT,coeff)
! The difference scheme on page 84
real unOne(lenX+1),unZero(lenX+1)
integer k
do k=2,lenX
unOne(k)=unZero(k)-deltT/(2*deltX)*unZero(k)*(unZero(k+1)-unZero(k-1)) &
+coeff*deltT/(deltX**2)*(unZero(k+1)-2*unZero(k)+unZero(k-1))
end do
unOne(1)=bounLeft(time) ! Dirichlet boundary value
unOne(lenX+1)=bounRight(time)
end subroutine SchemeOne
!===================================================================================
subroutine SchemeFour(unOne,unZero,lenX,deltX,deltT,coeff)
! The difference scheme on page 258
! Lax-Wendroff scheme
real unOne(0:lenX),unZero(0:lenX)
integer k
real :: cofFir,coeSec
cofFir=deltT/deltX
coeSec=coeff*deltT/(deltX**2)
do k=1,lenX-1
unOne(k)=unZero(k)-cofFir/2.*unZero(k)*(unZero(k+1)-unZero(k-1)) &
+(coeSec+(cofFir*unZero(k))**2/2.)*(unZero(k+1)-2*unZero(k)+unZero(k-1))
end do
unOne(0)=bounLeft(time) ! Dirichlet boundary value
unOne(lenX)=bounRight(time)
end subroutine SchemeFour
!===================================================================================
subroutine SchemeFive(unOne,unZero,lenX,deltX,deltT,coeff)
! The difference scheme on page 346(6.10.1)
! Flux splitting scheme
real unOne(0:lenX),unZero(0:lenX)
integer k
real :: cofFir,coeSec,deltU
cofFir=deltT/deltX
coeSec=coeff*deltT/(deltX**2)
do k=1,lenX-1
if(unZero(k)<0) then
deltU=cofFir*(unZero(k+1)-unZero(k))
else
deltU=cofFir*(unZero(k)-unZero(k-1))
end if
unOne(k)=unZero(k)-deltU*unZero(k)+coeSec*(unZero(k+1)-2*unZero(k)+unZero(k-1))
end do
unOne(0)=bounLeft(time) ! Dirichlet boundary value
unOne(lenX)=bounRight(time)
end subroutine SchemeFive
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?