[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