[教学]fortran计时间函数
- 格式:pdf
- 大小:461.23 KB
- 文档页数:4
FORTRAN是世界上最早出现的高级编程语言,是工程界最常用的编程语言,它在科学计算中(如航空航天、地质勘探、天气预报和建筑工程等领域)发挥着极其重要的作用。
经过40多年的发展,伴随着FORTRAN语言多次版本的更新及相应开发系统的出现,其功能不断完善,最新版本的开发系统几乎具备了VC、VB的所有特点,如图形界面编程、数据库等。
目前,工科院校开设的计算机编程语言课首选仍然是FORTRAN :<说实话,从科技发展的趋势来说这不是好事。
您可以设想一下,如果需要用鹅毛笔抄写大量的古籍是什么感受!强烈建议阅读《发掘C#特性赋予科学计算项目以威力》1 FORTRAN77四则运算符+ - * / ** (其中**表示乘方)在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→()2 FORTRAN77变量类型隐含约定:I-N规则凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。
用类型说明语句确定变量类型:可以改变I-N规则用IMPLICIT语句将某一字母开头的全部变量指定为所需类型如IMPLICIT REAL (I,J)三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。
数组的说明与使用使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2)10FORMAT(1X,5(A2,I2,1X,A2,I4))使用DATA语句给数组赋初值变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如DATA A,B,C/,,DATA A/,B/,C/DATA A,B,C/3*CHARACTER*6 CHN(10)DATA CHN/10*'?????'/INTEGER NUM(1000)DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/3 FORTRAN77程序书写规则·程序中的变量名,不分大小写;·变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效;·一行只能写一个语句;·程序的第一个语句固定为PROGRAM 程序名称字符串·某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容;·某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容;·某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行;·某行的第7至72字符位为语句区,语句区内可以任加空格以求美观;·某行的第73至80字符位为注释区,80字符位以后不能有内容。
FORTRAN简明教程
一、FORTRAN简介
FORTRAN,指程序设计语言,由IBM在1956年发明,主要用于科学计算、数值运算等。
它将汇编语言中的功能集成在一个简单的命令语句中,
减少了汇编语言的繁琐的编译过程。
它也是目前世界上最古老的计算机程
序设计语言。
FORTRAN由“Formula Translating System”派生而来,主要用于工
程和科学计算,非常适用于此领域的算法及数学公式的应用。
基于这种语言,开发者可以轻松描述数字问题,并同时检测、审核、维护和优化此代码。
二、FORTRAN的优缺点
1、优点
a.FORTRAN是一种很容易上手的程序设计语言,它的语言规范很容易
理解,而且简单易用。
b.FORTRAN支持大量数值操作,所以它在计算机科学和工程领域有广
泛的应用。
c.FORTRAN程序非常高效,它的优化程序可以提高程序运行效率,而
且运算速度很快。
d.FORTRAN支持很多的数据类型,这样可以更有效地操作和管理数据。
2、缺点
a.FORTRAN不支持图形用户界面(GUI),这样用户需要熟悉命令行,才能完成程序的编写。
FORTRAN是世界上最早出现的高级编程语言,是工程界最常用的编程语言,它在科学计算中(如航空航天、地质勘探、天气预报和建筑工程等领域)发挥着极其重要的作用。
经过40多年的发展,伴随着FORTRAN语言多次版本的更新及相应开发系统的出现,其功能不断完善,最新版本的开发系统几乎具备了VC、VB的所有特点,如图形界面编程、数据库等。
目前,工科院校开设的计算机编程语言课首选仍然是FORTRAN :<说实话,从科技发展的趋势来说这不是好事。
您可以设想一下,如果需要用鹅毛笔抄写大量的古籍是什么感受!强烈建议阅读《》1 FORTRAN77四则运算符+ - * / ** (其中**表示乘方)在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→()2 FORTRAN77变量类型隐含约定:I-N规则凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。
用类型说明语句确定变量类型:可以改变I-N规则用IMPLICIT语句将某一字母开头的全部变量指定为所需类型如IMPLICIT REAL (I,J)三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。
数组的说明与使用使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2)10FORMAT(1X,5(A2,I2,1X,A2,I4))使用DATA语句给数组赋初值变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如DATA A,B,C/,,DATA A/,B/,C/DATA A,B,C/3*CHARACTER*6 CHN(10)DATA CHN/10*''/INTEGER NUM(1000)DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/3 FORTRAN77程序书写规则•程序中的变量名,不分大小写;•变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效;•一行只能写一个语句;•程序的第一个语句固定为PROGRAM 程序名称字符串•某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容;•某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容;•某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行;•某行的第7至72字符位为语句区,语句区内可以任加空格以求美观;•某行的第73至80字符位为注释区,80字符位以后不能有内容。
Fortran 计时函数etime(fortran 77)例:call etime(tarray,t0)…………….Call etime(tarray,t1)print *, … Elapsed time:‟,t1-t0system_clock (fortran 90)cpu_time (fortran 95)例:call cpu_time(t0)…………….call cpu_time(t1)Print *, … Elapsed time:‟, t1-t0函数的具体参数可以参看编译软件Compaq Visual Fortran中的帮助文档和下面这段程序及其运行结果!关于计算程序所耗费的时间函数,具体可以参看帮助文档program systemclockinteger:: ic, crate, cmaxinteger(2) :: ic2, crate2, cmax2integer(4) :: ic4, crate4, cmax4integer::t1,t2call system_clock(t1)call system_clock(count=ic, count_rate=crate, count_max=cmax)call system_clock(count=ic2, count_rate=crate2, count_max=cmax2) call system_clock(count=ic4, count_rate=crate4, count_max=cmax4) call system_clock(t2)print *, t1, t2print *, ic, crate, cmaxprint *, ic2, crate2, cmax2print *, ic4, crate4, cmax4end program systemclock过一会儿再运行一下这段程序,其结果是可见,此台计算机上编译软件Compaq Visual Fortran的默认的integer是integer(4),计数率是10000(每秒计数10000次),最大计数值是2147483647。
Fortran,,,,,计时函数etime(fortran,,,,,77),,,,,例:call,,,,,etime(tarray,t0) ,,,,,,,,,,,,,,,,,,,,,,,,,……………. ,,,,,,,,,,,,,,,,,,,,,,,,,Call,,,,,etime(tarray,t1)print,,,,,*,,,,,,…,,,,,Elapsed,,,,,time:‟,t1-t0system_clock,,,,,(fortran,,,,,90)cpu_time,,,,,(fortran,,,,,95)例:call,,,,,cpu_time(t0) ,,,,,,,,,,,,,,,,,,,,,,,,,……………. ,,,,,,,,,,,,,,,,,,,,,,,,,call,,,,,cpu_time(t1)Print,,,,,*,,,,,,…,,,,,Elapsed,,,,,time:‟,,,,,,t1-t0函数的具体参数可以参看编译软件Compaq,,,,,V isual,,,,,Fortran中的帮助文档和下面这段程序及其运行结果!关于计算程序所耗费的时间函数,具体可以,,,,,参看帮助文档,,,,,program,,,,,systemclock,,,,,,,,,,integer::,,,,,,,,,,,,,,,,,,,,,,,,,ic,,,,,,crate,,,,,,cmax,,,,,,,,,,integer(2),,,,,::,,,,,ic2,,,,,,crate2,,,,,,cmax2,,,,,,,,,,integer(4),,,,,::,,,,,ic4,,,,,,crate4,,,,,,cmax4,,,,,,,,,,integer::t1,t2,,,,,,,,,,call,,,,,system_clock(t1),,,,,,,,,,call,,,,,system_clock(count=ic,,,,,,count_rate=crate,,,,,,count_max=cmax) ,,,,,,,,,,call,,,,,system_clock(count=ic2,,,,,,count_rate=crate2,,,,,,count_max=cmax2) ,,,,,,,,,,call,,,,,system_clock(count=ic4,,,,,,count_rate=crate4,,,,,,count_max=cmax4) ,,,,,,,,,,call,,,,,system_clock(t2),,,,,,,,,,print,,,,,*,,,,,,t1,,,,,,t2,,,,,,,,,,print,,,,,*,,,,,,ic,,,,,,crate,,,,,,cmax,,,,,,,,,,print,,,,,*,,,,,,ic2,,,,,,crate2,,,,,,cmax2,,,,,,,,,,print,,,,,*,,,,,,ic4,,,,,,crate4,,,,,,cmax4,,,,,,,,,,end,,,,,program,,,,,systemclock,,,,,过一会儿再运行一下这段程序,其结果是可见,此台计算机上编译软件Compaq,,,,,V isual,,,,,Fortran的默认的integer是integer(4),计数率是10000(每秒计数10000次),最大计数值是2147483647。
采用Fortran编程提取系统时间文一猪编程中我们往往需要提取系统时间,从而确定程序或子程序的运行时间。
我想在这里上有几个目的,比如说要对程序进行优化,当然你得先优化比较费时的子程序,或者你要直接从实际计算上计算出程序的复杂度,简单说就是计算时间同计算量的函数关系。
在这里给出关于采用Fortran95语言编写的提取系统时间程序。
Example1是网上帖子里的程序,不过该程序采用的time程序似乎不是Fortran95的标准程序。
在Example2给出的是自编的采用模块化编程调用cpu_time程序,使用F95的朋友可以很容易地将该程序嵌入到你们的程序中使用。
Mar. 14, 2013program TimeNowcharacter*8 :: nowinteger :: hh,mm,sscall time (now) ! 读系统时间write(*,*) now ! 写出时间字符串! 用字符变量now作为内部文件,从中将时、分、秒作为整数读出read(now,"(I2,1x,I2,1x,I2)") hh,mm,ss ! 字符转换为write(*,*) hh,mm,ss ! 写出时、分、秒的整数值stopend program TimeNow帖子:/club/showtxt.asp?id=70407/post-70559.htmlmodule get_timepublic display_timecontainssubroutine display_time()implicit nonedoubleprecision nowtimecall cpu_time(nowtime)write(*,'(1x,a,1e10.3)') "Now Time is ", nowtime returnend subroutineend moduleprogram test_get_timeuse get_timeimplicit doubleprecision (a-h, o-z), integer (i-n)call display_time()do i = 1,1000000do j = 1,2000x = dlog(1.1d0)enddoenddocall display_time()stop "The end!"end program第2 章Fortran 95 内函数本章列出了f95 编译器可识别的内函数名称。
FORTRAN是世界上最早出现的高级编程语言,是工程界最常用的编程语言,它在科学计算中(如航空航天、地质勘探、天气预报和建筑工程等领域)发挥着极其重要的作用。
经过40多年的发展,伴随着FORTRAN语言多次版本的更新及相应开发系统的出现,其功能不断完善,最新版本的开发系统几乎具备了VC、VB的所有特点,如图形界面编程、数据库等。
目前,工科院校开设的计算机编程语言课首选仍然是FORTRAN :<说实话,从科技发展的趋势来说这不是好事。
您可以设想一下,如果需要用鹅毛笔抄写大量的古籍是什么感受!强烈建议阅读《发掘C#特性赋予科学计算项目以威力》1 FORTRAN77四则运算符+ - * / ** (其中**表示乘方)在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→()2 FORTRAN77变量类型2.1隐含约定:I-N规则凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。
2.2用类型说明语句确定变量类型:可以改变I-N规则2.3用IMPLICIT语句将某一字母开头的全部变量指定为所需类型如IMPLICIT REAL (I,J)三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。
2.4数组的说明与使用使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2)10FORMAT(1X,5(A2,I2,1X,A2,I4))2.5使用DATA语句给数组赋初值变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如DATA A,B,C/-1.0,-1.0,-1.0/DATA A/-1.0/,B/-1.0/,C/-1.0/DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)DATA CHN/10*''/INTEGER NUM(1000)DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/3 FORTRAN77程序书写规则∙程序中的变量名,不分大小写;∙变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效;∙一行只能写一个语句;∙程序的第一个语句固定为PROGRAM 程序名称字符串∙某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容;∙某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容;∙某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行;∙某行的第7至72字符位为语句区,语句区内可以任加空格以求美观;∙某行的第73至80字符位为注释区,80字符位以后不能有内容。
Fortran基本用法小结目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。
只读到第九章,主要是3~9章,都是最基本的用法(原书共16章)。
这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。
希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。
要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。
觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。
外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。
所以这份笔记还处于纸上谈兵的层次。
如果有不妥的方,希望大家指正。
谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。
二、概述1、名词解释Fortran=For mula Tran slator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
ortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。
以下是77和90的一些格式上的区别。
Fortran 77:固定格式(fixed format),程序代码扩展名:.f 或.for(1)若某行以C,c或*开头,则该行被当成注释;(2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格式化输入出等);7~72为程序代码编写区;73往后被忽略;(3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。