标签: fortran95

Fortran模块版本致命错误

我在Fortran 95上有一个非常可怕的错误:

Fatal Error: While reading module 'list5.mod' found module version 0, expected 6
Run Code Online (Sandbox Code Playgroud)

我已经包含了我的模块的主要结构.我非常怀疑它与我的模块中的内容有什么关系,因为它给了我关于那些的错误信息,我已经能够修复它们,这意味着它能够通过我的模块很好,它只是与我使用模块的方式.也许?

    MODULE list5
    IMPLICIT NONE

    CONTAINS

----

END MODULE
Run Code Online (Sandbox Code Playgroud)

主程序的结构如下:

    PROGRAM mainlist
    USE list5
IMPLICIT NONE

    !Variable Declaration
    INTEGER:: opt
    INTEGER, PARAMETER:: maxitems=50
    INTEGER:: size=0
    CHARACTER(20):: itemarray(50)
    INTEGER:: quantityarray(50)
    INTEGER:: totalquantity, i=0
    REAL:: totalprice=0, pricearray(50)=0

    CHARACTER(20), DIMENSION(:)::Item
    CHARACTER(20):: ItemSought
    LOGICAL:: Found
    INTEGER:: Location

    INTEGER:: NumItems=0, SmallestItem=0

!Select statement for the menu

DO
opt=choices()
SELECT CASE (opt)
    CASE(1)
        size=size+1
        CALL getItemData(itemarray,pricearray,quantityarray)
    CASE(2)
        CALL getFileItems(size,itemarray,pricearray,quantityarray)
    CASE(3)
        CALL pickItemRandomly …
Run Code Online (Sandbox Code Playgroud)

fortran module fortran95

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

在二进制搜索算法错误方面需要帮助

使用g95编译器,我有一个错误:

Error: Operands of comparison operator '.EQ.' at (1) are LOGICAL(4)/LOGICAL(4)
Run Code Online (Sandbox Code Playgroud)

我不知道这是什么意思.我包括子程序.你有任何想法如何解决这个问题?

非常感谢你的时间.

  SUBROUTINE search(iarray, ItemSought, Found, Location)
CHARACTER(20), DIMENSION(50),INTENT(IN)::itemarray
CHARACTER(20)::ItemSought
LOGICAL, INTENT(OUT)::Found
INTEGER, INTENT(OUT)::Location
INTEGER:: First, Last, Middle

WRITE(*,'(1x,A)',ADVANCE="NO"),"What are you searching for? "
READ*, ItemSought

First=1
Last=SIZE(Iarray)
FOUND = .FALSE.

DO
    IF ((First > Last) .OR. Found) RETURN
        Middle = (First+Last)/2
    IF (ItemSought < Iarray(Middle)) THEN
        Last=Middle-1
    ELSE IF (ItemSought > Iarray(Middle)) THEN
        First=Middle+1
    ELSE
        Found = .TRUE.
        Location = Middle
    END IF
END DO


IF …
Run Code Online (Sandbox Code Playgroud)

algorithm fortran binary-search fortran95

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

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

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

fortran fortran95 silverfrost-fortran

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

Fortran:你能解释一下这个格式化字符串吗?

我有一个Fortran程序,我需要修改,所以我正在读它并试图理解.你可以解释一下以下语句中的格式化字符串是什么意思:

write(*,'(1p,(5x,3(1x,g20.10)))') x(jr,1:ncols)
Run Code Online (Sandbox Code Playgroud)

formatting fortran fortran95

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

Fortran中的随机数组/矩阵初始化

有没有办法在不使用显式do循环的情况下初始化随机数组?

现在我的随机矩阵初始化看起来像

program Main
    implicit none
    save

    integer :: seed, i, j
    real :: x
    character(100) :: option
    real, dimension(10,10) :: matrix

    if (iargc() > 0) then
        CALL GETARG(1,option)
        read(option,*) seed
    else
        seed = 1
    end if 

    call RANDOM_SEED(seed)

    do i=1,10
        do j=1,10
            call RANDOM_NUMBER(x)
            matrix(i,j) = x
        end do
    end do
end program
Run Code Online (Sandbox Code Playgroud)

但是如果可能的话,我希望它更像是隐含的do-loop数组初始化:

program Main
    implicit none
    save

    integer :: seed
    character(100) :: option
    real, dimension(10,10) :: matrix

    if (iargc() > 0) then
        CALL GETARG(1,option)
        read(option,*) seed
    else …
Run Code Online (Sandbox Code Playgroud)

random fortran matrix fortran95

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

离散值的Fortran循环

可能是一个愚蠢的问题,但有没有办法为变量的离散值运行循环?最新版本怎么样?

就像是

for i in 1  5 9 11  31 77 
Run Code Online (Sandbox Code Playgroud)

在Unix shell脚本中使用?

谢谢.

fortran fortran95

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

如果参数列表不同,Fortran 95 是否允许两个子例程具有相同的名称?

如果参数列表的长度不同,Fortran 95 标准是否允许两个子例程(或函数)具有相同的名称?例如,

subroutine a(i)
! code here
end subroutine a

subroutine a(j,k)
! code here
end subroutine a
Run Code Online (Sandbox Code Playgroud)

fortran fortran90 fortran95

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

行截断,参数列表中的语法错误

当我编译下面的程序时,我在call Coor_Trans命令行中出现错误和警告

警告:行被截断

错误:参数列表中的语法错误

我多次编译程序,但它不起作用.也许我的呼叫命令有问题.

program 3D

      implicit none
      integer :: i,j,k
      integer, parameter :: FN=2,FML=5,FMH=5
      integer, parameter :: NBE=FN*FML*FMH
      real, parameter :: pi = 4*atan(1.0)
      real(kind=4), dimension(1:FN,1:FML+1,1:FMH+1) :: BEXL,BEYL,BEZL
      real(kind=4), dimension(1:FN,1:FML,1:FMH) :: BEXC,BEYC,BEZC,BE2A,BE2B,ANGLE
      real(kind=4), dimension(1:NBE,1:1,1:1) :: BEXC1,BEYC1,BEZC1,BE2A1,BE2B1,ANGLE1
      real(kind=4), dimension(1:NBE,1:NBE) :: LOC_PTS1,LOC_PTS2,LOC_PTS3
      real :: LOC_1,LOC_2,LOC_3

      do i=1,FN
        do j=1,FML
           do k=1,FMH

            BEXC(i,j,k) = 0.5*(BEXL(i,j,k) + BEXL(i,j+1,k))
            BEYC(i,j,k) = 0.5*(BEYL(i,j,k) + BEYL(i,j+1,k))
            BEZC(i,j,k) = 0.5*(BEZL(i,j,k) + BEZL(i,j,k+1))
            BE2A(i,j,k) = FL(i)/FML + j*0 + k*0
            BE2B(i,j,k) = FH(i)/FMH + j*0 …
Run Code Online (Sandbox Code Playgroud)

fortran call subroutine fortran95

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

在 Fortran 95 中按值传递参数

如何在调用函数参数时保留其值而不创建新变量?这就是,如何按值传递参数?

在此示例代码中:

program what
  implicit none  
  integer :: a, b, c, d

  a = 1
  b = 2
  c = 3

  print *, a,b,c

  d = f(val(a), val(b), val(c))

  print *, d

  print *, a,b,c

  d = f(a, b, c)

  print *, d

contains

  function f(x,y,z) result(h)
    integer:: x,y,z
    integer :: h

    h = x+y+z
    x = 0
    y = 0
    z = 0
  end function
end program
Run Code Online (Sandbox Code Playgroud)

当我第二次调用该函数时,它只打印 0。

fortran parameter-passing fortran95

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

在不使用循环的情况下在 fortran 中用零填充数组

我有两个数组,我想比较它们的大小并将尾随零添加到较短的数组。

例如-对于数组-

y1=(/ 1,2,3 /)
y2=(/ 1,2,3,4,5 /)
Run Code Online (Sandbox Code Playgroud)

最后的结果应该是——

y1=(/ 1,2,3,0,0 /)
y2=(/ 1,2,3,4,5 /)
Run Code Online (Sandbox Code Playgroud)

我对 Fortran 很陌生,据我所知,到目前为止,可以这样做:-

integer, allocatable :: y1(:),y2(:)
integer :: l1,l2,i
.
.
.
! some code to generate y1 and y2 here
.
.
.
l1=size(y1)
l2=size(y2)

if (l1>l2) then
    do i=l2+1,l1
        y2(i)=0
    enddo
else if (l2>l1) then
    do i=l1+1,l2
        y1(i)=0
    enddo
endif
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来做到这一点,最好是不涉及循环的方法,因为我正在处理的实际问题可能有很大的向量

fortran gfortran fortran90 fortran95

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