Create a pool of MAPDL instances#

PyMAPDL 包含 LocalMapdlPool 类,用于简化为批处理创建 Mapdl 类的多个本地实例。 这可用于批量处理一组输入文件、收敛分析或其他与批量处理相关的流程。

这段代码将创建一个池:

>>> from ansys.mapdl.core import LocalMapdlPool
>>> pool = LocalMapdlPool(10)
'MAPDL Pool with 10 active instances'
>>> pool.exit(block=True)

创建池时,您可以提供额外的关键字参数。这段代码创建了多个实例,每个实例都有一个 CPU,运行在各自独立的当前目录下:

>>> import os
>>> my_path = os.getcmd()
>>> pool = LocalMapdlPool(10, nproc=1, run_location=my_path)
Creating Pool: 100%|########| 10/10 [00:01<00:00,  1.43it/s]

您可以用这段代码访问每个单独的 MAPDL 实例:

>>> pool[0]
<ansys.mapdl.core.mapdl.MapdlGrpc object at 0x7f66270cc8d0>

请注意,这是一个自启动池。如果 MAPDL 的某个实例在批处理过程中终止,该实例会自动重启。您可以在创建池时设置 restart_failed=False 关闭此行为。

Run a set of input files#

您可以使用 run_batch 方法,使用池运行一组预先生成的输入文件。例如,这段代码将运行第一组 20 个验证文件:

>>> from ansys.mapdl.core import examples
>>> files = [examples.vmfiles["vm%d" % i] for i in range(1, 21)]
>>> outputs = pool.run_batch(files)
>>> len(outputs)
20

Run a user function#

您可以使用池在每个 MAPDL 实例上通过一组输入运行自定义用户函数。与 run_batch 函数的示例一样,以下代码使用了一组验证文件。 不过,它将其作为一个函数来实现,并输出最终例程,而不是 MAPDL 输出的文本。

completed_indices = []


def func(mapdl, input_file, index):
    # input_file, index = args
    mapdl.clear()
    output = mapdl.input(input_file)
    completed_indices.append(index)
    return mapdl.parameters.routine


inputs = [(examples.vmfiles["vm%d" % i], i) for i in range(1, 10)]
output = pool.map(func, inputs, progress_bar=True, wait=True)
[
    "Begin level",
    "Begin level",
    "Begin level",
    "Begin level",
    "Begin level",
    "Begin level",
    "Begin level",
    "Begin level",
    "Begin level",
]

# Close the PyMAPDL pool.
pool.exit()

Close the PyMAPDL pool#

可以使用 pool.exit() 命令关闭 PyMAPDL 池。

>>> pool.exit()

API description#

有关全面的描述,请参阅 Local MAPDL pool