我想在FORTRAN中编写一个程序,它计算距离探测器一定距离的准时光源的探测效率。光盘探测器被认为是完美的:即光子吸收落在它上面的所有东西。所以我在这里工作3D,我使用ux,uy和uz使用球面坐标系随机引导光子;
效率与探测器半径
以下是准时来源的简单代码:
program sourceponc
integer i,N
real x,y,z,eff,count,Dds,rd,ux,uy,uz,t
count=0
do i=1,N
theta = acos(1-2*rand())
phi = 2*pi*rand()
ux=cos(theta)sin(phi)
uy=sin(theta)sin(phi)
uz=cos(theta)
t=Dds/uz
x=ux*t
y=uy*t
if(sqrt(x**2+y**2+z**2).le.1)then
count=count+1
endif
end do
eff=count/N
print*,eff
end
编译时我一直收到这些错误:
sourceponc.f90:11:
ux=cos(theta)sin(phi)
1
Error: Unclassifiable statement at (1)
sourceponc.f90:12:
uy=sin(theta)sin(phi)
1
Error: Unclassifiable statement at (1)
有人可以帮我解决以下问题吗?
答案 0 :(得分:0)
在提出下一个问题之前,请先花点时间了解如何在问题中格式化代码和其他文字。调查文本框上方的图标,首先需要的图标是 {} 。
好的,所以这个
ux=cos(theta)sin(phi)
看起来像数学中的轻率翻译。尝试
ux=cos(theta)*sin(phi)
大多数编程语言都不会自动乘以相邻的术语,因此必须更准确地告诉他们要做什么。编译器告诉你该语句是不可分类的,因为它无法解析它,该语句在语法上不是有效的Fortran。
PS在英语中,你应该写点源而不是准时源。准时已经获得了按时或在约定或正确的时间做某事的含义。