fortran基础第11章
fortran

函数ASSOCIATED的一般形式为: ASSOCIATED ( P1 [,P2] )
其中,第一个参数P1为待检查的指针,第二个参数 为可选项。除下列情况外,函数的值都为假。 ⑴ P2缺省,如果P1指向某个目标变量,则函数值 为真。 ⑵ P2不缺省,且P2是一个目标变量,当P1指向P2, 则函数值为真。 ⑶ P2不缺省,且P2是一个指针变量,当P1与P2指 向同一个目标变量,则函数值为真。
指 针 赋 值 语 句 P1=>P2 的 作 用 是 断开P1与X的连接, 使P1指向Y。
12
11.1.5 指针变量的使用举例
【例11-1】 定义一个指针并指向目标,改 变目标值后打印指针与目标变 量的值。
13
PROGRAM EXAM1 IMPLICIT NONE INTEGER, TARGET :: R = 3 INTEGER, POINTER :: PR PR => R PRINT *, R, PR R = 2 * PR PRINT *, R, PR END PROGRAM EXAM1
【例11-7】动态变量的例子之三。
PROGRAM EXAM7 IMPLICIT NONE TYPE STUDENT_TYPE INTEGER :: NUM REAL :: SCORE TYPE (STUDENT_TYPE), POINTER :: NEXT END TYPE STUDENT_TYPE TYPE (STUDENT_TYPE), POINTER :: P_S1, P_S2 ALLOCATE (P_S1) ALLOCATE (P_S2) READ *, P_S1 % NUM, P_S1 % SCORE READ *, P_S2 % NUM, P_S2 % SCORE NULLIFY (P_S1 % NEXT) NULLIFY (P_S2 % NEXT) PRINT *, P_S1 %NUM, P_S1 % SCORE PRINT *, P_S2 %NUM, P_S2 % SCORE DEALLOCATE (P_S1) DEALLOCATE (P_S2) END PROGRAM EXAM7
Fluent 流固耦合基础教程

O 点处的位移和梁截面的转角可以通过有限元的形函数求得。
图9
9
图 10 给出了梁变形后其表面上流体网格节点的位置。两个端点处的流体网格没 有加以控制,而是交给 fluent 自动处理,这只是对当前这种支撑情况有效。对 于一般情况,如悬臂梁,则需要人工计算。
endif计算表面力计算表面力计算表面力计算表面力见见见62626262将数据传输到主节点将数据传输到主节点将数据传输到主节点将数据传输到主节点省略省略省略省略计算梁的响应计算梁的响应计算梁的响应计算梁的响应见见见63636363将数据传输到计算节点将数据传输到计算节点将数据传输到计算节点将数据传输到计算节点省略省略省略省略更新网格更新网格更新网格更新网格见见见6464646462626262力的计算力的计算力的计算力的计算梁表面所受到的激励分为法向力和切向力
图2 4. 流体模型 流体模型的建立是关键的一环,因为流体模型的好坏直接影响到所得解的合理性。建立好的
2
流体模型需要 利用流体力学知识对所处理的问题进行综合分析。根据流体的雷诺数和其它 特征建立合适的网格,选择合理的湍流模型和算法。我们希望流体模型能够尽量准确地捕 捉 到梁表面的力,因此准确的 near-wall 处理方法很重要。采用 wall function 还是精确地模拟 边界层,需要给出适当的理由。由于我们处理的是动力问题,希望模型对梁表面力的变化给 出准确的值。采用动态 k-epsilon 或者 k-omega 湍流模型计算所得的激励幅值明显偏小,这 是由于雷诺平均造成的。这里我们采用对流体动力特性捕捉比较好的大涡湍流模型(Large Eddy Simulation, LES)。LES 对 near-wall 处理方法要求比较高,需要边界上的第一层网格厚度 满足 y+ ~ 1。在 Gambit 里可以方便地建立边界层网格,达到以上要求。如何建立良好的网 格是个复杂的话题,这里且不涉及。
Fortran 程序基础

2021/7/1
26
数组操作
PROGRAM TEST IMPLICIT NONE ! 变量定义 REAL :: A1, A2,A3,A4,A5,B(5,5) READ(*, *)A1,A2,A3,A4,A5 ! 数组片断的引用 B(1,1:5) = A1 B(2,1:5) = A2 B(3,1:5) = A3 B(4,1:5) = A4 B(5,1:5) = A5
数组可用DIMENSION语句定义 DIMENSION runoff(365) Real runoff ※使用数组必须先定义
2021/7/1
25
数组操作
数组引用
(1)引用数组元素 数组名(下标),如 runoff(15),rain(3,5)
(2)引用全部数组 数组名,如: real B(10),A(10) B=A
2021/7/1
8
数据类型及I/0格式
变量的定义及类型说明:
(1)类型说明语句
integer year, month, day
real runoff
character*10 station
(2)隐含约定
I~N 规则
2021/7/1
9
数据类型及I/0格式
输入、输出语句
READ(设备号, 格式说明或格式说明语句标号) [变量列表] WRITE (设备号, 格式说明或格式说明语句标号) [变量列表]
其他程序控制语句 End Pause stop
2021/7/1
22
Fortran程序流程控制
实例分析
(1)1~100求和 (2)输入5个数,按大小排序
2021/7/1
23
数组操作
Fortran语言基础PPT学习教案

1.数值型常量及其类型 (1)整型常量
整型常量又称为整型常数或整数,包括正数、负 数和0。 例如:+5 -367 0 98
第9页/共65页
(2)实型常量
实型常量即实型常数或简称为实数。它有两种形式: ①小数形式:12.3 -3.5 100. .56 ② 指 数 形 式 : 5.35E5 表 示 5.35×105 , 2.66E-3 表 示 2.66×10-3
第10页/共65页
当单精度实数不足以表示一个数的大小或 精度时,可以用双精度实数表示,只是将 实数指数部分中的字母E改成字母D即可。 例如,6.85746304857D5, .3875479654765D+3等都是双精度实数。
第11页/共65页
(3)复型常量 复型常量即复型常数或简称为复数。 如:(1.0,1.0)表示复数1.0+1.0i,(2.1,-4.5) 表示复数2.1-4.5i,(-6.0,0) 表示复数-6.0。
字符串
.EQ.,.NE., ==,/=
两个操作数或者同时是任意数值 类型与任意种别参数的数值,或 者同时是具有相同种别参数的任 意长度的字符串
.GT.,.GE.,.LT.,.LE., >,>=,<,<=
两个操作数或者同时是除了复型 之外的任意数值类型与任意种别 参数的数值,或者同时是具有相 同种别参数的任意长度的字符串
end
第1页/共65页
2.1 字符集与保留字
1.字符集
FORTRAN规定允许使用的字符为:
英文字母
A-Z及a-z(大小写不区分)
阿拉伯数字
0-9
特殊符号 空格 = + - * ( ) ,. ’ : “ ! & ; < > $ ? _
第11章 Fortran概述

• 在第3章中,介绍了简单的输入输出操作(也称为 表控输入输出、直接列表输入输出)语句READ、 WRITE和PRINT。这些输入输出操作语句简单易学、 使用方便。但是如果想要使输入输出的数据更为 美观、易读易用或是想要实现一些特殊的效果, 这些简单输入输出语句就显得力不从心了。在本 章中,将介绍同高级输入输出相关的语句设置、 不同种类的格式编辑符等内容。通过本章的介绍, 就可以使程序在输入输出这方面显得更加专业。
11.2.3 READ语句引用格式说明语句
• 在从外部设备中输入时,语法形式如下: • READ(设备号, [FMT=]格式说明语句标号) [变量 列表] • 语句中,设备号表示要在其上输入数据的设备, 当设备号为星号“*”时,表示从默认的设备(一 般是键盘)输入;关键字段“FMT=”用来显示说 明其后所跟的标号为格式说明语句的标号,当 WRITE语句说明项中只含有一项时,“FMT=”可以 省略;语句中允许变量列表为空,此时READ语句 将等待输入,指导用户键入回车键。
•
ห้องสมุดไป่ตู้
•
11.4.4 D编辑符
• D编辑符适用于双精度数据的输出。其一般形式为: • Dw.d • D是英文单词“Double Precision”的首字母,表示“双精 度编辑符”。 • w仍然表示输出数据所占的字段宽度;d表示指数部分所占 的位数。具体的含义同E编辑符。 • 在使用方法上,D编辑符与E编辑符相似。只是把字母“E” 换成“D”,在数据输出时,指数部分的字母“E”用“D” 来代替。实际上,F编辑符也可用于双精度数据的输出,和 用于实型数据输出相似。但此时可能会由于不能确切估计 实际数据的大小而出现“大数印错,小数印丢”的情况。
11.2.4 第一个输入输出综合应用
fortran教程.ppt

N-S 图——结构化流程图 S=0
例2 用N-S图表示
N=1
S+1/N= S
N+1= N
直到N>100为止
打印 S 值
例1 用N-S图表示
N=0 T=0
输入 A A+T →T N+1 →N 直到N≥100 为止 打印 T
例3
L=1
N=1
S=1
SUM = 1
L+2 → L
-S → S
N+1 → N
SUM+S/L →SUM
(3)输入一个数给“收入变量”A
(4)将A和T的值相加,其和值放在变量T中 A+TT;
(5)使N的值加1,即N+1 N(N的值表示已累加数据的个数)
(6)若N﹤100,则返回(3)继续执行以后各步,否 则转到执行(7)
(7)打印出总和T的值
以上算法体现“迭代”的思想—计算机算法的最大特 点
例2 求 1
将高级语言程序(源程序)转换为机器语言程序(目标程序)
的工作由“编译程序”来完成。 编译
执行
高级语言程序
机器指令目标程序
计算结果
编译程序 (预先存如电脑)
裸机
用户源程序
操作系统
高级语言编译系统
计算机系统与操作系统关系示意图
§ 1-2 算法(Algorithm)与程序设计(Programming)
1. 近50年的丰富积累,资源不浪费,对原有程 序向下兼容。而C语言与Matlab才20多年
2. FORTRAN书写和语法要求严格,更适合于 严谨的科学计算。而C对数组不提供越界检查, 容易出错,而且不容易查出
3. FORTRAN 90~95可以直接对矩阵和复数进行 运算。而C语言则要用多重循环
fortran知识点总结

fortran知识点总结一、语法结构Fortran语言的语法结构遵循一套严格的规则。
下面是一些常见的语法结构:1. 程序单元:Fortran程序由一个或多个程序单元组成。
每个程序单元由一个或多个声明和执行语句组成。
2. 注释:在Fortran中,注释可以用来提高代码的可读性。
注释以感叹号(!)开头,直到行末为止。
3. 标识符:Fortran中的标识符由字母、数字和下划线组成,且区分大小写。
标识符用于表示变量、函数、子程序等。
4. 变量声明:在Fortran中,变量声明使用关键字“REAL”、“INTEGER”、“LOGICAL”等来指定变量的数据类型。
例如,REAL :: x 表示声明了一个实数类型的变量x。
5. 程序控制结构:Fortran提供了多种控制结构,包括顺序结构、条件结构和循环结构。
这些结构提供了程序的流程控制和逻辑控制。
6. 函数和子程序:Fortran支持函数和子程序的定义和调用。
函数和子程序可以帮助程序员组织和重用代码。
7. 模块和接口:Fortran中的模块和接口提供了一种组织代码的方式。
模块可以包含多个子程序和全局变量,接口可以用来定义子程序的接口。
二、数据类型在Fortran中,数据类型用于表示数据的类型和大小。
Fortran提供了多种数据类型,包括整数、实数、逻辑值、字符、复数等。
下面是一些常见的数据类型:1. 整数:整数类型用于表示整数值。
在Fortran中,整数类型包括“INTEGER”、“LOGICAL” 和“CHARACTER”类型。
2. 实数:实数类型用于表示实数值。
在Fortran中,实数类型包括“REAL”和“COMPLEX”类型。
REAL类型用于表示实数,COMPLEX类型用于表示复数。
3. 字符:字符类型用于表示字符值。
在Fortran中,字符类型使用CHARACTER关键字进行声明。
字符类型可以表示单个字符或者字符数组。
4. 数组:数组类型用于表示多个相同类型的数据。
Fortran教程第十一章 文件

(3)文件状态说明:
STATUS=status。status是一个字符串表达式,其值由 用户给出,可以是以下五种字符串之一: 可以是以下五种字符串之一: ·OLD:表示指定的文件是已经存在的老文件。 ·NEW:表示指定的文件尚不存在。 ·SCRATCH: 表示与单元号连接的文件为临时文件, 在关闭文件或程序中断时将自动删除。此状态不能 与说明项FILE=file共存,它只能用于由系统指定的 文件名,使该文件作为程序运行过程中的一个临时 性文件。 ·REPLACE: 表示替代在磁盘上和指定文件名同名 的文件。如果不存在这样的文件,则创建一个新文 件。 ·UNKNOWN: 表示由计算机来规定文件的状态。
(7)记录结束说明:
EOR=eor。eor为本程序单元中某条可执 行语句的标号。此说明项只能用于非推 进型的有格式顺序存取方式。当读到一 个记录结束标志时,转向执行用户指定 的这个标号其后的语句。
例11.3 按顺序存取方式在格式文件中写入三种不 同类型的数据。 CHARACTER*20 string NUMBER=123 VALUE=987.65 STRING="AN EXAMPLE" OPEN(8,FILE="FILE11-4.TXT") WRITE(8,100)number WRITE(8,200)value WRITE(8,300)string 100 FORMAT(I6) 200 FORMAT(F8.3) 300 FORMAT(A10) CLOSE(8) END
11.3 文件的读写
11.3.1 有格式顺序存取文件
READ ( [UNIT=] unit [,{ [FMT=]fmt|[NML=]nml }] [,ADVANCE=advance] [ , ERR=err] [ ,IOSTAT=iostat] [ , END=end] [ , EOR=eor] [ , SIZE=size] ) 输入项表 WRITE( [UNIT=]unit[,{[FMT=]fmt|[NML=]nml }] [,ADVANCE=advance] [ , ERR=err] [ , IOSTAT=iostat] ) 输出项表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如: REAL,POINTER::P1,P2 含义:说明了变量P1,P2是指向实型变量的 指针 INTEGER,POINTER::PA,PB,PC 含义:说明了变量PA,PB,PC都是指向整型 变量的指针 下面语句与上述语句是等价的: INTEGER::PA,PB,PC POINTER::PA,PB,PC
28
函数ASSOCIATED的一般形式为: ASSOCIATED ( P1 [,P2] )
其中,第一个参数P1为待检查的指针,第二个参数 为可选项。除下列情况外,函数的值都为假。 ⑴ P2缺省,如果P1指向某个目标变量,则函数值 为真。 ⑵ P2不缺省,且P2是一个目标变量,当P1指向P2, 则函数值为真。 ⑶ P2不缺省,且P2是一个指针变量,当P1与P2指 向同一个目标变量,则函数值为真。
31
11.2.6 悬空指针和无法访问的内存
⒈ 悬空指针
设P1和P2是两个同类型的指针变量,执行下列语 句后会导致悬空指针。 ALLOCATE(P2) P1=>P2 DEALLOCATE (P2)
⒉ 无名内存
设P1是一个指针变量,A是一个同类型的目标变 量,执行下列语句后会导致无名内存。 ALLOCATE(P1) P1=>A
24
11.2.4 动态变量例题
【例11-5】 动态变量的例子之一。 PROGRAM EXAM5 IMPLICIT NONE REAL, POINTER :: P ALLOCATE ( P ) P = 13 PRINT *, P DEALLOCATE ( P ) END PROGRAM EXAM5
25
16
结
1.
2. 3.
论
4.
指针赋值,就是建立指针变量和目 标变量之间的指向关系。 对于一个指针变量的访问,实际上 就是对其目标变量的访问; 可以有多个指针同时指向同一个目 标变量,但一个指针变量不可能同 时指向多个目标变量; 指针赋值可以改变当前的别名。
17
【例11-4】用指针的方法实现将任意两个整型数进行交换。 PROGRAM EXAM4 IMPLICIT NONE INTEGER,POINTER::PA,PB,PC INTEGER,TARGET::A,B,C READ *,A,B PA=>A;PB=>B PRINT *,A,B C=A PC=>C;PA=PB;PB=PC PRINT *,A,B END PROGRAM EXAM4
9
11.1.4 指针赋值语句
P1=>X;P2=>Y
X P1 P2 Y
10
11.1.4 指针赋值语句
2. 注意:
指向关系建立以后,使用 X和使 用它的指针 P1 的作用是相同的, 即X和P1具有同样的值。
11
11.1.4 指针赋值语句
3. 指针赋值语句与普通赋值语 句的区别:
当P1=>X;
P2=>Y 后,普通赋值语句 P1=P2相当于赋值 语句X=Y;
32
11.3 指针数组
指针数组定义的一般形式为: 数据类型,DIMENSION(:[,:]), POINTER::V
注意: 这里的数组V一定要定义为一个假定形状数组。 有了上面的说明,V可以指向任何一个一维数组,或 二维数组。例如有下列语句: REAL,DIMENSION(:),POINTER::P REAL,DIMENSION(5,6),TARGET:: ARR P=>ARR (4,:) 使P变成了数组ARR第四行的别名。如果对P执行赋 值语句:P= 1,就是将数组ARR的第四行全部设置 为1。当然,此处的目标数组ARR必须具有TARGET 属性。
18
11.2 指针的使用
一、指针的状态 二、NULLIFY语句 三、动态变量
19
11.2.1 指针的状态
程序中的指针都处于以下两种状态之一:
未关联状态,此时指针不指向任何对象
或指向空对象(指向空对象的指针也被 称作空指针)。 关联状态,此时指针已经指向某个已经 定义的目标对象。
20
11.2.2 NULLIFY语句
P1=>R;P2=>Q PRINT *,P1,P2,R,Q P1=P2 PRINT*,P1,P2,R,Q END
P1=>R;P2=>Q PRINT*,P1,P2,R,Q P1=>P2 PRINT *,P1,P2,R,Q END
15
11.1.5 指针变量的使用举例
【例11-3】 PROGRAM EXAM3
27
11.2.5 ASSOCIATED固有函数
固有函数ASSOCIATED是一个逻辑函数, 其作用是用来检查一个指针是否指向一 个目标或是否为另一个对象的别名。 在使用这个函数时,被操作的指针必须 是有定义的,就是说它必须是某个数据 对象的别名或是一个空指针。函数 ASSOCIATED指出指针到底处于上面两种 状态的哪一种,这也提供了检查一个指 针是否为空指针的途径。
第 11 章
指针与递归
1
11.1 指针的概念
11.1.1 数据结构的概念 数据结构,指的是数据的组 织形式,也就是若干个数据之间的 连接方式。
Байду номын сангаас
2
11.1.1 数据结构的概念
逻辑结构:
结点和结点之间的逻辑关系称为数据的逻
辑结构。
存储结构:
数据在计算机中的存储表示称为数据的存
储结构。
3
常见的几种数据结构
1.
数组
数组中的数据类型必须相同 数组的引用 结构灵活,可以根据要求定义 由派生结构定义一个节点,包含一 个指针。
4
2. 3.
派生结构
链表结构
11.1.2 指针变量的定义
存放地址的变量称为 指针变量,简称指针
回忆一下普通变量的 有关知识点
指针的定义方式为: 1. 类型,POINTER :: 变量名表 2. 类型 ::变量名表 POINTER ::变量名表
6
11.1.3 目标变量及其定义
指针变量所指的对象称为目标变量 目标变量的定义格式为: 类型,TARGET :: 变量名表
例如: REAL,TARGET::A,B 含义:说明变量A,B是实型目标变量 INTEGER,TARGET::X,Y,Z 含义:说明变量X,Y,Z是整型目标变量
7
11.1.4 指针赋值语句
23
11.2.3 动态变量
DEALLOCATE语句是ALLOCATE语句的逆向操作, 其作用是释放原本分配给某个指针变量的内存空间并 置空该指针。DEALLOCATE语句的一般形式为:
DEALLOCATE ( P [, STAT = 整型变量名] )
例如: DEALLOCATE (P1) 使指针P1脱离任何一个目标体并成为一个空指针。如 图11-16所示。 P1被释放后,任何需要有值的情况都不能再使用它, 但它还是可以出现在指针赋值语句的右边。如果另外 有指针指向P1,则其也将成为一个空指针。
26
使用动态变量时,需要小心,看下面的例子。
PROGRAM EXAM REAL, POINTER :: P1, P2, P3 ALLOCATE (P1) P1 = 5 P2 => P1 DEALLOCATE( P1) ALLOCATE(P3) P3=7 PRINT *, P2 DEALLOCATE(P3) END PROGRAM EXAM
【例11-7】动态变量的例子之三。
PROGRAM EXAM7 IMPLICIT NONE TYPE STUDENT_TYPE INTEGER :: NUM REAL :: SCORE TYPE (STUDENT_TYPE), POINTER :: NEXT END TYPE STUDENT_TYPE TYPE (STUDENT_TYPE), POINTER :: P_S1, P_S2 ALLOCATE (P_S1) ALLOCATE (P_S2) READ *, P_S1 % NUM, P_S1 % SCORE READ *, P_S2 % NUM, P_S2 % SCORE NULLIFY (P_S1 % NEXT) NULLIFY (P_S2 % NEXT) PRINT *, P_S1 %NUM, P_S1 % SCORE PRINT *, P_S2 %NUM, P_S2 % SCORE DEALLOCATE (P_S1) DEALLOCATE (P_S2) END PROGRAM EXAM7
1. 指针赋值语句的一般形式为:
指针变量=> 目标变量
如: P1=>A P2=>B
8
11.1.4 指针赋值语句
指针赋值语句的说明: 指针变量和目标变量应具有相同的数 据类型。 指针赋值语句的赋值号是‘ =>’ ,读 作“指向”。 它只能用于给指针变量赋指针值,使 指针变量与目标变量之间建立指向关 系。
30
例如下面的程序将输出逻辑值F PROGRAM TEST IMPLICIT NONE REAL,TARGET,DIMENSION (4)::A=(/1,2,3,4/) REAL, POINTER, DIMENSION (:) :: P, Q P => A (1 : 3) Q => A (2 : 4) PRINT *, ASSOCIATED (P, Q) END
指 针 赋 值 语 句 P1=>P2 的 作 用 是 断开 P1 与 X 的连接 , 使P1指向Y。
12
11.1.5 指针变量的使用举例
【例11-1】 定义一个指针并指向目标,改 变目标值后打印指针与目标变 量的值。
13
PROGRAM EXAM1 IMPLICIT NONE INTEGER, TARGET :: R = 3 INTEGER, POINTER :: PR PR => R PRINT *, R, PR R = 2 * PR PRINT *, R, PR END PROGRAM EXAM1