Fortran笔记,Module
参考:彭国伦:《Fortan 95程序设计》,2002年。第8章,第11章
结构
- Module中的变量
- Module中的自定义类型
- Module中的函数
- Public, Private
- Use
使用场景:Module可以用来封装程序模块,通常用来把程序中,具备相关功能的函数及变量封装在一起(在Fortran 90中新加入的)
基本语法:
module module_nameimplicit none! declaration of variables
... ...end module [module_name]
1. Module中的变量
按之前的介绍,全局变量用COMMON实现。详见:http://t.csdn.cn/AsrUe
通过Module也可实现全局变量,
方法一:使用COMMON
方法二:在Module中定义的变量通过SAVE属性修饰
module globalimplicit none! 全局变量的方式1:commmon修饰integer :: global_acommon global_a! 全局变量的方式2:save属性integer,save :: global_b! ?全局变量(使用ivf编译器),其他编译器可能为局部变量integer :: global_c
end module globalprogram module_variableuse globalimplicit none! Variables! Body of Program! global_x are variable in module globalwrite(*, *) global_a, global_b, global_ccall module_f()write(*, *) global_a, global_b, global_cstop
end program module_variablesubroutine module_f()use globalimplicit noneglobal_a = 111global_b = 222global_c = 333
end subroutine module_f
输出结果为:
0 0 0111 222 333
尽管不同的编译器对于没有save修饰的module中的变量是否为全局变量处理方式可能不尽相同,但是,这里提醒我们要注意module中的变量生存周期。
上例还包含了使用Module的若干规则:
- 需要使用这些变量的函数时(在program或这某个module中)只要USE这个Module即可;
- Module的代码需要需要编写在USE Module之前。
2. Module中的自定义类型
若试图在不同的函数中使用自定义类型(TYPE),应当试图让这些函数“明白”该自定义类型。一个常用的方法是将自定义类型封装在某个Module中,在需要使用的地方USE这个Module。
示例:
module module_pupilimplicit nonetype :: pupilinteger :: agereal :: heightcharacter :: genderend type
end module module_pupilprogram module_typeuse module_pupilimplicit nonetype(pupil) :: pup_onepup_one = pupil(8, 130.0, 'B')call show_pup( pup_one )
end program module_typesubroutine show_pup(pup)! 使用module_pupil,让函数知道type(pupil)use module_pupilimplicit nonetype(pupil) :: pupwrite(*, *) pup
end subroutine
输出结果为:
8 130.0000 B
3. Module中的函数
语法:
在关键词contains之后添加函数
module module_name... ...! 声明相关变量,自定义类型... ...containssubroutine sub_name... ...... ...end subroutine sub_namefunction func_name... ...... ...end function func_nameend module
同一个Module中,函数可以直接使用所声明的变量(注意,变量声明在前,contains之后才是函数的定义;module中不允许对变量进行赋值的操作!!!)
Visual Fortran提供一些扩充函数库就用这个方法来归类:
数值函数库,IMSL,存放在module IMSL中;
3D绘图库,OpenGL,存放在module OpenGL中。
使用前须 use IMSL, use OpenGL
4. Public, Private
Module里面的变量和函数,可以通过Public或Private来区分成公开或私有。
公开,就是任何Use这个Module的地方都可访问(默认的)。
私有,就是相关变量和函数仅限于该Module内部使用。
一些使用问题放在重载,继承的部分介绍。。。
5. Use
编写好Module之后,要使用Use命令才能让Module外的函数使用Module里面的东西。
为了避免变量或函数名称重复,Use命令后面,可以临时把Module里面的变量或函数名称改名。
语法:
module mod_aimplicit noneinteger vacontainsfunction fa(...)...end function
end module mod_aprogram renameuse mod_a, aa=>va, ba=>faimplicit none...
end program rename
如果不需要使用Module中的所有公开的变量、函数,可以通过Only命令来选择只使用部分。这样可以避免重名的问题。
语法:
module mod_aimplicit noneinteger vacontainsfunction fa(...)...end function
end module mod_aprogram renameuse mod_a, only: fa! only后也可重命名! use mod_a, only: ba=>fa implicit none...
end program rename
Fortran笔记,Module相关推荐
- TI mmWave radar sensors Tutorial 笔记 | Module 4 : Some System Design Topics
本系列为TI(Texas Instruments) mmWave radar sensors 系列视频公开课 的学习笔记. 视频网址: https://training.ti.com/intro-mm ...
- Fortran笔记,文件,part2-顺序/直接访问文件,二进制文件
参考资料:彭国论,<Fortran 95程序设计>,2002年 第9章 顺序访问文件 直接访问文件 二进制文件的操作 内部文件 1. 顺序访问文件 顺序文件读写时,不能任意赋值到文件的 ...
- Fortran笔记,指针-Part1
参考:彭国伦:<Fortan 95程序设计>,第10章,2002年 指针最简单的应用可以用来保存变量,或者是动态使用内存.更进一层则可以应用在特别的"数据结构"上,例如 ...
- js-ES6学习笔记-module(4)
1.<script>标签打开defer或async属性,脚本就会异步加载.渲染引擎遇到这一行命令,就会开始下载外部脚本,但不会等它下载和执行,而是直接执行后面的命令. defer与asyn ...
- Fortran笔记,文件,part1-文件读取的概念、基本操作
参考资料:彭国论,<Fortran 95程序设计>,2002年 第9章 1. 文件读取的概念 读取文件:顺序读取 vs 直接读取 顺序:从头到尾读取 直接:跳到指定行列读取 保存文件:文本 ...
- js-ES6学习笔记-module(2)
1.如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名. import { lastName as surname } from './profile'; 2.im ...
- python编译器如何设置中文_如何使setup.py test使用特定的fortran编译器?
我正在尝试测试一个包含一些f90文件的package.如果我构建或安装并指定fortran编译器,它可以正常工作.但是,当我尝试测试时,会出现以下错误:C:\Users\jsalvatier\work ...
- 多个python编译器指定_python – 如何让setup.py测试使用特定的fortran编译器?
我正在尝试测试包含一些f90文件的package.如果我构建或安装并指定fortran编译器,它可以正常工作.但是,当我尝试测试时,我收到以下错误: C:\Users\jsalvatier\works ...
- Node开发项目管理工具 Grunt 对比 Gulp
转自Gulp vs Grunt 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Mav ...
最新文章
- 第 3 章 镜像 - 014 - 镜像的缓存特性
- python兼职 在家工作-在家兼职的人或者是自由职业的人都在做什么?
- 阿里云 OAM 入选「2020中国技术力量年度榜单」,定义云原生应用交付标准
- Java最佳实践– Char到Byte和Byte到Char的转换
- 什么事数据科学_如果您想进入数据科学,则必须知道的7件事
- 学计算机写作文怎么写,关于学电脑的作文
- python 局域网通信_python实现局域网内实时通信代码
- 战神背光键盘如何关系_苹果新专利:未来键盘或用彩色背光向用户提供有用的反馈...
- 面试笔试杂项积累-Unity
- 08-搭建Rest服务 - 04权限管理
- 【python】【Gif制作】使用多张图片合成gif动图
- linux sftp 重命名,SFTP对文件重命名 删除 退出 查看
- BAPI_PO_CREATE1--单价增大10倍问题
- 信息流广告投放相关概念与技术(DSP等,OCPA)
- 哦买噶!李佳琦重现淘宝直播间!机器学习工程师的提效神器;『优化导论』神书;『IE521 凸优化』课程资料 | ShowMeAI资讯日报
- 票据撮合区块链系统开发-去中心化的新型票据交易展现形式的系统
- JSP中img标签图片在浏览器中不显示问题
- 路由桥接 新增路由 扩大wify 一个网线两个wify
- 2856. 仰望星空
- Python小例子——利用递归绘制分形树
热门文章
- win10安装CH341SER.INF 失败 且没有COM口问题(德飞莱CH340T)
- ReactiveX -Rx
- 幼儿园科学计算机课程,幼儿园科学课程
- 1503172126-ny-小媛在努力
- Unity优化技巧,此时无光胜有光
- codeforces 1546B AquaMoon and Stolen String
- 不属于python特点的是_Python程序设计课后习题答案-第一单元
- 有空就来刷几道5G面试题系列 | 5G架构篇
- Dr_can Kalman Filter学习笔记(三)
- applovin 面试经验