在 Fortran 95 中找到 norm2() 和 move_alloc() 的替代方法

问题描述

我基于现代 Fortran 编写代码。出于某种原因,我想以与旧版本兼容的方式对其进行修改。从最新版本转换到版本 95 在这里是可取的。我有两个内在函数的问题。 “Mov_alloc”和“norm2”是这些函数的一部分。 我想知道:它们在 Fortran 95 中有什么内在函数吗?或者,是否有任何外部函数可以精确地完成相同的工作?

解决方法

您可以根据定义轻松地自己实现 norm2()。如果您的数字太大以至于溢出是一个问题,则必须小心。但是最简单的版本就是这么简单

norm2 = sum(A**2)

在 Fortran 95 中没有 move_alloc() 的等价物。您可能需要使用指针而不是可分配变量。您可以用 C 实现自己的版本,但这需要 Fortran 2003-2018 中的许多功能,因此对您来说意义不大。


您可以考虑自己重新分配数组并复制数据,而不是执行move_alloc()

   if (allocated(B)) deallocate(B)
   allocate(B(lbound(A,1):ubound(A,1)))
   B(:) = A
   deallocate(A)

但是,它与 move_alloc() 不同。