这片fortran是什么意思?

时间:2013-08-15 22:29:45

标签: fortran95

我试图在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的循环?

1 个答案:

答案 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得到的值。