Fortran 在Abaqus中获取与紧固件节点相关的元素编号

Fortran 在Abaqus中获取与紧固件节点相关的元素编号,fortran,key,analysis,subroutine,abaqus,Fortran,Key,Analysis,Subroutine,Abaqus,我试图改变一个紧固件的刚度,这取决于它所承受的压力。我通过使用字段变量和从.fil文件中提取紧固件中的力来解决这个问题 问题是我需要将UFIELD提供的节点号与.fil文件中紧固件的元素号关联起来。我知道.fil文件在recordno.1900中包含该信息,但当我为该记录设置if语句时,它在我的子例程中从未被命中。不过,当我将.fil文件转换为ASCII时,我可以在那里看到这些信息 记录No.1和No.495被正确命中,我可以获得其中的元素编号和内力 此外,我还尝试在我拥有的节点和元素上使用GE

我试图改变一个紧固件的刚度,这取决于它所承受的压力。我通过使用字段变量和从.fil文件中提取紧固件中的力来解决这个问题

问题是我需要将UFIELD提供的节点号与.fil文件中紧固件的元素号关联起来。我知道.fil文件在recordno.1900中包含该信息,但当我为该记录设置if语句时,它在我的子例程中从未被命中。不过,当我将.fil文件转换为ASCII时,我可以在那里看到这些信息

记录No.1No.495被正确命中,我可以获得其中的元素编号和内力

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

此外,我无法从节点本身或材质点获取紧固件CTF,因为紧固件没有材质点

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


有什么办法可以解决这个问题,或者是一些关于为什么我不能从我的子程序中访问键1900或者为什么GETPARTINFO不能返回预期结果的评论吗?

好的,我已经解决了这个问题。.fil文件中的键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
子程序获取关系(REL)
包括“ABA_PARAM.INC”
维度数组(513),JRRAY(NPRECD,513),REL(500,3)
字符*8 C值
等价性(数组(1),JRRAY(1,1)),(数组(4),CVALUE)
!倒带文件
调用DBFILE(2,数组,JRCD)
i=1
DO K1=1999999
!开始读取输出文件
调用DBFILE(0,数组,JRCD)
!如果预步骤结束记录的结束转到120
如果(图例等式2000)转到120
!如果达到所有记录的末尾,则转到位置120
如果(JRCD.NE.0)转到120
!输出表的键位于第二个位置(第一个是
!阵列)
KEY=JRRAY(1,2)
! 记录1900包含有关元素连接性的信息
如果(图例等式1900),则
如果(微调(CVALUE).eq.“CONN3D2”),则

Rel(i,1)=JRRAY(1,3) 好吧,我知道了。.fil文件中的键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
子程序获取关系(REL)
包括“ABA_PARAM.INC”
维度数组(513),JRRAY(NPRECD,513),REL(500,3)
字符*8 C值
等价性(数组(1),JRRAY(1,1)),(数组(4),CVALUE)
!倒带文件
调用DBFILE(2,数组,JRCD)
i=1
DO K1=1999999
!开始读取输出文件
调用DBFILE(0,数组,JRCD)
!如果预步骤结束记录的结束转到120
如果(图例等式2000)转到120
!如果达到所有记录的末尾,则转到位置120
如果(JRCD.NE.0)转到120
!输出表的键位于第二个位置(第一个是
!阵列)
KEY=JRRAY(1,2)
! 记录1900包含有关元素连接性的信息
如果(图例等式1900),则
如果(微调(CVALUE).eq.“CONN3D2”),则

Rel(i,1)=JRRAY(1,3)!我不知道这是关于什么的(除了我知道Abaqus是一个FEM包)。考虑为你的问题找到一些更专业的地方。为什么这个标签是Fortran?你有Fortran代码吗?这里的所有问题都应该是关于一些代码或编码问题。Abaqus子程序是用Fortran语言编写的。这个问题纯粹是关于Fortran和Abaqus的交互和对结果的访问,而不是关于FEM背后的力学或物理。所以我想,这是一个合适的地方。不管怎样,我想是我自己弄明白的。我将在稍后发布答案,以便其他有类似问题的人可以找到它。我不知道这是关于什么的(除了我知道Abaqus是一个FEM包)。考虑为你的问题找到一些更专业的地方。为什么这个标签是Fortran?你有Fortran代码吗?这里的所有问题都应该是关于一些代码或编码问题。Abaqus子程序是用Fortran语言编写的。这个问题纯粹是关于Fortran和Abaqus的交互和对结果的访问,而不是关于FEM背后的力学或物理。所以我想,这是一个合适的地方。不管怎样,我想是我自己弄明白的。我稍后会发布答案,以便其他有类似问题的人可以找到它。