gpt4 book ai didi

oop - 创建包装对象来对可怕的 Fortran 代码进行解卷积?

转载 作者:行者123 更新时间:2023-12-01 22:19:14 25 4
gpt4 key购买 nike

虽然我可以使用最新的编译器,但我必须使用一些旧版 Fortran。

该代码在一维数组中存储大量数据。

例如,

PROGRAM horrible_coding
IMPLICIT EVERYTHING ! Sarcasm

REAL, DIMENSION(1000) :: data
INTEGER, DIMENSION(50) :: info_location

! Somewhere, info is read in and stored temporarily as info_1, info_2, etc.

data(1:3) = info_1
data(4:9) = info_2
...
data(134:192) = info_n

DATA 数组中的哪些元素与哪些 info 片段之间的关联存储在第二个数组中。像这样的东西:

info_location(1) = 1
info_location(2) = 4
info_location(n) = 134

没错。 info_location 数组的每个元素的值指的是数据数组的第一个元素,您可以在其中找到相关信息。

因此,例如,如果您想获取 info_7 的数据,则必须执行以下操作:

size_of_info_7 = info_location(8) - info_location(7)
ALLOCATE(data_for_info_7(size_of_info_7))
data_for_info_7 = data(info_location(7) : info_location(7) + size_of_info_7 - 1)

现在,这种疯狂的景象可能会让你的眼睛开始流血,所以我很抱歉。

我想创建对象实例并将每条信息的所有相关数据存储为实例数据。当我将事情带到 2003 年时,我将创建实例方法来获取和设置实例数据。

我不想重写代码,但想将这种现代化放在现有代码的基础上。

我相信我可以通过使对象实例数据简单地指向包含相关信息的 data 数组的实际元素来实现此目的。

这样做合理吗?

我可以在 Fortran 中创建其实例数据主要是指针的对象吗?

如果没有先将这个想法扔到 stackoverflow,我很犹豫是否要开始这项任务。

最佳答案

Can I create objects in Fortran whose instance data is predominantly pointers?

我不确定你的意思,但你绝对可以这样做:

type data_ptr
real,dimension(:),pointer :: data
end type

您还可以创建这些类型的数组:

type(data_ptr),dimension(:),allocatable :: some_name

(也可以是指针或静态,如您所愿。)

然后,如果原始数据有TARGET属性,则可以使用:

some_name(i)%data => data(lower:upper)

您还可以将指针重新映射到不同的下界,上面的过程给出了它的下界1。

关于oop - 创建包装对象来对可怕的 Fortran 代码进行解卷积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10876543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com