⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 explicitscheme.f90

📁 求解粘性Burger方程和非粘性Burger方程的各种差分格式
💻 F90
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -