问题描述
我基于现代 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()
不同。