问题标签 [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 投票
2 回答
3121 浏览

string - 传递字符串以在 Fortran 子例程中执行

在下面的子例程中,我想传递一个名为str. 如果是'poly', 'gaus', 'slat',那么它有一个预定义的动作(fval =见下面的代码)。我想让用户指定一个要使用的函数并将其作为字符串变量传递。

那是 ...

如果str = '3*cos(i*t)',那么我希望有fval等于3*cos(i*t)。如何让 Fortran 将输入的字符串解释为由 Fortran 执行的命令?

0 投票
1 回答
547 浏览

function - 在 Fortran90 的同一模块中调用函数

我是 Fortran90 的新手,我还没有找到问题的答案。我有一个用 Fortran 编写的模块,其中包含模块内的一些功能。

精简版:

结束模块 vdiStringFunctions

当我尝试使用 Intel Visual Fortran XE 2011 进行编译时,出现以下错误:

错误 LNK2019:未解析的外部符号 _VDISTRINGGENERAL 在函数 _VDISTRINGFUNCTIONS_mp_VDISTRING1CHAR vdiStringFunctions.obj 中引用

因为函数 vdiStringGeneral 与调用 vdiString1Char 位于同一模块中,所以我没有得到问题。当我将 vdiStringGeneral 移到模块之外时,它可以毫无问题地编译。

因为它应该在 DLL 中使用,所以所有函数都应该在模块内。我怎样才能让它以这种方式工作?

0 投票
2 回答
178 浏览

fortran - 展开密集矩阵

在 FORTRAN 中用新列扩展密集矩阵的最有效方法是什么?

说 T 是一个密集矩阵 m x n

我想把它变成 n+1 的 m。我可以想到的一种策略:在每一步重新分配并分配最后一列,还是有一些更好的方法,例如在之前分配一些空间并检查是否足够,如果没有,则进行重新分配之类的事情?有任何想法吗?

0 投票
1 回答
3200 浏览

fortran - Fortran 中的实数与整数

我有一个程序循环一个变量并在每一步计算一个值:

在我的第一次尝试中,我用作iT整数循环计数器,然后在公式中直接使用它。这产生了iT>的分段图ic8t。当我添加i为计数器并iT在公式中使用它之前转换为实数时,图表应该是平滑的。为什么iT在插入公式时是实数还是整数很重要?我的编译器是g77。

iT编辑:该公式也为<提供了一些不准确的值ic8t

0 投票
1 回答
3463 浏览

fortran - FFTW:真实到复杂和复杂到真实 2D 变换的问题

正如标题所述,我正在使用带有 Fortran 90/95 的 FFTW(版本 3.2.2)来执行真实数据的 2D FFT(实际上是一个随机数字段)。我认为向前迈出的一步正在奏效(至少我得到了一些输出)。但是我想通过 IFFT 检查所有内容,看看我是否可以重新构建原始输入。不幸的是,当我将复杂程序调用为真正的例程时,什么都没有发生,也没有得到错误输出,所以我有点困惑。以下是一些代码片段:

上述前进步骤似乎有效(r2c),但后退步骤似乎无效。我通过区分 u 和 recov 数组来检查这一点 - 它最终不为零。此外,recov 数组的最大值和最小值都为零,这似乎表明没有任何变化。

我查看了 FFTW 文档,并将我的实现基于以下页面http://www.fftw.org/fftw3_doc/Fortran-Examples.html#Fortran-Examples。我想知道这个问题是否与索引有关,至少这是我倾向于的方向。无论如何,如果有人可以提供一些帮助,那就太好了!

谢谢!

0 投票
3 回答
585 浏览

fortran - 从 fortran 调用 C 的 open() 函数时文件权限不正确

我有一个调用 C 函数并使用 open() 打开文件的 fortran 程序

main.f90:

测试.c:

我编译为:

当我运行程序时,它会创建文件 test.txt,但权限不正确:

应该是什么时候

如果我从另一个 C 程序调用此函数,它工作正常。有人可以指出出了什么问题吗?

规格:64 位 linux GNU Fortran (SUSE Linux) 4.5.0, GCC (SUSE Linux) 4.5.0

谢谢, Kshitij

0 投票
1 回答
6336 浏览

fortran - Fortran:从一行中一次读取一个值

我正在使用 FORTRAN 从 ASCII 文本文件中读取数据。该文件每行包含多个数据值,但每行值的数量不是恒定的。

通常在一个 read 语句之后,Fortran 会转到下一行。我想要做的是一次读取一个数据值。如果它到达行尾,它应该继续阅读下一行。这可能吗?

0 投票
3 回答
7633 浏览

fortran - 在 Fortran 90 中打开多个文件

我想打开 10,000 个文件名从abc25000until开始的文件abc35000,并将一些信息复制到每个文件中。我写的代码如下:

结尾

这段代码应该从abc24000until开始生成文件,abc35000但它停止了大约一半说

在文件 test-openFile.f90 (unit = 26021, file = '') 的第 17 行

Fortran 运行时错误:打开的文件太多

我需要做什么来修复上面的代码?

0 投票
1 回答
1546 浏览

fortran - 包含写入语句时函数调用停止/挂起,但仅在编译期间与某些库链接时

这是我的最小示例:

使用简单的编译时

或者当包括像 Slatec 这样的库时

它工作正常。

但是,当将库更改为 -lblas 的 -llapack 时,程序在调用 testfunc() 时会在运行时挂起。请注意,我在此处的示例代码实际上并未使用任何这些库。我看到的最后一件事是“从 main 写入”,然后什么也没有发生,我必须按 CTRL-C 才能重新获得控制权。挂起时,该进程似乎没有使用任何 CPU 周期。

现在奇怪的是,如果我注释掉 testfunc() 中的 write 语句,它会一直工作。

So my question is really: Can these libraries really prevent me from printing inside my own functions? Why? How?

(I'm actually working on a larger program which needs lapack and blas, so i obviously can't just stop linking to them.)

0 投票
3 回答
442 浏览

linux - 长时间运行时程序停止

固定的:

好吧,这似乎有点傻。原来 top 显示不正确,程序实际上继续运行。也许CPU时间变得太大而无法显示?无论哪种方式,该程序似乎都运行良好,而整个问题都没有实际意义。

谢谢(很抱歉这个愚蠢的问题)。

原问:

我正在运行 Ubuntu 服务器 10.04.3 的计算机上运行模拟。短期运行(<24 小时)运行良好,但长期运行最终会停止。停止,我的意思是程序不再获得任何 CPU 时间,但它仍将所有信息保存在内存中。为了运行这些模拟,我对程序进行 SSH 和 nohup 并将任何输出通过管道传输到文件。

其他信息:

系统肯定没有用完 RAM。该程序在完成之前不需要读取或写入硬盘驱动器;计算完全在内存中完成。该程序没有被杀死,因为它在停止后仍然有一个 PID。我正在使用openmp,但是增加了最大进程数并且最大时间是无限的。我正在使用 ARPACK fortran 库找到矩阵的最大特征值。

关于导致这种行为的原因或如何恢复我目前停滞的程序的任何想法?

谢谢