fortran常见问题解决_第1页
fortran常见问题解决_第2页
fortran常见问题解决_第3页
fortran常见问题解决_第4页
fortran常见问题解决_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、为了减少重复回答问题,特编此帖,并不定期添加和更新内容。错误难免,欢迎讨论,仅供参考。很多人问哪里可以找到 Fortran 编译器, 有不少热心学友提供网址, 检验过这些链接,但是它们不一定总有效。Fortran 编译器下载:CVF特汇集在这里。 虽然俺FTN95 (License: Free for personal use)以下操作,如无特别说明,都是以为例。1. 如何加大 Stack size?选 Project = Settings = Link = Category: Output Stack allocationsReserve:这里填新值(默认为 1M若需要10M则填)2. 如何

2、用 Fortran 批量生成文件?设要生成4000个文件,文件名为AA1-AA4000,如何写循环生成文件 命令呢 ?用内部文件:character(len=80) : filename,forminteger : ido i=1,4000select case (i)case (1:9)write(form,(i1)icase (10:99)write(form,(i2)i=, 而不用写 4000 次 writecase (100:999)write(form,(i3)icase (1000:9999)write(form,(i4)iend selectwrite(filename,*) A

3、A,trim(form),.TXTopen(10,file=filename)write(10,*) iclose(10)end dostopend3. 如何用 Fortran 动态生成输出格式?设有一个数组data(100),输出时,希望每行输出num个数,而num由用户输入,如何实现?用内部文件:character(len=80) : formreal :data(100)integer:i,numdata = (/(i,i=1,100)/)/read(*,*) numwrite(form,*)(,num,write(*,form)data stopend4. MS 是不是很垃圾?是垃圾,

4、其中 Bug 太多,多到不可用的地步!在这个主题里,换了 CVF后问题就没了的人已有相当的数目。如果你用,遇到莫名其妙的错误,建议换,这是一个比较成熟的编译器。5. 如何用 F90/95 生成随机数?、I 注意:现在计算机产生的随机数都是伪随机数。random_number(x) 产生一个 0 到 1 之间的随机数( x 可以是向量),但是每次总是那几个 数。用了 random_seed () 后,系统根据日期和时间随机地提供种子,使得随机数更随机了。program randomimplicit nonereal : xcall random_seed () ! 系统根据日期和时间随机地提供种

5、子call random_number (x)! 每次的随机数就都不一样了write(*,*) xstopend program random6. 函数 /子程序超载的例子设要编一个两个变量值互换的子程序 swap(a,b) ,哑元 a,b 可能是实型数,整型数,数组, 矩阵,字符串,派生类型等等。但是希望只用一个子程序接口 swap(a,b) 来实现。 F90 可以 用类属接口来实现这种子程序超载:module UtilitiesimplicitnoneprivateI_Swap,R_Swap,RVec_Swap,RMat_Swap,Type_Swappublic: Swapinterfac

6、eSwapmodule procedure I_Swap,R_Swap,RVec_Swap,RMat_Swap,Type_Swap end interface containsinteger (ikind),intent(inout) :!a,binteger (ikind)略t。end subroutine i_swapsubroutine r_swap (a,b) !实型置换real (rkind), intent(in real (rkind) t = a a = b b = treturnout) :a,b: tend subroutine r_swapsubroutine RVec_

7、swap (a,b)! 实型向量置换real (rkind), intent(inout) :a(:),b(:)integer (ikind) do i=1, size(a)icall R_Swap (a(i),b(i) end do returnend subroutine RVec_swapsubroutine RMat_swap (a,b)! 实型矩阵置换。! 略end subroutine RMat_swapsubroutine Type_swap (a,b)! 派生类型置换。! 略end subroutine Type_swapend module Utilities7. 如何在CV

8、F中为多行代码加注释?见:8. 推荐好的代码风格根据F90子集语言ELF90和F的要求整理(部分)。“强迫用” 的语言特性:+ F90 的自由格式的源代码。+ implicitrore。+ 子过程的哑元都要有 irtert 属性。+ 函数子程序的哑元必须指定为irtert(ir) 。+所有子程序和函数都放在模块(module)中,然后引用(use)该模块;或者放在program中。+ 数组哑元要求是假定形状的,或者有固定的维数和大小。字符哑元要求是假定长度的。+ 对于 recursive function (递归函数)语句,必须有 result 子句。+ 在所有派生类型( type )的定义语

9、句中,必须用双冒号分隔符(: )。+ 主程序要求有 program 语句。+ 在程序单元的 end 语句中要求后跟程序单元的类型和名称。+ 在 end type 语句中要求后跟类型的名称。+ end program 前必须有 stop 语句以表示停止执行。+ 子过程中必须有 return 语句,以表示返回。+ subroutine s( ) 并且 call s( ) ,即必须有括号。“不得用” 的语言特性:- allocatable、intent 、pointer 、save 、dimension 、parameter 和 target 语句形式。 ( 用属性形式代替。 )- external

10、 语句形式。 ( 用显式的接口代替。 )- assign 、赋值 go to 、交错 return 、 continue 、 entry 、和计算 go to 语句。- include 文件。 ( 用模块代替。 )- data 和 block data 。 ( 在类型声明语句中进行初始化或赋值。 )-commor块。(将全局数据放在模块中,用模块代替。)- equivalence 。 (被认为是许多难以查找的编程错误的来源。 )- double precisior 语句。 ( 用 real 语句声明双精度的实型数。 )- 语句函数。 ( 用内部函数代替。 )- 专用固有函数。 ( 用类属函数代

11、替。 )- 假定大小数组。 ( 用假定形状数组代替。 )- do n (其中 n 为语句标号)。 ( 用 do 和 end do 代替。 )- 非整数 do 变量和表达式。- 同一行上多条语句。- 逻辑型 case 表达式。- 从 if 块外面分支到 end if 。- where 语句形式。 ( 用 where 结构形式。 )- 在 open 和 inquire 语句中的 blank= 说明符。- 双字关键词之间要求有空格: in out , go to 。不能写为 inout , goto 。9. 将字符串改为大写的子程序subroutine UpCase (str)change to u

12、pper casecharacter(len=*),intent(inout)strinteger(4)icha,LL,icvalinteger(4),parameterdiffichar(a)ichar(A)LLlen_trim(str)doicha=1,LLicvalichar(str(icha:icha)if(icval=ichar(a).and.icval=ichar(z)thenstr(icha:icha)char(icval-diff)endenddoifreturnend subroutineUpCase10. CVF中源代码信息浏览默认情况下,代码信息浏览是失效的( Go to

13、 Definition/Reference 都不起作用),你 可以将其启用:1. Project/Settings/Fortran, 选中 Generate Source Browse Information 。2. 选 BrowseInfo 卡页,选中 Build Browse info file ,点击 OK。3. Build 程序。代码浏览器仅当成功 Build 程序后才可应用。4. Tools/Source Browser 。5. 在 Browse 对话框底部,找到 Case sensitive 复选框。 Fortran 是大小写不敏感的语 言,去除 Case sensitive 的选

14、中。点击 OK。6. 现在可以用 Browse 对话框来浏览函数调用关系以及变量声明和引用关系。7. 光标置于一个变量名或函数名中,鼠标右键: Go to Definition 使光标跳到该变量 声明或函数定义语句; Go to Reference 使光标跳到该变量的引用或函数引用语句。注: (Addison 提供 )IVF中现在不适用,因为此技术是属于MS的,不是INTEL的,所以,in tel正在与MS就有关问题进行磋商,目前的进展比较顺利,可能要在以后的版本中支持,目前还没有时间表。11. 如何在CVF中检验代码是否符合 F90/95标准?为了检验你的代码是否符合F90或F95标准,在C

15、VF中选:Project/Settings.选 Fortran 页卡Category 下拉框选: Compilation DiagnosticsFortran Standard Checking 下拉框选: Fortran 90 或 Fortran 95这样,凡是CVF自家扩展的语法就都会有提示了。例:type testallocatablepointer: a(:): b(:)integer,integer,endtype test若选了标准检验,会提示:AWarning:Allocatable fields of derived types are non-standard也就是说按照 F

16、90/95 标准, type 中不允许用 allocatable臭石头雪球提供:VS2005 + 组合的方法差不多:项目属性, Fortran , Diagnostics ,Warn For Non-standard Fortran 选择为 Fortran 90 或 Fortran 9512. 如何输出 tab 字符?char(9) 。13. 如何在CVF中设置把Tab转为空格Tab字符不在Fortran标准中,在不同环境下会有不同的显示,不推荐使用。 采用下列方法,可将 Tab 键转为 3 个空格: 依次选菜单 Tools/Option ,选 Tab 卡项,File type 选 Fortr

17、an ,选 Insert spaces ,Tab size 选 3,Indent size 选 3。14. 如何实现“代码自动补全”在CVF中:在 IVF 中:问题 各位大侠,非常感谢你们的回复。置顶帖中关于批处理读取文件的帖子我已经看了。的形式。因帖子里是批处理文件,文件名是 1-4000 的数字序列。 而我要读取的是时间序列的文件,即 1 月 1 日 -12 月 31 日, year+month+day 此置顶帖中的例子不适用我这个问题。文件名为 (2006年 365天的数据,共 365个文件)pre.datpre.datpre.datpre.datpre.datpre.datpre.dat 单个文件读取已经完成,但是如何批处理还没有解决。 解决 1:既然是有规律你就可以做循环来进行读取, 每次循环读取一个文件 .例如做 3层循环, 分别是年循环 (如果就一年那就不用循环了 ), 月循环 , 日循环 . 不 难吧 . 解决 2 我的方法:先把文件名: pre.dat,pre.dat, 输入到一个文件中,然后依次读取,赋给字符型变量数组 filenames(i), 然后就可以循环打开所有文件。程序如下:program test integer:a(12)=31,28,31,30,31,30,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论