最近,我开始用gfortran在MacOSX10.6.8上使用Fortran编程。我编写了以下简单的.f90程序:
sayhi.f90
subroutine sayhi()
implicit none
! Display output to screen
print*, 'Hello World'
end subroutine sayhi
和main.f90
program main
implicit none
call sayhi()
end program
当我在终端中键入以下命令时,程序将按预期进行编译:
gfortran sayhi.f90 main
这里有两个Fortran90文件和一个makefile:
文件main_mod.f90的内容
module main_mod
contains
subroutine add(a, b)
implicit none
integer, intent(in) :: a, b
print *, (a+b)
end subroutine add
end module main_mod
文件main_mod2.f90的内容
module main_mod2
use main_mod
contains
subroutine add2(a, b)
im
由于Fortran 77只允许72列文本,所以vim突出显示并忽略了第72行之后的任何内容,这是相当公平的,因为编译器实际上将忽略它。
当我开始混合F90和F77时,问题就出现了。问题发生在.f和.f90文件上。我在Redhat 7中使用vim 7.2。
我可以有如下代码:
string90 = "This is a string of more than 72 characters"
第二个引号在“文本宽度”标记之后。Vim忽略第二个引号,并将整个文本视为字符串。
这种行为能被某种方式改变吗?
据我从Photran文档了解,如果Fortran源代码的扩展名带有大写字母,如F90或F95,则在构建时将自动对该文件进行预处理。但这对我没用..。如果我试图构建一个只有一个文件main.F90的项目:
program main
#ifdef __linux__
print *,"Hello, world!"
#endif
end program
然后,Photran会说“为xxx项目没什么可建的”。我尝试过在Windows和Linux上使用Photran 8 (Eclipse )和GNU编译器,我也在Linux上尝试过Intel Fortran编译器,所以它们都失败了
我试图将我们的项目从autotools移植到CMake,但遇到了fortran编译器设置的问题。该项目由C++、Fortran和Fortran90代码片段组成。在autoconf/automake项目中,我们简单地定义了FC和F77以及相应的标志,比如FCFLAGS和FFLAGS。但在CMake中,它的工作方式似乎有点不同。
到目前为止,我所做的:
project (blah-proj CXX Fortran)
... in ibm case ....
set (CMAKE_Fortran_FLAGS "-qfullpath -qinitauto -qnolm -qinit=f90pt
我有一个用f90写的模块和一些遗留的init数据代码:
module example
implicit none
integer a
! my legacy data init value
!DEC$ NOFREEFORM
data a /1/
!DEC$ FREEFORM
end module example
它编译了OK,但是在运行时,数据语句似乎不工作,var a的值是0而不是1。
在我的f90代码中插入遗留数据语句的正确方法是什么?
program main
use example
print *, a
end program main
在这种情况下,如果我删除!
我正在使用Fortran和OpenMP,但当我尝试在有大型数组的情况下使用OpenMP并行化循环时,我总是遇到一个问题。例如,以下代码:
PROGRAM main
IMPLICIT NONE
INTEGER, PARAMETER :: NUMLOOPS = 300000
REAL(8) :: TESTMAT(NUMLOOPS)
INTEGER :: i,j
!$OMP PARALLEL SHARED(TESTMAT)
!$OMP DO
DO i=1,NUMLOOPS
TESTMAT(i) = i
END DO
!$OMP END DO
!$OMP END PA
在气流中,我能缩短这些任务依赖线吗?
a >> b >> c >> f >> G
a >> b >> d >> f >> G
至
a >> b
b >> c
b >> d
c >> f
d >> f
f >> g
这些都是等价物?在时间和效率上有什么不同吗?如果您使用的是代码格式化程序,则需要考虑第一个样式和较长的变量任务名。
有什么建议或建议吗?
我有一个包含354个.f90模块(和主文件)的文件夹。在自述中,有人建议:
最好的方法是解压缩存档source.zip,将所有的354个程序文件解压缩到您选择的目录中。然后可以使用命令进行编译。
gfortran *.f90 -o app.exe
我在Mac上,所以我安装了gfortran,但是执行上面写的命令不起作用:
gfortran: *.f90: No such file or directory
因此,我假设需要一个bash脚本(或者至少是一个makefile)。我不习惯这样做,那我该怎么办?有自动生成文件生成器吗?
我写了这段代码:
program exponent
implicit none
real(8) :: sum
integer(8) :: i
integer :: limit
real :: start, end
sum = 0d0
limit = 10000000
call CPU_TIME(start)
do i=1, limit
sum = sum + exp(i*1.d0/limit)
end do
call CPU_TIME(end)
print *, sum
在下面的中,我尝试使用下面的解决方案来比较一组源文件(这里是fortran90 = *.f90)。
为了做到这一点并查看不同的源代码,我在我的~/.bashrc中放入:
function diffm { for file in "$1"/"$2"; do diff -qs "$file" "$3"/"${file##*/}"; done ;}
但不幸的是,如果我在当前目录中执行参数$1:
$ diffm . '*.f90' ../../dir2
结果是:impossible to access to