Fortran讲义 第六章
Fortran6

6.2
格式输入输出语句
LOGO
u 是设备号,用于表明具体使用的输入设备。u 是设备号, 用于表明具体使用的输入设备。 可以是一个无符号整常量, 可以是一个无符号整常量 , 也可以是一个整型 变量或整型表达式,还可以是“ 变量或整型表达式 , 还可以是 “ * ” 。 “ * ” 表 示有计算机系统预先约定的外部设备, 示有计算机系统预先约定的外部设备 , 一般为 键盘。 键盘。 输入项指定了输入的具体内容。 输入项指定了输入的具体内容 。 输入项可以是 变量,可以是隐含do循环, do循环 变量 , 可以是隐含 do 循环 , 不允许是常量或表 达式。 达式。
write(*,10) a,b format(1x,E12.4, 10 format(1x,E12.4,E13.2) .80E□ □ □.1284E+03 □ □ □ □ □ -.80E-03 A:128.433;B: -0.0008 128.433;
输入: 输入:与F编辑符完全相同。 编辑符完全相同。 输出:采用规格化的指数形式, 输出:采用规格化的指数形式,即数字部分小数前面 小数点后面第一位为非0 为0,小数点后面第一位为非0数字,指数部分占四列 指数符号及两位指数) (E、指数符号及两位指数)。若输出项数字部分的小 数位数多于d 保留d 小于d 在右边补0 数位数多于d位,保留d位,小于d位,在右边补0。若 输出项实际的位数小于w 左补空格,否则输出w 输出项实际的位数小于w,左补空格,否则输出w个*。
6.4
常用的编辑描述符
LOGO
F型输出规则: 输出规则: 规则
把输出项的值换成字段宽度为w的小数形式输出, 把输出项的值换成字段宽度为w的小数形式输出, 小数部分占 小数点1 小数部分占d位,小数点1位。 若输出项小数部分实际位数小于d,小数部分低位 输出项小数部分实际位数小于 小数部分实际位数小于d 补0;否则从d+1位四舍五入,保留d位。 否则从d+1位四舍五入,保留d d+ 若输出项实际长度小于w 则在左侧用空格补足。 若输出项实际长度小于w,则在左侧用空格补足。 否则输出w 说明w定义太小。 否则输出w个*,说明w定义太小。
FORTRAN知识点总结

F O R T R A N第2章FORTRAN90基础知识:程序单元的概念:fortran90程序是一种分块形式的程序,整个程序由若干程序单元块组成。
每个程序只有一个主程序单元。
各单元体的程序体形式上相同。
程序单元可以是主程序、子程序(外部过程或内部过程)、模块MODULE (供其他程序单元引用即把该程序单元内的全部语句复制到程序单元中)或块数据程序单元BLOCK 。
语言元素:指在程序设计中用到的基本成分,如字符集、常量、变量、记号(标号、关键字、名字、常数、运算符和定界符)以及其他的基本结构等。
字符集:英文字母、阿拉伯数字、下划线、21个特殊字符($和?没有规定用法)。
数据结构:整型INTEGER (34-2下划线后面是种别参数),n 位字长的计算机的数据表示范围一般为12~211-+---n n ,种别参数由内在询问函数KIND 送回,种别值提供的最小范围由内在函数SELECTED-INT-KIND 送回,表示十进制幂的范围由内在函数RANGE 送回;实型REAL ,小数形式和指数形式;复型COMPLEX (种别类型参数值取实部与虚部中较大者);字符型CHARACTER,由一对单撇号或双撇号之间的字符序列组成;逻辑型LOGICAL。
派生数据类型TYPE;数组INTEGER,DIMENSION(1,50)::A,可直接对数组元素进行运算如3*A,SQRT(A);字符子串,在字符串CHARACTER(LEN=80)::ROW中,ROW(1:3)就表示字符串ROW中第1到第3个元素组成的子串。
变量名的命名规则:不能超过31个字符;组成成分是字母、数字、下划线;第一个字符必须是字母。
第3章基本语句:类型说明语句:类型说明(种别说明),属性说明::变量名表尽量避免把两个实数作相等或不相等的比较。
淘汰隐式说明IMPLICIT NONE种别说明:种别参数即对可移植数据精度和范围进行选择的机制KIND(X) 返回变元X的种别参数值SELECTED-REAL-KIND(n,m) 产生一个种别值,它表示某一精度和范围。
fortran语言教程第6章

第6章数组应用6.1 数组与数组元素数组是由任何一种简单数据类型按照一定的组织规则构造出来的数据类型,是有序数据的集合。
数组中可以包含很多个同类型的变量,我们把这些变量叫做“数组元素”或“数组分量”或“下标变量”。
在机器中数组占用一片连续的存贮单元,每个单元都用同样的名字(即数组名)但编号不同。
数组的命名方式与简单(基本)变量命名方式相同。
假设有数组A,占据4个存储单元,元素在内存中的排列可形象表示出来:AA(1),A(2),A(3),A(4)A(1,1),A(1,2),A(2,1),A(2,2)每个单元的编号方式可以有多种,第一种用一个数字来编号称为一维数组,第二种用两个数字来编号称二维数组。
可以推广,用N个数字对数组的元素编号则称为N维数组。
数组使用之前一定要说明,事先告诉机器数组的类型,包含分量的个数,分量的编号方式等,以便机器为数组预留内存空间。
6.1.1数组的说明数组的说明应该包括以下几个方面的内容:•确定数组的名称;•确定数组元素的类型;•确定数组的结构(包括数组维数,每一维的取值范围等内容)。
说明语句的形式有:(1)类型说明语句:说明数组的类型和元素个数类型标识符数组名1 (维说明1[,维说明2,...])[,数组名2...](2)DIMENSION语句:只说明数组元素个数DIMENSION数组名1 (维说明1[,维说明2,...])[,数组名2...]其中“维说明”的形式:维下界∶维上界(或下标下界∶下标上界)例如:REAL A(1:10),B(80:90),C(-5:4),NUM1(1:2,1:5)INTEGER D(0:1,0:4),NUM2(2:5)DIMENSION S(3:5), M(1:10)说明语句中的A,B,C,D,NUM1,NUM2等都是数组名,数组名不能与本程序单位中的其他任何标识符重复。
通过“维说明”可以确定数组维数,每一维的取值范围等内容。
同一维的上下界之间用冒号分开;括号中至少要有一个维说明,也可以有多个。
第六讲Fortran中的子程序讲义

§1
语句函数
就是用一条语句定义一个函数,比如:f ( x, y ) x 2 y x 2 2 y 2
就可以用Fortran的一条语句写出来:
f ( x, y ) x * *2 * y sqrt ( x * *2 y * *2)
2018/12/28 1
一、语句函数的格式
f ( x1 , x2 , x3 ,, xn ) e
其中:f 称为函数名,x1、x2、…、xn称为虚参,e是关于虚参 的一个有效表达式。
(1)语句函数名:其取名及数据类型与变量相同。
比如:
F(x,y)=x**2+y*y→定义了一个实型函数F NF(x,y)=x**2+y*y→则定义了一个整型函数NF
又比如:Double precision FF FF(x,y)=x**2+y**2→定义了一个双精度型函数FF 注意在同一程序单元中,语句函数名不能与某个变量同名。
二、函数子程序的调用
定义函数子程序的目的是为了调用,在 Fortran 中不仅主程 序可以调用函数子程序,而且函数子程序也可调用其它的函 数子程序,甚至调用本身(叫递归调用)。常把调用程序叫 主调程序单元,而被调用的函数子程序叫被调程序单元。 调用函数子程序的方法与调用内部函数及语句函数基本相同: (1)调用时应该用实参(可以是常量、变量、表达式等)代 替函数子程序中的虚参,实参和虚参的类型要相同;
2018/12/28
2
(2)语句函数的虚参---即语句函数的自变量
1、称其为“虚参”是因为其本身是没有值的,只有在函数被 调用时才用实际意义(叫实参)代替; 2、可以按照普通变量对待虚参,但是一个语句函数中虚参不 能同名,但不同语句函数中虚参可以同名,虚参也可以和程 序中的变量同名; 3、虚参的类型说明与变量的类型说明方法与规则相同,而且 对与虚参同名变量同时有效; 4、当存在多个虚参时,之间用“,”分隔,如果没有虚参则函 数名后的括号是不能省略的。 (3)语句函数表达式 给出函数与参数之间的对应关系,可由虚参(必须包含所有的 虚参)、常量、变量、数组、 Fortran 的内部函数及在其前面 说明了的语句函数。
fortran教程[技巧]
![fortran教程[技巧]](https://img.taocdn.com/s3/m/31be265dce84b9d528ea81c758f5f61fb73628ec.png)
前言FORTRAN90的新特性1、淘汰了所有转移语句,增加了新的控制结构,使程序结构化。
增加了结构块,模块及过程的调用灵活形式。
2、加强数组的算法功能。
提出超载概念与实现方法。
提高了文字处理功能。
3、更接近自然语言与公式演算。
允许在字符数据用选取不同种别。
特别:语句书写对列的要求放宽:一般一行写一条语句(也可也多个语句,用“;”分隔),没有标号区、续行区、正文区的区别。
一行最多为132列,可以在任何列处中断语句,中断处写一个“&”,随后在下一行任意列处继续。
一个语句最长不能超过2640个字符。
语句结尾不可有标号、符号。
注释以“!”开始,可以位于任何位置。
***以下只讨论与FORTRAN77不相同处。
第一章FORTRAN90的基本语句第一节类型说明语句1、变量名全长不得超过31个字符。
2、变量类型定义:INTEGER::X,YREAL::ACOMPLEX::B,C,D3、建议淘汰隐式说明,在程序说明部分一开始就写:IMPLICIT NONE向系统声明不使用隐式说明。
4、可以在变量说明时就置初值。
如:REAL::X=1.1,Y,Z=2.25、种别——决定变量的精度和所占内存单元数。
a.如:REAL(KIND=2)::X 说明变量X为REAL型,种别为2。
KIND是种别说明关键字。
如没有种别说明,则采用系统省缺值。
b.有关函数:KIND(X) 返回X的种别参数。
当X取常数0时,返回省缺种别参数。
如KI ND(0)、KIND(0.0)、KIND(.FALSE.)、KIND('A')分别返回整型、实型、逻辑型、字符型的省缺种别参数。
SELECTED_REAL_KIND(N,M) 返回种别参数,使之满足十进制有效位为N, 值范围在10**(-M)和10**M之间的实数。
SELECTED_INT_KIND(N,M) 与上类似,选择整型类别。
c.常数类别表示对数值型常数、逻辑型常数用后缀法,即在常数后加一下划线,再跟种别参数。
偏微分方程数值方法之Fortran讲义

ui,j = ui,j +
(43)
ri = (i + 0.5)hr , θj = jhθ 2
7
-- -- -- -- Q
2
2.1
Finite Element Method
1D Numerical Example
: Fem1D.rar A boundary problem, − d2 u =2 dx2 u(0) = 0 u′ (0) = 0.
i+1
r
+
(r, θ) ∈ D (r, -- -- Q
Figure 1: Cartesian
90 1.0 120 60
-0.005000 0.1206 0.2462 0.3719 0.4975 0.6231
5
-- -- -- -- Q
1.4
1.4.1
Poisson
Cartesian PoissonCartesian.rar ∂2u ∂2u + 2 = f (x, y ) (x, y ) ∈ D ∂t2 ∂y u(x, y ) = g (x, y ) = log (1 + x)2 + y 2 , (x, y ) ∈ ∂D SOR
0.8
0.6
150
30
0.7487 0.8744 1.000
0.4
0.2 180 0.2 0
0.4
0.6
210
330
0.8
1.0
240 270
300
Figure 2: Polar
SOR ω h2 θ r 1 ui+1j − ri+ 1 + ri− 1 uij + ri− 1 ui−1j 2 2 2 4 ri i+ 2 h2 r 2 + 2 (uij +1 − 2uij + uij −1) − h2 θ hr fij ri r ∈ [0, R0 ], θ ∈ [0, 2π ]
Fortran 第六讲

SUM (ARRAY,MASK) 计算ARRAY中MASK为真的元素的和。MASK为 可选的,如果不提供,计算数组中所有元素的和
TRANSPOSE(MATRIX) 将MATRIX转置后返回
更多的变换函数可以参考教材的附录A的数组函数 部分
这些函数都很有用,我们在以后的例程或习题会涉 及到一部分,请诸位养成查阅这一附录的习惯
说明: WHERE结构中的每个mask_expr是一个逻辑数组, 它应该确保和数组执行语句中处理的数组具有同 样的结构。 WHERE结构使得语句体1中的操作或操作集用于 mask_expr1为TRUE的所有数组元素上,语句体2 中则作用于mask_expr1为FALSE而mask_expr2为 TRUE的所有数组元素上,最后,语句体3作用于 mask_expr1和mask_expr2均为FALSE的所有数组 元素上
6.3 WHERE结构
6.1中,我们学习了如何操作部分数组 INTEGER :: a(10) a(3:5)=3 将a(3),a(4),a(5)赋值为3
如果我们要对满足某个条件的所有元素进行操作 WHERE (a<0) a=ABS(a) END WHERE 将a中所有小于0的元素取绝对值
一般形式 [name:] WHERE (mask_expr1) 数组操作语句体1 ELSEWHERE (mask_expr2) [name] 数组操作语句体2 ELSEWHERE [name] 数组操作语句体3 END WHERE [name]
动态分配一个二维数组 通过status返回分配状态 如果分配成功,status为0,否则不为0
总是使用STAT=status监视分配状态,以便准确知道 程序异常终止的原因
ALLOCATED()函数 ALLOCATED(array) 如果已经用ALLOCATE()给ARRAY分配了空间 那么函数返回值是.TRUE. 否则为.FALSE. 例: IF (ALLOCATED(array)) THEN array=1 ELSE WRITE(*,*) ‘Warning : Array not allocated!’ END IF
注册设备工程师考试FORTRAN 复习培训讲义

FORTRAN 复习复习分为三个部分:1、计算机基础知识——软件、硬件组成及功能、数制的转换2、Windows 操作系统——基本知识、系统启动、有关目录文件、磁盘及其他操作、网络功能3、计算机程序设计语言——FORTRAN语言程序结构与基本规定、数据、变量、数组、指针、赋值语句、输入输出语句、转移语句、条件语句、选择语句、循环语句、函数子程序(或称过程)、顺序文件、随机文件1-1计算机的分类与发展1946年美国宾西法尼亚大学与摩尔工程学院合作,创造了世界上第一台电子计算机ENICA。
它占地160平方米,重30吨,5000/秒加法运算,用了18000多只电子管。
从第一台计算机的诞生至今,共经历了以下几个阶段:第一代:电子管时代(1946——1957)采用电子管作为逻辑元件,应用:军事、科学计算。
第二代:晶体管时代(1958——1964)采用晶体管作为逻辑元件,应用:军事、尖端技术、气象、数据处理等。
第三代:中小规模集成电路计算机时代(1965——1971),采用中小规模集成电路作为逻辑元件,软件方面出现了操作系统以及结构化、模块化程序设计方法。
软硬件都向通用化、系列化、标准化的方向发展。
第四代:大规模和超大规模集成电路计算机时代(1972——今),在几个平方毫米大的硅片上集成了上亿个电子器件。
体积小、价格不断下降、应用广泛。
现代计算机的分类:巨型机、小巨型机、大型主机、小型机、工作站、个人计算机现代计算机发展的趋势:1、巨型化——指高速、大存储容量、万亿/秒计算速度2、微型化——微型机可渗透到仪表、家用电器、导弹弹头等中、小型机无法进入的领地。
3、多媒体化——集声音、图形、图像、文字等为一体,使人能以更接近自然方式与计算机交换信息。
4、网络化——把国家、地区、单位和个人计算机连成一体。
5、智能化——让计算机来模拟人的感觉、行为、思维过程的机理,使它具备视觉、听觉、语言、行为、思维、逻辑推理、学习、证明等能力,形成智能型计算机。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
子程序接 口 (Interface)
界面接口块可以放在主程序、 界面接口块可以放在主程序、外部子程序或模块中 界面接口块属于说明部分,在一个程序单元内, 界面接口块属于说明部分,在一个程序单元内,一般放 在变量说明之前( 在变量说明之前(implicit none 之后) 之后) 在一个程序单元内, 在一个程序单元内, 一个子程序只能有一次显式接口说 明。 因此 除非重载子程序名, 显式接口子程序( 标准子 因此除非重载子程序名 显式接口子程序( 除非重载子程序名, 程序、内部子程序、模块子程序) 程序、内部子程序、模块子程序)不能出现在接口块中
<前缀>→recursive | pure| elemental 前缀> pure| 调用: 调用: call <子例行程序名>[(<形参表>)] 子例行程序名>[( 形参表>
内部子程序 (internal procedure) procedure)
从属于主程序或外部子程序(host) 从属于主程序或外部子程序(host)
子程序接 口 (Interface)
exam_6_1、exam_6_5 、exam_6_11、exam_6_15
显式说明子程序接口的语句—— 显式说明子程序接口的语句—— 接口界面块
<接口界面块>→interface [<类属说明>] 接口界面块> [<类属说明 类属说明>] {<接口体 {<接口体>} 接口体>} {module procedure <模块子程序名> } 模块子程序名> end interface [<类属说明>] [<类属说明 类属说明>] <类属说明>→<generic name> | operator | assignment 类属说明>→<generic name> <接口体>:子程序去掉可执行语句、 entry、data、 接口体> 子程序去掉可执行语句、 entry、data、 format、 format、语句函数后剩下的部分
exam_6_5
子程序接 口 (Interface)
重载(overloading) 重载(overloading)
子程序重载( 子程序重载(generic name)实现多态功能 name)
exam_6_16
一个子程序名与若干个不同的子程序相关联, 一个子程序名与若干个不同的子程序相关联,调 用时根据参数类型选择相应的子程序。 用时根据参数类型选择相应的子程序。 操作符重载(只能用函数,至少一个形参是in) 操作符重载(只能用函数,至少一个形参是in) 重载已有操作符
exam_6_11 exam_6_12
Fortran95:不能作为形参,Fortran2003: Fortran95:不能作为形参,Fortran2003:可以作为形参
形参与实参 之间的关系
子程序作为形参
外部子程序 部分标准子程序 模块子程序
exam_6_13
exam_6_13
* (Alternate return)作为形参 return) (Fotran90, Fortran95 中作废) Fotran90, Fortran95 中作废)
Fortran 的子程 序
函数 function
标准函数
语句函数 内部函数
用户自定义函数 外部函数
子程序
模块函数
标准子例行程序 子例行程序 subroutine 内部子例行程序 用户自定义 子例行程序 外部子例行程序 模块子例行程序
Fortran 的子程 序
函数(function) 函数(function)
模块内的重复使用 包括内部函数和内部子例行程序 位于contains之后 end之前 位于contains之后,end之前 之后, 可以使用host程序中定义的变量 可以使用host程序中定义的变量 内部定义的变量如果和host 程序中定义的变量重名 内部定义的变量如果和 host程序中定义的变量重名 , 程序中定义的变量重名, 则覆盖掉host程序中的变量 则覆盖掉host程序中的变量 仅可被host程序和同一模块中的其它内部子程序调用 仅可被host程序和同一模块中的其它内部子程序调用
子程序接 口 (Interface)
编译器知道子程序的接口后才能检查子程序调 用过程的合法性, 用过程的合法性,或完成特定的编译工作
显式接口( 显式接口(explicit interface) interface) 编译器自动获得子程序的接口信息, 编译器自动获得子程序的接口信息,不需要显式说明 标准子程序、内部子程序、 标准子程序、内部子程序、模块子程序 隐式接口( 隐式接口(implicit interface) interface) 编译器不能自动获得子程序的接口信息, 编译器不能自动获得子程序的接口信息,需要显式说明 外部子程序、 外部子程序、形参子程序
exam_6_14
子程序接 口 (Interface)
接口是子程序和其它模块之间的界面,包括: 接口是子程序和其它模块之间的界面,包括:
子程序名及其属性(包括函数返回值) 子程序名及其属性(包括函数返回值)
形参名及其属性
类属标识符( 类属标识符(generic identifier),用于重载 identifier)
undesirable, undesirable,用假定形状的数组代替
exam_6_7, actcol.for exam_6_8 exam_6_9 exam_6_10
假定形状数组(assumed-shape) 假定形状数组(assumed-shape) 可分配数组( 可分配数组(allocatable array) array)
形参与实参 之间的关系
保留子程序中变量的值
save 和 data data不能给形参赋初值 data不能给形参赋初值 data只给变量赋一次初值 data只给变量赋一次初值 Visual Fortran 默认所有用data赋值的变量,以及 默认所有用data赋值的变量 赋值的变量, 内部变量都有save 属性 如果要去掉save 属性 内部变量都有 save属性 。 如果要去掉 save属性 , 应 属性。 属性, 该用automatic属性 该用automatic属性,但是这是非标准的 属性,
exam_6_3
语句函数 (statement function) function)
从属于主程序或外部子程序(host) 从属于主程序或外部子程序(host)
模块内的重复使用
exam_6_4
<函数名>(形参表)=<标量表达式> 函数名> 形参表) 标量表达式>
Fortran95中废除 Fortran95中废除,可用内部函数替代 中废除,
exam_6_5 exam_6_11 exam_6_1 exam_6_6
子程序接 口 (Interface)
调用子程序时出现下面情况: 调用子程序时出现下面情况: 使用了关键字 使用了类属标识符调用子程序(多态) 使用了类属标识符调用子程序(多态) 赋值号重载 操作符重载 要求子程序是pure的时候 要求子程序是pure的时候
子程序和其它程序模 块之间的数据交换方 式
公用区
子程序
全局变量
其它程序模块
形参与实参 之间的关系
形参( 形参(formal argument) argument) 虚参、哑参( 虚参、哑参(dummy argument) argument)
变量、子程序、 变量、子程序、*
属性:intent(in, out, inout), optional inout) 属性:intent(
newfinal
外部子程序 (external procedure) procedure)
外部函数
exam_6_1
[<前缀 [<前缀>] function <函数名>([<形参表>]) [result(<结果名>)] 前缀> 函数名 ([<形参表> result(<结果名 结果名> ... end [function <函数名>] 函数名 function <函数名>([<形参表>]) [result(<结果名>)] 函数名 ([<形参表> result(<结果名 结果名> <前缀> <函数名> 前缀> <函数 函数名 ... end [function <函数名>] 函数名 <前缀>→<类型说明> | recursive | pure| elemental 前缀>→<类型说明 类型说明> pure| 调用:直接用函数名 调用:
只需要得到一个计算结果时使用 例:f = reshape((/1:6/), (/2,3/)) reshape((/1 (/2
子例行程序(subroutine) 子例行程序(subroutine)
需要得到多个计算结果或需要执行其它操作时使用 例:call date_and_time ( date, time, zone, values )
标准 子程 序 标准函数 ISO/IEC 1539-1 1539-
标准子例行程序
外部子程序 (external procedure) procedure)
独立于主程序的程序模块
包括外部函数和外部子例行程序
存放的位置
一个文件包含多个子程序( 一个文件包含多个子程序 ( 可以放在主程 序文件中) 序文件中) 一个文件只包含一个子程序
第六章 子程序
子程序 的作用