fortran - 在 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()
.
推荐阅读
- npm - `yarn remove` 一个 deps 列表,而不会因错误而放弃
- excel - 将单元格样式从一种样式更改为另一种样式
- airflow - 自定义气流操作符作为“插件”或从 dags 目录直接导入
- c++ - 在树中,我得到错误,没有匹配函数调用函数,但我使用模板正确地完成了它
- java - 无法为 DDL 执行 docker 打开 JDBC 连接
- tensorflow - 尝试使用 Anaconda 的 pip 安装 TensorFlow 时出错
- excel - 是否可以将日期组合在一起并返回该组的开始和结束日期?
- css - 使用内联 CSS 的 GMail 电子邮件中的水印 - 不能使用 STYLE 标记 - 在电子邮件正文的中心覆盖透明图像
- python - Python 3 在 shuffle(X,Y) 处导致内存错误,其中 X 是 36000 个 3 通道图像 (36000, 256,256,3),Y 是 3 通道普通数据 (36000, 256,256,3)
- sql - 如何在 SQL 中将独立月份添加到独立年份?