问题标签 [fortran2003]

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 投票
1 回答
605 浏览

pointers - fortran 2003 和指​​针

我正在编写一个 Fortran 程序。该程序实现了一些数值方法。程序速度非常重要。我决定摆脱动态数组(是否加快程序速度?),并面临以下问题。我有 3d 数组(NXxNYxNZ = MAX 元素),我知道 MAX,但我不知道 NX/NY/NZ 比率。它可以是这样的:1x1xNZ 或像这样的 2xNYx1 等。我看到的解决方案 - 使用指针。简化的 2D 案例:

这个例子有效,但我担心这样的更新会减慢我使用 5d 数组的实际程序。是否可以?

0 投票
2 回答
584 浏览

fortran - 在派生类型中使用异步属性

在 Fortran2003 程序中,我想创建一个派生类型,其中包含一个具有asynchronous属性的可分配数组:

当我尝试使用 GCC 编译上面的代码时,我收到以下错误消息:

使用 NAG Fortran 时,消息类似:

这种限制的原因是什么?是否有可能克服这个限制?

0 投票
1 回答
434 浏览

fortran - 在 Fortran 中将可分配字符传递给具有无限多态虚拟参数的子例程

我正在尝试编写一个能够基于无限多态性将字符串转换为不同类型数据类型的例程。这个想法是用户调用这个例程,将变量传递到它想要存储数据的位置,以及基于变量/参数类型定义转换的例程。

此例程的摘录如下:

“this%fValue”是一个“字符(len=:),可分配”字符串。当我尝试使用此例程传递可分配字符串时,它会成功退出,不会引发错误/异常:

但字符串“value”始终为空。即使在例程内部,在赋值“value = this%fValue”之后,value 也是空的(len(value) 为 0)。

似乎编译器无法检测到参数是字符类型(len=:)、可分配的,因此无法为其分配值。

当然,我有一些替代方案,但是能够使用单个例程并且没有可选参数来处理不同类型的数据的想法非常好。

例如,我可以使用我创建的用户定义类型来处理字符串。

但我想知道这是否是 Fortran 2008 中的默认行为。而且,如果有办法做到这一点,使用这个例程和一个“class(*)”虚拟参数来转换不同的类型,包括称为可分配字符。有一种方法可以在例程内部强制分配,例如?

我会很感激你的意见。干杯,爱德华多

0 投票
1 回答
1730 浏览

generics - 此类型绑定的通用子例程调用没有匹配的特定子例程

我有一个在通用过程(GetValue)下有两个绑定过程(GetAsScalar & GetAsList)的类型:

例程签名如下:

在内部,TKeyword 对象存储一个字符串。

如果我尝试按以下方式使用它(如下所示),则会出现编译错误:“此类型绑定的通用子程序调用没有匹配的特定子程序”

如果我从通用关联中删除 GetASScalar 并将其公开,则以下代码将按预期工作:

当传递一个标量(整数、实数、字符等)时,调用 GetAsScalar 例程没有问题。

我想知道为什么会这样。我在这个“通用的东西”中遗漏了什么,使编译器无法在通用下识别我的子例程?有办法使这项工作吗?会与例行签名有关吗?

我正在使用英特尔 Fortran 15.0.1.148

0 投票
1 回答
49 浏览

input - 尝试将不正确的值读入变量会改变其值吗?

如果存在iostat关键字,则在发生 I/O 错误时程序不会停止。然后,如果我尝试将不正确的值读入标量变量,i比如说,这个变量会保持不变吗?以下似乎有效:

我可以依赖 Fortran 2003 中的这种行为吗?

0 投票
3 回答
277 浏览

fortran - Fortran 中函数返回值的直接索引

是否有可能直接在函数的返回值上使用索引?像这样的东西:

wherereadStr()是一个返回字符串或数组的函数。在许多其他语言中这是很有可能的,但是 Fortran 呢?我的示例中的语法当然无法编译。有没有其他语法可以使用?

0 投票
3 回答
1853 浏览

fortran - Fortran 2003 中的非标准类型声明

我编写了一个科学的 fortran 代码,没有使用任何特定的 fortran 标准。但我现在必须声明我使用的是哪个 fortran 标准。

我说我使用的是 fortran 2003,因为我需要 get_command_argument 和 command_argument_count 内部函数。但是,当使用标志 -std=f2003 检查代码标准时,编译失败。

我在某些部分收到有关实数类型声明的错误。例如,当我在模块中声明变量时:

我在所有实变量中都收到消息“非标准类型声明 REAL*8”。

有谁知道发生了什么?

0 投票
1 回答
141 浏览

fortran - Fortran 泛型过程错误:可能不是泛型

我知道您可以使用抽象类型制作通用过程,例如:

伪参数的 fortran 类声明

但是我可以用下面的代码做同样的事情吗?

现在我得到了错误: funPointer 可能不是通用的。我确信有办法解决它,但我不熟悉通用程序。

0 投票
1 回答
67 浏览

inheritance - 在 gfortran 中将 (1:n) 与继承的类一起使用很奇怪

我一直在以客观的方式更新 fortran90 中的一个旧程序,我遇到了一个非常奇怪的继承对象行为:例如:

如果我用 gfortran(4.8 或 4.9)编译这个程序,我会得到

尽管第 1 行和第 2 行(分别为第 3 和第 4 行)应该是相同的。看起来继承对象的内存分配存在一些问题,因为如果我注释变量 j 的声明(在 InnerSpec_t 中),这个问题就会消失。如果使用 intel fortran 编译,一切正常。

我是否使用了某种不适当的结构?有没有办法即使对于 gfortran 也能做到这一点?

0 投票
1 回答
759 浏览

fortran - 为什么覆盖参数的名称必须与抽象接口的名称匹配?

为什么覆盖过程中的参数名称需要与抽象接口的名称相匹配?

我明白,这些参数的 , 等清楚地TYPE需要INTENT匹配接口,但是为什么编译器要关心我所说的变量呢?

在下文中,我定义了一个简单的抽象实用程序类,其中包含一个EVAL采用双精度参数的延迟过程。

定义一个覆盖类和一个实现EVAL

我收到以下错误gfortran

错误:(1)处“eval”的虚拟参数“another_variable_name”应命名为“data”,以匹配被覆盖过程的相应参数

如果我改为替换所有内容DATAANOTHER_VARIABLE_NAME则可以按预期编译和运行。

但这对我来说似乎很愚蠢。我希望能够FUNC_1D多次继承,并且在各种情况下并且DATA每次都被迫调用我的变量似乎很荒谬。

我不明白为什么编译器应该对参数感兴趣而不是TYPEINTENT