Usando SOFA, la biblioteca de la IAU
Data de publicació, 27 de setembre de 2023
Standards Of Fundamental Astronomy (SOFA) es un una librería publicada periódicamente por la IAU que incluye las subrutinas en ANSI C y Fortran para movernos a lo largo de la cadena de transformaciones astrométricas.
SOFA está muy bien documentada y es una excelente fuente de información sobre los cálculos y modelos utilizados. Sin embargo, para ser usada primero debe ser compilada por el usuario según el sistema operativo que use, lo que puede ser complicado si no tenemos experiencia.
En este ejemplo, vamos a describir paso a paso cómo bajar la versión en ANSI C, compilarla para Microsoft Windows y finalmente ejecutar un programa de demostración.
Instalación del compilador
Descargar el gestor de paquetes de MinGW, mingw-get-setup.exe desde https://sourceforge.net/projects/mingw/ e instalar.
Se abrirá una selección de paquetes. Marcamos para instalación mingw32-base, que incluye el compilador C, y aplicamos los cambios.
Al acabar la instalación, habrá aparecido C:\mingw.
Para permitir la ejecución de sus ejecutables presentes en la carpeta C:\mingw\bin sin necesidad de escribir la ruta entera, vamos en Windows a Configuración → Sistema → Acerca de → Configuración avanzada del sistema → Opciones avanzadas → Variables de entorno → Variables del sistema → Path → Editar, y añadimos C:\mingw\bin.
Instalación de la librería SOFA
Descargar la librería desde https://www.iausofa.org/current_C.html#Downloads en formato zip. Al descomprimir el archivo, aparecen varios niveles. Creamos la carpeta C:/sofa y le añadimos únicamente la carpeta /src que viene en el zip con los archivos fuente, los únicos que nos interesan. Eliminamos el resto si queremos. Como referencia, en la versión 20231011 para ANSI C que vamos a usar aquí, esta carpeta contiene 248 archivos del tipo .c, 2 archivos del tipo .h, y el archivo makefile. No usaremos el archivo makefile suministrado porque esta diseñado para Linux y no merece la pena perder el tiempo en adaptarlo a Windows. Tampoco usaremos t_sofa_c.c, que se incluye para comprobar todas las demás funciones, por lo que no es necesario compilarlo. Además, al tener más de 10.000 líneas puede darnos problemas.
En lugar de usar makefile, abrimos un símbolo del sistema con cmd, nos desplazamos a C:\sofa\src y escribimos un comando para compilar cada archivo fuente .c en archivo objeto .o, con las opciones de optimización -O2, advertencias -Wall y generación de código de posición independiente -fPIC.
for %f in (*.c) do gcc -O2 -Wall -fPIC -c "%f" -o "%~nf.o"
Después de un rato, se habrán generado 247 archivos tipo .o.
Creamos la biblioteca estática libsofa.a a partir de todos los archivos objeto en el directorio escribiendo el comando:
ar rcs libsofa.a *.o
Creación de un archivo ejecutable de ejemplo.
Copiamos el texto del programa de demostración proporcionado por la propia IAU en un archivo de texto al que llamamos por ejemplo sofademo con la extensión .c.
Compilamos sofademo.c enlazando con la biblioteca libsofa.a y creando un archivo ejecutable llamado sofademo.exe. La opción -IC:\sofa\src especifica el directorio que contiene los archivos de encabezado de la biblioteca SOFA, y la opción -LC:\sofa\src especifica el directorio que contiene la biblioteca libsofa.a. Para ello, escribimos el comando:
gcc -o sofademo.exe sofademo.c -IC:\sofa\src -LC:\sofa\src -lsofa
Ejecutamos sofademo.exe. Si las bibliotecas están bien instaladas, obtenemos esta salida:
C:\>sofademo
ICRS, epoch J2000.0: 14 34 16.8118300 -12 31 10.396500
catalog -> astrometric: 14 34 16.4960283 -12 31 02.523786
astrometric -> CIRS: 14 34 20.2370587 -12 34 36.381654
catalog -> CIRS: 14 34 20.2370587 -12 34 36.381654
geocentric apparent: 14 35 01.7725802 -12 34 36.381654
CIRS -> topocentric: 14 34 20.2570287 -12 34 36.141207
CIRS -> observed: 14 34 16.9649101 -12 34 44.643091
ICRS -> observed: 14 34 16.9649106 -12 34 44.643094
ICRS -> CIRS (JPL, IERS): 14 34 20.2370639 -12 34 36.381756
ICRS -> CIRS (+ planets): 14 34 20.2370658 -12 34 36.381784
CIRS -> astrometric: 14 34 16.4960283 -12 31 02.523786
¡Enhorabuena, ya puedes usar sofademo.c como modelo para tus propios desarrollos!