如何读取和写入标准输入,输出和错误流stdin,stdout以及stderr在Fortran中?我听说写stderr,例如,使用要write(5, fmt=...)与5单位的stderr,我知道写的方式stdout是使用write(*, fmt=...).
如何使用ifort编译器读取和写入标准输入和输出单元?
编译器版本:
英特尔(R)Fortran编译器,用于运行在英特尔(R)64,版本10.0 Build 20070426上的应用程序包ID:l_fc_p_10.0.023版权所有(C)1985-2007英特尔公司.版权所有
在sublime论坛上有几个链接,关于如何让Sublime Text 2与Fortran 90一起工作http://www.sublimetext.com/forum/viewtopic.php?f=4&t=770,但他们没有似乎很适合作为评论标识符"!" 没有得到很好的待遇.
我使用原始建议的Punchcard.tmLanguage文件快速组装了一个解决方案,并修改了字典中的第一个块来处理"!" 作为评论(可在此处获得:https://gist.github.com/4209445).
Sublime Text 2是一个出色的文本编辑器,它支持Fortran可能对理论物理和金融领域的许多人有所帮助.如果有人知道更好的解决方案,请告诉我.
谢谢!
我的理解是你可以从Fortran中的函数返回一个数组,但由于某种原因,我的代码只返回我要求它返回的数组中的第一个值.这是功能:
function polynomialMult(npts,x,y)
integer npts
double precision x(npts), results(npts + 1), y(npts,npts)
polynomialMult = x(1:npts) + 1
end function
Run Code Online (Sandbox Code Playgroud)
这就是我所说的
C(1:numPoints) = polynomialMult(numPoints,x,f)
print *, C(1:numPoints)`
Run Code Online (Sandbox Code Playgroud)
现在它没有做任何有用的事情,因为我在编写逻辑之前试图理解语法.我看到了一些关于为函数指定类型的东西,但是当我写的时候
integer function polynomialMult(npts,x,y)
Run Code Online (Sandbox Code Playgroud)
或者无论我得到编译错误.
这两种声明假定大小数组的方法之间有什么区别吗?
例如
real, dimension(:) :: arr
Run Code Online (Sandbox Code Playgroud)
和
real :: arr(*)
Run Code Online (Sandbox Code Playgroud) 当我试图安装gfortran时,我收到了此消息.
~$ brew install gfortran
Error: No available formula for gfortran
GNU Fortran is now provided as part of GCC, and can be installed with:
brew install gcc
Run Code Online (Sandbox Code Playgroud)
我的问题是如何用自制软件或端口安装gfortran?
要么
如果现在GNU Fortran是GCC的一部分我如何使用gcc编译fortran代码?
我不确定我是否误解了一些我记得上次我仍然可以使用gfortran编译我的代码但现在它不起作用的东西.
更多的信息:
当我使用命令时,brew list我仍然看到gfortran在那里,但不能使用它.
更多信息(最新):
好的,现在我可以使用gfortran命令,但另一个问题来了
~$ gfortran-4.9 hello.f
dyld: Library not loaded: /usr/local/lib/libcloog-isl.4.dylib
Referenced from: /usr/local/Cellar/gcc/4.9.2/libexec/gcc/x86_64-apple-darwin14.0.0/4.9.2/f951
Reason: image not found
gfortran-4.9: internal compiler error: Trace/BPT trap: 5 (program f951)
Abort trap: 6
Run Code Online (Sandbox Code Playgroud) 我想知道在Fortran中是否可以只使用一个命令(带选项/说明符)来执行以下操作:
打开文件(如果存在)并附加一些数据(这可以通过以下方式完成:open(unit=40,file='data.data',Access = 'append',Status='old')但如果文件不存在则会发出运行时错误)
如果文件不存在则创建该文件并写入一些数据.
我目前正在使用inquire来检查文件是否存在,但我仍然必须使用该open语句来追加或写入数据.
以下代码返回分段错误,因为我尝试传递的可分配数组未被正确识别(大小返回1,应该是3).在这个页面(http://www.eng-tips.com/viewthread.cfm?qid=170599)中,一个类似的例子似乎表明它应该在F95中正常工作; 我的代码文件有.F90扩展名,但我尝试将其更改为F95,我正在使用gfortran进行编译.
我的猜测是问题应该是我将可分配数组传递给子程序的方式; 我究竟做错了什么?
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
PROGRAM test
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
IMPLICIT NONE
DOUBLE PRECISION,ALLOCATABLE :: Array(:,:)
INTEGER :: iii,jjj
ALLOCATE(Array(3,3))
DO iii=1,3
DO jjj=1,3
Array(iii,jjj)=iii+jjj
PRINT*,Array(iii,jjj)
ENDDO
ENDDO
CALL Subtest(Array)
END PROGRAM
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
SUBROUTINE Subtest(Array)
DOUBLE PRECISION,ALLOCATABLE,INTENT(IN) :: Array(:,:)
INTEGER :: iii,jjj
PRINT*,SIZE(Array,1),SIZE(Array,2)
DO iii=1,SIZE(Array,1)
DO jjj=1,SIZE(Array,2)
PRINT*,Array(iii,jjj)
ENDDO
ENDDO
END SUBROUTINE
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
Run Code Online (Sandbox Code Playgroud) 我/* block comment */在C++中看到了块注释.我知道我可以使用!或进行行注释c,但在Fortran中是否有任何块注释选项?
我正在钻研Fortran,我遇到了pure关键字,指定了没有副作用的函数/子程序.
我有一本书,S Chapman的Fortran 90/95,它引入了pure关键字,但奇怪的是没有提供"良好的编码实践"用途.
我想知道如何在程序中使用这个关键字.只是环顾四周,对我来说很明显,大多数没有副作用的程序都没有必要包含pure关键字.
那么它最好用在哪里?只有在程序中才能完全保证没有副作用?或者也许在程序中,计划elemental稍后转换为程序?(elemental必须首先执行程序pure.)