Articles of fortran

使用gfortran编译makefile库

我有一个Fortran代码(pardiso_1.f),需要编译一些库(BLAS,lapack和Pardiso库)。 当我尝试编译它时,我编译之前链接库,我在linuxterminal写这行: gfortran pardiso_1.f -L/home/behnam/Pardiso -lpardiso412-GNU450-X86-64 -L/usr/lib -lblas -llapack -fopenmp 它完美的作品。 不过,我必须使用makefile运行代码。 我在编写makefiles方面是如此的新颖,我不知道怎么做。 我已经写了这个makefile。 任何人都可以帮助我找出什么是错的? FC = gfortran OPT = -O2 PROGRAMS = pardiso_1 all: $(PROGRAMS) FFLAGS = -fopenmp #### BLAS, LAPACK and PTHREAD libraries LBLAS = /usr/lib/ ###location of pardiso file LIBMKL = /home/behnam/PS2/ #### Series of libraries LIBRARIES= -llapack -lblas -lpthread -lm -lpardiso412-GNU430-X86-64 […]

Fortran OPEN调用在NFSv3与NFSv4上有所不同

我试图理解为什么你可以在一个只读取权限的文件上以读写方式在NFSv3的fortran上打开一个OPEN-call的区别,而如果你在NFSv4上做同样的事情,OPEN-通话将失败。 让我来解释一下,下面是一个简单的fortran程序,以读写模式打开给定的文件(程序参数) PROGRAM test_open IMPLICIT NONE ! Parameters INTEGER, PARAMETER :: lunin = 10 CHARACTER(LEN=100) :: fname ! Local INTEGER :: i,ierr,siteid,nstation REAL :: lat, lon, asl CHARACTER(len=15) :: name !—————————————————————- ! ! Open input file ! CALL getarg(1,fname) OPEN(lunin,file=fname,STATUS='OLD',IOSTAT=ierr) IF ( ierr /= 0 ) THEN WRITE(6,*)'Could not open ',TRIM(fname),ierr STOP ENDIF WRITE(6,*)'Opened OK' […]

如何在Linux中为gfortran设置环境?

我把gfortran作为用户安装在服务器上。 但我无法设置环境。 有人会帮我如何做到这一点。 不过,我可以用下面的命令来使用gfortran: /home/kay/gcc-4.8.5/bin/gfortran 我试图用下面的方式设置环境,但不工作。 $vi ~/.bashrc export gfortran=/home/kay/gcc-4.8.5/bin/gfortran source ~/.bashrc 当我键入 $gfortran command not found 但是当我input $/home/kay/gcc-4.8.5/bin/gfortran fatal error: no input file

麻烦命名pipe道和Fortran

我尝试通过命名pipe道build立一些fortran进程之间的通信。 但是,即使考虑一个非常简单的玩具,我也会遇到麻烦。 这是我的代码: program testfifo implicit none integer status write(*,*) "hello" call flush() open(unit=11,file="MyNamedPipe",action='write',form ='unformatted' $ ,iostat=status); close(11) write(*,*) "by" call flush() return end program testfifo 如果我运行它与一个正常的文件它的作品: /fortran > rm -f MyNamedPipe && touch MyNamedPipe /fortran > gfortran -o testfifo testfifo.f /fortran > ./testfifo hello by 但是,运行一个fifo我的程序卡住了: /fortran > rm -f MyNamedPipe && mkfifo MyNamedPipe […]

FORTRAN内存利用率 – 静态与dynamic

我有一个问题,我以前试图问,但没有得到很多,并已发现新的信息,希望有更大的帮助。 这个代码是一个混合的MPI / OPENMP代码,当试图跨越多个节点运行时(尽pipe它只在一个节点上执行,而且是主进程从其中生成的),它会崩溃。 有问题的静态数组,我发现,如果静态数组“太大”,会导致seg故障,但如果他们是“小”,一切运行良好。 我也将代码转换为dynamic内存分配作为一个testing,这就解决了这个问题…无论大小(即使是在静态世界中失败的较大的那个),代码也可以完成。 这个解决scheme不是长期的,因为testing代码只是一个testing代码,有一个更大的代码performance出相同的行为,并将其更改为dynamic不是一个选项。 我需要确定是什么导致静态arraysseg故障的情况。 基本上,静态分配和dynamic分配的内存是如何处理的? 我应该试着去超越这个吗? 我相信这个问题与系统设置有关,可能只有在作业通过MPICH2时才会违反,但在login节点时不会出现问题(因此为什么它在当前login的节点上运行正常)。 在我的.bashrc文件中,因为我使用了ifort编译器,所以我有“ ulimit -s unlimited ”,“ export OMP_STACKSIZE=4g ”和“ export KMP_STACKSIZE=4G ”。 我相信这肯定是一个相对简单的解决办法,但是我不能来。 如果违规的程序源代码是需要的,我可以发送出去,但我认为这里给出的描述涵盖了这个问题,只是让我知道。

Gfortran警告抱怨“Wmaybe – 未初始化”

我最近开发了一个相当长的Fortran代码。 我正在使用的编译器是Opentuse 13.1(64位)上的gfortran 4.8.1。 但是当我用-O2或-O3选项编译代码时,我得到了许多有关“-Wmaybe-uninitialized”的警告。 我设法减less代码到一个最小的工作示例,如下所示。 在main.f90 program main use modTest implicit none real(kind = 8), dimension(:, :), allocatable :: output real(kind = 8), dimension(:, :, :), allocatable :: input allocate(input(22, 33, 20), output(22, 33)) input = 2.0 call test(input, output) end program main 在test.f90中 module modTest contains subroutine test(inputValue, outValue) use modGlobal implicit none […]

gfortran:在64位系统中编译32位可执行文件

我在AMD Athlon(TM)64 X2双核处理器5200+×2上运行Ubuntu 12.10(64位)和Linux内核3.5.0-51-generic。 我有GNU Fortran(Ubuntu / Linaro 4.7.2-2ubuntu1)4.7.2。 我试图编译成32位可执行文件的代码。 我已经检查过所有需要的库安装在我的系统上(我在之前在32位计算机上编译的程序上运行了ldd,并下载了缺失的程序包)。 我尝试运行$ gfortran foo.f -m32 -L / lib / i386-linux-gnu,但是我得到以下错误: /usr/bin/ld: cannot find crt1.o: No such file or directory /usr/bin/ld: cannot find crt1.o: No such file or directory /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgfortran.so when searching for -lgfortran /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgfortran.a when searching for -lgfortran /usr/bin/ld: […]

如何使用fortran或shell在同一文件中突出显示不匹配的数据?

经过很多努力,我找不到任何合适的命令来获得我的要求。 我有两个不同的数据文件与一列,但长度不等。 我的两个文件的一部分是: file1.dat file2.dat 23.99 23.99 45.950 45.951 5 6 23 23 43 34 我期待在下面给出的相同文件中突出显示最多2个小数点的不匹配的数据: file1.dat 23.99 45.950 5 not present 23 file2.dat 23.99 45.951 6 not present 23 43 not present 34 not present

如何输出(使用写入语句)撇号“'”?

我想在Fortran 90中使用系统命令来执行下面的命令: command = awk '{print "C"NR,$1,$2,$3}' filename1 > filename2 call system(trim(command)) 这里我的filename1和filename2是Fortran 90程序中的variables。 但问题是,任何字符都可以被分配到一个variables之间的撇号之间,我的variables也应该由撇号组成。 我不知道如何在Fortran 90中input。

在现代编译器中编译狡猾的Fortran 77代码

我正在编译用Fortran 77编写的一个软件。我应该指出,对于Fortran我一点也不了解,而且真的不会开始修改这个软件的代码 – 特别是我不确定什么是软件许可,我不知道我是否能够重新分配我的修改版本。 这些代码在OS X和Windows上使用g77编译器很好地编译,这些编译器很容易适用于这些系统。 然而,我不能让它在我的Ubuntu发行版上工作,因为我似乎无法再继续使用g77 for Ubuntu了,如果我尝试安装它的旧版本,它似乎把我的整个GCC安装搞糟了。 我已经尝试用gfortran和g95编译代码,但它不适用于: 代码使用实际variables作为循环索引(是的,我知道,坏主意)。 g95用-freal-loops选项支持,但gfortran不支持。 该代码使用真正的variables来索引到数组,gfortran将支持(警告),但g95不会支持。 任何人都可以提出一种方法来编译这些代码,使用现代和易于使用的编译器,如g95或gfortran,这两个'狡猾的'function?