Przepis na połączenie funkcjonalności Abaqusa i Anacondy

single-01

Dzisiejszy post powinien przydać się wszystkim użytkownikom Abaqusa, którzy w czasie swojej pracy wykorzystują skrypty. Oprócz całej gamy zalet Abaqusa, w mojej ocenie jedną z najbardziej przydatnych funkcji jest możliwość sterowania nim za pomocą Pythona. Ułatwia to znacznie tworzenie raportów, automatyzację obliczeń czy weryfikację modeli. Czasem jednak zdarza się tak, że chcielibyśmy wykonać bardziej skomplikowane operacje przy użyciu bibliotek, które nie są dostępne z poziomu Abaqusa. W takie sytuacji możliwość dodana bibliotek jest dość ograniczona, ale… istnieje prosty sposób na połączenie Abaqusa z Anacondą. Instrukcję krok po kroku znajdziesz w poniższym wpisie

Instalacja Anacondy

W pierwszym kroku musimy pobrać środowisko Anaconda. W tym celu udajemy się na https://www.anaconda.com/distribution/ i klikamy guzik download przy dystrybucji Python 2.7. Wersja 3.7 powinna współpracować z Abaqusem równie dobrze, ale sam jeszcze nie przeniosłem się na nowszą wersje Pythona, więc nie mogę tego potwierdzić.

Kiedy Anaconda jest już pobrana, wtedy uruchamiamy instalację jako administrator. Dzięki temu możemy mieć pewność, że każda funkcja zostanie zainstalowana poprawnie. Najszybciej prawa administratora można włączyć poprzez przytrzymanie klawisza SHIFT i kliknięcie prawym przyciskiem myszy na plik instalacji. Powinna pojawić się opcja uruchom jako administrator.

Proces instalacji nie różni się niczym od innych aplikacji, które instalujemy na Windowsie. W momencie pojawienia się poniższego okienka zalecam włączenie obu opcji, aby skrypt wywołany w Abaqusie nie miałem problemu ze znalezieniem Anacondy i jej wersji Pythona.

W momencie gdy instalacja Anacondy zakończy się sukcesem, powinniśmy stworzyć folder testowy. Do tego folderu należy ściągnąć skrypty pozwalające na połączenie funkcjonalności Abaqusa i Anacondy. Tutaj muszę przyznać, że choć nie jestem autorem tego rozwiązania, to nieco je zmodyfikowałem, aby łatwiej można było je zastosować w bardziej ogólnym przypadku. Co więcej, autor nie dawał żadnej gwarancji na działanie kodu, ale skoro u mnie działa to u każdego użytkownika powinno działać równie dobrze.

POBIERZ SKRYPT

Stworzenie nowego środowiska

Następnym krokiem jest stworzenie środowiska wewnątrz Anacondy, które będzie współdziałało z Abaqusem. Nie jest to wymagane, ale wydaje się dobrą praktyką jeśli chcielibyśmy używać Pythona dostarczanego przez Anaconde w innych celach niż tylko współdziałanie z Abaqusem. W oknie Anaconda Prompt (znajduje się w Start → Programy → Anaconda) wpisujemy

Za pomocą tej komendy tworzone jest środowisko o nazwie abq2020 zawierające wersję Pythona 2.7.15. Każda biblioteka, która zostanie zainstalowana w tym środowisku, będzie kompatybilna ze wspomnianą wersją Pythona. Jednak wybór akurat tej wersji jest niemalże przypadkowy — każda inna powinna działać równie dobrze. Ja użyłem 2.7.15 ze względu na fakt, że to wydanie jest zaimplementowane w Abaqusie.

Kiedy środowisko jest stworzone, wtedy możemy zainstalować moduły, które nie są dostępne z poziomu Abaqusa. Przykład przygotowany na potrzeby tego postu wykorzystuje bibliotekę matplotlib i python-docx. Matplotlib służy do tworzenia wykresów, a python-docx pozwala tworzyć gotowe pliki programu Word. Aby zainstalować biblioteki w stworzonym wcześniej środowisku, należy je wpierw aktywować. Dokonujemy tego za pomocą komendy conda activate abq2020. Następnie należy wkleić poniższe komendy by pobrać rozszerzenia Pythona:

conda install -c conda-forge python-docx matplotlib
conda install -c anaconda numpy lxml

Uruchomienie połączenia Abaqus-Anaconda

Finalnym krokiem jaki należy wykonać jest zmiana ścieżki pliku python.exe w pliku abqConda.py. W moim przypadku ścieżka zdefiniowana jest w poniższej linijce:

anaconda = Anaconda("C:\ProgramData\Anaconda2\envs\abq2020\python.exe", 'runAnaconda.py')

To w sumie tyle, jeśli chodzi o samą konfigurację skryptu. Teraz pora na krótki opis tego w jaki sposób on działa. Plikiem, który należy uruchomić z poziomu Abaqusa jest plik abqConda.py. Można to zrobić z poziomu Menu głównego → File → Run script lub wpisując komendę execfile(‘abqConda.py’) w interfejs Pythona.

W pierwszym kroku definiowana jest zmienna anaconda, która jak już wspomniałem, zawiera informację odnośnie tego gdzie znajduje się Anaconda Python. Następnie uruchamiany jest plik abaqusScript.py zawierający wszystkie instrukcje mające zostać wywowałane z poziomu Abaqusa. W przedstawionym przypadku skrypt pobiera informację odnośnie wypadkowych sił reakcji z pliku Job-1.odb (jeżeli plik nie istnieje to należy najpierw uruchomić model Job-1.inp). Wartością zwracaną jest słownik xyData, który zawiera dane pobrane z Abaqusa. Następnie dane te są przechowywane w obiekcie anaconda za pomocą metody setData(). W kolejnym kroku wczytywany jest plik condaScript.py, który chcemy wywołać z poziomu Anacondy. Kod jest wczytywany do zmiennej anaconda za pomocą setCode() i wywoływany przy pomocy execute(). Kiedy wszystkie komendy zostaną poprawnie wykonane wtedy na ekranie Abaqusa powinna się pojawić odpowiednia notka, a w folderze znajdować się bedzie nowy plik .docx.

W prostych słowach działanie programu polega na tym, że skrypt dla Abaqusa zawarty jest w pliku abaqusScript.py, a instrukcje dla Anacondy dostępne są w condaScript.py. Plik abqConda.py służy tylko to połączenia funkcjonalności dwóch różnych wersji Pythona.

Mam nadzieję, że powyższy skrypt będzie użyteczny dla wszystkich. Przetestowałem całą instrukcję na kilku komputerach i tylko raz skrypt nie uruchomił się poprawnie. Problem związany był z biblioteką matplotlib i spowodowany był brakiem dostępu do plików DLL. Rozwiązaniem była reinstalacja Anacondy z pełnymi uprawnieniami administratora oraz dodaniem ścieżki [Anaconda]/Library/bin do zmiennej środowiskowej PATH.

Jeśli nie chcesz przegapić kolejnych postów to zachęcam do zapisania się do grupy Symulacje Od Kuchni albo dodanie mnie do znajomych na LinkedIn 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *