各个楼层及内容索引2-------------------------------------什么是UMAT3-------------------------------------UMAT功能简介4-------------------------------------UMAT开始的变量声明5-------------------------------------UMAT中各个变量的详细解释6-------------------------------------关于沙漏和横向剪切刚度7-------------------------------------UMAT流程和参数表格实例展示8-------------------------------------FORTRAN语言中的接口程序Interface9-------------------------------------关于UMAT是否可以用Fortran90编写的问题10-17--------------------------------Fortran77的一些有用的知识简介20-25\30-32-----------------------弹塑性力学相关知识简介34-37--------------------------------用户材料子程序实例JOhn-cook模型压缩包下载38-------------------------------------JOhn-cook模型本构简介图40-------------------------------------用户材料子程序实例JOhn-cook模型完整程序+david详细注解[欢迎大家来看看,并提供意见,完全是自己的diy的,不保证完全正确,希望共同探讨,以便更正,带"?"部分,还望各位大师\同仁指教]1 什么是UMAT1.1 UMAT功能简介[-摘自庄茁老师的书UMAT子程序具有强大的功能,使用UMAT子程序:(1)可以定义材料的本构关系,使用ABAQUS材料库中没有包含的材料进行计算,扩充程序功能。
ABAQUS软件2003年度用户年会论文集(2)几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋予ABAQUS中的任何单元;(3)必须在UMAT中提供材料本构模型的雅可比(Jacobian)矩阵,即应力增量对应变增量的变化率。
(4)可以和用户子程序“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,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)CINCLUDE'ABA_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),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)是一个NTENS[Number of the Tensions----david]维的方阵,称作雅可比矩阵,应力增量/应变增量的偏导数,DDSDDE (I ,J)表示增量步结束时第J个应变分量的改变引起的第I个应力增量的变化!雅可比是一个对称矩阵,除非在“*USER MATERIAL”语句中加"UNSYMM"参数STRESS (NTENS)应力张量矩阵,对应NDI[Number of the Direct Components--david]个直接分量和NSHR[Number of the shear Components-david]个剪切分量.在增量步的开始,应力张量矩阵中的数值通过UMAT和主程序之间的接口传递到UMAT中,在增量步的结束,UMAT将对应力张量矩阵更新,即[return].对于包含刚体转动的有限应变问题,一个增量步条用UMAT之前就已经对应力张量进行了刚体转动,因此在UMAT中只需处理应力张量的共旋部分-------这部分我没看明白,敬请高手指点.UMAT中应力张量的度量为柯西(真实)应力STATEV (NSTATEV)[STATE VARIABLES (Number of the State Variables)]用于存储状态变量的矩阵,在增量步开始时将数值传递到UMAT中。
也可在子程序USDFLD或UEXPAN中先更新数据,然后增量步开始时将更新后的数据传递到UMAT中。
在增量步的结束必须更新状态变量矩阵中的数据。
和应力张量矩阵不同的是:对于有限应变问题,除了材料本构行为引起的数据更新以外,状态变量矩阵中的任何矢量或者张量都必须通过旋转来考虑材料的刚体运动。
-----不懂,请高手指教状态变量矩阵的维数NATATEV,等于关键字“*DEPVAR”定义的数值。
状态变量矩阵的维数通过ABAQUS输入文件中的关键字“*DEPVAR”定义,关键字下面数据行的数值即为状态变量矩阵的维数。
材料常数的个数,等于关键字“*USER MATERIAL”中“CONSTANTS”常数设定的值。
PROPS (NPROPS)材料常数矩阵,矩阵中元素的数值对应于关键字“*USER 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时需要注意单元的沙漏控制刚度和横向剪切刚度。
通常减缩积分单元的沙漏控制刚度和板、壳、梁单元的横向剪切刚度是通过材料属性中的弹性性质定义的。
这些刚度基于材料初始剪切模量的值,通常在材料定义中通过“*ELASTIC”选项定义。
但是使用UMAT的时候,ABAQUS对程序输入文件进行预处理的时候得不到剪切模量的数值。
所以这时候用户必须使用“*HOURGLASS STIFFNESS”选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“*TRANSVERSE SHEAR STIFFNESS”选项来定义板、壳、梁单元的横向剪切刚度。
------------一个问题:得不到剪切模量的数值和解决方案:用户必须使用“*HOURGLASS STIFFNESS”选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“*TRANSVERSE SHEAR STIFFNESS”选项来定义板、壳、梁单元的横向剪切刚度1.4关于UMAT的流程图和参数表格实例跟大家说说所谓的接口程序Interface--FORTRAN的知识在Fortan语言中,主调程序和被调程序是分别编译的.由于Fortran90对过程的许多功能做了扩充,有些功能单靠简单的调用语句已经无法反应,因而系统也就无法进行正确的编译,这时需要在主调程序中加入interface接口块,通过它为主调程序和被调程序指明一个显示的接口.如果被调用中哑元含有假定形状[assumed-shape]数组,或可选变元,或含键盘输入的参数,就需要interface接口块说明.一般来讲,在Fortran90程序之间需要提供interface块有三种方法:1.将interface接口块直接写入调用程序,并复制被调用程序的参数列表这种方法简单易用,但也相应增加了维护代码的工作量,因为只要被调用程序的参数列表发生变化,就必须相应改变interface接口块和调用[call]语句.2.可以将一个软件包中所有程序的interface块写入一个模块中,该模块被软件包中的所有程序使用.这样做的优点是只需一个模块来检查interface定义,缺点是仍需对此模块和调用语句进行维护.3.Fortran90编译器可在contains语句后自动提供过程之间的interface块,这种interface块可用于使用模块的任何程序.建议在同一个软件包中使用2\3的形式,在调用软件包的入口程序时采用1\2的形式![是不是在UMAT中,我们所编译的带接口的Fortran程序为调用程序,原ABAQUS主程序为被调用程序,调用程序中的第一部分我们先复制被调入程序的参数列表似乎和ABAQUS主程序调用UMAT 有些相反了不过个人认为interface作为一个接口块,在Fortran语法中应该放在主调程序中,且复制被调程序的参数列表.而UMAT的参数变量的声明,只不过是为了和ABAQUS使用一致的变量格式,当Fortran程序处理完材料的本构定义之后再以这一致的形式将变量值返回到ABAQUS主程序中吧] 2 关于UMAT用Fortran90可不可以的问题在论坛上搜索了关于这个问题,某位高手说是可以的,只要你自己装的Fortran编译器能成功编译你的Fortran90程序即可,个人认为也是如此,不过我还没有证明过!2.1关于Fortran77的一些有用的简介[1]:Fortran77的基本结构:1.一个Fortran源程序由一个或者多个程序单位组成,每个独立的程序单位以'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.整型常量[Integer]4位:正\负整数和02.实型常量[Real]4位:小数和指数形式3.双精度常量[Double precision]8位4.复型常量[Complex]8位5.逻辑性常量[Logical]4位6.字符型常量[Character]1位变量•变量名1.第一个字符是字母第一个字符后可跟1-5个字母或者数字2.不区分大小写3.空格不起作用4.允许变量名与语言中具有特定含义的字同名,但尽量不适用5.尽量"见名知义"•变量类型不同的变量类型用来存放不同类型的常量数据.变量相应的也有六种;变量在使用前必须首先对其进行类型说明,三种说明方法:按优先级别排列1. 类型说明语句:类型变量名列表,多个变量名之间用逗号隔开,如REAL A,B,CDOUBLE PRECISION X,Y,Z[或者REAL*8X,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为整型,其他都为实型几点说明类型语句说明位于所有可执行语句的前面;IMPLICIT语句位于最前面;IMPLICIT NONE取消IMPLICIT说明和I-N规则,所有的变量必须显式说明;只在本程序单位有效. 2.2关于Fortran77的一些有用的简介[2]:算术表达式:1.运算符: +, -,*,/,**2.优先级: ( ),** ,*\ / ,+\-3.书写问题1.* 不能省略2.括号不分大小写,成对出现3.多次乘方,按'先右边后左边'处理4.运算符不能连续出现,要用小括号隔开5.运算顺序)---->函数---->**----->*,/----->+,-6.运算中的类型问题:运算类型相同:结果仍为原类型;不同,则自动转换成同一类型7.误差问题:1.溢出:超出有效数字范围-------->解决:很大或者很小的数用实型的指数表示2.误差:由于有效数字的位数限制,实型数运算存在误差-------->解决:转换成双精度型或者避免因为书写不当造成有效数字的丢失简单输出\输入语句:输入\输出三要素:对象[哪些数据];格式;设备.输出语句输出语句的分类:格式输出'表控格式输出[系统标准格式];无格式输出[二进制]1.表控输出语句:按计算机系统规定的格式输出:系统自动为每种类型的数据规定了列数1.整数的表控输出格式[与具体的计算机系统有关]:规定每个整数占13列,打印在右端,左补空格;2.实数的表控输出格式:规定每个实数占17列,打印在右端,左补空格,小数部分占7列;[当实数的绝对值>=10**7或<1时,按标准的指数格式输出,共占15列,指数4列,小数6列2.表控格式输出语句:1.print*,<输出表列>:print*,56.8,1252.write(*,*)<输出表列>输入语句输入\输出三要素:对象;格式;设备.分类:同上1.表控输入语句1.自由格式输入-->语句:read*,<输入表列>;read(*,*)<输入表列>2.输入数据以逗号或者空格作为间隔3.变量名称为输入表4.输入的数据应和输入表的变量个数\类型\次序严格地一一对应;少了,程序停止,等待继续输入;多了,程序继续进行,多余的不起作用;较多的数据可以几个一组,回车,再输入几个一组,回车...5.重复数据,可以7*3---->7,7,76.每一个read(*,*)和write(*,*)语句从一个新的记录[以回车结束的一批输入\输出数据]开始读数\输出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.符号变量也有类型,可用前面的三种类型说明方法说明类型;3.参数语句是非执行语句,位于所有可执行语句的前面,单位与类型说明语句的后面;4.一条语句可以定义多个符号常量;5.优点:方便修改程序END,STOP,PAUSE语句END语句:结束标志,有且仅有一条PAUSE[n]语句:暂定执行;用于调试程序,n可以是一个字符串或不超过5位的数STOP[n]语句:停止运行语句;用于调试程序,n可以是一个字符串或不超过5位的数2.3关于Fortran77的一些有用的简介[3]:逻辑运算和选择结构•关系表达式1.构成选择判断的基本式子2.关系运算符:1..GT.[greater than]>2..GE.[greater than or equal to]>=3..LT.[limiter than]<4..LE.[limiter than or equal to]<=5..EQ.[equal to]=6..NE.[not equal to]≠3.一般形式:<算术量或者算术表达式><关系运算符><算术量或者算术表达式>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实现选择结构:三种典型形式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(条件)THEN2.块3.ENDIF4.说明:没有else块3.嵌套结构1.IF()THEN2.块13.ELSE IF() THEN4.块25....6.ELSE IF()THEN7.块n8.[ELSE块n+1]•说明1.I为循环变量,S1为语句标号,是本程序单位中另一可执行语句的标号;2.步长可以省略,缺省值=1;3.循环初值[E1],终值[E2]和步长[E3]都可以是常量\变量\表达式;4.由于实数在内存中存储的误差,I,E1,E2,E3尽可能用振型量5.E1,E2,E3都可正可负,E1,E2,可为0,但是E3不能为0.•具体执行过程1.执行DO语句,首先计算表达式E1,E2,E3的值,若他们的类型与循环变量I不一致,则自动转换成循环变量的类型2.将E1的值赋予循环变量I,及执行赋值语句:I=E1;3.计算循环次数:R=MAX0(E2-E1+E3)/E3,MAX0表示从多个整型变量中取最大的一个;4.检查循环次数:若R=0则不执行循环体内的语句,跳出循环;R≠0 则执行循环体内的语句5.执行循环终端语句:I=I+E3,即是循环变量获得一个新值,而循环次数R自动减1;6.返回步骤4,继续执行,直到R=0.•CONTINUE语句循环终端语句必须是可执行语句;那么,这种作为循环终端的语句具有双重作用:一是作为循环终端的标志;而是要完成自身的功能.因此影响了程序的可读性.FORTRAN用一个专门的语句作为DO循环的终端语句,即CONTINUE语句.它自身没有任何功能.•一些规定1.循环变量在循环体内只能被引用,不能被赋值;2.在执行DO循环体期间,E1,E2,E3的值不能被改变,因为他们决定了循环的次数3.离开DO循环后,循环变量可以在循环体外被引用,它的值为脱离循环时最后一次被赋的值;4.程序中用到转移语句,规定:只允许从循环体内----->体外;反之不行;5.循环终端语句必须是除GOTO,块IF,ENDIF,END和STOP语句外的任何可执行语句•DO循环的嵌套在一个DO循环中还可以包含一个或者多个完整的DO循环,这就是DO循环的嵌套.一般形式:DO 10I=1,10...DO20J=1,10...20CONTINUE...10CONTINUE说明:•嵌套要完整,不能交叉•循环变量的名字,规定:并列的循环:循环变量的名字可以相同;嵌套的循环:循环变量的名字不可以相同•若多层循环的结束语句在同一个地方,可以共用一条CONTINUE语句•控制转向语句的使用[体内----->体外]当型循环的实现在无法确定循环次数的情况下可以使用当型循环.当型循环是指执行循环体要依据实现给定的条件:当条件成立时执行循环,否则不执行.•用DO-WHILE语句实现当型循环一般形式:DO S1 [,]WHILE(条件)...S1<终端语句>•用块IF和GOTO语句实现循环一般形式:S1IF(条件)THEN块GOTO S1ENDIF直到型循环的实现所谓直到型循环,是指先执行循环体,再判断条件.如果条件为'假',继续执行循环体,直到条件为'真'时终止循环.•用逻辑IF语句实现:S1循环体IF(条件)GOTO S1几种循环形式的关系和比较•DO循环适用于已知循环次数的情况•几种循环可以互换DO循环:条件型循环[可用次数作为条件]当型循环:直到型循环当型:块IF语句(单边)+GOTO语句(先判断后执行)直到型:逻辑IF语句+GOTO语句(先执行后判断)•各种循环可以相互嵌套2.4关于Fortran77的一些有用的简介[6]:数据的输入和输出数据输入\输出需要确定的三个基本要素:输入\输出的设备输入\输出的格式输入\输出的数据系统中隐含的输入\输出的设备为:键盘\显示器和打印机[说明:####(设备,格式)数据列表,当设备显示为*,为默认设备输出,好像是显示器\或默认设备输入,键盘吧;格式为*,默认格式输出\输入-david]有格式的输出输出语句的一般形式:WRITE (*,S1) <输出列表>S1FORMAT(格式说明)或者PRINT S1,<输出列表>S1FORMAT(格式说明)格式说明符:主要介绍: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为输出数据的小数位数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 编辑符作用:用于字符型数据的输出,一般形式:Aw或A其中:A表示整型输出,w为字段宽度;若不指定,则表示按实际长度输出' (撇号) 编辑符作用:用于输出字符常量,即把撇号内的字符串原样输出.注意:如果输出的字符中包含撇号,则用两个连续的撇号代表一个要输出的撇号H 编辑符作用:用于输出字符常量.一般形式:nH<str>其中:H表示输出字符常量;n为输出字符个数;str为输出的字符串 (较少使用)X 编辑符作用:用于输出空格.一般形式:nX其中:X表示输出空格;n表示输出的空格数重复系数r在format语句中,如果出现几个(或者几组)相同的格式编辑符,则可以利用重复系数而只写一个(或者一组)编辑符.如FORMAT('A=',/,4(5(1X,F4,0),/))反斜杠/编辑符作用:结束本记录的输出,开始下一个记录的输出,通常指换行.WRITE语句和FORMAT语句的相互作用WRITE语句的输出变量个数与FORMAT语句的编辑符(不含撇号,H和X)个数可以相等,也可以不等;如果编辑符个数多,则剩余的编辑符不起作用;如果变量的个数多,则当编辑符用完后,重新使用该格式说明,当如果格式说明含带重复系数的编辑符组,则格式说明用完后,只有最右面一个带重复系数的编辑符组(包含重复系数)及其右面的编辑符被重复使用.可以有空格式说明,如FORMAT(),用于输出一个空行.有格式的输入有格式的输入语句一般形式:READ(*,S1)<输入列表>S1FORMAT(格式说明[由各种格式编辑符构成])例如:READ(*,100)A,B,C100FORMAT(F5.1,E12.2,F7.2)END键盘输入:_15.7_2345.67E+04_705.83enter在PRINT\WRITE\READ语句中包含格式说明例如:PRINT 100,K,Y100FORMAT(18,F7.2)也可以写成:PRINT'(18,F7.2)',K,Y关于Fortran77的一些有用的简介[7]:数组使用原则:"先声明,后使用"说明方法:•用类型说明语句(显式说明)•用DIMENSION语句(隐式说明)数组的说明和数组元素的引用•用类型语句说明数组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)REAL 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.引用数组元素时,下标可用算术表达式,如果算术表达式的值为实行,则自动取整.数组的逻辑结构和存储结构逻辑结构:数组所表示的实际数据结构存储结构:数组在机器内存储时的排列结构•一维数组逻辑结构:依次排列的一串数据存储结构:一组连续存放的一列数据块•二维数组逻辑结构:一张二维数据表存储结构:一组按列连续存放的数据块•三维数组逻辑结构:若干张二维数据表存储结构:一组按页连续存放的数据块数组的输入和输出三种方式:用DO循环\用隐含DO循环\用数组名•用DO循环实现数组的输入输出1.优点:数组元素的输入输出次序可由用户控制2.缺点:做一次循环就换行输入或输出•用隐含DO循环实现数组的输入输出1.优点:既能控制数组元素的输入输出顺序,又能控制一行内输入输出数据的个数2.例如:READ(*,*)((G(I,J),J=1,3),I=1,2),由于是一个READ语句,所以既可以一行输入,也可以多行输入,键盘输入如下:86,75,72[enter]87,70,83[enter]3.注意:一个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循法;初值表只能是常量,不允许出现任何形式的表达式•例如: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:902320I=2: 42 14 32或DATA K/90,42,23,14,20,32/----排列为按列排,排满一列之后,再排下一列; 90 23 20 --------david42 14 32• 例如:DIMENSION A(10)DATA A/10*1.0/(表示'10个1.0')注意:DATA 语句属于说明语句,但是它可以放在END 语句之前的任意行;当程序中有多个DATA 语句给同一个变量赋初值时,以最后一条为准;程序在编译期间给变量赋予初值,在程序执行期间,DATA 语句不起任何作用!2.5关于Fortran77的一些有用的简介[8]1. FUNCTION 语句:是函数子程序的第一条语句,标志着该函数子程序的开始2. 3.3.函数体的说明部分包括对虚参和本函数体内所用变量和数组的说明4.函数体中可设置一条或者多条RETURN语句,表示执行到此语句时返回调用程序.1.当RETURN语句和END语句紧挨着的时候,可省略RETURN语句2.也可以不设RETURN语句,但需从中间返回时,必须设置RETURN语句5.函数名的作用:函数名在函数体中一定要被赋值,因为函数名把函数值带回调用程序.•函数子程序的调用1.一般形式:调用方式和内部函数相似:函数名(实参数) 或函数名( )2.说明:1.调用程序中函数名必须与函数子程序中定义的函数名相同2.实参与虚参在个数\类型\位置上必须一一对应,但名字可以不同3.当虚参是变量名的时候,实参可以是常量\变量\数组元素或者表达式;但是当虚参要在函数体中被赋予初值的时候,则实参不可以是常量或者表达式[因为两者共用一个存储单元]4.函数子程序是一个独立的程序单位,可以作为一个单独的源程序进行存贮和编译,并与调用程序连编后才能起作用.4 材料本构的相关力学知识虽然目前要做的工作就是用UMAT把一个新的材料的本构加进ABAQUS中调用,但是我并不想仅仅局限于此.在这个过程中,我会把自己遇到的所有相关问题学懂弄透再去编这个程序.所以估计我这个帖子会很长滴!我力学知识不是很好,所以这两天要好好学习一下力学知识,主要是弹塑性力学吧!说说弹塑性力学----1弹性力学\塑性力学\弹塑性力学弹性力学和塑性力学时固体力学的两个重要分支.1.固体力学:研究固体材料及其构成的物体结构在外部干扰(载荷\温度\变化等)下的力学响应的科学.按不同的研究对象区分为不同的学科分支.2.弹性力学:研究固体材料及由其构成的物体结构在弹性变形阶段的力学行为,包括外部干扰下弹性物体的内力[应力\,变形[应变]和位移的很不,以及与之相关的原理\理论和方法.3.塑性力学:则研究他们在塑性变形阶段的力学响应.4.弹性和塑性的区别与联系:大多数材料都同时具有弹性和塑性性质,当外载较小时,材料呈现为弹性的或者基本弹性的;当荷载渐渐增加时,材料将进入塑性变形阶段,即材料的行为呈现塑性的.所谓弹性和塑性,只是材料力学性质的流变学分类法中两个典型性质或理想模型;同意种材料在不同条件下可以主要表现为弹性的或塑性的.因此,所谓弹性材料或弹性物体是指在一定条件下主要呈现弹性性质的材料或物体.塑性材料或者塑性无私的含义与此相类.5.弹塑性材料:大多数材料往往都同时具有弹性和塑性性质,特别是在塑性变形阶段,变形中既有可恢复的弹性变形,又有不可恢复的塑性变形;因此有时又称弹塑性材料6.弹性设计方法:是以弹性分析为基础的结构设计,假定材料为理想弹性地,相应地这种设计观点便以分析结果的实际使用范围作为设计的失效准则,即认为应力[严格地说是应力的某一函数值]达到一定限值[弹性界限],将进入塑性变形阶段时,材料将破坏.7.塑性设计方法:结构中如果有一处或一部分材料"破坏",则认为结构失效(丧失所规定的效用).由于一般的结构都处于非均匀受力状态。