Portál AbcLinuxu, 26. dubna 2024 20:48

Svobodný software ve vědě

15. 10. 2008 | Karel Hruška
Články - Svobodný software ve vědě  

Článek představuje některé aplikace, které lze v prostředí GNU/Linuxu používat pro vědecký výzkum (přičemž zmiňuje i proprietární programy běžící na Linuxu). Zároveň nabízí konkrétní příklad zpracování výpočtu a prezentace výsledků z oblasti silnoproudé elektrotechniky.

Obsah

Úvod

link

Velká část současného výzkumu firem je vedena ve spolupráci s vysokými školami, přičemž do těchto výzkumných programů jsou, kromě trvalých zaměstnanců škol, zapojováni i studenti doktorského studia. Každý z těchto studentů má samozřejmě vlastní návyky na používání počítače a instalovaný software. V jaké pozici pak je student zasažený Tučňákem? Má šanci se zapojit do výzkumu i přesto, že používá minoritní operační systém?

Podívejme se tedy na aplikace, které lze úspěšně používat ve spojení s Linuxem a jsou dostatečně vyspělé na to, aby mohly být aktivně zapojeny do výzkumných záměrů. V následujícím textu se zaměříme pouze na poměrně úzký obor silnoproudé elektrotechniky a pokud by měl někdo další zkušenosti s používáním otevřeného softwaru v jiném oboru, má možnost se o ně podělit v některém z potenciálních budoucích pokračování tohoto článku.

Software použitelný s operačním systémem GNU/Linux

link

Pomineme-li poměrně individuální výběr distribuce, zaměřme se nyní na programové vybavení, které je obecně možné pod operačním systémem GNU/Linux spouštět. V akademickém prostředí pak samozřejmě nepůjde pouze o aplikace, které jsou plně otevřené, ale i o aplikace proprietární a velmi draze placené.

Otevřený software

link

GNU Octave

link

Licence: GNU GPL
Bezesporu jednou z nejcennějších open-source aplikací pro zpracování číselných dat je GNU Octave (Seriál: Octave (16 dílů)). Jde o vysokoúrovňový programovací jazyk vytvořený pro provádění matematických výpočtů. Nativně interpretuje veškerá čísla jako matice a je tedy ideální právě pro maticové operace. Pro některé výpočty využívá jiné linuxové programy (například fft), grafy pak vykresluje za pomoci programu gnuplot.

Jde o alternativu známého programu Matlab, se kterým má do jisté míry shodnou syntaxi a s určitými úpravami je i mezi oběma programy přenositelný kód vytvořených skriptů. Abychom ale nezapomínali na další aplikace - jako alternativy k programu Matlab jsou dostupné i JMathLib nebo například FreeMat. Každé z těchto alternativ ale bohužel schází pestrá galerie toolboxů, která je pro Matlab dostupná.

svobodny sw ve vede octave

QCad

link

Licence: GNU GPL
QCad je produktem firmy RibbonSoft a jak již název napovídá, jde o CAD program, konkrétně orientovaný na výkresy ve 2D. V minulých letech firma RibbonSoft vždy vydávala s určitým časovým odstupem zdrojové kódy starší verze programu QCad pod GNU/GPL (aktuální verze je vždy placená), zhruba před dvěma lety však tento (přínosný) zvyk ukončila a ačkoliv je v současné době placená verze programu QCad dostupná již ve verzi 2.2.2.0, otevřená verze je přes dva roky stará 2.0.5.0.

I přes tento fakt je QCad určitě jedním z nejkvalitnějších CAD programů pro Linux. Grafické rozhraní je asi nejbližší programu AutoCAD, velmi podobné je i ovládání, které je však více "klikací". Program umožňuje tisk výkresů v přesně daném měřítku, ruční nastavení kót, podporuje vrstvy ve výkresech a až na problémy s českými znaky se programu AutoCAD plně vyrovná. QCad ukládá výkresy do standardního formátu *.dxf.

svobodny sw ve vede qcad

OpenOffice.org

link

Licence: GNU LGPL
Linuxovou klasikou je kancelářský balík OpenOffice.org. O tomto produktu není třeba se nijak více šířit, neboť jej jistě každý dobře zná. Právě tento balík je na pomyslném konci výzkumů, neboť právě v něm se tvoří závěrečné výzkumné zprávy. Pokud by ale měla být přeci jen vyzdvižena některá vlastnost tohoto produktu, pak by touto vlastností mělo určitě být psaní vzorců v OpenOffice Writer. V porovnání s konkurenčními placenými produkty je OpenOffice.org Math velmi rychlý a stabilitu programu neohrozí ani několik desítek stran popsaných výpočty.

FEMM

link

Licence: AFPL
Poněkud výjimečnou pozici mezi výše uvedenými programy má program FEMM. Jako jediný z nich existuje ve verzi pouze pro operační systém Windows, nicméně po doplnění dvou chybějících knihoven (MFC42.DLL a MSVCRT.DLL) jej lze úspěšně provozovat i pod Linuxem za pomoci Wine.

svobodny sw ve vede femm

FEMM (Finite Element Method Magnetics) je program specializovaný na řešení problémů z elektrostatiky a elektromagnetizmu za pomoci metody konečných prvků ve 2D. Od verze 4.2 je do programu přidružen i podobný produkt Mirage, určený k řešení tepelných úloh. FEMM představuje kvalitní otevřenou náhradu za placený program QuickField. FEMM, na rozdíl od zkušební (neplacené) verze programu QuickField, není omezen počtem použitých elementů, a tak je možné vytvořený model opatřit libovolně jemnou matematickou sítí.

FEMM umožňuje import geometrie ve formátu *.dxf (tedy například z programu QCad), což je, vzhledem k poměrně neobratnému kreslení ve FEMMu, často jediná možnost umožňující řešení složitějších geometrických uspořádání. K dalším přednostem FEMMu patří podpora otevřeného skriptovacího jazyka Lua (vlastní licence OSS kompatibilní, od verze 5 MIT licence), s jehož pomocí lze automatizovat řadu operací prováděných FEMMem.

Další věrní pomocníci

link

Kromě uvedených "velkých" koňů samozřejmě existuje spousta dalších aplikací, které v Linuxu ulehčí život. Řadu z nich při běžné práci uživatel ani nezaregistruje, nicméně pokud by měla být jedna z těchto drobných pomocnic vyzdvižena, snad nejvíce by si to zasloužil editor programu Krusader KrViewer, umožnující zvýrazňování syntaxe řady programovacích jazyků, včetně zmíněného Matlabu, Lua a řady dalších. Dalším věrným pomocníkem je slovníkový program StarDict (QStarDict) doplněný o vhodné slovníky ((Nielen) anglicko-české slovníkové databázy pre StarDict).

Uzavřený software

link

Matlab

link

Jednou z aplikací, se kterou se setká dříve či později každý student technického oboru, je Matlab. Stejně jako v případě GNU/Octave jde původně o vysokoúrovňový programovací jazyk pro matematické použití, který se však časem vyvinul v plnohodnotný programovací jazyk, ve kterém není problém psát například i programy s grafickým rozhraním. Ať již Matlab pod Linuxem používáme v jeho nativní verzi, nebo spouštíme za pomoci Wine, není problém jej na této platformě provozovat.

Poměrně nepříjemná je však politika firmy MathWorks, která prodává licence pro Matlab zvlášť pro každou platformu a pro provozovatele je tedy nutné mít zvlášť licence pro Linux a pro Windows. Pro koncového uživatele linuxového portu je pak jistě nepříjemnou vlastností nefunkčnost klávesových zkratek Ctrl+c a Ctrl+v v grafickém rozhraní Matlabu (má vlastní zkratky), nicméně namísto integrovaného editoru v Matlabu lze velmi úspěšně používat výše zmíněný KrViewer. Nesporným kladem Matlabu je pestrá paleta (zvlášť placených) toolboxů, včetně hojně používaného Simulinku.

ANSYS

link

ANSYS je, stejně jako FEMM, programem pro řešení nejrůznějších problémů pomocí metody konečných prvků. Na rozdíl od poměrně jednoduchého FEMMu umožňuje řešení ve 2D i 3D a kromě elektrostatiky, elektromagnetizmu a tepelných výpočtů umožňuje i řešení mechanických úloh a úloh zabývajících se prouděním tekutin. Všechny tyto možnosti spojuje FEMM v jediném grafickém rozhraní postaveném na (poměrně archaické) knihovně Openmotif 2.2.

Snaha ANSYS Inc. o sjednocení řešení všech možných problémů do jediného grafického rozhraní nakonec vedla tomu, že je ovládání programu pomocí menu velmi neobratné a práce s programem velmi náročná. Tento nepříjemný nedostatek ale vyvažují schopnosti ANSYSu, který nabízí velké množství řešičů úloh a nepřeberné množství typů elementů, kterými lze modelovaný objekt popsat. S výhodou lze použít i integrovaný skriptovací jazyk APDL, ve kterém lze psát vlastní skripty pro ANSYS a lze jím ANSYS i přímo ovládat.

Nevýhody dnes již zastaralého rozhraní klasického ANSYSu se snaží ANSYS Inc. napravit v novém produktu ANSYS Workbench, který však stále trpí řadou chyb, kvůli kterým jej stále nelze úspěšně používat. Dodnes mu chybí řada důležitých funkcí, některé úlohy není schopen řešit vůbec (i když řešič je shodný s klasickým ANSYSem) a na Linuxu se chová velmi nevyzpytatelně, přičemž na různých počítačích náhodně běží, nebo ne.

Značným plusem ANSYSu je nepřeberné množství portů, které zákazník dostane při koupi licence (každý port se neplatí zvlášť). Kromě portů pro poměrně běžné platformy jako GNU/Linux, MacOS/X či Windows zákazník při koupi licence dostane i porty pro Solaris, HP/UX, SGI IRIX a IBM AIX. Jako open source náhrada za ANSYS se rýsuje program Salome.

Eagle

link

Eagle je jednou z notoricky známých aplikací pro návrh tištěných spojů. Pokud se tedy někdo zabývá touto oblastí elektrotechniky, pak vězte, že i v případě tohoto programu existuje jeho linuxový port. Na rozdíl od předchozích programů si lze ze stránek výrobce stáhnout testovací verzi zdarma.

Když se táhne za jeden provaz

link

Zkusme si nyní představit příklad, ve kterém by bylo možné použít pouze výše uvedený otevřený software. Takovýmto případem může být například studium dějů, které probíhají v asynchronním stroji při otáčení jeho rotoru s tím, že bychom chtěli získat průběh momentu stroje v závislosti na poloze rotoru a ještě bychom výsledky z tohoto výpočtu chtěli zobrazit jako animaci. Pro tyto účely postačí otočit rotorem o úhel mezi dvěma drážkami rotoru a tento úhel rozdělit na rozumný počet diferencí (například 20), aby byla animace plynulá.

Úplně prvním krokem při řešení tohoto problému je tvorba výkresu stroje, který chceme modelovat. Pro tento účel je ze jmenovaných programů ideální QCad, ve kterém je kresba řezu strojem záležitost několika minut. Interoperabilita s programem FEMM, ve kterém bude výpočet probíhat, je zajištěna uložením výkresu do formátu *.dxf.

Samotná definice problému v programu FEMM již vyžaduje poměrně pokročilé znalosti v oblasti elektrických strojů, proto se vyhneme detailům a omezíme se na klíčový krok pro další výpočty, kterým je označení postupně všech prvků náležících rotoru a jejich přiřazení jediné společné skupině, označené například číslem "1". Toto přiřazení nám dále umožní za pomoci skriptu manipulaci s rotorem jako jediným celkem. Pro odečet momentu je druhým klíčovým krokem vytvoření kružnice v půli vzduchové mezery mezi statorem a rotorem. Na ní je pak počítán Maxwellův tenzor a z něj se určuje moment stroje. V tuto chvíli se otevírá možnost uplatnění otevřeného skriptovacího jazyku Lua, pomocí něhož chceme automatizovat následující činnosti:

Uvažujme například stroj, který má 36 drážek na rotoru. To znamená, že úhel mezi jednotlivými drážkami je 10 úhlových stupňů. Chceme udělat animaci z 20 poloh, tudíž při každém kroku má být rotor pootočen o 0,5 stupně. Skript umožňující uvedené operace bude vypadat následovně:

--- otaceni rotorem pro FEMM
--- skript verze 1.0

open("vzor.FEM") --- otevreni vstupniho souboru

vystup=openfile("moment.txt", "w") --- otevreni vystupniho souboru

mi_seteditmode("group") --- v preprocesoru budou editovany skupiny

dAlfa=0.5 --- uhel pootoceni rotoru mezi jednotlivymi kroky

n=0

--- vypocet vzorovaho modelu
mi_saveas(format("motor_%1$d.FEM",n)) --- ulozeni upraveneho modelu
mi_analyse() --- spusteni analyzy

mi_loadsolution() --- nacteni vysledku

mo_showdensityplot(0,0,1,0,"mag") --- zobrazeni indukce ve stroji
mo_savebitmap(format("motor_%1$d.bmp",n)) --- ulozeni vysledku do bitmapy

mo_seteditmode("contour") --- v postprocesoru budou editovany linie
mo_selectpoint(-100,0.5) --- vyber prvniho z bodu na kruznici (horni cast)
mo_selectpoint(100,0.5) --- vyber druheho z bodu na kruznici (horni cast)
mo_selectpoint(-100,-0.5) --- vyber prvniho z bodu na kruznici (dolni cast)
mo_selectpoint(100,-0.5) --- vyber druheho z bodu na kruznici (dolni cast)
MDC,DM,TV,FV=mo_lineintegral(4) --- vypocet momentu stroje na zaklade integralu po linii

write(vystup, MDC, " ", DM, " ", TV, " ", FV, "\n") --- ulozeni vystupnich hodnot

mo_close() --- uzavreni postprocesoru

for n=1,19 do

mi_selectgroup(1) --- vyber skupiny 1 (rotor)
mi_move_rotate(0,0,dAlfa) --- pootoceni rotoru
mi_saveas(format("motor_%1$d.FEM",n)) --- ulozeni upraveneho modelu

mi_analyse() --- spusteni analyzy
mi_loadsolution() --- nacteni vysledku

mo_showdensityplot(0,0,1,0,"mag") --- zobrazeni indukce ve stroji
mo_savebitmap(format("motor_%1$d.bmp",n)) --- ulozeni vysledku do bitmapy

mo_seteditmode("contour") --- v postprocesoru budou editovany linie
mo_selectpoint(-100,0.5) --- vyber prvniho z bodu na kruznici (horni cast)
mo_selectpoint(100,0.5) --- vyber druheho z bodu na kruznici (horni cast)
mo_selectpoint(-100,-0.5) --- vyber prvniho z bodu na kruznici (dolni cast)
mo_selectpoint(100,-0.5) --- vyber druheho z bodu na kruznici (dolni cast)
MDC,DM,TV,FV =mo_lineintegral(4) --- vypocet momentu stroje na zaklade integralu po linii

write(vystup, MDC, " ", DM, " ", TV, " ", FV, "\n") --- ulozeni vystupnich hodnot

mo_close() --- uzavreni postprocesoru

end

closefile(vystup) --- uzavreni vystupniho souboru 

Výsledkem po běhu takovéhoto skriptu je jeden soubor s výsledky a dvacet souborů s obrázky rozložení magnetického pole ve stroji, každý pro jiný úhel natočení rotoru. Zkusme nyní zjistit, jestli v momentu stroje není nějaká parazitní harmonicky se opakující složka. To lze zjistit za pomoci Fouriérova rozvoje výsledků, který lze realizovat například v GNU/Octave, a jeho výsledky lze v témže programu vizualizovat. Jak bylo uvedeno, programovací jazyk GNU/Octave je blízký programovacímu jazyku Matlab a program zpracovávající získané výsledky může vypadat nějak takto:

% Fourierova analyza vypoctenych vysledku
% version 1.0

M_str=10; % strední hodnota vypocteneho momentu

moment=[ --- zde je vypoctenych 20 hodnot oddelenych carkou --- ]-M_str; % vektor vstupnich dat

uhel=0.5; % uhel mezi kroky animace

rozvoj=2/length(moment)*fft(moment); % fourieruv rozvoj vektoru vysledku

x=1/uhel*[0:round(length(rozvoj)/2)]/round(length(rozvoj)); % vypocet dat pro osu x

plot(x(1:length(moment)/2),abs(rozvoj(1:round(length(rozvoj)/2)))) % vykresleni vysledku do grafu
title ('Fourierova analýza momentu stroje')
xlabel ('1/alpha')
ylabel ('M [N.m]')

% vypis vysledku do konzole
x(1:length(moment)/2) % osa x (uhlova perioda kmitu)
abs(rozvoj(1:round(length(rozvoj)/2))) % velikost kmitu
arg(rozvoj(1:round(length(rozvoj)/2))) % faze kmitu

Po provedení Fouriérovy analýzy momentu si lze snadno vybrat příslušné špičky a určit tedy případné parazitní momenty. Nyní již k oblíbené animaci. Jednoduchému animování obrázků z programu FEMM brání dva fakty - FEMM jednak ukládá obrázky do formátu *.bmp, který nelze animovat, a navíc jsou výstupní obrázky obdélníkové, model v nich ani není zarovnaný doprostřed, a při případné prezentaci prostě nevypadají dobře ;-). Tento problém za nás vyřeší jednoduchý skript využívající právě ony věrné včelky schované kdesi na pozadí v systému. V tomto případě jsou to convert z balíku ImageMagick a utilita pro animaci gif souborů gifsicle. Jejich úkoly jsou následující:

Skript automatizující tyto operace pak může vypadat následovně:

#!/bin/sh

# cyklus pro orezani obrazku a ulozeni do gifu
for f in *.bmp
do convert $f -extent 761x761 $f.gif
done

# vytvorit adresar pro vytvorene gify
mkdir gifs

# presunout vytvorene gify
mv *.gif ./gifs/

# animace gifu
gifsicle -O --delay=10 --loop ./gifs/*.gif > animace.gif

A výsledná animace motoru vypadá takto:

svobodny sw ve vede animace motoru
(13,9 MB)

Závěr

link

I když výše uvedený výčet otevřeného softwaru použitelného pro výzkumné účely jistě není kompletní a je zaměřen na velmi úzkou oblast silnoproudé elektrotechniky, je zřejmé, že i za pomoci otevřeného softwaru lze výzkum provádět a lze tak snížit náklady na softwarové vybavení. Samozřejmě dodnes existuje řada oblastí, pro které neexistuje open source aplikace. V daných oblastech však existují linuxové porty odpovídajících uzavřených aplikací.

Související články

Seriál: Octave
Použití gnuplot pro tvorbu grafů v PHP
Blog: Svobodný software v rukách vědy

Další články z této rubriky

Týden na ITBiz: Svět IT a burzy, umělá inteligence, Nvidia a outsourcing
Linuxové foto novinky: pozvolná evoluce
PCLinuxOS 2017.2 MATE - tak trochu zvláštní linuxová distribuce
Krátký pohled na Fedoru 25, Wayland a GNOME 3.22
Naprosto ničím nezajímavé Lubuntu 16.10

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.