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 += 1NTF_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

原文地址:https://www.cnblogs.com/liuhuacai/p/10634027.html

时间: 2024-10-29 16:29:04

Python制作NTF传递函数工况文件和后处理文件的相关文章

Windows 环境下运用Python制作网络爬虫

import webbrowser as web import time import os i = 0 MAXNUM = 1 while i <= MAXNUM: web.open_new_tab('要刷的网络地址') os.system('taskkill /F /IM 浏览器文件名(chrome.exe)') i += 1 else: print 'happly day!' 代码和简单只要一个第三方的函数和调用系统的文件就OK了.记住给要刷的次数定值,不然电脑就不好受了! Windows

使用python制作ArcGIS插件(1)工具介绍

使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是从使用或者编写都更加方便快捷.通过开发语言,可以制作ArcGIS Desktop各个软件模块的插件. Addin支持多种开发语言,如.net.java和python.其中.net和java需要配合ArcGIS的SDK,使用ArcObjects进行开发.其好处是ArcObjects可以非常细粒度的控制

python制作安装包(setup.py)

1.制作setup.py from distutils.core import setup setup(name='Myblog', version='1.0', description='My Blog Distribution Utilities', author='lujianxing', author_email='[email protected]', url='http://blog.lujianxing.com', py_modules=['foo'] ) py_modules 定

python制作exe可执行文件的方法---使用pyinstaller

python生成windows下exe格式的可执行程序有三种可选方案: py2exe是大家所熟知的,今天要介绍pyinstaller, 这个工具全平台可用.我曾使用python制作一个工具程序供公司同事使用后,由于公司使用mac linux windows都有很多,就使用过它来将程序做成可执行文件,兼容性好,只是会使得程序在linux平台和mac平台启动较慢(windows还是比较快的),但基本够用. 安装完pyinstaller之后就可以开始了. 1.使用pyinstaller生成可执行文件的

利用Python制作王者荣耀出装小助手,引来了老板的注意!

导语 T_T并不玩这些游戏... 单纯来蹭个热点... 大概是因为蹭热点需要的技术含量比较低? 就这样吧~~~ 利用Python制作命令行版的王者荣耀出装小助手. Let's Go! 开发工具 Python版本:3.6.4 相关模块: requests模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 主要思路 爬的是<英雄联盟盒子>这个APP.用Fiddler抓包找到需要的Get请求地址即可... 不过显示的Get请求很长,在

Python制作本地数据集

1 ##################################################### 2 # 功能:Python制作本地数据集 3 ##################################################### 4 5 # 导入相应包 6 import os 7 from PIL import Image 8 import numpy as np 9 from keras.utils import to_categorical 10 11 d

华为数模D题–汽车行驶工况构建

原文链接:https://blog.xxcxw.cn/2019/09/22/2019%e5%b9%b4%e5%8d%8e%e4%b8%ba%e6%9d%af%e7%a0%94%e7%a9%b6%e7%94%9f%e6%95%b0%e5%ad%a6%e5%bb%ba%e6%a8%a1%e7%ab%9e%e8%b5%9bd%e9%a2%98-%e6%b1%bd%e8%bd%a6%e8%a1%8c%e9%a9%b6%e5%b7%a5%e5%86%b5/ 目标的提出 在上述背景下, 请根据附件(3 个数

python下通过os模块和shutil模块进行文件处理方式

python下通过os模块和shutil模块进行文件处理方式 得到当前工作目录路径:os.getcwd() 获取指定目录下的所有文件和目录名:os.listdir(dir) 删除文件:os.remove(file) 删除多个目录:os.removedirs(r"/home") 检测路径是否为文件:os.path.isfile(path) 检测路径是否为目录:os.path.isdir(path) 判断是否为绝对路径:os.path.isabs(path) 检测路径是否存在:os.pat

python之模块py_compile用法(将py文件转换为pyc文件)

# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块py_compile用法(将py文件转换为pyc文件) #二进制文件,是由py文件经过编译后,生成的文件. ''' import py_compile #不带转义r py_compile.compile('D:\test.py') Traceback (most recent call last): File "<pyshell#1>", line 1, in &l