Jelikož je obecně známo, že numerické řešení rovnic popisujících nestlačitelné proudění je extrémně výpočetně náročné, zvláště při zahrnutí turbulentního modelu, bylo nezbytné se důkladně zaměřit také na vhodný způsob implementace ve zvoleném prostředí Wolfram Mathematica.
Numerické řešení stacionárních i nestacionárních Navier-Stokesových rovnic se de facto skládá ze dvou základních kroků: (I) sestavení matic vyplývajících z maticové formulace úlohy a (II) řešení lineárních soustav představujících maticovou formulaci těchto úloh. Při řešení těchto úloh pomocí isogeometrické analýzy je kritickou částí, na rozdíl od metody konečných prvků, právě první z uvedených kroků. Vzhledem k využití B-spline objektů je totiž diskretizace typicky složena z řádově menšího počtu elementů a je tedy popsaná i mnohem menším počtem řídicích bodů (které jsou analogií k uzlům v metodě konečných prvků). Úloha tak má mnohem menší počet stupňů volnosti a ve druhém kroku se řeší výrazně menší soustavy lineárních rovnic. Na druhou stranu jsou použité bázové funkce typicky vyššího stupně, než pro metodu konečných prvků, a navíc se nemusí jednat pouze o polynomy, ale může jít obecně i o racionální lomené funkce. Výpočet integrálů při sestavování matic je tak mnohem časově náročnější.
Bylo proto otestováno několik možností implementace metod pro numerické řešení Navier-Stokesových rovnic, některé založené na využití symbolických operací (které jsou obecně velmi silnou stránkou softwaru Wolfram Mathematica), další na čistě maticové reprezentaci a operacích s vektory a maticemi. Ukázalo se, že implementace založené na symbolické reprezentaci bázových funkcí je ve srovnání s maticovou reprezentací velmi pomalá. Pro srovnání uvedeme konkrétní výpočetní časy pro různé možnosti reprezentace bázových funkcí dosažené na vybraných testovacích příkladech. Cílem bylo sestavit některou z matic, které se vyskytují v maticové formulaci úloh nestlačitelného proudění. Jako modelové příklady budeme uvažovat proudění v kavitě a analogickou úlohu proudění v kavitě, která je čtvrtinou mezikruží. Důvodem, proč uvažujeme tyto dvě různé úlohy, je, že pro každou z nich dostáváme kvalitativně odlišné bázové funkce. Zatímco čtvercovou kavitu je možné popsat ve třídě B-spline objektů a bázové funkce jsou tedy polynomy ve dvou proměnných, pro přesnou reprezentaci kavity na části mezikruží potřebujeme NURBS objekty a bázové funkce jsou racionálními lomenými funkcemi. Následující tabulka uvádí dosažené časy pro sestavení matice pro různá zjemnění sítě, přičemž sloupec „SYMB1“ znamená reprezentaci bázových funkcí pomocí symbolické matice, sloupec „SYMB2“ využití vestvěné funkce BSplineBasis v kombinaci se symbolickým přístupem a sloupec „MAT“ představuje reprezentaci bázových funkcí numerickou maticí. Ve všech případech jsou použity jako základ kubické B-spline bázové funkce a integrace se provádí pomocí standardní Gaussovy kvadratury, přičemž v každé proměnné používáme 7 kvadraturních bodů na každý element. Výpočty byly prováděny na počítači s procesorem Intel Core i5-3570 (3,4 GHz), 16GB RAM, systémem Microsoft Windows 8.1 v softwaru Wolfram Mathematica 9.0.1.
Rozměr | SYMB1 (s) | SYMB2 (s) | MAT (s) | SYMB1/MAT | SYMB2/MAT | |
Kavita 16×16 | 1024×1156 | 92.86 | 14.49 | 0.82 | 112.79x | 17.60x |
Kavita 24×24 | 2304×2500 | 293.77 | 32.45 | 1.94 | 151.17x | 16.70x |
Kavita 32×32 | 4096×4356 | 847.01 | 66.53 | 3.89 | 217.56x | 17.09x |
Mezikruží 6×6 | 144×196 | 102.86 | 2.58 | 0.11 | 935.06x | 23.48x |
Mezikruží 12×12 | 576×676 | 430.59 | 12.11 | 0.47 | 918.10x | 25.82x |
Mezikruží 18×18 | 1296×1444 | 998.92 | 30.84 | 1.14 | 876.25x | 27.06x |
Hlavním důvodem, proč je právě reprezentace bázových funkcí pomocí numerických matic výrazně rychlejší je, že je v tomto případě možné, za jistých omezujících podmínek, provést automatický převod kódu v softwaru Wolfram Mathematica do jazyka C a tento kód následně přeložit. Lze tak alespoň částečně využít rychlosti jazyka C při matematických výpočtech a nepřijít tak o výhody implementace ve vysokoúrovňovém programovacím jazyce.