06-Fortran基础--Fortran模块化编程

06-Fortran基础--Fortran模块化编程

    • 1 模块的定义和使用
    • 2 接口和模块间通信
    • 3 模块化编程的优势:
    • 4 模块使用示例
    • 5 结语


  Fortran的模块化编程是一种组织和管理代码的方法,它包括模块的定义和使用、接口和模块间通信以及模块化编程的优势。

1 模块的定义和使用

  1.1模块定义: 使用MODULE关键字创建模块,并在其中定义变量、子程序和其他对象。

MODULE my_module
    IMPLICIT NONE
    INTEGER :: var1
    REAL :: var2

    CONTAINS
    SUBROUTINE my_subroutine()
        ! ...
    END SUBROUTINE my_subroutine
END MODULE my_module

  1.2 模块使用: 在主程序或其他模块中使用USE语句引用模块,并访问其中定义的变量和子程序。

PROGRAM main_program
    USE my_module
    IMPLICIT NONE
    var1 = 10
    var2 = 3.14
    CALL my_subroutine()
END PROGRAM main_program

2 接口和模块间通信

  2.1 接口: 可以在模块中定义接口来规定子程序的输入、输出参数和返回值,以提高代码的可读性和安全性。

MODULE my_module
    INTERFACE
        SUBROUTINE my_subroutine(input_var, output_var)
            REAL, INTENT(IN) :: input_var
            REAL, INTENT(OUT) :: output_var
        END SUBROUTINE my_subroutine
    END INTERFACE
END MODULE my_module

  2.2 模块间通信: 模块间通信可以通过在模块中定义共享的变量、使用USE语句引用其他模块来实现。

3 模块化编程的优势:

  • 可读性: 模块化编程使得代码结构更清晰,易于理解和阅读。
  • 可维护性: 将代码分成模块,使得修改和更新变得更加简单和安全。
  • 封装性: 模块可以包含私有成员,限制了对模块内部的访问,提高了代码的封装性和安全性。
  • 重用性: 模块化编程使得代码中的模块可以在不同的项目中被重复使用,提高了代码的可重用性。
  • 避免命名冲突: 模块化编程可以避免全局命名空间的污染和命名冲突,增强了代码的健壮性。

4 模块使用示例

  假设有一个模块文件 my_module.f90:

module my_module
    implicit none
    private ! module下所有定义啊变量、函数都默认私有属性(也就是仅能在本模块使用)
    public :: cal_pi ! 声明下面的方法公有(表明可以被外部调用)
    public :: my
    
    ! 模块类(将module下同属一个类下的方法进行合并)
    type :: my_type
        
    contains
        procedure,nopass :: cal_pi
        procedure,nopass :: cal_area
    end type my_type
    type(my_type) :: my
    
    contains
    
    ! 计算pi
    function cal_pi()result(res) ! 模块方法1
        implicit none
        real(8) :: res
        
        res = 4.d0 * atan(1.d0)
    end function cal_pi
    
    ! 计算面积
    function cal_area(v,h)result(res) ! 模块方法2
        implicit none
        real(8),intent(in) :: v,h
        real(8) :: res
        
        res = v*h
    end function cal_area
    
end module my_module

  然后,在主程序文件 main_program.f90 中使用这个模块:

program test_module
	implicit none
    use my_module
    
    print *,"计算pi",cal_pi() ! cal_pi是public属性,可以被直接调用
    
    print *,"计算矩形面积",my%cal_area(5.d0,4.d0) ! cal_area定义在my下面,没有Public属性,只能通过“my%”这种方式调用

end program 

运行结果:

5 结语

  上面简单介绍了Fortran Module的使用,掌握Module的基础知识对后续的面向对象编程有益处,后续如果想到有其他的有关知识或内容会在此基础上进行补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/619490.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【35分钟掌握金融风控策略24】定额策略实战

目录 基于客户风险评级的定额策略 确定托底额度和盖帽额度 确定基础额度 基于客户风险评级确定风险系数 计算最终授信额度 确定授信有效期 基于客户风险评级的定额策略 在开发定额策略时,精准确定客户的基础额度是一个关键步骤,通常会基于客户的收…

基于地平线J6E,「吃蟹者」易航智能重塑高速NOA

作者 |张祥威 编辑 |德新 一批基于地平线J6E的智驾方案将要到来,高速NOA领域很快会变天。 易航智能是这批智驾方案公司中的一家。 近日在北京车展,这家公司推出一套基于地平线J6 E的7V1R方案,可以实现城市记忆领航、高速NOA、记忆泊车、L2…

数据结构---经典链表OJ

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 点击主页:optimistic_chen和专栏:c语言, 创作不易,大佬们点赞鼓…

C++八股(面试题、手撕题)自用版

目录 面试题: 1. define inline 在编译的哪个阶段 2. const static 3. 子函数返回结构体有什么问题,返回对象调用了哪些函数 4. volatile关键字 5. 编译器基本原理 6. 预处理、编译、汇编、链接以及他们在操作系统上如何运作的 7. 数组和指针&a…

19、案例实战:上亿请求轻松应对,老年代垃圾回收参数调整技巧大公开

19.1、前文回顾 在上一篇文章中,我们已经向大家介绍了一个日活跃用户百万级别,处理请求量上亿的电商系统案例。我们选择了这个中型电商系统在大促期间的瞬时高峰下单场景,作为我们的JVM优化分析的场景。通过预测,我们得出在大促高峰期,每台机器每秒需要处理300个订单请求…

LINUX 入门 7

LINUX 入门 7 day10 20240506 耗时:59min day11 20240507 耗时:106min 课程链接地址 第7章 http客户端请求 1 http项目介绍与Http协议讲解 先去看一遍教程 扫一遍,不用完全一行行读 ctrlshiftI调出来网页调试台——network——img 过…

PC的体系结构

冯诺依曼体系结构 冯诺依曼体系结构,也称为冯诺依曼架构,是一种计算机架构的设计概念,由20世纪中叶的数学家和物理学家约翰冯诺依曼提出。这种架构的核心特点是将程序指令和数据存储在同一块可读写的存储器中。这样做的优点是简化了计算机的…

web前端之纯CSS实现简单酷炫的照片墙效果、排除元素的伪类、scale

MENU 效果htmlstylescale:not() 效果 html <div class"container"><div class"box"><img src"../../image/1_.jpg"></div><div class"box"><img src"../../image/2_.jpg"></div>…

AI办公自动化-用kimi把PDF文档按照章节自动拆分成多个docx文档

一个PDF文档很长&#xff0c;希望按照章节分拆成小文档。 可以在kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写拆分PDF文档的Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;D:\chatgpt图书\图书1&…

Zookeeper 注册中心:单机部署

序言 本文给大家介绍 Zookeeper 单机部署流程、 如何与 Spring 整合使用。除此之外&#xff0c;还有 Zookeeper 作为注册中心与 SpringCloud 的整合流程。 一、部署流程 官网下载 Zookeeper 安装包 解压安装包到指定目录 进入 apache-zookeeper-3.8.4-bin/conf 目录&…

LwIP 之九 详解 UDP RAW 编程、示例、API 源码、数据流

我们最为熟知的网络通信程序接口应该是 Socket。LwIP 自然也提供了 Socket 编程接口,不过,LwIP 的 Socket 编程接口都是使用最底层的接口来实现的。我们这里要学习的 UDP RAW 编程则是指的直接使用 LwIP 的最底层 UDP 接口来直接实现应用层功能。这里先来一张图,对 LwIP 内部…

YOLO数据集制作(二)|json文件转txt验证

以下教程用于验证转成YOLO使用的txt格式&#xff0c;适用场景&#xff1a;矩形框&#xff0c;配合json格式文件转成YOLO使用的txt格式脚本使用。 https://blog.csdn.net/StopAndGoyyy/article/details/138681454 使用方式&#xff1a;将img_path和label_path分别填入对应的图…

图鸟UI vue3:基于Vue3和UniApp的酷炫简洁UI框架

引言 随着前端技术的不断发展&#xff0c;开发效率和用户体验成为了前端开发中的两大关键因素。为了提高开发效率和提供更好的用户体验&#xff0c;各种UI框架应运而生。其中&#xff0c;TuniaoUI作为一款基于Vue3和UniApp开发的UI组件库&#xff0c;以其酷炫简洁的设计和丰富…

JVM调优:JVM中的垃圾收集器详解

JVM&#xff08;Java Virtual Machine&#xff09;垃圾收集器是Java虚拟机中的一个重要组件&#xff0c;负责自动管理Java堆内存中的对象。垃圾收集器的主要任务是找出那些不再被程序使用的对象&#xff0c;并释放它们占用的内存&#xff0c;以便为新的对象分配空间。这个过程被…

客户端机器访问服务端Harbor

书接上回&#xff1a;Docker私有仓库Harbor-CSDN博客 修改客户端机器名称 [roothost01 ~]# hostnamectl hostname client [roothost01 ~]# bash [rootclient ~]# 安装docker [rootclient ~]# yum -y install yum-utils.noarch [rootclient …

分布式任务调度框架xxl-job使用手册

官网地址和文档地址&#xff1a;https://www.xuxueli.com/xxl-job/ 一、快速入门 1.1 下载源码 https://github.com/xuxueli/xxl-job https://gitee.com/xuxueli0323/xxl-job 下载完成后有以下模块 1.2 初始化数据库 官方指定mysql8.0&#xff0c;但我是mysql5.7 执行/xxl…

Git系列:git tag 使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【web开发网页制作】Html+Css明星网页主题开发之邓超(5页面附源码)

HTMLCSS影视主题网页目录 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果Page1、首页Page2、个人经历Page3、个人生活Page4、个人作品Page5、个人公益 &#x1f40b;三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书…

C++––初识C++

目录 一.绪言 1.什么是C 2.C语言和C的关系 2.1数据类型 2.2数据类型的长度 2.3变量和常量 2.4字符串操作 2.5判断和选择语句&#xff0c;循环语句 2.6逻辑运算符 2.7函数的声明和调用 2.8数组 2.9操作符 二.C入门的基本知识 1.命名空间 2.输入&输出 3.缺省…

Node.js全栈:从一个简单的例子开始

第一章&#xff1a;从一个简单的例子开始第二章&#xff1a;看官方文档的艺术第三章&#xff1a;浏览器显示一个网页 首先&#xff0c;在VSCode编辑器中打开一个没有任何文件的空目录&#xff0c;然后创建一个package.json文件。 为了方便大家复制&#xff0c;我把文件内容放到…