我正在将一个应用程序从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代码,运行良好。一旦我使用ifort-parallel编译相同的代码并运行它,它就会给出错误的结果和溢出。我希望使用“-parallel”标志,英特尔编译器能够选择可以安全并行化的循环,并且我应该得到与串行代码完全相同的结果,但这并没有发生。更奇怪的行为是,我继续并关闭了代码中所有的do循环并行化!DEC$NOPARALLEL,使用ifort-parallel编译代码,以确保非循环被并行化,然后运行。令人惊讶的是,我得到了同样的错误结果和溢出,尽管后一个操作应该完全等同
我是编程新手。我开始用Fortran编写Hello world,但启动屏幕非常快。为什么我什么都看不见?为什么黑屏上没有显示“你好,世界”
我看到闪屏,但它以光速消失
program HelloWorld
write (*,*) 'Hello, world!' ! This is an inline comment
end program HelloWorld
我猜您的Fortran程序正在写入屏幕,然后当程序完成时屏幕消失。有点像Windows命令窗口
尝试在写操作之后放置rea
标签: Fortran
gfortranfortran-common-block
我在尝试将以前使用compaq visual fortran 6.6编译的代码转换为gfortran时遇到了一些问题。
以下是我在gfortran遇到的一个具体问题:
有一个称为“et”的变量,其值为3E+10。然后程序调用一个子例程。“et”不会出现在子程序中,但返回主程序后,它现在的值为0。
使用compaq visual fortran时,我没有遇到此问题。
我正在编写的代码是一个庞大的科学程序,因此我只在下面列出了其中的一小部分:
c
c calculate load/unloa
我正在用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
我在编译我写的程序时遇到了麻烦。我花了几个小时试图找出问题所在,但它只是说有两个主要程序根本没有任何帮助。我将非常感谢任何帮助。谢谢
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
runtime-errorrange-checking
我有一个程序,它分配的数组超出了它的边界,我希望抛出一个运行时错误。然而,不会产生任何错误,程序继续写入未声明的内存。是否有一些编译器选项可以防止这种情况?随着内存转储的显示,很明显,这种越界是真实的。有没有一种方法可以声明变量或参数规范来捕捉这种情况?显然,这是一个明显的例子,但是当任务是维护数千行F77派生代码时,并不总是清楚(对我来说)是否会发生这种情况
PROGRAM TEST_CODE
IMPLICIT NONE
INTEGER*4 :: R(5) ! Array
我以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模块中,我有一个函数,它接受数组及其名称,从数据库(实际上调用C函数)获取数组的形状,将数组复制到临时缓冲区中,并将缓冲区传递给另一个处理它的C函数。此Fortran函数的名称为fs_WriteData_i(整数数据),fs_WriteData_f(实数)和fs_WriteData_d(双精度)。所有这些函数不仅可以接受一维数组,还可以接受2D、3D和4D数组,它们工作得非常好。下面是其中一个子例程的接口:
subroutine fs_WriteData_d(fieldname,
在我的fortran代码中,我试图包含一个DO循环,但最终得到的结果是“如果未闭合,则为DO循环或块”。如果打开include语句后的任何其他DO循环,则会将其视为嵌套循环,向我指示正确解释了包含的开始DO行,但没有正确解释END DO语句。我已经将包含的代码简化为基本代码,以确保它是循环,而不是循环中出现问题的语句。控制变量在DO循环之前声明
DO A = 1,3
END DO
Fortran77是否不允许在包含文件中使用DO循环
如果我的编译器变化很大,我将使用gfortran
编辑:语法
标签: Fortran
fortran90fortran77fortran95
我一生中从未做过编程,这是我第一次编写uni赋值代码,我在编译阶段没有遇到错误,但myh程序没有运行,因为标题中有错误,我想问题是在调用子程序时。有人能帮我吗?这是我的第一个代码,它真的令人沮丧。多谢各位
!NUMERICAL COMPUTATION OF INCOMPRESSIBLE COUETTE FLOW USING FINITE DIFFERENCE METHOD
!IMPLICIT APPROACH
!MODEL EQUATION
!PARTIAL(U)/PARTIAL(T)=1/
我正在使用来自的ODE解算器来解一个刚性稀疏系统(应用程序是大气化学)。在子例程dvode的第一次调用中,完成一组初始化任务,并将因变量y的初始值数组作为输入。在随后的调用中,例程执行实际积分,数组y仅用作输出
由于各种原因,我需要在集成期间修改从属数组y的一个元素。由于除第一次调用dvode外,所有调用都将y用作输出,因此忽略对y输入值的修改。相关数据似乎存储在工作区数组中
是否有任何方法强制dvode以允许我在集成过程中更改依赖数组的值?我不想弄乱解算器的内部结构,如果可能的话,我希望避免修
有没有一种方法可以将同一个函数用作两个或更多类型的类型绑定过程?例如,想象以下情况:
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(
我想用牛顿法解非线性方程组
这是主要节目
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
我们被告知使用x=-cos(((2i-1)/2n)π)作为牛顿方法每个循环的起始猜测(找到所有的根),但是我得到了在第一次猜测之后立即打印x的子程序,它似乎总是-1(所以我认为问题在于第一次猜测);所以我的所有循环都得到了相同的根。我似乎不明白为什么会发生这种事,这让我非常沮丧
subroutine Quadrature(n)
implicit none
integer, parameter :: dpr = selected_real_kind(15) !Double precision
r
我有以下代码没有使用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库中的函数。在本例中,我有一个函数eye,它接受一个整数,并返回一个二维整数数组
Fortran模块被编译成一个共享库,使用
$ gfortran -shared -fPIC -o matrix_routines.so matrix_routines.f90
此后,我试图从交互式Julia解释器中调用它,就像这样(名称取自nm):
然而,这立即导致Julia向我抛出一个错误:
signal (11): Segmentation fault
__matrix
我在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
我试图在Arch Linux上安装Intel Parallel Studio XE 2016,但安装脚本抱怨缺少一个可选的先决条件:
安装程序无法在系统上检测到glibc库。该产品需要glibc库版本2.3.4或更高版本。联系您的系统
管理员安装符合要求的glibc版本或在服务器上安装产品
兼容系统
我已经安装了glibc 2.22版。我如何告知脚本glibc实际上位于标准位置?如果我跳过警告并继续安装,我会
Step 5 of 6 | Installation
--------------
我是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中运行某些内在函数和循环所需的工作量。例如:运行基本if-then语句检查布尔值(或逻辑值)所需的决策量。以及计算基本算术函数(如加法和乘法)需要多少决策
我知道在汇编中,它通常被称为操作码映射,但我意识到时间会根据计算机的速度而有所不同,因此我正在寻找更类似于算法的“大O”符号的东西
我的主要问题是,我正在用10000多个时间步长映射一个粒子在时间中的位置,并将信息写入一个文件中,然后绘制出粒子的轨迹图。我很想知道在这个程序中具体的时
我有一个向量派生类型
Type :: Vector
Real (Real32), Allocatable :: r32(:)
Real (Real64), Allocatable :: r64(:)
Real (Real128), Allocatable :: r128(:)
Contains
Procedure :: set => vector_set, &
我有一个Fortran子程序,在主程序中被调用多次(我没有访问权限)。在我的子例程中,我希望在每次迭代中根据输入参数从几个(~10^4)文件中的一个读取数据。每个文件都有一行数据;我的数据格式如下:
0.97014199999999995 0.24253600000000000 0.0000000000000000
我使用以下代码行打开和读取文件:
program test_read
implicit none
inte
我使用Fortran(带gfortran)和MPI 2(OpenMPI)。通过MPI\u Win\u lock和MPI\u Win\u unlock以及put和get操作(在内存的非重叠区域中),所有进程都会更新主进程上的一个变量,该变量通过窗口公开
然而,在一个测试用例中,我注意到,来自非主进程的解锁操作在主进程完成某些任务之前不会返回,在这种情况下,会休眠几秒钟
如果我没有让主机休眠,而是使用while循环和计时器让它等待几秒钟,同时让主机锁定和解锁窗口,一切都会变得更快:
call sta
标签: Fortran
argumentssubroutinefortran95
我希望使用一个变量子例程名称,并且我希望这个名称在整个模块中都可用,而不仅仅是在单个子例程中
作为参数传递的变量子例程名称是一种数据类型。它存放在哪里?我如何访问它
这里有更多的解释。G是一个非线性拟合程序。H使用G,但参数分组(迭代一次移动一个组)。G使用一个通用的正向模型子例程,其名称作为参数传递。我希望H保留这种普遍性
以下是使用带有硬编码子例程名称的变通方法的测试程序:
module G_MOD
implicit none
character(len=30)::message
在下面的代码中,注释行后面的行以*开头:
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
c-preprocessorgfortranconditional-compilationpreprocessor-directive
我需要在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
intel-fortranfortran-coarrays
下面的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
gfortranfortran90preprocessor
我对通过Fortran获取系统信息感兴趣-类别可能包括:
操作系统名称
操作系统版本
CPU体系结构(32/64位)
芯数
据我所知,您可以通过预处理指令获得基本的操作系统信息,例如
#ifdef _WIN32
print *,'Windows'
#ifdef _APPLE_
print *,'macOS'
#ifdef __linux
print *,'Linux'
#endif
这是一个1类的有效解决方案,但仍然剩下2-4类
谢谢 你可以用Fortran来做所有这些事情,除了不
我正在从输入文件创建一个链接列表。链表中的每个节点都包含每个输入块中的信息。
当我试图从输入文件中获取值时,我将多行(每次4行)分配到一个1D数组“tmp”中。我认为我在“input:DO”循环中使用的DO循环是错误的。但我不知道如何解决
我使用gfortran进行编译,编译时不会出错。
我曾尝试在“input:DO”循环中编写测试。结果表明,我可以成功地打开输入文件
PROGRAM read
IMPLICIT NONE
INTEGER,PARAMETER :: nat=4
cha
我只是拿起,并试图清理,一些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
以下代码给出了GFortran和Intel Fortran中的错误,但似乎完全合理且明确
GFortran错误为
具有非零秩的零件引用右侧的组件不得具有可分配属性
我无法分配给可分配数组,但无法分配给可分配标量。这真的是标准所要求的吗?你只是“走得太快了”Strings是类型为tString且长度为2的向量
不能直接分配给字符串%S(这可能松散地对应于向量字符串中的所有属性S)
例如,为第一个条目指定字符串(1)%S
program vls
type :: tString
cha
与协程和生成器相比,它的性能如何
英特尔Fortran编译器19.0开发人员指南和参考:
备用返回(伪)参数可以出现在子例程参数中
列表它们导致执行转移到带标签的语句,而不是
而不是调用
例行公事
关于发电机的章节:
生成器,也称为半例程,是协同例程的一个子集。具体来说,虽然两者都可以多次让步,暂停执行并允许在多个入口点重新进入,但它们在协同程序控制让步后立即继续执行的位置的能力上有所不同,虽然生成器不能交替返回,但只允许例程在调用后立即返回到其他地方。没有“暂停执行并允许重新进入”的能力。您可
我开始学习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
polymorphismopenmpfortran2003
我正在尝试分配一个多态可分配数组ary,它可以接受两种扩展类型的baseType(extType1及其扩展extType2):
为了并行化aryPrintTypes子例程,首先,我认为select type构造会有问题,因为相关的名称这个是在输入之后创建的$OMP并行DO循环。因此,我编写了第一个并行版本,如下所示:
!-FIRST PARALLELIZED VERSION :
subroutine aryPrintTypes(a)!-------------------------------
标签: Fortran
visual-studio-2019intel-fortranfreeform
我正试图为多孔介质中的单相流编写一个fortran代码。
在离散方程和其他长线中,我有一个如下问题,如图所示。
在那个突出显示的短语之后,我的代码变成了注释。
有人能帮我吗?根据:
在当前状态下,扩展中固定格式Fortran的语法高亮显示仅支持72个字符的行长。第72列之后的任何内容在源代码中显示为注释(绿色),这也会影响以下行的外观(例如,当右括号位于绿色区域时)
您可以在fortran\u fixed-form.tmLanguage.json文件或VS代码设置中更改它。欢迎,请阅读本教程。您
我想用以下方式在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并在那里使
调用以下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代码,但我发现输出数据有一些“NaN”类型的数据。通过检查输出数据,我发现一些数据非常小(-1.627452237401066E-320),因此我认为这个问题是因为一些数据太小,甚至小于双精度复数的最小限制。我尝试使用“如果语句”来判断数据是否超过了双精度复数的最小限制;但是,“NaN”类型的数据仍然显示出来。这是部分输出数据
T_z_interpolating (0.000000000000000E+000,0.000000000000000E+000)
T_y_in
我定义了以下模块:
module data_model_2
implicit none
! -------------------
! TYPE DEFINITION
! -------------------
type :: type1_record
integer :: month
integer
我在Fortran 90中遇到了一个问题
我有一个用户定义的类型,当我调用其中一个MPI子例程时,数据看起来是通过值传递的(而不是我认为应该通过的地址)。输出参数未被修改。它似乎是特定于MPI调用的。我在一个简单的测试中尝试了同样的方法,我可以在调用范围中更改传入的值。我不确定这是为什么,因为我认为Fortran总是通过地址传递。知道会发生什么吗
为了清楚起见,注释后的代码段显示了调用是如何进行的。在第一个调用中,c%NSubDomains是一个输出参数,应该在调用范围内修改,但不是。当我使用数
我在一段代码中发现了这种奇怪的说法:
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程序,其中我使用一个格式语句来编写
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
假设我有一个数组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)
根据文件
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代码来实现OpenMP,以三种不同的方式汇总8*8数组中的所有元素。第一种方法是使用减缩和工作。其次,我创建了一个包含8个元素的一维数组。我将平行区域中的每列求和,然后将它们求和。这同样有效。第三个,我用一个整数把数组中的每个元素求和,并把它放在并行do区域。此结果不正确,每次都会发生变化。我不明白为什么会发生这种情况。是因为没有指定public和private,还是过程中重写了变量b 在第三个场景中,b上有一个争用条件:多个线程在没有正确同步/私有化的情况下读取和
我试图理解如何将一些带有值的变量从另一个子例程传递到一个子例程
我有密码:
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
标签: Fortran
proceduregfortranderived-types
当我们编译(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()
使用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
我正在使用将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 ...
下一页 最后一页 共 76 页