问题标签 [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.
arrays - 如何将数组从 Fortran 返回到 C?
我想知道使用 Fortran 中的 ISO C 绑定将数组从 Fortran 返回到 C 的正确方法是什么。
stack - fortran :尝试制作最小的堆栈数据结构
最后,关于SO堆栈的问题!我的一生都把我带到了这一点。
所以我需要将我制作的一些相当大的自定义数据结构合并到一个堆栈中。我决定编写一个仅包含一个整数值的最小堆栈结构。这里是 -
结果让我大吃一惊!我怀疑SIZE
柜台是否会跟上……但不是这个。
关于我哪里出错的
任何指示(停顿而无法控制地咯咯地笑)?这是 IDEONE 上代码的链接。
编辑:IDEONE 链接现在包含代码的更新版本,其中包含解决方案!希望它可以用作堆栈的通用模板!
oop - Fortran 2003 中的类型绑定过程重载
我已经用 Java 编程了几年了。但是,我现在正在学习使用 Fortran 作为示例代码(77 标准)的课程。尽管我一直将 Fortran 视为一门古老的语言,但我还是决定使用 gfortran 编译器尝试 2003 标准的最新实现,以了解其优点。到目前为止,我对现代功能感到惊讶,但我遇到了一个问题,下面的示例演示了这个问题。
这会产生编译错误:“在 (1) 处的参数 'this' 中的类型不匹配;将 TYPE(type2) 传递给 CLASS(type1)”,以引用该call myType2%compute
语句。
我的问题是范围。看来,通过该class(<class_name>) :: this
语句,编译器应该能够将子例程绑定到特定的派生类型或其后代。从这里开始,编译器在子例程中从本地开始搜索变量定义,然后沿着this
. 这将消除所有显式this%
语句,这些语句往往会使我的类型绑定过程在几个语句之后难以阅读。例如,
似乎比可读/可写少得多
在后一种情况下,通过语句很明显class(<class_name>) :: this
,每个变量都应该被绑定。
另一个后果是,两个独立的派生类型似乎不能绑定同名的子例程(如错误消息所示)。我已经看到了两种常见的方法。首先是显式调用每个子例程,例如compute_type1
and compute_type2
。当访问这些子程序时,这在代码中看起来非常丑陋和冗余。例如call myType1%compute_type1
. 第二个选项(例如Overloaded fortran interface with different ranks,类型绑定函数重载 in Fortran 2003)似乎更好,是区分绑定名称和过程名称。例如,类型定义将包括procedure :: compute type => compute_type1
. 这解决了访问子例程时的问题,但是在开发具有许多实现相同绑定名称的派生类型的大型项目时,我可以看到问题。我宁愿不必跟踪我在任何给定项目中拥有和未使用的子例程名称。这会使名称最终变得很长且可读性降低。
所以我的问题有3个组成部分:
this%<var_name>
在类型绑定过程中,对于类成员的显式类型是否有更简洁的替代方法?- 有没有办法让编译器认识到应该根据
class(<class_name>) :: this
语句绑定过程?当前重载子例程/函数名称的方法似乎是 90/95 标准的产物,该标准不允许将它们绑定到类型。 - 如果没有,是否有与此实现相关的一些性能提升?这两个问题似乎都可以在编译时解决,我很乐意为提高表达能力做出牺牲。
oop - 每个数据类型实例中的过程副本
当我们从具有传递过程指针的数据类型(类)创建多个实例时,是否在每个实例中复制实际过程(子例程/函数)?还是只是复制了指针?
例如,考虑以下可以正确编译和运行的代码。
add_it
从数据类型创建的 10 个对象中的每个对象中是否都有重复的子程序class_type
?或者子程序的指令集是否add_it
存储在某个地方以及指向它的指针,即"procedure :: add => add_it"
复制到每个对象中?
fortran - Fortran;循环遍历具有公共属性的文件名
我对 Fortran 还很陌生,而且我的文件名有问题,我在 simuln#.res 中有一堆数据(其中 1<#<20),我有多个不同的目录,它们都具有相同的 simuln#.res名称,但它们具有不同的输入参数。代码如下所示:
该代码在我的 mac 上使用 gfortran 编译器进行编译,但是当我将路径放入包含文件的目录时,它会给出错误simuln1.res does not exist
(它绝对会,三重检查)。我已经尝试更改编辑描述符(并使真实(j)),但我仍然得到同样的东西。谁能帮我?
arrays - Fortran 2003 - 数组操作 - 有没有更快/更好的方法来做到这一点,而不涉及 DO 循环?
我有一个问题,它涉及使用一个小的 2 级数组(下面的代码中的 array2)来保存一个更大的 4 级数组(下面的 array1)的一些元素的有序列表。目前,我的一个步骤涉及使用 DO 循环,我想知道是否可以使用某种“数组到数组”操作一步完成?在我正在编写的主要代码中,我发现尽可能使用这种“数组到数组”操作可以显着提高速度。我觉得这是一个简单的问题,但我看不到解决方案或在网上找到解决方案。我将不胜感激任何帮助!以下代码是问题的简化模型,但包含基本特征。谢谢。
fortran - 伪参数的 fortran 类声明
我想要一个派生类型a
,它是空的。从这个派生类型,我想定义更多的扩展类型。假设所有这些类型扩展都包含一些generic
过程名称value
,即value => valuea1
,value => valuea2
等。
如果我想将 a 类的变量传递给其他过程,我需要用class(a)
. 但是,如果我这样做,那么引用value
dummy 参数会导致编译失败,因为类 a 实际上是空的——只有类型扩展包含该过程。
我大概可以通过value
在 a 的类型定义中调用一些过程来解决这个问题(然后在扩展中覆盖)。但是,鉴于我不想声明任何类型为 a 的对象,这似乎很混乱。有可能解决这个问题吗?
oop - Fortran,(1) 处的最终确定尚未实现
我正在尝试实现一个简单的终结器,但我什至无法编译这个示例:
使用 GNU Fortran (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7) 给我这个错误输出:
$ gfortran -c m_example.f03 m_example.f03:5.26:
TYPE, EXTENDS(t1) :: t2 1 错误:(1) 处的最终确定尚未实现 m_example.f03:10.26:
TYPE, EXTENDS(t2) :: t3 1 错误:(1) 处的最终确定尚未实现
这是一个错误,是否意味着终结器尚未在 gfortran 中实现,或者我做错了什么?
arrays - 具有动态大小的 Fortran 数组,与 R 函数 seq() 一样简单
我想编写类似于 R 函数 seq() 的 Fortran 代码。例如:
将给出向量
我将运行几个模拟,在这些模拟中序列的长度会改变,在 R 中这很容易做到,只需改变 seq() 中的第二个参数。我曾尝试在 Fortran 中使用动态数组和函数 ALLOCATE 来动态更改数组的大小。到目前为止,这还没有奏效并导致错误
所以我想知道是否有一种简单的方法可以模仿 Fortran 中 R 函数 seq() 的行为。
如需进一步参考,请参阅下面的程序
fortran - 在 fortran 中对 rabbitmq 客户端的建议
我注意到没有给定的用于 fortran 访问 rabbitmq 的 API。
我正在考虑使用 C#/.NET 作为 rabbitmq 的新娘;将 Fortran 连接到 C# API 的最明智的方法是什么?其他建议?
rabbitmq 客户端将触发事件,fortran 客户端必须监听它们并处理信息。
任何的想法?
非常感谢您,
总帐