Fortran Coder

查看: 34470|回复: 33
打印 上一主题 下一主题

[求助] 一个计算相关的编程思路/方法讨论

[复制链接]

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
楼主
发表于 2015-3-23 22:21:14 | 显示全部楼层
本帖最后由 li913 于 2015-3-23 22:33 编辑

上面的代码,主题结构没啥可更改的了,适当优化一下。比如
up=(x(i)*a+y(i)*b+z(i)*c)*(x(i)*a+y(i)*b+z(i)*c) 改为:
up=(x(i)*a+y(i)*b+z(i)*c);up=up*up 。

建议改为动态数组
[Fortran] 纯文本查看 复制代码
 program main
    implicit none
    integer i,j
    integer ios
    integer m,n
    character(160) :: filename1,filename2,filename3,filename4,tmp 
    integer id, n10, n20
    integer n1,n2
    real x1,y1,z1
    real x2,y2,z2
    real,allocatable:: x(:),y(:),z(:),s1(:),s2(:),s3(:),coss(:)
    real v1,v2,v3
    real a,b,c,d
    real up,down,avg
    integer GetFileN,ii,jj
    character(len=10)::status

    print*, 'Running...'
    filename1='c6_'
    filename2='c8_'
    do m=1,1   ! number of files to read
		write(tmp,*)m             
		open(10,file=trim(filename1)//trim(adjustl(tmp))//'.dat',status='old' )
		open(20,file=trim(filename2)//trim(adjustl(tmp))//'.dat',status='old' )
		n10=GetFileN(10); n20=GetFileN(20); n10=min(n10,n20)
		! 此处分配动态数组
		allocate(x(n10),y(n10),z(n10),s1(n10),s2(n10),s3(n10))
		a=0; b=0; c=1 ! labframe
		d = a*a+b*b+c*c
		do i=1,n10
			read(10,*) n1,x1,y1,z1   !read c6
			read(20,*) n2,x2,y2,z2   !read c8
			x(i)=x2-x1    !c8-c6 x
			y(i)=y2-y1    !c8-c6 y
			z(i)=z2-z1    !c8-c6 z
			!  up=(x(i)*a+y(i)*b+z(i)*c)*(x(i)*a+y(i)*b+z(i)*c)
			up=(x(i)*a+y(i)*b+z(i)*c); up=up*up !优化
			! down=(x(i)*x(i)+y(i)*y(i)+z(i)*z(i))*(a*a+b*b+c*c)
			down=(x(i)*x(i)+y(i)*y(i)+z(i)*z(i))*d !优化
			coss(i)=up/down   ! cos(i)^2 
			s1(i)=(3*coss(i)-1)/2  !n=0 d00
			!s2(i)=-sqrt(1.5)*sqrt(1-coss(i))*sqrt(coss(i)) ! n=1 d10
			s2(i)=-sqrt(1.5*(1-coss(i))*coss(i)) !优化
			s3(i)=sqrt(0.375)*(1-coss(i)) !n=2 d20
		enddo
    enddo
    print*, 'Done.'
    close(10)
    close(20)
end

评分

参与人数 1贡献 +16 收起 理由
fcode + 16 赞一个!

查看全部评分

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-6 16:02

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表