原创 迈达斯GTS-NX网格模型(FPN)导入Flac3D 6.0 源码
print("*".center(105,"*"))
print("将Midas GTS NX的FPN中性文件转为Flac3D 6.0模型文件(基于python语言编写 )".center(80," "))
print("西南交通大学:李泽星".center(90," "))
print("使用说明:1.需要转换的fpn文件需要放在和该程序相同的文件夹下")
print("\t 2.生成的结果文件位于同一个文件夹下")
print("\t 3.转换出来的单元group名:GTS NX中网格组名(这也是这个版本的最大优点!!!)")
print("\t 4.Midas GTS 生成和实体单元耦合的平面单元时,建议使用析取功能")
print("\t 5.三维实体单元文件为.f3grid,线或者平面等结构单元文件为.f3dat")
print("\t 在Flac3D中,通过zone import '文件名.f3grid'和program call '文件名.f3dat'命令调用")
print("\t 在同时具有实体单元和结构单元的模型中,请先导入实体单元文件,再导入结构单元文件,否则结构-实体间不会自动生成link")
print("\t 一般而言,结构单元导入后,会自动生成link,如果没有,需要用户在Flac3D里面手动设置")
print("注意事项:在导出FPN文件前,需要注意以下几点,否则Flac3D不能正确生成网格")
print("\t 1.Midas GTS NX输出FPN文件前,必须对节点重新编号(且起始号须为1)!!!")
print("\t 2.Midas GTS NX对单元分组命名时,不同类型的单元(实体、平面、线)分组名称不能相同")
print("\t 例如:线单元和平面单元不能使用同一个分组名")
print("\t 3.Midas GTS 划分网格单元时,不能有网格在“默认网格组”里面,且分组名不能有逗号,建议不要有空格")
print("*".center(105,"*"))
# 判断FPN文件是否存在
import os
import sys
while True:FPN_name = input("请打开FPN文件(无需输入文件后缀名).fpn:")FPN_name = FPN_name + ".fpn"judge = os.path.isfile(FPN_name)if judge:print("\t文件打开成功!")breakelse:print("\t文件打开失败,请重新输入:")
# 读取FPN文件
with open(FPN_name, mode='rt', encoding='GBK') as file:Line_Text = "NULL"while (Line_Text != "$$ Node\n"):Line_Text = file.readline()# 此时指针指向第一个NODE# 读取节点信息---------------------------------------------------------------------print("开始读入节点信息:")Line_Text = "NODE"node_list = []while (Line_Text[0:4] == "NODE"):Line_Text = file.readline().strip().replace(" ", "").rstrip(",")if (Line_Text[0:4] != "NODE"):breaklist = Line_Text.split(",")list[2] = list[2].strip('.')list[3] = list[3].strip('.')list[4] = list[4].strip('.')node_list.append(list)print("\t共导入" + str(len(node_list)) + "个节点")# 此时Line_Text值为空# 开始读取单元信息---------------------------------------------------------------print("开始读入单元信息:")element_list = []HEAX = PRISM = PYRAM = TETRA = LINE = RECT = TRIA = 0Line_Text = file.readline() # 此时Line_Text值为:$$ Elementwhile (Line_Text != ""):Line_Text = file.readline().strip().replace(" ", "").rstrip(",")if ("HEXA" in Line_Text):list=( Line_Text+file.readline().strip().replace(" ", "").rstrip(",")).split(",")element_list.append(list)HEAX = HEAX + 1if ("PRISM" in Line_Text):list = Line_Text.split(",")element_list.append(list)PRISM = PRISM + 1if ("PYRAM" in Line_Text):list = Line_Text.split(",")element_list.append(list)PYRAM = PYRAM + 1if ("TETRA" in Line_Text):list = Line_Text.split(",")element_list.append(list)TETRA = TETRA + 1if ("LINE" in Line_Text):list = Line_Text.split(",")list[5] = list[5].strip('.')list[6] = list[6].strip('.')element_list.append(list)LINE = LINE + 1if ("RECT" in Line_Text):list = Line_Text.split(",")element_list.append(list)RECT = RECT + 1if ("TRIA" in Line_Text):list = Line_Text.split(",")element_list.append(list)TRIA = TRIA + 1print("\t共有" + str(len(element_list)) + "个单元")if(HEAX!=0):print("\t其中有块体网格(6个面 8个顶点):" + str(HEAX) + "个")if (PRISM != 0):print("\t其中有三棱柱体网格(5个面 6个顶点):" + str(PRISM) + "个")if (TETRA != 0):print("\t其中有四面体网格(3个面 4个顶点):" + str(TETRA) + "个")if (PYRAM != 0):print("\t其中有棱锥体网格(5个面 5个顶点):" + str(PYRAM) + "个")if (LINE != 0):print("\t其中有线单元:" + str(LINE) + "个")if (TRIA != 0):print("\t其中三角形平面单元:" + str(TRIA) + "个")if (RECT != 0):print("\t其中四边形平面单元:" + str(RECT) + "个")# 读取网格分组信息--------------------------------------------------------------------------print("开始读取网格分组信息:")# 此时Line_Text值为:空值while (True):Line_Text = file.readline()if ("默认网格组" in Line_Text):breakLine_Text = file.readline()Line_Text = file.readline() # 读到用户开始自定义分组的上一行Group_list = []Text = ""Line_Text = file.readline().strip().replace(" ", "")while (Line_Text[0:4] == "MSET"): #读取分组信息的循环list = Line_Text.split(",") # 将有分组名那一行换成列表group_name = list[2]Text = file.readline().strip().replace(" ", "") # 读取MSETE那一行list = Text.split(",")i = int(list[2]) # 获取单元数if (i % 8 != 0):num = (i // 8) + 1else:num = (i // 8)Text = "" # 读取单元号j = 0while (j <= (num - 1)):T = file.readline().strip().replace(" ", "")Text = Text + Tj = j + 1str_Group_list = str((group_name) + Text).rstrip(",") # 此处生成单元分组信息列表alone_Group_list = str_Group_list.split(",")Group_list.append(alone_Group_list)L = file.readline().strip().replace(" ", "") # 读取MSETN 那一行list = L.split(",")i = int(list[2]) # 获取结点数if (i % 8 != 0):num = (i // 8) + 1else:num = (i // 8)Text = "" # 读取单元号j = 0while (j <= (num - 1)):T = file.readline()j = j + 1Line_Text = file.readline().strip().replace(" ", "") # 读取下一个MSET 分组信息print("\t共有" + str(len(Group_list)) + "个分组")
#实体单元转换----------------------------------------------------------------------print("开始转换实体单元,请稍等(网格数量较多时,运行时间较长,请耐心等待):")
f3grid_name=FPN_name.strip(".fpn")+".f3grid"
with open(f3grid_name, mode='wt',encoding='utf-8') as out_file:for i in node_list:out_file.write("G\t"+i[1]+"\t"+i[2]+"\t"+i[3]+"\t"+i[4]+"\t\n")Z=[]for j in element_list:if(j[0]=="TETRA"):out_file.write("Z\t" + "T4"+ "\t" + j[1] + "\t" + j[3] + "\t" + j[4]+ "\t" + j[5]+ "\t" + j[6] + "\t\n")Z.append(j[1])if (j[0] == "PRISM"):out_file.write("Z\t" + "W6" + "\t" + j[1] + "\t" + j[4] + "\t" + j[3] + "\t" + j[7] + "\t" + j[5] + "\t" + j[6]+ "\t" + j[8]+ "\t\n")Z.append(j[1])if (j[0] == "PYRAM"):out_file.write("Z\t" + "P5" + "\t" + j[1] + "\t" + j[3] + "\t" + j[4] + "\t" + j[6] + "\t" + j[7] + "\t" + j[5]+ "\t\n")Z.append(j[1])if (j[0] == "HEXA"):out_file.write("Z\t" + "B8" + "\t" + j[1] + "\t" + j[3] + "\t" + j[4] + "\t" + j[6] + "\t" + j[7] + "\t" + j[5]+ "\t" + j[10]+ "\t" + j[8]+ "\t" + j[9]+"\t\n")Z.append(j[1])for i in Group_list:n=len(i)-1j=1while (j<n):if(i[j] in Z ):judge = Trueelse:judge = Falsej = j + 1if(judge):out_file.write("ZGROUP\t"+"'"+i[0]+"'\n")j=1while(j<=n):out_file.write(i[j]+"\t")j=j+1out_file.write("\n")print("\t转换成功!结果已保存至:"+f3grid_name)# 结构单元转换----------------------------------------------------------------------
f3dat_name=FPN_name.strip(".fpn")+".f3dat"
with open(f3dat_name, mode='wt',encoding='utf-8') as out_struct:#node_list, Group_list,element_listStruct_element_list=[]Struct_group_list=[]for i in element_list:if (i[0] == "RECT" or i[0] == "LINE" or i[0] =="TRIA" ):Struct_element_list.append(i)if(Struct_element_list==[]):os.system("pause")sys.exit(0)for i in Group_list:for j in Struct_element_list:if(j[1] in i):judge=Truebreakelse:judge=Falseif(judge):Struct_group_list.append(i)print("开始转换结构单元,请稍等:")print("\t请为结构单元分组设置单元类型:(按照类型输入beam、cable、pile、shell、geogrid、liner。切勿输错)")for i in Struct_group_list:print("\t请为结构单元分组 "+i[0]+" 设置单元类型:",end="")rename=input()print("\t请为结构单元分组 " + i[0] + " 设置id号:", end="")id_rename = input()n=len(i)-1k=1while(k<=n):for j in Struct_element_list:if(j[1]==i[k] and j[0]=="RECT"):out_struct.write("structure "+rename+" create by-quadrilateral ")out_struct.write(str(node_list[int(j[3])-1][2])+" "+str(node_list[int(j[3])-1][3])+" "+str(node_list[int(j[3])-1][4])+" ")out_struct.write(str(node_list[int(j[4])-1][2])+" "+str(node_list[int(j[4])-1][3])+" "+str(node_list[int(j[4])-1][4])+" ")out_struct.write(str(node_list[int(j[5])-1][2])+" "+str(node_list[int(j[5])-1][3])+" "+str(node_list[int(j[5])-1][4])+" ")out_struct.write(str(node_list[int(j[6])-1][2])+" "+str(node_list[int(j[6])-1][3])+" "+str(node_list[int(j[6])-1][4])+" id="+str(id_rename)+" group "+"'"+i[0]+"'\n")if (j[1] == i[k] and j[0] == "TRIA"):out_struct.write("structure " + rename + " create by-triangle position ")out_struct.write(str(node_list[int(j[3])-1][2]) + " " +str(node_list[int(j[3])-1][3] )+ " " + str(node_list[int(j[3])-1][4]) + " ")out_struct.write(str(node_list[int(j[4])-1][2]) + " " +str(node_list[int(j[4])-1][3]) + " " +str( node_list[int(j[4])-1][4]) + " ")out_struct.write(str(node_list[int(j[5])-1][2]) + " " +str(node_list[int(j[5])-1][3] )+ " " + str(node_list[int(j[5])-1][4]) + " id="+str(id_rename)+" group "+"'"+i[0]+"'\n")if (j[1] == i[k] and j[0] == "LINE"):out_struct.write("structure " + rename + " create by-line ")out_struct.write(str(node_list[int(j[3])-1][2]) + " " + str(node_list[int(j[3])-1][3]) + " " + str(node_list[int(j[3])-1][4]) + " ")out_struct.write(str(node_list[int(j[4])-1][2]) + " " + str(node_list[int(j[4])-1][3]) + " " + str(node_list[int(j[4])-1][4]) + " id="+str(id_rename)+" group "+"'"+i[0]+"'\n")k=k+1
print("\t转换成功!文件已保存至:"+f3dat_name)
element_list.clear()
node_list.clear()
Struct_group_list.clear()
Struct_element_list.clear()
Z.clear()
Group_list.clear()
os.system("pause")
原创 迈达斯GTS-NX网格模型(FPN)导入Flac3D 6.0 源码相关推荐
- Midas GTS NX 的中性FPN文件转为 FLAC3D5.0的模型 c++源码 (FPN to FLAC3D)
FPN文件转为 FLAC3D5.0的模型 1.使用方法 新增:依据Midas中的网格组,将FLAC3D的模型进行分组的程序,无需再填写属性,数据导出之前一定要执行步骤(1), (链接:https ...
- matlab 双层规划求解,双层规划模型的遗传算法求解的Matlab源码
双层规划模型的遗传算法求解的Matlab源码 双层规划模型的遗传算法求解的Matlab源码 function [BESTX,BESTY,ALLX,ALLY]=GAU (KU,KD,NU,ND,PmU, ...
- 第一次作业:对于Linux2.6.0源码中进程模型的分析
摘要: 作为第一次写博客,可能在排版,页面布局等方面会有大大小小的失误和不足,希望阅读者可以指出,笔者会继续学习,锻炼自己的博客水平:作为第一次分析Linux操作系统,基于进程模型的理解,在不是很熟悉 ...
- 用Linux / C实现基于自动扩/减容线程池+epoll反应堆检测沉寂用户模型的服务器框架(含源码)
用Linux/ C实现基于自动扩/减容线程池+epoll反应堆模型的服务器框架 前言 服务器端源码 客户端源码 自定义库 helper.c 和 helper.h helper.c helper.h M ...
- 【多输入模型 Multiple-Dimension 数学原理分析以及源码详解 深度学习 Pytorch笔记 B站刘二大人 (6/10)】
多输入模型 Multiple-Dimension 数学原理分析以及源码源码详解 深度学习 Pytorch笔记 B站刘二大人(6/10) 数学推导 在之前实现的模型普遍都是单输入单输出模型,显然,在现实 ...
- java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- 深度学习大模型训练--分布式 deepspeed PipeLine Parallelism 源码解析
deepspeed PipeLine Parallelism 源码解析 basic concept PipeDream abstract 1F1B 4 steps Code comprehension ...
- matlab人口迁移模型,人口迁移优化算法MATLAB源码
人口迁移算法是进化计算领域新出现的一种优化算法,它通过模拟人类社会人口迁移的社会现象,来构造启发式规则,提出的一种新型智能优化算法,GreenSim团队实现了该算法,并加入了一点小改进.本源码由Gre ...
- mysql服务器多线程模型_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码 - 陈彦斌 - 博客园...
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- Transformer课程第39章:面向Knowledge-intensive任务的Transformer模型RAG的架构及完整源码实现
1,为何Transformer网络能够存储factual knowledge信息? 2,pretrained dense retrieval数学原理分析 3,sequence-to-sequence ...
最新文章
- 4.12—002—周五
- python新人一月工资_python【项目】:工资管理(简易版)
- 在lean trace mode下运行function
- 7.33oracle安装不了,在RedHat7.0下安装Oracle的经历
- 【竞赛题解】第22次CCF计算机软件能力认证 B
- 很有用很有效的操作之批量操作一组图片
- MUI 如何更改单选框样式
- SaltStack配置管理之Gains与State测试
- P3986 斐波那契数列
- 实现简单的python爬虫功能
- 利用 LSTM 神经网络预测股价走势
- 手机安装W ndows7镜像,Windows7ISO镜像安装系统教程
- CSS实现平行四边形
- AliOS Things的SDK ESP8266 连接阿里生活物联网平台 配网失败解决方案
- 【亲测有效】解决 Ubuntu 虚拟机无法共享文件夹的问题
- 免费英文在线翻译-英文自动翻译
- 2019年(本命年)个人总结
- 《全国青少年软件编程等级考试》2021年3月C语言一级真题(含答案)
- 前端自学路线 更新11.11
- 英语影视台词---绿皮书(2)(利普 我以为你要把那家伙打死了)
热门文章
- 人工智能研究所使用方法,持续更新~
- Day 177/200 React 颜色选择器
- 整理了100个必备的 Python 函数,值得收藏
- 老男孩python全栈3期_Python/Python3视频教程2017老男孩Python全栈工程师3期基础Python3.5...
- 质量数据分析工具软件的应用
- mysql5.7绿色版安装与卸载教程
- 曲线运动与万有引力公式_物质自旋与力的形成 ——关于万有引力与磁荷力本质与统一问题的探讨...
- 1925异常 xshell_Xmanager Power Suite 6
- 隧道人员定位管理系统
- IT基础架构变革,Hitachi Vantara如何解决超融合(HCI)的真正痛点?