首页 > 解决方案 > 在 Fortran 95 中找到 norm2() 和 move_alloc() 的替代方法

问题描述

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

标签: fortranfortran95

解决方案


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().


推荐阅读