Skriptování v MSC.Marc pomocí programovacího jazyka Python
Obsahem této stránky je úvod do tvorby modelů pomocí programovacího jazyka Python. Pro pochopení obsahu stránky je vhodná znalost vytváření modelů pomocí proc souborů (více zde) a základní znalosti programování v jazyce Python. Python je dynamický objektově orientovaný skriptovací jazyk, který je vyvíjený jako open source projekt (více na www.python.org).Při instalaci programu MSC.Marc se nainstaluje plnohodnotná verze programu Python 2.5, který lze spustit v interaktivním režimu pomocí souboru run_python.bat. Pro práci s programem MSC.Marc využívá Python moduly py_post a py_mentat, které je nutné importovat. Nejdůležitější příkazy těchto modulů budou uvedeny dále v textu. Lze je také najít v dokumentu Python_manual.pdf přístupného z nabídky nápovědy programu MSC.Marc. Přehled některých důležitých adresářů z hlediska programu Python je uveden v tabulce 1.
Relativní cesta k adresáři | Popis |
---|---|
..\MSC.Software\Marc\2010\mentat2010\python | Adresář instalace programu Python |
..\MSC.Software\Marc\2010\mentat2010\bin\run_python.bat | Spuštění interaktivního režimu programu Python |
..\MSC.Software\Marc\2010\mentat2010\shlib\win32\ | Adresář s moduly py_post a py_mentat |
..\MSC.Software\Marc\2010\mentat2010\examples\python\tutorial\ | Adresář s dokumentem Python_manual.pdf a s názornými příklady |
Práce s modulem py_mentat
Při práci s modulem py_mentat je nutné spuštění aplikace Marc Mentat a nastavení parametrů komunikace programů MSC.Marc a Python pomocí základního menu (animace 1). Nejdůležitějším parametrem je číslo portu na kterém budou programy komunikovat.V programu Python se komunikace s Marc Mentat inicializuje pomocí funkce py_connect. Vlastní tvorba modelu pomocí programu Python je obdobná postupům při vytváření proc souborů. Jednotlivé příkazy Marc Mentat (řádky proc souboru) se posílají pomocí funkce py_send. Oproti klasickým proc souborům však lze požít funkce py_get_int (py_get_string, ...) k získání hodnot z databáze modelu a na jejich základě pak rozhodnout o další tvorbě modelu. Další možností je použití funkce py_ms_int (py_get_data, py_ms_string, ...) k získání hodnot zadaných v jednotlivých menu Marc Mentat. Přehled funkcí modulu py_mentat je v tabulce 2.
Název funkce | Popis funkce | Příklad |
---|---|---|
py_connect(String hostname, Integer nPort) | hostname - IP adresa nebo DNS název hostitelského počítače ("" = lokální počítač); nPort - hostitelská port. Naváže spojení s Marc Mentat na hostitelském počítači. | py_connect(”127.0.0.1”, 40007) |
py_disconnect() | Přeruší spojení s Marc Mentat. | py_disconnect() |
py_send(String command) | command - příkaz pro Marc Mentat. Pošle příkaz do Marc Mentat. | py_send("*add_nodes 1 1 1") |
py_prompt(String name) | name - Řetězec k vytištění. Vytiskne řetězec do příkazové řádky | py_prompt("Evaluating Mesh") |
py_echo() | flag - 1/0 = on/off (defalut on). Výpisy příkazů na příkazovou řádku v Marc Mentat | py_echo(int flag) |
Float py_get_data(String name) | name - řetězec reprezentující požadovanou hodnotu. Vrací číselnou hodnotu definovan0ho parametru. | py_get_data("geometry:cont_radius") |
Float py_get_float(String name) | name - výraz k vyhodnocení. Vyhodnotí výraz a vrátí číselnou hodnotu | py_get_float("node_x(0)") |
podobně: Integer py_get_int(String name); String py_get_string(String name); | ||
Float py_ms_double(String name, Integer index) | name - jméno položky v databázi, index - index položky v databázi. Vrací položku z databáze. | py_ms_double("lcase_time_step",0) |
podobně: py_ms_int; py_ms_string; py_ms_bool; py_ms_state |
Pro získání hodnot s databáze pomocí příkazu py_get_int (a jeho variant) lze použít databázové funkce. Úplný seznam těchto funkcí je uveden v souboru python_manual.pdf (tabulka 1). Několik důležitých je uvedeno v tabulce 3. Při procházení databází je nutnost rozlišovat mezi indexem ntity v databázi a id ntity, které se mohou lišit (například vlivem použití funkce *sweep_all). Pro přečíslování id bodů vzhledem k aktuálnímu pořadí v databázi lze použít funkci *renumber_all.
Funkce | Popis |
---|---|
filename() | Vrací název souboru modelu. |
point_id(ARG1) | Id bodu v databázi na pozici ARG1 |
max_point_id() | Vrací nejvyšší hodnotu id bodu v databázi (nejnovější bod) |
point_x(arg1) | Globální souřadnice x bodu arg1 |
npoints() | Počet bodů v databázi. |
npoints() ncurves() nsolids() nnodes() nelements() ncbodys() napplys() ... |
Počet ntit v databázi. |
ncurve_points(arg1) | Počet bodů křivky arg1. |
curve_length(arg1) | Délka křivky arg1. |
element_mass(arg1) | Hmotnost elementu arg1. Pokud arg1 = -1 vrací hmotnost všech elementů. |
element_orient(arg1) | Vrací jméno vlastnosti orientace elementu arg1. |
mnoho, mnoho dalších | v souboru python_manual.pdf (tabulka 1) |
Práci s modulem py_mentat, zadávání příkazů a výstupy databázových funkcí si lze vyzkoušet přímo v interaktivním režimu programu Python (animace 2).
Další možností je spuštění celých skriptů programu Python stisknutím tlačítka RUN z nabídky menu Python. Pro demonstraci tvorby jednoduchého modelu pomocí skriptu python je uvažován následující problém.
Uvažujme kruhovou ocelovou desku s obdélníkovým otvorem uprostřed, která je zatížena konstantním tlakem a po obvodu je pevně upnuta. Volitelné parametry modelu jsou velikost poloměru kruhu r a délka hrany obdélníku a (obrázek 1). Dále je kladen důraz na kvalitu sítě a proto dalším požadavkem je minimální hodnota zkřivení elementů (distortion treshold).
Vzhledem k symetrii úlohy je modelována pouze čtvrtina desky. Geometrie modelu je vytvořena pomocí okrajových křivek, z nichž je vytvořena síť modelu funkcí automesh (*af_planar_quadmesh) pro různé velikosti elementu (a/20 až a/2 s krokem a/20). Je vybrána nejlepší síť vzhledem k hodnotě zkřivení elementů a jsou přidány vlastnosti materiálu, typy prvků, okrajové podmínky, tak aby byl model připraven k výpočtu.
Kód programu Python lze stáhnout (nejlépe do pracovního adresáře) zde. Kód pak lze spustit v menu Python pomocí tlačítka RUN a výběrem souboru.
Funkce modulu py_mentat lze použít také pro vyhodnocení výsledků (postprocessing). Opět pracujeme podobně jako při vytváření proc souborů. Příkladem je kód pro získání hodnoty maximálního posunutí ve směru z, který je ke stažení zde. Kód musí být uložen v adresáři se souborem výsledků deska_job_deska.t16 a lze ho spustit pomocí tlačítka RUN z nabídky menu python.
Práce s modulem py_post
Dalším modulem, který můžeme použít pro vyhodnocení výsledků je modul py_post. Při použití tohoto modulu se pracuje přímo se souborem výsledků *.t16, není tedy třeba spouštět aplikaci Marc Mentat. Práce s modulem py_post je odlišná od práce s modulem py_mentat a od postupu při vytváření proc souborů. Po importu modulu se vytvoří objekt reprezentující daný soubor výsledků (pomocí funkce py_open) a k potřebným hodnotám se přistupuje pomocí funkcí a atributů tohoto objektu. Několik základních atributů a funkcí modulu py_post je v tabulce 4, kompletní seznam je uveden v dokumentu python_manual.pdf (tabulka 1).Atribut, Funkce | Popis |
---|---|
increment | Aktuální inkrement |
plasticenergy | Celkové plastická deformační energie |
frequency | Frekvence (pro modální analýzu) |
mass | Celková hmotnost |
volume | Celkový objem |
PyPost post_open(String filename) | Vrací objekt reprezentují soubor výsledků filename |
close() | Zavře soubor výsledků |
moveto(Integer i) | Přesune se na inkrement i |
Integer increments() | Vrací celkový počet inkrementů |
extrapolation(String type) | Nastavuje metodu extrapolace výsledků z integračních bodů do uzlů; type: linar - lineární ext.; translate - posun do uzlů; average - průměr přes uzly elementu |
Integer nodes() | Vrací celkový počet uzlů |
PyNode node(int nnode) | Vrací objekt uzlu nnode s atributy souřadnic x, y, z a id |
Integer node_scalars() | Vrací počet veličin vypočtených v uzlech |
String node_scalar_label(Integer index) | Vrací jméno veličiny s indexem index |
Float node_scalar(Integer index, Integer scalar) | Vrací hodnotu veličiny s indexem scalar uzlu s indexem index |
mnoho, mnoho dalších | v souboru python_manual.pdf (tabulka 1) |
Kód programu Python pro vyhodnocení problému pomocí modulu py_post lze stáhnout (nejlépe do pracovního adresáře) zde.