Il Bar dell'Ingegneria

Ci A Pi

« Older   Newer »
 
  Share  
.
  1.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    L'errore che ho segnalato era relativo al fatto che non avevo prelevato il numero della combinazione utente dal foglio prima dell'utilizzo.
    per lo scarico del file aggiornato il link è postato più avanti

    Edited by texitaliano64 - 13/3/2014, 21:22
     
    Top
    .
  2. p.luciani
        +1   -1
     
    .

    User deleted


    Ho aggiornato il codice proposto da texitaliano e ritengo che possa funzionare dal punto di N... ma il problema rimane a livello di momenti resistenti.

    Come possono essere uguali Mrxd e Mryd in una sezione a T in pressoflessione deviata con momenti agenti in x e y uguali ??

    In merito al problema sollevato da reversi direi di ripartire dalla versione TESTATA e apportare modifiche con molta moderazione condividere il file SOLO dopo una approfondita validazione...
     
    Top
    .
  3.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    Un test che potresti fare, e che io ho già fatto anche usando un software commerciale è di comparare i risultati col VCASLU del prof. Gelfi, noterai che questo comportamento è corretto.
     
    Top
    .
  4. p.luciani
        +1   -1
     
    .

    User deleted


    Ragazzi ho fatto la prova con RC-SEC del grande TRITTO e devo dire che non solo Mrxd e Mryd sono uguali ma anche i valori sono praticamente identici con l'excel... scusate
     
    Top
    .
  5.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,942
    Reputation
    +187

    Status
    Offline
    Luciani, già la volta scorsa mi ero incuriosito circa il tuo quesito...ma poi avevo dimenticato di indagare meglio sulla questione.

    O meglio, volevo 'a botta' risponderti che avendo un momento risultante a 45° era assai normale ottenere dei momenti di rottura anch'essi a 45°. Poi mi ero impappinato pensando a domini circolari, che in effetti erano a 'patata', ecc. incasinandomi.

    Ma oggi ritorno al mio primo pensiero. Anzi, generalizzo. Non è possibile non ottenere un momento di rottura che non abbia la stessa direzione del momento sollecitante.
    Ovviamente questa mia affermazione è vera se precisiamo per benino cosa intendiamo per: momento di rottura associato ad un momento sollecitante.

    Di fatto a noi conoscere i momenti di rottura 'associati', ecc. non importerebbe un bel nulla. L'importante è che il mio punto 'sollecitante' stia dentro il dominio di rottura, ed amen.

    Guarda questa figura, c'è la tua bella sezione a T ed il dominio associato (ovviamente a forma di patata):

    png

    Al fine di 'definire' un fattore di sicurezza della sezione (quanto il mio punto 'sollecitante' stia dentro il dominio di rottura), dall'origine del sistema di riferimento viene tracciato un raggio vettore che passa per il punto 'sollecitante' di coordinate Mdx, Mdy. Ovviamente tale raggio vettore è inclinato di 45° (perchè Mdx=Mdy).
    Si prolunga tale raggio vettore fino ad intercettare il diagramma a rottura della sezione.
    Il rapporto tra le lunghezze (da 0 a Mr e da 0 a Md) indica il fattore di sicurezza della sezione con la sollecitazione data.
    E' chiaro però che ogni punto che giace sul tale raggio vettore non potrà non avere identiche coordinate x ed y (altrimenti il raggio vettore non sarebbe a 45°), è quindi evidente che Mrx=Mry.

    Per convincertene ti faccio vedere cosa accade modificando la geometria della sezione:

    png

    Anche in questo caso 'magicamente' (ma ovviamente ormai sappiamo che così non è....) i momenti di rottura x ed y sono identici.

    Se vuoi conferma ulteriore di questo 'strano' fenomeno fai pure un'altra prova. Prova ad avere momento sollecitanti la cui risultante è inclinata a 30°......scommessa che anche i momenti di rottura avranno inclinazione a 30°?

    Aggiungo per amore di completezza che questo modo di conteggiare il 'fattore di sicurezza' ed i relativi momenti di rottura è del tutto convenzionale.
    Avremmo potuto intervenire in maniera differente, magari tracciando un segmento orizzontale dal punto 'sollecitante' verso la frontiera del dominio, oppure verticale. Oppure come detto sopra, proprio un bel niente, se non un "verificato", "non verificato".
     
    Top
    .
  6.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    3,345
    Reputation
    +213

    Status
    Offline
    per dare seguito al mio precedente messaggio, ho scaricato il file emendato da luciani nella versione riproposta da tex e, augurandomi che nessuno nel frattempo abbia fatto altre modifiche, ho fatto alcune correzioni che qui documento, proponendo infine a mia volta (e vi prometto che non lo farò più, per lasciare a luciani il compito di coordinare le modifiche su questo file) una possibile versione da usare come base di partenza per ulteriori estensioni.

    alla prima pubblicazione di un aggiornamento da parte di luciani provvederò io stesso a rimuovere la presente mia versione del file da questo messaggio.

    coerentemente con l'altra sub che genera le armature, ho eliminato l'uso dei gradi anche nella sub che segue:

    CODICE
    Sub SezioniDefault(Tipo As Integer, p() As Double, R As Integer, C As Integer)
    .
    .
    .
           Case 7:         'Circolare
               'centro raggio
                   Raggio = p(1) / 2
                   discreticcazione = p(2)
                   PiGreco = 3.14159265358979
                   t = 2 * PiGreco / p(2)   'direttamente in radianti
                   For ii = 0 To discreticcazione
                   yy = Raggio * Cos(t * ii)
                   xx = Raggio * Sin(t * ii)
                   Call AddP(xx, yy, R, C, i)
                   Next ii
       End Select
    End Sub


    ho provveduto poi a formattare il testo nei fogli accorpando, ove necessario, alcune celle in modo da centrare il titolo delle varie tabelle. ho corretto poi anche alcuni errori di digitazione sia nel testo dei fogli che nei messaggi all'interno del codice (preciso che non ho toccato i nomi delle variabili).

    non sono invece riuscito a chiamare csi ed eta gli assi principali nel grafico della sezione, sul foglio "geometria", perché non sapevo dove andare a trovarli.

    qui il file da me rinominato VerSectZaxCAP_PL_rev4.xls

    avrei intenzione di fare lo stesso anche con il file di tex, se nel frattempo tex rimane fermo per un po'...
    File Allegato
    VerSectZaxCAP_PL_rev4.zip
    (Number of downloads: 90)

     
    Top
    .
  7. p.luciani
        +1   -1
     
    .

    User deleted


    Ringrazio tutti per l'interesse... Prima di andare avanti con l'implementazione di nuove funzioni direi di ripensare un attimo l'organizzazione dei dati di input e output che personalmente la trovo un po' disordinata...Vorrei predisporre l'output in modo da avere la possibilità di effettuare verifcihe multiple (ovvero output per righe e riportare il dominio per la combinazione che determina il coefficiente minimo... Inoltre la limitazione a 25 combinazioni mi sembra troppo riduttivo. In questi giorni vedo di proporre un aggiornamento dal layout...
     
    Top
    .
  8.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    Allo Zaxcode ho apportato alcune modifiche in merito ai parametri di integrazione, consentendo all'utente di modificarli a piacimento.
    Originariamente il numero delle fibre era prioritario ed era fissato a 100, con uno spessore minimo fibra di 0.1mm.
    Io ho scelto che lo spessore minimo delle fibre "SpMinFibre" è prioritario e viene eventualmente ingrossato se il numero massimo delle fibre supera la soglia "NMaxFibre".
    Questi sono comunque solo dettagli tecnici, dato che i PC odierni hanno si una buona potenza di calcolo ma tuttavia non è illimitata.

    Ecco alcuni stralci di codice che parlano chiaro:
    CODICE
    'variabili globali
    Public SpMinFibre As Double            'spessore minimo delle fibre per l'integrazione in [mm]
    Public NMaxFibre As Integer            'numero massimo di fibre per l'integrazione

    Private Function risult_compr(ByRef polic() As poligono_sezione, armco As armo_sezione, armcp As armp_sezione, _
                             deform As deform_sezione, ymax As Double, yamin As Double, yn As Double) As risultante_n
           '...........
           '...........
           '...........

           Dim NSTRISCE As Integer
           'integriamo con strisce spesse circa SpMinFibre mm
           NSTRISCE = Abs(ymaxpe - yn) / SpMinFibre + 1
           'limitiamo il numero massimo di strisce per ridurre il tempo di elaborazione
           If NSTRISCE > NMaxFibre Then NSTRISCE = NMaxFibre
           dx = (ymaxpe - yn) / NSTRISCE

           ' Inizialmente divide in 100 striscie la parte compressa della sezione
           'dx = (ymaxpe - yn) / 100
           ' Controlla poi che le striscie non siano troppo sottili (eccessivo peso in elaborazione)
           'If dx < 0.1 Then dx = 0.1

           '...........
           '...........
           '...........

    End Function


    Private Function risult_traz(ByRef polic() As poligono_sezione, armco As armo_sezione, armcp As armp_sezione, deform As deform_sezione, _
                   ymax As Double, yamin As Double, yn As Double) As risultante_n
           '...........
           '...........
           '...........

       Dim NSTRISCE As Integer
       If (yn < ytmax) Then            'se l'asse neutro è più basso della massima ordinata dei poligoni resistenti a trazione
           'integriamo con strisce spesse circa SpMinFibre mm
           NSTRISCE = Abs(ytmax - yn) / SpMinFibre + 1
           'limitiamo il numero massimo di strisce per ridurre il tempo di elaborazione
           If NSTRISCE > NMaxFibre Then NSTRISCE = NMaxFibre
           dx = (yn - ytmin) / NSTRISCE
           
           'dx = (yn - ytmin) / 100
           ' Controlla poi che le striscie non siano troppo sottili (eccessivo peso in elaborazione)
           'If dx < 0.1 Then dx = 0.1
           
           Inizio = yn - dx / 2#
       Else
           'integriamo con strisce spesse circa SpMinFibre mm
           NSTRISCE = Abs(ytmax - ytmin) / SpMinFibre + 1
           'limitiamo il numero massimo di strisce per ridurre il tempo di elaborazione
           If NSTRISCE > NMaxFibre Then NSTRISCE = NMaxFibre
           dx = (ytmax - ytmin) / NSTRISCE
           
           'dx = (ytmax - ytmin) / 100
           ' Controlla poi che le striscie non siano troppo sottili (eccessivo peso in elaborazione)
           'If dx < 0.1 Then dx = 0.1
           
           Inizio = ytmax - dx / 2#
       End If


           '...........
           '...........
           '...........

    End Function
     
    Top
    .
  9.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    3,345
    Reputation
    +213

    Status
    Offline
    lo stralcio di codice cui tex si riferisce nel suo precedente messaggio c'era già nel file (perlomeno, io me lo ritrovo) ma è utile che venga documentato.

    quando però vado a testare una sezione di controllo che ho scelto arbitrariamente, proprio quel pezzo di codice mi dà un errore di runtime.

    la sezione è quella che ho già proposto qui: #entry552165916

    riporto di seguito anche l'immagine del post, da cui si evincono le caratteristiche geometriche e di armatura:

    png

    le sollecitazioni sono invece le seguenti:

    png

    verificando la combinazione 2, in cui lo sforzo normale è molto elevato rispetto alle capacità della sezione, portando il punto rappresentativo dello stato di sollecitazione ben al di fuori del dominio, con versectzax trovo:

    png

    in cui il dominio risulta intrecciato (cosa che però non dovrebbe succedere) ma viene comunque calcolato e rappresentato, mentre nel file di tex ottengo un errore di runtime proprio nel pezzo di codice da lui introdotto:

    png

    al di là di capire perché nel file originario il dominio venga intrecciato, chiedo a tex se a suo parere si possa individuare qualcosa che rende errata la prova che sto conducendo oppure c'è un bug nel codice.


    edit:
    controllando la stessa sezione con un altro programmino (ho lavorato in daN e cm), la risposta è stata: "Spiacente, ma non posso disegnare il dominio di rottura. Non essendo rispettata la disuguaglianza -62941 < Nd < 190918 il dominio non esiste.

    il che mi dice che in excel questo controllo non c'è.


    Edited by reversi - 12/3/2014, 18:38
     
    Top
    .
  10.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,942
    Reputation
    +187

    Status
    Offline
    Se non si controlla che Nd sia compreso tra Nlim di trazione ed Nlim di compressione per la sezione......succede il patatrac.

    Io ricordo che questo controllo, nel mio codice era presente.
    Qui una schermata del mio programma quando Nd è 'sballato':

    png
     
    Top
    .
  11.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    @reversi
    Ho simulato il problema in base ai dati forniti nello screen shot, ed ho visto che si verifica un errore di Overflow.
    Il problema segnalato deriva dal fatto che avevo sottovalutato la dimensione della variabile locale NSTRISCE.
    Ho revisionato il file come segue sia nella routine risult_compr che nella routine risult_traz.
    prima:
    CODICE
    Dim NSTRISCE As Integer

    dopo:
    CODICE
    Dim NSTRISCE As Long

    Adesso funziona in maniera conforme alle attese, eccetto il controllo dei limiti di Nd che ha giustamente segnalato Zax.

    Edited by texitaliano64 - 12/3/2014, 21:41
     
    Top
    .
  12.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    3,345
    Reputation
    +213

    Status
    Offline
    CITAZIONE (texitaliano64 @ 12/3/2014, 21:01) 
    Il problema segnalato deriva dal fatto che avevo sottovalutato la dimensione della variabile locale NSTRISCE.
    ...
    Adesso funziona in maniera conforme alle attese, eccetto il controllo dei limiti di Nd che ha giustamente segnalato Zax.

    in realtà, e lo sai benissimo anche tu, per l'elevato valore di Nd usato nel test si ritrovano scambiati di posto la causa e l'effetto. sembra perciò che la causa dell'errore stia in quel frammento codice e che questo vada modificato.

    la vera causa è invece l'assenza del controllo preventivo su Nd poiché a valle di questo definire NSTRISCE come integer sarebbe molto più che sufficiente per ogni sezione.

    usando il long, il tutto ridiventa normale. eccone qui l'esempio con il file in rev.4 postato da tex:

    png

    :D :D :D
     
    Top
    .
  13.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,942
    Reputation
    +187

    Status
    Offline
    Ragazzi....ma fatemi capire...
    Con la modifica di Tex, personalizzando quindi la larghezza della striscia, io correrei il rischio di avere un numero di fibre superiore a 37.000 e passa striscie???????

    (Comincio a capire pertanto la 'smania' ottimizzatrice di Reversi.......)

    Ma siamo sicuri che ci interessano momenti di rottura con valori di 'precisione' del centesimo di Nmm?
     
    Top
    .
  14.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    io purtroppo ho perso il filo del tutto.
    Non so piu' quale è la versione ultima e se in questa ultima sono state apportate tutte le modifichette descritte.
    Reversi mi ha passato una versione con alcune sue modifiche intese a questa ottimizzazione. IN queste settimane ho poco tempo da dedicare alla coltivazione della mia anima e passione per codici ed algoritmi e quindi non ho controllato ne verificato nulla. Tuttavia mi è stato sufficiente far girare una sola volta il file passatomi per ottenere immediatamente un errore. VBA non riconosceva una variabile della quale sembra non era stata data la relativa istruzione DIM. Forse un errore di digitazione, forse qualcosa altro? Bho.
    Ho chiuso, conservato il file in un angolo di non ricordo quale pc e ....
     
    Top
    .
  15.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    @Zax
    No non c'è il rischio di andare a calcolare con la precisione del micronewton dato che non ha senso, infatti c'è l'impostazione utente NMAXFIBRE che limita ad un numero congruo di strisce (100 di default).

    CODICE
    Dim NSTRISCE As Long
       'integriamo con strisce spesse circa SpMinFibre mm
       NSTRISCE = Abs(ymaxpe - yn) / SpMinFibre + 1
       'limitiamo il numero massimo di strisce per ridurre il tempo di elaborazione
       If NSTRISCE > NMaxFibre Then NSTRISCE = NMaxFibre
       dx = (ymaxpe - yn) / NSTRISCE


    @afazio
    Per ora la versione del foglio che ho messo in scarico recepisce solo parte delle modifiche consigliate da reversi e da pluciani, comunque seguo la discussione controllando possibilmente ciò che viene proposto ed i problemi rilevati.
     
    Top
    .
283 replies since 18/1/2014, 10:24   14202 views
  Share  
.