Object-Oriented Finite Elements and Domain Decomposition
Método del Element Finito Lu = f x Ω u = 0 en Ω Lu = a u+ ( bu) + cu Ω ( ) ua w ub w+ cuwdx= fwdx Ω
Ω Método del Element Finito wa u ub w+ cwudx= fwdx ( ) 1 Awu (, ) = f( w) Base ϕ,..., ϕ, ux ( ) = uϕ ( x) N Ω N j j j= 1 N j= 1 Au = f A = A( ϕ, ϕ ) f = f( ϕ ) ij j i ij i j i i Au = f
Discretización del Dominio malla β Ω α α R Hipercubo α Ω Rectángulo
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
Forma Bilinear Geometría Código Ideal Condiciones de Frontera PROGRAMA de CÁLCULO Elemento Finito Solución Matricial
Código Usual ElementoFinito Condiciones Forma de Frontera Bilinear Geometría Solución 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 Datos Metodos class Vcr { String model; String type; boolean on; boolean tape; float dist; void insert(tape c); void eject(); 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
λ 2 (0,1) (0,0) (1,0) λ 1 Elemento Finito Transformación Afina T ( x0, y0) ( x2, y2) (, xy) x λ1 x0 λ1 = T = + M y λ2 y0 λ2 λ x x x 1 1 1 0 = T = M λ2 y y y0 (, xy 1 1)
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 ( ) A ( φφ, ) = φ a φ φb φ+ cφφ dx e i j i j j i i j = Ω Ω F() φ fφdx e i i e 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 14 15 8 9 10 11 2 3 0 1 4 5 6 7 2 0 1 0 1 2 3 3
Método de Solución Resuelve Ax = b Métodos Directos Factorización LU Métodos Krylov Gradiente Conjugado Descomposición de Dominio Schwarz/Schur/FETI
y = a x i ij j j = 1 for i = 1,..., n y 0 for e = 1,..., ne for p = 1,..., nf i elem ( e). eqm ap( p) if ( i < 0) continue for q = 1,..., nf j elem ( e). eqm ap( q) if ( j < 0) continue n i y = y + elem ( e). ar( p, q) * x i j 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