Generación de Código y Compilación
Para garantizar el máximo rendimiento sin sobrecarga en tiempo de ejecución, Shardian compila las expresiones simbólicas resultantes de la IA directamente en el código fuente de los solvedores. Esta página detalla el funcionamiento de los scripts generadores y los comandos de compilación.
1. Flujo de Trabajo del Generador de Código
Cuando el motor de búsqueda en eml-sr-core descubre un nuevo modelo de corrección física con mayor precisión, exporta el árbol matemático a un archivo JSON estructurado. Los scripts generadores leen este JSON y sobrescriben de manera estática las ecuaciones en el código fuente C++ (OpenFOAM) y Fortran (WRF).
graph TD
JSON["model_weights.json"] -->|export_aero_weights.py| CPP["AdvancedZonalModel.C"]
JSON -->|export_fortran_models.py| F90["module_bl_eml_sr.F"]
CPP -->|wmake libso| SO["libShardianAero.so"]
F90 -->|./compile em_real| SIF["shardian_atmos.sif"]
2. Exportación de Pesos de los Modelos
Los desarrolladores utilizan dos utilidades ubicadas en el directorio scripts/ para actualizar los solucionadores:
A. Generador de Código para Shardian Aero (C++)
Ejecuta export_aero_weights.py para inyectar el modelo simbólico en el código OpenFOAM:
El script analiza la representación en árbol del JSON y reemplaza el bloque de ecuaciones en applications/openfoam_cfd/AdvancedZonalModel/AdvancedZonalModel.C:
// GENERATED BY export_aero_weights.py - DO NOT EDIT MANUALLY
scalar f_IA = min(3.0, max(0.1, (0.09 * Re_y) / (1.0 + 0.05 * sqr(S_star) * sqrt(Omega_star))));
B. Generador de Código para Shardian Atmos (Fortran)
Ejecuta export_fortran_models.py para inyectar el modelo en el esquema de capa límite de WRF:
Esto genera el bloque aritmético anidado correspondiente en applications/wrf/phys/module_bl_eml_sr.F adaptado a la sintaxis de Fortran:
! GENERATED BY export_fortran_models.py - DO NOT EDIT MANUALLY
kB_inv = (Re_star**0.45 * VEGFRA) / (1.0 + 0.23 * Re_star**0.15)
3. Compilación de los Solucionadores
Tras inyectar los modelos, compila los binarios según corresponda:
A. Compilar Shardian Aero (OpenFOAM)
Navega al directorio de OpenFOAM y ejecuta wmake:
El compilador generará la librería dinámica libShardianAero.so y la ubicará en la carpeta $FOAM_USER_LIBBIN del sistema.
B. Compilar Shardian Atmos (WRF)
Para recompilar WRF con el módulo de Shardian:
cd applications/wrf
./clean -a
./configure
# Selecciona la opción de compilador Intel/GNU con paralelización DM+SM (MPI+OpenMP)
./compile em_real
Una vez finalizada la compilación, reconstruye el contenedor de Singularity para empaquetar el binario resultante: