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