小编rem*_*mek的帖子

在Fortran中使用指数函数的DEXP或EXP?

我有两个很短的问题:

1 - 我只是读到这DEXP()古老的形式EXP().这是否意味着它不应再被使用了?我一直认为这DEXP()是双精度相当于EXP().

2 - 指数函数的范围是多少?它是编译器依赖的吗?

在此先感谢您的帮助!

最好,Remek

fortran

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

ALLOCATABLE数组或POINTER数组?

我正在Fortran中编写一个新代码,并且在使用可分配数组或指针数组之间犹豫不决.我在某处读到可分配数组比指针数组有明显优势:

1)效率更高,因为它们在内存中总是连续的

2)没有内存泄漏是可能的

有人能证实吗?你建议使用哪一个?在这两种备选方案之间的代码执行速度方面有什么结果?

arrays fortran pointers memory-management dynamic-memory-allocation

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

派生类型中的关联指针?gFortran与英特尔

我想检查是否已经定义了派生类型中的指针.我写了以下简单的代码来向您展示我的问题:

program test
implicit none

type y
    real(8), pointer :: x(:)
end type y
type(y), pointer :: w(:)

allocate(w(2))
allocate(w(1)%x(2))

write(*,*) associated(w(1)%x), associated(w(2)%x)

end program test
Run Code Online (Sandbox Code Playgroud)

使用gFortran 4.4.1编译此代码并在Ubuntu上运行它会得到结果:

T F
Run Code Online (Sandbox Code Playgroud)

而在Windows Vista上使用英特尔Fortran编译器11.0编译的相同代码提供:

T T
Run Code Online (Sandbox Code Playgroud)

第一个结果(gFortran)是我实际期待的.但是英特尔编译器提供不同结果的事实让我担心我的代码可能不正确.我是否在这个例子中做了一些非常错误的指针?有什么想法或解释吗?

非常感谢您的帮助!

fortran pointers gfortran

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

从R调用Fortran:“大小合理的逻辑数组”

这是我在R和Fortran中遇到的一个有趣的问题。

考虑以下Fortran子例程:

! foo.f90
subroutine fun(n, x)
  implicit none
  integer, intent(in) :: n
  logical, intent(in) :: x(n)
  integer :: i

  write(*,*) pack([(i, i=1, n)], x)

end subroutine fun
Run Code Online (Sandbox Code Playgroud)

R CMD SHLIB foo.f90R 编译并在R中调用时

dyn.load("foo.so")
x <- c(TRUE ,FALSE)
f <- .Fortran("fun", 2L, as.logical(x))
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

Fortran runtime error: Funny sized logical array
Run Code Online (Sandbox Code Playgroud)

从Fortran程序调用相同的子例程时,

! test.f90
program test
  implicit none
  logical :: x(2)

  x = [.true., .false.]
  call fun(2, x)

contains

  include "foo.f90"

end program test
Run Code Online (Sandbox Code Playgroud)

没有错误发生:

$ …
Run Code Online (Sandbox Code Playgroud)

fortran r gfortran

7
推荐指数
0
解决办法
91
查看次数

在Fortran中配置文件解析器

我希望能够使用一个简单的配置文件将参数传递给我的程序.此配置文件将包含一个参数列表,其值可以是不同类型(整数,实数,逻辑,单词列表等).

以下是我希望能够以简单方式解析的配置示例:

! This is a first comment
param1 = 1234;
param2 = TRUE;                    ! This is a second comment

param3 = abc def ghi jkl mno   
             pqr stu vwx yz;

! Another type of instruction, 
! i.e. to specify that var1-var3 depend on var4-var10:
var1 var2 var3 ~ var4 var5 var6
                 var7 var8 var9 var10;
Run Code Online (Sandbox Code Playgroud)

允许换行,并且可以将不同类型的指令传递给程序.

我知道NAMELIST可以以某种方式允许这样做(除了本例中配置文件的最后一部分),但它似乎不够灵活,不能满足我的需要.例如,我认为它不允许在配置文件中插入注释.

我在C和C++中发现了许多提供这样的配置文件解析器的库,但令人惊讶的是,在Fortran中没有任何东西.有人知道这样的图书馆吗?

在此先感谢您的帮助!

fortran config configuration-files

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

使用预编译的共享库构建R包

我正在编写一个R包的问题,​​我正在编写并尝试使用预编译的共享库进行构建.让我试着简要描述一下这个问题:

  • 这个包(让我们称它mypack)依赖于一个mylib.dll已编译的共享库,并且在构建R包时无法动态编译.
  • 该库mylib.dll已在Windows下的x64机器上编译,可以在R中加载dyn.load.
  • 包中包含所需的文件NAMESPACE,useDynLib(mylib.dll)指定的位置..onLoad包含该指令的函数library.dynam('mylib.dll', pkg, lib)也在文件中指定zzz.R.
  • 使用通常的命令mypack构建R包,然后我添加一个保存的目录.RtoolsRcmd INSTALLlibsmylib.dll
  • 当我尝试在R中加载包时library(mypack),我收到以下错误消息:
    Error: package 'mypack' is not installed for 'arch=x64'

这令我感到困惑.为什么共享库可以在R中顺利加载,但是当我使用它构建一个包时,我收到这个奇怪的错误消息?

非常感谢您的帮助!

dll r shared-libraries package

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