Create a pool of Mechanical instances#
The LocalMechanicalPool
class simplifies creating multiple local instances of the Mechanical
class for batch processing. You can use the
LocalMechanicalPool
class for batch processing a set of input files or other batch-related processes.
To create a pool with 10 instances:
>>> from ansys.mechanical.core import LocalMechanicalPool
>>> pool = LocalMechanicalPool(10, version="231")
'Mechanical Pool with 10 active instances'
When you are creating the pool, you can supply additional keyword arguments.
For example, to restart failed instances, you can set restart_failed=True
:
>>> import os
>>> my_path = os.getcmd()
>>> pool = LocalMechanicalPool(10, version="231", restart_failed=True)
Creating Pool: 100%|########| 10/10 [00:01<00:00, 1.43it/s]
You can access each individual instance of Mechanical with:
>>> pool[0]
<ansys.mechanical.core.mechanical.Mechanical at 0x7fabf0230d90>
Because this is a self-healing pool, if an instance of Mechanical stops
during a batch process, this instance is automatically restarted. When creating
the pool, you can disable this behavior by setting restart_failed=False
.
Run a set of input files#
You can use the pool to run a set of pre-generated input files using the
run_batch()
method.
For example, you can run the first set of 20 verification files with:
>>>>>> from ansys.mechanical.core import examples
>>> files = [f"test{index}.py" for index in range(1, 21)]
>>> outputs = pool.run_batch(files)
>>> len(outputs)
20
Run a user-defined function#
While the previous example uses the run_batch()
method to run a set of inputs files, you can also use the
map()
method to run a custom user-defined function on
each instance of Mechanical over a set of input files.
>>> completed_indices = []
>>> def func(mechanical, input_file, index):
# input_file, index = args
mechanical.clear()
output = mechanical.run_python_script_from_file(input_file)
completed_indices.append(index)
return output
>>> inputs = [('test{index}.py', i) for i in range(1, 10)]
>>> output = pool.map(func, inputs, progress_bar=True, wait=True)
['result1',
'result2',
'result3',
'result4',
'result5',
'result6',
'result7',
'result8',
'result9']
API reference#
For more information, see Local Mechanical pool.