Solving an analysis#

As in Analysis setup, a PySystemCoupling Session object is assumed to have been created and is referred to as syc_session in the code snippets.

This section focuses on the solution part of the API (syc_session.solution), which provides operations associated with solving an analysis and examining results data.

The solve command#

If you have set up an analysis and it has no errors, you may attempt to solve it by calling solve.

Tip

Before beginning the solve, you may wish to enable output streaming so you can use the solver transcript output to track the solution’s progress.

syc_session.start_output()
syc_session.solution.solve()

Currently, all commands in the PySystemCoupling API (including solve) are executed synchronously. This is a reflection of how the underlying operations currently work in System Coupling.

Because solve tends to be a long-running operation, it can be useful to execute it asynchronously in the Python environment. This is not supported explicitly, because in the current version of the API, there is no protection against trying to make calls concurrently. However, you can call solve asynchronously by “manual” coding using Python threads:

import threading

...

solve_thread = threading.Thread(target=syc_session.solution.solve)

solve_thread.start()

# Do other things in the Python environment
...

# wait for solve to finish
solve_thread.join()

The majority of the session’s API should be avoided while the thread is active. An exception is that it is possible to interrupt or force the end of a solve.

Interrupting and aborting a solve#

You can interrupt or force the end of a solve using the solution.interrupt() and solution.abort() calls. These are unusual PySystemCoupling calls in that they must be called in a different thread from the one in which solve is executing.

Both calls have the effect of stopping the solve that is in progress. The key difference is that interrupt allows you to resume the solve (by calling solve again).

Low-level solution control#

Commands are available for more advanced scenarios offering lower-level control over the solution process — specifically initialize, step, create_restart_point and shutdown. Roughly speaking, these perform the individual actions that are usually encapsulated in a simple solve call, allowing custom code to be executed between these actions.

Such advanced usage is not within the scope of this guide.

Postprocessing support#

You can examine the results for the individual participants in the analysis by using their respective postprocessing applications. For details, see the relevant product documentation.

For System Coupling-specific results, data can be written in EnSight format. This allows you to use Ansys EnSight for visualization, animation, and postprocessing. PySystemCoupling also supports the writing of some convergence diagnostics in CSV format.

Generating EnSight data#

When a solution is available, you can specify that EnSight files are written on demand:

solution.write_ensight(file_name="EnSightResults")

Alternatively, you can use the output_control settings to specify the automatic generation of EnSight data at certain points during the solution:

setup.output_control.results.option = "StepInterval"
setup.output_control.results.output_frequency = 2

Using EnSight to postprocess output data is not covered in this guide. For more information, see the relevant System Coupling and EnSight product documentation.

Convergence diagnostic data#

When a solution is available, you can specify that CSV-formatted convergence data is written on demand:

solution.write_csv_chart_files()

This creates one file per coupling interface, where the file is named <interface name>.csv. Each file contains the interface’s convergence and transfer data for each iteration.

Alternatively, you can use the output_control settings to turn on automatic writing of these files:

setup.output_control.generate_csv_chart_output = True