问题标签 [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.
string - 传递字符串以在 Fortran 子例程中执行
在下面的子例程中,我想传递一个名为str
. 如果是'poly'
, 'gaus'
, 'slat'
,那么它有一个预定义的动作(fval =
见下面的代码)。我想让用户指定一个要使用的函数并将其作为字符串变量传递。
那是 ...
如果str = '3*cos(i*t)'
,那么我希望有fval
等于3*cos(i*t)
。如何让 Fortran 将输入的字符串解释为由 Fortran 执行的命令?
function - 在 Fortran90 的同一模块中调用函数
我是 Fortran90 的新手,我还没有找到问题的答案。我有一个用 Fortran 编写的模块,其中包含模块内的一些功能。
精简版:
结束模块 vdiStringFunctions
当我尝试使用 Intel Visual Fortran XE 2011 进行编译时,出现以下错误:
错误 LNK2019:未解析的外部符号 _VDISTRINGGENERAL 在函数 _VDISTRINGFUNCTIONS_mp_VDISTRING1CHAR vdiStringFunctions.obj 中引用
因为函数 vdiStringGeneral 与调用 vdiString1Char 位于同一模块中,所以我没有得到问题。当我将 vdiStringGeneral 移到模块之外时,它可以毫无问题地编译。
因为它应该在 DLL 中使用,所以所有函数都应该在模块内。我怎样才能让它以这种方式工作?
fortran - 展开密集矩阵
在 FORTRAN 中用新列扩展密集矩阵的最有效方法是什么?
说 T 是一个密集矩阵 m x n
我想把它变成 n+1 的 m。我可以想到的一种策略:在每一步重新分配并分配最后一列,还是有一些更好的方法,例如在之前分配一些空间并检查是否足够,如果没有,则进行重新分配之类的事情?有任何想法吗?
fortran - Fortran 中的实数与整数
我有一个程序循环一个变量并在每一步计算一个值:
在我的第一次尝试中,我用作iT
整数循环计数器,然后在公式中直接使用它。这产生了iT
>的分段图ic8t
。当我添加i
为计数器并iT
在公式中使用它之前转换为实数时,图表应该是平滑的。为什么iT
在插入公式时是实数还是整数很重要?我的编译器是g77。
iT
编辑:该公式也为<提供了一些不准确的值ic8t
。
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。我想知道这个问题是否与索引有关,至少这是我倾向于的方向。无论如何,如果有人可以提供一些帮助,那就太好了!
谢谢!
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
fortran - Fortran:从一行中一次读取一个值
我正在使用 FORTRAN 从 ASCII 文本文件中读取数据。该文件每行包含多个数据值,但每行值的数量不是恒定的。
通常在一个 read 语句之后,Fortran 会转到下一行。我想要做的是一次读取一个数据值。如果它到达行尾,它应该继续阅读下一行。这可能吗?
fortran - 在 Fortran 90 中打开多个文件
我想打开 10,000 个文件名从abc25000
until开始的文件abc35000
,并将一些信息复制到每个文件中。我写的代码如下:
结尾
这段代码应该从abc24000
until开始生成文件,abc35000
但它停止了大约一半说
在文件 test-openFile.f90 (unit = 26021, file = '') 的第 17 行
Fortran 运行时错误:打开的文件太多
我需要做什么来修复上面的代码?
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.)
linux - 长时间运行时程序停止
固定的:
好吧,这似乎有点傻。原来 top 显示不正确,程序实际上继续运行。也许CPU时间变得太大而无法显示?无论哪种方式,该程序似乎都运行良好,而整个问题都没有实际意义。
谢谢(很抱歉这个愚蠢的问题)。
原问:
我正在运行 Ubuntu 服务器 10.04.3 的计算机上运行模拟。短期运行(<24 小时)运行良好,但长期运行最终会停止。停止,我的意思是程序不再获得任何 CPU 时间,但它仍将所有信息保存在内存中。为了运行这些模拟,我对程序进行 SSH 和 nohup 并将任何输出通过管道传输到文件。
其他信息:
系统肯定没有用完 RAM。该程序在完成之前不需要读取或写入硬盘驱动器;计算完全在内存中完成。该程序没有被杀死,因为它在停止后仍然有一个 PID。我正在使用openmp,但是增加了最大进程数并且最大时间是无限的。我正在使用 ARPACK fortran 库找到矩阵的最大特征值。
关于导致这种行为的原因或如何恢复我目前停滞的程序的任何想法?
谢谢