【发布时间】:2017-07-19 13:04:07
【问题描述】:
我的问题是关于 Fortran 中的数组分配。
我有一个子程序,比如 readParams,我想从文件中读取一些动态大小的数组。这些也用于子程序之外。 处理这个问题的最佳方法是什么?
在 F95 中,似乎不可能在子程序中进行分配并将填充了值的数组传回主程序。 但是如果我在主程序中分配它并在子程序中使用“intent(inout)”,它也会在那里被释放。
(我这里用的是 F90/95,但是由于代码不大,我也可以将其修改为较新的版本...我对 Fortran 比较陌生,所以我不确定是否改进了数组处理是值得的时间投资^^
编辑感谢您的提示。不过,我并不想在子例程中解除分配我的数组。
问题是:我有一个数组,我需要在我的 main 程序中分配 somewhere。只有在我从子例程 readArgs 中的输入读取它之后,才能知道数组大小。因此,我使数组“可分配”。 一旦分配,该状态就永远不会再改变。 该数组由子例程 readParams 中的值填充。 我是在 main 还是在 readParams 中分配最好?如何分配?
...我现在将我的子程序放在一个模块中并从那里使用它们。 目前我在 main 中进行分配,将数组传递给我的子例程,并在子例程的数组声明中删除了“可分配”语句。 它似乎有效,但我仍然不明白这是否是要走的路。
【问题讨论】:
-
另见其他一些问题,它们是相关的,但不重复。他们使用可分配参数处理一些特定问题stackoverflow.com/questions/13058743/…stackoverflow.com/questions/19537974/…stackoverflow.com/questions/22169365/…
-
从 Fortran 95 到 Fortran 2003 的修改并不意味着重写整个代码。一点也不!!!这只是意味着在您需要的特定地方使用现代功能。
-
一切都在链接中,真的。在其他示例中也是如此。忽略释放。 1.阅读链接中的问题。 2. 使
readParams的数组参数可分配。 3. 分配readParams中的数组。真的看stackoverflow.com/a/13810698/721644。您也可以只在主程序中分配数组。如果您对此有疑问,请显示您的代码和错误消息并解释这些问题。 -
无论分配在
reaArgs还是readParams,都是你的选择。如果您认为该链接不适用于您的情况,那么 1. 显示您的代码,2. 显示您在尝试分配数组时收到的任何错误消息。 -
你写似乎不可能。为什么看起来不可能?您遇到了哪些具体错误?您尝试了哪个代码?
标签: arrays fortran dynamic-memory-allocation fortran90