1、各个楼层及内容索引2-什么是 UMAT3-UMAT 功能简介4-UMAT 开始的变量声明5-UMAT 中各个变量的详细解释6-关于沙漏和横向剪切刚度7-UMAT 流程和参数表格实例展示8-FORTRAN 语言中的接口程序 Interface9-关于 UMAT 是否可以用 Fortran90 编写的问题10-17-Fortran77 的一些有用的知识简介20-2530-32-弹塑性力学相关知识简介34-37-用户材料子程序实例 JOhn-cook 模型压缩包下载38-JOhn-cook 模型本构简介图40-用户材料子程序实例 JOhn-cook 模型完整程序+david 详细注解 欢迎大家来看看
2、,并提供意见,完全是自己的 diy 的,不保证完全正确,希望共同探讨,以便更正,带“?“ 部分,还望各位大师同仁指教1 什么是 UMAT?1.1 UMAT 功能简介 !-摘自庄茁老师的书UMAT 子程序具有强大的功能,使用 UMAT 子程序:(1)可以定义材料的本构关系,使用 ABAQUS 材料库中没有包含的材料进行计算,扩充程序功能。ABAQUS 软件 2003 年度用户年会论文集(2)几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋予 ABAQUS 中的任何单元;(3)必须在 UMAT 中提供材料本构模型的雅可比( Jacobian)矩阵,即应力增量对应变增量的变化率。(4
3、)可以和用户子程序“USDFLD”联合使用,通过“USDFLD” 重新定义单元每一物质点上传递到 UMAT 中场变量的数值。1.2 UMAT 开始的变量声明由于主程序与 UMAT 之间存在数据传递,甚至共用一些变量,因此必须遵守有关书写格式,UMAT中常用的变量在文件开头予以定义,通常格式为:SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,1 RPL,DDSDDT,DRPLDE,DRPLDT,2STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME3 NDI,NSHR,NTENS,NSTAT
4、V,PROPS,NPROPS,COORDS,DROT,PNEWDT,4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)CINCLUDEABA_PARAM.INC-此处是将 ABAQUS 本身自带的参量精度定义的文件包含进来后面详说CCHARACTER*80 CMNAMEDIMENSION STRESS(NTENS),STATEV(NSTATV),1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),
5、DPRED(1),3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)-以上是变量声明吧!user coding to define DDSDDE,STRESS,STATEV,SSE,SPD,SCDand,if necessary,RPL,DDSDDT,DRPLDE,DRPLDT,PNEWDT-此处, 看来是将用户定义材料属性的 fortran 程序编入RETURN-这是返回值END-结束UMAT 中各个变量的详细解释凡是- 注明 david 的,都是我自己猜的,仅供参考DDSDDE (NTENS ,NTENS)是一个 NTEN
6、SNumber of the Tensions-david维的方阵,称作雅可比矩阵,应力增量 /应变增量的偏导数,DDSDDE (I ,J)表示增量步结束时第 J 个应变分量的改变引起的第 I 个应力增量的变化!雅可比是一个对称矩阵,除非在“*USER MATERIAL”语句中加“UNSYMM“参数STRESS (NTENS)应力张量矩阵,对应 NDINumber of the Direct Components-david个直接分量和 NSHRNumber of the shear Components-david个剪切分量.在增量步的开始,应力张量矩阵中的数值通过 UMAT 和主程序之间的
7、接口传递到 UMAT 中,在增量步的结束,UMAT 将对应力张量矩阵更新,即return.对于包含刚体转动的有限应变问题,一个增量步条用 UMAT 之前就已经对应力张量进行了刚体转动,因此在 UMAT 中只需处理应力张量的共旋部分-这部分我没看明白 ,敬请高手指点.UMAT 中应力张量的度量为柯西(真实)应力STATEV (NSTATEV)STATE VARIABLES (Number of the State Variables)用于存储状态变量的矩阵,在增量步开始时将数值传递到 UMAT 中。也可在子程序 USDFLD 或UEXPAN 中先更新数据,然后增量步开始时将更新后的数据传递到 U
8、MAT 中。在增量步的结束必须更新状态变量矩阵中的数据。和应力张量矩阵不同的是:对于有限应变问题,除了材料本构行为引起的数据更新以外,状态变量矩阵中的任何矢量或者张量都必须通过旋转来考虑材料的刚体运动。-不懂, 请高手指教状态变量矩阵的维数 NATATEV,等于关键字“*DEPVAR”定义的数值。状态变量矩阵的维数通过ABAQUS 输入文件中的关键字“*DEPVAR” 定义,关键字下面数据行的数值即为状态变量矩阵的维数。材料常数的个数,等于关键字“*USER MATERIAL”中“CONSTANTS”常数设定的值。PROPS (NPROPS)材料常数矩阵,矩阵中元素的数值对应于关键字“*USE
9、R MATERIAL”下面的数据行。SSE,SPD,SCD分别定义每一增量步的弹性应变能Elastic Strain Energy,塑性耗散Plastic Dissipation和蠕变耗散Creep Dissipation。它们对计算结果没有影响,仅仅作为能量输出。STRAN (NTENS):应变矩阵;DSTRAN (NTENS):D-大抵代表 Deta,增量的意思-david应变增量矩阵;DTIME:增量步的时间增量;NDI:直接应力分量的个数;NSHR:剪切应力分量的个数;NTENS:总应力分量的个数,NTENS =NDI +NSHR。1.3 关于沙漏刚度控制和横向剪切刚度使用 UMAT
10、时需要注意单元的沙漏控制刚度和横向剪切刚度。通常减缩积分单元的沙漏控制刚度和板、壳、梁单元的横向剪切刚度是通过材料属性中的弹性性质定义的。这些刚度基于材料初始剪切模量的值,通常在材料定义中通过“*ELASTIC”选项定义。但是使用 UMAT 的时候,ABAQUS 对程序输入文件进行预处理的时候得不到剪切模量的数值。所以这时候用户必须使用“*HOURGLASS STIFFNESS”选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“*TRANSVERSE SHEAR STIFFNESS”选项来定义板、壳、梁单元的横向剪切刚度。-一个问题:得不到剪切模量的数值和解决方案:用户必须使用“*HOURGL
11、ASS STIFFNESS”选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“*TRANSVERSE SHEAR STIFFNESS”选项来定义板、壳、梁单元的横向剪切刚度1.4 关于 UMAT 的流程图和参数表格实例跟大家说说所谓的接口程序 Interface-FORTRAN 的知识在 Fortan 语言中,主调程序和被调程序是分别编译的.由于 Fortran90 对过程的许多功能做了扩充,有些功能单靠简单的调用语句已经无法反应,因而系统也就无法进行正确的编译 ,这时需要在主调程序中加入 interface 接口块, 通过它为主调程序和被调程序指明一个显示的接口.如果被调用中哑元含有假定形状
12、assumed-shape数组 ,或可选变元,或含键盘输入的参数 ,就需要 interface 接口块说明.一般来讲, 在Fortran90 程序之间需要提供 interface 块有三种方法:1.将 interface 接口块直接写入调用程序 ,并复制被调用程序的参数列表这种方法简单易用,但也相应增加了维护代码的工作量,因为只要被调用程序的参数列表发生变化 ,就必须相应改变 interface 接口块和调用call语句 .2.可以将一个软件包中所有程序的 interface 块写入一个模块中,该模块被软件包中的所有程序使用.这样做的优点是只需一个模块来检查 interface 定义,缺点是仍
13、需对此模块和调用语句进行维护.3.Fortran90 编译器可在 contains 语句后自动提供过程之间的 interface 块, 这种 interface 块可用于使用模块的任何程序.建议在同一个软件包中使用 23 的形式,在调用软件包的入口程序时采用 12 的形式!是不是在 UMAT 中,我们所编译的带接口的 Fortran 程序为调用程序, 原 ABAQUS 主程序为被调用程序, 调用程序中的第一部分我们先复制被调入程序的参数列表?似乎和 ABAQUS 主程序调用 UMAT有些相反了? 不过个人认为 interface 作为一个接口块,在 Fortran 语法中应该放在主调程序中,
14、且复制被调程序的参数列表.而 UMAT 的参数变量的声明, 只不过是为了和 ABAQUS 使用一致的变量格式,当Fortran 程序处理完材料的本构定义之后再以这一致的形式将变量值返回到 ABAQUS 主程序中吧2 关于 UMAT 用 Fortran90 可不可以的问题在论坛上搜索了关于这个问题,某位高手说是可以的 ,只要你自己装的 Fortran 编译器能成功编译你的Fortran90 程序即可,个人认为也是如此,不过我还没有证明过 !2.1 关于 Fortran77 的一些有用的简介1:Fortran77 的基本结构:1. 一个 Fortran 源程序由一个或者多个程序单位组成,每个独立的
15、程序单位以end语句结束2. 每个程序单位包括若干行不能一行写多条语句, 但是可以一个语句写成行;分为语句行执行语句行和非执行语句和非语句行 注释行源程序的书写格式:1. 不区分大小写:每行只能 80 列以内,并把 80 列分为四个区2. 1-5 列:标号区 1-5 位整数;第一列为*或者C时,为注释行3. 第 6 列,续行标志区 非空格或非 0;最多 19 个续行4. 7-72 列: 语句区书写语句:一行只能写一个语句5. 73-80 列:语句注释区一般做编号注释程序的编辑与运行:1. 创建源程序文件并编写源程序2. 编译并连接源文件3. 运行程序编译生成的可执行文件常量:六种1. 整型常量
16、Integer4 位:正 负整数和 02. 实型常量Real4 位:小数和指数形式3. 双精度常量Double precision8 位4. 复型常量Complex8 位5. 逻辑性常量Logical4 位6. 字符型常量Character1 位变量 变量名1. 第一个字符是字母第一个字符后可跟 1-5 个字母或者数字2. 不区分大小写3. 空格不起作用4. 允许变量名与语言中具有特定含义的字同名,但尽量不适用5. 尽量“见名知义 “ 变量类型不同的变量类型用来存放不同类型的常量数据.变量相应的也有六种;变量在使用前必须首先对其进行类型说明,三种说明方法: 按优先级别排列1. 类型说明语句:
17、类型 变量名列表,多个变量名之间用逗号隔开,如REAL A,B,CDOUBLE PRECISION X,Y,Z或者 REAL*8 X,Y,Z CHARACTER*5 缺省字符长度 5 STR1,STR2*8,STR3*19此处 ,STR1 未指明长度,则默认使用缺省长度 5;STR2 的长度为 8;STR3 的长度为 19 2. IMPLCIT 语句:IMPLICIT 类型 字母表,类型字母表,如: IMPLICIT REAL(A-D),INTERGER(I-M),DOUBLE PRECISION (X,Z) 3. I-N 规则:Fortran 规定,不加说明的情况下,I-N 为整型,其他都为
18、实型几点说明类型语句说明位于所有可执行语句的前面;IMPLICIT 语句位于最前面;IMPLICIT NONE 取消 IMPLICIT 说明和 I-N 规则,所有的变量必须显式说明;只在本程序单位有效.2.2 关于 Fortran77 的一些有用的简介2:算术表达式:1. 运算符: +, -, *, /, *2. 优先级: ( ), * , * / , +-3. 书写问题1. * 不能省略2. 括号不分大小写,成对出现3. 多次乘方,按 先右边后左边处理4. 运算符不能连续出现,要用小括号隔开5. 运算顺序 )-函数-*-*,/-+,-6. 运算中的类型问题:运算类型相同:结果仍为原类型;不同
19、, 则自动转换成同一类型7. 误差问题:1. 溢出:超出有效数字范围-解决:很大或者很小的数用实型的指数表示2. 误差:由于有效数字的位数限制,实型数运算存在误差 -解决:转换成双精度型或者避免因为书写不当造成有效数字的丢失简单输出 输入语句 :输入输出三要素:对象哪些数据;格式;设备.输出语句输出语句的分类:格式输出表控格式输出 系统标准格式;无格式输出二进制1. 表控输出语句:按计算机系统规定的格式输出:系统自动为每种类型的数据规定了列数1. 整数的表控输出格式与具体的计算机系统有关: 规定每个整数占 13 列, 打印在右端,左补空格;2. 实数的表控输出格式:规定每个实数占 17 列,打
20、印在右端 ,左补空格,小数部分占 7 列;当实数的绝对值=10*7 或 : print*,56.8,1252. write(*,*)输入语句输入 输出三要素:对象;格式;设备.分类:同上1. 表控输入语句1. 自由格式输入语句:read*,;read(*,*)2. 输入数据以逗号或者空格作为间隔3. 变量名称为输入表4. 输入的数据应和输入表的变量个数类型 次序严格地一一对应 ;少了, 程序停止,等待继续输入;多了,程序继续进行,多余的不起作用;较多的数据可以几个一组,回车, 再输入几个一组,回车.5. 重复数据,可以 7*3-7,7,76. 每一个 read(*,*)和 write(*,*)
21、语句从一个新的记录 以回车结束的一批输入 输出数据 开始读数 输出1. 例如:read(*,*) A,B,C2. read(*,*) D,I,J3. 输入: 2.3,-63.5回车4. 6.4,91.0回车5. 5,8回车 6. 结果: A=2.3,B=-63.5,C=6.4,7. 从新记录开始读数 8. D=5.0,I=8,J 未被赋值PARAMETER 语句作用:将程序中经常用到的参数或字符串定义成一个符号常量,其值不可改变.语句:parameter(p1=c1,p2=c2,.,pn=cn)注意:1. 符号常量的命名规则与变量名相同,但在程序中其值不可改变 ,也不能赋值;2. 符号变量也有
22、类型,可用前面的三种类型说明方法说明类型 ;3. 参数语句是非执行语句,位于所有可执行语句的前面 ,单位与类型说明语句的后面;4. 一条语句可以定义多个符号常量;5. 优点:方便修改程序END,STOP,PAUSE 语句END 语句: 结束标志 ,有且仅有一条PAUSEn语句:暂定执行; 用于调试程序,n 可以是一个字符串或不超过 5 位的数STOPn语句:停止运行语句;用于调试程序,n 可以是一个字符串或不超过 5 位的数2.3 关于 Fortran77 的一些有用的简介3:逻辑运算和选择结构 关系表达式1. 构成选择判断的基本式子2. 关系运算符:1. .GT.greater than 2
23、. .GE.greater than or equal to =3. .LT.limiter than 4. 运算结果:逻辑值:真.TRUE.假.FALSE.5. 运算顺序:算术运算 关系运算 逻辑表达式1. 运算符:1. .and.2. .or.3. .not.4. .eqv.逻辑等5. .neqv.逻辑不等2. 一般形式:3. 结果:逻辑值:真.TRUE.假.FALSE.4. 运算顺序:算术运算-关系运算-逻辑运算5. 逻辑运算优先级:.not.-.and.-.or.-.eqv.-.neqv.关于 Fortran77 的一些有用的简介4:IF 类选择结构 用块 IF 实现选择结构:三种典型
24、形式1. 基本形式1. IF(条件 ) THEN (块 IF 语句)2. 块 1 (THEN 块)3. ELSE (ELSE 语句)4. 块 2 (ELSE 块)5. ENDIF (ENDIF 语句)6. 说明:IF.THEN 语句为块 IF 结构的入口语句;ENDIF 语句为出口语句,必须一一对应,配对使用2. 简单结构1. IF(条件 ) THEN 2. 块3. ENDIF4. 说明:没有 else 块3. 嵌套结构1. IF( ) THEN2. 块 13. ELSE IF( ) THEN4. 块 25. .6. ELSE IF( ) THEN7. 块 n8. ELSE 块 n+19. E
25、NDIF 逻辑 IF 语句只用一行表示一种选择结构,当且仅当条件成立时执行 ,并且只执行一条语句;IF(条件) 语句 算术 IF 语句IF N1,N2,N3当算术表达式的值0 执行标号为 N1 的语句;关于 Fortran77 的一些有用的简介5:循环结构 结构形式:循环体由一些可执行的语句组成 +循环控制语句控制循环的开始和结束 分类:条件型循环和计数型循环DO 循环GOTO 语句实现循环 一般形式:GOTO 其中:S1 为语句标号 功能:程序执行到此语句时,无条件的转向标号为 S1 的语句DO 语句实现循环 当循环的初值终值 循环次数都已知时 ,可用; 组成:一个 DO 语句和循环体组成
26、一般形式: DO S1 I=E1,E2 ,E3 DO I=E1,E2 ,E3S1 ENDDO例如DO 10 I=1,19,2 DO 10 I=E1,19 ,2SUM=SUM+1S1 CONTINUE 10 SUM=SUM+1 DO I=1,19,2SUM=SUM+1ENDDO 说明1. I 为循环变量,S1 为语句标号, 是本程序单位中另一可执行语句的标号;2. 步长可以省略,缺省值=1;3. 循环初值E1,终值E2和步长E3 都可以是常量变量 表达式;4. 由于实数在内存中存储的误差,I,E1,E2,E3 尽可能用振型量5. E1,E2,E3 都可正可负,E1,E2,可为 0,但是 E3 不
27、能为 0. 具体执行过程1. 执行 DO 语句, 首先计算表达式 E1,E2,E3 的值,若他们的类型与循环变量 I 不一致,则自动转换成循环变量的类型2. 将 E1 的值赋予循环变量 I,及执行赋值语句:I=E1;3. 计算循环次数:R=MAX0(E2-E1+E3)/E3,MAX0 表示从多个整型变量中取最大的一个 ;4. 检查循环次数:若 R=0 则不执行循环体内的语句,跳出循环;R0 则执行循环体内的语句5. 执行循环终端语句:I=I+E3,即是循环变量获得一个新值, 而循环次数 R 自动减 1;6. 返回步骤 4,继续执行, 直到 R=0. CONTINUE 语句循环终端语句必须是可执
28、行语句;那么,这种作为循环终端的语句具有双重作用 :一是作为循环终端的标志;而是要完成自身的功能.因此影响了程序的可读性.FORTRAN 用一个专门的语句作为 DO 循环的终端语句,即 CONTINUE 语句.它自身没有任何功能. 一些规定1. 循环变量在循环体内只能被引用,不能被赋值;2. 在执行 DO 循环体期间,E1,E2,E3 的值不能被改变,因为他们决定了循环的次数3. 离开 DO 循环后, 循环变量可以在循环体外被引用, 它的值为脱离循环时最后一次被赋的值;4. 程序中用到转移语句,规定:只允许从循环体内-体外;反之不行;5. 循环终端语句必须是除 GOTO,块 IF,ENDIF,
29、END 和 STOP 语句外的任何可执行语句 DO 循环的嵌套在一个 DO 循环中还可以包含一个或者多个完整的 DO 循环,这就是 DO 循环的嵌套.一般形式:DO 10 I=1,10.DO 20 J=1,10.20 CONTINUE.10 CONTINUE说明: 嵌套要完整,不能交叉 循环变量的名字,规定:并列的循环:循环变量的名字可以相同 ;嵌套的循环:循环变量的名字不可以相同 若多层循环的结束语句在同一个地方,可以共用一条 CONTINUE 语句 控制转向语句的使用体内-体外当型循环的实现在无法确定循环次数的情况下可以使用当型循环.当型循环是指执行循环体要依据实现给定的条件:当条件成立时
30、执行循环,否则不执行. 用 DO-WHILE 语句实现当型循环一般形式:DO S1 , WHILE(条件).S1 用块 IF 和 GOTO 语句实现循环一般形式:S1 IF(条件) THEN块GOTO S1ENDIF直到型循环的实现所谓直到型循环,是指先执行循环体,再判断条件. 如果条件为假,继续执行循环体,直到条件为真 时终止循环. 用逻辑 IF 语句实现:S1 循环体IF(条件) GOTO S1几种循环形式的关系和比较 DO 循环适用于已知循环次数的情况 几种循环可以互换DO 循环:条件型循环 可用次数作为条件当型循环:直到型循环当型:块 IF 语句(单边)+GOTO 语句( 先判断后执行
31、 )直到型:逻辑 IF 语句+GOTO 语句(先执行后判断) 各种循环可以相互嵌套2.4 关于 Fortran77 的一些有用的简介6:数据的输入和输出数据输入 输出需要确定的三个基本要素:输入输出的设备输入输出的格式输入输出的数据系统中隐含的 输入输出的设备为:键盘显示器和打印机说明:#(设备 ,格式)数据列表,当设备显示为*,为默认设备输出, 好像是显示器 或默认设备输入, 键盘吧;格式为*,默认格式输出输入-david有格式的输出 输出语句的一般形式: WRITE (*,S1) S1 FORMAT(格式说明)或者 PRINT S1,S1 FORMAT(格式说明)格式说明符: 主要介绍 :
32、I,F,E,D,G,L,A,(撇号),H,X,r(重复系数),/(斜杠)I 编辑符(Integer) 作用:用于整型数据的输出.一般形式:Iw 或 Iw.m 其中:I 表示整型输出,w 为字段宽度,m 表示输出数据的最少数字位数 注意:数据输出时,在指定的区域内向右靠齐;如果数据的实际位数大于指定的字段宽度 w,则不输出数据, 而在该区域内充满“*“号 ;当 m 大于数据的实际位数时,前面添 0,若小于数据实际位数,则不起作用F 编辑符(Fixed point number) 作用:用于实数的小数形式输出,一般形式:Fw.d 其中:F 表示实数的小数形式输出;w 为字段宽度;d 为输出数据的小
33、数位数E 编辑符(IExponent)作用:用于实数的指数形式输出,一般形式:Ew.d其中:E 表示实数的指数形式输出;w 为字段宽度;d 为数字部分的小数位数注意:指数部分占 4 列,负号占 1 列,小数点前为 0.如 123.45-0.12345E+03D 编辑符(Double precision)作用:用于双精度的指数形式输出,用法和 E 编辑符相仿.一般形式 w.dG 编辑符作用:由系统根据实际数据的大小来决定使用 F 编辑符还是 E 编辑符.一般形式:Gw.dL 编辑符作用:用于逻辑型数据的输出,一般形式 w其中表示整型输出,w 为字段宽度A 编辑符作用:用于字符型数据的输出,一般形
34、式:Aw 或 A其中:A 表示整型输出,w 为字段宽度;若不指定,则表示按实际长度输出 (撇号) 编辑符作用:用于输出字符常量,即把撇号内的字符串原样输出 .注意:如果输出的字符中包含撇号,则用两个连续的撇号代表一个要输出的撇号H 编辑符作用:用于输出字符常量.一般形式 :nH其中:H 表示输出字符常量;n 为输出字符个数;str 为输出的字符串 (较少使用)X 编辑符作用:用于输出空格.一般形式 :nX其中:X 表示输出空格 ;n 表示输出的空格数重复系数 r在 format 语句中,如果出现几个(或者几组) 相同的格式编辑符,则可以利用重复系数而只写一个(或者一组)编辑符.如 FORMAT
35、(A=,/,4(5(1X,F4,0),/)反斜杠/编辑符作用:结束本记录的输出,开始下一个记录的输出,通常指换行.WRITE 语句和 FORMAT 语句的相互作用WRITE 语句的输出变量个数与 FORMAT 语句的编辑符 (不含撇号,H 和 X)个数可以相等,也可以不等;如果编辑符个数多,则剩余的编辑符不起作用;如果变量的个数多 ,则当编辑符用完后,重新使用该格式说明, 当如果格式说明含带重复系数的编辑符组,则格式说明用完后,只有最右面一个带重复系数的编辑符组(包含重复系数)及其右面的编辑符被重复使用. 可以有空格式说明,如 FORMAT(),用于输出一个空行 .有格式的输入有格式的输入语句
36、 一般形式:READ(*,S1) S1 FORMAT(格式说明 由各种格式编辑符构成)例如:READ(*,100) A,B,C100 FORMAT(F5.1,E12.2,F7.2)END键盘输入 :_15.7_2345.67E+04_705.83enter在 PRINTWRITEREAD 语句中包含格式说明例如: PRINT 100,K,Y100 FORMAT(18,F7.2)也可以写成: PRINT(18,F7.2),K,Y注意写法 : (.)关于 Fortran77 的一些有用的简介7:数组使用原则:“先声明 ,后使用“说明方法: 用类型说明语句(显式说明) 用 DIMENSION 语句(
37、隐式说明)数组的说明和数组元素的引用 用类型语句说明数组1. 一般形式: 类型说明 数组说明符2. 其中:数组说明符的一般形式为:数组名(维数说明符,.)维数说明符,由“下标下界:下标上界“组成3. 例如:REAL X(1:10),W(1:2,1:3),K(10:20)或者 INTEGER B(1:100),PY(0:2,0:3,0:5) 用 DIMENSION 语句说明数组1. 一般形式:DIMENSION 数组说明符,. 说明:1. 在数组说明符中,维数说明符(下标)的个数成为数组的维数2. 维数说明符只能使用整型常量或者整型符号常量表达式:如 PARANETER(I=1,J=10) RE
38、AL KX(I:J+5)3. 维数说明符的下标下界为 1 时,可以省略. 如:REAL X(1:10)-REAL X(10)4. 数组说明语句必须写在所有可执行的语句之前.属于非执行语句 数组元素的引用1. 一般形式:数组名(下标,.)2. 即要有确定的数组名和下标值,如 XN(5),W(1,3),KW(1,2,3)3. 引用数组元素时,下标可用算术表达式,如果算术表达式的值为实行,则自动取整.数组的逻辑结构和存储结构逻辑结构:数组所表示的实际数据结构存储结构:数组在机器内存储时的排列结构 一维数组逻辑结构:依次排列的一串数据存储结构:一组连续存放的一列数据块 二维数组逻辑结构:一张二维数据表
39、存储结构:一组按列连续存放的数据块 三维数组逻辑结构:若干张二维数据表存储结构:一组按页连续存放的数据块数组的输入和输出三种方式:用 DO 循环用隐含 DO 循环用数组名 用 DO 循环实现数组的输入输出1. 优点:数组元素的输入输出次序可由用户控制2. 缺点:做一次循环就换行输入或输出 用隐含 DO 循环实现数组的输入输出1. 优点:既能控制数组元素的输入输出顺序,又能控制一行内输入输出数据的个数2. 例如:READ(*,*) (G(I,J),J=1,3),I=1,2),由于是一个 READ 语句,所以既可以一行输入,也可以多行输入,键盘输入如下:86,75,72enter87,70,83e
40、nter3. 注意:一个 READ 语句可以多行输入;但是多个 READ 语句时,每一个 READ 语句必须从心的一行读数.用数据名进行数组的输入输出使用时,其顺序要与数组元素在机器内的存储顺序一致例如:DIMENSION K(5)READ *,K-对数组进行整体操纵等价于:READ*,K(1),K(2),K(3),K(4),K(5)也等价于:READ*,(K(I),I=1,5)使用 DATA 语句给数组 赋初值 一般形式: DATA 变量列表 初值表,变量列表初值表 功能:在程序编译期间给变量或者数组赋初值.其中, 变量列表可以是变量名 数组名数组元素隐 DO 循法;初值表只能是常量,不允许
41、出现任何形式的表达式 例如: DATA A, B/7.85,9.1/代表赋初值 A=7.85,B=9.1-david, I,J, K /5,10,15/代表赋初值I=5,J=10,K=15-david, 例如: DIMENSION K(2,3)DATA(K(I,J),J=1,3),I=1,2) /90,23,20,42,14,32/-初值列表2 维 3 列, I=1: 90 23 20I=2: 42 14 32或DATA K/90,42,23,14,20,32/-排列为按列排 ,排满一列之后,再排下一列; 90 23 20 -david42 14 32 例如:DIMENSION A(10)DA
42、TA A/10*1.0/(表示10 个 1.0)注意:DATA 语句属于说明语句,但是它可以放在 END 语句之前的任意行;当程序中有多个 DATA 语句给同一个变量赋初值时,以最后一条为准;程序在编译期间给变量赋予初值 ,在程序执行期间,DATA 语句不起任何作用!2.5 关于 Fortran77 的一些有用的简介8子程序FORTRAN 子程序: 包括函数子程序,子例行程序, 数据块子程序执行:从主程序开始执行,遇到调用语句再执行相应的子程序 .不同类型的子程序,关键字不同,调用方法也不同 函数子程序:一种可以作为函数来调用的子程序(“外部函数“)1. 定义:一般形式,由 FUNCTION
43、语句和子程序体组成类型说明 FUNCTION 函数名(虚参表).(子程序体)ENDFUNCTION 函数名(虚参表)类型说明 函数名(子程序体)END2.1. FUNCTION 语句:是函数子程序的第一条语句,标志着该函数子程序的开始1.类型说明 FUNCTION 函数名(虚参表)2. 注意:1. 虚元也有类型,需在子程序体中说明1. 例如:REAL FUNCTION INTEP(X1,X2,X3)2. INTEGER X1,X2,X32. 函数名的命名规则和类型都和变量相同3. 虚参可以是变量名数组名 子程序名,但不允许用常量和数组元素,它表示了函数自变量的个数顺序和类型.2. 子程序体:完
44、成一个具体任务的程序段3. 注意:1. 若无虚参时,括号不能省2. 函数子程序中所有变量和标号(除函数名和虚参外),与其他程序单位无任何关系3. 函数体的说明部分包括对虚参和本函数体内所用变量和数组的说明4. 函数体中可设置一条或者多条 RETURN 语句, 表示执行到此语句时返回调用程序.1. 当 RETURN 语句和 END 语句紧挨着的时候,可省略 RETURN 语句2. 也可以不设 RETURN 语句 ,但需从中间返回时,必须设置 RETURN 语句5. 函数名的作用:函数名在函数体中一定要被赋值,因为函数名把函数值带回调用程序. 函数子程序的调用1. 一般形式:调用方式和内部函数相似
45、: 函数名(实参数) 或 函数名( )2. 说明:1. 调用程序中函数名必须与函数子程序中定义的函数名相同2. 实参与虚参在个数类型 位置上必须一一对应,但名字可以不同3. 当虚参是变量名的时候,实参可以是常量变量数组元素或者表达式;但是当虚参要在函数体中被赋予初值的时候,则实参不可以是常量或者表达式 因为两者共用一个存储单元4. 函数子程序是一个独立的程序单位,可以作为一个单独的源程序进行存贮和编译 ,并与调用程序连编后才能起作用.4 材料本构的相关力学知识虽然目前要做的工作就是用 UMAT 把一个新的材料的本构加进 ABAQUS 中调用, 但是我并不想仅仅局限于此.在这个过程中,我会把自己遇到的所有相关问题学懂弄透再去编这个程序.所以估计我这个帖子会很长滴!我力学知识不是很好, 所以这两天要好好学习一下力学知识 ,主要是弹塑性力学吧!说说弹塑性力学-1弹性力学 塑性力学 弹塑性力学弹