用户可以通过调用 launch_fluent()
方法在gRPC模式下从Python启动Fluent。此代码会在后台启动Fluent,以便能够从Python解释器向Fluent发送命令:
import ansys.fluent.core as pyfluent
solver = pyfluent.launch_fluent(mode="solver")
若要连接到已启动gRPC服务器的Fluent会话,可使用 connect_to_fluent()
方法。Fluent中的gRPC服务器可通过命令行启动选项 -sifile=
、server/start-server
文本命令或功能区菜单File -> Applications -> Server -> Start...
启动。Fluent在启动gRPC服务器时会输出一个服务器信息文件。以下代码通过工作目录中的服务器信息文件 server.txt
连接到正在运行的Fluent会话:
import ansys.fluent.core as pyfluent
solver = pyfluent.connect_to_fluent(server_info_file_name="server.txt")
1 启动选项
以下示例展示了不同方式在本地启动Fluent。更多详情,请查阅 launch_fluent()
。
1.1 Solution模式
此例展示以Solution模式启动Fluent:
solver = pyfluent.launch_fluent(mode="solver")
1.2 Meshing模式
此例展示以Meshing模式启动Fluent:
meshing_session = pyfluent.launch_fluent(mode="meshing")
1.3 精度设置
此例展示在Solution模式下启动Fluent并设定浮点数精度:
solver = pyfluent.launch_fluent(precision="double", mode="solver")
1.4 模型维度
此例展示在Solution模式下启动Fluent并设定模型维度:
solver = pyfluent.launch_fluent(precision="double", version="2d", mode="solver")
1.5 本地并行
此例展示在Solution模式下启动Fluent并为本地并行执行设定处理器数量:
solver = pyfluent.launch_fluent(precision="double", version="2d", processor_count=2, mode="solver")
1.6 分布式并行
此例展示以16个处理器在多台机器上启动处于Solution模式的Fluent:
solver = pyfluent.launch_fluent(precision="double", version="3d", processor_count=16, mode="solver", additional_arguments="-cnf=m1:8,m2:8")
2 日志支持
PyFluent提供了一个启用日志记录的选项。
可以使用此命令开启日志记录:
pyfluent.logging.enable()
详细信息,请参阅《文件日志和调试》。
3 调度器支持
当PyFluent在作业调度器环境中运行时,launch_fluent()
方法会自动确定用于启动Fluent的机器列表和核心计数。支持的调度器环境包括Univa Grid Engine (UGE)、Load Sharing Facility (LSF)、Portable Batch System (PBS) 和 Slurm。
以下是一个可以使用 sbatch
命令提交给Slurm调度器的bash脚本示例:
#!/bin/bash
#SBATCH --job-name="pyfluent"
#SBATCH --nodes=8
#SBATCH --ntasks=32
#SBATCH --output="%x_%j.log"
#SBATCH --partition=mpi01
# 切换到提交Slurm作业的目录
cd $SLURM_SUBMIT_DIR
# 激活你偏好的Python环境
export AWP_ROOT232=/apps/ansys_inc/v232
. ./venv/bin/activate
# 运行PyFluent脚本
python run.py
此示例中值得注意的几点:
-
请求了八台机器共32个核心。Fluent会根据传递给 -t
和-cnf
的命令行参数启动。 -
设置变量 AWP_ROOT232
以让PyFluent知道在哪里找到Fluent安装位置。 -
假设在提交作业到Slurm之前已经配置好带有PyFluent的Python虚拟环境。如有需要,也可作为作业脚本的一部分进行配置。 -
run.py
文件可以包含任意数量的PyFluent命令,使用任何支持的接口。
一旦在调度器环境中运行,launch_fluent()
方法有几种不同的使用方式。此例展示如何在请求的所有机器和核心上启动三维、双精度版本的Fluent:
solver = pyfluent.launch_fluent(precision="double", version="3d", mode="solver")
如果希望限制Fluent使用的内核数量,可以传递 processor_count
参数:
solver = pyfluent.launch_fluent(precision="double", version="3d", processor_count=16, mode="solver")
这样传递 processor_count
参数会强制Fluent在16个核心上执行,尽管Slurm作业提交请求了总共32个核心。在调度器环境分配了机器上的所有核心而你知道Fluent可能不会很好地扩展到所有分配的核心时,这种行为可能会有用。
最后,如果想忽略调度器分配,可以通过 additional_arguments
参数向 launch_fluent()
方法传递 -t
或 -t
及 -cnf
参数。对于本地并行执行,只需传递 -t
参数:
solver = pyfluent.launch_fluent(precision="double", version="3d", mode="solver", additional_arguments="-t16")
对于分布式并行处理,通常需要传递多个参数:
solver = pyfluent.launch_fluent(
precision="double",
version="3d",
mode="solver",
additional_arguments="-t16 -cnf=m1:8,m2:8",
)
launch_fluent()
方法还支持 scheduler_options
参数,用于不使用bash脚本直接向Slurm调度器提交Fluent作业:
slurm = pyfluent.launch_fluent(
scheduler_options={
"scheduler": "slurm",
"scheduler_headnode": "" ,
"scheduler_queue": "" ,
"scheduler_account": ""
},
additional_arguments="-t16 -cnf=m1:8,m2:8",
)
solver = slurm.result()
scheduler_headnode
、scheduler_queue
和 scheduler_account
键是可选的,它们以类似Fluent调度器选项的方式指定。这里launch_fluent
方法返回一个 SlurmFuture
实例,从中可以提取PyFluent会话。有关详细使用方法,请参阅 slurm_launcher
模块的文档。
scheduler_options
参数不支持自动调度器分配,对于分布式并行处理,必须使用 additional_arguments
参数向 launch_fluent()
方法传递 -t
和 -cnf
参数。
注:本文内容为PyFluent UserGuide。
”
(完毕)
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册