fortran编译器4对11

我正在将一个应用程序从fortran旧版本(4.0)移植到新版本(11.0)。在移植时,我遇到了一些real*4变量的问题: real*4 a,b,c a=0.9876875 b=0.6754345 c=a*b 旧编译器中c的值0.667118,这是正确的值。但是有了新的编译器,我从输出中得到了一个小的变化(c变量),比如0.667120。虽然这是一个很小的变化,但我在其他一些计算中使用了这些值。因此,总产量有巨大的差异。如何克服这个问题 我假设您使用的是英特尔。尝试在不进行优化的情况下进

英特尔Fortran编译器“-平行;不起作用

我有一个串行Fortran代码,运行良好。一旦我使用ifort-parallel编译相同的代码并运行它,它就会给出错误的结果和溢出。我希望使用“-parallel”标志,英特尔编译器能够选择可以安全并行化的循环,并且我应该得到与串行代码完全相同的结果,但这并没有发生。更奇怪的行为是,我继续并关闭了代码中所有的do循环并行化!DEC$NOPARALLEL,使用ifort-parallel编译代码,以确保非循环被并行化,然后运行。令人惊讶的是,我得到了同样的错误结果和溢出,尽管后一个操作应该完全等同

启动屏幕太快,我可以';我看不到我的Fortran程序的结果

我是编程新手。我开始用Fortran编写Hello world,但启动屏幕非常快。为什么我什么都看不见?为什么黑屏上没有显示“你好,世界” 我看到闪屏,但它以光速消失 program HelloWorld write (*,*) 'Hello, world!' ! This is an inline comment end program HelloWorld 我猜您的Fortran程序正在写入屏幕,然后当程序完成时屏幕消失。有点像Windows命令窗口 尝试在写操作之后放置rea

Fortran 变量在调用子例程后奇怪地取零值

我在尝试将以前使用compaq visual fortran 6.6编译的代码转换为gfortran时遇到了一些问题。 以下是我在gfortran遇到的一个具体问题: 有一个称为“et”的变量,其值为3E+10。然后程序调用一个子例程。“et”不会出现在子程序中,但返回主程序后,它现在的值为0。 使用compaq visual fortran时,我没有遇到此问题。 我正在编写的代码是一个庞大的科学程序,因此我只在下面列出了其中的一小部分: c c calculate load/unloa

Fortran 地板怎么没有主型?

我正在用ifort编译器运行Fortran 90。据我所知,floor是Fortran 90中引入的一个函数 /home/disk/p/atms380/xx/October-Runs/timeManMod/SourceMods/time_manager.F90(664): error #6404: This name does not have a type, and must have an explicit type. [FLOOR] tmd = day_earth/PLANET_DAY

Fortran编译错误:两个主程序位于(1)和(2)

我在编译我写的程序时遇到了麻烦。我花了几个小时试图找出问题所在,但它只是说有两个主要程序根本没有任何帮助。我将非常感谢任何帮助。谢谢 c comments * program cylinder real diam(10),height(10),volume(10) external circ,surface,vol integer count,i,j parameter (pi = 3.14159) j = 0 count = 1

Fortran 为什么在明确写入数组边界时没有运行时错误?

我有一个程序,它分配的数组超出了它的边界,我希望抛出一个运行时错误。然而,不会产生任何错误,程序继续写入未声明的内存。是否有一些编译器选项可以防止这种情况?随着内存转储的显示,很明显,这种越界是真实的。有没有一种方法可以声明变量或参数规范来捕捉这种情况?显然,这是一个明显的例子,但是当任务是维护数千行F77派生代码时,并不总是清楚(对我来说)是否会发生这种情况 PROGRAM TEST_CODE IMPLICIT NONE INTEGER*4 :: R(5) ! Array

Fortran 如何为扩展抽象类型的派生类型重载运算符?

我以Metcalf等人的“Fortran 95/2003解释”为例,因为我自己的代码也有同样的目的 type, abstract :: my_numeric_type contains private procedure(op2), deferred :: add generic, public :: operator(+) => add end type abstract interface function op2(a,b) result (r)

不同等级的重载fortran接口

在Fortran模块中,我有一个函数,它接受数组及其名称,从数据库(实际上调用C函数)获取数组的形状,将数组复制到临时缓冲区中,并将缓冲区传递给另一个处理它的C函数。此Fortran函数的名称为fs_WriteData_i(整数数据),fs_WriteData_f(实数)和fs_WriteData_d(双精度)。所有这些函数不仅可以接受一维数组,还可以接受2D、3D和4D数组,它们工作得非常好。下面是其中一个子例程的接口: subroutine fs_WriteData_d(fieldname,

Fortran 在Include文件中使用Do循环

在我的fortran代码中,我试图包含一个DO循环,但最终得到的结果是“如果未闭合,则为DO循环或块”。如果打开include语句后的任何其他DO循环,则会将其视为嵌套循环,向我指示正确解释了包含的开始DO行,但没有正确解释END DO语句。我已经将包含的代码简化为基本代码,以确保它是循环,而不是循环中出现问题的语句。控制变量在DO循环之前声明 DO A = 1,3 END DO Fortran77是否不允许在包含文件中使用DO循环 如果我的编译器变化很大,我将使用gfortran 编辑:语法

Fortran中的错误:当需要一个过程时,尝试将参数4作为实数(种类=1)调用例程

我一生中从未做过编程,这是我第一次编写uni赋值代码,我在编译阶段没有遇到错误,但myh程序没有运行,因为标题中有错误,我想问题是在调用子程序时。有人能帮我吗?这是我的第一个代码,它真的令人沮丧。多谢各位 !NUMERICAL COMPUTATION OF INCOMPRESSIBLE COUETTE FLOW USING FINITE DIFFERENCE METHOD !IMPLICIT APPROACH !MODEL EQUATION !PARTIAL(U)/PARTIAL(T)=1/

Fortran 修改刚性解算器(vode)中的因变量

我正在使用来自的ODE解算器来解一个刚性稀疏系统(应用程序是大气化学)。在子例程dvode的第一次调用中,完成一组初始化任务,并将因变量y的初始值数组作为输入。在随后的调用中,例程执行实际积分,数组y仅用作输出 由于各种原因,我需要在集成期间修改从属数组y的一个元素。由于除第一次调用dvode外,所有调用都将y用作输出,因此忽略对y输入值的修改。相关数据似乎存储在工作区数组中 是否有任何方法强制dvode以允许我在集成过程中更改依赖数组的值?我不想弄乱解算器的内部结构,如果可能的话,我希望避免修

Fortran 类型绑定过程中的多态性

有没有一种方法可以将同一个函数用作两个或更多类型的类型绑定过程?例如,想象以下情况: module definitions implicit none type type1 integer i contains procedure,pass :: init1 end type type type2 integer i contains procedure,pass :: init2 end type contains subroutine init1(

Fortran 虚拟过程中的接口失配

我想用牛顿法解非线性方程组 这是主要节目 program main use nrtype; use nr ! The type and module is copyed by the numeric recipes implicit none integer(i4b) :: ntrial =20 real(sp) :: x(2)= [0.9,0.8] real(sp) :: tolx = 1.0e-4_sp real(sp) :: tolf

Fortran 90基础:牛顿';s法;do loop似乎不起作用,有人知道为什么吗?

我们被告知使用x=-cos(((2i-1)/2n)π)作为牛顿方法每个循环的起始猜测(找到所有的根),但是我得到了在第一次猜测之后立即打印x的子程序,它似乎总是-1(所以我认为问题在于第一次猜测);所以我的所有循环都得到了相同的根。我似乎不明白为什么会发生这种事,这让我非常沮丧 subroutine Quadrature(n) implicit none integer, parameter :: dpr = selected_real_kind(15) !Double precision r

Fortran 实(8)分辨率,数据溢出

我有以下代码没有使用gfortran编译: program test_overflow real(8) a,b b=0.d0 a=1e39 write(*,*) a*b end program gfortran的错误输出为 test.f90:4.14: a=1e39 1 Error: Real constant overflows its kind at (1) 我不知道这里有什么问题。就我所记得的,real8应该

从Julia调用Fortran函数,返回数组:未知函数,segfault?

我想从Julia那里调用Fortran库中的函数。在本例中,我有一个函数eye,它接受一个整数,并返回一个二维整数数组 Fortran模块被编译成一个共享库,使用 $ gfortran -shared -fPIC -o matrix_routines.so matrix_routines.f90 此后,我试图从交互式Julia解释器中调用它,就像这样(名称取自nm): 然而,这立即导致Julia向我抛出一个错误: signal (11): Segmentation fault __matrix

Fortran 90虚拟过程中的接口不匹配

我在Fortan 90中遇到了这个错误: (1)处伪过程“dfpmin”中的接口不匹配:参数n的维度1中的形状不匹配 我的主要代码如下: program main real(8), allocatable :: theta(:) real(8), allocatable :: grad(:) real(8), allocatable :: mat(:,:) real(8), allocatable :: thetagrad(:) 随后在代码中,向量theta被分配为维度ntheta alloc

Fortran Intel Cluster Studio无法在系统上检测到glibc库

我试图在Arch Linux上安装Intel Parallel Studio XE 2016,但安装脚本抱怨缺少一个可选的先决条件: 安装程序无法在系统上检测到glibc库。该产品需要glibc库版本2.3.4或更高版本。联系您的系统 管理员安装符合要求的glibc版本或在服务器上安装产品 兼容系统 我已经安装了glibc 2.22版。我如何告知脚本glibc实际上位于标准位置?如果我跳过警告并继续安装,我会 Step 5 of 6 | Installation --------------

fortransqrt()错误

我是Fortran的新手,我一直在使用下面的程序来使用二次方程求根 它显示以下错误: d=sqrt(bsq\xE2\x80\x93 ac4) 1. 错误:参数列表中(1)处的语法错误 程序 隐式无 real::a,b,c,root1,root2 real::bsq、ac4、d 打印*,“请输入系数a、b和c作为实数” 读*,a,b,c bsq=b*b ac4=4*a*c 如果(bsq

Fortran操作码映射?或;“大O”;符号还是类似的?

我正在寻找某种类型的映射或文件,以说明计算机在Fortran中运行某些内在函数和循环所需的工作量。例如:运行基本if-then语句检查布尔值(或逻辑值)所需的决策量。以及计算基本算术函数(如加法和乘法)需要多少决策 我知道在汇编中,它通常被称为操作码映射,但我意识到时间会根据计算机的速度而有所不同,因此我正在寻找更类似于算法的“大O”符号的东西 我的主要问题是,我正在用10000多个时间步长映射一个粒子在时间中的位置,并将信息写入一个文件中,然后绘制出粒子的轨迹图。我很想知道在这个程序中具体的时

fortran中重载时参数中的秩不匹配

我有一个向量派生类型 Type :: Vector Real (Real32), Allocatable :: r32(:) Real (Real64), Allocatable :: r64(:) Real (Real128), Allocatable :: r128(:) Contains Procedure :: set => vector_set, &

在Fortran子程序中读取多个文件

我有一个Fortran子程序,在主程序中被调用多次(我没有访问权限)。在我的子例程中,我希望在每次迭代中根据输入参数从几个(~10^4)文件中的一个读取数据。每个文件都有一行数据;我的数据格式如下: 0.97014199999999995 0.24253600000000000 0.0000000000000000 我使用以下代码行打开和读取文件: program test_read implicit none inte

Fortran RMA MPI窗口访问延迟

我使用Fortran(带gfortran)和MPI 2(OpenMPI)。通过MPI\u Win\u lock和MPI\u Win\u unlock以及put和get操作(在内存的非重叠区域中),所有进程都会更新主进程上的一个变量,该变量通过窗口公开 然而,在一个测试用例中,我注意到,来自非主进程的解锁操作在主进程完成某些任务之前不会返回,在这种情况下,会休眠几秒钟 如果我没有让主机休眠,而是使用while循环和计时器让它等待几秒钟,同时让主机锁定和解锁窗口,一切都会变得更快: call sta

Fortran 如何使作为参数传递的子例程名称在整个模块中可用?

我希望使用一个变量子例程名称,并且我希望这个名称在整个模块中都可用,而不仅仅是在单个子例程中 作为参数传递的变量子例程名称是一种数据类型。它存放在哪里?我如何访问它 这里有更多的解释。G是一个非线性拟合程序。H使用G,但参数分组(迭代一次移动一个组)。G使用一个通用的正向模型子例程,其名称作为参数传递。我希望H保留这种普遍性 以下是使用带有硬编码子例程名称的变通方法的测试程序: module G_MOD implicit none character(len=30)::message

Fortran 注释行后以开头的行的含义*

在下面的代码中,注释行后面的行以*开头: C REF: LANDOLT-B\RNSTEIN 2A-CP.209 * DMUACD=+0.0020*XCOS(DEL)-0.0044*XSIN(ALP) * DMUACD=+0.0020*XCOS(DEL)-0.0044*XSIN(ALP)*xcos(del) * DMUD=-0.0044*XCOS(ALP) 这些行是什么意思?在固定格式Fortran中(语句从第7列开始,第1列中的C表示注释),第1列中的星号也

Fortran 2008-条件编译

我需要在Fortran2008中使用条件编译。到目前为止,我已经找到了,但不知何故它对我不起作用,尽管我用-cpp这样的标志编译代码 gfortran -Dconnection_m_EXPORTS -I/home/martin/4Neuro/build/lib -O2 -std=f2008 -cpp -fPIC -c /home/martin/4Neuro/src/connection_m.f90 -o CMakeFiles/connection_m.dir/connection_m.f

Fortran do循环退出中的并行死锁

下面的Coarray代码中出现了一个奇怪的现象 program strange implicit none integer :: counter = 0 logical :: co_missionAccomplished[*] co_missionAccomplished = .false. sync all do if (this_image()==1) then counter = counter+1 if (counter==2) co_missionAccom

使用Fortran获取系统信息

我对通过Fortran获取系统信息感兴趣-类别可能包括: 操作系统名称 操作系统版本 CPU体系结构(32/64位) 芯数 据我所知,您可以通过预处理指令获得基本的操作系统信息,例如 #ifdef _WIN32 print *,'Windows' #ifdef _APPLE_ print *,'macOS' #ifdef __linux print *,'Linux' #endif 这是一个1类的有效解决方案,但仍然剩下2-4类 谢谢 你可以用Fortran来做所有这些事情,除了不

&引用;Fortran运行时错误:文件结束“;使用指针创建链表时出现问题(在DO循环中读取)

我正在从输入文件创建一个链接列表。链表中的每个节点都包含每个输入块中的信息。 当我试图从输入文件中获取值时,我将多行(每次4行)分配到一个1D数组“tmp”中。我认为我在“input:DO”循环中使用的DO循环是错误的。但我不知道如何解决 我使用gfortran进行编译,编译时不会出错。 我曾尝试在“input:DO”循环中编写测试。结果表明,我可以成功地打开输入文件 PROGRAM read IMPLICIT NONE INTEGER,PARAMETER :: nat=4 cha

如何获得通用fortran输入值

我只是拿起,并试图清理,一些Fortran代码,利用HDF5库。在该库中有一个定义如下的函数: SUBROUTINE h5dwrite_f(dset_id, mem_type_id, buf, dims, hdferr, & mem_space_id, file_space_id, xfer_prp) IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset

Fortran 分配给延迟长度字符串数据类型组件

以下代码给出了GFortran和Intel Fortran中的错误,但似乎完全合理且明确 GFortran错误为 具有非零秩的零件引用右侧的组件不得具有可分配属性 我无法分配给可分配数组,但无法分配给可分配标量。这真的是标准所要求的吗?你只是“走得太快了”Strings是类型为tString且长度为2的向量 不能直接分配给字符串%S(这可能松散地对应于向量字符串中的所有属性S) 例如,为第一个条目指定字符串(1)%S program vls type :: tString cha

Fortran的交替返回特性与协同程序和生成器相比如何?

与协程和生成器相比,它的性能如何 英特尔Fortran编译器19.0开发人员指南和参考: 备用返回(伪)参数可以出现在子例程参数中 列表它们导致执行转移到带标签的语句,而不是 而不是调用 例行公事 关于发电机的章节: 生成器,也称为半例程,是协同例程的一个子集。具体来说,虽然两者都可以多次让步,暂停执行并允许在多个入口点重新进入,但它们在协同程序控制让步后立即继续执行的位置的能力上有所不同,虽然生成器不能交替返回,但只允许例程在调用后立即返回到其他地方。没有“暂停执行并允许重新进入”的能力。您可

Fortran '*';和'/';在read语句输入时无法识别

我开始学习Fortran,我正在做一个小的案例测试程序,用户输入两个实数并选择一个算术运算符(从+-*/)。当用户选择“*”时,出现以下错误 节目如下 program operateur implicit none CHARACTER(LEN=1) :: oper real::a,b,res print*,'Give the first number a :' read*,a print*,'Give the second number b :' read

Fortran 选择类型构造中的关联名称是否由OpenMP自动私有化?

我正在尝试分配一个多态可分配数组ary,它可以接受两种扩展类型的baseType(extType1及其扩展extType2): 为了并行化aryPrintTypes子例程,首先,我认为select type构造会有问题,因为相关的名称这个是在输入之后创建的$OMP并行DO循环。因此,我编写了第一个并行版本,如下所示: !-FIRST PARALLELIZED VERSION : subroutine aryPrintTypes(a)!-------------------------------

为什么fortran代码中的一个部分中的单行会突出显示,并变得像注释一样?

我正试图为多孔介质中的单相流编写一个fortran代码。 在离散方程和其他长线中,我有一个如下问题,如图所示。 在那个突出显示的短语之后,我的代码变成了注释。 有人能帮我吗?根据: 在当前状态下,扩展中固定格式Fortran的语法高亮显示仅支持72个字符的行长。第72列之后的任何内容在源代码中显示为注释(绿色),这也会影响以下行的外观(例如,当右括号位于绿色区域时) 您可以在fortran\u fixed-form.tmLanguage.json文件或VS代码设置中更改它。欢迎,请阅读本教程。您

Fortran中空流的可移植输出

我想用以下方式在Fortran程序中实现详细级别标志。代码将使用语句 write (level1, *) 'This will be shown always' write (level2, *) 'This will be shown sometimes' 而流level1、level2和更高的值将等于output\u unit,或者对应于/dev/null(在Unix上),具体取决于用户提供的详细标志的值 但是,/dev/null不是独立于平台的。我可以尝试手动检测Windows并在那里使

ctags不';fortran自定义类型的t标记复杂类型语句

调用以下mymodule.f90 system: mac osx catalina Exuberant Ctags 5.8 然后运行ctags-e mymodule.f90 生成的标记文件是: module mymodule public type :: thing1 real :: a end type thing1 type, extends(thing1) :: thing2 real :: b end type end module 这显然缺少

Fortran 双精度复数最小值的限制

我运行了我的Fortran代码,但我发现输出数据有一些“NaN”类型的数据。通过检查输出数据,我发现一些数据非常小(-1.627452237401066E-320),因此我认为这个问题是因为一些数据太小,甚至小于双精度复数的最小限制。我尝试使用“如果语句”来判断数据是否超过了双精度复数的最小限制;但是,“NaN”类型的数据仍然显示出来。这是部分输出数据 T_z_interpolating (0.000000000000000E+000,0.000000000000000E+000) T_y_in

fortran 90用户定义类型,按值传递?

我在Fortran 90中遇到了一个问题 我有一个用户定义的类型,当我调用其中一个MPI子例程时,数据看起来是通过值传递的(而不是我认为应该通过的地址)。输出参数未被修改。它似乎是特定于MPI调用的。我在一个简单的测试中尝试了同样的方法,我可以在调用范围中更改传入的值。我不确定这是为什么,因为我认为Fortran总是通过地址传递。知道会发生什么吗 为了清楚起见,注释后的代码段显示了调用是如何进行的。在第一个调用中,c%NSubDomains是一个输出参数,应该在调用范围内修改,但不是。当我使用数

Fortran中的内联读取是什么意思?

我在一段代码中发现了这种奇怪的说法: read(10, *) ((matrix(i, j), i=1, n), j=m, 1, -1) 我想知道这种内联递归读取是如何工作的。这是什么意思 matrixi,j,i=1,n,j=m,1,-1?这不是一个在线递归读取,不确定这个术语是从哪里来的,这是嵌套隐含do循环的一个示例,请参阅,例如,有关隐含do循环的语法和许多正在运行的示例。基本上,隐含do循环是在单行上编写do循环的一种方法。使用嵌套的隐含do循环,您可以在一行上写入多个do循环 在你的情

Fortran格式语句在使用前是否可以写成字符串?

我有一个Fortran程序,其中我使用一个格式语句来编写 WRITE (12,'(A72,1X,A,1X,I6.6)') ALINE,SFFIX(1:NUM),LINENO 这很好用。但是当我写一个字符串'fmtt'时 WRITE (fmtt,'(a)') trim(adjustl(sttr(2))) 其中字符串“sttr(2)是”(A72,1X,A,1X,I6.6)”,我通过打印类似于 WRITE(*,'(a)')fmtt 当我在write语句中使用字符串fmtt作为格式时,如 WRIT

在Fortran中向数组追加列的有效方法?

假设我有一个数组A(n,m)和一个数组B(n)。我想创建一个数组C(n,m+1),其中前m列是A中的列,最后一列是B 在Fortran中执行此操作的最佳方法是什么?我所说的“最佳”是指效率更高(耗时更少) 谢谢 试试这个 C(1:n,1:m) = A(1:n,1:m) C(1:n,m+1) = B(1:n)

Fortran cmplx()中的精度和种类

根据文件 cmplx(x,y)默认为单精度 但是它有kind参数 CMPLX(x,y,kind)具有实数部分为实数(x, 其虚部是实部(y,kind) 但我试过这个 print*,cmplx(1.12,2.34,kind(0D0)) 它给 (1.12000000476837,2.33999991416931) 它很复杂(8),但精度会降低 虽然我知道在这种情况下,我可以简单地使用(1.12D0,2.23D0)。但是我想知道cmplx中的kind有什么意义 问题在于,这些常量是单精度的,即使它

fortran中的并行do错误

我在上面写了一段Fortran代码来实现OpenMP,以三种不同的方式汇总8*8数组中的所有元素。第一种方法是使用减缩和工作。其次,我创建了一个包含8个元素的一维数组。我将平行区域中的每列求和,然后将它们求和。这同样有效。第三个,我用一个整数把数组中的每个元素求和,并把它放在并行do区域。此结果不正确,每次都会发生变化。我不明白为什么会发生这种情况。是因为没有指定public和private,还是过程中重写了变量b 在第三个场景中,b上有一个争用条件:多个线程在没有正确同步/私有化的情况下读取和

用Fortran将参数传递给子程序

我试图理解如何将一些带有值的变量从另一个子例程传递到一个子例程 我有密码: program pg call sub() end subroutine sub() character :: P(12,12) character :: D(20), N(26), userInput integer :: A,B A = 5 B = 2 userInput = "hello" call test(P,D,N,userInput,A,B) end subroutine subroutine te

gfortran关联错误的类型绑定过程

当我们编译(gfortran 5.3或7.2)并运行以下代码时,main.f03的第9行以一个从未调用过的子例程结束。有人能解释为什么吗 main.f03: program main use minimalisticcase implicit none type(DataStructure) :: data_structure type(DataLogger) :: data_logger call data_structure%init()

英特尔Fortran编译器2015(Mac OS X)的类型为(*)的语法错误

使用IFORT 2015(适用于Mac OS X)编译以下Fortran程序时: 。。。它给出了以下错误: example.f90(13): error #5082: Syntax error, found ',' when expecting one of: , <END_OF_STATEMENT> ; TYPE(*), INTENT(IN) :: variable -------^ 假定的类型声明type(*)是Fortran 2018(或Fortran 2008的TS2

PGI Fortran错误:可能未为str(npy.f90)指定PGF90-S-0155-IGNORE_TKR

我正在使用将2D数组保存为PythonNumpy.npy格式。我将npy.f90文件复制到当前目录中,在开头添加一行使用m_npy,然后调用save_npy(filename_str,array)以格式保存fortran数组 如前所述,我在Ubuntu OS bash终端中使用以下命令进行编译 然后我运行a.out 现在,如何用同样的方法来处理? 如果我只是用pgfortran替换gfortran,用-Mfree标记-ffree form,我不会得到任何.o文件,也不会得到任何a.out文件 有

  1    2   3   4   5   6  ... 下一页 最后一页 共 37 页