版块导航
正在加载中...
客户端APP下载
论文辅导
申博辅导
登录
注册
帖子
帖子
用户
本版
应《网络安全法》要求,自2017年10月1日起,未进行实名认证将不得使用互联网跟帖服务。为保障您的帐号能够正常使用,请尽快对帐号进行手机号验证,感谢您的理解与支持!
24小时热门版块排行榜
>
论坛更新日志
(541)
>
虫友互识
(114)
>
硕博家园
(43)
>
论文道贺祈福
(20)
>
教师之家
(19)
>
考博
(14)
>
论文投稿
(10)
>
考研
(9)
>
博后之家
(8)
>
基金申请
(7)
>
有机交流
(6)
>
休闲灌水
(6)
>
导师招生
(4)
>
公派出国
(3)
>
第一性原理
(2)
>
数理科学综合
(1)
小木虫论坛-学术科研互动平台
»
计算模拟区
»
程序语言
»
Fortran
»
一个FORTRAN90程序,越界了,希望高手帮助
6
1/1
返回列表
查看: 1320 | 回复: 5
只看楼主
@他人
存档
新回复提醒
(忽略)
收藏
在APP中查看
zyj8119
木虫
(著名写手)
应助: 65
(初中生)
贵宾: 0.003
金币: 915.1
散金: 1440
红花: 35
帖子: 2936
在线: 1329.4小时
虫号: 664177
注册: 2008-11-29
性别: GG
专业: 理论和计算化学
[
求助
]
一个FORTRAN90程序,越界了,希望高手帮助
CODE:
module inv_mat
contains
subroutine inv(A,invA,N)
implicit real*8(a-z)
integer::n
integer::i
real*8::A(n,n),invA(n,n),E(n,n)
E=0
do i=1,n
E(i,i)=1
end do
call mateq(A,B,X,N,N)
end subroutine inv
subroutine mateq(A,B,X,N,M)
implicit real*8(a-z)
integer::N,M,i
real*8::A(M,N),B(N,M),X(N,M)
real*8::btemp(N),xtemp(N)
do i=1,M
btemp=B(:,i)
call elgauss(A,btemp,xtemp,N)
X(:,i)=xtemp
end do
end subroutine mateq
subroutine elgauss(A,b,x,N)
implicit real*8(a-z)
integer::i,k,N
integer::id_max
real*8::A(N,N),b(N),x(N)
real*8::Aup(N,N),bup(N)
real*8::Ab(N,N+1)
real*8::vtemp1(N+1),vtemp2(N+1)
Ab(1:N,1:N)=A
Ab(:,N+1)=b
do k=1,N-1
elmax=dabs(Ab(k,k))
id_max=k
do i=k+1,n
if(dabs(Ab(i,k))>elmax)then
elmax=Ab(i,k)
id_max=i
end if
end do
vtemp1=Ab(k,:)
vtemp2=Ab(id_max,:)
Ab(k,:)=vtemp2
Ab(id_max,:)=vtemp1
do i=k+1,N
temp=Ab(i,k)/Ab(k,k)
Ab(i,:)=Ab(i,:)-temp*Ab(k,:)
end do
end do
Aup(:,:)=Ab(1:N,1:N)
bup(:)=Ab(:,N+1)
call uptri(Aup,bup,x,n)
end subroutine elgauss
subroutine uptri(A,b,x,N)
implicit real*8(a-z)
integer::i,j,N
real*8::A(N,N),b(N),x(N)
x(N)=b(N)/A(N,N)
do i=n-1,1,-1
x(i)=b(i)
do j=i+1,N
x(i)=x(i)-a(i,j)*x(j)
end do
x(i)=x(i)/A(i,i)
end do
end subroutine uptri
end module inv_mat
module m_bfs
use inv_mat
contains
subroutine solve(x0,N,tol)
implicit real*8(a-z)
integer::i,n,itmax=50
real*8::x1(n),x0(n),y(n),f0(n),f1(n),dx(n)
real*8::v1(n),v2(n),v3(n)
real*8::H0(n,n),H1(n,n),df(n,n)
real*8::m1(n,n),m2(n,n),m3(n,n)
call jac(df,x0)
call inv(df,H0,N)
write(11,101)
write(12,102)
do i=1,itmax
call func(f0,x0)
x1=x0-matmul(H0,f0)
dx=x1-x0
call func(f1,x1)
y=f1-f0
v1=matmul(H0,y)
t1=vdot(y,v1,n)
t2=vdot(dx,y,N)
u=1d0+t1/t2
m1=vvmat(dx,dx,n)*u
m2=vvmat(dx,y,n)
m2=matmul(m2,H0)
v3=matmul(H0,y)
m3=vvmat(v3,dx,n)
t3=vdot(dx,y,n)
H1=(m1-m2-m3)/t3
H1=H0+H1
write(12,103)i,H0
x0x=1
H0=H1
write(11,104)i,x0
dx2=dsqrt(dx(1)**2+dx(2)**2)
if(dx2
end do
101 format(/,T5,'BFS方法计算序列',/)
102 format(/,T5,'BFS方法H矩阵序列为:',/)
103 format(T5,'iter=',I4,/,
(
F16.10/),/)
104 format(I8,3F16.10)
end subroutine solve
function vdot(a,b,N)
integer::i,N
real*8::a(n),b(n),vdot
vdot=0
do i=1,N
vdot=vdot+a(i)*b(i)
end do
end function vdot
function vvmat(a,b,n)
integer::n,i,j
real*8::a(n),b(n),vvmat(n,n)
do i=1,n
do j=1,n
vvmat(i,j)=a(i)*b(j)
end do
end do
end function vvmat
subroutine func(f,x)
implicit real*8(a-z)
real*8::x(3),f(3),pi=3.14159263589793
f(1)=3*x(1)-dcos(x(2)*x(3))-1d0/2
f(2)=x(1)**2-81*(x(2)+0.1d0)**2+dsin(x(3))+1.06d0
f(3)=dexp(-x(1)*x(2))+20*x(3)+(10*pi-3d0)/3
end subroutine func
subroutine jac(df,x)
implicit real*8(a-z)
real*8::x(3),df(3,3)
df(1,1)=3d0
df(1,2)=x(3)*dsin(x(2)*x(3))
df(1,3)=x(2)*dsin(x(2)*x(3))
df(2,1)=2*x(1)
df(2,2)=-162*(x(1)+0.1)
df(2,3)=dcos(x(3))
df(3,1)=-x(2)*dexp(-x(1)*x(2))
df(3,2)=-x(1)*dexp(-x(1)*x(2))
df(3,3)=20d0
end subroutine jac
end module m_bfs
program main
use inv_mat
use m_bfs
implicit real*8(a-z)
integer::N=3
real*8::x0(3)
open(unit=11,file='result.txt')
open(unit=12,file='Hmatrix.txt')
x0=(/0.1d0,0.1d0,-0.1d0/)
call solve(x0,n,1d-8)
end program main
回复此楼
» 猜你喜欢
A期刊撤稿
已经有5人回复
临港实验室与上科大联培博士招生1名
已经有8人回复
26申博自荐
已经有7人回复
想换工作。大多数高校都是 评职称时 认可5年内在原单位取得的成果吗?
已经有4人回复
带资进组求博导收留
已经有9人回复
求助大佬们,伤口沾上了乙腈
已经有6人回复
最近几年招的学生写论文不引自己组发的文章
已经有9人回复
» 本主题相关价值贴推荐,对您同样有帮助:
请教一个应用read时出现数组越界的问题,谢谢
已经有7人回复
有会看fortran程序的,能帮忙看看这个程序吗?
已经有10人回复
怎么使用fortran程序创建一个立方晶格模型
已经有5人回复
如何改变fortran的浮点精度
已经有28人回复
求助高手帮忙编一个Fortran的小程序,重金悬赏......
已经有15人回复
求助计算机高人,编写个Fortran程序
已经有13人回复
请教一个fortran小程序编译出错的问题,谢谢
已经有9人回复
写了一个fortran90的小程序,编译通不过,请大侠帮忙
已经有59人回复
【求助】如何写FORTRAN程序实现求平均最近邻距离
已经有34人回复
【求助】求高手关于Fortran数据读写的问题。【已完结】
已经有12人回复
【求助】请问fortran90与95区别大吗
已经有4人回复
【求助】此FORTRAN90程序没有错误,但是运行不出来。
已经有4人回复
【求助】求助个Fortran计算,应该不难,半天搞不定,请高手帮忙
已经有11人回复
好好学习,天天向上。
1楼
2011-11-11 23:00:16
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
maomao1210
金虫
(正式写手)
程序强帖: 5
应助: 2
(幼儿园)
金币: 1431.3
散金: 242
红花: 16
沙发: 1
帖子: 991
在线: 441.5小时
虫号: 253215
注册: 2006-05-20
性别:
MM
专业: 考古理论
★
jjdg(金币+1): 感谢参与 2011-11-12 00:40:40
xzhdty: 2011-11-12 22:51:02
ben_ladeng: 专家考核存档 2011-11-12 23:23:07
引用回帖:
1楼
:
Originally posted by
zyj8119
at 2011-11-11 23:00:16:
[code]module inv_mat
contains
subroutine inv(A,invA,N)
implicit real*8(a-z)
integer::n
integer::i
real*8::A(n,n),invA(n,n),E(n,n)
E=0
do i=1,n
E(i,i)=1
end do
call mateq(A,B,X,N,N)
e ...
大哥;
子程序 inv, X是数组,你忘记定义了。X(n,n)
赞
一下
(3人)
回复此楼
2楼
2011-11-11 23:15:23
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
zyj8119
木虫
(著名写手)
应助: 65
(初中生)
贵宾: 0.003
金币: 915.1
散金: 1440
红花: 35
帖子: 2936
在线: 1329.4小时
虫号: 664177
注册: 2008-11-29
性别: GG
专业: 理论和计算化学
引用回帖:
2楼
:
Originally posted by
maomao1210
at 2011-11-11 23:15:23:
大哥;
子程序 inv, X是数组,你忘记定义了。X(n,n)
谢谢提醒,修改过来了,编译通过。。
赞
一下
回复此楼
好好学习,天天向上。
3楼
2011-11-11 23:29:18
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
snoopyzhao
至尊木虫
(职业作家)
程序强帖: 16
应助: 157
(高中生)
贵宾: 0.02
金币: 18844.7
红花: 29
帖子: 3803
在线: 1422.4小时
虫号: 183750
注册: 2006-02-13
专业: 污染生态化学
【答案】应助回帖
★
dubo(金币+1): 多谢应助 2011-11-12 12:26:34
zyj8119(金币+10): 建议很好,会认真考虑撒。。。 2011-11-12 14:04:34
ben_ladeng: 专家考核存档 2011-11-12 23:23:16
引用回帖:
3楼
:
Originally posted by
zyj8119
at 2011-11-11 23:29:18:
谢谢提醒,修改过来了,编译通过。。
从这个错误来看,一定要用 implicit none……
另外,尽可能不要用 real*4、real*8 这些编译器扩展的用法
赞
一下
(2人)
回复此楼
4楼
2011-11-12 12:13:01
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
exabyss916
新虫
(小有名气)
应助: 1
(幼儿园)
金币: 177
散金: 65
帖子: 78
在线: 57小时
虫号: 507882
注册: 2008-02-20
专业: 理论和计算化学
引用回帖:
4楼
:
Originally posted by
snoopyzhao
at 2011-11-12 12:13:01:
从这个错误来看,一定要用 implicit none……
另外,尽可能不要用 real*4、real*8 这些编译器扩展的用法
能不能简单说一下为什么尽可能不要用 real*4、real*8 这些编译器扩展的用法?
赞
一下
回复此楼
5楼
2011-11-19 10:45:59
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
snoopyzhao
至尊木虫
(职业作家)
程序强帖: 16
应助: 157
(高中生)
贵宾: 0.02
金币: 18844.7
红花: 29
帖子: 3803
在线: 1422.4小时
虫号: 183750
注册: 2006-02-13
专业: 污染生态化学
★
余泽成(金币+1): 谢谢参与应助! 2011-11-19 14:31:13
引用回帖:
5楼
:
Originally posted by
exabyss916
at 2011-11-19 10:45:59:
能不能简单说一下为什么尽可能不要用 real*4、real*8 这些编译器扩展的用法?
因为不是标准,所以尽可能不要用……
有兴趣的话,可以搜一下 comp.lang.fortan 上的 is real*8 a standard declaration style?
大概有 80 多条回复,基本上都是 Fortran 界的 old-timer...
赞
一下
(1人)
回复此楼
6楼
2011-11-19 10:55:33
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
相关版块跳转
第一性原理
量子化学
计算模拟
分子模拟
仿真模拟
程序语言
我要订阅楼主
zyj8119
的主题更新
6
1/1
返回列表
如果回帖内容含有宣传信息,请如实选中。否则帐号将被全论坛禁言
普通表情
龙
兔
虎
猫
百度网盘
|
360云盘
|
千易网盘
|
华为网盘
在新窗口页面中打开自己喜欢的网盘网站,将文件上传后,然后将下载链接复制到帖子内容中就可以了。
信息提示
关闭
请填处理意见
关闭
确定