0

我正在尝试根据施加的压力来改变紧固件的刚度。我通过使用字段变量并从.fil文件中提取紧固件中的力来解决这个问题。

问题是我需要将 UFIELD 提供的节点编号与.fil文件中紧固件的元素编号相关联。我知道.fil文件在记录号中包含该信息。1900但是当我为该记录设置if 语句时,它永远不会在我的子程序中被击中。虽然,当我将.fil文件转换为 ASCII 时,我可以在那里看到该信息。

1号记录和495号记录打对了,可以得到其中的元素号和内力。

此外,我尝试在我拥有的节点和元素上都使用GETPARTINFO 。但它返回的数字与我的紧固件节点或元素本身无关。

此外,由于紧固件没有材料点,我无法从节点本身或材料点获得紧固件CTF 。

如果我假设节点和紧固件的顺序相同并且只是匹配它们,那么我的代码在一个小模型中的几个元素上就可以很好地工作。但是在一个有很多紧固件的大型模型中,一切都搞混了。

任何想法如何解决这个问题,或者关于为什么我不能从我的子程序访问密钥 1900或者为什么GETPARTINFO不返回预期的内容的一些评论?

4

1 回答 1

2

好的,我想通了。.fil 文件中的 key 1900 打印在命令默认读取位置之前

call DBFILE(0,ARRAY,JRCD)

为了获得所需的密钥,必须重置文件读取位置

call DBFILE(2,ARRAY,JRCD)

但问题是,无论您指定的 elset 是什么,都会为模型中的每个元素生成键 1900、1901、1933 等。因此,我编写了一个小子程序来生成一个带有元素编号和相应节点编号的紧固件数组。

      subroutine obtain_relation(REL)
      INCLUDE 'ABA_PARAM.INC'
      DIMENSION ARRAY(513),JRRAY(NPRECD,513),REL(500,3)
      character*8 CVALUE
      EQUIVALENCE (ARRAY(1),JRRAY(1,1)), (ARRAY(4),CVALUE)                   
      !Rewinding the file 
      CALL DBFILE(2,ARRAY,JRCD)
      i = 1
      DO K1=1,999999
          !Start reading output file
          CALL DBFILE(0,ARRAY,JRCD)
          !If the end of the end of pre-step records go to 120 
          IF (KEY .EQ. 2000) GO TO 120
          !If the end of all records is reached go to position 120
          IF (JRCD .NE. 0) GO TO 120
          !The key of the output table is at second possition (first is length of
          !the array)          
          KEY=JRRAY(1,2)
          ! Record 1900 contains information about element conectivity
          IF (KEY .EQ. 1900) THEN
              IF(trim(CVALUE).eq."CONN3D2") then
                  Rel(i,1) = JRRAY (1,3) ! <- Element number
                  Rel(i,2) = JRRAY (1,5) ! <- First node number
                  i = i + 1
              END IF
          END IF

      ENDDO          
 120  Continue
      Return
      end

在 URDFIL 中调用 POSFIL 后,在分析开始时仅调用一次此子程序,它将返回一个双精度 3 维矩阵,第一列包含紧固件元件编号,第二列 - 对应紧固件的第一个节点,最后一个为空。我使用最后一列来存储相应的力。

希望这对某人有帮助。

于 2016-04-18T13:29:33.920 回答