.. _using_standard_install:

***********************************************
Using PyMechanical from a standard installation
***********************************************

The ``ansys-mechanical-core`` package requires either a local or
remote instance of Mechanical to communicate with. This page describes
how Mechanical is installed from the Ansys standard installer and
describes how you launch and interface with Mechanical from Python.

Install Mechanical
------------------

Mechanical is installed by default from the Ansys standard installer.
When you run the standard installer, look under the **Structural Mechanics**
heading to verify that the **Mechanical Products** checkbox is selected.
Although options in the standard installer might change, this image provides
a reference:

.. figure:: ../images/unified_install_2023R1.jpg
    :width: 400pt

Launch a remote Mechanical session
----------------------------------
You can use PyMechanical to launch a Mechanical session on the local machine
Python is running on. Alternatively, you can run Mechanical's command line
directly on any machine to start Mechanical in server mode and then use its
IP address to manually connect to it from Python.

Launch Mechanical on the local machine using Python
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

When Mechanical is installed locally on your machine, you can use the
:func:`launch_mechanical() <ansys.mechanical.core.launch_mechanical>` method to launch and automatically connect to
Mechanical. While this method provides the easiest and fastest way to launch Mechanical, it only works with a local
Mechanical installation.

Launch Mechanical locally with this code:

.. code:: pycon

    >>> from ansys.mechanical.core import launch_mechanical
    >>> mechanical = launch_mechanical()
    >>> mechanical

    Ansys Mechanical [Ansys Mechanical Enterprise]
    Product Version:231
    Software build date:Wednesday, August 10, 2022 4:28:15 PM


Launch Mechanical from the command line
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The `ansys-mechanical` utility is installed automatically with PyMechanical,
and can be used to run Mechanical from the command line. To obtain help on
usage, type the following command:

.. code:: console

    $ ansys-mechanical --help

    Usage: ansys-mechanical [OPTIONS]

        CLI tool to run mechanical.

        USAGE:

        The following example demonstrates the main use of this tool:

            $ ansys-mechanical -r 232 -g

            Starting Ansys Mechanical version 2023R2 in graphical mode...

    Options:
        -h, --help                 Show this message and exit.
        -p, --project-file TEXT    Opens Mechanical project file (.mechdb). Cannot
                                    be mixed with -i
        --port INTEGER             Start mechanical in server mode with the given
                                    port number
        -i, --input-script TEXT    Name of the input Python script. Cannot be mixed
                                    with -p
        -s, --show-welcome-screen  Show the welcome screen, where you can select the
                                    file to open.        Only affects graphical mode
        --debug                    Show a debug dialog right when the process
                                    starts.
        -r, --revision INTEGER     Ansys Revision number, e.g. "241" or "232". If
                                    none is specified, uses the default from ansys-
                                    tools-path
        -g, --graphical            Graphical mode

    ...


You can launch Mechanical in server mode from the command line and then
manually connect to the server. Use the `port` argument to select the port.

..code::

    ansys-mechanical --port 10000

Connect to a Mechanical session
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You can connect to a Mechanical session from the same host or from an external host.

Assuming that Mechanical is running locally at the default IP address (``127.0.0.1``) on the
default port (``10000``), you would use this code to connect to it with this code:

.. code:: python

    from ansys.mechanical.core import Mechanical

    mechanical = Mechanical()


Now assume that a remote instance of Mechanical has been started in server mode. To connect to
the computer on your local area network that is running Mechanical, you can use either
an IP address and port or a hostname and port.

**IP address and port**

Assume that Mechanical is running remotely at IP address ``192.168.0.1`` on port ``10000``.

You would connect to it with this code:

.. code:: python

    mechanical = Mechanical("192.168.0.1", port=10000)

**Hostname and port**

Assume that Mechanical is running remotely at hostname ``myremotemachine`` on port ``10000``.

You would connect to it with this code:

.. code:: python

    mechanical = Mechanical("myremotemachine", port=10000)


Launching issues
----------------

For any number of reasons, launching Mechanical can fail. Some approaches
follow for debugging launch failures.

Manually set the location of the executable file
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If you have a non-standard installation of Mechanical, PyMechanical might
not be able to find your installation. In this case, you should manually
set the location of your Mechanical executable file as the first parameter
for the :func:`launch_mechanical() <ansys.mechanical.core.launch_mechanical>` method.

**On Windows**

.. code:: python

    from ansys.mechanical.core import launch_mechanical

    exec_loc = "C:/Program Files/ANSYS Inc/v231/aisol/bin/winx64/AnsysWBU.exe"
    mechanical = launch_mechanical(exec_loc)


**On Linux**

.. code:: python

    from ansys.mechanical.core import launch_mechanical

    exec_loc = "/usr/ansys_inc/v231/aisol/.workbench"
    mechanical = launch_mechanical(exec_loc)


If, when using the :func:`launch_mechanical() <ansys.mechanical.core.launch_mechanical>`
method, Mechanical still fails to launch or hangs while launching, pass the
``verbose_mechanical=True`` parameter. This prints the output of Mechanical in the Python console.
You can then use this output to debug why Mechanical isn't launching.

.. Note::

    On Windows, output is limited because of the way Mechanical launches.

Debug from the command line
~~~~~~~~~~~~~~~~~~~~~~~~~~~
You may need to run the ``launch`` command from the command line to debug why Mechanical is not launching.
running the launch command from the command line.

Open a terminal and run the following command:

.. code:: console

    ansys-mechanical -g --port 10000

If the preceding command for your operating system doesn't launch Mechanical, you might have
a variety of issues, including:

  - License server setup
  - Running behind a VPN
  - Missing dependencies


Embed a Mechanical instance
---------------------------

The instructions for embedding a Mechanical instance are different on
Windows and Linux. While the Python code is the same in both cases,
Linux requires some additional environment variables.

Python code
~~~~~~~~~~~
.. code:: pycon

    >>> from ansys.mechanical.core import App
    >>> mechanical = App()
    >>> mechanical
    Ansys Mechanical [Ansys Mechanical Enterprise]
    Product Version:231
    Software build date:Wednesday, August 10, 2022 4:28:15 PM

Additional information for Linux
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Starting with 2023 R2, it is possible to embed an instance of Mechanical on Linux.
However, because of differences in how Mechanical works on Linux, you cannot simply
run Python as usual. On Linux, certain environment variables must be set for the Python
process before it starts. You can set up these environment variables using the ``.workbench_lite``
script that is shipped with the Mechanical installation.

Assume that Mechanical 2023 R2 is installed at ``/usr/ansys_inc``.
You would run Python with this command:

.. code::

    /usr/ansys_inc/v232/aisol/.workbench_lite python


Licensing issues
----------------

`PADT <https://www.padtinc.com/>`_ has an `Ansys <https://www.padtinc.com/simulation/ansys-simulation-products/>`_
product section. Posts about licensing are common.

If you are responsible for maintaining an Ansys license or have a personal installation
of Ansys, you likely can access the
`Licensing <https://ansyshelp.ansys.com/account/secured?returnurl=/Views/Secured/prod_page.html?pn=Licensing&pid=Licensing&lang=en>`_
section of the Ansys Help, where you can view or download the *Ansys, Inc. Licensing Guide* for
comprehensive licensing information.


VPN issues
----------
Sometimes, Mechanical has issues starting when VPN software is running. For more information,
access the `Mechanical Users Guide <https://ansyshelp.ansys.com/account/secured?returnurl=/Views/Secured/corp/v231/en/wb_sim/ds_Home.html>`_
in the Ansys Help.