标签: fortran95

使用模块在fortran 95上创建简单菜单功能时出现问题

我刚刚开始在模块上创建一个菜单功能,我遇到致命错误,错误太多.我怀疑这可能是由于一个小错误而不是多个,因为代码现在非常简单.

有人有什么想法吗?

以下是我到目前为止的情况.显然我刚刚开始,但我很惊讶为什么会出现问题.非常感谢!

另外我对模块有点新意,所以我只是好奇你能告诉我这是不是如何编译它?g95 themenu.f95 -o ba ??

谢谢.

 MODULE themenu
    IMPLICIT NONE

    INTEGER:: choices, opt
    opt=choices()

     CONTAINS

    INTEGER FUNCTION choices ()
    INTEGER:: opt

    DO
        PRINT*, "1: Add an item manually"
        PRINT*, "2: Add item(s) from a file"
        PRINT*, "3: Add random item from list of top ten list"
        PRINT*, "4: Print list with totals"
        PRINT*, "5: Sort list alphabetically"
        PRINT*, "6: Sort list by price"
        PRINT*, "7: Write list to file"
        PRINT*, "8: EXIT"
        PRINT*, " "
        PRINT*, "Please …
Run Code Online (Sandbox Code Playgroud)

fortran module function fortran95

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

在fortran(或任何其他语言)中使用函数的成本

假设我有一个非常大的数组 verybigvariable

我已经定义了一个执行这样的操作的函数

function myfunc(var) result(res)
real:: var(:,:,:),res

...
...
...

end function myfunc
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我这样调用这个函数时

myvar=myfunc(verybigvariable)
Run Code Online (Sandbox Code Playgroud)

怎么了?它是否复制了我的变量,因此它在执行函数期间在ram中保存了2X空间?如果是这样我怎么能阻止这个?(在一个简单的程序中,我知道,我可以在没有任何参数的情况下定义函数并使其使用现有变量,但如果我正在编程模块,似乎我必须在定义中包含参数)

fortran fortran95

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

如何在fortran中初始化整数类8的数组?

我想在fortran初始化一个大整数数组,我试过:

integer(kind=8) :: XGrid(1:20)
Run Code Online (Sandbox Code Playgroud)

但整数仍然是默认类= 4.我后来在数组中添加了数字:

XGrid = (/3002, 3340403,....,19460630000/)
Run Code Online (Sandbox Code Playgroud)

我收到"此数字常量超出范围"错误.因为它不适合一种kind = 4 int,但会在一种= 8 int.

我也尝试将其声明为:

integer, parameter :: ik8 = selected_int_kind(8) 
integer(ik8) :: XGrid(1:20)
Run Code Online (Sandbox Code Playgroud)

但这也行不通.

编辑:感谢Vladimir F,但我试图定义一个数组而不仅仅是一个变量,因此我无法理解如何调整使用的答案: Fortran 90中有更好的双精度赋值吗? 可不可能是:

integer, parameter :: ik8 = selected_int_kind(8) 
integer(ik8) :: XGrid(1:20)_ik8
XGrid = (/3002_ik8, 3340403_ik8,....,19460630000_ik8/)
Run Code Online (Sandbox Code Playgroud)

还是不一样?谢谢

arrays fortran fortran77 fortran90 fortran95

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

警告:GNU扩展

当我将我的包提交给CRAN时,它不会通过自动传入检查并发出以下警告:

* checking whether package 'EpiILM' can be installed ... WARNING
  Found the following significant warnings:
  Warning: GNU Extension: Different type kinds at (1)
Run Code Online (Sandbox Code Playgroud)

和相应的日志文件说

  Epimcmc.f95:440.25:

        psi= min(1.0,exp(ratio))
                     1
 Warning: GNU Extension: Different type kinds at (1)
Run Code Online (Sandbox Code Playgroud)

当我使用R CMD CHECK和R CMD CHECK --as-cran测试我的包装时,都不会产生任何警告或注释.我正在使用R版本3.3.2(2016-10-31) - 我的MacOS上的"真诚的南瓜补丁"和代码是用Fortran 95编写的.

有什么建议?

fortran r gfortran cran fortran95

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

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

Fortran可分配的数组生命周期

说我有以下代码:

program test
  call foo
  call foo
contains
  subroutine foo
    integer(8),dimension(:),allocatable:: var1
    allocate(var1(10))
    ...
    return
  end subroutine foo
end
Run Code Online (Sandbox Code Playgroud)

变量var1会被分配两次吗?(我猜是).如果为每个呼叫分配,第一次呼叫期间分配的内存是否会空闲?

fortran memory-management dynamic-memory-allocation fortran90 fortran95

0
推荐指数
1
解决办法
899
查看次数

Fortran 90代码是否总能与Fortran 95编译器配合使用?

我们有一个用Fortran 90编写的复杂程序,我只能找到Fortran 95编译器.不幸的是,我的访问和体验有限,但需要立即了解问题.

Fortran 90代码是否总能使用Fortran 95编译器(例如gfortran)正确编译?

fortran fortran90 fortran95

0
推荐指数
1
解决办法
333
查看次数

Fortran 中数据类型不匹配

我在 Fortran 95 中编写了一个基本算法,使用通过称为理查森外推法的过程增强的中心差来计算函数的梯度(代码中规定了一个示例)。

function f(n,x)
! The scalar multivariable function to be differentiated

integer :: n
real(kind = kind(1d0)) :: x(n), f

f = x(1)**5.d0 + cos(x(2)) + log(x(3)) - sqrt(x(4))

end function f
!=====!
!=====!
!=====!

program gradient
!==============================================================================!
! Calculates the gradient of the scalar function f at x=0using a finite        !
! difference approximation, with a low order Richardson extrapolation.         !
!==============================================================================!

parameter (n = 4, M = 25)
real(kind = kind(1d0)) :: x(n), xhup(n), xhdown(n), …
Run Code Online (Sandbox Code Playgroud)

floating-point gradient double-precision fortran95

0
推荐指数
1
解决办法
2424
查看次数

将Fortran 77转换为Fortran 95

我在这里得到了一段代码,我似乎无法找到将这段代码转换为Fortran 95等效代码的有效方法.我已经尝试了好几件事,但我总是坚持用矩阵制作一维数组,反之亦然(重点是减少计算时间,如果我转换它们,我想不出另一种方法,而不是使用循环再次:/).

这是一段代码:

do i=1,dim
do j=1,dim
    Snorm(i,j)=Sval(j)/Sval(i)
    Bnorm(i,j)=Bval(j)/Bval(i)
    Pnorm(i,j)=Pval(j)/Pval(i)
enddo
enddo
Run Code Online (Sandbox Code Playgroud)

你会如何在Fortran95代码中编写它?

R中矩阵计算的等价物如下:

Snorm <- t(Sval %*% t(1/Sval))
Bnorm <- t(Bval %*% t(1/Bval))
Pnorm <- t(Pval %*% t(1/Pval))
Run Code Online (Sandbox Code Playgroud)

Python中的等价物是这样的:

Snorm = (numpy.dot((Svalmat.T),(1/Svalmat))).T
Bnorm = (numpy.dot((Bvalmat.T),(1/Bvalmat))).T
Pnorm = (numpy.dot((Pvalmat.T),(1/Pvalmat))).T

with Svalmat etc the equivalent of Sval, but then columnmatrix 
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

arrays fortran fortran77 fortran90 fortran95

0
推荐指数
1
解决办法
197
查看次数

浮点溢出

我在这部分代码中遇到浮点溢出错误。有哪位大佬能帮我看看是什么原因吗?

do j=1,ny-1
  do i=1,nx-1

    sum = 0.0d0

    do k=0,1000
      n=2.0d0*dfloat(k)+ 1.0d0
      sum = sum + ((dsinh(n*pi*x(i))*dcos(n*pi*y(j)))/((n*n*pi*pi)*dsinh(2*n*pi)))
    end do

    ue(i,j)= (x(i)/(4.0d0))- 4.0d0*sum

  end do
end do
Run Code Online (Sandbox Code Playgroud)

fortran fortran90 fortran95

0
推荐指数
1
解决办法
2953
查看次数