Python制作NTF传递函数工况文件和后处理文件
摘要:在平时工作中,TB车身的传递函数分析,涉及到大量重复行的工作,费时费力。在学习python基础后,希望通过代码解决这部分重复工作。基础入门级操作,但是能够解决很大一部分工作内容。日后,待python学习达到一定水平后,在寻找更优的解决方案。
NVH频响,接附点一般在30个左右,分x,y,z三个方向,激励工况在90个上下,每个工况对应DAREA,RLOAD,DLOAD;在实际项目中,习惯运用工况文本文件进行提交运算。NTF计算,90个工况,对应90个响应;VTF计算,90个工况对应270个响应;IPI计算90个工况对应270个响应。前处理工况加载事件费事费力的工作,结果处理更是重复繁杂,而且容易出错。基于这样的情况,以下运用python基础技巧,进行解决。
一.文件管理
1.项目阶段TG1,TG2,TG3;
1.1每一阶段(如TG1)分别用三个文件夹来存储计算模型和结果
1.TG1_base:文件夹存放该论分析的基础模型;备注好数据日期,数据输入缺失项,以及商定缺失数据处理方案;
2.TG1_Engineering_scheme:文件夹存放工程技术方案(由你向设计部分提供概念优化方案,并且认定为可实施的工程方案,设计部分修改后的数据,逐一替换到该模型之中,每一次替换保存一个hm),在该文件夹中创建以日期命名的文件夹,用于存储设计部分反馈数据并且替换好的模型,并且以Excel备注好反馈的简明信息,并且每版数据替换后保存好hm文件,以免connector丢失;如有必要,在对应的日期的工程反馈数据模型中,进行问题诊断。
3.TG1_conceptual_scheme:文件夹存放概念优化方案(case1代表第一个概念方案,case2代表第二个概念方案········;一旦方案被认定为可工程化方案,移交设计部分进行设计画数据),并且以Excel备注好,方案基于那一版工程数据,方案的截图;路径及文件夹命名最好不要用汉字,用字母、数字、下划线;】
1.2运用python处理的文件为工况文件fem及结果处理文件mvw
二.工况文件fem及结果处理文件mvw
2.1.NTF计算工况文件fem
30个这样的组合(甚至更多,后续默认30个接附点)
2.NTF后处理文件mvw
90个这样的图片,一个工况subcase对应一个page包含3条曲线,红色代表基础模型计算结果,绿色代表可工程化的优化方案,蓝色虚线代表概念优化方案。
三.运用python处理重复工作(工况文件fem,结果处理文件mvw)
1.计算工况文件及结果处理文件mvw的制作
1.1subcase以及DAREA,RLOAD,DLOAD的编写
1.2所用到的python的命令
函数:def 函数定义好后,不调用就不会执行,当需要制作计算工况文件时,调用函数 header_sub();当需要制作后处理MVW文件时,调用NTF_result()
#coding=utf-8
#Version:python3.7.0
#tools:Pycharm 2017.3.2
##先通过hypergraph按自己要求制作出一张page,保存mvw格式文件作为需要重复的输入文件
mvw_onepage_input = "D:/NVH/NVH/NVH_scripts/TB_NTF/1.header_result/1.input_mvw/lne3_target3.mvw"
##python通过接收输入的文件,逐行读取,修改关键参数,在写入到后处理文件中
mvw_NTF_output = "D:/NVH/NVH/NVH_scripts/TB_NTF/1.header_result/2.output_mvw/Base_Engineering_conceptual.mvw"
##计算工况文件,内含在python代码中,直接输出即可。其他参数比较单一,直接复制粘贴即可
header_NTF_output = "D:/NVH/NVH/NVH_scripts/TB_NTF/1.header_result/3.output_header/NTF_header.fem"
##需要加载工况的接附点,制作成列表,方便代码调用
input_point = [101,102,103,201,202,203,204,205,206,301,302,303,304,305,306,307,308,309,310,311,312,401,402,403,404,405,406,501, 502,503,504,505,506,601,602,603,604]
##在工况文件中一个接附点(如101),对应3个方向的激励,定义方向列表
direc = ['X','Y','Z']
##定义后处理mvw文件制作,替换onepage中的所有SUBCASE 1 = 101:+X,p1w1,Page 1,page1,WindowIDs(2),然后逐行左对齐写入Base_Engineering_conceptual.mvw文件中
def NTF_result():
with open(mvw_NTF_output, 'a') as NTF_object: #以追加形式打开文件mvw_NTF_output,如果文件不存在,创建文件
NTF_object.write("{ safe_quotes_on }\n") #写入文本
NTF_object.write('{ PLOT_FILE_1 = "TG1_base.op2"}\n')
NTF_object.write('{ PLOT_FILE_2 = "TG1_Engineering_scheme.op2" }\n')
NTF_object.write('{ PLOT_FILE_3 = "TG1_conceptual_scheme.op2" }\n')
NTF_object.write('*Id("HyperWorks", "12.*")\n')
NTF_object.write('*BeginPalette()\n')
NTF_object.write('*EndPalette()\n')
i = 0
while i < len(input_point): #开始处理重复page
j = 0
while j < 3:
with open(mvw_onepage_input) as file_object: #打开事先调试好的一页page文件mvw_onepage_input
for line in file_object:
sub_id = 3 * i + j + 1
if sub_id < 10 : #此处是因为前任制作的工况文件的sub是1-9 19-120,所以此处用if语句跳过10-18
s1 = line.replace('SUBCASE 1 = 101:+X',
'SUBCASE {n1} = {n2}:+{n3}'.format(n1=3 * i + j + 1, n2=input_point[i],
n3=direc[j]))
s2 = s1.replace('p1w1', 'p{n1}w1'.format(n1=3 * i + j + 1))
s3 = s2.replace('Page 1', 'Page {n1}'.format(n1=3 * i + j + 1))
s4 = s3.replace('WindowIDs(2)', 'WindowIDs({n1})'.format(n1=3 * i + j + 2))
s5 = s4.replace('page1', 'page{n1}'.format(n1=3 * i + j + 1))
with open(mvw_NTF_output, 'a') as NTF_object:
NTF_object.write(s5.rstrip())
NTF_object.write('\n')
else :
sub_id = 3 * i + j + 10
s1 = line.replace('SUBCASE 1 = 101:+X',
'SUBCASE {n1} = {n2}:+{n3}'.format(n1=sub_id, n2=input_point[i],
n3=direc[j]))
s2 = s1.replace('p1', 'p{n1}'.format(n1=3 * i + j + 1))
s3 = s2.replace('Page 1', 'Page {n1}'.format(n1=3 * i + j + 1))
s4 = s3.replace('WindowIDs(2)', 'WindowIDs({n1})'.format(n1=3 * i + j + 2))
s5 = s4.replace('page1', 'page{n1}'.format(n1=3 * i + j + 1))
with open(mvw_NTF_output, 'a') as NTF_object:
NTF_object.write(s5.rstrip())
NTF_object.write('\n')
j += 1
i += 1 def NTF_sub(): #定义工况文件,注意int数据类型转变为str
i = 0
while i < len(input_point): #写入sucase
j = 0
while j < 3:
with open(header_NTF_output, 'a') as header_object:
header_object.write('SUBCASE {n1}\n'.format(n1=3 * i + j + 1))
header_object.write(' LABEL {n1}:+{n2}\n'.format(n1=input_point[i],n2=direc[j]))
header_object.write(' DLOAD = {n1}\n'.format(n1=input_point[i]*10+j+1))
j += 1
i += 1
a = 0
while a < len(input_point): #写入DAREA,RLOAD,DLOAD
b = 0
while b < 3:
with open(header_NTF_output, 'a') as header_object:
dload_id = input_point[a]*10 + b+1
rLoad_id = 20000+input_point[a]*10 + b+1
darea_id = 10000+input_point[a]*10 + b+1
point = '#'+str(input_point[a])
xyz = b+1
header_object.write('\n')
header_object.write(point.ljust(8))
header_object.write('\n')
header_object.write('DLOAD'.ljust(8))
header_object.write(str(dload_id).rjust(8))
header_object.write('1.0'.rjust(8))
header_object.write('1.0'.rjust(8))
header_object.write(str(rLoad_id).rjust(8))
header_object.write('\n')
header_object.write('RLOAD1'.ljust(8))
header_object.write(str(rLoad_id).rjust(8))
header_object.write(str(darea_id).rjust(8))
header_object.write('3'.rjust(24))
header_object.write('0'.rjust(8))
header_object.write('LOAD'.rjust(8))
header_object.write('\n')
header_object.write('DAREA'.ljust(8))
header_object.write(str(darea_id).rjust(8))
header_object.write(str(input_point[a]).rjust(8))
header_object.write(str(xyz).rjust(8))
header_object.write('\n')
b += 1
a += 1
NTF_sub() #工况文件值写入了sub DAREA RLOAD DLOAD,其余相关设置复制粘贴即可
NTF_result() #调用定义的函数,不调用函数不执行
四.运用
1.NTF_header.fem
不重复的部分,python代码并没有写入;相关参数直接用复制以往计算文件,用NTF_header中的sub替换即可
2.Base_Engineering_conceptual.mvw
用UE打开,对应结果文件的路径及名称替换后就看可以用hypergraph打开,就出现三条曲线对比的图
{ PLOT_FILE_1 = "`````/TG1/1.TG1_NTF_base/TG1_base.op2"}
{ PLOT_FILE_2 = "`````/TG1/2.TG1_NTF_engineering_scheme/20190325/TG1_Engineering_scheme.op2" }
{ PLOT_FILE_3 = "`````/TG1/3.TG1_NTF_conceptual_scheme/case1/TG1_conceptual_scheme.op2" }
总结:该过程只能解决整个分析过程的一些片段,不能系统的解决工程问题。本人也在不断学习改进中,希望通过解决实际工作中的问题,来学习python。没错,是为了学习python,把工作问题拿来练习。
如果各位大神有更好的解决方案,欢迎邮件联系:liuhuacai@outlook.com
Python制作NTF传递函数工况文件和后处理文件的更多相关文章
- 调用Fluent进行多工况计算总结
算例来源:https://confluence.cornell.edu/display/SIMULATION/FLUENT+-+Turbulent+Pipe+Flow 有时候我们对同一模型进行多工况计 ...
- 使用python制作ArcGIS插件(2)代码编写
使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...
- 使用python制作ArcGIS插件(1)工具介绍
使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...
- python制作pdf电子书
python制作pdf电子书 准备 制作电子书使用的是python的pdfkit这个库,pdfkit是 wkhtmltopdf 的Python封装包,因此在安装这个之前要安装wkhtmltopdf 安 ...
- 使用python制作时间戳转换工具
使用python制作时间戳转换工具 python 时间戳转日期 日期转时间戳 前言:作为一个程序员一般情况下,json和时间戳是常用的两个工具,我咨询过很多个朋友,他们一般都是通过在线工具对json进 ...
- python制作exe可执行文件的方法---使用pyinstaller
python制作exe可执行文件的方法---使用pyinstaller python生成windows下exe格式的可执行程序有三种可选方案: py2exe是大家所熟知的,今天要介绍pyinsta ...
- 打包python文件,让文件程序化
通过对源文件打包,Python程序可以在没有安装 Python的环境中运行,也可以作为一个独立文件方便传递和管理. 现在网上主流的打包方式有两种py2exe或者pyinstaller两款多平台的Pyt ...
- python制作命令行工具——fire
python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...
- python 根据现有文件树创建文件树
# -*- coding: utf-8 -*- import os, errno def fileName(path):#获取文件夹 str = '' for i in range(1,len(pat ...
随机推荐
- php常用函数htmlspecialchars、strip_tags、addslashes解析
本文章向大家介绍php开发中经常使用到的字符串函数htmlspecialchars.strip_tags.addslashes的使用方法及他们之间的区别,需要的朋友可以参考一下. 1.函数strip_ ...
- vs参数配置
配置属性-常规: 输出目录:工程的输出目录,主要包括.exe..dll..lib文件,是工程最后想要的文件.vs2015位于解决方案的\x64\Debug下,vs2010,vs2005位于解决方案的D ...
- redis学习--Hashes数据类型
本文转自:http://www.cnblogs.com/stephen-liu74/archive/2012/03/19/2352932.html 一.概述: 我们可以将Redis中的Hashes类型 ...
- jQuery插件:图片放大镜--jQuery Zoom
本文转载于http://blog.csdn.net/xinhaozheng/article/details/4085644, 这是一款非常不错的给图片添加放大镜效果,可以应用在诸如zen cart,m ...
- ffmpeg解码RTSP/TCP视频流H.264(QT界面显示视频画面)
源码下载地址: http://download.csdn.net/detail/liukang325/9489952 我用的ffmpeg版本为 ffmpeg-2.1.8.tar.bz2 版本低了恐怕有 ...
- [SHOI2017]期末考试
题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布. 第i位同学希望在第ti天或之前得知所有课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最 ...
- 每天一个linux命令(7):rmdir命令
版权声明更新:2017-05-11博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的rmdir命令. ...
- ACM学习历程—FZU2148 Moon Game(计算几何)
Moon Game Description Fat brother and Maze are playing a kind of special (hentai) game in the clearl ...
- ASP.NET AJAX(Atlas)和Anthem.NET——管中窥豹般小小比较
Anthem.NET近日有朋友和我提到Anthem.NET这个同样基于ASP.NET的Ajax框架,今天有机会亲自尝试了一下.初步的感觉似乎和ASP.NET AJAX不相上下,甚至某些地方要强于ASP ...
- 关于openstack自动化安装的一点思考
在openstack针对具体应用的解决方案已成型之后,按照官方文档安装openstack实际上就成了一个繁琐的事情. 我有一个设想,之前实施了一点,还未成功,但是也想记录下来.最终目标:使用U盘直接部 ...