当前位置: 首页 > news >正文

嘉兴微信网站建设/专业网页设计和网站制作公司

嘉兴微信网站建设,专业网页设计和网站制作公司,做网站维护合同,程序可以做网站吗本案例以球阀为对象,基于其仿真参数化文件,演示如何对仿真流程进行界面开发,形成定制化仿真模板的完整过程。1、需求描述球阀控制水通过1英寸(25.4毫米)直径管道,在不同流速和阀门开度时,会对应着不同的管道压降。通过…
本案例以球阀为对象,基于其仿真参数化文件,演示如何对仿真流程进行界面开发,形成定制化仿真模板的完整过程。1、需求描述球阀控制水通过1英寸(25.4毫米)直径管道,在不同流速和阀门开度时,会对应着不同的管道压降。通过仿真模板开发形成定制化界面,需实现用户通过界面输入流速阀门开度后,执行计算功能后即可完成整个分析流程,输出并显示管道压降7df3efbd378d7bad494668aaa9929e01.png2、知识储备在开始之前,我们需要了解:仿真模板开发涉及仿真流程开发界面开发两个阶段。在仿真流程开发阶段中,首先需要对仿真流程进行参数化,实现的方式有两种:Workbench参数化脚本参数化;然后通过WB脚本对仿真流程进行集成和调用。界面开发阶段中,我们将仿真流程封装起来,提供与仿真流程中输入和输出参数间交互的用户界面。整个开发过程中,需要掌握的知识内容如下:
  • 首先需熟悉ANSYS仿真操作过程,可以在Workbench平台对仿真流程进行参数化;WB参数化方法可以查看往期文章《轻松搞定ANSYS仿真参数化》。如果是采用脚本参数化的方式,需要了解软件模块对应的脚本开发知识,如SCDM中的Python脚本、Fluent中的Scheme脚本、Mechanical中的ACT Python脚本。
  • 然后了解WB框架结构和脚本功能,并熟练使用Python对脚本代码进行仿真流程集成功能扩展。内容参照前期的《基于Python的Workbench开发指南+案例解析》和《Workbench开发指南:仿真流程集成》。
  • 最后具备面向对象编程和代码封装能力,至少掌握一种常用界面开发(GUI)技术,如C#的WinForms开发或WPF开发、QT界面开发等技术。
3、实施路线以球阀仿真流程为例,以其Workbench参数化文件为基础,根据开发需求,模板开发的实施路线和详细的操作步骤如下。852850122b1c461d097b31372e24d5c4.png3.1 WB参数化在WB中创建分析项目,并对阀门开度(valveAngle)和入口流速(inletVelocity)设置进行参数化,详情查看《案例:流体仿真分析参数化Step by Step》,完成后项目和参数视图如下。9b715ef2601242a1ea49b5801ba2f392.png3.2 脚本开发编写WB脚本代码,实现Parameter Set下的输入参数:阀门开度(P1)入口流速(P3)的修改,并将输入参数初始值用特殊字符替换,脚本内容如下。
# encoding: utf-8import osvalveAngle = "@valveAngle"    # 定义阀门开度参数值inletVelocity = "@inletVelocity" # 定义入口速度参数值# 获取设计点对象,赋值到变量dpdp = Parameters.GetDesignPoint(Name="0")# 设置阀门开度参数-P1值为valveAngle变量值dp.SetParameterExpression(Parameter=Parameters.GetParameter(Name="P1"),                        Expression="%s [degree]" % valveAngle)# 设置入口速度参数-P3值为inletVelocity变量值dp.SetParameterExpression(Parameter=Parameters.GetParameter(Name="P3"),                        Expression="%s [m s^-1]" % inletVelocity)# 更新Workbench仿真系统Update()
3.3 脚本功能扩展添加结果输出代码到脚本中,在仿真系统更新完成后,自动输出最大网格扭曲度(P2)管道压降(P4),最后保存项目文件。
# 功能扩展:参数输出output_list = ["P2", "P4"]def export_result(param_list):    cur_dir = os.path.split(os.path.realpath(__file__))[0]    with open(os.path.join(cur_dir, "result.txt"), "w") as result:        for param_name in param_list:            param = Parameters.GetParameter(Name=param_name)            result.write(param.DisplayText + "={:.4f}\n".format(param.Value.Value))# 输出结果值到result.txt文件中export_result(output_list)Save(Overwrite=True) # 保存计算文件
3.4 保存项目及脚本文件将上述脚本代码内容放在一起保存为Valve.py;在Workbench界面中,选择File -> Archive功能,将项目文件保存为Valve.wbpz。项目和脚本文件放在同一个文件夹中。3.5 用户界面代码开发采用C#的WinForms开发技术,可以进行可视化的界面设计。首先打开Visual Studio2015,执行文件 -> 新建 -> 项目,选择创建Visual C#模板下的Windows窗体应用程序,解决方案和名称都为ValveApp;然后在VS2015中将工具箱中的Label、GroupBox、TextBox和Button控件拖动到窗体(Form)上,创建下图所示窗体控件布局和内容。9872ad2d12ce5fcf1ff78bd2c14b5c15.png3.6 界面后端代码开发后端代码用于实现界面交互功能,包括脚本参数替换、WB批处理调用、求解计算和结果读取等,具体代码如下。
  • 脚本参数替换

替换原始脚本中的变量值为指定值,然后写入到文件中生成新脚本。
private static void CreatePyScript(string srcPath, string srcParam, string dstParam){        var src = new StreamReader(srcPath);        string pyScript = src.ReadToEnd();        src.Close();        if (srcParam != null) pyScript = pyScript.Replace(srcParam, dstParam);        var dst = new StreamWriter(srcPath);        dst.Write(pyScript);        dst.Close();}
  • WB批处理调用

创建新的进程(Process),指定参数项目文件(*.wbpz)和脚本文件(*.py),调用WB批处理命令。
private static bool RunWB2(int ver, string wbpzPath, string pyPath){    Process p = new Process();    string ansysVer = string.Format("AWP_ROOT{0}", ver);    string ansysDir = System.Environment.GetEnvironmentVariable(ansysVer);    //判断是否安装对应ANSYS版本    if (ansysDir == null)    {        throw (new Exception("This version of ANSYS is not installed!"));    }    string ansysWbPath = Path.Combine(ansysDir, "Framework\\bin\\Win64\\runwb2.exe");    try    {        p.StartInfo.FileName = ansysWbPath;        p.StartInfo.Arguments = " -F \"" + wbpzPath + "\" -B -R \"" + pyPath + "\"";        p.Start();        p.WaitForExit();        p.Close();        return true;    }    catch (Exception e)    {        string errorMsg = "ANSYS calculation failed, please check the Settings!\n" + e.Message;        p.Close();        throw (new Exception(errorMsg));    }
  • 求解计算

首先将原始的项目和脚本文件复制到工作目录下,然后将脚本中参数替换为界面输入值,最后调用WB批处理方法RunWB2执行仿真计算。
private bool solve(out string workDir){    string exePath = Directory.GetCurrentDirectory();  //获取当前执行程序地址    string srcWbPath = Path.Combine(exePath, "wb_files", "Valve.wbpz");        string srcScriptPath = Path.Combine(exePath, "wb_files", "Valve.py");        //创建临时工作目录        workDir = Path.Combine(exePath, "temp_files", DateTime.Now.ToString("yyyyMMddHHmm"));        if (Directory.Exists(workDir) == false) Directory.CreateDirectory(workDir);        string dstScriptPath = Path.Combine(workDir, "Valve.py");        string dstWbPath = Path.Combine(workDir, "Valve.wbpz");        //拷贝项目和脚本文件到工作目录        File.Copy(srcWbPath, dstWbPath, true);        File.Copy(srcScriptPath, dstScriptPath, true);        //替换脚本参数为界面输入值        CreatePyScript(dstScriptPath, "@valveAngle", txtAngleInput.Text);        CreatePyScript(dstScriptPath, "@inletVelocity", txtVelInput.Text);        bool flag = RunWB2(193, dstWbPath, dstScriptPath);        return flag;}
  • 结果文件读取

计算输出的结果文件内容如下。
Mesh-Max=0.8733pressure-drop-op=4091.4672
编写代码读取文件数据,将最大网格扭曲度和管道压降的结果存在泛型数组里。
private static List<string> GetOutputValues(string resultPath){    List<string> res = new List<string>();    if (File.Exists(resultPath))    {        var sr = new StreamReader(resultPath);        string line;        string value;        while ((line = sr.ReadLine()) != null)        {            value = line.Split('=')[1].Trim();            res.Add(value);        }        sr.Close();    }    return res;}
3.7 界面事件处理事件(Event)基本上说是一个用户操作,如按键、点击、鼠标移动等等;应用程序需要在事件发生时对事件进行响应。通过事件机制可以实现界面控件调用后端功能代码。本案例中,我们为btnSolve按钮添加一个Click事件,挂接到btnSolve_Click方法上,以此实现完整仿真流程调用。
private void btnSolve_Click(object sender, EventArgs e){    string workDir;    bool flag = solve(out workDir);    if (flag)    {        string outputPath = Path.Combine(workDir, "result.txt");        List<string> resList = null;        //读取结果文件,获取输出参数        resList = GetOutputValues(outputPath);        if (resList.Count == 2) //更新界面控件显示        {            txtMeshOutput.Text = resList[0];            txtPressOutput.Text = resList[1] + " [Pa]";            MessageBox.Show("仿真流程计算完成!", "Valve Simulation");        }    }}
3.8 编译和运行在VS2015中编译项目代码,生成应用程序ValveApp.exe,然后将原始项目和脚本文件放在wb_files文件夹中,将应用程序和wb_files文件夹放在同一目录,文件结构如下图所示。b7ae71a19447df25fd24115b09deaea0.png点击ValveApp.exe即可运行仿真模板程序,运行效果如下视频所示。4、后记在实际仿真模板开发项目中,大部分工作量都集中在仿真流程开发上。当然界面开发难度会随着参数数量交互复杂性的增大而急剧增大。界面开发的方式有很多种,比如常用的C#的WinForms或Python的PyQt5等,大家可以根据自己的喜好去选择。仿真流程参数化是仿真流程开发中的关键部分,我们可以通过WB参数化功能或者是脚本参数化实现。WB参数化方式存在局限性:只适用于何拓扑和边界类型不变的模型,即计算只会改变其大小与位置尺寸、边界条件值。如果涉及几何拓扑、物理模型、边界类型的更改和自动后处理操作等,就需要采用更灵活和通用性脚本参数化的方式。往期内容推荐轻松搞定ANSYS仿真参数化案例:流体仿真分析参数化Step by Step基于Python的Workbench开发指南+案例解析Workbench开发指南:仿真流程集成SCDM二次开发快速入门|应用+技巧SCDM二次开发系列:Doc对象详解SCDM二次开发系列:对象选择SCDM二次开发系列:智能选择SCDM二次开发系列:创建命名组SCDM二次开发系列:参数化建模

7a69748da20394925cd083bab6989ae9.png

d08b82e4f45939ed75c94ddd97a9f771.png觉得有收获记得转发给你的朋友们哦!
http://www.jmfq.cn/news/4970017.html

相关文章:

  • 大连的网站设计公司/北京做的好的seo公司
  • 申请网站建设的请示/教你如何快速建站
  • 桂林北京网站建设/推广代理公司
  • 现在建网站/品牌营销案例
  • 护肤品 网站建设策划书/seo蜘蛛池
  • 怎么自己做彩票网站/seo代码优化工具
  • 长春seo网站建设费用/技能培训
  • 小说网站开发的看书软件/seo值是什么意思
  • 网站流量如何盈利/天津百度推广电话号码
  • 承德市网站开发/磁力宝最佳搜索引擎入口
  • django网站开发实例源码/做app推广去哪找商家
  • 医社保增减员在什么网站做/现在网络推广方式
  • 要建一个网站该怎么做/知乎推广合作
  • 龙华专业做网站/百度竞价代理公司
  • 做水果的有什么网站/石家庄百度seo排名
  • 人才网站源码/外贸获客软件
  • 自动化科技产品网站建设/域名ip地址在线查询
  • 鞍山网站怎么做出来的/上海百度推广公司排名
  • 自建站什么意思/网络营销常见的工具
  • seo网站营销/西安网站定制开发
  • 建设公司网站靠谱吗/企业宣传推广
  • 网站备案提交资料/全网优化推广
  • 做海鲜团购网站/独立站怎么搭建
  • 合肥网站搜索优化/百度q3财报2022
  • 什么网站程序可以做抽奖页面/谷歌seo优化推广
  • 广西建设工程质检安全网站/如何做网页制作
  • 早期做的网站支持现在的网速吗/营销策划是做什么
  • app在线制作网站/怎么注册百度账号
  • 用vs做网站后台/网站搜索引擎优化方法
  • 微商/宁德seo培训