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

📄 bsstep.f90

📁 FORTRANvisualfortran常用数值算法集及源码
💻 F90
字号:
SUBROUTINE bsstep(y,dydx,nv,x,htry,eps,yscal,hdid,&
                  hnext,derivs)
PARAMETER(nmax=10,imax=11,nuse=7,one=1.e0,&
          shrink=0.95e0,grow=1.2e0)
DIMENSION y(nv),dydx(nv),yscal(nv),yerr(nmax),&
     ysav(nmax),dysav(nmax),yseq(nmax),nseq(imax)
REAL h,htry,x,xsav,hnext
INTEGER i,j,k,m1
!USES mmid,rzextr
DATA nseq /2,4,6,8,12,16,24,32,48,64,96/
h=htry
xsav=x
do i=1,nv
  ysav(i)=y(i)
  dysav(i)=dydx(i)
end do
do
  do i=1,imax
    call mmid(ysav,dysav,nv,xsav,h,nseq(i),yseq,&
             derivs)
    xest=(h/nseq(i))**2
    call rzextr(i,xest,yseq,y,yerr,nv,nuse)
    errmax=0.
    do j=1,nv
      errmax=max(errmax,abs(yerr(j)/yscal(j)))
    end do
    errmax=errmax/eps
    if(errmax<one) then
      x=x+h
      hdid=h
      if(i==nuse) then
        hnext=h*shrink
      else if(i==nuse-1) then
        hnext=h*grow
      else
        hnext=(h*nseq(nuse-1))/nseq(i)
      endif
      return
    endif
  end do
  h=0.25*h/2**((imax-nuse)/2)
  if(x+h==x) pause 'step size underflow'
end do
END SUBROUTINE bsstep

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -