问题标签 [silverfrost-fortran]

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 投票
1 回答
5743 浏览

fortran - 如何在 Fortran 95 中包含来自不同文件的模块?

我认为这个问题很明显,虽然我用谷歌搜索了它,但我找不到任何解决方案。我想拆分我的源代码以使其更易于维护。如何引用另一个文件中的模块?

0 投票
1 回答
248 浏览

fortran - 为什么 silverfrost 和 gfortran 的结果不同?

当我使用Silverfrost fortran运行我的代码时,结果是-2.987531633638E-02. 但是对于gfortran(在 cygwin 和 ubuntu linux 下)它是-2.9875316336381942E-002. 我的代码在这里:

两种结果之间存在巨大差异。我无法将这种差异的原因解释为浮点不准确。

注意:我的代码是草稿版本,没有物理意义。

0 投票
1 回答
613 浏览

fortran - 在另一个子程序中定义一个子程序

Fortran 是否可以在另一个子程序中定义一个子程序?当我尝试类似

我的编译器(Silverfrost)给了我一个递归错误。

0 投票
0 回答
123 浏览

fortran - 当需要实数时,尝试将带有参数的例程作为过程调用

我有一个可以毫无问题地编译的 Fortran 程序,但随后出现错误:

当需要 real(kind=2) 时,尝试将参数编号为 1 的例程作为过程调用

ROOTS!X_ROOT - 在文件 exercise2base.f90 的第 20 行 [+0074]

main - 在文件 exercise2base.f90 的第 65 行 [+00c8]

我真的不知道这意味着什么,我想这可能意味着我将一个参数传递给了某个类型不正确的函数,但是给出的引用没有意义:

  • 第 20 行是 end function x_rtsmpl
  • 第 66 行是answer=x_root(bb_integral,l1,l2,epsx,epsf,root_type)

所以我不明白发生了什么...

我在 Plato IDE 中使用 Silverfrost。

编辑:代码现在一直修剪到它的基本功能,只有声明和简单的“虚拟”计算。

0 投票
0 回答
84 浏览

windows - Fortran Silverfrost 编译器创建无法删除的 .exe

我在新计算机上使用 Windows 10,而不是在工作中。有时,我的 Silverfrost 编译器(截至 2017 年 7 月 28 日最新)会时不时地创建一个 .exe 文件,请求管理员权限删除、移动或修改。问题是,我是管理员,文件不在乎。

我尝试以管理员身份删除它,我尝试以管理员身份运行命令行并删除它,我尝试修改其所在文件夹的权限以递归地赋予我权限,但没有任何效果。我可以删除它的唯一方法是从 linux USB 启动我的 PC。

0 投票
0 回答
177 浏览

fortran - 调试访问冲突错误:写入 2071E05A0 而不是 3071E05A0

最终编辑:

silverfrost 论坛上的一些用户非常有帮助地指导我简化代码和解决方案。

可以使用以下代码复制该问题:

该问题仅在MXAV>182 时出现,这表明存在内存问题。实际上,将尺寸相乘:183 * 1714 * 1714 * 4 会产生 >2GB,超过堆栈大小。

一种解决方案是按如下方式使用堆(Fortan 95):

完成此操作后,我们可以分配超过 2GB 的空间,并且数组可以正常工作。这段代码源自的程序已经有几年历史了,我们现在才遇到这个问题,因为我们构建的模型比以前大很多倍。由于 Fortran 77 不允许 ALLOCATABLE 数组,我们必须要么减少堆栈使用,要么移植代码 - 或寻求另一种优化。


编辑添加:

我现在整理了一个包含可重现代码的 git repo


概述

我有一个程序在编译为 32 位时运行良好,但在编译并以 64 位运行时出现访问冲突错误。

我正在使用 Silverfrost Fortran 编译器 FTN95 v8.51,尽管使用 v8.40 和 v8.50 会出现此问题。


示例代码

注意该函数zonedef只是检查一个区域对于我们想要进行的计算是否有效。此函数返回一个logical.


调试

正如我最初提到的,这个程序的 32 位编译版本运行良好。尝试运行 64 位版本时,第一个循环的输出如下:

来自 sdbg64.exe:

将异常写入文件:

剩下的……请多多包涵。无论如何,我都不是受过训练的软件工程师或 fortran 开发人员,所以我在黑暗中刺了一下以进行故障排除。

的值为ZNZNDAAV(1,337,337,1003)2.241640,并且正在添加到ZNZNDAAV(1,337,1714,1003). 这与异常输出中详述的寄存器 XMM11 相符。该值位于 address 000000029BA3BD60。另一个值在 address 00000003071E05A0

IIUC,在 relocmon.inc 中,我们设置COMMON /DDMON/为包含维度数组znzndaav,因此如果软件名义上工作,则相关值的地址将在/DDMON/块内。的地址范围/DDMON/z'000000027FFF6040' - z'0000000307421150'。如果我的逻辑是正确的,则违规发生此块之外。

在我看来,该程序正在尝试写入00000002071E05A0它应该使用的时间00000003071E05A0

谁能帮我确定为什么会这样?似乎有一些系统性的东西——这仅仅是巧合吗?

0 投票
0 回答
226 浏览

gcc - GMP 是否适用于 gfortran?Silverfrost Fortran 是否有任意精度的算术选项?

我正在研究一些 Fortran 的东西,可能是 Fortran90 或 Fortran95,并且想知道 GMP 是否适用于 gfortran 编译器。如果是这样,如何在 gfortran 中使用任意精度算术?另外,Silverfrost Fortran 编译器是否有任意算术选项?gfortran 或 Silverfrost 是否支持 Java 的 BigDecimal 之类的东西?

0 投票
0 回答
217 浏览

c++ - 借助C++在Matlab中调用Fortran DLL

我有一个 fortran 代码,想在 MATLAB (2019) 中运行它。我想坚持使用 silverfrost(64 位)编译器 (FTN95) 来编译我的初始 fortran 代码。为了了解它是如何工作的,我从 Fortran 中的一个简单代码开始:(multiply.f90)

我将其编译为 dll 数据并在 C++ 中使用此 dll 生成 C++ dll(64 位)以在 MATLAB 中使用它。C++ dll 在 Visual Studio 2015 中生成。这是我的 C++ 代码 (Cppdll.cpp):

和相应的头文件(Cppdll.h):

我将这些 dll(multiply.dll 和 Cppdll.dll)放在 MATLAB 路径中,并在程序中加载 Cppdll。通过加载 dll,MATLAB 不会抱怨,但是当我调用 dll 函数(例如calllib('Cppdll','DLLRes',2.1,5.23))时,MATLAB 意外崩溃,即它通常在开始时工作并且结果是正确的,但在一段时间后,MATLAB 崩溃时出现/不出现错误消息。错误消息(如果显示)是不同的,但它们都抱怨 Silverfrost 异常处理程序:

错误样本 1

错误样本 2

错误

[notfound,warnings] = loadlibrary('Cppdll.dll','Cppdll.h')我还应该提到 MATLAB 在我运行命令时给了我以下警告:

我在哪里犯了错误以及如何解决这个问题?

提前谢谢!

0 投票
0 回答
95 浏览

fortran - Fortran 中用于三角函数的双精度

我正在使用以下代码cos计算pi/2in Fortran

gfortran我使用和编译ftn95。两者的输出是

我如何在angle这里获得更好的精度?例如在C++我看到它的顺序是E-18, 对于所有声明使用double.

如果需要更多信息来更好地解释它,请告诉我。

额外:我正在使用的主要代码,物理方程具有三角项,存在精度问题,我不完全确定,但我怀疑是因为这个。所以,想检查一下上面是否可以以某种方式改进。不是专家Fortran如此努力地弄清楚这一点。