在较新的Fluent版本中,通过开启Beta功能可以在TUI窗口利用Python替代原本的TUI命令,这样形成的脚本文件更加的容易理解与阅读,也可以更方便地进行流程封装及参数化。
本案例演示利用Python Console控制CAD几何导入、网格划分、求解参数设置、计算求解以及后处理等过程。
注:案例文件取自Fluent Beta文档。
”
Meshing
模式启动Fluent,激活选项Show Beta Launcher Options
General Options
下启用Python Console(Beta)
选项,然后点击按钮Start
启动Fluent Meshing。打开Fluent后可以在控制台中利用Python对工作流程进行控制。
Fluent Meshing启动后,在Console中输入下面的代码(注意>>>
是输入提示符),初始化Watertight Geometry网格生成工作流程,并为长度、面积和体积设置默认全局单位
>>> workflow.InitializeWorkflow(WorkflowType=r'Watertight Geometry')
>>> meshing.GlobalSettings.LengthUnit.set_state(r'mm')
>>> meshing.GlobalSettings.AreaUnit.set_state(r'mm^2')
>>> meshing.GlobalSettings.VolumeUnit.set_state(r'mm^3')
输入后如下图所示。
同时树形菜单中自动添加了watertight geomtry工作流相应的节点。
导入CAD几何
。在TUI窗口中输入下面的代码指定CAD几何文件的名称及位置(注意修改文件路径),然后更新任务:
>>> workflow.TaskObject['Import Geometry'].Arguments.set_state({r'FileName': r'E:/exhaust_manifold/manifold.scdoc',})
>>> workflow.TaskObject['Import Geometry'].Execute()
如下图所示。
导入的几何如下图所示。
几何文件下载链接:https://ansyshelp.ansys.com/Views/Secured/Doc_Assets/v232/Fluent/exhaust_manifold.zip
”
添加局部尺寸
。输入下面的命令,保持默认设置并更新任务。
>>> workflow.TaskObject['Add Local Sizing'].AddChildAndUpdate()
生成面网格
。输入下面的命令,采用默认参数并更新任务,生成面网格。
>>> workflow.TaskObject['Generate the Surface Mesh'].Execute()
执行完毕后生成的面网格如下图所示。
描述几何
。在此任务中,输入下面的代码描述CAD几何。
>>> workflow.TaskObject['Describe Geometry'].UpdateChildTasks(SetupTypeChanged=False)
>>> workflow.TaskObject['Describe Geometry'].Arguments.set_state({r'CappingRequired': r'No',r'SetupType': r'The geometry consists of only solid regions',})
>>> workflow.TaskObject['Describe Geometry'].UpdateChildTasks(SetupTypeChanged=True)
>>> workflow.TaskObject['Describe Geometry'].Execute()
封闭流体区域
。在此任务中,每个进口和出口开口都被封闭,以便可以提取内部体积。需要在提前在几何中进行命名。
>>> workflow.TaskObject['Enclose Fluid Regions (Capping)'].Arguments.set_state({r'LabelSelectionList': [r'in1'],})
>>> workflow.TaskObject['Enclose Fluid Regions (Capping)'].AddChildAndUpdate()
>>> workflow.TaskObject['Enclose Fluid Regions (Capping)'].Arguments.set_state({r'LabelSelectionList':[r'in2'],})
>>> workflow.TaskObject['Enclose Fluid Regions (Capping)'].AddChildAndUpdate()
>>> workflow.TaskObject['Enclose Fluid Regions (Capping)'].Arguments.set_state({r'LabelSelectionList':[r'in3'],})
>>> workflow.TaskObject['Enclose Fluid Regions (Capping)'].AddChildAndUpdate()
>>> workflow.TaskObject['Enclose Fluid Regions (Capping)'].Arguments.set_state({r'LabelSelectionList':[r'out1'],r'ZoneType': r'pressure-outlet',})
>>> workflow.TaskObject['Enclose Fluid Regions (Capping)'].AddChildAndUpdate()
封闭后的计算模型如图所示。
创建区域
。保持默认设置并更新任务:
>>> workflow.TaskObject['Create Regions'].Execute()
更新区域
。保持默认设置并更新任务:
>>> workflow.TaskObject['Update Regions'].Execute()
添加边界层
。保持默认设置并更新任务:
>>> workflow.TaskObject['Add Boundary Layers'].AddChildAndUpdate()
生成体网格
。保持默认设置并更新任务:
>>> workflow.TaskObject['Generate the Volume Mesh'].Execute()
生成体网格如图所示。
从网格生成模式切换到Fluent的求解器模式:
>>> solver = meshing.switch_to_solver()
激活能量方程。启用计算中考虑温度:
>>> solver.setup.models.energy.enabled = True
创建一个名为"water-liquid"的材料:
>>> solver.setup.materials.database.copy_by_name(type="fluid", name="water-liquid")
设置单元区域。将流体单元区域的介质指定为水。
>>> solver.setup.cell_zone_conditions.fluid["fluid1"].material = "water-liquid"
设置边界条件。将三个进口分别设置为不同的进口速度和温度:
>>> solver.setup.boundary_conditions.velocity_inlet["velo-inlet_1"].vmag.value=4
>>> solver.setup.boundary_conditions.velocity_inlet["velo-inlet_1"].t.value=293
>>> solver.setup.boundary_conditions.velocity_inlet["velo-inlet_2"].vmag.value=2
>>> solver.setup.boundary_conditions.velocity_inlet["velo-inlet_2"].t.value=300.25
>>> solver.setup.boundary_conditions.velocity_inlet["velo-inlet_3"].vmag.value=5
>>> solver.setup.boundary_conditions.velocity_inlet["velo-inlet_3"].t.value=313.5
使用混合初始化方法初始化流场。
>>> solver.solution.initialization.hybrid_initialize()
计算100次迭代的解。
>>> solver.solution.run_calculation.iter_count = 100
>>> solver.solution.run_calculation.iterate()
创建速度矢量并按温度着色显示:
>>> solver.results.graphics.vector["velocity_vectors"] = {}
>>> solver.results.graphics.vector["velocity_vectors"].field = "temperature"
>>> solver.results.graphics.vector["velocity_vectors"].surfaces_list = ["in*", "out*", "solid*"]
>>> solver.results.graphics.vector["velocity_vectors"].scale.scale_f = 4
>>> solver.results.graphics.vector["velocity_vectors"].style = "arrow"
>>> solver.results.graphics.vector["velocity_vectors"].display()
图形显示如图所示。
计算质量流率。
>>> solver.solution.report_definitions.flux["mass_flow_rate"] = {}
>>> solver.solution.report_definitions.flux["mass_flow_rate"].zone_names = ["velo*", "pres*"]
>>> solver.solution.report_definitions.flux["mass_flow_rate"].print_state()
>>> solver.solution.report_definitions.compute(report_defs=["mass_flow_rate"])
输出结果为:
可以输入下面的代码关闭Fluent
>>> solver.exit()
(完)