Object-Oriented Finite Elements and Domain Decomposition

Anuncio
Object-Oriented
Finite Elements
and
Domain
Decomposition
Método del Element Finito
Lu = f
x∈Ω
u = 0 en ∂Ω
Lu = −∇ ⋅ a ⋅ ∇ u + ∇ ⋅ (bu ) + cu
∫ ( ∇u ⋅ a ⋅∇w − ub ⋅∇w + cuw)dx = ∫
Ω
Ω
fwdx
Método del Element Finito
∫ ( ∇w ⋅ a ⋅∇u − ub ⋅∇w + cwu )dx = ∫
Ω
Ω
fwdx
A( w, u ) = f ( w)
Base ϕ1 ,..., ϕ N ,
N
∑A u
j =1
ij
j
= fi
N
u ( x) = ∑ u jϕ j ( x)
j =1
Aij = A(ϕi , ϕ j ) fi = f (ϕi )
A ⋅u = f
Discretización del Dominio
malla
β
Ω
∂Ω
Rectángulo
ααα
Rα Hipercubo
Variantes
†
†
†
†
†
†
Forma Bilinear y su cálculo
Condiciones de Frontera
Geometría
Tipo de Elemento (Triángulo,
Rectángulo, etc.)
Espacio de Funciones en el Elemento
Procedimiento de Solución
Código Ideal
Forma
Bilinear
Condiciones
de Frontera
PROGRAMA
Elemento
Finito
de
CÁLCULO
Geometría
Solución
Matricial
Código Usual
ElementoFinito
Condiciones
Forma
de Frontera
Bilinear
Solución
Geometría
Matricial
Programa de
Cálculo
OBJETIVO
Desarrollar Sistema de Cómputo
para
Elemento Finito
con
Módulos Intercambiables
Programación Orientada a Objetos
OOP
†
†
†
†
†
†
Simula -67 OSLO Dahl y Nygaard
Smalltalk (1970s) Xerox Park Alan
Kay
C++ (1980s) Stroustrup
Eiffel / Clos / Self / Beta
Java 1990s SUN
C# Microsoft
VCR como Objeto
Play
Rewind
Fast Forward
On/Off
Eject
Stop/Pause
Clases y Objetos
class Vcr {
String model;
String type;
Datos
boolean on;
boolean tape;
float dist;
void insert(Tape c);
void eject();
Metodos void play();
void rewind(float t);\
void fastForward(float t);
void stop();
void onOff();
void volume(float v);
}
Vcr vcr = new Vcr(“Sony”, “vhs”);
Tape tape = new Tape();
vcr.onOff();
vcr.insert(tape);
vcr.play();
vcr.stop();
vcr.eject();
If (vcr.on && vcr.tape()) {
vcr.eject();
vcr.onOff();
}
Herencia y SubClases
Class Coche
Class VW
Class
Jaguar
Class
Cirrus
Caracteristicas Sobresalientes de
OOP
†
†
†
†
Constructor: Type t = new T(…);
Invocación: x = t.method(…);
Herencia:
Class A {
}
Class A1 extends A {
}
Código Reutilizable
Clases para Elemento Finito
†
†
†
†
†
†
†
†
Node, Elem
FiniteElement (RectLinFem,
TriQuadFem, …)
Geometry
CalcFem -> LocalCalc
LinearOp -> BilinearForm
GlobalCalc
LinearSolve (SolveLU, SolveCGM,..)
EllipProblem
Colaboración entre Clases
Geometry geom = Geometry.factory(2, …);
FiniteElement finElem = FiniteElement.factory(2, …);
EllipProblem prob = new EllipProblem(numProb);
LinearSolve linSolve = LinearSolve.solveLU();
LocalCalc = new LocalCalc(geom, finElem);
GlobalCalc calcFem = new GlobalCalc(2, “fem”, geom);
Solver sol = new Solver(geom, finElem, prob, calcFem,
localCalc, linSolve);
Solver.solve();
Geometría
†
†
†
†
†
Lista de Elementos (nodos/vértices)
Lista de Nodos (coordinadas)
Lista de Elementos/Nodo
Elementos/Caras de frontera
Objeto de localización:
(x1,…,xn)->elemento
Elemento Finito (general)
†
†
†
†
Forma estandard (rectangulo,
simplejo)
Número y llamadas a sus funciones
y derivadas // mapeo a la forma
estandard // Caras y normales
Integración numerica
Interpolación
Elemento Finito
Transformación Afina
(0,1)
T
λ2
(0,0)
(x2 , y2 )
λ1
(1,0)
(x, y)
(x0, y0)
(x1, y1)
 λ1   x 0 
 λ1 
x
  = T  =  + M  
 y
 λ2   y0 
 λ2 
x − x0 
 λ1 
−1  x 
−1 

 =T  =M 
 y
 λ2 
 y − y0 
Elemento Finito (Específico)
†
Definición de polinomios y derivadas
en el espacio estandard
Elemento Finito
General
Rectangulo
Lineales
Triangulo
Lineales
Triangulo
Cúbicos
Cálculo Local
Evalúa Forma Bilineal/Elemento
i, j = 1,..., ne
Ae (φi ,φ j ) = ∫ ( ∇φi ⋅ a ⋅∇φ j −φ jb ⋅∇φi + cφφ
i j )dx
Ωe
Fe(φi ) = ∫ f φidx
Ωe
i → global(i)
fem.initElem(elem);
nf=fem.numFunciones();
ng=fem.numGauss();
for i=1,…,nf
for j=1,…,nf
for g=1,…,ng
x=fem.getGaussCoord(g);
wi=fem.eval(i, 0, x); wj=fem.eval(j, 0, x);
w1i=fem.eval(i, 1, x); w1j=fem.eval(j, 1, x);
aij[g] = forma.eval(x, wi, w1i, wj, w1j)
end g;
ar[i][j]=fem.integrate(aij);
end j;
end i;
Cálculo Global
†
†
†
†
†
Numeración de Funciones
Crear mapeo local --> LocalCalc
Asignación de Incógnitas
Valores o Vector de Frontera
Formación del Lado Derecho
Invocación Cálculo Local
Cálculo Global
Numeración
12
13
8
9
4
0
5
1
14
2
3
0
1
15
10
6
2
11
2
3
0
1
7
3
Método de Solución
Resuelve
A⋅ x = b
Métodos Directos
Factorización LU
Métodos Krylov
Gradiente Conjugado
Descomposición de Dominio Schwarz/Schur/FETI
yi =
f o r i = 1, ..., n
n
∑
j =1
a ij x
j
yi ← 0
f o r e = 1, ..., n e
f o r p = 1, ..., n f
i ← e l e m ( e ) .e q m a p ( p )
if (i < 0 ) c o n tin u e
f o r q = 1, ..., n f
j ← e l e m ( e ) .e q m a p ( q )
if (j < 0 ) c o n tin u e
y i = y j + e l e m ( e ) .a r ( p , q ) * x
j
Descomposición de Dominio
Σ
Ω
j
Ωi
Ωi
Descomposición de Dominio
†
†
Partition
Define partición como {pe1, …, pem}
Solución Global en términos de soluciones
de problemas intermedios – de manera
iterativa
PartitionElement (pei)
Solución Local en una región intermedia
Fábricas
†
†
†
†
Geometry geom =
PDEGeomFactory.newPDEGeom(…);
FiniteElement fem =
FiniteElementFactory.newFiniteElement(…);
EllipProblem =
EllipFactory.newEllipProblem(…);
LinearSolve =
SolveFactory.newLinSolve(…);
Conclusiones
†
†
†
†
Metodología Exitosa
Alta Eficiencia en Desarrollo
Recomendaciones
Entender el Modelo
Establecer Proyecto en Geofísica
y/o Ingenieria para Uso Común
Descargar