Computación Científica

El objetivo principal es aplicar algunos de los conceptos y técnicas de la ingeniería de software al diseño y desarrollo de software de alta calidad en el contexto de la computación en aplicaciones de ciencia e ingeniería. Hasta el momento, la actividad desarrollada en esta línea de investigación se ha centrado en el desarrollo de librerías numéricas y el diseño de sistemas software complejos como combinación de componentes más sencillos. Concretamente, la experiencia acumulada en los últimos años está relacionada principalmente con el desarrollo de la librería SLEPc, y por tanto en el área de cálculo de valores propios de matrices dispersas de gran dimensión.

La complejidad presente en las aplicaciones de computación científica ha crecido mucho en los últimos años debido al incremento de la funcionalidad exigida por científicos e ingenieros que se plantean cada vez metas más avanzadas en sus investigaciones. En este sentido, el método de trabajo tradicional en estas disciplinas común en los primeros años, es decir, un equipo de científicos programando directamente en Fortran su modelo matemático, ya no es válido actualmente y es necesario por tanto plantear nuevas estrategias para tratar esta complejidad.
 
El desarrollo de la informática ha propiciado la aparición de metodologías para tratar la complejidad del software. Estas técnicas son de por sí complejas y requieren la intervención de informáticos expertos en desarrollo de software de calidad. Por tanto, el nuevo esquema de desarrollo de software científico va a involucrar equipos interdisciplinares en los cuales se incluyen informáticos. Otra alternativa, que suele ser más habitual, es la de tener equipos de informáticos que desarrollan software (por ejemplo en forma de librerías) de forma independiente, intentando que sea fácilmente utilizable por los científicos en sus programas.
 
La clave fundamental para poder gestionar la complejidad de las aplicaciones software es tratar adecuadamente la abstracción. Con esta palabra nos referimos a la capacidad de identificar conceptos e ideas que se manejan o están presentes en un proyecto informático. Una correcta gestión de la abstracción permite no sólo aclarar las ideas a la hora de diseñar el programa, sino que además facilita la colaboración de varios programadores en el mismo proyecto, posibilita la reutilización de código, facilita el mantenimiento del software a lo largo del ciclo de vida del proyecto, etc. Normalmente la abstracción se organiza en niveles, de forma que el programador se sitúa en un determinado nivel de abstracción, pudiendo utilizar conceptos pertenecientes a niveles inferiores pero sin necesidad de conocer los detalles de cómo están implementados.

La eficiencia es un factor muy importante. Tradicionalmente, la presión por la eficiencia ha tenido un fuerte impacto en la metodología de desarrollo del software numérico. Típicamente, muchas decisiones se fijan en el código y luego es muy difícil abstraerlas. Las estructuras de datos y los algoritmos están fuertemente interrelacionados. Es difícil adaptar a nuevos requerimientos una parte de un software que funciona y ha sido desarrollado a lo largo de varios años. La posibilidad de reutilización es una característica muy deseable. Las tecnologías orientadas a objetos han demostrado ser beneficiosas en el ámbito comercial, potenciando la portabilidad y la reutilización.

Desde 2000, el grupo viene desarrollando la librería SLEPc para el cálculo paralelo de valores y vectores propios de matrices dispersas de gran dimensión. Esta librería está orientada a objetos y persigue alcanzar los objetivos de portabilidad, eficiencia e interoperabilidad. Actualmente está siendo utilizada por gran número de investigadores en ámbitos tan diversos como la ciencia de materiales, física de plasma, dinámica de fluidos y muchos otros.

(*) busca en el contenido de los elementos más significativos (titulo, descripción, etc.)