Saltar a contenido

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:

python scripts/export_aero_weights.py --model datasets/models/aero_v2.json

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:

python scripts/export_fortran_models.py --model datasets/models/atmos_v2.json

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:

cd applications/openfoam_cfd
wmake libso

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:

singularity build shardian_atmos.sif Singularity.def