我在Fortran 90程序中运行一个循环,它为循环的每次迭代输出数值到输出文件.问题是输出没有保存到文件中,而是保存了很多步骤.如何让它冲洗每一步?
示例代码:
open(unit=1,file='output')
do i = 1, 1000
write(1,*) i
end do
close(unit=1)
Run Code Online (Sandbox Code Playgroud)
提前致谢.
在" 科学家和工程师的Fortran 95/2003 "一书中,有很多关于认识到格式语句中的第一列是为控制字符保留的重要性.我还看到互联网上的控制字符被称为运输控制.
为了避免混淆,通过控制字符,我将字符"1,空白(即\ s),0和+"称为当放置在第一列(字符)中时对输出的垂直间距产生影响格式声明.
另外,请参阅这个完全以固定宽度字体编写的纯文本网页:Fortran支架控制(因为没有什么比等宽字体中的散文更能说明准确性和古老性).我发现这个页面和其他类似的页面并不十分清楚.
据的Fortran 95/2003科学家和工程师,失败回顾,第一列被保留以供滑架控制可导致可怕意想不到的输出.解读Dave Barry,输入错误的字符,核导弹向挪威开火.
然而,当我试图坚持这个严厉的警告时,我发现gfortran不知道我在说什么.
请允许我用一些示例代码说明我的观点.我正在尝试打印数字Pi:
PROGRAM test_format
IMPLICIT NONE
REAL :: PI = 2 * ACOS(0.0)
WRITE (*, 100) PI
WRITE (*, 200) PI
WRITE (*, 300) PI
100 FORMAT ('1', "New page: ", F11.9)
200 FORMAT (' ', "Single Space: ", F11.9)
300 FORMAT ('0', "Double Space: ", F11.9)
END PROGRAM test_format
Run Code Online (Sandbox Code Playgroud)
这是输出:
1New page: 3.141592741
Single Space: 3.141592741
0Double Space: 3.141592741 …Run Code Online (Sandbox Code Playgroud) 我试图了解如何在Linux下动态创建和链接Fortran中的共享库.
我有两个文件:第一个liblol.f90,看起来像这样:
subroutine func()
print*, 'lol!'
end subroutine func
Run Code Online (Sandbox Code Playgroud)
我用它编译它 gfortran -shared -fPIC -o liblol.so liblol.f90
第二个文件main.f90看起来像这样:
program main
call func()
end program main
Run Code Online (Sandbox Code Playgroud)
当我现在尝试使用该命令编译时gfortran -L. -llol main.f90 -o main,我收到以下错误:
/tmp/ccIUIhcE.o: In function `MAIN__':
main.f90:(.text+0xa): undefined reference to `func_'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它说"未定义的引用",因为输出nm -D liblol.so给了我这个:
w _Jv_RegisterClasses
0000000000201028 A __bss_start
w __cxa_finalize
w __gmon_start__
0000000000201028 A _edata
0000000000201038 A _end
0000000000000778 T _fini
U _gfortran_st_write
U _gfortran_st_write_done
U _gfortran_transfer_character_write …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用KDE桌面在Ubuntu 12.04上从源代码安装Octave-3.6.2,但是当我运行Octave配置脚本时,我收到此错误
BLAS library was detected but found incompatible with your Fortran 77
compiler settings
Run Code Online (Sandbox Code Playgroud)
我./configure F77=gfortran按照大量网络搜索的建议使用,并且我确保替代系统F77文件按照此 SO帖子中的注释移出了危害方式.已安装的BLAS库是包管理器安装的库.
错误是什么意思,我该如何解决?
我目前正在使用gfortran 4.9.2,我想知道编译器是否真的知道如何利用DO CONCURRENT构造(Fortran 2008).我知道编译器"支持"它,但不清楚它是什么.例如,如果打开自动并行化(指定了一定数量的线程),编译器是否知道如何并行化并发循环?
编辑:正如评论中提到的,关于SO的前一个问题与我的非常相似,但它是从2012年开始的,只有最新版本的gfortran已经实现了现代Fortran的最新功能,所以我认为值得询问2015年编译器的当前状态.
信不信由你,这个标题大约和我能做到的一样短,仍然描述我遇到的问题!
所以这就是场景:我从VBA调用Fortran DLL,DLL使用用户定义的类型或Fortran名称(结构?)作为参数,并将类型复制回调用者进行验证.
该类型具有一个固定长度字符数组和一些磨机整数运行.
我已经注意到在这个字符数组之后定义的任何属性中有一些有趣的行为,我将在下面描述,在我描述我的煮沸测试设置之后:
Fortran边:
这是主程序:
SUBROUTINE characterArrayTest (simpleTypeIn, simpleTypeOut)
use simpleTypeDefinition
!GCC$ ATTRIBUTES STDCALL :: characterArrayTest
type(simpleType), INTENT(IN) :: simpleTypeIn
type(simpleType), INTENT(OUT) :: simpleTypeOut
simpleTypeOut = simpleTypeIn
END SUBROUTINE characterArrayTest
Run Code Online (Sandbox Code Playgroud)
这是simpleTypeDefinition模块文件:
Module simpleTypeDefinition
Type simpleType
character (len=1) :: CharacterArray(1)
!The length of the array is one here, but modified in tests
integer (kind=2) :: FirstInteger
integer (kind=2) :: SecondInteger
integer (kind=2) :: ThirdInteger
End Type simpleType
End Module simpleTypeDefinition
Run Code Online (Sandbox Code Playgroud)
编译步骤:
gfortran -c simpleTypeDefinition.f90 characterArrayTest.f90
gfortran -shared -static -o …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用fortran 90应用程序打开fifo并将格式化数据写入其中.我把它剥夺了一个最小的例子.让我们foo.f90成为以下计划:
program foo
open(1,file='fifo',position='asis',action='write')
write(1,*)'Hello, world!'
write(1,*)'Goodbye.'
end program
Run Code Online (Sandbox Code Playgroud)
现在编译并运行程序:
$ gfortran-4.7.1 -o foo foo.f90
$ rm -f fifo
$ ./foo
$ cat fifo
Hello, world!
$ rm -f fifo
$ mkfifo fifo
$ cat fifo > bar &
[1] 6115
$ strace -o foo.st ./foo
At line 3 of file foo.f90 (unit = 1, file = 'fifo')
Fortran runtime error: Invalid argument
[1]+ Done cat fifo > bar
$ tail foo.st
write(3, " Hello, world!\n", 15) …Run Code Online (Sandbox Code Playgroud) 经验:
fortran大约3个月
python - 中间:在此之前从未在python中使用过ctypes模块
我正在寻找一种方法来在python中使用fortran代码进行我的博士工作 - 随后使用matplotlib即时使用可视化计算进行可视化.
这个帖子有帮助(这告诉我可以使用ctypes模块在python中使用/调用fortran代码 - 并且鉴于fortran函数具有绑定到它们的备用名称 - 这在逻辑上对我有意义,尽管我不知道它是如何工作的细节,但我们不要选择我们的战斗明智的!).
然后这个SO帖子也处理从python调用fortran函数.
下一个合乎逻辑的步骤是查找python模块ctypes的文档.这里讨论了如何在API级别使用python访问共享库.
我把所有的部分都做成了一个最小的工作示例,另一个答案已经完成了.但我想看看涉及真实浮点数的输出机制和数学运算.这是我做的测试用例.
function prnt(s)
character(80):: s
logical :: prnt
print*, s
prnt = .true.
end function prnt
function sin_2(r)
real:: r,sin_2
sin_2 = sin(r)**2
end function sin_2
Run Code Online (Sandbox Code Playgroud)
$gfortran -shared -g -o test.so test.f90
Run Code Online (Sandbox Code Playgroud)
编辑:由于某种原因,我的工作计算机需要-fPIC选项进行编译
为了确保我的两个功能prnt,sin_2并在那里,我检查nm:
$ nm test.so | tail -3
0000067f T prnt_
0000065c T sin_2_ …Run Code Online (Sandbox Code Playgroud) 对于一个项目,我正在使用SciPy移植到Android的科学Python应用程序.我目前正在使用
https://github.com/kivy/python-for-android
构建代码.NumPy构建,但SciPy被证明是一个真正的麻烦.使用devenv和kivy python for android进行黑客攻击,我有点将SciPy C库编译为android ARM,但是现在,fortran libs仍然需要构建,我不知所措.
任何帮助将深表感谢.
作为八度音阶的先决条件,我需要安装veclibfort:
brew install veclibfort
Run Code Online (Sandbox Code Playgroud)
我收到了错误
==> make check
gfortran -o tester -O tester.f90 vecLibFort.o -framework vecLib
make: gfortran: No such file or directory
make: *** [check] Error 1
Run Code Online (Sandbox Code Playgroud)
这个错误听起来像我没有安装gfortran,但我确实如此.如果我跑gfortran -v:
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/4.8.3/libexec/gcc/x86_64-apple-darwin13.2.0/4.8.3/lto-wrapper
Target: x86_64-apple-darwin13.2.0
Configured with: ../configure --build=x86_64-apple-darwin13.2.0 --(snip)
Thread model: posix
gcc version 4.8.3 (GCC)
Run Code Online (Sandbox Code Playgroud)
这个问题似乎在这里得到解决:
https://github.com/Homebrew/homebrew-science/issues/992
但似乎没有相关的解决方案.