Está en la página 1de 58

El m etodo de elementos nitos en Python

I nigo Arregui, Ana M. Ferreiro, Jos e A. Garca


Departamento de Matem aticas, U. de La Coru na
{arregui, aferreiro, jagrodriguez}@udc.es
III Jornadas PythonSAGE
Vigo. Junio, 2012
Objetivos
Mostrar c omo puede implementarse el m etodo de elementos nitos de
forma sencilla en PYTHON
Destacar las posibilidades de algunas libreras:
NUMPY, SCIPY, MATPLOTLIB, MLAB
Mostrar c omo PYTHON puede ayudar a la explicaci on del m etodo
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 2 / 58

Indice general
1
Introducci on al M.E.F.
2
Elementos nitos 1D
3
Elementos nitos 2D
4
Otros aspectos
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 3 / 58
Introducci on al M.E.F.
Sea el problema:
Encontrar u : [a, b] IR tal que:
_
u

= f , x (a, b)
u(a) = u(b) = 0
Elegido cierto espacio de funciones V, buscamos u V que verique la
formulaci on variacional:
_
b
a
u

wdx =
_
b
a
u

dx =
_
b
a
fwdx, w V
y aproximamos u y w por combinaciones lineales de funciones lineales (por
ejemplo) a trozos:
_
b
a
u

h
w

h
dx =
_
b
a
fw
h
dx, w
h
V
h
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 4 / 58
Introducci on al M.E.F.
Discretizaci on del dominio:
x
i
= a+ih, i = 0, 1, . . . , N
(no tiene por qu e ser uniforme!)
x x x
i
N 0
Por las propiedades de la integral,
_
b
a
u

h
w

h
dx =
N1

i=0
_
x
i+1
x
i
u

h
w

h
dx
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 5 / 58
Introducci on al M.E.F.
Funciones de base:

i
(x
j
) =
_
1, si i = j
0, si i = j
u
h
(x) =
N

i=0
u
i

i
(x) w
h
(x) =
N

i=0
w
i

i
(x)
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 6 / 58
Introducci on al M.E.F.
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 7 / 58
Introducci on al M.E.F.
En cada (subintervalo) elemento
i+1
= [x
i
, x
i+1
],
_
x
i+1
x
i
_
u
i

i
(x) +u
i+1

i+1
(x)
_
w
i

i
(x) +w
i+1

i+1
(x)

dx =
= (w
i
w
i+1
)
_
_
x
i+1
x
i
_

i
(x)

i
(x)

i
(x)

i+1
(x)

i
(x)

i+1
(x)

i+1
(x)

i+1
(x)
_
dx
__
u
i
u
i+1
_
=
= (w
i
w
i+1
)
_
a
i+1
i,i
a
i+1
i,i+1
a
i+1
i+1,i
a
i+1
i+1,i+1
_
_
u
i
u
i+1
_
_
x
i+1
x
i
f (x)[w
i

i
(x) +w
i+1

i+1
(x)] dx =
= (w
i
w
i+1
)
_
_
x
i+1
x
i
f (x)
_

i
(x)

i+1
(x)
_
dx
_
=
= (w
i
w
i+1
)
_
b
i+1
i
b
i+1
i+1
_
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 8 / 58
Introducci on al M.E.F.
a
1
00
a
1
01
a
1
10
a
1
11
a
2
11
a
2
12
a
2
21
a
2
22
a
3
22
a
3
23
a
3
32
a
3
33
a
4
33
a
4
34
a
4
43
a
4
44
a
5
44
a
5
45
a
5
54
a
5
55
a
6
55
a
6
56
a
6
65
a
6
66
a
7
66
a
7
67
a
7
76
a
7
77
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 9 / 58
Introducci on al M.E.F.
_

_
a
0,0
a
0,1
0 0 . . . 0 0
a
1,0
a
1
1,1
+a
2
1,1
a
1,2
0 . . . 0 0
0 a
2,1
a
2
2,2
+a
3
2,2
a
2,3
. . . 0 0
0 0 0 0 . . . ... a
N1,N
0 0 0 0 . . . a
N,N1
a
N,N
_

_
_

_
u
0
u
1
u
2
.
.
.
u
N1
u
N
_

_
=
=
_

_
b
0
b
1
1
+b
2
1
b
2
2
+b
3
2
.
.
.
b
N1
N1
+b
N
N1
b
N
_

_
Debemos construir y resolver un sistema de ecuaciones lineales
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 10 / 58
Elementos de Lagrange P
1
Elemento de referencia: [1, +1]
Base de polinomios: b
0
(t) = 1 b
1
(t) = t
Polinomio de grado 1: p(t) = a
0
b
0
(t) +a
1
b
1
(t)
Condiciones impuestas:
_
p
0
(1) = 1
p
0
(1) = 0
=
_
1 1
1 1
__
a
0
a
1
_
=
_
1
0
_
_
p
1
(1) = 0
p
1
(1) = 1
=
_
1 1
1 1
__
a
0
a
1
_
=
_
0
1
_
p
0
(t) =
1
2
(1t) p
1
(t) =
1
2
(1+t)
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 11 / 58
Elementos de Lagrange P
1
from numpy import poly1d; import scipy
nodos = [-1.0, 1.0]; n = len (nodos)
b = [None] * n
b[0] = lambda t: 1.0
b[1] = lambda t: t
a = [b[j] (nodos[i]) for i in range (n) for j in range (n)]
a = numpy.reshape (a,[n,n])
alu = scipy.linalg.lu (a)
p = []
for i in range (n):
s = numpy.zeros (n, f); s[i] = 1.0
coef = (scipy.linalg.lu solve (alu,s)).tolist();
coef.reverse ()
p.append (poly1d (coef))
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 12 / 58
Elementos de Lagrange P
1
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 13 / 58
Elementos de Lagrange P
2
nodos = [-1.0, 0.0, 1.0]
n = len (nodos)
b = [None] * n
b[0] = lambda t: 1.0
b[1] = lambda t: t
b[2] = lambda t: t*t
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 14 / 58
Elementos de Lagrange P
2
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 15 / 58
Malla
nnod = 41
nelt = nnod - 1
coord = numpy.linspace (0., 1., nnod)
conec = [[i,i+1] for i in range (nelt)]
# Derivadas de los polinomios anteriores
dpdt = []
for poli in p:
dpdt.append (poli.deriv())
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 16 / 58
Matriz de rigidez
_

_
a
0,0
a
0,1
0 0 . . . 0 0
a
1,0
a
1
1,1
+a
2
1,1
a
1,2
0 . . . 0 0
0 a
2,1
a
2
2,2
+a
3
2,2
a
2,3
. . . 0 0
0 0 0 0 . . . ... a
N1,N
0 0 0 0 . . . a
N,N1
a
N,N
_

_
_

_
u
0
u
1
u
2
.
.
.
u
N1
u
N
_

_
=
=
_

_
b
0
b
1
1
+b
2
1
b
2
2
+b
3
2
.
.
.
b
N1
N1
+b
N
N1
b
N
_

_
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 17 / 58
Matriz de rigidez y segundo miembro
a
ij
=
_
x
i+1
x
i
p

i
(x)p

j
(x)dx =
h
2
_
1
1
_
2
h
p

i
(t)
_ _
2
h
p

j
(t)
_
dt
b
i
=
_
x
i+1
x
i
f (x)p
i
(x)dx =
h
2
_
1
1
f (x(t)) p
i
(t)dt
h
2
N
k

k=1

k
f (x(t
k
)) p
i
(t
k
)
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 18 / 58
Matriz de rigidez
aa = numpy.zeros ([nnod,nnod], f)
for ef in conec:
[xi, xd] = coord [ef[0], ef[1]]
xm = 0.5 * (xi + xd); h = abs (xd - xi)
jac = 0.5 * h; jac1 = float (1.0 / jac)
dp = [jac1 * dpdt[0], jac1 * dpdt[1]]
aelt = numpy.zeros ([n,n], f) # Matriz elemental
for i in range (n):
for j in range (n):
int ij = (dp[i] * dp[j]).integ ()
aelt[i,j] = jac * (int ij (1.0) - int ij (-1.0))
for i in range (n): # Ensamblado
for j in range (n):
aa [ef[i],ef[j]] += aelt [i,j]
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 19 / 58
Segundo miembro y condiciones de contorno
belt = numpy.zeros (n, f)
for k in range (g.n):
tk = g.x [k]
wk = g.w [k]
xk = xm + 0.5 * h * tk
for i in range (n):
belt[i] += 0.5 * h * wk * f(xk) * p[i] (tk)
aa[0,0] = 1.e+15
bb[0] = 0.0
aa[-1,-1] = 1.e+15
bb[-1] = 0.0
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 20 / 58
Resoluci on del sistema de ecuaciones lineales
import scipy.linalg as la
u = la.solve (aa, bb) # Metodos directos
[lu,p] = la.lu factor (aa); u = la.lu solve (lu, bb)
c = la.cho factor (aa); u = la.cho solve (c, bb)
[q,r] = la.qr (aa)
u = la.cg (aa, bb) # Metodos iterativos
u = la.cgs (aa, bb)
u = la.qmr (aa, bb)
u = la.gmres (aa, bb)
u = la.bicg (aa, bb)
u = la.bicgstab (aa, bb)
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 21 / 58
Ejemplo
u

= e
x/2
__
1
4
36
2
_
sin(6x) 6 cos(6x)
_
, x (0, 1)
u(0) = u(1) = 0
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 22 / 58
El M.E.F. en problemas bidimensionales
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 23 / 58
El M.E.F. en problemas bidimensionales
u = f en , u = 0 en
_

w
T
udxdy =
_

f wdxdy, w V
_
T
(w
0
p
0
+w
1
p
1
+w
2
p
2
)
T
(u
0
p
0
+u
1
p
1
+u
2
p
2
)dxdy =
= (w
0
w
1
w
2
)
_
_
_
T
_
_
p
0
p
1
p
2
_
_
(p
0
p
1
p
2
)dxdy
_
_
_
_
u
0
u
1
u
2
_
_
_
T
f (w
0
p
0
+w
1
p
1
+w
2
p
2
)dxdy =
= (w
0
w
1
w
2
)
_
_
_
T
f
_
_
p
0
p
1
p
2
_
_
dxdy
_
_
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 24 / 58
El M.E.F. en problemas bidimensionales
Polinomios en el tri angulo:
p(x, y) = a
00
+a
10
x +a
01
y
+a
20
x
2
+a
11
xy +a
02
y
2
+a
30
x
3
+a
21
x
2
y +a
12
xy
2
+a
03
y
3
+a
40
x
4
+a
31
x
3
y +a
22
x
2
y
2
+a
13
xy
3
+a
04
y
4
+a
50
x
5
+a
41
x
4
y +a
32
x
3
y
2
+a
23
x
2
y
3
+a
14
xy
4
+a
05
y
5
En general,
p(x, y) =

0i+jn
a
ij
x
i
y
j
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 25 / 58
El M.E.F. en problemas bidimensionales
class polyd2 (object):
def init (self,coef):
self.coef = coef # coef[ij] = a
ij
# otra posibilidad: coef[(i,j)] = a
ij
def call (self,x,y):
z = 0.0
for k in self.coef:
i,j = map (int , k)
z += self.coef[k] * x**i * y**j
return z
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 26 / 58
El M.E.F. en problemas bidimensionales
def derivax (self):
d = {}
for k in self.coef:
[i,j] = map (int , k)
if (i > 0):
gr = str (i-1) + str (j)
d[gr] = i * self.coef [k]
return polyd2 (d)
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 27 / 58
El M.E.F. en problemas bidimensionales
def dibuja (self,n=41):
x = []
y = []
z = []
xx = numpy.linspace (0., 1., n)
for k in range (n):
yy = numpy.linspace (0., 1.0-xx[k], n)
for j in range (n):
x.append (xx[k])
y.append (yy[j])
z.append (self. call (xx[k],yy[j]))
mlab.figure (1)
mlab.points3d (x,y,z, scale factor=0.02, \
color=(1,0,0))
mlab.outline ()
mlab.axes ()
mlab.show ()
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 28 / 58
Elementos de Lagrange P
1
en el tri angulo unidad
3 grados de libertad
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 29 / 58
Polinomios de grado 1 en el tri angulo unidad
b
0
(x, y) = 1.0 b
1
(x, y) = x b
2
(x, y) = y
_

_
p
0
(x, y) = c
00
b
0
(x, y) +c
01
b
1
(x, y) +c
02
b
2
(x, y)
p
1
(x, y) = c
10
b
0
(x, y) +c
11
b
1
(x, y) +c
12
b
2
(x, y)
p
2
(x, y) = c
20
b
0
(x, y) +c
21
b
1
(x, y) +c
22
b
2
(x, y)
C alculo de los coecientes c
ij
: resoluci on de tres sistemas de ecuaciones
lineales
p
i
(a
j
) =
ij
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 30 / 58
Polinomios de grado 1 en el tri angulo unidad
nodos = [(0., 0.), (1., 0.), (0., 1.)]
n = len (nodos)
grados = [00, 10, 01] # Base de polinomios
b = [None] * n
b[0] = lambda a: 1.0
b[1] = lambda a: a[0]
b[2] = lambda a: a[1]
# Matriz de coeficientes
a = [b[j] (nodos[i]) for i in range (n) \
for j in range (n)]
a = numpy.reshape (a,[n,n])
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 31 / 58
Polinomios de grado 1 en el tri angulo unidad
p = []
for i in range (n):
s = numpy.zeros (n, f) # Segundos miembros
s[i] = 1.0
coef = linalg.solve (a,s) # Resolucion
dict = {}
for k in range (n):
dict [grados[k]] = coef[k] # Diccionario
p.append (cpoly.polyd2 (dict)) # Polinomio
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 32 / 58
Polinomios de grado 1 en el tri angulo unidad
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 33 / 58
Elementos de Lagrange P
2
en el tri angulo unidad
6 grados de libertad
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 34 / 58
Polinomios de grado 2 en el tri angulo unidad
nodos = [(0., 0.), (1., 0.), (0., 1.), \
(0.5, 0.5), (0., 0.5), (0.5, 0.)]
n = len (nodos)
grados = [00, 10, 01, 11, 02, 20]
b = [None] * n
b[0] = lambda a: 1.0
b[1] = lambda a: a[0]
b[2] = lambda a: a[1]
b[3] = lambda a: a[0]*a[1]
b[4] = lambda a: a[1]**2
b[5] = lambda a: a[0]**2
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 35 / 58
Polinomios de grado 2 en el tri angulo unidad
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 36 / 58
Polinomios de grado 2 en el tri angulo unidad
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 37 / 58
Elementos de Lagrange P
1
en el tri angulo unidad
4 grados de libertad
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 38 / 58
Polinomios de grado 1 en el cuadrado unidad
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 39 / 58
Elementos de Lagrange P
2
en el tri angulo unidad
8 grados de libertad
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 40 / 58
Polinomios de grado 2 en el cuadrado unidad
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 41 / 58
Construcci on de la matriz de rigidez y vector global
(w
0
w
1
w
2
)
_
_
_
T
_
_
p
0
p
1
p
2
_
_
(p
0
p
1
p
2
)dxdy
_
_
_
_
u
0
u
1
u
2
_
_
=
= (w
0
w
1
w
2
)
_
_
a
00
a
01
a
02
a
10
a
11
a
12
a
20
a
21
a
22
_
_
_
_
u
0
u
1
u
2
_
_
=
(w
0
w
1
w
2
)
_
_
_
T
f
_
_
p
0
p
1
p
2
_
_
dxdy
_
_
=
(w
0
w
1
w
2
)
_
_
b
0
b
1
b
2
_
_
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 42 / 58
Construcci on de la matriz de rigidez y vector global
Cambio de variable al dominio de referencia (

T):
_
x
y
_
= C
k
_
x
y
_
+d
k
Entonces,
Para i, j = 0, 1, 2,
a
ij
=
_
T
p
T
i
p
j
dxdy =|det (C
k
)|
_

T
p
T
i
C
T
k
C
1
k
p
j
d xd y
Para i = 0, 1, 2,
b
i
=
_
T
f p
i
dxdy =|det (C
k
)|
_

T
f (x( x, y), y( x, y)) p
i
d xd y
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 43 / 58
Ejemplo
u = f en = (0, 1)(0, 1)
u = 0 en
u(x, y) = xy(1x)(1y) sin(10xy)
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 44 / 58
Matrices huecas
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 45 / 58
Matrices huecas
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 46 / 58
Matrices huecas: ejemplo
import numpy, pylab
from scipy import sparse
from scipy.sparse import linalg as sla
n = 9
conec = [[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4],
[3, 4, 7], [3, 7, 6], [4, 5, 7], [7, 5, 8]]
aelt = numpy.array ([[4., -1., 0.], [-1., 4., -1.],
[0., -1., 4.]])
belt = numpy.array ([1., 0., -1.])
a = sparse.lil matrix ((n,n))
b = numpy.zeros (n, f)
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 47 / 58
Matrices huecas: ejemplo
for ef in conec:
for i in range (3):
for j in range (3):
a[ef[i],ef[j]] += aelt[i,j]
b[ef[i]] += belt[i]
pylab.spy (a)
pylab.show ()
u = sla.spsolve (a,b)
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 48 / 58
Matrices huecas: ejemplo
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 49 / 58
Matrices huecas
u = sla.spsolve (a,b) # Metodos directos
u = sla.splu (a)
u = sla.cg (a,b) # Metodos iterativos
u = sla.bicg (a,b)
u = sla.bicgstab (a,b)
u = sla.cgs (a,b)
u = sla.gmres (a,b)
u = sla.minres (a,b)
u = sla.qmr (a,b)
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 50 / 58
Generaci on de mallas estructuradas
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 51 / 58
Generaci on de mallas no estructuradas
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 52 / 58
Generaci on de mallas no estructuradas: Delaunay
from numpy import zeros like
from matplotlib import delaunay
from enthought.mayavi import mlab
xx1 = [0., 1., 2., 0., 1., 2.]
yy1 = [0., 0., 0., 1., 1., 1.]
[ct,ar,conec,vec] = delaunay.delaunay (xx1,yy1)
mlab.triangular mesh (xx1,yy1,zeros like(xx1),conec, \
representation=wireframe)
mlab.view (0,0)
mlab.show ()
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 53 / 58
Generaci on de mallas no estructuradas: Delaunay
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 54 / 58
Generaci on de mallas no estructuradas: Delaunay
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 55 / 58
Generaci on de mallas no estructuradas: Delaunay
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 56 / 58
Generaci on de mallas no estructuradas: Delaunay
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 57 / 58
I. Arregui, A. M. Ferreiro, J. A. Garca, UDC () PYTHON y el M.E.F. III Jornadas Python-SAGE 58 / 58

Intereses relacionados