fortran高级技巧.docx
Fortran95/2003高级技巧的整理,主要依据Stephen J. Chapman著,刘瑾等译的《Fortran95/2003程序设计》。选择的都是平常少用又重要的高级特性。粗体表示重点或需注意的地方,蓝色表示Fortran2003才有的新特性。
1. 隐式DO循环
隐式DO循环可以用在数组初始化或读写文件中。格式为
(arg1, arg2, ..., index = istart, iend, incr)
可见,隐式DO循环可以一次返回多个值(arg1, arg2, ...)。以此可以产生复杂的模式。例如下面的语句
integer, dimension(25) :: array = (/ ((0, i = 1, 4), 5 * j, j = 1, 5) /)
初始化array中不能整除5的元素为0,其他元素为5的倍数。结果是
0, 0, 0, 0, 5, 0, 0, 0, 0, 10, 0, 0, 0, 0, 15, 0, 0, 0, 0, 20, 0, 0, 0, 0, 25
2. 静态变量
声明一个变量时如果附加save属性,则这个变量成为静态变量,其值一旦初始化后一直存在。也可以用单独的save语句来声明静态变量。
2.1 子程序中的静态变量
在子程序中声明的静态变量,其值在退出子程序后仍然保留,当下次调用子程序时,可以直接使用上次保留的值。例如
subroutine test(reset)
????logical, intent(in) :: reset
????integer, save :: cnt
????if (reset) then
????????cnt = 0
????else
????????cnt = cnt + 1
????endif
????write(*, *) cnt
end subroutine test
在主程序中调用它:
program main
implicit none
integer :: i
call test(.true.)
do i=1, 3
????call test(.false.)
end do
end program
程序的输出将是
0
1
2
3
因为上次调用test后变量cnt的值保留,下次调用时直接使用。
需要注意的是,在子程序中变量声明时直接初始化的变量隐含具有save属性。即
integer :: cnt = 0
等价于
integer, save :: cnt = 0
这种变量的初始化操作只会进行一次,而不是每次进入子程序都初始化!所以下面的程序
subroutine test()
????integer :: cnt = 0
????
????write(*, *) cnt
????cnt = cnt + 1
end subroutine test
program main
implicit none
integer :: i?
do i = 1, 3
????call test
end do
end program
结果为
1
2
3
2.2 模块中的静态变量
在模块中用save命令,则其后定义的变量均成为静态变量。所有引用该模块的程序都可以使用并改变静态变量的值,在其他模块中此改变继续有效。事实上,这种静态变量相当于其他语言中的全局变量。
3. where结构
where结构的作用是对于给定逻辑数组中每个真值,对目的数组的相应元素进行某中操作。例如
where (a 0)
????b = 1
elsewhere
????b = 0
end where
相当于
b(a0) = 1
b(a=0) = 0
但where结构运行效率更高。
使用where结构的限制是对于每个元素的操作都不应该与其他元素有关。
4. forall结构
forall结构严格来讲不是一种循环结构,而是使编译器能够对每个数组元素启动一个单独的进程来处理,从而能够实现并行运算。例如
forall (i = 1 : n, j = 1 : n, i j)
????a(i, j) = sqrt(a(i, j))
end forall
使得编译器对于a中ij的每个元素启动一个单独的进程求其平方根从而提高效率。对于大型计算机或有多个CPU的计算机,当数组很大时,能够显著地提高效率。
因为每个元素独立运算,forall结构与where类似,其中不应该涉及与其他元素有关的操作。如果forall结构中包括了不止一条语句,那么处理机会等第一条语句的每个进程都完成后才进行下一条操作。
另外,forall结构中调用的函数或过程必须是纯的(见第6条)。
5. 动态数组
5.1 动态数组的分配和赋值
动态数组声明时具有allocatable属性,在需要的时候用allocate语句分配空间,并用dea
您可能关注的文档
- 01 面向对象概述.ppt
- chap08_补充练习_指针.ppt
- chapter 4 自由基共聚.ppt
- 二级C上机考试复习资料.doc
- chapter 5 聚合方法.ppt
- chapter extra 活性自由基聚合.ppt
- 01民间文学绪论1.ppt
- 02 Object类.ppt
- 02 Power系统软件概览.ppt
- CMA_Essay_部分真题题型.doc
- CISG视阈下宽限期制度:理论、实践与中国应对策略.docx
- 脂氧素A4对脂多糖诱导人脐静脉内皮细胞通透性的调控机制探究.docx
- 从革命烽火到改革浪潮:毛泽东与邓小平新闻思想的传承与变奏.docx
- 探寻城市管治新模式:理论、实践与创新路径.docx
- 多维视角下电力上市公司绩效综合评价体系构建与实证研究.docx
- 电力系统单线图自动成图技术:原理、应用与展望.docx
- 多维视角下中国A股内在价值评估方法的深度剖析与实践探索.docx
- Sm³⁺掺杂LDPE-Na₂SO₄复合材料:结构剖析与发光性能洞察.docx
- 基于程序结构的程序主变元精准分析与确定方法探究.docx
- 即时制游戏中基于Tile的寻路与碰撞系统:技术、实现与优化.docx
原创力文档

文档评论(0)