Aero-Bench
Prompt
# RUOLO Sei un ingegnere aerodinamico e sviluppatore scientifico. Devi costruire, validare e rendere interattivo un solver a pannelli per una configurazione **tandem deportante in effetto suolo** (ala principale + ala posteriore, tipica dei WIG/ekranoplan), in flusso incomprimibile 2D potenziale. # OBIETTIVO Un repository Python eseguibile che, dato un sistema di due profili NACA a 4 cifre vicino a un suolo piano, risolva l'equazione di Laplace con il **metodo di Hess-Smith** (pannelli con sorgenti a intensitĂ costante + vortice legato, condizione di Kutta al bordo d'uscita) e tratti il suolo con il **metodo delle immagini virtuali**. Sopra il solver, una **dashboard interattiva** che permetta di cambiare angolo d'attacco e distanza dal suolo (piĂč i parametri di tandem e di profilo) e vedere subito Cp, portanza e campi di flusso. # ARCHITETTURA RICHIESTA hess-smith-tandem/ README.md # derivazione, ipotesi, limiti, come si esegue pyproject.toml # python>=3.11, numpy, scipy, pandas, streamlit, plotly, pytest src/panel2d/ geometry.py # NACA 4 cifre, distribuzione coseno, discretizzazione influences.py # matrici di influenza sorgente/vortice (vettorizzate) images.py # sistema immagine rispetto al suolo solver.py # assemblaggio, Kutta, solve, circolazioni post.py # Cp, Cl (KJ + integrazione di pressione), Cm, streamlines tandem.py # configurazione a due corpi + suolo cases.py # casi di validazione dichiarativi app/dashboard.py # Streamlit validation/ data/*.csv # punti sperimentali con fonte, figura/tabella, incertezza run_validation.py # genera il report report.md # tabelle + figure, PASS/FAIL/BORDERLINE per caso tests/ # pytest reports/figures/ # output grafici salvati su disco # SPECIFICA FISICA E NUMERICA (vincolante) 1. Modello: Laplace âÂČÏ = 0, incomprimibile, 2D, irrotazionale, inviscido, stazionario. Vâ = (cos α, sin α). UnitĂ adimensionalizzate con corda e Vâ = 1. 2. Metodo di Hess-Smith: su ogni pannello una sorgente a intensitĂ costante Ï_i, piĂč **un solo vortice Îł_k per corpo** (Îł costante lungo il corpo). Incognite: {Ï_i} + {Îł_k}. Equazioni: N di non penetrazione (V·n = 0 al punto di controllo di ogni pannello reale) + una Kutta per corpo. 3. Kutta: imponi l'uguaglianza in modulo delle velocitĂ tangenziali sui due pannelli adiacenti al bordo d'uscita (V_t,1 = âV_t,N nella convenzione delle normali), cioĂš uscita fluida dal TE. Verifica a posteriori: Cp continuo attraverso il TE (entro 1e-3). 4. Geometria NACA 4 cifre: usa le formule standard (spessore con 0.2969âx â 0.1260x â 0.3516xÂČ + 0.2843xÂł â 0.1015xâŽ, opzione bordo d'uscita chiuso â0.1036; camber e sua derivata per la linea media con m, p). Discretizza con distribuzione **coseno** (addensamento a LE e TE). Rendi esplicito il numero di pannelli e la convenzione del TE. 5. Tandem: corpo 1 all'origine, corpo 2 posizionato con **stagger orizzontale, offset verticale e decalage**; corda, spessore e camber indipendenti per i due profili. Ogni corpo ha la propria circolazione e la propria Kutta. 6. Suolo con immagini: specchia **tutto** il sistema (pannelli di entrambi i corpi + vortici legati + eventuale scia) rispetto alla retta y = âh, con la stessa intensitĂ . Le immagini servono **solo** a soddisfare V·n = 0 sul suolo. La portanza si calcola **solo** sulla circolazione dei corpi reali: L = Ï Vâ Î_reale (Kutta-Joukowski). **Non contare due volte** le immagini: se il tuo Cl raddoppia rispetto al caso senza suolo, la formula Ăš sbagliata. 7. Scia: parti dalla versione minima (vortice legato + Kutta, nessuna scia estesa). Poi aggiungi la variante con **scia rettilinea a valle del TE** (sheet di vortici lungo +x, piĂč la sua immagine), necessaria perchĂ© il profilo posteriore senta correttamente il primo. Quantifica la differenza fra le due versioni e dichiarala nel report: Ăš un risultato, non un dettaglio. 8. Post-processing: Cp = 1 â (V_t/Vâ)ÂČ, Cl per Kutta-Joukowski **e** per integrazione di pressione (devono coincidere entro 0.5%), Cm rispetto a c/4, Cl di ciascun profilo. 9. Solver: matrice densa, `numpy.linalg.solve`, influenza vettorizzata (niente doppi cicli Python sui pannelli). Stampa il numero di condizionamento: se esplode, dillo. 10. Limiti da dichiarare in README e nella dashboard: inviscido â **Cd = 0**, nessuna separazione, nessun blocco; per h/c molto piccoli e α alti il potenziale non Ăš piĂč fisico. Non presentare un Cd del pannello come se fosse reale. # VALIDAZIONE (vincolante) Regole assolute: - **Nessun valore inventato.** Ogni punto sperimentale va in `validation/data/*.csv` con colonne: case_id, quantity, value, unit, source_id, figure_or_table, digitized (yes/no), uncertainty. - Ogni `source_id` ha DOI o URL, autore, anno, titolo, rivista/rapporto. Se la fonte Ăš a pagamento e non riesci a leggerla, marca il caso `pending` e scrivilo â non riempire con stime. - Se hai digitalizzato un punto dal grafico, dichiaralo (`digitized=yes`) con incertezza ±. - Ogni numero nel report deve essere riproducibile con un comando che incolli nell'output. Casi da coprire, con soglie: A. **Analitico, sulla macchina delle immagini.** Sorgente e vortice puntuali a quota h: verifica numerica che V·n = 0 sul suolo (|V·n| < 1e-10). Test unitari, non grafici. B. **Piastra piana / profilo sottile, h â â.** Cl â 2Ï Î± per α piccolo, entro 2% per t †0.06 e α †5°. Ă il test che dice se la Kutta Ăš implementata bene. C. **Profili NACA 0012 e 2412, h â â.** Confronto con i dati di sezione di Abbott, von Doenhoff, Stivers, *Summary of Airfoil Data*, NACA Report 824, 1945 (pubblico su NTRS). Cross-check indipendente con XFOIL e/o NeuralFoil sulla stessa geometria: devi riportare lo scostamento fra i due codici, non solo dal dato sperimentale. D. **Effetto suolo, profilo singolo.** NACA 4412: Ahmed, Takasaki, Kohama, *Aerodynamics of a NACA4412 Airfoil in Ground Effect*, AIAA Journal, 2007 (galleria a suolo mobile). NACA 5312: *NACA 5312 in Ground Effect â Wind Tunnel and Panel Code Studies*, AIAA 15th Applied Aerodynamics Conference, 1997. NACA 4412 viscoso: Hsiun & Chen, *Aerodynamic characteristics of a two-dimensional airfoil with ground effect*, Journal of Aircraft, 1996. E. **Tandem in effetto suolo.** Ahmed & Kohama, *Experimental Investigation on the Aerodynamic Characteristics of a Tandem Wing Configuration in Close Ground Proximity*, JSME International Journal Series B, 42(4), 1999, p. 612. Verifica il risultato fisico noto: il profilo posteriore **perde portanza** rispetto a quello isolato, e la perdita cresce riducendo lo stagger. Cerca anche dataset 2D recenti ad accesso aperto e, se trovati, aggiungili come casi extra. F. **Coerenza interna e convergenza.** - N = 60/120/240/480: |ÎCl| < 0.002 fra le ultime due risoluzioni. - Cl_pressione vs Cl_Kutta-Joukowski entro 0.5%. - ÎŁÏ_i â 0 per corpo chiuso (conservazione della massa), entro 1e-8. - NACA 0012 a α = 0: Cl = 0 entro 1e-10, e invariante al variare di h/c. - h/c = 100 contro h/c = â (nessun suolo): scostamento < 0.5%. Soglie di accettazione vs esperimento: entro **5% sul Cl** dove il flusso Ăš attaccato (α †8°, h/c â„ 0.2, NACA a 4 cifre con t †0.15). Fuori da queste condizioni il confronto va riportato comunque, ma etichettato come **diverge per separazione non modellata**, con il punto esatto in cui la curva si stacca dal dato. Un caso fuori soglia si scrive FAIL con la spiegazione: non si nasconde, non si allarga la tolleranza per farlo passare. # DASHBOARD INTERATTIVA (Streamlit + Plotly) Controlli: α (con slider continuo), h/c (scala log, da 0.05 a 20), cifre NACA dei due profili (m, p, t in input, con preset 0012/2412/4412), stagger / offset verticale / decalage, rapporto corde, N pannelli, toggle "suolo attivo (immagini)" e "scia estesa". Output: disegno della geometria con i profili specchiati e la traccia del suolo; campo di velocitĂ e linee di corrente; grafico Cp sui due profili; Cl vs α; Cl vs h/c (con i punti sperimentali dei casi D/E sovrapposti e cliccabili sulla fonte); tabella numerica (Î, Cl_1, Cl_2, Cm, Cl_p vs Cl_KJ, condizionamento); pulsante di export CSV di tutti i risultati. La dashboard deve poter rieseguire i casi di validazione e mostrarli a fianco delle curve calcolate. Test headless con `streamlit.testing.v1.AppTest`, non solo "a occhio nel browser". # QUALITĂ - `pytest -q` verde, con i test analitici di A, B, C, F. - Nessuna dipendenza pesante; tutto deve girare in locale in pochi secondi per N â 300. - Ogni figura citata nel report esiste come file in `reports/figures/`. - README che spiega la derivazione (riferimenti: Hess & Smith, *Calculation of Potential Flow About Arbitrary Bodies*, Progress in Aerospace Sciences 8, 1967; Katz & Plotkin, *Low-Speed Aerodynamics*, cap. 11) e â importante â elenca le ipotesi che invalidano il risultato. # CRITERI DI "FATTO" 1. `python validation/run_validation.py` gira e produce `validation/report.md` con tabelle PASS/FAIL/BORDERLINE per ogni caso AâF e le figure. 2. `streamlit run app/dashboard.py` mostra la configurazione tandem in effetto suolo e reagisce a un cambio di α e h/c. 3. `pytest -q` verde. 4. Nel report: per ogni caso, fonte citata + valore di riferimento + valore calcolato + scarto. 5. Elenco esplicito dei limiti e dei casi `pending` con la ragione. # COSA RESTITUIRE Path dei file creati, comandi eseguiti con **l'output reale incollato** (non descritto), il contenuto di `validation/report.md`, e una sezione "Rischi residui e divergenze" in cui elenchi dove il metodo non Ăš validato e cosa servirebbe per validarlo (strato limite, Navier-Stokes, dati di galleria diversi da quelli trovati). # REGOLE - Se una formula, un dato o un riferimento non lo trovi: dillo e fermati su quel punto. Non inventare numeri, DOI, pagine o risultati sperimentali. - Non dichiarare "validato" un caso che non supera le soglie. - Dichiara ogni semplificazione nel momento in cui la fai, non alla fine.
Response not available
Response not available
Response not available