GMSH

stahnout z webu, nebo na CUDA serveru.

Pro základní pokusy se hodí grafické rozhraní (a ukládat navržené objekty jako geometry-unrolled), posléze je vhodnější doeditovat uložené geometrie ručně.

Spustit generování 2D meshe lze příkazem

gmsh obr.geo -2 -o obr.msh -clmax 0.1

kde poslední parametr určuje globálně maximální velikost elementu (plochy, objemu), tedy jak hustá bude síť; lokálně to pak určí 4. parametr daného bodu (Point) definovaného v souboru .geo.

Pro generování 3D meshe zaměníme parametr -2 za -3.

Následující funkce načte vygenerovaný mesh a vrátí souřadnice vrcholů a seznam trojúhelníků (určených 3 vrcholy)

In [ ]:
def load(ifile="sample2D_x.msh",indir="work/"):
    if indir[:4]=='http': #nahrajeme soubor z webove adresy
        lines=urllib.request.urlopen(indir+ifile).readlines()
    else:
        lines=open(indir+ifile).readlines()
    #nalezeni pocatku seznamu vrcholu
    ibeg=[i for i in range(len(lines)) if str(lines[i][-6:-1])=='Nodes']
    # pole nodes obsahuje souradnice vrcholu site
    nodes=r_[[[float(b) for b in a.split()[1:]] for a in lines[ibeg[0]+2:ibeg[1]]]]
    inex=[i for i in range(len(lines)) if str(lines[i][-9:-1])=='Elements']
    #elementy
    cones=[[int(b) for b in a.split()] for a in lines[inex[0]+2:inex[1]]]
    # vybereme z nich trojuhelniky 
    # pole faces obsahuje indexy vrcholu a tagy 
    faces=r_[[c for c in cones if c[1]==2]][:,3:]
    return nodes,faces

pokud chceme u 3D meshe načíst čísla vrcholů čtyřstěnů místo plošek, nahradíme identifikátor ve druhém sloupci za 4:

faces=r_[[c for c in cones if c[1]==4]].transpose()[3:]

Souřadnice vrcholů n-tého 4stěnu pak dostaneme jako nodes[faces[n][2:]-1] (odečtení -1 je kvůli tomu, že Python indexuje od 0)