问题标签 [fortran2008]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
234 浏览

json - 如何有效地将复杂的 Fortran 结构保存到二进制文件中?

所以,我需要在 Fortran 2008 中实现我的新项目。在这个项目中,我需要存储大型结构,我想以二进制格式存储它们。到目前为止,我已经在这里阅读了有关未格式化和格式化的二进制流的信息,但是对于如何使用它们来存储比多个数字/字符串更复杂的东西,我仍然有些困惑。

假设我将以 JSON 格式存储我的数据:

我知道,我可以使用一些 3rd 方模块直接使用 JSON(比如这个),但我也希望能够使用二进制格式,因为文件大小可能非常大。

那么,是否可以使用 Fortran 二进制流存储这种结构?或者在Fortran中有没有其他方法,怎么做?我不是专门询问未格式化的二进制文件,如果有其他优雅的解决方案,我会很高兴听到它。不过,我更喜欢没有很多外部依赖的那些。

0 投票
2 回答
922 浏览

fortran - Fortran 2008 中的函数重载

我从 Fortran 2008 开始,我在 OOP 方面遇到了很大的困难。似乎很少有材料可以解释 2008 语言标准中一个非常基本的 OOP 概念。

我找到了有关继承的信息,但找不到有关多态性的任何信息。

因此,如果我想在 C++ 中重载一个函数,我可以这样做(来自 Wikipedia 的示例):

但是,我应该如何在 Fortran 2008 中做同样的事情?

0 投票
3 回答
1231 浏览

function - 使用 Iso_Fortran_Env 设置函数的 Kind 值

如何使用 ISO Fortran Env 的内在函数以 Fortran 2008 惯用的方式设置函数的返回 KIND 值?

通常在主程序中,我可以使用 ISO Fortran 内部函数,如下所示:

但是似乎没有一种方便的方法可以将这些内在函数用于外部函数,因为 REAL64 和 double 都只能在上面的 main 函数中定义。尝试在 main 中定义函数的 KIND 如下:

至少在我的系统上,会引发类型不匹配错误(double 被定义为 KIND=8,而默认 real 在我的系统上被定义为 KIND=4)。我总是可以只使用real(kind=8) function some_function(),但出于便携性的考虑,我不希望这样做。另外,在一个地方使用来自 iso_fortran_env 的 REAL64 感觉很脏,只是转身在另一个地方使用 KIND=8。

是否有一种简单(或至少可读)的方法来实现这一点,如下所示?

0 投票
1 回答
432 浏览

arrays - Fortran 2008 - 类中的数组变量

我有一个以下类,我需要在其中存储类型neuron_tconnection_t.

我试图像这样初始化数组

但我收到以下错误:

你知道吗,我做错了什么?mock_neuron_textends type neuron_t,所以应该没问题。

编辑:

neuron_t和类都是connection_t抽象的,所以添加后我现在收到以下错误allocate(new_obj%neuron_arr)

0 投票
0 回答
38 浏览

class - Fortran 2008 - store class with allocatable properties using binary stream

I have a class

! class(connection_t), allocatable :: connection_arr(:) !< Array of all connections

It contains several arrays (allocatable variables), which are being allocated in constructors (module procedures).

I need to store the class or its properties, at least, into the binary file. I tried to do it by implementing save method:

But I'm getting following error:

I understand, that the allocatable variables are the cause of my problem, but I have no idea, how to properly solve this problem. Could, you, please, help me with storing this class? write(11) this 1 Error: Data transfer element at (1) cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure

0 投票
0 回答
105 浏览

class - Fortran 2008 - 包含指针的类的用户定义 I/O

我有以下课程

我需要实现我自己的write并读取functions能够序列化的实例,net_t因为它包含可分配的数组。

我试图实现这样的write功能:

但是现在,出现了另一个问题 - 我收到以下错误

我看到问题是,该类connection_t包含指向神经元的指针,正如我们在这里看到的:

是否可以以这种方式序列化指针?我想使用神经元来防止neuron_t实例本身的复制。

0 投票
2 回答
466 浏览

class - Fortran 类的异构数组

我有一个抽象类型和几个继承自他的类型。现在我需要为这些继承类型创建一个实例数组,但我不确定在 Fortran 中是否可行。

我尝试制作一些包装器类型,例如在 Fortran 中创建异构数组

但我收到了这个错误:

我究竟做错了什么?或者还有其他正确的方法吗?


尝试 2

我根据 francescalus 的回答编辑了代码:

我收到另一个错误:

0 投票
2 回答
698 浏览

class - Fortran 2008 - CLASS(*) 的用户定义 I/O 过程

我正在尝试创建一个类型,它将作为任意其他类型的包装器,因此我可以创建一个异构数组,正如Fortran 类的异构数组和Fortran 中的创建异构数组中所建议的那样。

所以,我试着像这样实现它:

现在我收到错误

所以我尝试像这样实现 I/O:

但即使在我的新方法中也会出现同样的错误:


所以,我有两个问题

  1. 我应该如何正确实施它?
  2. 将项目变量声明为指针还是可分配变量更好/更容易?
0 投票
1 回答
79 浏览

class - 如何覆盖用户定义的 I/O 过程?

我有一个抽象类,其中包含用于未格式化二进制流的读/写方法。我也有一些从抽象类继承的类,其中一些还有我还想序列化的附加组件。

因此,我希望第一组方法用作“默认”行为,并且在继承的类中覆盖它的方法仅由这些特定类使用。

我试图像这样实现它:

但我收到以下错误:

在我看来,就像类中的write方法a不能被覆盖一样。我怎样才能正确实施它?

0 投票
0 回答
48 浏览

class - Fortran - 如何为具有相同父级的不同类的数组编写用户定义的 I/O?

我需要实现一个函数,它将序列化(即保存到未格式化的二进制文件)一个包含对象数组的类,这些对象属于同一个抽象类,但属于几个不同的继承类。

关键是,这个数组被传递给我的函数,它是由用户的操作创建的。因此,我无法知道存储在数组中的特定类型。

有没有办法以某种方式实现写入和读取 I/O 方法,它可以自动写入数组而无需指定其单个元素的类型?

我写了这段代码来说明我的情况:

那么,有什么办法,如何序列化这样的数组而无需手动指定,即o1类型bo2类型c

我需要能够序列化一个抽象类型的数组,a并且还可以在不了解其元素的情况下从二进制文件中读取它。