Hacer evolucionar códigos de simulación
Añadir nuevas físicas, condiciones de contorno, leyes de materiales, lógicas de acoplamiento o clases de problemas sin fragilizar el código existente.
SOFTWARE CIENTÍFICO
Conectamos ciencia, matemáticas, física y desarrollo de software para crear sistemas de simulación fiables en condiciones reales.
El desarrollo de software científico transforma modelos matemáticos y físicos en herramientas que los equipos de ingeniería pueden ejecutar, verificar, ampliar y usar a diario. No consiste solo en poner código alrededor de una ecuación: también hay que pensar el método numérico, las estructuras de datos, el comportamiento de los solvers, el acoplamiento entre físicas, la ejecución paralela y la validación de los resultados.
En códigos multifísicos a gran escala, pequeñas decisiones de implementación pueden alterar el rendimiento, la estabilidad o incluso el resultado. Un buen software científico hace explícita la ciencia y, al mismo tiempo, mantiene el sistema lo bastante claro como para evolucionar.
Añadir nuevas físicas, condiciones de contorno, leyes de materiales, lógicas de acoplamiento o clases de problemas sin fragilizar el código existente.
Convertir un modelo de investigación en un flujo de trabajo para estudios de diseño, decisiones operativas, bucles de optimización o análisis de sensibilidad.
Construir pruebas de regresión, casos de verificación, controles de validación y benchmarks reproducibles alrededor de hipótesis científicas.
Analizar movimientos de memoria, escalabilidad paralela, coste de los solvers, I/O y organización de datos para hacer más predecible el trabajo HPC.
Refactorizar código Fortran, C, C++, Python o mixto conservando el comportamiento numérico y los flujos de trabajo de los usuarios.
Crear herramientas para generar entradas, gestionar mallas, postprocesar resultados, ejecutar estudios de incertidumbre, conducir campañas y preparar informes.
Intervenimos cuando el problema no puede separarse limpiamente entre "ciencia" por un lado y "software" por el otro. Podemos trabajar desde el modelo hasta el código, o incorporarnos a una base existente para desbloquear las partes que frenan el avance.
Traducir ecuaciones, algoritmos e hipótesis físicas en planes de implementación robustos y código de producción probado.
Trabajar en el acoplamiento entre dominios, solvers, mallas, campos y escalas temporales en grandes sistemas de simulación de ingeniería.
Aclarar arquitecturas existentes, eliminar rutas frágiles, mejorar sistemas de build y hacer más seguro modificar código científico.
Implantar pruebas, casos de referencia, integración continua y procedimientos de validación que detecten pronto regresiones numéricas y de software.
Analizar, reestructurar y optimizar cálculo, comunicación e I/O para entornos HPC y grandes campañas de simulación.
Desarrollar herramientas que ayuden a los equipos a lanzar estudios, comparar resultados, automatizar escenarios y usar simulaciones en sus decisiones.
Este trabajo es pertinente para equipos que necesitan convertir un modelo científico o de ingeniería en software fiable: laboratorios de investigación, grupos industriales, equipos de simulación, startups técnicas e instituciones públicas con sistemas computacionales complejos.
También lo es para bases de código maduras que ya son importantes. En esos casos, a menudo hay que preservar la ciencia validada mientras se mejoran la arquitectura, el rendimiento, las pruebas y la capacidad de añadir nuevas funcionalidades.