您好我正在尝试找出确定在Fortran中添加了多少项目的最佳方法。为了更好地解释这个问题,我简化了我正在使用的系统作为一个例子。
假设我有一个盒子,里面有11个原子弹跳。在每个时间帧,我识别出我最喜欢的原子,atom_α的一定距离内的所有原子,并将它们添加到名为array_C的数组中(长度为10)。现在我想迭代array_C并对其中的原子进行计算。在python中,这并不重要,因为列表中的元素数量很长。在fortran中,列表/数组由您定义,并且只要您说它(在本例中为10)。由于其他原子可以远离或接近atom_α,因此数组array_C可以包含0,10或任意数量的原子。因此,如果我循环遍历array_C,我可能会循环“空”单元格或从最后一步未被覆盖的单元格导致各种问题。我将如何处理这个问题,或者仅仅是跟踪我添加到数组中的原子数然后使用该值对其进行do循环的情况?
实际上有大约4000个原子,每个原子都是一个“类”对象,每个对象都包含其他原子靠近它的“array_C”列表。
感谢您的时间。
答案 0 :(得分:2)
您应该声明一个数组的长度大于您期望的长度。向该数组添加元素时,请跟踪已添加的元素数(在示例中称为numElements
)。然后你可以从1循环到numElements
- 在那个时间步长中不使用大于该数字的数组元素。例如:
integer, parameter :: maxElements = 10000
integer :: i, numElements
real :: curData, myData(maxElements)
numElements = 0
! Adding elements to list
do ! Over all atoms
if ! Atom is close
! Include atom in list myData
! and increment numElements
numElements = numElements + 1
if (numElements > maxElements) then
! Error
endif
myData(numElements) = ...
endif
enddo
! Now loop over list
do i=1,numElements
curData = myData(i)
! Calculations with curData
enddo
这有意义吗?我同意vlad这个问题很难理解,所以如果你需要更多答案,请给我们更多具体细节。