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

Drag to resize

Response not available

Drag to resize

Response not available

Drag to resize
Drag to resize
Drag to resize