问题标签 [fortran90]

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 投票
3 回答
107419 浏览

arrays - 如何在 Fortran 中初始化二维数组

如果我没记错的话,在 C 中,您可以使用花括号语法轻松地初始化数组:

当您希望为数学目的初始化具有特定测试值的矩阵时,如何在 Fortran 中对二维数组执行相同的操作?(无需在单独的语句中对每个元素进行双重索引)

该数组由以下定义

或者

0 投票
2 回答
3378 浏览

arrays - Fortran90 错误:EXTERNAL 属性与 DIMENSION 属性冲突

我写了一个函数来计算 2*2 矩阵的特征值。它以 2*2 矩阵作为参数,并通过 2 元素数组返回 2 个特征值。我已经在程序单元中声明了这样的函数:

但它不会编译,它会出现这个错误:

是不可能有返回数组的函数,还是我做错了什么?

感谢任何帮助/建议,谢谢。如果有帮助,我正在使用带有 gfortran 编译器的 fortran 90

0 投票
1 回答
1410 浏览

fortran - 如何在不中断程序的情况下读取 Fortran 中的输入?

Fortran 中的一条常用read语句会中断程序的执行,直到按下 RETURN 键。我正在寻找一个无需等待 RETURN 键即可读取任何按下的键的语句。即使没有按下任何键,程序也不应该停止。谢谢您的回答。

编辑:这是一些应该澄清问题的源代码。

test1如果未按下任何键,程序将永远不会在屏幕上写入“输出”一词。

使用我正在寻找的程序的读取语句test2应该用“输出”填充屏幕,直到按下不同于“2”的键。

0 投票
2 回答
298 浏览

fortran - 从文件读取的值在 Fortran 中存储为不同的值

我有一个输入文件,第一行包含以下小数。

我有一个 Fortran 90 程序,它读取文件并输出值。

这是输出:

显然,存储的内容与读取的内容不同。问题是,为什么?

0 投票
2 回答
41266 浏览

arrays - 在 Fortran 中返回数组的函数

据我了解,您可以从 Fortran 中的函数返回一个数组,但由于某种原因,我的代码只返回数组中的第一个值,我要求它返回。这是功能:

这就是我所说的

现在它没有做任何有用的事情,因为我试图在编写逻辑之前理解语法。我看到了一些关于为函数指定类型的东西,但是当我写的时候

或者我得到一个编译错误。

0 投票
2 回答
3399 浏览

format - 错误:Fortran 格式字符串中格式字符串的意外结尾

尝试从 Fortran 77 程序编译复制代码时出现此错误。

代码:

编译器错误:

我不确定错误是什么意思。

0 投票
1 回答
35497 浏览

module - Fortran 90 编译问题:未定义的引用

我在尝试编译使用同一目录中的模块的简单 fortran 程序时遇到问题。我有 2 个文件:包含程序的 test1.f90 和包含模块的 modtest.f90。

这是 test1.f90:

这是 modtest.f90:

两个文件都在同一个目录中。我像这样编译 modtest.f90 和 test.f90 :

但后来我得到这个错误:

有什么我想念的吗?谢谢您的帮助

0 投票
1 回答
3345 浏览

pointers - 指针作为伪参数

我对以下程序有些困惑

及其衍生物。稍后再谈。正如我们所知,Fortran 将例程参数作为传递引用传递,这意味着实体出现在test两者的虚拟参数处,foo并且bar是在program hello. 到目前为止,一切都很好。

假设我在 as 中定义program hello一个type(TestType) :: t指针,并分配它。

代码和以前一样工作,唯一的区别是对象不是在堆栈上分配,而是在堆上。

现在假设回到堆栈分配的程序,子程序 bar 被定义为

该程序不再编译,因为您必须使用堆分配版本才能使其工作,或者更准确地说,当例程被定义为接受指针作为虚拟参数时,必须将指针传递给例程。另一方面,如果虚拟参数不包含pointer关键字,则例程将接受指针和非指针。

这让我想知道......将虚拟参数声明为指针有什么意义?

0 投票
2 回答
4360 浏览

fortran - 我可以有一个指向可分配数组组件中的项目的指针吗?

我有一个用户定义的类型vector。在另一种类型中,我有一个可分配的向量数组。我想有一个指向这个可分配数组中的单个向量的指针。所以我想我会这样做:

但是当我编译时,编译器抱怨:

我可以有一个指向可分配数组中单个项目的指针吗?可能吗?

0 投票
2 回答
1804 浏览

mpi - MPI_COMM_WORLD 句柄在子例程中失去价值

我的程序如下:
module x
use mpi !x includes mpi module
implicit none
...
contains

...
结束模块 x

program main
use mpi use x
MPI_INIT(...)
call do_something_with_mpicommworld end program main

该程序失败并出现以下错误: MPI_Cart_create(199): 无效的通信器,除非标有 ( * *) 的行未注释。

现在,也许我对 Fortran 90 的了解不完整,但我想如果您在模块定​​义中有use子句(请参阅我的模块 x),则无论包含模块中存在哪个全局变量(如果是 x :来自包含模块 mpi 的 MPI_COMM_WORLD ) 将在任何包含的子例程 ( do_something_with_mpicommworld ) 中具有相同的值,即使这些子例程没有明确包含模块(例如,当 ( * *) 被注释掉时)。或者,简单地说,如果您在另一个模块中包含一个模块,则第二个模块中包含的子例程将可以访问包含模块中的全局变量,而无需特殊的use语句。

当我运行我的程序时,我看到了不同的行为。x 中包含的 sub 会产生错误,除非它具有“use mpi”语句。

那么问题是什么,我对 Fortran 90 有什么错误的想法,还是 MPI 模块有什么特别之处会导致这种行为?