1. **读取节点和单元**:
- `read_nodes_and_elements` 函数读取 INP 文件中的节点和单元信息,并打印出包含关键字 `*NODE` 和 `*ELEMENT` 的行。
- 节点信息格式为:`Node ID {node_id}, x: {x}, y: {y}, z: {z}`
- 单元信息格式为:`Element ID {element_id}, Type: {current_element_type}, Elset: {elset}, Node IDs: {', '.join(node_ids)}`
- 读取 `*NODE` 关键字行并存储在 `node_keyword` 变量中。
2. **统计节点出现次数**:
- `count_node_occurrences` 函数统计读取的inp文件的每个节点在单元中出现的次数。

3. **生成新节点**:
- `generate_new_nodes` 函数根据节点出现次数生成新的节点,并创建节点映射 `node_map`。
- 新节点的编号计算公式为 `(10 ** max_node_id_len) * (i + 1) + int(node_id)`,其中 `i` 是节点出现的顺序索引(从 0 开始),`max_node_id_len` 是最大节点编号的位数。
- 只有当一个母节点在 `*ELEMENT` 中出现多次(n >= 2)时,才会生成新的子节点编号。如果一个母节点只出现一次,则不生成新的子节点编号。
- 生成的新节点列表 `new_nodes` 包括原来的母节点和新生成的子节点。新节点按照从小到大的顺序写入到最大节点编号的下一行。
4. **写入生成新节点**:
- `write_ subline _node_file` 函数将所有的节点(包括母节点和新生成的子节点)按编号从小到大排序,并写入到输出文件 `{base_name}_subline_node.txt` 中。
- 输出文件的第一行是读取的 `*NODE` 关键字,从第二行开始写入新的节点编号信息。
5. **更新单元信息**:
- ` update_elements_with_new_nodes ` 函数将查找母节点在输入文件*ELEMENT单元中的位置,然后将母节点编号替换为新节点编号。
- ` write_update_elements_with_new_nodes ` 函数将更新的单元信息和未更新的单元信息写入到输出文件 `{base_name}_ update_elements_with_new_nodes.txt`中,确保每个单元类型和单元集名称下的单元信息连续输出。
6. **读取节点和单元**:
- `read_new_nodes_and_new_elements` 函数读取输出文件 `{base_name}_subline_node.txt`和`{base_name}_ update_elements_with_new_nodes.txt`文件中的节点和单元信息。
7. **查找相邻面**:
- `find_adjacent_faces` 函数通过组合所有更新后的单元,查找`{base_name}_ update_elements_with_new_nodes.txt`文件中的更新后的单元的所有相邻的面。对于 `C3D8R` 和 `C3D8` 类型的单元,如果它们有 4 个节点编号的坐标一致,则认为它们面相邻。对于 `C3D4` 类型的单元,如果它们有 3 个节点编号的坐标一致,则认为它们面相邻。
8. **生成 cohesive 单元**:
- `generate_cohesive_elements` 函数根据相邻面的节点信息生成 cohesive 单元,单元编号,取第一个相邻单元相邻面的节点编号和第二个单元相邻面的节点编号,写入的节点编号数据顺序不变。对于 `C3D8R` 和 `C3D8` 类型的单元,生成 `COH3D8` 类型的 cohesive 单元;对于 `C3D4` 类型的单元,生成 `COH3D6` 类型的 cohesive 单元。cohesive单元编号取读取inp文件的最大单元编号加一,顺序编号。
9. **写入中间文件**:
- `write_cohesive_elements_file` 函数将生成的 cohesive 单元信息写入到 `{base_name}_cohesive_elements.txt` 文件中,并在每个 `*ELEMENT, TYPE=COH3D6` 或 `*ELEMENT, TYPE=COH3D8` 块结束后添加 `*Elset格式为“*Elset, elset=SET_COHESIVE, generate“换行”“cohesive单元起始编号“, “cohesive单元终止编号“, 1“。
10. **合并文件**:
-输出新的inp文件,文件为`{base_name}_insert_cohesive_elements.inp`,文件输出位置和读取的位置一致。
-当读取的inp文件时,没有读取到以*Node和*Element为开头的行时,读取的内容按照原格式写入到新的inp文件。
-当读取的inp文件时,读取到以*Node和*Element为开头的行时,读取的该行内容按照原格式写入到新的inp文件,换行写入`{base_name}_subline_node.txt`文件的所有节点内容和`{base_name}_ update_elements_with_new_nodes.txt`文件的所有单元内容。
-在`{base_name}_ update_elements_with_new_nodes.txt`文件的所有单元内容写入结束后换行写入`{base_name}_cohesive_elements.txt`文件的cohesive单元信息。
-完成写入输出`{base_name}_insert_cohesive_elements.inp`文件
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删