Share this post on:

        最近把做iFiber开发的心得汇总一下,第一个问题就是当在同一个.for文件中需要同时调用多个UMAT用户子程序时,怎么处理?

        在ABAQUS的UMAT开发中,需要把好几个材料模型放入同一个.for文件进行调用,看过帮助文档,给出的解释和参考格式如下:
The variable CMNAME can be tested for different material names inside user subroutine UMAT as illustrated below:
        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
        UMAT_MAT1 and UMAT_MAT2 are the actual user material subroutines containing the constitutive material models for each material MAT1 and MAT2, respectively. Subroutine UMAT merely acts as a directory here. The argument list may be the same as that used in subroutine UMAT.

        总的UMAT()其实就是一个索引,其他的UMAT_MAT1()、UMAT_MAT2() 可以看作是一个含有具体材料本构模型的小子程序,供总的UMAT()来调用。总的UMAT()通过材料名称的数组CMNAME()来确定材料名,然后调用含有对应材料本构模型的小子程序UMAT_MAT1()、UMAT_MAT2()。

在iFiber开发中,应用示意代码如下:
C 总的UMAT
        SUBROUTINE UMAT(argument_list)
        INCLUDE ‘ABA_PARAM.INC’
        CHARACTER *80 CMNAME
        IF (CMNAME(1:11).EQ.’ICONCRETE01′) THEN
                CALL UMAT_MAT1 (argument_list)
        ELSE IF (CMNAME(1:11).EQ.’ICONCRETE02′) THEN
                CALL UMAT_MAT2(argument_list)
        END IF
C 用户自定义材料模型部分
        SUBROUTINE UMAT_MAT1(argument_list)
        INCLUDE ‘ABA_PARAM.INC’
        CHARACTER *80 CMNAME
        ……自定义iConcrete01本构模型代码……
        SUBROUTINE UMAT_MAT2 (argument_list)
        INCLUDE ‘ABA_PARAM.INC’
        CHARACTER *80 CMNAME
        ……自定义iConcrete02本构模型代码……

参考《Abaqus User Subroutines Reference Manual》

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注