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.