====== Listato Maxima ====== Ci si propone ora di implementare le nozioni teoriche precedenti in un codice Maxima.\\ Stabiliamo innanzitutto le condizioni di **caricamento a remoto** (far field). Imponiamo una trazione uniforme, lungo x facendo riferimento al sistema di coordinate cartesiane iniziale (vedi teoria). {{ :playground:1.png?400 |}} dove ''sxx_ff'',''syy_ff'' e ''sxy_ff'' sono le tensioni normali e tangenziali a remoto in coordinate cartesiane. É possibile estendere la trattazione anche ad altri caricamenti a remoto, come ad esempio: {{ :playground:2.png?400 |}} Avendo imposto le condizioni di far field in coordinate cartesiane, operiamo un cambio di coordinate al fine di esprimere le tensioni in coordinate polari, coerentemente con la teoria. {{ :playground:3.png?400 |}} Le relazioni fra le tensioni nei due sistemi di riferimento sono date dalle relazioni seguenti(pag. 8-9 Barber). {{ :playground:4.png?600 |}} {{ :playground:5.png?600 |}} {{ :playground:6.png?600 |}} Dove ''srr_ff'', ''stt_ff'' e ''srt_ff'' sono rispettivamente le tensioni radiale, circonferenziale e tangenziale a remoto nel nuovo sistema di riferimento. Nel caso specifico valgono: {{ :playground:7.png?500 |}} Prima di comporre la Airy Stress Function si nota che in tabella di pag. 119 del Barber non compaiono le componenti tensionali in forma $ cos^2(θ) $ e $ sen^2(θ) $ mentre compaiono termini del tipo $ cos(nθ) $ e $ sen(nθ) $. Pensiamo quindi di eseguire uno sviluppo in serie di Fourier (che risulta in forma esatta essendo applicato a funzioni armoniche) in modo da ottenere funzioni trigonometriche in $ nθ $, da cui risalirò al rispettivo termine di Mitchell. Questa operazione viene eseguita mediante la funzione ''trigreduce()'': {{ :playground:8.png?1000 |}} Creiamo ora una lista contenente le appropriate soluzioni di Mitchell (vedi teoria) della Airy Stress Function ed una lista con i coefficienti incogniti della combinazione lineare: {{ :playground:9.png?600 |}} {{ :playground:10.png?600 |}} Definisco la Airy Stress Function (ASF) come combinazione lineare delle soluzioni di Mitchell: {{ :playground:11.png?600 |}} Ora che abbiamo l'espressione della ASF siamo in grado, mediante le relazioni apposite (pag.110 Barber), di ricavare le componenti di tensione:{{ :playground:12.png?600 |}} Imponendo le cinque condizioni al contorno discusse nella parte teorica otteniamo cinque equazioni che inseriamo poi nella lista ''eqns[]''. Risolvendo tale sistema si ricaveranno i coefficienti incogniti della combinazione lineare. {{ :playground:13.png?800 |}} Dobbiamo ora imporre che tali equazioni siano valide per ogni $ θ $: presa una singola equazione, si nota che ciò accade se si ottiene un'identità, ovvero se le singole somme algebriche che in ogni equazione moltiplicano i termini $ cos(2θ) $ e $ sen(2θ) $ siano nulle e allo stesso sia nulla la somma algebrica dei termini costanti.\\ Penso quindi, mediante un "trucco", di estrarre dalle equazioni tali somme algebriche tra i coefficienti $ Ai $ mediante l'uso della funzione ''augcoefmatrix()'' (link) specificando come incognite proprio $ cos(2θ) $ e $ sen(2θ) $, in modo da ottenere una matrice i cui termini siano composti da relazioni algebriche tra i coefficienti incogniti della ASF. {{ :playground:15.png?400 |}} Imponendo che ogni termine della matrice ottenuta debba essere nullo, otteniamo la validità per ogni $ θ $. Inseriamo in una nuova lista ''neweqns[]'' le equazioni ottenute costruendo un ciclo un ciclo iterativo e sfruttando la funzione ''append'' (link): {{ :playground:14.png?800 |}} Risolvendo questo sistema di equazioni si ricavano i singoli coefficienti, per far ciò utilizziamo il comando ''linsolve()''.\\ Si noti come Maxima elimina automaticamente equazioni linearmente dipendenti da altre. {{ :playground:16.png?400 |}} A questo punto è possibile portare sul grafico i risultati ottenuti, definendo le relazione da "plottare". Il comando usato in Maxima per la realizzazione del grafico è ''wxplot2d ()''. Le relazioni d'interesse sono 4: * //tensione circonferenziale vicino al foro// * //tensione circonferenziale di far field// * //tensione radiale di far field// * //tensione tangenziale di far field// {{ :playground:17.png?400 |}} All'interno del comando di disegno del grafico è opportuno definire il campo di estensione dell'asse delle ascisse, in particolare di //teta// (t), il quale come si vede è l'intervallo $ [-π ; π] $ che definisce l'intero angolo giro.\\ Un altro accorgimento può essere l'introduzione di una legenda con l'istruzione ''legend''. Infine viene definito il campo delle ordinate //y// tra i due valori (+-5.....). Il grafico che si ottiene è quello riportato di seguito: {{ :playground:15plot.png?600 |}} ===== Considerazioni Finali ===== Come si può notare dal grafico si è ottenuto uno stato tensionale simmetrico (coerente, data la simmetria della struttura e del caricamento) che presenta due zone circonferenzialmente trattive e due compressive a bordo foro. Nelle zone trattive il valore tensionale massimo è all'intersezione tra asse y e bordo foro e vale circa 3 MPa in linea con quanto ci si aspettava: il valore del fattore di forma, ovvero il rapporto fra tensione nominale e teorica, in prossimità del bordo libero per un foro infinitesimo (si ricorda che stiamo studiando la struttura equivalente in cui il foro è sì di dimensioni finite, ma in una lastra infinita) è di 3 (vedi A. Strozzi - Costruzione di Macchine, pag. 315).\\ **NOTA CONCLUSIVA**: Nella definizione delle funzioni si è usato il comando ''define ()'' e non '':='' in quanto la valutazione della funzione doveva essere fatta immediatamente all'atto della definizione e non all'atto dell'introduzione degli argomenti specifici, come si può notare dalla figura sottostante. {{ :playground:19.png?400 |}} Per ulteriori chiarimenti riguardo le differenze tra i due metodi di definizione delle funzioni, si allega il link che fa riferimento alla questione: [[https://cdm.ing.unimo.it/dokuwiki/wikipaom2017/020.090.000]]