Aggiungere LEM a CANTERA — un rito di passaggio da ingegnere ricercatore
Come un Linear Eddy Model è entrato nella libreria open-source CANTERA — tra C++, Fortran e Python — e cosa mi ha insegnato sul rilasciare codice nelle codebase altrui.
CANTERA è la libreria di termodinamica-chimica a cui molti ricercatori della combustione si affidano. È ben ingegnerizzata, decennale, multi-linguaggio — e largamente scritta da persone che non incontrerai mai. Aggiungere un Linear Eddy Model come closure di sub-griglia sembrava sulla carta scrivere un sub-modello. In pratica è stato un esercizio di sei mesi nel rispettare una codebase.
L'idea LEM è semplice: in un flusso reattivo turbolento, i vortici che dominano la chimica avvengono a scale più piccole di qualsiasi LES pratica. Embeddi un solver 1D sub-griglia in ogni cella LES, lo avanzi in lock-step, e ne fai tornare le statistiche alla LES. Una closure che cattura la chimica di piccola scala senza risolverla.
Scrivere il kernel LEM era la parte rapida. Dieci settimane di C++, con gli integratori Fortran wrappati F2C e i binding Python in cima. La parte lenta era far accettare gli stessi formati che CANTERA già accettava. Far interoperare con i kernel di chimica scritti sei anni prima da qualcun altro. I test di regressione che nessuno aggiornava da due release.
La regola che ho imparato a fatica: prima di aprire una pull request a un progetto open-source, leggine cento già mergiate. Leggi cosa i maintainer chiedono. Leggi quali convenzioni rifiutano. I maintainer non fanno gatekeeping per cattiveria — proteggono vent'anni di stabilità accumulata contro il contributore nuovo che sa il modello ma non la codebase.
Le aggiunte LEM hanno prodotto una pipeline PDF/SDR per un bruciatore Bunsen a metano premiscelato. Il paper è arrivato due anni dopo. La meta-lezione: il kernel LEM più pulito del mondo non vale niente se non si incastra nel tooling esistente. Lo stesso vale in Dekali (l'AI vive dove vive il workflow) e in Extrema (il chatbot risponde nella UI dove il cliente è già). Gli istinti di ingegnere-ricercatore traslano sorprendentemente bene a quelli di ingegnere industriale.