Fortran语法介绍(三)

news2024/11/16 9:54:50

个人专栏—ABAQUS专栏

  1. Abaqus2023的用法教程——与VS2022、oneAPI 2024子程序的关联方法 Abaqus2023的用法教程——与VS2022、oneAPI 2024子程序的关联方法
  2. Abaqus有限元分析——有限元网格划分基本原则 Abaqus有限元分析——有限元网格划分基本原则
  3. 各向同性线弹性材料本构模型umat的应用 各向同性线弹性材料本构模型umat的应用
  4. ABAQUS用户子程序二次开发——UMAT介绍(一) ABAQUS用户子程序二次开发——UMAT介绍(一)
  5. Fortran语法介绍(一) Fortran语法介绍(一)
  6. Fortran语法介绍(二) Fortran语法介绍(二)
  7. Fortran语法介绍(三) Fortran语法介绍(三)

目录

  • 个人专栏—ABAQUS专栏
      • 矩阵运算与应用示例


  • 数学运算:Fortran可用的数学运算符号包括+,-,*,/,**,四则运算规则

    • 乘幂有限,乘除次之,加减最后以及()先算
    • 乘号不能省略
    • 整数间的出发结果为整数,不会自动转为浮点数
    • 不同类型数字间的运算,Fortran会将运算中的两数字形态转为精度较高者再做运算
    • 输入数字后加d0可将该数转为双精度浮点数
  • 逻辑运算符号包含:

    • ==或.eq.用于判断是否相等
    • /=或.ne.用于判断是否不等
    • >或.gt.用于判断是否大于
    • >=或.ge.用于判断是否大于或等于
    • <或.lt.用于判断是否小于
    • <=或.le.用于判断是否小于或等于
    • .and.连接两逻辑变量皆为真则为.true., 否则为.false.
    • .or.连接两逻辑变量其一为真则为.true., 否则为.false.
    • .not.用于否定连接其后的逻辑描述
    • .eqv.连接两逻辑变量相同则为.true.,否则为.false.
    • .neqv.连接两逻辑变量不相同则为.true., 否则为.false.
    • 逻辑运算的优先顺序由()内先算,逻辑判别次之,逻辑连接最后
  • 流程控制

      !if 语句基本语法
      if (逻辑判断式) then !程序区块开头
      !--------------------------------!
      !程序内容                         !
      !--------------------------------!
      end if                           !程序区块结尾 
C *** *******************************************************C
      !加入逻辑判断
      if (逻辑判断式) then 
      !--------------------------------!
      !程序内容                         !
      !--------------------------------!
      else
      !--------------------------------!
      !候补程序内容                     !
      !--------------------------------!
      end if       
C *** *******************************************************C
      !搭配 else if 多重判断
      if (逻辑判断式1) then 
      !--------------------------------!
      !程序内容1                         !
      !--------------------------------!
      else if (逻辑判断式2) then 
      !--------------------------------!
      !程序内容2                     !
      !--------------------------------!

      else if (逻辑判断式n) then 
      !--------------------------------!
      !程序内容n                     !
      !--------------------------------!
      else
      !--------------------------------!
      !候补程序内容                     !
      !--------------------------------!
      end if                  

若多重判断的条件是根据单一整数、字串或逻辑变量,可以使用select case使得程序更加简洁易读

        select case (变量)
        case (常数1)
        !--------------------------------!
        !程序内容1                         !
        !--------------------------------!
        case (常数2) 
        !--------------------------------!
        !程序内容2                     !
        !--------------------------------!
  
        case (常数n) 
        !--------------------------------!
        !程序内容n                     !
        !--------------------------------!
        case default
        !--------------------------------!
        !候补程序内容                     !
        !--------------------------------!
        end select       

循环语句

     do counter =Is,Ie,d_I          !Is为counter起始值,Ie为counter终止值,DI为counter增量
     !--------------------------------!
     !程序内容                         !
     !--------------------------------!
     end do
C *** *******************************************************C
     do while (逻辑判断式) 
     !--------------------------------!
     !程序内容                         !
     !--------------------------------!
     end do

矩阵运算与应用示例

  • 加/减/乘/除
C *** ***********************C
      DO I=1,N
        DO J=1,N
          C(I,J)=A(I,J)+B(I,J)
        ENDDO
      ENDDO
  • 矩阵相乘
    ( A B ) i k = ∑ j = 1 n a i j b j k = a i 1 b 1 k , a i 2 b 2 k , ⋯   , a i n b n k (AB)_{ik}=\sum_{j=1}^n a_{ij}b_{jk}=a_{i1}b_{1k},a_{i2}b_{2k},\cdots ,a_{in}b_{nk} (AB)ik=j=1naijbjk=ai1b1k,ai2b2k,,ainbnk
C *** ***********************C
      PROGRAM MATRIX_MULTI
      INTEGER ROW_A, COL_A, ROW_B, COL_B, A, B, C
C     不确定矩阵大小,先声明为极大矩阵
      DIMENSION A(100,100), B(100,100), C(100,100)
C     分别输入矩阵A、B的列数、行数,矩阵B的行数必须等于矩阵A的列数
      WRITE(*,*) "ENTER THE NUMBER OF THE ROWS FOR MATRIX A: "
      READ(*,*) ROW_A
      WRITE(*,*)  "ENTER THE NUMBER OF THE COLUMNS FOR MATRIX A: " 
      READ(*,*) COL_A
      WRITE(*,*) "THE NUMBER OF ROWS FOR MATRIX B MUST BE & EQUAL TO THE NUMBER OF COLUMNS FOR MATRIX A "
      ROW_B=COL_A
      WRITE(*,*)  "ENTER THE NUMBER OF THE COLUMNS FOR MATRIX B: " 
      READ(*,*) COL_B
C     输入矩阵A的数值
      DO I=1,COL_A
         DO J=1,ROW_A
            WRITE(*,10) J,I
10          FORMAT ("ENTER THE NUMBER OF A(",I2,",",I2,")")
            READ(*,*) A(J,I)
         ENDDO
      ENDDO
C     输入矩阵B的数值
      DO I=1,COL_B
        DO J=1,ROW_B
          WRITE(*,20) J,I
20        FORMAT("ENTER THE NUMBER OF B(",I2,",",I2,")")  
          READ(*,*) B(J,I)
          ENDDO
      ENDDO
C     显示矩阵B的数值
      WRITE(*,*) "MATRIXB="
      DO I=1,ROW_B
        WRITE(*,200) (B(I,J),J=1,COL_B)
200     FORMAT (100(I5))
      ENDDO
C     矩阵相乘运算
      DO I=1,ROW_A
        DO J=1,COL_B
            C(I,J)=0
            DO K=1,COL_A
                  C(I,J)=C(I,J)+A(I,K)*B(K,J)
            ENDDO
        ENDDO
      ENDDO
C     输出相乘结果
      WRITE(*,*) "AB="
      DO I=1,ROW_A
        WRITE(*,300) (C(I,J),J=1,COL_B)
300     FORMAT(100(I5))
      ENDDO
      ENDDO            
  • 向量内积
    A ⃗ = [ a 1 , a 2 , ⋯   , a n ] B ⃗ = [ b 1 , b 2 . ⋯   , b n ] A ⃗ B ⃗ = ∑ j = 1 n a j b j = a 1 b 1 + a 2 b 2 + ⋯ + a n b n \begin{gather*} \vec{A}=[a_1,a_2,\cdots,a_n]\\ \vec{B}=[b_1,b_2.\cdots,b_n]\\ \vec{A}\vec{B}=\sum_{j=1}^n a_jb_j=a_1b_1+a_2b_2+\cdots+a_nb_n \end{gather*} A =[a1,a2,,an]B =[b1,b2.,bn]A B =j=1najbj=a1b1+a2b2++anbn
C *** ***********************C
      PROGRAM INNER_PRODUCT
      REAL  A(100), B(100), C
C     输入向量的元素个数
      INTEGER N
      WRITE(*,*) "输入向量元素个数: "
      READ(*,*) N
C     输入向量A与向量B的数值
      WRITE(*,*) "输入A向量"
      DO I=1,N
            READ(*,*) A(I)
      ENDDO
      WRITE(*,*) "输入B向量:"
      DO I=1,N
            READ(*,*) B(I)
      ENDDO
C     计算向量内积
      C=0
      DO I=1,N
            C = C +A(I)*B(I)
      ENDDO
C     输出向量内积结果
      WRITE(*,10) C
10    FORMAT (1X,"A DOT B =",F8.2)
      END
  • 向量外积
    A ⃗ = a 1 i ⃗ + a 2 j ⃗ + a 3 k ⃗ B ⃗ = b 1 i ⃗ + b 2 j ⃗ + b 3 k ⃗ A ⃗ × B ⃗ = ( a 2 b 3 − a 3 b 2 ) i ⃗ + ( a 3 b 1 − a 1 b 3 ) j ⃗ + ( a 1 b 2 − a 2 b 1 ) k ⃗ \begin{gather*} \vec{A}=a_1\vec{i}+a_2\vec{j}+a_3\vec{k}\\ \vec{B}=b_1\vec{i}+b_2\vec{j}+b_3\vec{k}\\ \vec{A}\times \vec{B}=(a_2b_3-a_3b_2)\vec{i}+(a_3b_1-a_1b_3)\vec{j}+(a_1b_2-a_2b_1)\vec{k} \end{gather*} A =a1i +a2j +a3k B =b1i +b2j +b3k A ×B =(a2b3a3b2)i +(a3b1a1b3)j +(a1b2a2b1)k
C *** ***********************C
      PROGRAM OUT PRODUCT
      REAL A(3), B(3), CROSS(3)
C     输入向量A与向量B的数值
      WRITE(*,*) "输入A向量:"
      DO I=1,3
      READ (*,*) A(I)
      ENDDO
      WRITE(*,*) "输入B向量:"
      DO I=1,3
      READ (*,*) B(I)
      ENDDO
C     计算向量外积
      CROSS(1)=A(2)*B(3)-A(3)*B(2)
      CROSS(2)=A(3)*B(1)-A(1)*B(3)
      CROSS(3)=A(1)*B(2)-A(2)*B(1)
C     输出向量外积结果
      WRITE(*,*) "A CROSS B: "
      WRITE(*,10) (CROSS(I),I=1,3)
10    FORMAT (3(1X,F10.3))
      END

欢迎对Abaqus感兴趣的朋友们查看:Abaqus-UMAT开发精品书籍及umat子程序学习
在这里插入图片描述

Abaqus非线性粘弹性模型子程序umat——广义MAXWELL粘弹性模型umat解析(朱-王-唐本构模型)

在这里插入图片描述

如果你喜欢以上内容,或者对Abaqus学习有兴趣,欢迎收藏关注,博主将持续更新。你的关注、收藏是我持续创作的动力!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吴恩达深度学习笔记:神经网络的编程基础2.1-2.3

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.1 二分类(Binary Classification)2.2 逻辑回归(Logistic Regression)2.3 逻辑回归的代价函数&#xff08;Lo…

Gin 获取请求参数

POST 请求参数 Gin 获取Post请求URL参数有三种方式 func (c *Context) PostForm(key string) string func (c *Context) DefaultPostForm(key, defaultValue string) string func (c *Context) GetPostForm(key string) (string, bool)大多数情况下使用的是application/x-www…

Electron程序如何在MacOS下获取相册访问权限

1.通过entitiment.plist&#xff0c;在electron-builder签名打包时&#xff0c;给app包打上签名。最后可以通过codesign命令进行验证。 TestPhotos.plist electron-builder配置文件中加上刚刚的plist文件。 通过codesign命令验证&#xff0c;若出现这个&#xff0c;则说明成…

day60 安装MySql数据库

1如何安装MySQL数据库 2数据库概念 3数据库语言 1 SQL&#xff08;数据结构化查询语句&#xff09; 2分类 1数据库查询语言DQL select 2数据库操作语言DML insert&#xff0c;update&#xff0c;delete 3数据库定义语言DDL create&#xff0c;alter修改&am…

MySQL--优化(索引--聚簇和非聚簇索引)

MySQL–优化&#xff08;索引–聚簇和非聚簇索引&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 一、聚簇索引 聚簇索引&#xff1a;将数据存储与索引放到了一块&#xff0c;索引结构的叶子节点保存…

C语言连接【MySQL】

稍等更新图片。。。。 文章目录 安装 MySQL 库连接 MySQLMYSQL 类创建 MySQL 对象连接数据库关闭数据库连接示例 发送命令设置编码格式插入、删除或修改记录查询记录示例 参考资料 安装 MySQL 库 在 CentOS7 下&#xff0c;使用命令安装 MySQL&#xff1a; yum install mysq…

明日周刊-第1期

打算开一个新的专栏&#xff0c;专门记录一周发生的事情以及资源共享&#xff0c;那么就从第一期开始吧。 1. 一周热点 人工智能技术突破&#xff1a;可能会有关于人工智能领域的最新研究成果&#xff0c;例如新算法的开发、机器学习模型的提升或者AI在不同行业的应用案例。 量…

PT:dmsa如何设置don‘t use

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章链接: PT: 基于Multi Voltage的physical aware DMSA PT: DMSA remote_execute { \ define_user_attribu

Tomcat源码解析(四):StandardServer和StandardService

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a;Tomcat整体架构 Tomcat源码解析(二)&#xff1a;Bootstrap和Catalina Tomcat源码解析(三)&#xff1a;LifeCycle生命周期管理 Tomcat源码解析(四)&#xff1a;StandardServer和StandardService 文章目录 前言一、Standar…

大数据赋能,能源企业的智慧转型之路

在数字洪流中&#xff0c;大数据已经成为推动产业升级的新引擎。特别是在能源行业&#xff0c;大数据的应用正引领着一场深刻的智慧转型。今天&#xff0c;我们就来探讨大数据如何在能源企业中发挥其独特的魅力&#xff0c;助力企业提效降本&#xff0c;实现绿色发展。 动态监控…

R语言读取大型NetCDF文件

失踪人口回归&#xff0c;本篇来介绍下R语言读取大型NetCDF文件的一些实践。 1 NetCDF数据简介 先给一段Wiki上关于NetCDF的定义。 NetCDF (Network Common Data Form) is a set of software libraries and self-describing, machine-independent data formats that support…

光线追踪11 - Positionable Camera(可定位相机)

相机和介质一样&#xff0c;调试起来很麻烦&#xff0c;所以我总是逐步开发我的相机。首先&#xff0c;我们允许可调节的视野&#xff08;fov&#xff09;。这是渲染图像从一边到另一边的视觉角度。由于我们的图像不是正方形的&#xff0c;水平和垂直的视野是不同的。我总是使用…

mybatis基础操作(三)

动态sql 通过动态sql实现多条件查询&#xff0c;这里以查询为例&#xff0c;实现动态sql的书写。 创建members表 创建表并插入数据&#xff1a; create table members (member_id int (11),member_nick varchar (60),member_gender char (15),member_age int (11),member_c…

【探索程序员职业赛道:挑战与机遇】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

微信小程序(五十三)修改用户头像与昵称

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.外界面个人资料基本模块 2.资料修改界面同步问题实现&#xff08;细节挺多&#xff0c;考虑了后期转服务器端的方便之处&#xff09; 源码&#xff1a; app.json {"window": {},"usingCompone…

什么是5G边缘计算网关?

随着5G技术的飞速发展和普及&#xff0c;边缘计算作为5G时代的关键技术之一&#xff0c;正日益受到业界的关注。而5G边缘计算网关&#xff0c;作为连接5G网络和边缘计算节点的桥梁&#xff0c;扮演着至关重要的角色。HiWoo Box&#xff0c;作为一款卓越的5G边缘计算网关&#x…

【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

使用Spring的AOP

使用Spring的AOP 一、AOP 的常用注解1.切面类Aspect2.Pointcut3.前置通知Before4.后置通知AfterReturning5.环绕通知Around6.异常通知AfterThrowing7.最终通知After8.切面顺序Order9.启用自动代理EnableAspectJAutoProxy 二、AOP注解方式开发三、AOP 全注解开发四、基于XML配置…

RDD算子介绍(二)

1. coalesce 用于缩减分区&#xff0c;减少分区个数&#xff0c;减少任务调度成本。 val rdd : RDD[Int] sc.makeRDD(List(1, 2, 3, 4), 4) val newRDD rdd.coalesce(2) newRDD.saveAsTextFile("output") 分区数可以减少&#xff0c;但是减少后的分区里的数据分布…

Keepalived+LVS构建高可用集群

目录 一、Keepalive基础介绍 1. Keepalive与VRRP 2. VRRP相关技术 3. 工作原理 4. 模块 5. 架构 6. 安装 7. Keepalived 相关文件 7.1 配置组成 7.2 全局配置 7.3 VRRP实例配置&#xff08;lvs调度器&#xff09; 7.4 虚拟服务器与真实服务器配置 二、Keepalived…