找回密码
 注册
Simdroid-非首页
查看: 1822|回复: 40

[子程序] 同时调用多个umat用户子程序的讨论

[复制链接]
发表于 2008-6-11 11:47:11 | 显示全部楼层 |阅读模式 来自 北京交通大学
本帖最后由 zsq-w 于 2010-9-17 15:28 编辑

当需要同时调用多个umat用户子程序时,可采用以下方法:
(1)在子程序中输入以下程序段
IF (CMNAME(1:4) .EQ. 'MAT1') THEN
  CALL UMAT_MAT1(argument_list)
ELSE IF(CMNAME(1:4) .EQ. 'MAT2') THEN  
CALL UMAT_MAT2(argument_list)
END IF

(2)在subroutine umat中修改如下(红色部分)
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,     1 RPL,DDSDDT,DRPLDE,DRPLDT,   
2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,MAT1,   
3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,   
4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)C     
INCLUDE 'ABA_PARAM.INC'C      
CHARACTER*80 MAT1      
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),DFGRD0(3,3),DFGRD1(3,3)   
user coding to define DDSDDE, STRESS, STATEV, SSE, SPD, SCD      
and, if necessary, RPL, DDSDDT, DRPLDE, DRPLDT, PNEWDT     
RETURN      
END

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,   
1 RPL,DDSDDT,DRPLDE,DRPLDT,   
2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,MAT2,   
3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,   
4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)C     
INCLUDE 'ABA_PARAM.INC'C      
CHARACTER*80 MAT2      
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),DFGRD0(3,3),DFGRD1(3,3)   
user coding to define DDSDDE, STRESS, STATEV, SSE, SPD, SCD      
and, if necessary, RPL, DDSDDT, DRPLDE, DRPLDT, PNEWDT     
RETURN      
END
(3)这时可以同时调用子程序umat_mat1和umat_mat2了
这是本人的学习心得,希望大家积极讨论。

评分

1

查看全部评分

 楼主| 发表于 2008-6-11 12:04:06 | 显示全部楼层 来自 北京交通大学
Simdroid开发平台
怎么没有人回复呢,浪费精力啊
回复 不支持

使用道具 举报

发表于 2008-6-11 12:50:57 | 显示全部楼层 来自 江苏南京
你写的东西在手册里都解释了啊,只要看过手册这个地方的人都知道啊,但还是要赞下你的学习精神!
回复 不支持

使用道具 举报

发表于 2008-7-22 16:33:40 | 显示全部楼层 来自 陕西西安
赞一个!!!
回复 不支持

使用道具 举报

发表于 2008-7-24 15:58:42 | 显示全部楼层 来自 北京
xiexie
回复 不支持

使用道具 举报

发表于 2008-9-22 10:36:10 | 显示全部楼层 来自 江苏南京
谢谢!!!!
回复 不支持

使用道具 举报

发表于 2008-9-22 15:37:04 | 显示全部楼层 来自 上海
谢谢,正适合我的需要。
回复 不支持

使用道具 举报

发表于 2008-9-23 01:36:15 | 显示全部楼层 来自 LAN
我补充一点手册里面没有的内容吧 , 不知道能不能加积分

IF (CMNAME(1:4) .EQ. 'MAT1') THEN
  CALL UMAT_MAT1(argument_list)
ELSE IF(CMNAME(1:4) .EQ. 'MAT2') THEN  
  CALL UMAT_MAT2(argument_list)
END IF

诸如这样的语句里面, 'MAT1', 'MAT2'  必须用大写,无论ABAQUS/CAE里面,你用大写还是小写字母或者大小写混合的名字给材料命名。 否则,那个条件判断不成立, IF里的UMAT也不会执行了。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-1-19 11:38:34 | 显示全部楼层 来自 湖南长沙
谢谢,学习学习
回复 不支持

使用道具 举报

发表于 2009-1-23 21:44:21 | 显示全部楼层 来自 重庆
太感谢
回复 不支持

使用道具 举报

发表于 2009-3-8 10:46:55 | 显示全部楼层 来自 湖南长沙
非常感谢
回复 不支持

使用道具 举报

发表于 2009-3-17 10:02:17 | 显示全部楼层 来自 浙江杭州
牛人啊
回复 不支持

使用道具 举报

发表于 2009-3-22 20:24:39 | 显示全部楼层 来自 北京
谢谢楼主分享
回复 不支持

使用道具 举报

发表于 2009-4-2 23:06:56 | 显示全部楼层 来自 上海浦东新区
谢谢,好人
回复 不支持

使用道具 举报

发表于 2009-4-12 15:55:43 | 显示全部楼层 来自 黑龙江哈尔滨
本帖最后由 michael_chn 于 2009-4-25 22:55 编辑


希望能加分!!!

楼主,你给出的程序中应这么改才对吧(见蓝色字体):

当需要同时调用多个umat用户子程序时,可采用以下方法:+ `" ?* O6 ?0 m; Z7 ^
(1)在子程序中输入以下程序段
IF (CMNAME(1:4) .EQ. 'MAT1') THEN : o' m1 k2 U; z0 D
  CALL UMAT_MAT1(argument_list)/ }& Y4 d4 D- b# C/ b' [
ELSE IF(CMNAME(1:4) .EQ. 'MAT2') THEN  8 ^0 T# ^' a; [
CALL UMAT_MAT2(argument_list)
END IF

J& Z7 m0 r/ N
(2)在subroutine umat中修改如下(红色部分)' ~2 }$ ]5 T( A' @
SUBROUTINE UMAT_MAT1(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,     
1 RPL,DDSDDT,DRPLDE,DRPLDT,    6 h3 ~4 v9 J' C: u
2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,   
3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,   ! C# t1 F6 w- I. D" g+ G
4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)C     1 g$ ?7 ^' w5 P9 [7 `- \
INCLUDE 'ABA_PARAM.INC'     
CHARACTER*80 CMNAME         Z7 P* g0 @7 Q: h" z
DIMENSION STRESS(NTENS),STATEV(NSTATV),    - O8 P( k* n" B4 w) _: K) S
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)    + ~9 @7 y$ @) W* E* R
user coding to define DDSDDE, STRESS, STATEV, SSE, SPD, SCD      
and, if necessary, RPL, DDSDDT, DRPLDE, DRPLDT, PNEWDT     
RETURN
END * D5 r$ a$ i- Q& }' B

SUBROUTINE UMAT_MAT2(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,   
1 RPL,DDSDDT,DRPLDE,DRPLDT,    3 p1 x5 H7 K- L" y0 m: }# e
2 STRAN,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     
INCLUDE 'ABA_PARAM.INC'      ; D9 L# e1
CHARACTER*80 CMNAME     0 z( U! Q+ r: b
DIMENSION STRESS(NTENS),STATEV(NSTATV),    4 R4 K( Y5 o% ~9 j
1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),   % x; e% f0 U# V* G3 G) ?$ o% Y
2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),      l" A  z, r0 a' P2 F9 U
3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)    # W" i( C* r0 O* _( g. u& N
user coding to define DDSDDE, STRESS, STATEV, SSE, SPD, SCD      
and, if necessary, RPL, DDSDDT, DRPLDE, DRPLDT, PNEWDT     
RETURN      # e+ E; x4 F; o6 ~9 g$ |' G
END & t5 \. g3 V+ f! e9 X. ?/ d
(3)这时可以同时调用子程序umat_mat1和umat_mat2了


评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-4-25 22:56:15 | 显示全部楼层 来自 黑龙江哈尔滨
顶阿!!!
回复 不支持

使用道具 举报

发表于 2009-4-26 09:44:36 | 显示全部楼层 来自 陕西西安
我赞同12楼michael_chn 的写法,对1楼的不同意
回复 不支持

使用道具 举报

发表于 2009-5-12 21:56:16 | 显示全部楼层 来自 北京
xie xie ! thank u very much!  我试试!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-5-12 23:29:14 | 显示全部楼层 来自 辽宁沈阳
本帖最后由 nanjizhinan 于 2009-5-19 15:23 编辑

15# michael_chn
你做的不对吧,和楼主的有点不一样。也就是说两个子程序的名字是不是相应的有所改动。楼主没有子程序的改名字,对吗?还请斑竹解释一下。
楼主说的对不对啊,怎么不好用啊
回复 不支持

使用道具 举报

发表于 2009-5-20 08:20:59 | 显示全部楼层 来自 辽宁沈阳
两个子程序单独调用的时候没有错误,在一起的时候就是142,请问为什么呢
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-24 06:50 , Processed in 0.058864 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表