个人专栏—ABAQUS专栏
- Abaqus2023的用法教程——与VS2022、oneAPI 2024子程序的关联方法 Abaqus2023的用法教程——与VS2022、oneAPI 2024子程序的关联方法
- Abaqus有限元分析——有限元网格划分基本原则 Abaqus有限元分析——有限元网格划分基本原则
- 各向同性线弹性材料本构模型umat的应用 各向同性线弹性材料本构模型umat的应用
- ABAQUS用户子程序二次开发——UMAT介绍(一) ABAQUS用户子程序二次开发——UMAT介绍(一)
- Fortran语法介绍(一) Fortran语法介绍(一)
- Fortran语法介绍(二) Fortran语法介绍(二)
- Fortran语法介绍(三) Fortran语法介绍(三)
声明
-
变量类型声明:目的是在编辑器中指明预留存储空间的类型
-
Fortran 使用的变量类型声明包括整数(integer)、浮点数(real)、复数(complex)、字符串(character)和逻辑变量(logical)五种
-
声明变量类型和大小: type(n)::var
-
INTEGER(4)::age !声明一个长整数变量age
INTEGER(2)::age !声明一个短整数变量age
REAL(8)::temperature !声明一个双精度浮点实数变量temperature
REAL(4)::temperature !声明是个单精度实数变量temperature
COMPLEX(16)::z !声明一个双精度复数变量z
COMPLEX(8)::z !声明是个单精度复数变量z
LOGICAL:: is_valid !声明一个逻辑变量 is_valid
CHARACTER(10):: name !声明一个长度为10的字符串变量name
- 程序内定变量类型:若程序中出现未声明变量,Fortran编译器会根据变量名称的第一个英文字母,自行分配变量类型,该内定规则由指令
implicit
自行定义:
implicit real(a-h,o-z) !变量名称在字母a-h,o-z范围内分配浮点数变量
implicit integer(i-n) !变量名称在字母i-n范围内分配为整数变量
implicit none !声明不适用编译器自行分配变量
!注意:未声明类型的变量不具备任何类型,在编译时会报错
- 数组声明规则:
type::arr(Ne)
,type为数组类型,arr为自定义数组名,Ne为正整数代表数组大小,多维数组各维度间以,
分割
INTEGER::my_array(5) !声明一个大小为5的整数一维数组
REAL::matrix(3,3) !声明一个大小为3X3的实数二维数组
!初始化数组列表
INTEGER::my_array(3)=[1,2,3]
!使用赋值语句逐个赋值
INTEGER::my_array(3)
my_array=[1,2,3]
!使用循环结构进行赋值
INTEGER::i
INTEGER::my_array(3)
DO i=1,3
my_array(i)=i
!访问数组元素,Fortran内定数组索引从1开始
value=my_array(5) !索引包含a(1)、a(2)、a(3)、a(4)、a(5)五个整数元素
value=my_array(1:5)
value=array(-3:1) !索引该数组次序为a(-3)、a(-2)、a(-1)、a(0)、a(1)
!二维数组,第一个索引表示行,第二个索引表示列
value=matrix(2,3) !索引访问二维数组的第二行第三列
- 初值设定:Fortran中变量初值设定有两种方法:直接声明和使用data指令
!直接声明
INTEGER::a=1,b=2
REAL::c=3.0
COMPLEX::d=(1.0,2.0)
CHARACTER*10::str=``Fortran 90``
!data指令
INTEGER::a,b
REAL::c
data a,b,c /1,2,3.0/
!数组初值设定几种方法
INTEGER::a(5)=(/1,2,3,4,5/)
REAL::matrix(2,2)=reshape([1.0,2.0,3.0,4.0],[2,2])
INTEGER::a(5)
data a /1,2,3,4/
INTEGER::a(5)=(/(I,I=1,4),4/)
data a /(I,I=1,4),4/
- 常数声明关键词为
parameter
REAL,PARAMETER::pi=3.1415926
REAL::g
PARAMETER(g=9.81)
- 动态数组声明关键词为
allocatable
,动态数组声明相对耗时长,频繁使用会拖慢程序运算速度,应谨慎使用
INTEGER::I=3,J=10
real,allocatable::mtx(:,:) !allocatable声明二维动态数组
write(*,*) allocated(mtx) !allocated判断动态数组是否赋值
allocate(mtx(0:I,J)) !allocate对动态数组赋值
write(*,*) allocated(mtx)
deallocate(mtx) !deallocate对数组大小归零释放存储空间
write(*,*) allocate(mtx)
- 参数声明:参数传入子程序时仅含其存储位置,不含参数类型,即使子程序内外参数类型不同也能够同时运行,使用者应注意避免因参数类型不一致导致的程序运行错误。
- 变量的存储周期:在子程序运行结束后,子程序中的变量存储空间会被释放,若希望某些变量值能保存至所有程序运行阶数,可使用save或common命令
save var_1,...,var_n
!save为子程序中的变量预留一个永久的存储空间,变量仅能为子程序调用
common /group_name/ var_1,...,var_n
!common为全域变量向编辑器预留一个永久存储空间供各程序模块调用
!group_name为自定义变量数组命名
UMAT变量存储:编写UMAT子程序时,若需要使用全域变量,自定义数组名建议以K开头,避免意外存取以被Abaqus声明的全域变量数组。
- 函数声明
function function_name (var_1,...,var_n) !函数声明
type function function_name (var_1,...,var_n) !子程序函数变量类型声明
!主程序函数变量声明必须以external区别于一般函数变量声明
type,external :: function_name
- 输入与输出
!unit定义输入/输出位置,fmt定义输入/输出格式
!unit为*时,代表使用程序预设位置,fmt为*时,代表使用预设格式
write(unit,fmt) !屏幕输出unit为*,相对应的数值代码为6
read(unit,fmt) !键盘输入unit为*,相对应的数值代码为5
read(*,*) !读入整数I
write(*,*) !屏幕输出整数I
在编写UMAT时若因除错等原因有输出需求时可以unit=7
输出至Abaqus/Standard的信息档案.msg
,或unit=6
输出至Abaqus/Standard的输出档案.dat
- 常用格式化输出/输入指令
- A[w]:以w个字符宽度输出/输入字,多出的宽度会补上空格
- Iw[.n]:以w个字符宽度输出/输入整数,最少须包含n个数字。多出的宽度会补上空格,位数不足n者补上0,需要字符不足时,会输出*
- Fw.d:以w个字符宽度输出/输入浮点数,小数部分占d个字符宽度。整数多出的宽度会补上空格,需要字符不足时,会输出*;小数多出的宽度会补0,需要字符不足时,会进行四舍五入。
- Ew.d[Ee]:以w个字符宽度输出/输入浮点数的科学记号,小数部分占d个字符宽,指数部分占e个字符宽。
- ESw.d[Ee]:基本同Ew.d[Ee],进队非零浮点数而言,E格式的个位数恒为0,ES格式的个位数为1到9。
- Lw:以w个字符宽度输出/输入逻辑变量(T或F)
- nX:把输出/输入的位置向右移动n个字符宽度
- /:换行
- 字符串:输出/输入格式中可输入字符串,作为输出资料的说明。
应用示例
program format_test
! -------------------------------!
write(*,"('""格式化输出测试""')")
write(*,100)
write(*,"(A5,I5,L5)") 'hi',100,.true.
!A5、I5与L5分别代表以5个字符宽度输出字符串、整数和逻辑变量
write(*,"(E15.5,/,F10.5)") 63.42,945.38
!E15.5代表以15个字符宽度、5个有效位数与科学计数方式输出浮点数
!F10.5代表以10个字符宽度输出取值至小数点后5位的浮点数
!/在此代表强制换行
write(*,100)
100 format('----5----0----5----0')
! -------------------------------!
end program format_test
输出结果如下:
"格式化输出测试"
----5----0----5----0
hi 100 T
0.63420E+02
945.38000
----5----0----5----0
欢迎对Abaqus感兴趣的朋友们查看:Abaqus-UMAT开发精品书籍及umat子程序学习
Abaqus非线性粘弹性模型子程序umat——广义MAXWELL粘弹性模型umat解析(朱-王-唐本构模型)
如果你喜欢以上内容,或者对Abaqus学习有兴趣,欢迎收藏关注,博主将持续更新。你的关注、收藏是我持续创作的动力!