24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2212  |  回复: 14

xk6891

至尊木虫 (著名写手)

[交流] 【求助】读文本数据出现段错误[fortran]已有2人参与

写的一段程序出现“段错误”,还请高手指点
code:
program main
implicit none
real a,b,c,a1,b1,c1,alpha,beta,gamma
character(len=10) today,now
integer i,j
character ele(768)
real pos1(256,3)
real pos2(256,3)
real ala(256,3)
character(len=20) rub1,rub2,rub3,rub4
pos1=1
pos2=1
ala=1


open(17,file='inname.dat')
read(17,"(A6,3(3XF6.3),3(2XF5.2),A16)"rub1,a1,b1,c1,alpha,beta,gamma,rub2

do i=1,768
read(17,"(A30,3(F8.3),A23,A1)"rub3,(pos1(i,j),j=1,3),rub4,ele(i)
ala(i,1)=pos1(i,1)/a1
ala(i,2)=pos1(i,2)/b1
ala(i,3)=pos1(i,3)/c1
end do
close(17)

open(23,file='OH_diople.car')
write(23,"(A17)""!BIOSYM archive 3"
write(23,"(A6)""PBC=ON"
write(23,"(A35)""Materials Studio Generated CAR File"

CALL DATE_AND_TIME(date=today,time=now)
write(23,"(A5,2XA8,2XA10)""!DATE",today,now

write(*,*)"Input the value of lattice parameters:"
write(*,*)"a="
read(*,*)a
write(*,*)"b="
read(*,*)b
write(*,*)"c="
read(*,*)c
write(23,"(A3,6(2XF8.4),1XA4)""PBC",a,b,c,alpha,beta,gamma,"(P1)"

do i=1,768
if(mod(i,3)/=0)then
pos2(i,1)=ala(i,1)*a
pos2(i,2)=ala(i,2)*b
pos2(i,3)=ala(i,3)*c
if(mod(i,2)/=0)then
write(23,"(A1,3(F15.9),1XA4,1XI1,7XA1,A1)"ele(i),pos2(i,j),"XXXX",1,ele(i),"+"
else
write(23,"(A1,3(F15.9),1XA4,1XI1,7XA1,A1)"ele(i),pos2(i,j),"XXXX",1,ele(i),"-"
end if
end if
end do
write(23,"(A3)""end"
write(23,"(A3)""end"
close(23)

stop

end program
要读的文件:
CRYST1   20.700   20.700   20.700  90.00  90.00  90.00 P 1           1
ATOM      1  OH2 TIP3W   5       3.668  10.082  15.904  1.00  0.00      WT1  O
ATOM      2  H1  TIP3W   5       3.224  10.451  15.101  1.00  0.00      WT1  H
ATOM      3  H2  TIP3W   5       3.092  10.379  16.627  1.00  0.00      WT1  H
ATOM      4  OH2 TIP3W  21       5.186  16.696  12.072  1.00  0.00      WT1  O
ATOM      5  H1  TIP3W  21       6.083  16.979  11.816  1.00  0.00      WT1  H
ATOM      6  H2  TIP3W  21       5.337  15.832  12.490  1.00  0.00      WT1  H
ATOM      7  OH2 TIP3W  44       3.786  16.318   1.310  1.00  0.00      WT1  O
ATOM      8  H1  TIP3W  44       3.781  15.388   1.196  1.00  0.00      WT1  H
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
只有一个提示“段错误”,一天了没找到错误原因
回复此楼
人生自古多险阻,勤者自得天酬助。试问否泰何所依,枯藤老枝待新抽。临渊踌躇终迈步,振翅鹏起云霄冲。似是前程甚堪忧,他日振臂揽苍穹。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

whl2dxl

木虫 (小有名气)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢回复! 2011-04-24 18:00:46
您好,你的这几行是给变量付初值吗?
pos1=1
pos2=1
ala=1
如果是的话,这个程序就有点问题了
因为上面几个变量你定义的都是数组,要给数组付初值的话,就要把所有的都付一遍 ,  例如:
do  i=1,256
do  j=1,3
pos1(i,j)=1
pos2(i,j)=1
ala(i,j)=1
end do
end do
还有, 你读入文件时的格式都正确吗?

[ Last edited by whl2dxl on 2011-4-24 at 01:10 ]
2楼2011-04-24 01:09:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)

引用回帖:
Originally posted by whl2dxl at 2011-04-24 01:09:04:
您好,你的这几行是给变量付初值吗?
pos1=1
pos2=1
ala=1
如果是的话,这个程序就有点问题了
因为上面几个变量你定义的都是数组,要给数组付初值的话,就要把所有的都付一遍 ,  例如:
do  i=1,256
do   ...

pos1=1
pos2=1
ala=1
恩,还好,我记得这个格式在哪里看过,好像是彭的fortran95中,是通过的程序
人生自古多险阻,勤者自得天酬助。试问否泰何所依,枯藤老枝待新抽。临渊踌躇终迈步,振翅鹏起云霄冲。似是前程甚堪忧,他日振臂揽苍穹。
3楼2011-04-24 09:20:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


小木虫(金币+0.5):给个红包,谢谢回帖
能不能贴一个不带表情的代码,根本就看不出来原来是咋写的……
4楼2011-04-24 11:08:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)

引用回帖:
Originally posted by snoopyzhao at 2011-04-24 11:08:37:
能不能贴一个不带表情的代码,根本就看不出来原来是咋写的……

CODE:
program main
implicit none
real a,b,c,a1,b1,c1,alpha,beta,gamma
character(len=10) today,now
integer i,j
character ele(768)
real pos1(256,3)
real pos2(256,3)
real ala(256,3)
character(len=20) rub1,rub2,rub3,rub4
pos1=1
pos2=1
ala=1


open(17,file='inname.dat')
read(17,"(A6,3(3XF6.3),3(2XF5.2),A16)"rub1,a1,b1,c1,alpha,beta,gamma,rub2

do i=1,768
read(17,"(A30,3(F8.3),A23,A1)"rub3,(pos1(i,j),j=1,3),rub4,ele(i)
ala(i,1)=pos1(i,1)/a1
ala(i,2)=pos1(i,2)/b1
ala(i,3)=pos1(i,3)/c1
end do
close(17)

open(23,file='OH_diople.car')
write(23,"(A17)""!BIOSYM archive 3"
write(23,"(A6)""PBC=ON"
write(23,"(A35)""Materials Studio Generated CAR File"

CALL DATE_AND_TIME(date=today,time=now)
write(23,"(A5,2XA8,2XA10)""!DATE",today,now

write(*,*)"Input the value of lattice parameters:"
write(*,*)"a="
read(*,*)a
write(*,*)"b="
read(*,*)b
write(*,*)"c="
read(*,*)c
write(23,"(A3,6(2XF8.4),1XA4)""PBC",a,b,c,alpha,beta,gamma,"(P1)"

do i=1,768
if(mod(i,3)/=0)then
pos2(i,1)=ala(i,1)*a
pos2(i,2)=ala(i,2)*b
pos2(i,3)=ala(i,3)*c
if(mod(i,2)/=0)then
write(23,"(A1,3(F15.9),1XA4,1XI1,7XA1,A1)"ele(i),pos2(i,j),"XXXX",1,ele(i),"+"
else
write(23,"(A1,3(F15.9),1XA4,1XI1,7XA1,A1)"ele(i),pos2(i,j),"XXXX",1,ele(i),"-"
end if
end if
end do
write(23,"(A3)""end"
write(23,"(A3)""end"
close(23)

stop

end program

人生自古多险阻,勤者自得天酬助。试问否泰何所依,枯藤老枝待新抽。临渊踌躇终迈步,振翅鹏起云霄冲。似是前程甚堪忧,他日振臂揽苍穹。
5楼2011-04-24 12:42:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)

引用回帖:
Originally posted by snoopyzhao at 2011-04-24 11:08:37:
能不能贴一个不带表情的代码,根本就看不出来原来是咋写的……

呵呵,多谢您以前在一篇帖子中的指点,我虽然记不得如何出的错了,但是现在fortran读写处理一般的数据文件已经略略入门了
人生自古多险阻,勤者自得天酬助。试问否泰何所依,枯藤老枝待新抽。临渊踌躇终迈步,振翅鹏起云霄冲。似是前程甚堪忧,他日振臂揽苍穹。
6楼2011-04-24 12:44:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


小木虫(金币+0.5):给个红包,谢谢回帖
你确定你上面贴的代码可以编译?呵呵……
7楼2011-04-24 13:43:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)

引用回帖:
Originally posted by snoopyzhao at 2011-04-24 13:43:43:
你确定你上面贴的代码可以编译?呵呵……

介个……?
人生自古多险阻,勤者自得天酬助。试问否泰何所依,枯藤老枝待新抽。临渊踌躇终迈步,振翅鹏起云霄冲。似是前程甚堪忧,他日振臂揽苍穹。
8楼2011-04-24 14:52:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by xk6891 at 2011-04-24 14:52:04:
介个……?

我是指 5 楼的,很明显很显的语法错误……
9楼2011-04-24 15:02:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)

引用回帖:
Originally posted by snoopyzhao at 2011-04-24 15:02:25:
我是指 5 楼的,很明显很显的语法错误……

CODE:
program main
implicit none
real a,b,c,a1,b1,c1,alpha,beta,gamma
character(len=10) today,now
integer i,j
character ele(768)
real pos1(256,3)
real pos2(256,3)
real ala(256,3)
character(len=20) rub1,rub2,rub3,rub4
pos1=1
pos2=1
ala=1


open(17,file='inname.dat')
read(17,"(A6,3(3XF6.3),3(2XF5.2),A16)")rub1,a1,b1,c1,alpha,beta,gamma,rub2

do i=1,768
read(17,"(A30,3(F8.3),A23,A1)")rub3,(pos1(i,j),j=1,3),rub4,ele(i)
ala(i,1)=pos1(i,1)/a1
ala(i,2)=pos1(i,2)/b1
ala(i,3)=pos1(i,3)/c1
end do
close(17)

open(23,file='OH_diople.car')
write(23,"(A17)")"!BIOSYM archive 3"
write(23,"(A6)")"PBC=ON"
write(23,"(A35)")"Materials Studio Generated CAR File"

CALL DATE_AND_TIME(date=today,time=now)
write(23,"(A5,2XA8,2XA10)")"!DATE",today,now

write(*,*)"Input the value of lattice parameters:"
write(*,*)"a="
read(*,*)a
write(*,*)"b="
read(*,*)b
write(*,*)"c="
read(*,*)c
write(23,"(A3,6(2XF8.4),1XA4)")"PBC",a,b,c,alpha,beta,gamma,"(P1)"

do i=1,768
if(mod(i,3)/=0)then
pos2(i,1)=ala(i,1)*a
pos2(i,2)=ala(i,2)*b
pos2(i,3)=ala(i,3)*c
if(mod(i,2)/=0)then
write(23,"(A1,3(F15.9),1XA4,1XI1,7XA1,A1)")ele(i),pos2(i,j),"XXXX",1,ele(i),"+"
else
write(23,"(A1,3(F15.9),1XA4,1XI1,7XA1,A1)")ele(i),pos2(i,j),"XXXX",1,ele(i),"-"
end if
end if
end do
write(23,"(A3)")"end"
write(23,"(A3)")"end"
close(23)

stop

end program

人生自古多险阻,勤者自得天酬助。试问否泰何所依,枯藤老枝待新抽。临渊踌躇终迈步,振翅鹏起云霄冲。似是前程甚堪忧,他日振臂揽苍穹。
10楼2011-04-24 15:32:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xk6891 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见