ANSYS Fluent Python二次开发(1)

 安装pyansys包,实现ANSYS Fluent二次开发

import ansys.fluent.core as pyfluent
from ansys.fluent.core import examples
from ansys.fluent.visualization import set_config
import ansys.fluent.visualization.pyvista as pv

set_config(blocking=True, set_view_on_display="isometric")
#打开Fluent Meshing,并打开GUI,可视化操作
session = pyfluent.launch_fluent(mode="meshing", ui_mode="gui",cleanup_on_exit=True)
#输出Fluent版本
print(session.get_fluent_version())

#文件绝对路径
geometry_filename="E:/PythonProject/Project3/ansys_files/ahmed_body_20_0degree_boi_half.scdoc"

#初始化Meshing Workflow
workflow = session.workflow
workflow.InitializeWorkflow(WorkflowType="Watertight Geometry")
workflow.TaskObject["Import Geometry"].Arguments = dict(FileName=geometry_filename)
workflow.TaskObject["Import Geometry"].Execute()

#添加局部面网格facesize_front
add_local_sizing = workflow.TaskObject["Add Local Sizing"]
add_local_sizing.Arguments = dict(
    {
        "AddChild": "yes",
        "BOIControlName": "facesize_front",
        "BOIFaceLabelList": ["wall_ahmed_body_front"],
        "BOIGrowthRate": 1.15,
        "BOISize": 8,
    }
)
add_local_sizing.Execute()
add_local_sizing.InsertCompoundChildTask()
workflow.TaskObject["Add Local Sizing"].Execute()

#添加面网格facesize_front
add_local_sizing = workflow.TaskObject["Add Local Sizing"]
add_local_sizing.Arguments = dict(
    {
        "AddChild": "yes",
        "BOIControlName": "facesize_rear",
        "BOIFaceLabelList": ["wall_ahmed_body_rear"],
        "BOIGrowthRate": 1.15,
        "BOISize": 5,
    }
)
add_local_sizing.Execute()
add_local_sizing.InsertCompoundChildTask()
workflow.TaskObject["Add Local Sizing"].Execute()

#添加BOI网格大小
add_boi_sizing = workflow.TaskObject["Add Local Sizing"]
add_boi_sizing.InsertCompoundChildTask()
add_boi_sizing.Arguments = dict(
    {
        "AddChild": "yes",
        "BOIControlName": "boi_1",
        "BOIExecution": "Body Of Influence",
        "BOIFaceLabelList": ["ahmed_body_20_0degree_boi_half-boi"],
        "BOISize": 20,
    }
)
add_boi_sizing.Execute()
add_boi_sizing.InsertCompoundChildTask()

#添加表面网格
generate_surface_mesh = workflow.TaskObject["Generate the Surface Mesh"]
generate_surface_mesh.Arguments = dict(
    {
        "CFDSurfaceMeshControls": {
            "CurvatureNormalAngle": 12,
            "GrowthRate": 1.15,
            "MaxSize": 50,
            "MinSize": 1,
            "SizeFunctions": "Curvature",
        }
    }
)

generate_surface_mesh.Execute()
generate_surface_mesh.InsertNextTask(CommandName="ImproveSurfaceMesh")
improve_surface_mesh = workflow.TaskObject["Improve Surface Mesh"]
improve_surface_mesh.Arguments.update_dict({"FaceQualityLimit": 0.4})
improve_surface_mesh.Execute()

#几何体,边界,区域
workflow.TaskObject["Describe Geometry"].Arguments = dict(
    CappingRequired="Yes",
    SetupType="The geometry consists of only fluid regions with no voids",
)
workflow.TaskObject["Describe Geometry"].Execute()
workflow.TaskObject["Update Boundaries"].Execute()
workflow.TaskObject["Update Regions"].Execute()

#添加边界层
add_boundary_layers = workflow.TaskObject["Add Boundary Layers"]
add_boundary_layers.AddChildToTask()
add_boundary_layers.InsertCompoundChildTask()
workflow.TaskObject["smooth-transition_1"].Arguments.update_dict(
    {
        "BLControlName": "smooth-transition_1",
        "NumberOfLayers": 14,
        "Rate": 1.15,
        "TransitionRatio": 0.5,
    }
)
add_boundary_layers.Execute()

#生成体网格
generate_volume_mesh = workflow.TaskObject["Generate the Volume Mesh"]
generate_volume_mesh.Arguments.update_dict({"VolumeFill": "poly-hexcore"})
generate_volume_mesh.Execute()

#打开求解器
session = session.switch_to_solver()


#定义常数
density = 1.225
inlet_velocity = 30
inlet_area = 0.11203202

#定义材料
session.tui.define.materials.change_create("air", "air", "yes", "constant", density)
session.settings.setup.models.viscous.model = "k-epsilon"
session.settings.setup.models.viscous.k_epsilon_model = "realizable"
session.settings.setup.models.viscous.options.curvature_correction = True

#定义边界条件
inlet = session.settings.setup.boundary_conditions.velocity_inlet["inlet"]
inlet.turbulence.turb_intensity = 0.05
inlet.momentum.velocity.value = inlet_velocity
inlet.turbulence.turb_viscosity_ratio = 5

outlet = session.settings.setup.boundary_conditions.pressure_outlet["outlet"]
outlet.turbulence.turb_intensity = 0.05

#定义相关值
session.settings.setup.reference_values.area = inlet_area
session.settings.setup.reference_values.density = density
session.settings.setup.reference_values.velocity = inlet_velocity

#定义求解器设置session.tui.solve.set.p_v_coupling(24)

session.tui.solve.set.discretization_scheme("pressure", 12)
session.tui.solve.set.discretization_scheme("k", 1)
session.tui.solve.set.discretization_scheme("epsilon", 1)
session.tui.solve.initialize.set_defaults("k", 0.000001)

session.settings.solution.monitor.residual.equations["continuity"].absolute_criteria = (
    0.0001
)
session.settings.solution.monitor.residual.equations["x-velocity"].absolute_criteria = (
    0.0001
)
session.settings.solution.monitor.residual.equations["y-velocity"].absolute_criteria = (
    0.0001
)
session.settings.solution.monitor.residual.equations["z-velocity"].absolute_criteria = (
    0.0001
)
session.settings.solution.monitor.residual.equations["k"].absolute_criteria = 0.0001
session.settings.solution.monitor.residual.equations["epsilon"].absolute_criteria = (
    0.0001
)

#定义求解报告
session.settings.solution.report_definitions.drag["cd-mon1"] = {}
session.settings.solution.report_definitions.drag["cd-mon1"] = {
    "zones": ["wall_ahmed_body_main", "wall_ahmed_body_front", "wall_ahmed_body_rear"],
    "force_vector": [0, 0, 1],
}
session.parameters.output_parameters.report_definitions.create(name="parameter-1")
session.parameters.output_parameters.report_definitions["parameter-1"] = {
    "report_definition": "cd-mon1"
}

session.settings.solution.monitor.report_plots.create(name="cd-mon1")
session.settings.solution.monitor.report_plots["cd-mon1"] = {"report_defs": ["cd-mon1"]}

#初始化和运行求解器
session.settings.solution.run_calculation.iter_count = 5  #迭代次数
session.settings.solution.initialization.initialization_type = "standard"  #初始化类型
session.settings.solution.initialization.standard_initialize()
session.settings.solution.run_calculation.iterate(iter_count=5)

#后处理
session.results.surfaces.iso_surface.create(name="xmid")
session.results.surfaces.iso_surface["xmid"].field = "x-coordinate"
session.results.surfaces.iso_surface["xmid"] = {"iso_values": [0]}

graphics_session1 = pv.Graphics(session)
contour1 = graphics_session1.Contours["contour-1"]
contour1.field = "velocity-magnitude"
contour1.surfaces_list = ["xmid"]
contour1.display("window-1")

contour2 = graphics_session1.Contours["contour-2"]
contour2.field.allowed_values
contour2.field = "pressure-coefficient"
contour2.surfaces_list = ["xmid"]
contour2.display("window-2")

#保存案例文件
session.settings.file.write(file_type="case-data", file_name="ahmed_body_final.cas.h5")

#退出Fluent
session.exit()
#定义边界条件
boundary_conditions = solver.settings.setup.boundary_conditions

boundary_conditions.velocity_inlet["inlet-1"] = {
    "momentum": {
        "velocity_specification_method": "Magnitude, Normal to Boundary",
        "velocity": {
            "value": 1,
        },
    },
}

boundary_conditions.copy(
    from_="inlet-1",
    to=["inlet-2", "inlet-3"],
)

boundary_conditions.pressure_outlet["outlet-1"].turbulence.turbulent_intensity = 0.05

#初始化
solver.solution.initialization.hybrid_initialize()  #hybrid初始化类型

#求解
solver.solution.run_calculation.iterate(iter_count=100)  #迭代次数为100

#输出数据文档
solver.file.write(
    file_type="case-data",
    file_name="exhaust_system.cas.h5",
)
#图形图片导出配置
graphics = solver.results.graphics

if graphics.picture.use_window_resolution.is_active():
    graphics.picture.use_window_resolution = False
graphics.picture.x_resolution = 1920
graphics.picture.y_resolution = 1440

#创建突出显示流场的路径线,导出图像
graphics.pathline["pathlines-1"] = {
    "field": "time",
    "accuracy_control": {
        "tolerance": 0.001,
    },
    "skip": 5,
    "release_from_surfaces": ["inlet-1", "inlet-2", "inlet-3"],
}
graphics.pathline["pathlines-1"].display()

graphics.views.restore_view(view_name="isometric")
graphics.views.auto_scale()
graphics.picture.save_picture(file_name="pathlines-1.png")

#通过流形几何创建一个等值面
solver.results.surfaces.iso_surface["surf-x-coordinate"] = {
    "field": "x-coordinate",
    "zones": ["fluid-region-1"],
    "iso_values": [0.38],
}

#流速云图
graphics.contour["contour-velocity"] = {
    "field": "velocity-magnitude",
    "surfaces_list": ["surf-x-coordinate"],
    "node_values": False,
    "range_option": {
        "option": "auto-range-on",
        "auto_range_on": {
            "global_range": False,
        },
    },
}
graphics.mesh["mesh-1"] = {
    "surfaces_list": "*",
}
graphics.contour["contour-velocity"].display()

graphics.views.restore_view(view_name="right")
graphics.views.auto_scale()
graphics.picture.save_picture(file_name="contour-velocity.png")

#创建一个包含网格和轮廓的云图
solver.results.scene["scene-1"] = {}
scene1 = solver.results.scene["scene-1"]
scene1.graphics_objects.add(name="mesh-1")
scene1.graphics_objects["mesh-1"].transparency = 90
scene1.graphics_objects.add(name="contour-velocity")
scene1.display()

graphics.views.camera.position(xyz=[1.70, 1.14, 0.29])
graphics.views.camera.up_vector(xyz=[-0.66, 0.72, -0.20])
graphics.picture.save_picture(file_name="scene-1.png")

参考:官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值