JuliaとPyMAPDL#
もしJuliaと一緒に作業するのが好きなら、PythonのライブラリをJuliaのパッケージのように使うことができます。
Juliaのインストール#
Julia をインストールするには、 彼らのWebサイト にアクセスし、 ダウンロード セクションの指示に従ってください。
Juliaの環境を設定する#
JuliaでPythonライブラリを利用するには、 PyCall をインストールする必要があります。インストールするには、Juliaを起動し、 "]"
キーを押してパッケージマネージャに切り替えてください。
If you need to work with different package versions or applications, it is beneficial to create a virtual environment in Julia.
To create a virtual environment, use the activate
command with the name of the new environment that you want to create or activate.
pkg> activate julia_test
Activating project at `C:/Users/USER/julia_test`
A message should appear, indicating that the new package (julia_test
) has been activated. This environment name now precedes the command line.
(julia_test) pkg>
Next install the PyCall package by typing:
(julia_test) pkg> add PyCall
To use PyCall, press the backspace key to go to the Julia command line.
The command line is then preceded by the name Julia
.
julia>
Next use the PyCall package with:
julia> using PyCall
This should be enough to use packages included in a basic Python distribution.
For example:
julia> math = pyimport("math")
math.sin(math.pi/4) # returns ≈ 1/√2 = 0.70710678..
Install PyMAPDL in Julia#
PyCall includes a lightweight Python environment that uses Conda to manage and access Python packages.
This environment, currently based on Python 3.9.7, includes the standard basic Python libraries.
However, because it is a fully working Python environment, you can still use it from outside the Julia command line and install Python packages using pip
.
To install PyMAPDL, first locate the Python executable with:
julia> PyCall.python
"C:\\Users\\USER\\.julia\\conda\\3\\python.exe"
In Linux, the preceding code prints the following, where python3
is the default Python3 installation for the operating system.
julia> PyCall.python
"python3"
注釈
In Linux, there are no specific installation steps. You only need to add the Julia executable to the path.
Hence, Julia's Python installation path can differ from user to user.
For example, if you uncompress the source files in /home/USER/Julia
, Julia's path is
/home/USER/Julia/julia-1.7.2/bin
.
You would use this Python executable to install PyMAPDL:
C:\Users\USER\.julia\conda\3\python.exe -m pip install ansys-mapdl-core
In Linux:, you would install with:
python3 -m pip install ansys-mapdl-core
Finally, after restarting Julia, you can import PyMAPDL using the same procedure as described earlier:
julia> using PyCall
julia> pymapdl = pyimport("ansys.mapdl.core")
PyObject <module 'ansys.mapdl.core' from 'C:\\Users\\USER\\.julia\\conda\\3\\lib\\site-packages\\ansys\\mapdl\\core\\__init__.py'>
julia> mapdl = pymapdl.launch_mapdl()
julia> print(mapdl.__str__())
Product: Ansys Mechanical Enterprise
MAPDL Version: 24.1
ansys.mapdl Version: 0.68.0
注釈
If you experience errors when using PyCall, you can try to rebuild the package by pressing "]"
to go to the package manager and typing:
pkg> build PyCall
Use PyMAPDL in Julia#
Here is a simple example of how you use PyMAPDL in Julia:
using PyCall
pymapdl = pyimport("ansys.mapdl.core")
mapdl = pymapdl.launch_mapdl()
np = pyimport("numpy")
# define cylinder and mesh parameters
torque = 100
radius = 2
h_tip = 2
height = 20
elemsize = 0.5
pi = np.arccos(-1)
force = 100/radius
pressure = force/(h_tip*2*np.pi*radius)
# Define higher-order SOLID186
# Define surface effect elements SURF154 to apply torque
# as a tangential pressure
mapdl.prep7()
mapdl.et(1, 186)
mapdl.et(2, 154)
mapdl.r(1)
mapdl.r(2)
# Aluminum properties (or something)
mapdl.mp("ex", 1, 10e6)
mapdl.mp("nuxy", 1, 0.3)
mapdl.mp("dens", 1, 0.1/386.1)
mapdl.mp("dens", 2, 0)
# Simple cylinder
for i in 1:5
mapdl.cylind(radius, "", "", height, 90*(i-1), 90*i)
end
mapdl.nummrg("kp")
# interactive volume plot (optional)
mapdl.vplot()
# mesh cylinder
mapdl.lsel("s", "loc", "x", 0)
mapdl.lsel("r", "loc", "y", 0)
mapdl.lsel("r", "loc", "z", 0, height - h_tip)
mapdl.lesize("all", elemsize*2)
mapdl.mshape(0)
mapdl.mshkey(1)
mapdl.esize(elemsize)
mapdl.allsel("all")
mapdl.vsweep("ALL")
mapdl.csys(1)
mapdl.asel("s", "loc", "z", "", height - h_tip + 0.0001)
mapdl.asel("r", "loc", "x", radius)
mapdl.local(11, 1)
mapdl.csys(0)
mapdl.aatt(2, 2, 2, 11)
mapdl.amesh("all")
mapdl.finish()
# plot elements
mapdl.eplot()
注釈
Notice the changes in the strings and the loops. Only ""
strings are allowed.