- 积分
- 544
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-7-8
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2014-8-11 09:39:34
|
显示全部楼层
是用的while循环,如下,在update the solution部分,是每循环一步,更新一下Z 和Y 的数据,提前给Z和Y一个范围,用if判断n 大于它们的维数了,如果超了,再往后扩展,不知如何实现。
因为不止这一个地方用,先记一下数再重新算一遍的方法不太可取,不知道 有没有直接解决它的方法呢
do while((t<tfinal).and.(t+h>t))
if(t+h>tfinal)then
h=tfinal-t
end if
!----------------------------------------------------------------------!
! Compute the slopes
call iceocean(t,y1,temp)
f(:,1)=temp
do j=1,5
call iceocean(t+alpha(j)*h,y1+matmul(h*f,beta(:,j)),temp)
f(:,j+1)=temp
end do
!----------------------------------------------------------------------!
! Estimate the error and the acceptable error
delta=sqrt(maxval(matmul(h*f,gama(:,2))*matmul(h*f,gama(:,2))))
tau=tol*max(sqrt(maxval(y1*y1)),1.0)
!----------------------------------------------------------------------!
! Update the solution only if the error is acceptable
if(delta<=tau)then
t=t+h
y1=y1+h*matmul(f,gama(:,1))
call iceocean(t,y1,temp)
n=n+1
if(n>size(Z))
?
end if
Z(n)=t
Y(n,:)=y1
end if
if(delta/=0.0)then
h=min(hmax, 0.8*h*(tau/delta)**pow)
end if
!----------------------------------------------------------------------!
! end the main loop
end do |
|