24小时热门版块排行榜    

CyRhmU.jpeg
查看: 860  |  回复: 24
当前主题已经存档。

nono2009

超级版主 (文学泰斗)

No gains, no pains.

优秀区长优秀区长优秀区长优秀区长优秀版主


小木虫(金币+0.5):给个红包,谢谢回帖交流
1. 看你的计算目的,其实就没必要用数组x,y,z。
2. compile可以后,试试单步执行查错。
21楼2009-11-19 21:55:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+2,VIP+0):谢谢!专家真是尽心尽力,对活动是不为所动。呵呵 11-19 22:10
自己用比较笨的办法来计算行号,分配空间,输出变量。
program read_data
        implicit none
        integer*4 row,i
        character(80),allocatable :: cha( : )
        row=0
        open(32,file='your_text_file')
        do while (.not. eof(32))
                row=row+1
                read(32,*)
        end do
        rewind(32)
        allocate(cha(row))
        do i=1,row
        read(32,'(A80)') cha(i)
        write(*,'(a80)') cha(i)
        end do
        close(32)
        deallocate(cha)
end program
22楼2009-11-19 21:58:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)


nono2009(金币+1,VIP+0):谢谢应助! 11-19 22:11
计算行数是wc -l filename
用cat的话会把文件输出
引用回帖:
Originally posted by tpp001 at 2009-11-19 21:45:

谢谢你的回复,经过大家的指导我已经能计算出一个文件的行数了,在linux用cat -n 就可以.
可是我的程序又有其他问题了.望帮忙谢谢
我下面这个程序 compile没有错误,可是execute就不行,
我程序的主题就是,调用一 ...

23楼2009-11-19 21:59:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+5,VIP+0):向你学习! 11-19 23:14
按照你的格式改写好了
用你发的数据测试了一下是可以的。
其实本来根本就不用去操心有多少行的,因为你只是为了计算总和。
直接按照前面的那样只判断到文件末没有就可以了。
这样改写只是为了随便试试而已。如果只是关心总和也不用去计算到底多少行。
使用了eof函数,intel编译器可以。CVF不大清楚,没有安装。
如果不行的话就使用前面说的read的IOSTAT来判断到行末没有。

==================
这个是会计算行数,然后再分配空间的
=================
program read_data
        implicit none
        real*8 ljcc,vicc
        real*8,external :: cljinteraction
        real*8,allocatable :: x(: ),y(: ),z(: )
        character*5,allocatable :: atomname(: )
        integer*4 row,i
        row=0
        open(32,file='co2ben.txt')
        do while (.not. eof(32))
                row=row+1
                read(32,*)
        end do
        rewind(32)
        allocate(x(row),y(row),z(row),atomname(row))
        vicc=0.0
        do i=1, row
                read(32,*) atomname(i),x(i),y(i),z(i)
                        if (atomname(i) .eq. 'Cb') then !如果原子是Cb,就调用下面函数
                                ljcc=cljinteraction(x(i),y(i),z(i))
                        vicc=vicc+ljcc !累加函数数值
                        endif
        enddo
        write(6,*) vicc !输出函数数值的总和
        deallocate(x,y,z,atomname)
end program
function cljinteraction(x,y,z)
implicit none
real*8 cljinteraction
real*8 x,y,z !输入变量
real*8 ri2c, sr2c, sr6c, sr12c !中间使用量
   ri2c=(x-3.08)**2+(y-3.37)**2+(z-3.129)**2
   sr2c=0.32535/ri2c
   sr6c=sr2c*sr2c*sr2c
   sr12c=sr6c**2
   cljinteraction=sr12c-sr6c
return
end function
===================
这个就是只计算这个结果的版本
====================
program read_data
        implicit none
        real*8 ljcc,vicc
        real*8,external :: cljinteraction
        real*8 x,y,z
        character*5 atomname
        vicc=0.0
        open(32,file='co2ben.txt')
        do while (.not. eof(32))
                read(32,*) atomname,x,y,z
                        if (atomname .eq. 'Cb') then !如果原子是Cb,就调用下面函数
                                ljcc=cljinteraction(x,y,z)
                        vicc=vicc+ljcc !累加函数数值
                        endif
        enddo
        write(6,*) vicc !输出函数数值的总和
end program
function cljinteraction(x,y,z)
implicit none
real*8 cljinteraction
real*8 x,y,z !输入变量
real*8 ri2c, sr2c, sr6c, sr12c !中间使用量
   ri2c=(x-3.08)**2+(y-3.37)**2+(z-3.129)**2
   sr2c=0.32535/ri2c
   sr6c=sr2c*sr2c*sr2c
   sr12c=sr6c**2
   cljinteraction=sr12c-sr6c
return
end function
引用回帖:
Originally posted by tpp001 at 2009-11-19 21:47:
这是我的输入文件 'co2ben.txt' 部分数据
Oa   3.106000       3.385000       3.639000   
Cb   3.119000       3.271000       3.627000   
Oc   4.060000      -2.784000       1.788000   
Oa   2 ...

[ Last edited by tjyl on 2009-11-19 at 22:37 ]
24楼2009-11-19 22:25:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tpp001

金虫 (著名写手)

引用回帖:
Originally posted by tjyl at 2009-11-19 22:25:
按照你的格式改写好了
用你发的数据测试了一下是可以的。
其实本来根本就不用去操心有多少行的,因为你只是为了计算总和。
直接按照前面的那样只判断到文件末没有就可以了。
这样改写只是为了随便试试而已。如 ...

太感谢,我在编程这方面是新手,刚刚开始学习,周围没有人可以请教!谢谢帮忙,真的!
迷茫在知识的海洋里,需要你的指导。thankyou
25楼2009-11-19 23:09:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tpp001 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见