Create a Pool of MAPDL Instances

The PyMAPDL library contains the MapdlLocalPool class to simplify creating multiple local instances of Mapdl for batch processing. This can be used for the batch processing of a set of input files, convergence analysis, or other batch related processes.

To create the pool:

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

You can also supply additional keyword arguments when creating the pool. For instance, create several instances with 1 CPU each running at the current directory within their own isolated directories.

>>> 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]

Each individual instance of mapdl can be accessed with:

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

Note that this is a self healing pool. If an instance of MAPDL dies during a batch process, that instance will be automatically restarted. You can disable this behavior by setting restart_failed=False when creating the pool.

Run a Set of Input Files

You can use the pool to run a set of pre-generated input files using run_batch. For example, you can run the first set of 20 verification files with:

>>> 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

You can also use the pool to run a custom user function to run on each instance of MAPDL over a set of inputs. This example again uses set of verification files as in the run_batch example, but implements it as a function and outputs the final routine instead of the text output from 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']

API Description

For a full description of the PyMAPDL Pool API see Local MAPDL Pool.