El
código
computacional CACTUS que se utilizara para este proyecto se
comenzó a desarrollar en 1997 en el Instituto Albert
Einstein,
Instituto Max Planck para física gravitacional, en Potsdam,
Alemania. Este código surgió como una respuesta al
grave
problema del mantenimiento de un código de computación
complejo en cuyo desarrollo están involucradas decenas de
personas. En el pasado, este tipo de códigos eran
difíciles de mantener en una forma unificada y consistente,
debido a que rápidamente surgían muchas versiones
incompatibles a medida que diversos investigadores, trabajando muchas
veces en distintos lugares del mundo, adaptaban el código a sus
propias necesidades. Cactus surgió como un modelo alternativo,
teniendo una estructura altamente modular, con un núcleo central
desarrollado de manera centralizada por un número pequeño
de personas y que contiene la infraestructura computacional
básica (la ``pulpa'' del cactus) que se encarga de la
paralelización, el manejo de la memoria, el control de
parámetros, y la salida de datos a disco, entre otras cosas. Hay
además una interfase claramente estructurada para añadir
subrutinas que permitan estudiar problemas particulares (las "espinas"
del cactus) que pueden programarse tanto en C como en FORTRAN (77 o
90). Cactus corre de forma transparente en muchas arquitecturas
computacionales distintas, desde PC's usando Windows, Linux o Mac OS,
hasta las más grandes supercomputadoras Cray, SGI, Hitachi, etc.
El código esta paralelizado utilizando el protocolo MPI, y
utilizando un modelo de descomposición de dominios. Esto permite
que los investigadores desarrollen el código en sus
máquinas locales (laptops incluso), y una vez habiendo
terminado, puedan correrlo inmediatamente en las mayores
supercomputadoras a que tengan acceso. El desempeño paralelo del
código escala muy bien hasta vaRíos cientos de
procesadores. Cactus incluye también interfaces para el control
remoto de parámetros a través de servidores de web,
así como visualización remota en tiempo real de los datos
de una simulación mientras esta corre.
Originalmente un código para la relatividad numérica,
Cactus ha sido adoptado no solo por grupos que estudian la relatividad
numérica en diversos lugares del mundo, sino también por
grupos en otras disciplinas. Cactus esta adaptado al estudio de
sistemas físicos descritos por ecuaciones de campo que
evolucionan en el tiempo, es decir, ecuaciones en diferenciales
parciales en varias (preferentemente tres) dimensiones de espacio y en
el tiempo. Este tipo de sistemas incluyen, por ejemplo, la
ecuación de onda, las ecuaciones de la hidrodinámica, las
ecuaciones electromagnéticas de Maxwell, y desde luego las
ecuaciones del campo gravitacional de Einstein. El código esta
diseñado utilizando como modelo las aproximaciones en
diferencias finitas, y esta adaptado preferentemente (aunque no
exclusivamente) al uso de algoritmos explícitos de
integración. El código utiliza coordenadas cartesianas en
tres dimensiones, y de momento esta limitado al uso de una sola malla
(paralelizada), es decir, no incluye refinamiento adaptativo de mallas.
En el caso particular de la relatividad, Cactus incluye ya rutinas
especializadas para resolver las ecuaciones de valores iniciales,
así como las ecuaciones de evolución de Einstein. Incluye
también opciones para diversas condiciones de norma, y
subrutinas para detectar la formación de horizontes de eventos
(es decir, de agujeros negros), y para detectar la emisión de
ondas gravitacionales.
En cuanto a sus demandas computacionales, el código fuente ocupa
aproximadamente 100~MB de memoria en disco, y el ejecutable ocupa
aproximadamente 10~MB de memoria (el tamaño exacto depende del
número de "espinas"
que se utilicen). La demanda de memoria RAM
durante una simulación depende del tamaño del problema
específico, y puede ir desde unas decenas de MegaBytes para
simulaciones pequeñas, hasta decenas de GigaBytes para
simulaciones grandes.
|