我试图在fortran中尝试一些算法(不幸的是我不是fortran程序员)但我需要了解它的作用: 在这里,
omega = 0.d0
s = 1.d0
i = 1
j = 2
k = 3
101 do iperm = 1, 3
omega = omega + s * a1 (i) * a2 (j) * a3 (k)
l = i
i = j
j = k
k = l
enddo
i = 2
j = 1
k = 3
s = - s
if (s.lt.0.d0) goto 101
omega = abs (omega) * alat**3
a1,a2,a3
是向量(每个三个元素,实数值,表示3d空间中的向量)
s
是一个单位整数(可以是1或-1交替),i,j,k
是整数,而omega
(我需要了解它是如何到达的)是一个浮点值,alat
也是如此。
那现在发生了什么?
尤其是iperm =1,3
部分,是否正在创建一个向量?起初我认为iperm可能是一些花哨的功能/例程或迭代器,但经过一些搜索后我认为不是这样,那是什么目的的精子?
“iperm
”与“do
”之间是否有enddo
的循环?
答案 0 :(得分:3)
你所拥有的只是一系列的任务,并带有一个循环以获得乐趣。我想你明白这个陈述,如
lhs = rhs
评估rhs
并将结果分配给变量lhs
。
该行
101 do iperm = 1, 3
启动do
循环。 101
是一个声明标签,稍后会使用。循环包括从该行到行enddo
的所有语句。循环将执行3次(对于从1
开始到3
结束的序列中的每个整数,执行一次)。循环控制变量iperm
依次分配这些值。循环有点不寻常,因为循环变量不在循环内部使用。声明
omega = omega + s * a1 (i) * a2 (j) * a3 (k)
更新omega
的值。术语a1(i)
(原文中的空格无关紧要)意味着the i-th element of array a1
。 等等
当行
if (s.lt.0.d0) goto 101
如果s
小于0
,则会执行,并将控制权移至标有101
的行。
最后,术语alat**3
计算alat
的多维数据集。
现在得到一张纸,找出omega
得到的值。