Il log dice che il calcolo è finito
Il log finisce come vorresti che finisse un log. Il solutore ha raggiunto il tempo finale, i residui sono scesi e l’agente comunica che la simulazione è completata. In uno studio del 2026 che metteva alla prova agenti di programmazione su OpenFOAM, i ricercatori hanno guardato le mesh dietro calcoli come questo. In due dei quattro casi di flusso attorno a un ostacolo costruiti con uno dei modelli, la mesh non rappresentava l’ostacolo.
Si può simulare il flusso attorno a un cilindro senza il cilindro. Converge splendidamente.
Gli agenti di IA per la CFD oggi sanno prendere una frase di testo, scrivere un caso OpenFOAM, lanciarlo, leggere gli errori e correggerli, e sui compiti di riferimento la maggior parte di questi casi arriva in fondo. Quelli giusti sono meno. Questo articolo separa le due cose con i numeri degli stessi ricercatori, mostra gli errori che superano ogni controllo del log e propone una procedura di revisione per qualsiasi caso che un agente ti consegni. Non ho agenti da vendere e non ho nulla contro di loro. Vorrei solo che venissero controllati.
Che cosa fanno davvero questi agenti?
L’idea è la stessa in tutti i sistemi comparsi negli ultimi due anni. Un grande modello linguistico riceve la tua richiesta. Recupera tutorial e documentazione simili, scrive i file del caso, lancia il generatore di mesh e il solutore, legge il log e modifica i file quando qualcosa fallisce. Ripete finché il calcolo non si completa o finché non si arrende.
I sistemi noti differiscono nel modo in cui organizzano questo ciclo. Foam-Agent divide il lavoro tra più agenti, con un sistema di ricerca a livelli per le diverse parti di una simulazione, una generazione dei file che mantiene coerenti i dizionari tra loro e un ciclo di correzione pensato per risolvere i fallimenti senza intervento umano. ChatCFD aggiunge basi di conoscenza strutturate, un localizzatore di errori e un componente che scrive un riassunto fisico del risultato. Alcuni ricercatori hanno provato anche agenti di programmazione generici con una semplice istruzione orientata a OpenFOAM.
OpenFOAM è il bersaglio naturale. Un caso è una cartella di dizionari in testo semplice, il solutore si lancia da riga di comando e il log è testo. Un modello linguistico può leggere e scrivere ogni sua parte, cosa che non si può dire di un solutore guidato da un’interfaccia grafica.
Che cosa misurano i tassi di successo?
Qui conviene rallentare.
| Sistema | Insieme di compiti | Cifra dichiarata | Che cosa contava come successo |
|---|---|---|---|
| Foam-Agent (2025) | 110 compiti, definiti dagli autori | 83,6% con Claude 3.5 Sonnet | Un tasso di successo; l’abstract non lo definisce |
| ChatCFD (2025, rivisto nel 2026) | 315 casi, definiti dagli autori | 82,1% di esecuzione riuscita | Il calcolo arriva in fondo |
| ChatCFD, stesso articolo | Gli stessi 315 casi | 68,12% di fedeltà fisica | La misura degli autori del fatto che il risultato abbia senso scientifico |
| Foam-Agent, misurato dagli autori di ChatCFD | Gli stessi 315 casi | 42,3% di esecuzione riuscita | Il calcolo arriva in fondo |
| Un agente di programmazione generico (Xiao et al., 2026) | 9 compiti derivati da tutorial | 9 su 9 completati con un’istruzione personalizzata, 4 su 9 con quella predefinita | Arriva al tempo finale; 7 dei 9 avevano un errore quadratico medio normalizzato inferiore a 0,1 rispetto al riferimento |
Spiccano tre cose.
- Lo stesso strumento ottiene punteggi molto diversi su insiemi di compiti diversi. Foam-Agent dichiara l’83,6% sui compiti dei suoi autori e ottiene il 42,3% su quelli di ChatCFD. Nessuno dei due numeri è sbagliato. Misurano compiti diversi, e un tasso di successo dice poco finché non conosci i compiti.
- Arrivare in fondo ed essere giusti sono punteggi separati. Secondo i suoi stessi dati, ChatCFD ha l’82,1% di calcoli completati e il 68,12% di fedeltà fisica. Se ogni caso fedele è anche un caso completato, il che sembra probabile, allora circa un calcolo completato su sei non aveva senso fisico secondo la misura degli autori stessi. È un mio conto sui loro numeri, ed è la cifra più utile della tabella.
- Alcune misure controllano davvero la risposta. Le metriche riportate da Xiao e colleghi includono un errore rispetto a casi di riferimento, ed è per questo che l’ultima riga può dire quanto 7 dei 9 calcoli si siano avvicinati al riferimento, oltre a dire se sono arrivati in fondo. È il tipo di misura giusto. Ottenere un buon punteggio è più difficile, ed è per questo che bisogna sempre chiedere a quale tipo appartenga una cifra.
Perché gli errori difficili sono quelli silenziosi?
La valutazione del 2026 di Xiao e colleghi dell’Università di Pechino è l’articolo più franco di questo piccolo campo, e vale la pena leggerlo per i suoi fallimenti.
Sui casi simili ai tutorial, un agente con un’istruzione curata ha completato tutti i calcoli e si è avvicinato al riferimento nella maggior parte dei casi. Sui flussi piani attorno a ostacoli, dove la mesh andava costruita e non copiata, le cose sono cambiate. Con uno dei modelli, in due casi su quattro la mesh non rappresentava l’ostacolo. In un altro calcolo l’agente ha riusato la mesh di un tutorial senza aggiornare la geometria. Un modello più potente ha prodotto mesh migliori, e un tipo di mesh ha comunque richiesto ripetute indicazioni umane. In prove preliminari di combustione ad alta velocità l’agente non è riuscito a ottenere una configurazione stabile modificando i file in base al log.
Ciò che l’agente faceva bene era correggere gli errori che producono messaggi. Un’impostazione non supportata, una voce mancante, una parola chiave scritta male: il log nomina il problema e l’agente lo ripara. La conclusione degli autori è netta. Non rappresentare l’ostacolo nella mesh, o altri problemi di natura fisica, è difficile da cogliere per gli agenti, e la supervisione umana resta indispensabile.
Gli agenti sono quindi al meglio sugli errori che si annunciano e al peggio su quelli che tacciono. Per un ingegnere è esattamente il contrario di ciò che servirebbe, perché gli errori che si annunciano non sono mai stati quelli pericolosi. Un solutore che si blocca ti ha detto qualcosa. Un solutore che converge sulla geometria sbagliata non ti ha detto niente, in modo molto convincente.
Gli errori silenziosi, per famiglia
Queste sono le classi di errore che superano ogni controllo del log. Nessuna è specifica dell’IA; le persone le commettono tutte. La differenza è che un agente che copia dai tutorial le commette a grande velocità, e un agente che legge solo il log non ha modo di accorgersene.
- Geometria. Un elemento mancante o fuori posto, oppure una mesh scalata in millimetri quando i vertici erano scritti in metri.
- Unità. I solutori incomprimibili di OpenFOAM lavorano con la pressione cinematica, cioè la pressione divisa per la densità, in m²/s². Le forze richiedono allora una densità di riferimento che qualcuno deve fornire.
- Impostazioni ereditate. La viscosità, le grandezze turbolente, i profili di ingresso e il tempo finale del tutorial da cui è partito il caso, lasciati lì perché niente si è lamentato.
- Condizioni al contorno plausibili ma sbagliate per questo problema. Una funzione di parete su una mesh di cui nessuno ha controllato lo y+, o una condizione di gradiente nullo dove serviva un valore fisso.
- Un calcolo troppo corto. Un caso transitorio fermato prima che il flusso raggiungesse il regime periodico, e poi mediato.
Un esempio di calcolo: due errori che sembrano perfetti
Errore 1: il cilindro millimetrico. Prendiamo un caso di riferimento classico: il flusso attorno a un cilindro di 0,1 m di diametro in un canale, con una velocità media di ingresso di 1 m/s e una viscosità cinematica di 0,001 m²/s. Il numero di Reynolds è 100, e il flusso distacca vortici.
Supponi ora che l’agente parta da un tutorial il cui dizionario blockMesh scala tutti i vertici di 0,001, e che scriva i nuovi vertici in metri. Il cilindro ora ha un diametro di 0,1 mm.
È un flusso strisciante. Non c’è distacco di vortici, il solutore converge in fretta e senza scosse, e il grafico dei residui è il più bello della settimana. L’utilità checkMesh stampa il riquadro di ingombro del dominio, quindi basta un’occhiata al suo output per accorgersene. Un agente che legge il log non guarda mai lì, perché niente è andato storto.
Errore 2: forze più basse del 18% e coefficienti perfettamente giusti. In un caso OpenFOAM incomprimibile, il function object forces moltiplica la pressione cinematica per una densità di riferimento, rhoInf, per ottenere pascal e poi newton. Supponi che il fluido sia aria a 1,225 kg/m³ e che l’agente lasci rhoInf a 1, come in molti tutorial. Ogni forza risulta allora più bassa dello stesso fattore.
Il function object dei coefficienti di forza divide per ½ ρ U² A usando lo stesso rhoInf, quindi la densità si semplifica e il coefficiente di resistenza risulta corretto. Il grafico del coefficiente sembra perfetto, e la relazione che riporta la resistenza in newton è sbagliata. Mi piace questo esempio perché supera proprio il controllo che una persona attenta farebbe per primo, il confronto di C_D con un valore pubblicato.
Entrambe le serie di numeri sono illustrative. I meccanismi sono reali.
Un caso di prova con risposte note
Se il tuo team vuole valutare un agente, o un nuovo ingegnere, dagli un problema con un riferimento pubblicato. Il caso di riferimento DFG per il flusso laminare attorno a un cilindro, il caso 2D-2 di Schäfer e Turek (1996), è una buona scelta: bidimensionale, economico, transitorio e documentato fino a più cifre.
L’impostazione sulla pagina di riferimento FeatFlow è un canale lungo 2,2 m e alto 0,41 m, con un cilindro di raggio 0,05 m centrato in (0,2; 0,2). L’ingresso è parabolico con un massimo di 1,5 m/s e una media di 1,0 m/s, la viscosità cinematica è 0,001 m²/s e la densità 1, il che dà Re = 100 sul diametro. I valori di riferimento sulla mesh più fine sono:
| Grandezza | Valore di riferimento |
|---|---|
| Coefficiente di resistenza massimo | 3.2200 |
| Coefficiente di portanza massimo | 0.9859 |
| Numero di Strouhal | 0.30188 |
Chiedi all’agente il caso a partire da una descrizione in linguaggio comune, senza nominare il caso di riferimento, e confronta. Un numero di Strouhal vicino a 0,30 e un coefficiente di resistenza massimo vicino a 3,2 su una mesh ragionevole dicono che l’impostazione è sana. L’assenza totale di oscillazioni dice che manca qualcosa: il cilindro, il carattere transitorio, la risoluzione o il tempo finale.
Nota che il cilindro è leggermente spostato rispetto all’asse del canale, a 0,2 m in un canale alto 0,41 m. Lascialo lì. Un agente che «mette in ordine» la geometria in posizione simmetrica ha cambiato il caso di riferimento, e la sua risposta non è più confrontabile con il riferimento.
Come rivedrei un caso scritto da un agente
In quest’ordine. Quasi tutto richiede pochi minuti.
- Scrivi che cosa ti aspetti prima di aprire i risultati. Le grandezze che ti interessano e un intervallo approssimativo per ciascuna, da una stima a mano, una correlazione o uno studio precedente.
- Guarda la mesh prima del flusso. Lancia checkMesh, leggi il riquadro di ingombro e apri la geometria. Ogni elemento c’è, della dimensione giusta, nel posto giusto?
- Confronta il caso con il tutorial da cui deriva. L’agente ti dirà che cosa ha cambiato. Le righe pericolose sono quelle che non ha toccato: viscosità, dati di turbolenza, tempo finale, intervallo di scrittura, impostazioni dei function object.
- Controlla unità e valori di riferimento. Pressione cinematica o statica, rhoInf, la viscosità nel dizionario di trasporto e il numero di Reynolds calcolato a mano dai file del caso.
- Leggi ogni file delle condizioni al contorno, campo per campo, chiedendoti se descrive il problema fisico. Il log non può rispondere a questo.
- Controlla la convergenza e i bilanci. La massa che entra è uguale alla massa che esce, e così l’energia se viene risolta. L’articolo di questo blog sulla convergenza spiega che cosa dovrebbe significare «convergente».
- Confronta con qualcosa di indipendente. Un caso di riferimento, una correlazione, una misura o un caso precedente verificato. È la differenza tra verifica e validazione, spiegata in un articolo dedicato di questo blog.
- Se i numeri guideranno una decisione, verifica la mesh. Uno studio di indipendenza dalla mesh vale per la mesh di un agente esattamente come per la tua.
Richiede più tempo che scrivere l’istruzione. Molto meno che scrivere il caso.
Dove gli agenti di IA per la CFD aiutano oggi
Dove esiste già un caso verificato e l’agente ne cambia i parametri: una serie di velocità di ingresso, un insieme di varianti geometriche di un progetto validato, un gruppo di script di post-processing. Le decisioni pericolose sono state prese una volta, da una persona, e l’agente ripete quelle sicure.
Dove il lavoro è ripetitivo: dizionari dei function object, linee di campionamento, script che trasformano una cartella di risultati in una tabella.
Dove l’errore è rumoroso: un caso che non parte, un dizionario con un errore di sintassi, una voce di libreria mancante. Qui gli agenti pubblicati sono già bravi e fanno risparmiare tempo vero.
E nella didattica, con cautela. Uno studente che vede in un minuto un caso completo e funzionante capisce più in fretta la struttura di OpenFOAM. Allo stesso studente bisogna insegnare a diffidarne, e questa lezione vale più del caso.
Dove non li userei senza una revisione completa: fisica nuova, geometria industriale tridimensionale, flussi reattivi o multifase, e tutto ciò che non ha un riferimento con cui confrontarsi. La valutazione del 2026 indica i casi 3D e di rilevanza industriale come lavoro futuro, e le sue prove di combustione non si sono stabilizzate. Ecco a che punto è il campo quest’anno.
Che cosa chiederei prima di adottarne uno
Se qualcuno propone un agente di IA per l’impostazione dei calcoli CFD del tuo team, fai quattro domande.
- Quale metrica di successo c’è dietro la cifra? Un calcolo completato e un risultato vicino a un riferimento sono numeri diversi, a volte molto lontani.
- Sui casi di chi? Un insieme di varianti di tutorial dice poco sulla tua geometria.
- Che cosa controlla l’agente prima di dichiarare il successo? Se la risposta è il log, ora sai che cosa gli sfugge.
- Chi rivede il caso, e rispetto a che cosa? Se nessuno, l’agente produce incertezza molto veloce e molto ordinata.
In breve
Gli agenti per la CFD sono reali e migliorano in fretta. Correggono gli errori che stampano messaggi e mancano quelli che tacciono. Tratta il caso di un agente come tratteresti quello di un nuovo collega capace nella sua prima settimana: grato per il tempo risparmiato, e leggendo ogni file prima che qualcosa esca dall’azienda.
Se questo mese sei a una conferenza dove l’IA compare su ogni slide, fai al relatore una sola domanda: dei casi che sono arrivati in fondo, quanti erano giusti?
Per la domanda più ampia, cioè se i modelli addestrati sostituiranno la simulazione, leggi l’articolo «L’IA sostituirà la CFD?» di questo blog. Se hai un modello costruito da un agente o ereditato e vuoi farlo controllare file per file, è proprio a questo che serve una revisione del modello.
Fonti e approfondimenti
- Xiao, Zhang, Xu, Mao, Li and Chen (2026), arXiv 2602.11689: a preliminary assessment of coding agents for CFD workflows
- Yue, Somasekharan, Cao and Pan (2025), arXiv 2505.04997: Foam-Agent, towards automated intelligent CFD workflows
- Fan et al. (2025, revised 2026), arXiv 2506.02019: ChatCFD, an LLM-driven agent for end-to-end CFD automation
- FeatFlow, TU Dortmund: DFG flow around cylinder benchmark 2D-2, time-periodic case (Re = 100)
Servizio correlato
Revisione dei modelli e studi su misura
Capire quali conclusioni sono supportate dal modello, dove resta incertezza e cosa richiede verifica.
Scopri i servizi