-
.
Questo topic nasce da una richiesta fatta da un nuovo utente relativamente al calcolo delle tensioni nei vertici della sezione reagente della fondazione di una turbina eolica.
L'intenzione è quella di estendere la funzione che zax ha scritto per fondazioni rettangolari alle diverse forme di fondazione adottabili come fondazione di turbina eolica.
. -
.
Se ricordate, l'algoritmo SLE di soluzione di sezioni presso-tenso inflesse, nasceva per applicazioni ben più generali rispetto a queste 'bazzecole'.
Qui il link all'ancora incompleto "La teoria che mancava":
https://bar-ingegneria.forumfree.it/?t=68271630
Il metodo viene sviluppato nei post che iniziano con Parte 3 e Parte 4.
Quando abbiamo affrontato il problema genericamente per i 'plinti' li abbiamo pensati solamente rettangolari, e per quelli quindi abbiamo creato una funzione "specializzata" alla bisogna, di fatto togliendo generalità al metodo.
Questo il link dove andare a rileggere tutta la discussione:
Quattro passi sui quattro vertici
In definitiva quindi quello che si ripropone oggi afazio, non è altro che un passo indietro nella direzione intrapresa. Ma in definitiva non è affatto un passo verso l'ignoto, anzi.
Ed il passo è anche assai breve.
Ci basta andare a guardare dove il metodo 'generale' è stato 'specializzato' ed intervenire di conseguenza.
La funzione a suo tempo pubblicata aveva questa forma:CODICEstruct sezione determina_sezionereagente(float Bx,float By,float ex,float ey)
Ovvero accettava in input le dimensioni Bx e By del rettangolo della fondazione, le due eccentricità della risultante, e restituiva una struttura dati che alla fine delle elaborazioni contiene il numero dei vertici della sezione reagente (da un minimo di 3 ad un massimo di 5 per il caso in specie), le coordinate di questi vertici, ed anche la tripletta deformativa che consente di determinare le tensioni al di sotto di ognuno dei vertici reagenti.
E' ovvio che l'input della funzione dovrà essere differente, se non vogliamo avere a che fare solamente con fondazioni rettangolari.
Ma per il problema specifico le nostre forme dovrebbero essere solamente quelle giroscopiche, per la 'omnidirezionalità' delle sollecitazioni che derivano dal fusto della turbina.
Quindi si partirà dal triangolo equilatero, passando al quadrato, e via via dal pentagono all'esagono, all'ettagono, ottagono, e così via via al poligono regolare di n lati, fino, con n-->infinito, al cerchio.
La 'specializzazione' della funzione proposta nel topic "quattro passi" è tutta contenuta nelle primissime righe. Eccole:CODICE/* definisce le coordinate del baricentro del rettangolo */
xgs=Bx/2; ygs=By/2;
/* Per prima cosa riempie la struttura SezVera con i dati del rettangolo */
SezVera.numv=4;
SezVera.x[0]=0.0; SezVera.y[0]=0.0;
SezVera.x[1]=0.0; SezVera.y[1]=By;
SezVera.x[2]=Bx; SezVera.y[2]=By;
SezVera.x[3]=Bx; SezVera.y[3]=0.0;
Come vede la funzione non fa altro che 'riempire' una struttura dati "SezVera" con i dati del rettangolo che la funzione 'immagina' sia il suo input.
Orbene, se questa parte si sostituisce con un differente algoritmo di 'riempimento' dei dati ecco che la funzione continuerà lo stesso a funzionare.
Non vi è dubbio che anche qualche altro piccolo dettaglio va rivisto (vedo ad esempio la condizione su posizionamento all'interno della sezione del punto di applicazione della risultante), ma in definitiva basterà modificare l'input della funzione, e queste poche righe, perchè il tutto possa funzionare.
L'input della sezione potrà quindi modificarsi in due modi: vado ad inserire nella funzione i vertici già 'pronti' (perchè determinati prima) tramite la struttura dati SezVera (che diventa parametro di input della funzione), oppure andrò ad inserire 2 soli parametri di input, ad esempio numero dei lati del poligono e raggio del cerchio che inscrive/circoscrive il poligono stesso e sarà la funzione a determinare le coordinate dei vertici al suo interno.. -
.
Zax ha già inquadrato la soluzione del caso che propongo.
La forma delle fondazioni di turbine può solo essere un poligono regolare ad "n" vertici, quindi partendo dal triangolo equilatero, passando per quadrato, pentagono, esagono, ottagono (l'eptagono mi è antipatico al pari dell'ennagono), decagono e cosi via fino ad arrivare al cerchio.
Per l'input bastano quindi due soli dati che possono essere, in alternativa, i seguenti due gruppi di dati:
- dimensione del lato e numero di lati
- diametro del cerchio e numero di lati.
ed in quest'ultimo caso potremmo avere la differenziazione tra cerchio inscritto o circonscritto al poligono.
A differenza di quanto abbiamo fatto col rettangolo in cui abbiamo controllato a monte che le componenti dell'eccentricità erano inferiori alla meta della corrispondente dimensione del rettangolo, qui avremmo difficoltà a replicare lo stesso controllo, tuttavia ricordando che quel controllo era condotto solo per risparmiare inutili calcoli al processore, qui potremmo pensare di fregarcene, o in alternativa scrivere una funzione generica tipo PointInsidePolygon().. -
.
Come promesso in altro topic, ecco il foglio Excel con il codice della funzione utente per la determinazione della sezione reagente e delle tensioni nei vertici di questa:
Quattropassi01
Qui una immagine
. -
Aurelio Verde.
User deleted
Ok, ci sono. Visto che siamo in fase iniziale, suggerirei di calcolare le tensioni anche in quattro punti interni, punti corrispondenti alla base della torre o ad un sovrastante gradone. Ciò al fine di poter successivamente determinare le tensioni agenti al di sotto delle mensole del plinto di fondazione. Con le loro risultanti dunque, si potrebbero automaticamente determinare le sollecitazioni necessarie per il dimensionamento strutturale. Avremmo un codice completo, sia a livello geotecnico che strutturale. Ovviamente grazie per il primo foglio che hai postato. Stavo studiando proprio il Mdulo_Reagente da altra versione. . -
.Ok, ci sono. Visto che siamo in fase iniziale, suggerirei di calcolare le tensioni anche in quattro punti interni, punti corrispondenti alla base della torre o ad un sovrastante gradone. Ciò al fine di poter successivamente determinare le tensioni agenti al di sotto delle mensole del plinto di fondazione. Con le loro risultanti dunque, si potrebbero automaticamente determinare le sollecitazioni necessarie per il dimensionamento strutturale. Avremmo un codice completo, sia a livello geotecnico che strutturale. Ovviamente grazie per il primo foglio che hai postato. Stavo studiando proprio il Mdulo_Reagente da altra versione.
Su questo modo di procedere per la determinazione delle sollecitazioni sulla ciabatta io avrei dei dubbi. Ne parleremo.
Invece tengo a comunicare che purtroppo nella versione del codice che è contenuta nel file che ho qui pubblicato, non avevo ancora apporttao la correzione relativa al caso di eccentricità entrambe nulle.
Chi non volesse attendere la prosisma pubblicazione, deve apportare la modifica nella parte dicodice:CODICEIf (ex = 0# And ey = 0#) Then
SezReaG = SezVeRa
SezReaG.area = Bx * By 'Se servisse altro bisogna aggiungere altri dati
SezReaG.u(0) = 1#
SezReaG.u(1) = 0#
SezReaG.u(2) = 0#
determina_sezionereagente = SezReaG
Exit Function
End If
che si trova nella Function determina_sezionereagente
nel seguente codice:CODICEIf (ex = 0# And ey = 0#) Then
SezReaG = SezVeRa
SezReaG.area = Bx * By 'Se servisse altro bisogna aggiungere altri dati
SezReaG.u(0) = 1 / (Bx * By)
SezReaG.u(1) = 0#
SezReaG.u(2) = 0#
determina_sezionereagente = SezReaG
Exit Function
End If. -
.
Grande afazio (e zax
Magari il plinto agli 8 venti potrà diventare anche "tondo"
Diimenticavo: Aurelio Verde, come verifichi tu lo SLU EQU_?. -
.
Io personalmente opererei in questo modo:
Quindi gli input per la funzione sarebbero sempre 4. Numero lati del poligono e raggio (o forse meglio diametro) del cerchio inscritto, oltre alle solite eccentricità.
La funzione al suo interno determinerà le coordinate dei vertici del poligono con un semplice ciclo for, così:CODICEk=0;
for (alfa=0;alfa<=2*pi;alfa+=alfa_step)
{
SezVera.x[k]=r*sin(alfa);
SezVera.y[k]=r*cos(alfa);
k++;
}
Quindi il baricentro del poligono sarà anche origine delle coordinate, ed il primo punto del poligono 'giacerà' sull'asse delle Y.
Per quanto riguarda il controllo che l'eccentricità sia interna al poligono stesso, se non si vuol andare all'algoritmo generale, si potrà sfruttare un controllo a "doppio stato". Se il raggio vettore dell'eccentricità è superiore al raggio del cerchio che inscrive il poligono, non c'è storia, il punto è esterno. Se invece il raggio vettore è inferiore al cerchio circoscritto, il punto è certamente interno. Bisognerà invece fare un pò di geometria nei caso in cui il raggio vettore stia all'interno dell'anello.
Per quanto riguarda i valori che la funzione dovrà restituire......io con la mia funzione C, posso inserire nella struttura dati restituita tutto quel che voglio. Viceversa la funzione UDF potrà restituire una ed una sola variabile.
Con l'utilizzo accorto di un campo flag si potrà richiamare più volte la stessa funzione all'interno del foglio ottenendo i dati che interessano. Ma questo a scapito di una pletora di flag da dover ben documentare ed inoltre con una bella perdita di efficienza.
Io suggerisco che la funzione debba restituire la tripletta deformativa u, φx, φy, di modo tale che all'esterno si possano poi ricavare le tensioni al di sotto di ogni vertice, e le coordinate di pochi punti significativi della parte di sezione reagente. Ad esempio il punto di massima tensione, ed i due punti con tensione nulla, che 'segnerebbero' l'intersezione dell'asse neutro con la sezione iniziale.
Riguardo alle tensioni in un punto assolutamente generico, avuta la tripletta deformativa, sarà possibile ottenerle senza sforzo alcuno ma all'interno del foglio.. -
.Io personalmente opererei in questo modo:
Quindi gli input per la funzione sarebbero sempre 4. Numero lati del poligono e raggio (o forse meglio diametro) del cerchio inscritto, oltre alle solite eccentricità.
In questo modo perderemmol'altra possibilità di input data dalla coppia numero lati e dimensione lato.
Conviene pertanto incrementare di uno il numero dei parametri di input ed i successivi due essere condizionati dal primo.
Il primo parametro potrebbe esssere un valore 0 o 1
0 indica che i successivi parametri sono il numero dei lati e la dimensione del lato
1 indica che i successivi parametri sono il numero dei lati ed il diametro del cerchio circonscritto.CITAZIONELa funzione al suo interno determinerà le coordinate dei vertici del poligono con un semplice ciclo for, così:CODICEk=0;
for (alfa=0;alfa<=2*pi;alfa+=alfa_step)
{
SezVera.x[k]=r*sin(alfa);
SezVera.y[k]=r*cos(alfa);
k++;
}
Quindi il baricentro del poligono sarà anche origine delle coordinate, ed il primo punto del poligono 'giacerà' sull'asse delle Y.
Qui conviene srivere due funzioni, una per ciascuno dei due kit di dati di input.
Ma è poca cosa.CITAZIONEPer quanto riguarda il controllo che l'eccentricità sia interna al poligono stesso, se non si vuol andare all'algoritmo generale, si potrà sfruttare un controllo a "doppio stato". Se il raggio vettore dell'eccentricità è superiore al raggio del cerchio che inscrive il poligono, non c'è storia, il punto è esterno. Se invece il raggio vettore è inferiore al cerchio circoscritto, il punto è certamente interno. Bisognerà invece fare un pò di geometria nei caso in cui il raggio vettore stia all'interno dell'anello.
E perchè non una piu compatta funzione tipo quella che ho gia scritto negli algoritmi geometrici?
Hai le coordinate dei vertici del poligono. Le dai in input alla funzione ed il gioco è fatto.
IO preferisco sempre questo modo diprocedere e non impelagarmi in questioni geometriche che hanno la loro valenza solo per uno specifico caso.CITAZIONEPer quanto riguarda i valori che la funzione dovrà restituire......io con la mia funzione C, posso inserire nella struttura dati restituita tutto quel che voglio. Viceversa la funzione UDF potrà restituire una ed una sola variabile.
Con l'utilizzo accorto di un campo flag si potrà richiamare più volte la stessa funzione all'interno del foglio ottenendo i dati che interessano. Ma questo a scapito di una pletora di flag da dover ben documentare ed inoltre con una bella perdita di efficienza.
I flag sarebbero sempre due. Flag e Flag_Punto
Il primo che può assumere i seguenti valori:
0 - restituisce il numero dei vertici del poligno reagente
1 - restituisce l'ascissa del vertice indicato dal flag_punto
2 - restituisce l'ordinata del vertice indicato dal flag_punto
3 - restituisce la tensione nel vertice indicato dal flag_punto
Il secondo indica il punto per il quale voglio la x o la y o la sigma.CITAZIONEIo suggerisco che la funzione debba restituire la tripletta deformativa u, φx, φy, di modo tale che all'esterno si possano poi ricavare le tensioni al di sotto di ogni vertice, e le coordinate di pochi punti significativi della parte di sezione reagente. Ad esempio il punto di massima tensione, ed i due punti con tensione nulla, che 'segnerebbero' l'intersezione dell'asse neutro con la sezione iniziale.
La tripletta può esser restituita allargando il range del flag. Per sempio si puo stabilire che:
flag= 4 - restituisce U(0)
flag= 5 - restituisce U(1)
flag= 6 - restituisce U(2)CITAZIONERiguardo alle tensioni in un punto assolutamente generico, avuta la tripletta deformativa, sarà possibile ottenerle senza sforzo alcuno ma all'interno del foglio.
Si puo' anche agire in questo modo ma non è limitante.. -
.
D'accordo su quasi tutto.
Ho fatto le mie osservazioni proprio per iniziare a ragionare.
Ecco l'unica contro-contro-osservazione che mi sento di fare alle tue contro-osservazioni.
Mi chiedo......un input basato su numero lati e lunghezza del lato..........ha senso?
Non vi sono dubbi che in fase costruttiva io debba dare al carpentiere anche il lato del poligono.....ma immagino che per la costruzione serva anche il raggio del cerchio inscritto.
Non capisco infine la tua contro-osservazione finale:CITAZIONESi può agire in questo modo ma non è limitante.
Era questo che volevi dire oppure il 'non' è di troppo?. -
.D'accordo su quasi tutto.
Ho fatto le mie osservazioni proprio per iniziare a ragionare.
Ecco l'unica contro-contro-osservazione che mi sento di fare alle tue contro-osservazioni.
Mi chiedo......un input basato su numero lati e lunghezza del lato..........ha senso?
Non vi sono dubbi che in fase costruttiva io debba dare al carpentiere anche il lato del poligono.....ma immagino che per la costruzione serva anche il raggio del cerchio inscritto.
Un senso lo ha quando per esempio vuoi fissare una ben precisa dimensione del lato.
Cosi per le fondazioni esagonali (che però rappresenta un caso particolare dato che il lato dell'esagono corrisponde al semidiametro del cerchio circonscritto) puoi fissare che il lato deve essere 5.00 m esatti. Lo stesso dicasi per quelle ottagonali.CITAZIONENon capisco infine la tua contro-osservazione finale:CITAZIONESi può agire in questo modo ma non è limitante.
Era questo che volevi dire oppure il 'non' è di troppo?
Bho!
Non so se ho azzeccato il non ma quel che volevo dire è il fatto che la possibilità di poter ricavare le tensioni nei vertici direttamente come formule di foglio avendo nota la tripletta non deve limitare la possibilità che la funzione possa restituirli direttamente.
Però poi rileggendo meglio ciò che hai scritto (ti riferivi a punti generici) penso proprio di aver scritto di pizze e pizzerie. Chiedoti scusa. -
.
Tento adesso di illustrare i miei dubbi accennati.
Per poter condurre il dimensionamento strutturale della ciabatta di fondazione ci serve determinare le sollecitazioni cui essa è sottoposta. In genere lo schema adottato è quello di una mensola rovescia, cioè una mensola caricata dal basso verso l'alto dal carico netto dato dalla differenza tra reazione del terreno e pesi propri.
Uno schema del genere:
in cui la mensola è pensata incastrata nella sezione di attacco col collare/dado di ammorsamento della turbina.
Quel che stiamo trattando qui (la scrittura del codice) ci permette di ricavare le tensioni sul terreno in qualsiasi punto ci interessi.
Possiamo quindi avere le tensioni sia nei vertici esterni (vertici del poligono reagente) sia in quelli interni (vertici del collare).
Noto il diagramma delle tensioni sul terreno, gli cambiano i segno, sottraiamo il peso della ciabatta e del rinterro ottenendo il diagramma netto e con questo siamo in grado di calcolare sia il momento flettente che il taglio cui è sottoposta la ciabatta.
E con questi verifichiamo a rottura la sezione della ciabatta.
Ma adesso guardiamo la questione dal punto di vista geotecnico e cioè del carico limite. Dobbiamo condurre anche questa verifica.
Tralascio per adesso la questione dei coefficienti parziali di sicurezza di tutto quanto e miro direttamente al concetto/principio.
Quando calcoliamo il carico limite adottiamo uno schema come quello sotto riportato (mi sono aiutato col famigerato Califfo, un programma free che ho trovato in rete pubblicato da qualche nullafacente).
Questo è lo schema di calcolo del carico limite con carico centrato.
Se vale questo schema allora quel carico qlim, per il principio di azione e reazione, cambiato di segno sarà applicato alla fondazione agente dal basso verso l'alto.
Ma anche quando fosse presente una eccentricità del carico il concetto permarrebbe identico.
E' indubbio che il qlim che determiniamo dipende da questioni afferenti al terreno mentre è la sola eccentricità del carico che interviene a modificarne il valore attraverso opportuni coefficienti riduttivi.
Ora chiedo:
ma se noi abbiamo dimensionato la fondazione tale che resista ad un momento derivante da carichi inferiori al qlim, possiamo poi dire che il sistema terreno+ fondazione possa raggiungere quel carico limite?
Edited by afazio - 9/12/2014, 14:03. -
.
Diciamo di si, ma non soltanto.
Immaginiamo che tu ti accontentassi di trattare poligoni al più di 33 lati.
Diciamo che il 'lancio' della funzione con flag=0 ti restituisca, perchè sei fortunato, il numero di soli 23 vertici reagenti.
Ma il tuo foglio, più o meno dovrà essere organizzato in questo modo:
Ma poichè sempre fortunati non si può essere, diciamo che in ogni caso dovrai prevedere una tabella da 33 posizioni. E per ogni colonna di tale tabella dovrai richiamare la funzione con gli opportuni valori di flag e flag_punto.
Metterai ovviamente dei =se() prima di richiamare la funzione, perchè sai che più di 23 vertici la sezione reagente non ha, ecc.
Ma tutto ciò a che prezzo?
Quello di richiamare 100 (99) volte una funzione che ha al suo interno anche un certo numero di iterazioni a priori non determinabile.
100 volte una funzione che calcola sempre la stessa identica cosa, e la cui unica differenza risiede nella 'uscita'.
E' molto più efficiente quello che propongo io. In fondo il foglio non dovrai comporlo più o meno nello stesso modo?
Edited by zax2013 - 9/12/2014, 15:40. -
.Diciamo di si, ma non soltanto.
Immaginiamo che tu ti accontenti di trattare poligoni al più di 33 lati.
Diciamo che il 'lancio' della funzione con flag=0 ti restituisca, perchè sei fortunato, il numero di soli 23 vertici reagenti.
Ma il tuo foglio, più o meno dovrà essere organizzato in questo modo:
Ma poichè sempre fortunati non si può essere, diciamo che in ogni caso dovrai prevedere una tabella da 33 posizioni. E per ogni colonna di tale tabella dovrai richiamare la funzione con gli opportuni valori di flag e flag_punto.
Metterai ovviamente dei =se() prima di richiamare la funzione, perchè sai che più di 23 vertici la sezione reagente non ha, ecc.
Ma tutto ciò a che prezzo?
Quello di richiamare 100 (99) volte una funzione che ha al suo interno anche un certo numero di iterazioni a priori non determinabile.
100 volte una funzione che calcola sempre la stessa identica cosa, e la cui unica differenza risiede nella 'uscita'.
E' molto più efficiente quello che propongo io. In fondo il foglio non dovrai comporlo più o meno nello stesso modo?
L'onere computazionale non viene risolto se trasferiamo il compito alle formule di foglio. Anche in questo caso devi prevedere le celle dove poter inserire le formule di foglio che utilizzando la tripletta ti determinano la tensione nell'iesimo vertice ed anche in questo caso devi mettere dei SE() che ti attivano il calcolo nel foglio.
Questo comunque mi sembra un problema secondario specie nel caso in cui si decide di dare entrambe le possibilità. Avendole entrambe (che ci costa nulla, due o tre righe di codice in più ) poi ognuno decide se farle calcolare nel foglio o farle restituire dalla funzione.. -
.Questo comunque mi sembra un problema secondario specie nel caso in cui si decide di dare entrambe le possibilità. Avendole entrambe (che ci costa nulla, due o tre righe di codice in più ) poi ognuno decide se farle calcolare nel foglio o farle restituire dalla funzione.
Si, sarei d'accordo con questo tuo 'approccio'.
Io intanto prevedo l'uscita, poi se quella specifica opzione venga realmente utilizzata è fatto che sta all'utilizzatore della funzione.
Non verrai però a dirmi che 99 richiami della funzione che itera quel che itera, siano identici a far calcolare 99 formule (moltiplicazioni e somme) seppur precedute da un =se()..