Fortran90_7
笫十五章 FORTRAN 90
笫十五章 FORTRAN 90
FORTRAN 90 与FORTRAN 77 不同之处
一、说明语句
(一)固有数据类型 整型、实型、复型,其后都可以接一个下划线_和另一个 整型常量或有名整型常量用来指明种别参数。如 42_2 42_long 0.3_double (3.14_double,_7) ascii_’john Q.public’ 种别参数(kind parameter):当它是一个整数1,2,3…时, 可能表示单精度双精度和四精度,在不同的系统中可能是 4,8,16。 (二)变量 integer (kind=2):: x,y character (len=20,kind=kanji) ::name kinji为一整型常量 real ::a=1.2,b=2.3, 初始化变量的值在执行过程中可变
六、数组
(六) 列表检索 1. 对无序列表的顺序检索 subroutine search_1(lost_card,card_number,found) integer,dimension(:),intent(in) :: lost_card integer,intent(in) ::card_number logcal,intent(out) ::found integer ::I found=.false. do I=1,size(lost_card) if(card_number==lost_card(I)) then found=.trun. exit end if end do end
FORTRAN90用法总结
FORTRAN90用法总结
Fortran90是Fortran的最新标准程序设计语言,它是在Fortran77
基础上的新增功能,支持面向对象的功能,同时也支持可变参数,数据语
句和开发语句,使其具有更高的强大功能。
它也支持宏的使用,以帮助程
序编写者更好的实现一些高级程序功能,以提高程序性能,提高程序易用性。
下面将重点介绍Fortran90的五大用法。
第一,利用Fortran90进行函数的编写。
Fortran90的函数可实现参
数的多次组合,通过对用户函数的调用,就可达到想要的结果,而不用写
复杂的循环程序,这有助于提高程序的可管理性,降低程序的出错率。
第二,通过宏的使用来完成Fortran90的程序编写。
宏语言有助于程
序的复杂编写和优化,通过它可以大大提高程序的性能,节约程序的开发
时间,从而提高程序的可用性。
第三,Fortran90的数组操作功能。
Fortran90支持数组的多维操作,能够进行大数组操作,从而编写出简洁的程序,节约存储空间,提高程序
的执行效率。
第四,Fortran90的指针操作功能。
它可以完成复杂数据的指针操作,以实现数据的重排、排序、和传输,可以让程序编写者有效地运用指针操作,提高程序性能和稳定性。
最后,Fortran90的结构化编程功能。
FORTRAN90第一章FORTRAN90概述
用类型说明语句定义变量的类型 ,可以改变隐含说 明语句和“I--N”规则的约定,有六种类型语句: INTEGER(整型说明语) REAL (实型说明语句) DOUBLE PRECISION(双精度型) COMPLEX (复型说明语句) LOGICAL(逻辑型说明语句) CHARACTER(字符型说明语句) 例:INTEGER A,K3,MAXW,CL REAL AREA,KEY,MAXL 类型说明语句优先级高于隐含说明语句 ,又高于隐 含规则 说明语句是非执行语句,应出现在所有执行语句前, 隐含说明语句还必须出现在类型说明语句前。
每条READ语句都从新的输入行开始读数。
输入数据类型要正确。 数据的之间用空格或逗号或回车符来分隔。 输入数据只有在按下回车键之后才有效。在上 机操作时,一定要记得在输入数据后按回车。 当输入数据中有 /符号时 ,/后面的输入数据没有 作用;如果/前面输入的数据不够用,其余要输入 的数据已经有值的保持不变,否则,数值(算术)型 与字符型数据取零值 ; 逻辑型数据取真值 ; 输入 多余的数据是没有作用的。 输入的数据,算术型数据必须是与对应的变量有 相同类型的常量 ; 字符型数据 , 当长度不够时以 空格填充 , 当长度超过时截掉多余部分 ; 逻辑型 可用以T或F或.T或.F打头的任意字符串输入。
例:求三个数(5,10,23)的平均值。 PROGRAM TEST ! 计算三个数的平均值 A=5;B=10;C=23 ave=(A+B+C)/3 write(*,*) 'AVE=',ave END PROGRA&
&M TEST !注意续行方法
§1.4 FORTRAN 90字符集 FORTRAN90字符集包括: 1) 大写与小写英文字母
Fortran90
1.4 数字处理........................................................................................................................................ 1 1.5 数组处理........................................................................................................................................ 1 1.6 指针................................................................................................................................................ 1 1.7 数据结构........................................................................................................................................ 2 1.8 用户定义的类型和操作符 ............................................................................................................ 2 1.9 过程................................................................................................................................................ 3 1.10 模块(modules).............................................................................................................................. 3 1.11 输入和输出.................................................................................................................................. 3 1.12 荒废的特性.................................................................................................................................. 4 2. Fortran 77, C, C++ 和 Fortran 90 的比较............................................................................................. 5 2.1 数值健壮性................................................................................................................................... 5 2.2 数据并行化部分........................................................................................................................... 7 2.3 数据抽象..................................................................................................................................... 12 2.4 面向对象编程............................................................................................................................. 12 2.5 函数型程序设计......................................................................................................................... 12 3. 数值健壮性........................................................................................................................................... 13 3.1 数值种类(Kind)参数化 .............................................................................................................. 13 3.2 精度选择...................................................................................................................................... 14 3.3 数值多态性................................................................................................................................. 14 3.4 数值近似模型............................................................................................................................. 15 3.5 环境查询..................................................................................................................................... 15 4. 数据并行性........................................................................................................................................... 17 4.1 数组操作...................................................................................................................................... 17 4.2 数组片段..................................................................................................................................... 21 4.3 动态数组...................................................................................................................................... 22 4.4 返回赋值数组的函数(array-valued functions) .......................................................................... 24 4.5 例子:高斯消元法 ..................................................................................................................... 26 参考文献.................................................................................................................................................... 28
Fortran90学习指导
FORTRAN90学习指导一、FORTRAN90基础知识1.源程序及其构成书写格式:主程序定义语句、结束语句注意:在没有程序名称的时候,程序开头的PROGRAM也不要出现。
如果使用了程序名称且在END语句中出现,则END语句中的PROGRAM不能省略。
语句行可以是0~132个字符;除赋值语句外,每个语句都要使用关键字开头。
如果希望一行中出现多个语句,语句一定要用分号隔开。
空格不能随便使用,关键字、变量和常量名以及操作符中的空格会使字符失去其原有的含义。
但它们之间一定要加空格。
注释行:以感叹号为标记,或“C”、“*”(FORTRAN90中不提倡此用法)续行标记:在句末尾添加续行符&,如果将关键字分成两行,则下一行开头也要加续行标记。
如果续行符出现在注释语句中,则失去了续行的功能。
2.FORTRAN90字符集126个英文字母(大小写字母等价)210个阿拉伯数字3下划线421个特殊字符:空格= + - * / (),. ‘ :!“% & ;< > ? $5其他字符(只可以出现在字符常量、字符串编辑描述符、注释和输入输出记录中)3.基本数据类型1 整型KIND值可以为1、2、4类型说明关键字:INTEGERKIND值决定数据的范围。
对于整数没有误差。
I=3/2=1;I=1/2=0INTEGER(KIND=4)::AINTEGER*4::AINTEGER(4)::A2 实型KIND值可以为4(单精度7位有效数字)、8(双精度15~17位有效数字)类型说明关键字:REAL小数表示形式、指数表示形式(规格化的指数形式)错误表示形式:E34、.E34、0.14E2.38开3次方:8.0**(1.0/3.0)3 复型KIND值为4、8是实数的有序对,将两个实数中间用逗号分隔,然后放在一对括号中类型说明关键字:COMPLEX复数的运算:+、—、*、/4 字符型KIND值为国家语言种类由一对单撇号或一对双撇号之间的字符序列组成。
FORTRAN90程序设计教学设计
FORTRAN90程序设计教学设计背景FORTRAN90是科学计算、数值计算等领域的重要程序设计语言,广泛应用于航空航天、天气预报、海洋预报、核能工程、计算机辅助工程设计等领域。
因此,FORTRAN90程序设计在高校计算机专业教学中非常重要。
如今,计算机产业的高速发展,新的编程语言和框架层出不穷,但是对于计算机专业学生而言,学好FORTRAN90有其必要性。
为了提高学生的编程能力,培养学生科学计算和数值计算能力,建构合适的教材和课程是非常关键的。
因此,本篇文档将从以下几个方面介绍FORTRAN90程序设计的教学设计。
教学目标通过本课程的学习,学生能够熟练掌握FORTRAN90程序设计的基本知识和技能,包括:1.FORTRAN90程序的基本结构、语法和数据类型;2.控制结构、函数和子程序的使用方法;3.数组、指针的应用;4.文件输入输出操作;5.计算机仿真和数据可视化。
课程内容课程内容将涵盖以下主题:第一部分:FORTRAN90程序设计基础1.环境搭建:安装devFortran、gfortran编译器;2.FORTRAN90程序的基本结构、语法和数据类型;3.数据输入输出:读写变量、格式化输入输出;4.运算符和表达式:算数运算符、逻辑运算符、位运算符;5.判断语句:if、if-else、switch-case;6.循环语句:while、for、do-while;7.函数和子程序设计:函数调用、函数返回、引用传递、局部变量;8.字符串的处理:字符数组、字符串输入输出、字符串比较、字符串操作函数;9.时间和日期函数的应用。
第二部分:FORTRAN90程序设计进阶1.数组的定义、初始化和操作:一维数组、二维数组、多维数组;2.文件操作:打开文件、读写文件、关闭文件;3.指针和动态内存分配:指针的定义、指针的基本操作、指针和数组、动态内存分配;4.高级数据结构的应用:链表、队列、栈、树;5.性能优化:算法的时间复杂度分析、常用算法的优化技巧、代码精简技巧;6.计算机仿真技术的应用:线性代数、微积分、概率统计等。
Fortran 90-70基本语法
2. 浮點數(real): 單精確度,雙精確度 單精確度: Real*4, 雙精確度: Real*8
單精確度 (32 bits): 1.18E-38~3.4E+38
Fortran 基本語法
Fortran 的資料型態
資料型態:Fortran所能夠在電腦的記憶當 中記憶文字.數值等等資料. Bit的觀念: 一個bit只能儲存一個0或是1, 組合8個bits,叫一個位元組,為電腦最小儲 存單位.
Fortran 基本語法
1. 整數(integer): 一種是長整數,一種是短整數.
雙精確度 (64 bits): 2.23E-308~1.79E+308 3. 複數(complex): Ex: a+bi 4. 字元(character):
Fortran 基本語法
5. 邏輯判斷(logical): Fortran的邏輯半段只能儲存兩種邏輯結果,就是 真(true)或假(false).
Fortran 基本語法
Fortran 的數學算式
Fortran數學算式的規則及方法都很直覺 化,和在紙上的四則運算是只有一點差別.
Fortran 基本語法
實例 - Fortran 77
Fortran 基本語法
實例 - Fortran 90
Fortran 基本語法
Fortran 90/77
第三章 Fortran 基本語法
寫作 Fortran 的格式
Fortran 77程式在版面上的規定
fortran90常见错误
fortran90常见错误1、运行fortran时出现forrt1:severe<59>:list-directed I/O syntax error,unit 1,file G:\1\1\meat.dat怎么办这是通道1 ,链接到文件meat.dat 的读写出错了。
这问题你得认真检查类似read( 1 , * ) 或write( 1 , * ) 这样的语句,错误原因挺多的。
比如二进制文件用了文本方式读取,比如变量列表与文件不匹配。
问:另外forrt1:severe<161>:program exception -array bounds exceeded是怎么回事?回答:数组越界,也是很常见的错误。
比如real a(100)如果你使用了a(101) 就会越界,因为a 数组只有100 个元素。
2、fortran运行提示error M6201:math-**,现将代码贴出,求高手帮忙看看,急求解答!我不能确定你的错误是怎么引起的。
可能咱们的编译器不同。
你的代码在我这里的问题是:虚参和实参精度不同。
在程序中,你定义了部分real*8,但是对应的虚参和返回值却定义为real。
比如主程序里的z1(双精度),传入函数g里面的x却定义为单精度。
主程序Do 死循环了。
z2_jiashe 和 z2_suan 每一次循环都没有发生改变,于是永远跳不出循环。
我给你的建议是:同一个程序,统一使用real*8 或real*4,尽量不要混用,除非你很自信能理清他们的关系。
检查Do 循环,尤其是z2_jiashe 和z2_suan,是否应该每次循环不同?fortran_排除错误(2012-04-20 23:22:44)安装好VISUAL FORTRAN后1、运行Developer studio即可开始编译FORTRAN程序2、选择File菜单中的New选项3、在弹出的对话框选择projects标签,其他标签不用管,projects格式选用Fortran console application;在project name 里命名(最好英文名),点击“ok ”4、接下来画面中,选择“an empty project”,点击“finish”5、接下来画面点击“ok”6、再选择一次File菜单中的new7、对话框选用files标签,选择Fortran free format source file ,并在file里命名8、点击“ok”数Source Files 放源文件(.c、.cpp)程序的实现代码全放在这里Header Files 放头文件(.h)声明放在这里Resource Files 资源文件(.rc)放图标、图片、菜单、文字之类的,主要用来做界面的东东一般都放这里External Dependencies 除上三种以外的,程序编译时用到的文件全放这里fortran内部函数出错信息解释内部函数出错信息解释[sourcefile(line)]run-time error M62××MATH错误号函数级数学错误信息M6201 functionnames:DOMAIN error函数的自变量超出了约定的取值域,例如sqrt(-1)M6202 functionname:SING error无意义的变量。
fortran90整型定义初始化
fortran90整型定义初始化摘要:1.Fortran90 简介2.Fortran90 整型定义3.Fortran90 整型初始化4.示例代码正文:1.Fortran90 简介Fortran90 是一种高级编程语言,主要用于数值计算和科学计算。
它是Fortran 语言的一个版本,于1990 年发布。
Fortran90 具有丰富的数学函数库和强大的数据处理能力,广泛应用于工程、科学和研究领域。
2.Fortran90 整型定义在Fortran90 中,整型是一种数据类型,用于表示整数。
整型数据类型的名称为integer,它可以是正数、负数或零。
Fortran90 中整型的大小为默认为整数位数,可以根据需要进行调整。
3.Fortran90 整型初始化在Fortran90 中,可以通过以下方式对整型变量进行初始化:(1)直接赋值:在声明变量后,通过等号=赋值。
例如:```integer :: a = 10```(2)使用赋值语句:通过使用赋值语句进行初始化。
例如:```integer :: bb = 20```(3)使用子程序或函数:通过调用子程序或函数进行初始化。
例如:```integer :: cc = init_value(10)```其中,init_value 为子程序或函数,用于初始化c 的值。
4.示例代码下面是一个简单的Fortran90 程序,演示了整型的定义和初始化:```fortranprogram mainimplicit noneinteger :: a, b, sum! 定义整型变量a 和binteger :: a = 10integer :: b = 20! 计算a 和b 的和sum = a + b! 输出结果print *, "The sum of a and b is:", sumend program main```以上就是Fortran90 整型定义和初始化的相关内容。
(完整版)FORTRAN90用法总结,推荐文档
(完整版)FORTRAN90用法总结,推荐文档FORTRAN90用法总结1、数据类型整型 INTEGER实型 REAL复型 COMPLEX字符型 CHARACTER逻辑型 LOGICAL2、特殊函数1>定值函数PARAMETER(变量列表) 或类型说明符,PARAMETER::变量列表2>IMPLICIT 类型说明符(字母表)类型定义函数(默认I-N规则,取消IMPLICIT NONE)3>** 乘方4>STOP[标号]终止执行5>PAUSE[标号]暂停程序6>字符串长度函数 LEN(String)、 LEN_TRIM(String)7>除去字符串尾部空格 TRIM(String)8>字符串位置函数 INDEX(String1,String2)9>字符串比较函数LGE(String1,String2)LGT(String1,String2)LLE(String1,String2)LLT(String1,String2)10>字符串空格首位调整ADJUSTL(String)、ADJUSTR(String)11>字符串、ASSII码互相转化函数①化为ASSII码 ICHAR(String)、IACHAR(String)②化为字符串CHAR(I)、ACHAR(I)12>.LT.(<) .LE.(<=) .EQ.(=) .NE.(/=) .GT.(>) .GE.(>=)13>.AND.与 .OR.或 .NOT.非 .EQV.等于 .NEQV.不等 .XOR.异或3、IF函数1> 单支IFIF(逻辑表达式) THEN块语句END IF2> 双支IFIF(逻辑表达式) THEN块语句1ELSE块语句2END IF3>多支IFIF(逻辑表达式1) THEN块语句1ELSE IF(逻辑表达式2) THEN块语句1...ELSE IF(逻辑表达式N) THEN块语句NELSE块语句N+1END IF4>逻辑IFIF(条件表达式)可执行语句5>算术IFIF(算术表达式)标号1,标号2,标号3 标号1 可执行语句1 标号2 可执行语句2标号3 可执行语句3 4、CASE块SELECT CASE(表达式) CASE(表达式1)块语句1...CASE(表达式N)块语句NCASE DEFAULT默认块语句END SELSCT5、循环函数1>循环控制语句IF(e) EXIT 终止循环2>CYCLE跳出此次循环3>DO循环DO i=e1,e2[,e3]循环体END DO4>DO WHILE循环DO WHILE(逻辑表达式) 循环体END DO6、输入输出1>表控输入输出READ *,变量表PRINT *,输出表WRITE(*,*)输出表2>自定义输入输出标号 FORMAT(格式说明)3>其他编辑符①nX 向右跳过n个字符②nH 输出字符串③/ 换行④\ 连接7、数组1>说明数组DIMENSION 数组名类型说明,DIMENSION(维说明)::数组名2>数组赋初值DA TA 数组名/....../,数组名/....../,...3>动态数组①声明[类型],DIMENSION(:[,:]...),ALLOCA TABLE::数组名[类型],ALLOCATABLE::数组名(:[,:]...)...②申请ALLOCATE(数组名(维说明))③释放DEALLOCATE(数组名)8、子程序1>子程序CONTAINS(内部子程序的标志(外部EXTERNAL))[类型说明] FUNCTION 函数名(虚参表)函数体END2>子例行程序SUBROUTINE 子例行程序名(虚参表)函数体END调用CALL 子例行程序名(实参表)3>递归调用RECURSIVE FUNCTION(SUBROUTINE)函数名(虚参表) RESULT(返回值) 函数体END9、结构体1>定义TYPE [,ACCESS[::]] 派生类名称(ACCESS=PRIV ATE(私有),PUBLIC(公有)) 分量表END TYPE 派生类名称2>类型定义TYPE(派生类名称)::结构体变量名3>结构体成员引用①结构体名%成员名②结构体名.成员名4>定义的同时赋值TYPE(派生数据类型名)::结构体变量名=派生数据类型名(成员初值表)5>结构体数组TYPE(派生数据类型名),DIMENSION(维说明符)::结构体数组名10、指针1>定义指针类型说明,POINTER::指针变量名...类型说明,TARGET::目标变量名...P=>A2>动态变量例:INTEGER,POINTER::PINTEGER SALLOCA TE(P)P=4S=PDEALLOCA TE(P)PRINT *,SEND3>指针数组变量定义类型说明,DIMENSION(:...:),POINTER::指针变量名ALLOCATE(X(20))DEALLOCA TE(X)4>定义结点TYPE NODEINTEGER V ALUETYPE(NOPE),POINTER::NEXTEND TYPE NODE5>定义头指针TYPE LISTPRIV ATETYPE(NODE),POINTER::ENDEND TYPE LIST6>对指针初始化(对头指针清空)SUBROUTINE SETUP(L) TYPE(LIST)LNULLIFY(L%END)END SUBROUTINE SETUP。
fortran90知识点整理
fortran90知识点整理Fortran90关于变量说明的新功能:1.在变量说明的同时,可以给变量赋初值。
INTEGER::I=5,J=126REAL::X=7.2,Z,W=774.22.在说明变量的同时也可说明其种别REAL(KIND=4)::X,Y 或REAL(4)::X,Y3.在说明变量的同时,还可说明变量的属性INTEGER,PARAMETER::I=5,J=123Ps :PARAMETER 属性(1)功能:⽤⼀个符号代表⼀个常量,称为符号常量(常数)(2)写法:Real,Parameter ::G=9.8 &&说明类型时赋值(3)位置:位于可执⾏语句之前REAL,DIMENSION(1:10)::A2.3.6 派⽣数据类型根据需要⽽由基本数据类型定义新的数据类型。
在⼀个派⽣类型中可包含多个基本类型。
如:TYPE STUDENT (定义开始)CHARACTER(LEN=20)::DEPARTMENTCHARACTER(LEN=10)::CLASSCHARACTER(LEN=15)::NAMEINTEGER::NUMBER (成员定义)END TYPE STUDENT (定义结束)派⽣类型变量的定义:TYPE(STUDENT)::PERSON变量的赋值:PERSON=(”COMPUTER”,”92_2”,”LI LIN”,21)成员的表⽰:PERSON%CLASS=“92_2”PERSON%NAME=“LI LIN”主程序其他限制主程序的可执⾏部分不能包含有RETURN语句或者ENTRY语句。
程序名对可执⾏程序是全局的,⽽且不得于该可执⾏程序中的任何其它程序单元名、外部过程名或公⽤块名相同,也不得于主程序内的任何局部名相同。
在主程序的作⽤范围内的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序内SAVE语句不起作⽤。
主程序内的任何内部过程的定义必须跟在CONTAINS语句之后。
Fortran90-数据类型
双(单)引号不属于字符串
2024/10/23
FORTRAN90
21
2.当字符中出现单(双)引号时,有两种表 示方法。
1)当字符为"时,用´将字符串括起; 当字符为´时,用"将字符串括起。
2)将单(双)引号重复一次。
例: fh"dl ´fh"dl´ "fh""dl"
I’m a teacher "I´m a teacher" ´I´´m a teacher´
2024/10/23
FORTRAN90
7
2024/10/23
FORTRAN90
8
5.4 复型数据
一、复型常量的形式:
(实型数1,实型数2)
低 级
表示:实型数1+实型数2*I
向 高
级
复型数据的类别类型
转
换
1.默认复型:当省略类别类型参数时, 的
则称此复型数据为默认复型。
原 则
2.实部及虚部类型不同时,复型数据的
FORTRAN90
33
比较字符串大小
• ‘that’ ‘this’ • ‘FORTRAN’ ‘FORTRAN90’ • ‘FORTRAN’ ‘FORTRAN ’ • ‘FORTRAN 90’ ‘FORTRAN90’ • ‘FORTRAN90’ ‘fortran90’
先化为双精度型, 化为双精度型,
再赋值
赋值
直接赋值
将实部扩展为 双精度型,赋
值
复型
化为实型,加虚 部0,变成复型,
再赋值
舍去多余有效数字,
实部赋值,虚部 化为实型,再赋值,
赋0
虚部赋0
Fortran的主要版本与差别
、Fortran 的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77 和Fortr an90。
Fortran 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" 以外的任何字符Fortran 90 :自由格式(free format ),扩展名:.f90(1)以"!" 引导注释;(2)每行可132 字符,行代码放在每行最前面;(3)以&续行,放在该行末或下行初。
以下都是讨论Fortran 90 。
3、Fortran的一些特点,和C的一些不同其实很多,在下面涉及具体方面时可以看到。
这里只是大致提一些。
(1)不分大小写(2)每句末尾不必要写分号(3)程序代码命令间的空格没有意义(4)不像C,Fortran 不使用{ }(5)数据类型多出了复数和逻辑判断类型。
比如复数类型complex :: a ! 声明复数的方法。
复数显然方便了科学计算,满足了工程方面的需求a=(1.0,2.0) ! a=1+i(6)多出了乘幂运算(** )。
乘幂除了整数还可以是实数形式。
如开方,方a=4.0**0.5 ,a=8.0**(1.0/3.0)。
(7)数组有一些整体操作的功能;可以方便的对部分元素进行操作(8)有些情况下可以声明大小待定的数组,很实用的功能4、Fortran 的基本程序结构先看一看所谓的"Hello Fortran" 程序。
FORTRAN90基础知识
程序单元由数据声明和相关操作(语句)构成,必须用END语句结束。
area=length*width area=length*width price=4000*area price=4000*area PRINT*,’总地价:’,price,’元’ PRINT*,’总地价:’,price,’元’ END END
数据类型第三章fortran90基础知识佛山科学技术学院电子与信息工程学院ascii码佛山科学技术学院电子与信息工程学院佛山科学技术学院电子与信息工程学院定点整数范围整数位数有符号整数范围8位一个字节12812716位二个字节327683276732位三个字节符号位符号位00表示表示11表示表示数据位数据位佛山科学技术学院电子与信息工程学院实数浮点数的表示实数浮点数的表示任何一个十进制实数都可以有以下不同的表示形式
第三章
FORTRAN 90基础知识
苏州科技大学计算中心
03/04第二学期
3.2 名称
概述 语法描述 作用域 示例 说明: ① 名称只能由英文字母、数字、下划线符“_”和美元符 号“$”组成。
3.2 名称/语法描述 3.2 名称/语法描述
<名称>→<英文字母>{<英文字母>∣<数字>∣“_”∣“$”}
第三章 FORTRAN90基础知识
1. 2. 3. 4. 5. 6. 7. 8. 9. 字符集 名称 关键字 程序单元 语句 书写格式 数据类型 兼容性 习题三
9
《FORTRAN90程序设计》课
苏州科技大学计算中心
03/04第二学期
3.1 字符集
概述 字符集 说明 FORTRAN 90源程序是一个符合FORTRAN 90词法、语法和 语义规定的特殊文本,它由FORTRAN 90字符集规定的字符按 照词法、语法和语义规定进行描述。
FORTRAN 90 程序编程规范
FORTRAN 90 程序编程规范Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。
使编出的程序更易懂、易于维护。
1 语言选择数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。
选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。
Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。
2 Fortran 90 的新特性2.1.1 建议使用的Fortran 90 新特性建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。
尽量使用数组下标三元组,这样可优化并减少所需的代码行数。
为提高可读性,要在括号内表明数组的维数,例如:1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:)2dArray(: , :) = scalar * Another2dArray(: , :)当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。
例如:2dArray(: , 2:len2) = scalar *( &Another2dArray(:, 1:len2 -1) &- Another2dArray(:, 2:len2) &)对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。
[理学]Visual Fortran90第7章_OK
使用自定格式: READ '(5I4)',A
S=S+A(I)
ENDDO PRINT*,A PRINT*,S
使用自定格式: PRINT '(5I4)',A
END
16
方法二、使用数组元素输入输出
例:
DO I=1,15 READ*,A(I) S=S+A(I)
ENDDO
或:READ *,A(1),A(5),A(12)
数组说明的一般格式:
个别优于统一
类 型 [([ 长 度 说 明 ],[ 种 别 说 明 ])],Dimension(d1:d2)[, 其 它
属性说明]::数组名1[=初值][,数组名2[=初值]……]
9
数组说明的基本概念
例:INTEGER,DIMENSION(1:5)::A,B(-1:2),C REAL(4),DIMENSION(1:3,1:4)::D=0
31
7.3.1 二维数组的概念P161
二维数组的说明(增加一对维界):
e2:终止下标值 ,缺省为上界d2 e3:步长值,缺省间隔为1
19
例:
INTEGER,DIMENSION(6:50)::A
则下列片段含有的元素为哪些?
A(10:30:1) A(:20:5) A(8::10)
A(10)至A(30)中连续的21个 元素
表示A(6)、A(11)和A(16)
表示A(8)、A(18)、A(28)、 A(38)和A(48)
符。操作数可以是常数、变量,也可以是简单的内在 函数或数组元素,但表达式的值一定是整数。
d1 <= 下标表达式的值 <= d2 例:A(3*2),A(ABS(-3)),A(5+I),A(A(I)) 6、数组元素的下标取值必须在相应的维界偶范围内
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PS
PS wmf, gsview & ghostscript
绘图软件 Windows: wingraf, winsurfer, grads, matlab, photoshop, etc UNIX/Linux: gnuplot, grads, matlab, IBM-opendx, NCAR, GMT, Vis5D, xv, xfig Gimp, etc 人机交互, 人机非交互
wmf
N 38
Bohai Sea
D E
37
C A
36
B
35
Yellow Sea
A: B: C: D: E:
121
Weifang area Rizhao area Qingdao area Yantai area Weihai area
122 E
118
119
120
N 37.0
36.8
36.6
wmf
几个例子讲解
并行运算的形式: SMP, DMP,DSMP
多CPU 服务器
多节点 单CPU 服务器
多节点 多CPU 服务器
网 络 我们希望 低延迟和高带宽!
以太网, Giganet,Myrinet, Infiniband, …, …
TCP/IP 占用大量 CPU资源
offload engine 占用少量 CPU资源
介绍一个商业软件
• • SDI converter, SDI Viewer, SDI_editor ps cgm, ps emf 修改 ps, cgm图片 http://222.195.136.24/ 临时下载区 --- SDI_CGM
介绍一个shareware软件($40)
36.4
36.2
d c
y Ba u ho z i ao J
Mount Lao
e
f
a: b: c: d: e: f:
120.6
36.0
35.8
a
119.6 119.8
b
Yellow Sea
35.6 120.0 120.2 120.4
241 mm 213 mm 222 mm 207 mm 208 mm 387 mm
我自己的 服务器 (8个CPU)
< real < user < sys real user sys
0m:3.93s 0m:30.97s 0m:000s 0m:24.09s 0m:24.09s 0m:000s
参考书目
《并行算法的设计与分析》 陈国良 编著 高等教育出版社
第二部分 图形化
两类图片格式 矢量图(点、线) pdf ps wmf emf gm cgm 位图(象素点) gif png jpg bmp
许多个I/O外设 无延迟、无拥塞地 同时向 处理器发出数据请求
超高速网络,比宽带快1万倍 它与欧洲核子研究中心的 大型强子对撞机(LHC)工程息息相关。
日本:地球模拟器
性能相当于20万台个人电脑 在试运行中,将地表分割为大约10公里见方的区域,模拟 大气及海流的变化情况。模拟地球上1天的大气流动,需 用40分钟。
学院的计算机集群 222.195.136.89
MPI PVM OpenMP
并行虚拟机(PVM) 消息传递接口(MPI) 线程(Thread)
使用处理器间的消息传递(MPI)
使用操作系统的线程(Thread)
线程的最大特点是,线程间共享数据。 因此它在SMP系统上工作的更好。
PROGRAM test SUBROUTINE add(ii, result) ! ! implicit none implicit none ! ! integer :: i, j, k, num integer,intent(in) :: ii real(kind=8) :: sum, result integer :: i, j, k integer,dimension(100) :: gg real(kind=8) :: sum real(kind=8),dimension(100) :: score real(kind=8),intent(out) :: result ! ! do i = 1, 100 ! gg(i) = i sum = 0. enddo do i = 1, 10000 ! do j = 1, 10000 ! --- test sum = sum + ii !$OMP PARALLEL DO & enddo !$OMP PRIVATE ( i ) shared(result) enddo LOOP: & ! DO i = 1 , 100 result = sum CALL add(gg(i), result) ! score(i) = result END SUBROUTINE add END DO LOOP ! write(*,*) (score(i),i=1,100) ! END PROGRAM test
如何编译:
pgf90 –mp test.f90 –o test.exe
学院古老的 SGI机器 (4个CPU)
< real < user < sys real user sys
1m:26.43s 5m:41.93s 0.20s 5m:40.16s 5m:39.17s 0.05s
如何编译:
pgf90 –mp test.f90 –o test.exe
GrADS的下载与安装 (Linux/UNIX System)
下载地址:/grads/downloads.html里 的相应版本的full/binary 压缩包,一般使用后者。 还有 ftp:///grid Analysis and Display System
免费 (freeware)
window 版本 Linux/UNIX 版本
GrADS的下载与安装 (Windows System)
下载地址:/grads/downloads.html里 的xwin32 (MS Windows),不要下载win32e! 或者:ftp:///grads/1.8/grads-1.8sl11xwin32.exe 请选择默认路径进行安装,安装完毕之后千万不要忘记 设置系统环境变量! 我的电脑-->属性-->高级-->环境变量-->系统变量-->Path-> 编辑,譬如原来为: %SystemRoot%\system32;%SystemRoot%;%SystemRoot %\System32\Wbem;C:\KAV6 请在最后添加 ;C:\Program Files\PCGrADS\win32 (最 前面的分号表示与以前的内容隔开)
• 利用gsview打开ps图片,将它另存为eps 图片
• 在word文档中插入 (图片—来自文件)
Vis5D: 3D绘图
cloud-water=0.01kg/kg
eth=345K
Data Explorer 3D绘图
NCAR-Graphics 1D、2D绘图
GrADS 1D、2D绘图
设置环境变量 /etc/profile
GrADS 格点绘图
GrADS 站点绘图
站点绘图 3步曲
1 处理站点数据 a) 生成站点数据sta.dat b) 写sta.ctl c) 生成sta.map文件 2 给定背景格点场及其描述文件 bg.dat, bg.ctl
3 开始绘图(或直接写sta.gs文件)
• /importps/
• importps 安装之后,允许在word中 直接插入ps图片
但是,如果你的图片是eps (enhanced PS), 可以直接插入word文档。
插入PS图片的另一种途径
• 安装 免费软件 ghostscript,gsview
内容
•第1章 (介绍,字符操作)
•第2章(块结构,if, do, case)
•第3章(数组,动态数组) •第5章(派生类型、模块) •第6章(输入与输出控制) 第7章(并行运算、绘图)
•第4章(过程:子程序、函数)
第一部分 并行运算
为什么要并行运 算
?
复杂的大气运动
机器硬件决定并行运算的形式