将坐标分配给FEA元素

时间:2014-07-31 06:42:38

标签: c

我需要一些帮助来有效地匹配数据...

这是我的问题: 从我读入的文件中读取一些元素,这些元素的ID与另一个具有XYZ坐标的条目(节点)相关。

它看起来像这样(每个字段用空格分隔,所以条目是Field0 [空] Field1 [空白]等等)

ELEMENT 1 24

ELEMENT 2 89

ELEMENT 11 123

NODE 24 0.1 3.5 45.6

NODE 89 2.5 23.8 4.9

NODE 123 11.4 3.7 5.7

所以我过去所做的就是以相同的顺序读取元素。对于节点,我分配了一个与可能出现的最大节点ID数相同的数组,并将XYZ坐标放在节点ID的索引下:

if (strstr(Field0,"ELEMENT") ){
  Elem[NumElem].ID  = atoi(Field1);
  Elem[NumElem].NID = atoi(Field2);
  NumElem++;
}

if (strstr(Field0,"NODE") ){
               Index = atoi(Field1);
  Node[Index].ID     = Index       ;
  Node[Index].XYZ[0] = atof(Field2);
  Node[Index].XYZ[1] = atof(Field3);
  Node[Index].XYZ[2] = atof(Field4);
}    

for (i=0;i<NumElem;i++){
  Elem[i].Coord[0] = Node[ Elem[i].NID ].XYZ[0];
  Elem[i].Coord[1] = Node[ Elem[i].NID ].XYZ[1];
  Elem[i].Coord[2] = Node[ Elem[i].NID ].XYZ[2];
}

(希望该片段没有错误,因为我必须删除一些条目以使其对其他人更具可读性)

之后我释放了Node并将所有数据存储在struct Elem中。

只有当所有节点ID在整个数据中都是唯一的时,上述方式才有效。

现在数据可以拆分成几个文件。在每个文件中,ID都是唯一的,但对于整个数据集,它们不是唯一的。 因此,上面的示例可以在具有相同元素和节点ID的不同文件中多次出现,但它们不是相同或相同的条目,因为坐标可能不同。

由于某些其他原因,我无法按文件解析整个数据集文件,以将数据放入上述结构中。

当然,我可以通过嵌套一些for循环来检查文件ID和节点ID中的每个元素然后循环遍历整个节点条目以找到匹配的数据,这是非常强大的方式,但这将非常慢...

有没有人对如何解决这个问题有任何暗示?

0 个答案:

没有答案