标签: fortran77

奇怪的Fortran指针语法

在我必须处理的一些Fortran 77代码中,有一些指针以非常奇怪的方式声明,

 pointer  (iuu     , uu      ), (ivv     , vv      ),
 $        (it      , t       ), (iq      , q       ), (ips     , ps      ),
 $        (ittm    , ttm     ), (itqm    , tqm     ), (ipsm    , psm     ),
Run Code Online (Sandbox Code Playgroud)

这里的括号是什么意思?什么?

syntax fortran fortran77

3
推荐指数
1
解决办法
152
查看次数

如何在 Fortran 的 do 循环中跳过几次迭代

例如,我想以 2 为增量从 1 循环到 500。但是,对于每 8 个循环,我想跳过接下来的 18 个循环(使 do 变量增加 18)。我怎么做?

我的代码是:

event = 0
do i = 1,500,2
    event = event + 1
    if (event .eq. 8) then
          i = i + 18
          event = 0
    endif
enddo
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误消息:“DO 主体中的 do 变量不应出现在变量定义上下文中”。基本上我不能改变循环中的变量“i”。那么我应该如何编写代码来实现它呢?

谢谢。

fortran loops fortran77 fortran90 do-loops

3
推荐指数
1
解决办法
1901
查看次数

Fortran 95 编译器可以编译 Fortran 77 代码吗?

目前我正在使用 gfortran 6.1 在 mac 上编译 fortran95 源代码。我想知道是否可以使用相同的方法运行 FORTRAN 77 源代码。如果没有,有什么建议吗?

fortran gfortran fortran77 fortran95

3
推荐指数
1
解决办法
1万
查看次数

Fortran如何将实数转换为Integer

例如,

SUBROUTINE DoSomething (Z,L)                             
  IMPLICIT DOUBLE PRECISION (A-H,O-Z)                               

  D=Z*77.1234567D0                                           
  L=D                                                      

  RETURN                                                         
 END     
Run Code Online (Sandbox Code Playgroud)

为了说话的目的,让我们假设D等于-1.5,在这种情况下L将等于-1或-2.换句话说,它是向上舍入还是向下舍入?

提前致谢.

fortran fortran77

3
推荐指数
1
解决办法
773
查看次数

错误:逻辑运算符“.eq.”的操作数 (1) 处为 INTEGER(4)/HOLLERITH

我是 Fortran 新手。所以我需要帮助。我在 SUSE 上使用 gfortran 编译我的代码并收到以下错误:

200 IF ( ID .EQ. 4HEOT ) GO TO 20
               1

Error: Operands of logical operator '.eq.' at (1) are INTEGER(4)/HOLLERITH
Run Code Online (Sandbox Code Playgroud)

代码的主文件附加在下面的链接中,其中 1818 行显示了错误。

我的文件的链接是:https://files.engineering.com/getfile.aspx? folder=cd6961f3-d38b-4e61-a43d-269fa18c7d11&file=sfeng.f

如何解决这个问题?

对于简化/最小的示例,我在此处添加了代码:

      SUBROUTINE CDRD ( II )

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
c     ohad 15/7/08
c      IMPLICIT INTEGER*8 (I-N)
      IMPLICIT INTEGER*4 (I-N)

C*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=C
C     THIS SUBROUTINE READS PROPULSION SYSTEM DRAG DATA.               C
C                                                                      C
C     USE NON-ZERO "II" TO WRITE TABLE DATA.                           C
C*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=C

      CHARACTER*80    TITLE, CDFILE …
Run Code Online (Sandbox Code Playgroud)

fortran gfortran fortran77

3
推荐指数
1
解决办法
3642
查看次数

Fortran 77如何分配公共块变量?

我正在用C开发一个应该使用C,C++或Fortran代码的库.它使用的一种机制是捕获堆栈,堆或数据/ bss段中的页面的写入.在这种情况下,"堆"是库从映射文件创建的特殊堆.我发现我的库未能在Fortran应用程序中捕获对变量的写入.变量声明为

double precision u(5,I,J,K)
Run Code Online (Sandbox Code Playgroud)

其中I,J和K是整数参数(即常数).然后代码将u包含在称为"字段"的公共块中.

在GDB下调试时,我发现u的地址不属于三个数据段中的任何一个.(因此库无法捕获写入!)然后我查看/ proc // maps伪文件,发现u的地址落入系统注释为"堆"的范围内.但你是怎么进入这个"堆"的?在这种情况下,Fortran 77代码不使用非标准的"allocate"关键字在堆上进行分配.有人可以向我解释Fortran 77(在Ubuntu Linux x86-64下)在"堆"上分配的变量,以及首先如何创建这个"堆"?

c heap fortran fortran77 fortran-common-block

2
推荐指数
1
解决办法
1710
查看次数

fortran中的函数指针

是否有可能在Fortran中有函数指针?现在我有一些像这样的代码的代码:

subroutine flag(iflag,a,b)

integer n, a, b, ii, iflag

do ii = 1, n
     if (iflag.eq.0) a+b
     else a-b  
end do    

return
end
Run Code Online (Sandbox Code Playgroud)

变量"n"具有巨大的值,因此为了运行此代码,我觉得我浪费了很多时间使用"if"命令.是否可以编写类似函数指针的东西(我不确定我的意思),这样在代码中执行如下操作:

subroutine flag(iflag,a,b)

*depending on the iflag the subroutine flag is automatically 
precompiled to call either flag_plus or flag_minus*     

return
end

subroutine flag_plus(a,b)

integer n, a, b, ii

do ii = 1, n
     a+b
end do    

return
end

subroutine flag_minus(a,b)

integer n, a, b, ii

do ii = 1, n
     a-b  
end do    

return
end
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我可以通过避免"if"循环来节省大量时间.这样的东西有可能远程吗?

fortran fortran77

2
推荐指数
1
解决办法
821
查看次数

使用gfortran进行编译:对iargc_的未定义引用

我在Fedora 20 x86_64上使用gfortran [GNU Fortran(GCC)4.8.3 20140911(Red Hat 4.8.3-7)]来编译一堆以以下方式引用“ iargc”功能的Fortran 77代码:

bin2D2nc.f:31:整数iargc,strlen1

bin2D2nc.f:32:外部iargc,strlen1

bin2D2nc.f:44:i = iargc()

当make脚本到达以下编译命令时,

gfortran -O3 -ffixed-line-length-132 -fall-intrinsics -I/home/santiago/Install/netcdf_sam/include   -o bin2D2nc -I./SRC ./SRC/bin2D2nc.f ./SRC/hbuf_lib.f ./SRC/cape.f ./SRC/cin.f -L/home/santiago/Install/netcdf_sam/lib  -lnetcdf -L/usr/lib64 -lpthread
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

bin2D2nc.f :(。text + 0x14):对'iargc_'的未定义引用

collect2:错误:ld返回1退出状态

make:** [bin2D2nc]错误1

我不是这段代码的作者。据我所知,我在makefile中正确设置了库路径。

我发现'iargc'是GNU Fotran 77向后兼容的例程,但我对此并不了解。

有人可以建议解决这个问题吗?

gcc fortran gfortran fortran77

2
推荐指数
1
解决办法
2324
查看次数

在 FORTRAN-77 中传递二维数组的子数组

我有二维数组

real triangle(0:2, 0:1)
Run Code Online (Sandbox Code Playgroud)

其中“三角形”是一个向量数组(一维数组),我也有子程序

subroutine vecSub(lhs, rhs, result)
real lhs(0:1), rhs(0:1), result(0:1)
    result(0) = lhs(0) - rhs(0)
    result(1) = lhs(1) - rhs(1)
    return
end
Run Code Online (Sandbox Code Playgroud)

有没有办法将“三角形”变量中的向量之一传递给这个子程序?Fortran-90 可以做到这一点:triangle(0, :)它给出了第一个三角形数组,但我只能使用 FORTRAN-77,所以这不行,有什么建议吗?

arrays fortran fortran77

2
推荐指数
1
解决办法
330
查看次数

可以从 C 调用 f77 子例程吗?

在现代 Fortran 中,我们可以使用 C 绑定从 C 调用子例程。例如 Fortran 子例程将如下所示

subroutine my_routine(...) bind (C, name="my_routine")
Run Code Online (Sandbox Code Playgroud)

但是,如果 fortran 子例程是旧的 f77 子例程,则此绑定可能不是可用的解决方案。最好的选择是什么?

c fortran fortran77

2
推荐指数
2
解决办法
121
查看次数