编写将int返回给Fortran的C函数
最终,我试图编写一个IPC计算器,用于使用Fortran来计算和C来传递两个Fortran程序之间的数据.当我完成时,希望看起来像: Fortran program to pass input -> Client written in C -> Server written in C -> Fortran program to calculate input and pass ans back C客户端/服务器部件已经完成,但是目前我被困在试图编写一个程序中输入的程序,将其传递给计算答案的C程序.但是,我看到了怪异的行为. fortran程序 program calculator !implicit none ! type declaration statements integer x x = 1 ! executable statements x = calc(1,1) print *, x end
6 2024-04-09
编程技术问答社区
在OSX上安装LAPACK
在安装lapack以与OSX上的C一起使用时,我将" MAKE"键入终端并获取以下内容: /Applications/Xcode.app/Contents/Developer/usr/bin/make -C INSTALL run ./testlsame make[1]: *** [run] Segmentation fault: 11 make: *** [lapack_install] Error 2 这些错误是什么意思,我该如何摆脱它们?我正在使用Xcode 9.2,刚刚安装了Gfortran(也许我做错了)? 对不起,这个问题非常基本. 解决方案 正确地,您可以在OSX上安装的所有内容.除了指定-framework Accelerate,您都不需要任何东西.
16 2024-04-09
编程技术问答社区
从Fortran向C语言传递标量和数组(任何尺寸)。
我有以下名为show_value的Fortran子例程,该子例子称为show_value: INTERFACE SUBROUTINE show_value(variable) BIND(C, name = "show_value") USE, INTRINSIC :: iso_c_binding TYPE(*) :: variable END SUBROUTINE END INTERFACE C函数show_value: void show_value(const void *variable) { printf("%d\n", *(int *) variable); } 将标量传递到它时,Fortran子例程效果很好.示例: INTEGER :: x x = 12 call show_value(x) 这将调用C函数show_value和PRINT 12,这是正确的. 现在,根据fortran文
4 2024-04-08
编程技术问答社区
无法链接到libgfortran.a
我在系统上安装了gfortran,可以在/usr/lib/gcc/x86_64-linux-gnu/4.6/上找到文件libgfortran.a.使用nm我确保在其中定义了该函数_gfortran_compare_string: $ nm /usr/lib/gcc/x86_64-linux-gnu/4.6/libgfortran.a | grep _gfortran_compare_string 返回 0000000000000000 T _gfortran_compare_string 0000000000000000 T _gfortran_compare_string_char4 ,但是,我的cuda-c程序的链接会引发错误: /usr/local/cuda-6.0/bin/nvcc --cudart static -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/home/chung/lapack-3.5.0 -link -o
14 2024-04-08
编程技术问答社区
用gdb调试gfortran:w_powf.c。没有这样的文件或目录
我有一个我正在调试的福特程序.我有变量列表,预期变量之一几乎是其预期值的两倍. 因此,我用调试标志编辑了该程序,并开始调试: 程序名称是hfock $gdb hfock (gdb) break hfock (gdb) run Starting program: /home/e/Desktop/hfock hfock Breakpoint 1, hfock () at hfock.f:16 16 ZETA1 = 2.173171 (gdb) s 17 ZETA2 = 1.188530 (gdb) s 18 WRITE (*, '( "Zeta1:", F7.4 / "Zeta2:", F7.4 )' ) ZETA1, ZETA2 (gdb) s Zeta1: 2.1732 Zeta2: 1.1885 21 PLUS=ZETA1+ZETA2 (gdb) s 22 PROD=ZETA1*ZETA2 (gdb) s
8 2024-04-07
编程技术问答社区
用不同的编译器读写fortran直接访问未格式化的文件
我在程序中有一个部分,该部分写入直接访问二进制文件,如下: open (53, file=filename, form='unformatted', status='unknown', & access='direct',action='write',recl=320*385*8) write (53,rec=1) ulat write (53,rec=2) ulng close(53) 此程序与Ifort一起编译.但是,如果我从与Gfortran编译的其他程序中读取数据文件,则无法正确重建数据.如果读取数据的程序也在Ifort中编译,则可以正确重建数据.这是读取数据文件的代码: OPEN(53, FILE=fname, form="unformatted", status="unknown", access="direct", action="read", recl=320*385*8) READ(53,REC=2) DAT 我不明白为什么会发生这种情况?我可以使用
8 2024-03-30
编程技术问答社区
串行程序在多个实例或并行时运行较慢
我有一个fortran代码,我用来计算与我所做的工作有关的一些数量.该代码本身涉及几个嵌套循环,并且几乎不需要磁盘I/O.每当修改代码时,我都会根据几个输入文件的套件运行(只是为了确保其正常工作). 简而看看是否有任何破坏).因此,我想在系统上的4个CPU上并行运行每个输入文件.我一直在尝试通过bash脚本实现并行性. 我注意到的有趣的事情是,当该程序的一个实例在计算机上运行时,大约需要三分半秒钟才能通过其中一个输入文件进行曲柄.当该程序的四个实例运行时,要浏览一个输入文件,大约需要十一分钟半分钟(使我的总运行时间从约45分钟降低到36分钟 - 是的,是的,但不是我所拥有的.希望). 我尝试使用gnu并行,xargs,等待,甚至只是从命令行中启动程序的四个实例.无论是如何启动的,我都会看到同样的放慢速度.因此,我很确定这不是外壳脚本的工件,而是该程序本身正在发生的事情. 我尝试通过关闭调试符号并使用静态链接来重建程序.这些都没有任何明显的影响.我目前正在使用以下选
8 2024-03-28
编程技术问答社区
相当于Gfortran中的asm volatile?
是否等同于GCC在Gfortran中的内联装配? __asm__ __volatile__ (...) 我在Gfortran Man页面或手册中找不到任何东西. 解决方案 不,没有.围绕它的最简单方法是使用 asm 具有C函数,然后将其称为iso_c_binding.
6 2024-03-17
编程技术问答社区
福尔坦阵列输入
我一年没有做任何fortran编程,看来我现在很生锈.因此,我不会为您提供所有失败的尝试,但会谦卑地要求您帮助我以下情况. 我有以下"输入"文件 1 5 e 4 A b & 1 c Z ; b y } " N t r ' + 它可以具有更多的列和/或行.我现在想将每个ASCII字符分配给数组x(i,j),以便在Ichar转换后可以进一步处理它们.在此示例中,i = 1,4,j = 1,5,但取决于输入文件.最简单的示例 PROGRAM Example integer :: i, j CHARACTER, ALLOCATABLE, DIMENSION(:,:) :: A READ *, A ALLOCATE (A(i,j)) PRINT *, A END PROGRAM Example 编译(example.f95)但是 cat input | ./Example.f95 不给出任何输出. 我非常感谢如何将上述字符串导入该程序中的X(i,j
16 2024-03-07
编程技术问答社区
声明数组的不同语法:有和无维度语句
我正在使用gfortran版本7.2.0.我是Fortran的新手.我知道有不同版本的Fortran.在下面的代码中,我使用不同的语法声明数组(或实际张量) program arrays implicit none integer :: m(3, 4) integer, dimension(3, 4) :: n print *, "m = ", m print *, "n = ", n end program arrays 在一种情况下,我使用的是dimension语句,而另一个则不是.该程序编译(没有错误).我正在使用gfortran的标志-g和-fbounds-check.上面程序的文件扩展名为f.90. 为什么显然有不同的语法来声明fortran中的数组?哪些版本的fortran支持语法,或者有可能声明 stark ,形状和 extents 数组的m只是一个编译器的扩展? 解决方案 语句 integer :
14 2024-03-06
编程技术问答社区
英特尔Fortran 95编译器是否允许模块数组为非恒定大小?
我已经下载了一个Fortran 90/95自适应网格修补库( paramesh ),现在我正在尝试编译随附的示例程序.在此过程中,我修改了MakeFile以使用Gfortran而不是Intel Fortran编译器. 在库代码中,有一个包含此片段的模块: module physicaldata ! Many many lines of variable definitions here !.... Public :: nfluxvar Integer,Save :: nfluxvar ! Many many lines of variable definitions here !.... end module physicaldata 在其他地方有 module flux_assign use physicaldata integer :: iflux_tar
16 2024-03-06
编程技术问答社区
在Fortran 03/08中使用无限多态类型进行阵列操作(gfortran编译器)。
我想通过class(*)特征(无限制的多态性)实现有用的数组操作(添加元素,删除元素,通过可分配/指针/二进制树结构的不同实现).我使用应该处理此功能的Gfortran 5.0.我需要它以不重复我使用的每种类型的相同代码. 这应该看起来像 function add_element(array,element) class(*),intent(in)::array(:) class(*),intent(in)::element class(*)::add_element(size(array)+1) add_element=[array,element] end function 问题是,当我尝试使用某种确定的类型使用此功能时,我会出现返回结果的错误.我无法在没有select type的情况下将class(*)分配给某个确定的类型变量,而且我肯定不想每次使用它时都具有选择的类型结构.在子例程中,我不应该知道我想使用的类型,因为我会创建许多类型.
10 2024-03-05
编程技术问答社区
Fortran 90-"分段故障-无效的内存引用 "与可扩展的三维阵列
我已经与Gfortran编辑了一个Fortran 90程序,该程序以我想要的方式构建了一个可扩展的3D阵列.运行后,我会收到以下错误: Program received signal SIGSEGV: Segmentation fault - invalid memory reference. Backtrace for this error: #0 0x10542ee42 #1 0x10542f60e #2 0x7fff8d7895a9 #3 0x10542575e #4 0x105425975 #5 0x105425d0e Segmentation fault: 11 我相信这是大型3D数组的内存问题,因为如果我降低了尺寸,它可以工作,但是无论如何是否可以解决这个问题?这是我的代码: PROGRAM phantomtest IMPLICIT NONE INTEGER, PARAMETER:: columns=34, rows=34, diags=((
22 2024-03-05
编程技术问答社区
用fortran语言写成数组格式
我尝试使用 nxn 矩阵格式编写输出文件. 我写代码,但输出是值f. 的一列 现在的问题是:如何更改文件的输出格式写? 来自: 1 2 4 5 ... to:1,2,3,4// 5,6,8,..// program eccen implicit none integer, parameter:: grid=800 integer::i,j,k,n,m real*8,allocatable::f(:,:) real*8::xx(grid),yy(grid),mval,Mxval real*8,allocatable::x(:),y(:) open(10,file='3d_disk.txt') n=0 DO READ(10,*,END=100) n=n+1 END DO 100 continu
6 2024-03-05
编程技术问答社区
模块或主程序数组在Fortran中必须有恒定的形状错误
模块中声明的整数变量用作定义程序中相关数组的大小的全局变量.程序的大小各不相同,因此数组的大小是变量,但不是参数.它是在程序开始时确定的. 在以下代码段中,n是全局大小变量.它在模块中声明,并在主函数/程序的开头定义.在主程序和主要程序中包含的子例程中的类似用法分别初始化数组.但是,主程序中的初始化导致错误:模块或主程序数组必须具有恒定的形状错误,但是子例程中的初始化作品.这种不同位置中使用的非恒定值的不同处理的机制是什么? module mod implicit none integer :: n end module mod program main use mod implicit none integer :: b(n) n = 5 b(:) = 1 print*, b(:) call sub contains subroutine sub integer :: a(n) a = 10 pri
22 2024-03-04
编程技术问答社区
在Fortran中分配时自动分配数组
我们最近发现我们正在为Fortran的未分配阵列做出任务. GNU GFORTRAN编译器未捕获错误,并且代码在OSX和Linux下运行.但是,IBM Power PC上的代码分割故障相同. 我的问题是,以下代码正确吗?似乎分配给array的数组是在某些架构上自动分配内存,而不是在其他体系结构上分配.这里有特定的细节吗? 代码是混合的C/Fortran代码: #include void assign_array_(double x[], int* n); void print_array_(); int main() { int n,i; double *x; n = 5; x = (double*) malloc(sizeof(double)*n); for (i = 0; i
6 2024-03-04
编程技术问答社区
如何在Fortran中向子程序传递可分配的数组
以下代码正在返回分段故障,因为我要通过的可分配数组无法正确识别(大小返回1,当时应为3).在此页面中(http://www.eng-tips.com/viewthread.cfm?qid=170599)一个类似的例子似乎表明它应该在F95中正常工作;我的代码文件具有.f90扩展名,但是我尝试将其更改为F95,并且我正在使用GFORTRAN进行编译. 我的猜测是,问题应该以我将可分配的数组传递给子例程的方式.我在做什么错? !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%! PROGRAM test !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%! IMPLICIT NONE DOUBLE PRECISION,ALLOCATABLE :: Array(:
20 2024-03-04
编程技术问答社区
R v3.4.0-2在Arch上无法找到libgfortran.so.3
我只是在度假一个月,所以无法说出这种情况的确切点,但是R从官方拱门存储库中 现在无法开始 /usr/lib64/R/bin/exec/R: error while loading shared libraries: libgfortran.so.3: cannot open shared object file: No such file or directory 我以为可能的符号链接可能是不适当地放置或销毁的,所以我看/usr/lib试图找到它: ls -halt /usr/lib/libgfortran.so.* lrwxrwxrwx 1 root root 20 May 16 03:01 /usr/lib/libgfortran.so.4 -> libgfortran.so.4.0.0 -rwxr-xr-x 1 root root 7.1M May 16 03:01 /usr/lib/libgfortran.so.4.0.0 libfortran.so
10 2024-03-03
编程技术问答社区
在装有苹果M1芯片的MacBook上安装gfortran,以便在R中使用
使用MacOS 11.6 Big Sur,我在带有Apple M1芯片的MacBook Air上.我在R 4.1.1.我有Xtools和 gfortran for Apple M1 安装: markwhite@marks-air ~ % which xcode-select /usr/bin/xcode-select markwhite@marks-air ~ % which gfortran /usr/local/bin/gfortran 我能够成功安装和运行R,但是安装一些软件包给我带来了麻烦: > install.packages("mvtnorm") There is a binary version available but the source version is later: binary source needs_compilation mvtnorm 1.1-2 1.1-3 TRUE Do you
10 2024-03-02
编程技术问答社区
在我的mac上安装Python软件包(ffnet,spacepy)时,没有找到-lbundle1.o的库。
我在Mac上安装了Anaconda Python分布(10.9).我正在尝试安装 ffnet 软件包和 spacepy 包装,但在这样做时遇到麻烦.这是我在执行sudo easy_install ffnet时遇到的错误: ld: library not found for -lbundle1.o collect2: erreur: ld a retourné 1 code d'état d'exécution ld: library not found for -lbundle1.o collect2: erreur: ld a retourné 1 code d'état d'exécution error: Setup script exited with error: Command "/usr/local/bin/gfortran -Wall -m64 -Wall -undefined dynamic_lookup -bundle build/temp.macosx-10.
18 2024-01-26
编程技术问答社区