J. Miguel Vargas-Felix homepage

About

Welcome to my webpage. Currently I'm a PhD candidate, my research interests are: simulation with finite element and isogeometric analysis, solvers for sparse systems of equations, parallel computing, high performance computing, cache-obvious algorithms.

Here is my Curriculum Vitae


FEMT

FEMT is an open source library and tools for solving large sparse systems of equations in parallel. This software is specialy set to solve systems of equations resulting from finite element, finite volume and finite differences discretizations.


Papers

J. M. Vargas-Felix, S. Botello-Rionda. Structure optimization with a bio-inspired method. High Performance Computer Applications, Vol. 595, pp. 188-200, Springer. 2016.(preprint paper) (slides)

J. M. Vargas-Felix, S. Botello-Rionda. FEMT, an open source library and tools for solving large sparse systems of equations in parallel. ISUM 2013 (paper) (slides)

J. M. Vargas-Felix, S. Botello-Rionda. Solution of Finite Element Problems Using hybrid Parallelization with MPI and OpenMP. ISUM 2012 (paper) (slides)

J. M. Vargas-Felix, S. Botello-Rionda. Comparison of solution strategies for structure deformation using hybrid OpenMP-MPI methods. ISUM 2011 (paper) (slides)

J. M. Vargas-Felix, S. Botello-Rionda. Parallel direct solvers for finite element problems. Comunicaciones del CIMAT, 2010 (paper)


Parallel numerical linear algebra for sparse systems (Álgebra lineal numérica en paralelo para sistemas de ecuaciones con matrices dispersas)

These are the slides for the course that I have been teaching for the last years, it covers the basics for solving large sparse systems of equations using parallel technologies (OpenMP and MPI).

Éstas son las presentaciones para el clurso que he dado los últimos años, cubren lo básico para resolver grandes systemas de ecuaciones dispersos utilizando cómputo en paralelo (usando OpenMP y MPI).

Optimización de código slides, code

Arquitectura de procesadores modermos

Programación eficiente aprovechando el cache

Organización de la memoria en C/C++

Directivas de compilación para optimización

Branch prediction

Matrices dispersas/ralas slides, code, ejemplos

Tipos de matrices dispersas

Costos de almacenamiento y operación

Sistemas de ecuaciones con matrices dispersas

Estructura de matrices dispersas al modelar ecuaciones diferenciales parciales

Compressed Row/Column Storage

Almacenamiento de de matrices dispersas en formato MatLab

Multiplicación matriz-vector con matrices dispersas

Optimización de código 2 slides, code

Debug vs. release

Consideraciones para HPC

Comprobación en modo debug

El macro assert

El macro NDEBUG

Makefiles para debug y release

Optimizacion de código 3 slides, code

Sobrecarga de operadores

Ejemplo de clase Vector

Implementación de operadores + * =

Costo en tiempo y memoria

Gradiente conjugado slides, code

Algoritmo de gradiente conjugado

Número de condición

Precondicionamiento

Precondicionador Jacobi

Algoritmo de sumación de Kahan

Cómputo en paralelo con OpenMP 1 slides, code

Paralelización con OpenMP

Operaciones matemáticas en paralelo

El esquema OpenMP

Programación con threads

Paralelización con OpenMP

Reducciones

Paralelización de secciones de código

Paralelización de la multiplicación matriz-vector

Speed-up

Cómputo en paralelo con OpenMP 2 slides, code

Variables private y shared

Modificación del scheduling

Secciones críticas

Operaciones atómicas

Procesadores multi-core con memoria compartida

El cache con multi-core

False-sharing

Alineamiento de memoria

Thread safe

Ley de Amdahl

NUMA, non-uniform memory access

Gradiente conjugado con OpenMP

Factorización Cholesky simbólica slides, ejemplos

Factorización Cholesky

Factorización Cholesky simbólica

Matrices ralas como grafos no dirigidos

Adyacencia y grado

Factorización simbólica vista en grafos

Llenado de la factorización

Paralelización con OpenMP

Sustituciones hacia adelante y hacia atrás

Reordenamiento para la factorización Cholesky slides, code

Reordenamiento de renglones y columnas

Matrices de permutación

Matrices ralas como grafos no dirigidos

Algoritmo de grado mínimo

Algoritmo de bisección anidada

Uso de la librería METIS

Precondicionamiento con factorizacion incompleta slides

Factorización Cholesky incompleta truncada

Gradiente conjugado con precondicionador Cholesky incompleto

Algoritmo de Munksgaard

Gradiente biconjugado slides

Gradiente biconjugado sin precondicionar

Gradiente biconjugado precondicionado

Gradiente biconjugado con precondicionador LU incompleto

Factorización LU incompleta

Precondicionamiento con inversa aproximada slides, ejemplos

Inversa aproximada dispersa

Inversa aproximada dispersa factorizada

Gradiente conjugado con precondicionador inversa aproximada

Cómputo en paralelo con MPI slides, code

Clusters Beowulf

Paralelización con memoria distribuida

Descripción de la librería MPI

"Hola mundo" con MPI

Comunicación con bloqueo

Comunicación sin bloqueo

Como correr el programa en un cluster

Depuración de programas con MPI

Gradiente conjugado con MPI slides, code

Algoritmo básico

Algoritmo con reordenamiento

Particionamiento de matrices con METIS

Permutación del sistema de ecuaciones

Metodo de subestructuracion de Schur slides, code

Particionamiento de la matriz

Renumeración de los vértices

Complemento de Schur

Particionamiento de matrices con METIS

Búsqueda de fronteras

Implementación con MPI

Ejemplos con matrices grandes

Extra: Método alternante de Schwarz slides

Extra: Colorización de elementos slides


Other slides

Numerical methods

Heuristics for Nested Dissection to Reduce Fill-in in Sparse Matrix Factorizations

Isogeometric Analysis

Robotics

Gap navigation

Translation and rotation in the plane

Visibility-based probabilistic roadmaps for motion planning

A motion planner for nonholonomic mobile robots

Optimal Rapidly-exploring Random Trees (RRT*)


Tutorials

Makefiles, bevísimo tutorial slides

GiD, bevísimo tutorial slides, problemtype, sample

How to debug MPI programs.


Master's thesis

Cálculo de Estructuras Utilizando Elemento Finito con Cómputo en Paralelo text

Nuestro trabajo trata sobre la solución numérica de problemas de deformación lineal de sólidos por medio del método de elementos finitos, estos problemas se resuelven utilizando estratégias de cómputo en paralelo. Hablamos sobre algunas formas de paralelizar los algoritmos, tanto utilizando modelos de memoria compartida como de memoria distribuída.

En particular nos centraremos en la descomposición de dominios usando el método alternante de Schwarz para resolver problemas de elemento finito con mallas muy refinadas. El método alternante de Schwarz se refiere a particionar el dominio del problema de tal forma que haya traslape en las fronteras comunes de las particiones. Cada partición se resuelve como un problema independiente, después se intercambian valores en las fronteras con las particiones adyacentes. Este proceso se repite de forma iterativa hasta la convergencia global del problema. Hablaremos de la paralelización utilizando dos tipos de algoritmos para resolver los sistemas de ecuaciones resultantes: gradiente conjugado y factorización Cholesky.

En cuanto a la factorización Cholesky, explicaremos varias estratégias para hacerla más eficiente, como son: almacenamiento utilizando esquemas de matrices ralas, factorización Cholesky simbólica para determinar la estructura de la matriz antes de calcular sus entradas y el reordenamiento de la matiz de rigidez para obtener una factorización más económica.

Se describe en esta tesis la implementación de un programa de cómputo que utiiliza la descomposición de Schwarz para resolver problemas de deformación de sólidos en dos y tres dimensiones. Este programa fue implementado para funcionar en un cluster de computo con el objetivo de resolver problemas de gran escala en forma eficiente. Finalmente mostraremos algunas gráficas de tiempos obtenidas al resolver sistemas de ecuaciones con decenas de millones de variables.

Palabras clave: Ecuaciones diferenciales parciales, descomposición de dominios, álgebra lineal, cómputo en paralelo, método de elemento finito, método alternante de Schwarz.

Asesor de tesis: Dr. Salvador Botello Rionda (CIMAT)


Structural Calculus Using The Finite Element Method with Parallel Computing

This work is about the numerical solution of linear deformation of solids using the finite element method, this problems are solved using parallel computing strategies. We will talk of several ways to paralllize the algorithms applying shared and distributed memory schemas.

In particular we will work with domain decomposition using the alternating Schwarz method to solve finite element problems with very fine discretized meshes. The Schwarz method refers to partition the problem domain with overlapping among partitions. Each partition is solved as an independent problem, then boundary values are interchanged with neighbour partitions. This process is repeated iteratively until global convergence. We will talk about the parallelization using two kinds of solver algorithms to solve the resulting systems of equations: conjugate gradient and Cholesky factorization. We will explain several strategies to improve the Cholesky factorization, as the usage of storage schemas for sparse matrices, symbolic Cholesky factorization to determine the structure of the factor matrix before entries calculation, and the matrix reordering to get a reduced fill-in.

In this theses we describe the implementation of a computer program that uses the Schwarz domain decomposition to solve problemas of solid deformation in two and three dimensions. This program was implemented in a cluster of computers with the goal of solving large systems in an efficient way. Finally we will show some charts with the time used to solve systems of equations with tens of millions equations, and a particular example with one hundred million equations.

The project was developed in C++, running in a GNU/Linux cluster. The parallel processing was made using OpenMP and distributed processing was managed by using the MPI (Message Passing Interface) standard.

Thesis advisor: Ph.D. Salvador Botello Rionda (CIMAT)


Animations

Pre and post-processing was made with GiD, number crunching was made with in-house software using FEMT.

Gelatin simulation using finite element method, different forces are applied to make the gelatin move.


Simulation of a 18 wheels 36 metric tons truck crossing the Infante D. Henrique Bridge.


Heat difussion in a heatsink. Video edition by Ivan Munguia.


Heat diffusion in a mug made of ceramic and filled with water.


This is an example of a mesh divided using the nested dissection method.


This is an example of a mesh divided using the nested dissection method.


Structure optimization of a bridge. Optimization was done using a cellular automaton.


Structure optimization of an bridge (Von Mises). Optimization was done using a cellular automaton.


Structure optimization of an arc (fail). Optimization was done using a cellular automaton.


Structure optimization of an arc (success). Optimization was done using a cellular automaton.



Contact

Jose Miguel Vargas-Felix
contact


Last modification: November 27th, 2015

web analytics
View My Stats