Google překladač: English Deutsch

Skriptování – efektivní nástroj pro zrychlení FEM analýzy v programu Abaqus

Autor článku: Gabriel Fedorko – Ján Sorokáč   

Tags: Abaqus | Analýzy | FEM | MKP | Výpočty

03-hadicovy_dopravnik250Analýza pomocí metody konečných prvků (MKP) se využívá při řešení široké škály problémů v různých vědních oborech. Nezbytným předpokladem pro získání relevantních výsledků s dobrou vypovídací hodnotou je vytvoření kvalitního geometrického modelu, definování okrajových podmínek a materiálových charakteristik. Tato předpřípravná fáze v rámci analýzy pomocí MKP je z časového hlediska zdlouhavá a může se realizovat buď pomocí preprocesoru (pokud jím použitý MKP program disponuje), nebo pomocí vybraného CAD programu (Catia, SolidWorks, CreoElements, Inventor apod.).

V praxi se často setkáváme se skutečností, že je třeba realizovat výpočty, v rámci kterých dochází ke změně některých vybraných parametrů, ať jsou to rozměry geometrického modelu, změna materiálových charakteristik, změna sítě konečných prvků, okrajových podmínek apod. Pro zefektivnění a urychlení předpřípravné fáze MKP analýzy poskytují v současnosti mnohé MKP programy možnost tvorby a využívání skriptů pomocí tzv. skriptovacích jazyků.

Skriptovací jazyk

Pojmem skriptovací jazyk se označuje počítačový programovací jazyk původně navržený k usnadnění (zautomatizování) operací v počítači. Zpočátku se mu také říkalo dávkový jazyk. Sloužil především k vytvoření užitečného skriptu, který byl následně využíván v rámci dalších programů a činností PC. V současnosti existuje mnoho takových jazyků, které jsou slušně sofistikované a používají se ke psaní složitějších programů, kterým se říká skripty, a nejednou překračují hranici automatizování operací. Skriptovací jazyk je možné najít na téměř každé úrovni počítačového systému. Využívají se například v počítačových hrách, textových editorech, síťových aplikacích a samozřejmostí je jejich využití v rámci MKP programů. [1]

Využití skriptů v programu Abaqus

Software Abaqus disponuje širokou škálou nástrojů, jejichž hlavním účelem je usnadnění práce s tímto programem. Jedním z nich, které přímo souvisejí s tvorbou skriptů, jsou Abaqus PDE a RSG Dialog Builder.
Abaqus PDE (Python Development Environment) je nástroj určený pro tvorbu, editaci, testování a odlaďování skriptů v skriptovacím jazyce Python. Abaqus PDE je vytvořen pro práci se soubory s příponou .guiLog. Soubory s příponou .guiLog obsahují záznam všech úkonů, které byly v programu Abaqus provedeny, v skriptovacím jazyce Python. Díky tomu je možné získaný záznam pomocí PDE upravovat a přehrávat. Například pokud chceme vytvořit nebo upravit část výpočetního modelu, která má podobné nebo mírně pozměněné parametry, stačí zkopírovat, upravit a vložit záznam do PDE. PDE tak má své velké využití hlavně při velkém množství opakujících se operací.
RSG (Really Simple GUI) Dialog Builder je plugin, který umožňuje tvorbu dialogových oken a jejich propojování s příslušnými příkazy. V rámci dialogového okna je možné dělat záložky, rolovací menu, různá tlačítka. Zároveň okno umožňuje vytváření propojení se soubory programu MS Excel.

Skriptovací jazyk Python

Python je multiparadigmový jazyk. To znamená, že místo toho, aby nutil programátora používat určitý styl programování, umožňuje využívání více stylů. Python podporuje objektově orientované, strukturované i funkcionální programování. Je to dynamický typový jazyk využívající velké množství vysokoúrovňových datových typů a ke správě paměti používá garbage collection (automaticky určuje, která část paměti je nepoužívaná, a připravuje ji pro další použití).

„I když se Python často označuje jako skriptovací jazyk, používá se na vývoj velkých softwarových projektů, jako jsou aplikační server Zope a systémy pro sdílení souborů Mnet a BitTorrent. Rovněž ho široce využívá společnost Google. Zastánci jazyka Python mu raději říkají vysokoúrovňový dynamický programovací jazyk, neboť pojem skriptovací jazyk se asociuje s jazyky, které se používají jen na jednoduché shell skripty, nebo s jazyky typu JavaScript [2]. Python může jednoduchým způsobem rozšiřovat. Nové zabudované moduly mohou být jednoduše napsány v C nebo C++. Python může být použit i jako rozšiřovací jazyk pro stávající moduly a aplikace, které potřebují programovatelné rozhraní.“ [2]

Parametrizace výpočtového modelu hadicového dopravníku

V rámci výzkumu dopravních pásů hadicových dopravníků byla pro potřeby MKP analýzy ověřena možnost parametrizace vybraných charakteristik a vlastností výpočetního modelu hadicového dopravníku. Vytvoření návrhu Parametrizování výpočetního modelu hadicového dopravníku sestávalo ze tří kroků:

  • Vytvoření výchozího výpočtového modelu.
  • Použití podprogramu Abaqus PDE na úpravu rpy souboru.
  • Použití RSG Dialog Builderu k vytvoření dialogového okna.

Vytvoření výchozího výpočtového modelu

Výchozí model, který je znázorněn na obr. 1, byl vytvořen v preprocesoru (Abaqus/CAE), který je přímo součástí programu.

Obr. 1 Výpočetní model hadicového dopravníku

V rámci výchozího modelu byly dále definovány materiálové charakteristiky pro formovací válečky a dopravní pás. Dále byla vytvořena i síť konečných prvků.

Úprava souboru abaqus.rpy v podprogramu Abaqus PDE

V další fázi tvorby parametrizace výpočetního modelu hadicového dopravníku v programu Abaqus byl využit podprogram Abaqus PDE a jeho pomocí byl otevřen soubor abaqus.rpy. Tento soubor je pro proces parametrizace důležitý, protože se v něm nachází nahraný celý předchozí postup tvorby výchozího výpočetního modelu hadicového dopravníku, který je zaznamenán v programovacím jazyce Python.

Jako první bylo realizováno odstranění textu znázorněného modrou barvou v prvním až desátém řádku. Dále následovalo mazání textu „Session“ mezi from abaqusConstants import* a from caeModules import* a vymazáním věty executeOnCaeStartup ()
session.viewports ['Viewport: 1']. partDisplay.geometryOptions.setValues (
referenceRepresentation = ON)

Do pátého řádku, pod řádek from driverUtils import executeOnCaeStartup, byl napsán následující příkaz:

def createPlate (radius, partName1, partName2, height1, height2, plateMaterial1, plateMaterial2, number, size1, size2, totalAngle, width, rozestup, spacing1, NUMBER1,):

Zbylý text pod tímto příkazem jsme označili a klikli jsme v menu Edit na Indet Region nebo jsme použili klávesovou zkratkou CRTL+I. Dále byly přepsány číselné hodnoty na názvy hodnot, které byly definovány v příkazu def createPlate.

V 9. řádku v příkazu s.Line byly přepsány příkazy point2 = (0.0, 20.0)) na point2 = (0.0, height1)), čímž jsme zajistili to, aby se později mohla v dialogovém okně zadávat velikost rozměru pro proměnnou height1.

Úprava souboru pokračovala dále tím, že v textu byl nalezen název partu, který reprezentuje formovací váleček, a jeho jméno bylo zkopírováno pomocí Ctrl+C, pak následovalo kliknutí na Edit/Replace. V okně byl následně vložen do Search For: zkopírovaný název partu a do Replace With jsme napsali partName1, všechno jsme potvrdili tlačítkem Replace All. Tím jsme všechny původní názvy partu, který reprezentuje formovací váleček, přepsali na partName1.
V 19. řádku byl přepsán příkaz point1 = (0.0, 10.0) na point1 = (0.0, radius)), čímž bylo zajištěno to, aby se později mohly v dialogovém okně zadávat velikosti rozměru pro proměnnou. V textu byl následně nalezen název dalšího partu, který nyní pro změnu reprezentuje dopravní pás, a jeho jméno bylo zkopírováno pomocí Ctrl+C následované kliknutím na Edit/Replace. V okně do Search For: byl umístěn zkopírovaný název partu, který reprezentuje dopravní pás, a do Replace With byl napsán text partName2, vše bylo následně potvrzeno tlačítkem Replace All. Tím se všechny názvy partu reprezentující dopravní pás přepsaly na partName2.

03-skriptovani-obr2-tab5

Pod řádek „from material import createMaterialFromDataString“ jsme vložili příkaz

„If plateMaterial1 == 'Guma':“

Text pod tímto příkazem byl označen až po příkaz „from material import createMaterialFromDataString“ kliknutím v menu Edit na Jinde Region nebo klávesovou zkratkou CRTL+I. Nad příkaz „from material import createMaterialFromDataString“ byl vložen příkaz:

„Elif plateMaterial1 == 'Steel':“

A text pod tímto příkazem jsme opět následně označili až po příkaz:

„P.SectionAssignment (region = region, sectionName = 'Steel', ofset = 0.0, offsetType = MIDDLE_SURFACE, offsetField ='', thicknessAssignment = FROM_SECTION)“, a to kliknutím v menu Edit na Jinde Region nebo klávesovou zkratkou CRTL+I . Tímto postupem byl přiřazen příkaz if k materiálům v části Válec. Tento postup jsme opakovali i při dalším skriptu o přiřazení materiálu pro část Pas.

Pod první skupinou materiálů se nacházely další příkazy s.Line (point1=(-1.25, 0.0), point2=(-1.25, 50.0)), kde point2=(-1.25, 50.0)) byl přepsán na point2=(-1.25, height2) a další příkaz s1.Line (point1= (0.0, 0.0), point2=(100.0, 0.0)) jsme přepsali na s1.Line (point1=(0.0, 0.0), point2=(width, 0.0)).

První příkaz p.seedPart (size=2.8, deviationFactor=0.1) v souboru abaqus.rpy znamená hustotu sítě Mesh pro část Válec. Příkaz size=2.8 jsme přepsali na size=size1. Další takový příkaz patřil části Pas, ten byl přepsán na size=size2.

V programu Abaqus/CAE byl během tvorby geometrického modelu válec posouván na střed dopravního pásu. V souboru abaqus.rpy se to zapsalo jako

„s.Line (point1=(0.0, 0.0), point2=(0.0, 50.0))
a.translate(instanceList=('Valec-1',), vector=(-20.0, 35.0, -10.0))“.

V oblasti vektor jsou souřadnice, kde se válec nachází. Tyto souřadnice jsme přepsali na:

„vector = (-2.25 - (radius), ((height1 / 2) + (height2 / 2)), -3 - (radius)))“.

Tím jsme zajistili, že i po změně velikosti válce nebo dopravního pásu zůstane válec uprostřed dopravního pásu.

Vytvoření válečkové stolice pomocí nástroje Radial Pattern se v abaqus.rpy souboru promítlo následovně:

„a1=mdb.models ['Model-1']. RootAssembly
a1.RadialInstancePattern (instanceList=('valec-1',), point=(-1.25, 75.0, 10.0),
axis = (1.0, 0.0, 0.0), number=6, totalAngle=360.0)“
Number=6 byl přepsán na number=number a totalAngle=360 na totalAngle=totalAngle.

Příkaz Linear Paterna se v abaqus.rpy zapsal takto:

„a1.LinearInstancePattern (instanceList=('valec-1', 'valec-1-rad-2', 'valec-1-rad-3', 'valec-1-rad-4', 'valec-1-rad-5',' valec-1-rad-6'), direction1=(-1.0, 0.0, 0.0), direction2=(0.0, 1.0, 0.0), number1=3, number2=1, spacing1=20.0, spacing2=52.7654)“

Tento příkaz jsme upravili tak, že ('valec-1', 'valec-1-rad-2', 'valec-1-rad-3', 'valec-1-rad-4', 'valec-1-rad-5',' valec-1-rad-6') byl nahrazen slovem valec_list a přepsáním hodnot number1 a spacing1. Příkaz pak vypadal takto:

„a.LinearInstancePattern (instanceList=valec_list, direction1=(-1.0, 0.0, 0.0), direction2=(0.0, 1.0, 0.0), number1=number1, number2=1, spacing1=spacing1, spacing2=54.0711)“

Před tento příkaz jsme vložili příkaz „if number==1:“ a o řádek níže „valec_list=('valec-1')“, který jsme označili a následně jsme klikli v menu Edit na Jinde Region, nebo jsme použili klávesovou zkratku CRTL+I. Tento příkaz říká, že pokud se hodnota number bude rovnat jedničce, tak platí, že valec_list = ('valec-1'). Pod tento příkaz jsme vložili příkazy:

„Elif number==2:
valec_list=('valec-1', 'valec-1-rad-2')
elif number==3:
valec_list=('valec-1', 'valec-1-rad-2', 'valec-1-rad-3')“ atd., až po elif number==10:.

Opět jsme každý řádek valec_list označili a klikli jsme v menu Edit na Indet Region, nebo byla použita klávesová zkratka CRTL+I. Příkaz elif number==2 znamená, že pokud number se bude rovnat číslu 2, valec_list se bude rovnat ('valec-1', 'valec-1-rad-2').

Tímto krokem jsme tvorbu skriptu ukončili a hotový skript pojmenovali jako PVMHD.py a uložili ho do pracovní složky.

Vytvoření dialogového okna pomocí RSG Dialog Builder

Aplikace RSG Dialog Builder se nachází v liště menu, Plug-ins/Abaqus/RSG Dialog Builder. Po kliknutí se zobrazilo dialogové okno. V záložce Kernel jsme vybírali volbu Load, načetli jsme soubor PVMHD.py, který jsme vytvořili v předchozím kroku, a byl v pracovní složce. Po otevření byla vybrána funkce createPlate. Po kliknutí na záložku GUI jsme následně začali vytvářet dialogové okno.

Tvorbu dialogového okna jsme začali vložením Tab Book, do kterého byly vloženy tři Tab Item-s, které jsme pojmenovali Valec, Dop. pas a Sestavení.

Do Tab Item Valec (obr. 2) jsme vložili Group Box, kde v okně Title: byl napsán název Valec. Do něj vložíme Icon. V okénku File Name jsme vložili cestu k obrázku, který jsme využili jako ikonu příkazu. Následně jsme pokračovali vložením Vertical Aligner, který slouží k vertikálnímu zarovnání oken vložených v něm, a dále jsme vložili Group Box, který byl pojmenován Materiál. Do Vertical Aligner jsme pak vložili ještě čtyři bloky Text Field, které byly nastaveny tak, jak je uvedeno v tab. 1.

Do Group Box Material jsme vložili Combo Box a automaticky se vložily i tři List Item-s. Protože však byly potřeba pouze dva, jeden jsme odstranili. Na poslední List Item jsme proto klikli pravým tlačítkem myši a kliknutím na možnost delete.Combo Box. Jeho List Item jsme nastavili viz tab. 2.

První List Item jsme pojmenovali v okně Text: Guma a druhy Steel. Aplikací těchto kroků byl První Tab List valec celý vyplněný.

Do druhého Tab Itemu, který je pojmenován Dop. pás (obr. 3) byly vloženy ty samé bloky jako v prvním případě, konkrétně jde o Group Box, kde v okénku Title: jsme napsali Dop. pás. Do něj jsme znovu aplikovali Icon. V okénku File Name: jsme vložili cestu k obrázku, který bude reprezentovat ikonu dopravního pasu. Pak jsme pokračovali vložením Vertical Aligner. Dalším příkazem, kdy jsme opět použili Group Box, který jsme pojmenovali Materiál, do Vertical Aligner jsme vložili čtyři bloky Text Field, které byly nastaveny tak, jak je uvedeno v Tab. 3.

Do Group Box Materiál jsme vložili Combo Box, který nastavíme tak, jak je uvedeno v tab. 4.

První list Item jsme pojmenovali v okně Text: Guma a druhy Steel. Druhý Tab List Dop. pas byl po těchto krocích hotov (obr. 3).

Do posledního Tab Item Sestavení jsme znovu vložili bloky Group Box, kde v okénku Title: jsme napsali Sestavení, Icon v okénku File Name jsme vložili cestu k obrázku, který bude sloužit jako obrazová dokumentace v dialogovém okně. Pak jsme vložili příkaz Slider, který má tu výhodu, že je v něm možné definování maximální a minimální možné hodnoty a plynulým pohybem běžce můžeme měnit rozsah nastavení.

Dále jsme vložili Vertical Aligner i Icon, kde v okénku File Name jsme nastavili cestu k reprezentačnímu obrázku a opět jsme vložili Vertical Aligner. Do obou Vertical Aligner jsme na závěr vložili ještě dva Text Fieldy. V prvním Vertical Aligner nastavíme Text Fieldy tak, jak je uvedeno v tab. 5.

Celý postup jsme na závěr uložili kliknutím na ikonu Save Your Dialog Box As Plug-in. V okně jsme odklikli možnost Save As RSG Plug-in a vypsali jsme okénka takto:

Directory Name: PVMHD
Menu Button Name: PVMHD

Na závěr potvrdíme OK. Zobrazilo se nám okno, které informuje o souborech, které byly vytvořeny, a o cestě k nim. Parametrický model hadicového dopravníku tak byl vytvořen (obr. 5).

03-skriptovani-obr5Obr. 5 Vytvořeno dialogové okno pomocí RSG Dialog Builder

Aplikace vytvořeného scriptu

Vytvořený script umožňuje tvorbu různých variací výpočetních modelů (obr. 6, 7). Přináší rapidní zkrácení času při tvorbě výpočetního modelu. Musíme však zdůraznit, že samotný proces výpočtu v rámci procesoru popsaný script neovlivňuje, protože ten ovlivňují jiné faktory, jako např. okrajové podmínky, síť konečných prvků apod.

03-skriptovani-obr6Obr. 6 Výsledek výpočtu pomocí tříválečkového geometrického modelu

03-skriptovani-obr7Obr. 7 Výsledek výpočtu pomocí dvojválečkového geometrického modelu

Závěr

Prezentovaný článek popisuje podrobně postup tvorby skriptu v programu Abaqus. Na základě popsaného modelového příkladu hadicového dopravníku je možné přistupovat i k tvorbě jiných skriptů pro potřeby počítačové analýzy pomocí tohoto programu. Skriptování se stává faktorem, který přináší významně zkrácení časové náročnosti tvorby modelu. Při práci s již vytvořeným skriptem se vyžadují minimální dovednosti práce s preprocesorem Abaqus.

Článek je součástí řešení grantového projektu VEGA 1/0922/12, VEGA 1/0184/12 a projektu VEGA 1/0036/12.

Literatura

  1. http://sk.wikipedia.org/wiki/Skriptovací_jazyk
  2. http://www.kiwiki.info/mediawiki/index.php/Multi-platformný_simulačný_program_vozidla_v_3D,_s_podporou_jazyka_vyššej úrovne#Charakteristika_jazyka_Python
  3. Fabian, M. –Spišák, E.: Navrhování a výroba s pomocí CA.. technologií. 1. vyd. Brno: CCB, 2009. 398 p. ISBN 978-80-85825-65-7.
  4. Fedorko, G.: Model dopravníka. In: Transport & Logistics: International journal. 2003, ISSN 1451-107X, s. 367-370.
  5. Stanová, E.: Mathematical Expression of the Wire Axis in Trihedral Strand of Steel Rope. In: TRANSPORT & LOGISTICS, No, 14 (2008), Košice, pp. 40–46, ISSN 1451-107X.
  6. Tittel, V. – Zelenay, M.: A comparison of die geometry in the drawing process. In: Vedecké práce MtF STU v Bratislave so sídlom v Trnave. Research papers Faculty of Materials Science and Technology Slovak University of Technology in Trnava. – ISSN 1336-1589. – Č. 26 (2009), s. 81–86.
  7. Fedorko, G., Husáková, N., Čepej, T.: Variable pipe conveyor – 2010. – 1 elektronický optický disk (CD-ROM). In: Energy Mining ER 2010: 3rd International Symposium: energy mining, new technologies, sustainable development: proceedings: Banja Junaković, Apatin, 08–11 September 2010. – Beograd: Rudarsko-geolološki fakultet Univerziteta, 2010 P. 425–430. – ISBN 978-86-7352-215-9.
  8. Boroška, J., Molnár, V., Stanová E., Bocko, P.: Simulation of the axial loading for a rope by using FEM analysis = Symulacja obciazen wzdluznych lin w oparciu o analize FEM – 2007. In: Zeszyty Naukowo-Techniczne. No. 41 (2007), p. 5–10. – ISSN 1640-4351.
  9. Fedorko, G., Kubín, K., Ivančo, V., Fabián, M.: FEM a napěťová analýza dopravních pásů hadicových dopravníků / Gabriel Fedorko... [et al.] – 2007. In: IT CAD. Vol. 17, no. 5 (2007), p. 44–47. – ISSN 1802-0011.

Mohlo by vás zajímat: