问题标签 [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.
fortran - 在 Fortran90 中从文本文件中跳过一行
我正在用 fortran (90) 编写。我的程序必须读取 file1,对它的每一行执行一些操作并将结果写入 file2。但问题 - file1 在第一行有一些不需要的信息。
如何使用 Fortran 从输入文件中跳过一行?
编码:
第一行是文本和数字的组合。
cuda - 如何在 fortran 中创建自定义数组?
我一直在考虑将 cuda 库移植到 fortran。PGI和EM Photonics似乎是目前存在的两个库。但是我只在这里找到了我要找的东西
所以我的问题是,有没有办法像上面提到的代码示例一样创建自定义数组?还是它是 PGI 专有编译器的一部分?
为进一步清晰而编辑
换句话说,我可以这样做吗
fortran - 我的代码中只剩下一个错误,
我在第 85 行和第 87 行只收到一个相同的错误。它说:
y 在 y(j-1) 和 y(j+1) 处没有隐式类型。
fortran - Fortran 90 中的堆栈溢出
我在 Fortran 90 中编写了一个相当大的程序。它已经运行了很长一段时间,但是今天我试图将它提高一个档次并增加问题的大小(它是一个研究非标准 FE 求解器,如果帮助任何人...)现在我收到“堆栈溢出”错误消息,程序自然会终止,而没有给我任何有用的东西。
该程序首先设置所有相关的数组和矩阵,然后将几行有关此的统计信息打印到日志文件中。即使有我的新的更大的问题,这也可以正常工作(尽管有点慢),但是随着“数字运算”的进行,它会失败。
让我感到困惑的是,那时所有的东西都已经分配好了(并且工作没有错误)。我不完全确定堆栈是什么(维基百科和这里的几个步骤并没有做太多,因为我对计算机的“幕后”工作只有相当基本的了解)。
假设我有一些数组初始化为:
在一些初始化例程(即从文件中读取输入等)之后被分配为(我存储了一些大小整数以便更容易地传递给固定大小的 IA 中的子例程):
这基本上是在初始部分发生的事情,到目前为止一切都很好。但是当我然后调用一个子程序时
例程看起来像(没什么花哨的):
现在我得到一个错误!屏幕输出显示:
但是,当我使用调试器运行程序时,它会在名为winsig.c
(不是我的文件,但可能是编译器的一部分?)的文件中的第 419 行中断。它似乎是调用例程的一部分,sigreterror:
它是已调用的默认情况,返回 text Invalid signal or error
。附有一条注释行,奇怪的是/* should never happen, but compiler can't tell */
……?
所以我想我的问题是,为什么会发生这种情况以及实际发生了什么?我以为只要我可以分配所有相关的内存就可以了?对子例程的调用是否会复制参数,或者只是指向它们的指针?如果答案是副本,那么我可以看到问题可能出在哪里,如果是这样:关于如何解决它的任何想法?
我试图解决的问题很大,但绝不是疯狂的。标准有限元求解器可以处理比我目前的更大的问题。我在 Dell PowerEdge 1850 上运行程序,操作系统是 Microsoft Server 2008 R2 Enterprise。根据提示systeminfo
,cmd
我有 8GB 的物理内存和几乎 16GB 的虚拟内存。据我了解,我的所有数组和矩阵的总和不应超过 100MB - 大约 5.5Minteger(4)
和 2.5M real(8)
(根据我的说法应该只有大约 44MB,但公平地说,再增加 50MB 的开销)。
我使用与 Microsoft Visual Studio 2008 集成的 Intel Fortran 编译器。
添加一些实际的源代码以澄清一点
是对例程的实际调用。大数组是posc
,bmtrx
并且aa
- 所有其他数组至少小一个数量级(如果不是更多)。posc
是INTEGER(4)
和是bmtrx
_aa
REAL(8)
它在上面的最后一行之前失败了。
fortran90 - 将整数转换为长双精度
我必须创建一个长的双随机发生器。我正在考虑一个线性同余生成器,因为我不需要高精度随机序列。但是如何将整数转换为长双精度型呢?
fortran - 编译具有多个部分的 Fortran 程序
我对 Fortran 和整个 Intel 编译器非常陌生(我正在使用基于 Windows 的 Intel 编译器和 IMSL 库,没有 Visual Studio 集成,因此只有命令行)。
问题应该非常简单:我有一个需要编译的 Fortran 程序,它存储为四个不同的源代码部分。主程序(和一些子程序)存放在名为central.for的代码文件中,另外还有三个文件,我们分别称它们为s1.for、s2.for和s3.for,每个文件只包含一个子程序(让称它们为 sub1-sub3) 并且没有主程序。主程序调用存储在 s1-s3 和 central.for 中的子程序。
问题是我应该如何编译它:
当我尝试编译 central.for 时,它给出了error LNK2019: unresolved external symbol _SUB1 referenced in function _MAIN__
. 同样,它为 SUB2 和 SUB3 提供相同的消息。
当我尝试编译 s1.for-s3.for 时,它给出了error LNK2019: unresolved external symbol _MAIN__ referenced in function _main
很明显,我需要以某种方式链接它们。但是,我不知道如何
fortran90 - 作为类型的类型成员可以成为目标吗?
假设我有以下设置
我想要另一种类型
并设置barPtr
为指向foo%bar
。为此,我必须声明type(BarType), target :: bar
,但出现错误。我没有进一步调查,并决定改变策略,但只是出于好奇,你知道这是否允许吗?
fortran - Fortran 90 和 Fortran 95 之间的区别
我可以用 Fortran 95 编译器编译 Fortran 90 文件吗?Fortran 95 似乎有很多,但 Fortran 90 没有。
fortran - Fortran 90 中是否有更好的双精度赋值?
在 Fortran 90(在 Mac OS X 上使用 gfortran)中,如果我将一个值分配给一个双精度变量而没有明确地附加一种类型,则精度不会“采用”。我的意思是,如果我运行以下程序:
我得到结果:
单精度结果按预期从第 8 位小数开始四舍五入,但只有我用 _dp 显式分配的双精度变量保持所有 16 位精度。这似乎很奇怪,正如我所期望的(我对 Fortran 比较陌生)双精度变量将自动是双精度的。有没有更好的方法来分配双精度变量,还是我必须像上面那样显式键入它们?
format - 在 Fortran 90/95 中格式化
我正在学习 Fortran 90/95,我正在使用的书讨论了行式打印机对格式声明的影响。根据书本,程序使用行的第一个字符来决定该行相对于上一行的位置(即'1'开始新页面,'0'跳过一行,'+'覆盖上一行,并且' ' 或任何其他字符在前一行下方写入新行)。我在控制台中编译并运行了一个简单的程序来测试它,但没有观察到这种行为。
输出是
我本来期望的地方
有人知道为什么吗?这是 Fortran 90/95 中未使用的遗留功能吗?它是打印到控制台的特定行为吗?我想知道何时(如果有的话)我需要在编写时在格式语句中声明一个特殊的第一个字符。
我的编译器是 Force 2.0.9,我相信它是基于 gfortran 的。我在 Windows 7 上运行它,控制台是 PowerShell。
谢谢您的帮助!