




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Fortran95 2003 第九章过程的附加特性 本章学习目标 学习在Fortran过程中如何使用多维数纽 理解何时 如何使用SAVE属性或者SAVE语句 理解可分配数组和自动数组之间的区别以及何时在过程中分别使用它们 理解纯过程和逐元过程 学习怎样声明和使用内部子程序及函数 9 1给子程序和函数传递多维数组 9 1 1显式结构的形参数组 9 1 2不定结构的形参数组 assumed shapedummyarrays 在声明不定结构的数组时 数组中的下标都用冒号来代替 只有子程序或者函数有显式接口 才能使用这种数组 调用程序不知道子程序接口的所有信息 通常采用的方式是将子程序放在模块中 然后在调用程序中use该模块 例9 1使用不定结构的形参数组 9 2SAVE属性和语句 当离开过程后 过程中的所有局部变量和数组的值都成为未定义的值 Fortran提供了一种方式来保存在调用过程之间的局部变量和数组 例如定义局部变量 任意在类型声明语句中初始化的局部变量都会被自动保存 例如 Fortran也提供了SAVE语句 任何列在SAVE语句中的局部变量都会在调用过程中保存 如果SAVE语句中没有变量 那么所有的局部变量都会被被保存起来 任何共享数据的模块都应该使用SAVE语句保存数据 并通过USE语句使用该模块数据 例9 2计算均值 注意 使用save仅在子程序中保留变量值 其值如果没有返回 则调用程序仍不可见该值 9 3过程中的动态数组 如果用SAVE属性来声明可分配数组 或者数组出现在一个SAVE语句中 那么数组只会在该过程第一次被调用的时候利用ALLOCATE语句分配一次内存 如果没有用SAVE属性来声明可分配数组 那么在每次调用过程的时候都必须用ALLOCATE语句给数组分配空间 当返回到调用程序的时候 数组的内容会被自动地释放掉 9 4过程中的自动数组 Fortran95 2003提供了另外一种简单的方式在过程执行的时候自动创建临时数组 在过程执行到返回之后自动释放掉数组 这种数组被称为自动数组 automaticarrays 自动数组是局部的显式结构数组 它的下标由形式参数或者来自于模块的数据指定 回顾一下不同的数组类型 1 带有常数下标的显式结构数组 2 形参数组 1 显式结构形参数组 2 不定结构形参数组 3 不定大小的形参数组 3 自动数组 4 预定义结构数组 9 5在Fortran2003过程中的可分配数组 在Fortran2003的两点改变 1 可以使用可分配形式参数 2 函数可以返回可分配的值 9 5 1可分配形式参数 如果Fortran2003子程序有显式接口 那么对于子程序来说 它的形式参数可以是可分配的 如果声明形式参数为可分配的 那么用于调用子程序的相应实际参数也必须是可分配的 形式参数可以有INTENT属性 INTENT属性可能影响到子程序的操作 1 如果可分配参数具有INTENT IN 属性 那么不允许在子程序中对这个数组分配或者释放空间 数组中的值也不能被修改 2 如果可分配参数具有INTENT INOUT 属性 那么当调用子程序的时候 将会传递给它相应的实际参数的状态 是否可分配 和数据 数组可以在子程序的任何位置被释放 重分配或者修改 形式参数的最终状态 是否可分配 和数据将会返回给实际参数所在的调用程序 3 如果可分配参数具有INTENT OUT 属性 那么调用程序中的实际参数将会在入口处被自动地释放掉 实际数组中的所有数据都会丢失 子程序可以以任何方式来使用没有分配的参数 形式参数的最终状态 是否可分配 和数据将会返回给实际参数所在的调用程序 例9 3 说明可分配数组形式参数用法的程序 9 5 2可分配函数 AllocatableFunctions Fortran2003函数的返回值允许有ALLOCATABLE属性 在函数的入口不会分配返回变量 在函数内部每当需要的时候 可以分配和释放变量 但是返回之前必须分配和赋值 例9 4 说明可分配函数用法的程序 9 6纯过程 pureprocedures 和逐元过程 elementalprocedures 9 6 1纯过程 纯函数是没有任何副作用的函数 即 它们不会修改输入参数 不会修改任何在函数外部可见的其他数据 如模块中的数据 它的局部变量没有SAVE属性 不能在类型声明语句中初始化局部变量 因为这一初始化隐含有SAVE属性 任何被纯函数调用的过程也必须是纯过程 在纯函数中每个参数都必须定义为INTENT IN 不能有任何外部文件I O操作 不能包含STOP语句 在函数语句中增加一个PURE前缀就可以定义纯函数 纯子程序 puresubroutine 是没有任何副作用的子程序 除了允许它们修改用INTENT OUT 或者INTENT INOUT 声明的参数外 它们的限制和纯函数是相同的 在SUBROUTINE语句中增加PURE前缀可以声明纯子程序 9 6 2逐元过程 逐元函数 elementalfunctions 是为标量参数指定的函数 它也适用于数组参数 如果一个逐元函数的参数是标量 那么这个函数的返回值也是标量 如果函数的参数是数组 那么函数的返回值也是和输入参数相同结构的数组 用户自定义的逐元函数必须是PURE函数 且满足 1 所有的形式参数都必须是标量 不能带有POINTER属性 2 函数的返回值也必须是标量 不能带有POINTER属性 3 除了作为某种内置函数的参数 形式参数不能用在类型声明语句中 在函数语句中增加一个ELEMENTAL前缀可以声明用户自定义逐元函数 9 7内部过程 除了外部过程 externalprocedures 和模块过程 moduleprocedures 还有第三种过程 内部过程 intemalprocedures 内部过程是完全包含在另一个被称为宿主程序单元 hostprogramunit host 的过程中 内部过程和宿主一起编译 且只能从宿主程序单元中调用它 像模块过程一样 内部过程用CONTAINS语句来引入 内部过程必须跟在宿主过程的所有执行语句之后 而且必须用CONTAINS语句引入 为什么要使用内部过程呢 在某些问题中 作为解决方案的一部分 有一些低级操作可能要重复执行 经定义内部过程未完成这些操作 可以简化这些低级操作 例9 5 内部过程示例 内部过程函数和外部过程有以下三方面的区别 1 内部过程只能被宿主过程调用 程序中的其他过程不能访问它 2 内部过程的名字不能作为命令行参数传递给其他的过程 3 内部过程通过宿主关联 hostassoc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年互联网+日化洗涤行业研究报告及未来发展趋势预测
- 商场国庆节前安全培训课件
- 商场商家安全用电培训课件
- 2025年控制系统行业控制系统数字化应用前景报告
- 2025年清洁能源行业风能发电技术前景研究报告
- 岱山县2025浙江舟山市岱山县事业单位紧缺专业人才招聘14人笔试历年参考题库附带答案详解
- 压力容器安全标准培训课件
- 安徽省2025年安徽省自然资源厅直属事业单位招聘9人笔试历年参考题库附带答案详解
- 大洼区2025年辽宁盘锦市大洼区招聘事业单位工作人员笔试考试笔试历年参考题库附带答案详解
- 介休市2025山西晋中介休市事业单位招聘133人笔试历年参考题库附带答案详解
- 《传统书画装裱与修复中材料的选择与运用》
- 2024ESC心房颤动管理指南解读
- 防洪排涝工程合同范本有效
- 高血压病基层诊疗指南
- 医院视频监控系统维保方案
- 门诊护士课件教学课件
- 《大学生的人际关系》课件
- 职务侵占罪培训
- 中式烹调师技能等级认定四级理论知识试卷
- DB65-T 4784-2024 冰川范围调查技术规范
- 幼儿园礼仪小天使《借物品》教学课件
评论
0/150
提交评论