Fortran Coder

标题: common [打印本页]

作者: 举个栗子    时间: 2022-3-4 21:39
标题: common
[Fortran] 纯文本查看 复制代码
REAL*8 AINTW(NNODE),XII(NNODE,2),XI(2),dNdxi(NNODE,2),
     1 VJACOB(2,2),dNdx(NNODE,2),VJABOBINV(2,2),AN(4),BP(2,NDOFEL),
     2 DP(2),SDV(NSTV),BB(3,NDOFEL),CMAT(3,3),EPS(3),STRESS(3),
     3 VNI(2,NDOFEL),ULOC(2),PHASENOD(NNODE)
     
       REAL*8 DTM,THCK,HIST,CLPAR,GCPAR,EMOD,ENU,PARK,ENG

       COMMON/KUSER/USRVAR(N_ELEM,NSTV,4)
C
C     ==================================================================
C     ******************************************************************
C     Constructing elemet TYPE 1 (phase)
C     ******************************************************************
C     ==================================================================
C      
       IF (JTYPE.EQ.ONE) THEN
C     ==================================================================
C     Time an iteration variables
C     ==================================================================
       TIMEZ=USRVAR(JELEM,17,1)
       IF (TIMEZ.LT.TIME(2)) THEN
        USRVAR(JELEM,17,1)=TIME(2)
        USRVAR(JELEM,18,1)=ZERO
       ELSE
        USRVAR(JELEM,18,1)=USRVAR(JELEM,18,1)+ONE
       ENDIF
       STEPITER=USRVAR(JELEM,18,1)
common是怎么使用?
作者: vvt    时间: 2022-3-5 12:42
看彭国伦的书第 8 章第 3 节 169页
作者: 举个栗子    时间: 2022-3-5 17:08
vvt 发表于 2022-3-5 12:42
看彭国伦的书第 8 章第 3 节 169页

关键是后面的函数USRVSR(N_ELEM,NSTV,4)是怎么运用的;
而且这个函数全局中也没有声明;

作者: vvt    时间: 2022-3-7 08:28
USRVAR 是一个数组,USRVSR我没在你给出的代码里看到
作者: 举个栗子    时间: 2022-3-8 21:27
vvt 发表于 2022-3-7 08:28
USRVAR 是一个数组,USRVSR我没在你给出的代码里看到

大佬,那这个数组是怎么使用的,位置就在common后面,这个数组里面有三个参数,到底是怎么使用的?
作者: 举个栗子    时间: 2022-3-8 21:42
vvt 发表于 2022-3-7 08:28
USRVAR 是一个数组,USRVSR我没在你给出的代码里看到

REAL*8 DTM,THCK,HIST,CLPAR,GCPAR,EMOD,ENU,PARK,ENG

        COMMON / KUSER / USRVAR (N_ELEM,NSTV,4)


其中USRVAR (N_ELEM,NSTV,4)我感觉这是个函数,但是在代码中没有找到这个函数的用法,就只是在上面common这个位置说明一下,下文就直接调用了;这个for文件作为abaqus中的子程序来进行使用的。

作者: vvt    时间: 2022-3-9 08:14
是个数组,关于数组的用法,请参考彭国伦的书第 7 章
作者: 举个栗子    时间: 2022-3-9 08:33
vvt 发表于 2022-3-9 08:14
是个数组,关于数组的用法,请参考彭国伦的书第 7 章

       COMMON/KUSER/USRVAR(N_ELEM,NSTV,4)
C
C     ==================================================================
C     ******************************************************************
C     Constructing elemet TYPE 1 (phase)
C     ******************************************************************
C     ==================================================================
C      
       IF (JTYPE.EQ.ONE) THEN
C     ==================================================================
C     Time an iteration variables
C     ==================================================================
      
       TIMEZ=USRVAR(JELEM,17,1)


       IF (TIMEZ.LT.TIME(2)) THEN
        USRVAR(JELEM,17,1)=TIME(2)
        USRVAR(JELEM,18,1)=ZERO
       ELSE
        USRVAR(JELEM,18,1)=USRVAR(JELEM,18,1)+ONE
       ENDIF
       STEPITER=USRVAR(JELEM,18,1)
若是数组的话,为啥上下还会变?




作者: vvt    时间: 2022-3-9 08:42
COMMON/KUSER/USRVAR(N_ELEM,NSTV,4)
这个意思是,USRVAR是个三维数组,每个维度的大小分别是 N_ELEM , NSTV , 4。即总大小 N_ELEM*NSTV*4。这里 N_ELEM  NSTV  4 是每个维度的大小。

TIMEZ=USRVAR(JELEM,17,1)
这个意思是,让 TIMEZ 的值,变成 USRVAR 这个三维数组的第 JELEM ,17,1 个元素的值。这里 JELEM,17,1 是索引下标。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2