问题标签 [fortran95]
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.
r - R:向量化有限差分方程
我正在尝试将一些 Fortran 代码移至 R,以获得与化学动力学相关的有限差异。
示例 Fortran 循环:
类似的 R 代码:
这会覆盖我在数据框中的第一个值,并在其他地方留下零。我想运行这个矢量化而不使用 for 循环,因为它们在 R 中太慢了。此外,我的函数到目前为止只计算第一列。在第一列的语法正确之前,我无法让第二列正常工作。
pointers - 如何将指针分配给矩阵的对角线?
我有一个矩阵说REAL*8 MATRIX(100,100)
,我想从主对角线或上三角形创建一个指针。怎么做?
目的是以干净的“命名”方式轻松访问这些元素。
pointers - Fortran:指向各种数组值函数的指针
我开始这个线程是因为我想学习如何成功地使用相同的指针作为不同数组值函数的别名,比如 f1 和 f2,顺序。
这是一个不成功的代码来说明我想要什么。谢谢。李
fortran - Numerical Precision in Fortran 95:
I have the following Fortran code:
I compile with gfortran, and the output is:
Of course the second is correct, but should this be the case? It seems like Pi1 is being input to memory as a single precision number, and then put into a double precision memory slot. But this seems like an error to me. Am I correct?
floating-point - fortran 中的数据类型不匹配
我在 Fortran 95 中编写了一个基本算法来计算一个函数的梯度(代码中规定了一个例子),它使用中心差异增加了一个称为 Richardson 外推的过程。
在单精度下,它运行良好并给了我不错的结果。但是当我尝试更改为代码中所示的双精度时,在尝试编译时出现错误,声称赋值语句
正在产生类型不匹配real(4)/real(8)
。我尝试了几种不同的双精度声明,在代码中附加了每个适当的双精度常量,d0
每次都得到相同的错误。f
对于该函数如何生成单个精度数,我感到有些困惑。
valgrind - valgrind 在将第二行打印到文件时给出错误
我正在使用 valgrind 来查找我的代码中的错误。我使用的命令是
我-g
只用代码编译代码。我收到许多指向单个写入行的错误(三个打印值已初始化且定义明确)。
所有的Conditional jump or move depends on uninitialised value(s)
错误。所述行是从一堆行打印到单个文件的第二行。在错误结束时,我又得到了两个,一个指向打开文件的行
resStep
是整数。错误是Syscall param write(buf) points to uninitialised byte(s)
。最后,Address 0x52d83f4 is 212 bytes inside a block of size 8,344 alloc'd
刷新文件时(在关闭文件之前)出现错误。
我在这里找不到任何逻辑。如果问题在于以错误的方式打开文件,我不会在第一行得到错误吗?
我使用 f95 编译它,我的 gcc 版本是 4.1.2。我什么都升级不了。
format - 如何输出指数值
在输出文件中使用科学格式,我得到:0.245E+02 而不是 2.45E+01。
如何在 Fortran 中以后期格式输出?
更新:
根据@Bálint Aradi 的回答,我应该设置x = 24.5
才能得到2.45E+01
.
fortran - 如何在 DOS 或 Fortran 中读取 Notepad++ 文件?
我收到了一个使用 Notepad++ 创建的文本文件,我正尝试在 Mac 和 PC 上使用 Fortran 95 程序读取该文本文件。读取行是:
由于我不知道行长是多少,我将输入定义为 512 的长度。对于非记事本++文件,当找到行尾时,读取“停止”并自动前进到下一行文本。使用 notepad++ 文件,它读取 512 个字符,跳过回车。当我使用 pc 上的 dos 编辑器打开文件时,我看到回车符号(ASCII char 13),但行之间没有中断,它们都相互附加。
我尝试搜索ichar(13)
and ichar(10)
,退格到行首并尝试强制前进到下一行;与 一起阅读format '(a,/')'
,但无法进行任何工作。
fortran - FORTRAN 遇到提前 EOL
~~已解决,见编辑4)
我在 OSX 上使用 Java 创建一个输入文件,当我尝试运行读取输入文件的 FORTRAN 程序时,我在第一行遇到 EOF:
第 37 行开始的地方:
我读到这可能是操作系统的 EOL 字符的问题,我之前遇到过它,但不记得我是如何修复它的。我在 Java 代码中使用“\n”。
我还尝试使用 FORTRAN 代码编写一个简单的文件,在 TextWrangler 中打开它并看到一些前导字符(菱形),因此我将其复制到我的 Java 代码中,但无济于事。
此外,如果我在 Eclipse 中编辑文本并使用 FORTRAN 程序运行它,它就可以工作。
请帮助,在此先感谢
Edit1) 这是 input2.txt 的 Hexdump,我没有看到任何奇怪的东西,但是我的眼睛没有受过训练。
这些零现在还可以,Java 代码中的小错误,但 FORTRAN 仍然应该在计算中给我 NaN。
Edit2)来自测试文件的十六进制转储:
我以前遇到过这个问题,一个人通过将 EOL 显式设置为 ^M (而不是 Unix 的 ^J)成功地测试了文件,但是,我不知道如何用 java 做到这一点,不应该是 EOL 约定如果 program.f 在同一台机器上编译,是否相同?
Edit3) 好的,似乎该文件被写入我的“/Users/Tricknology/”目录,而不是我运行程序的位置。然而,这让我遇到了一个问题。
太长了,并且
产生:
(包括空格)
任何人都知道使这项工作的方法吗?我认为这是问题的根源。
Edit4)找到解决方案:
我将读取行更改为
在哪里
它有效。谢谢大家,我希望这可以帮助其他人在未来节省很多时间。
fortran90 - fortran 90中的嵌套do while循环
我的代码中有以下部分。
在这里,我的意图是通过 y-do-loop 为 x-do-loop 的 x 中的每个更新改变 y 值。但是,在第一个 x 循环之后,y 循环不再执行,即我得到以下输出。
我不能出于我的目的使用 do while 吗?如果是,可以进行哪些修改?