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