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)
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)