Il Bar dell'Ingegneria

Verifiche sezioni complesse in c.a. agli SLE ed SLU

« Older   Newer »
 
  Share  
.
  1. g.iaria
        +1   +1   -1
     
    .

    User deleted


    Per ora ho avuto tempo di controllare solo la prima sub tradotta, calcola_caratt_geometriche
    Ho tuttavia notato due cose.
    La prima è un "errore di traduzione" del simbolo "!=" del C++ che dovrebbe essere il <> di VBA.
    La seconda è nel calcolo dell'angolo di inclinazione degli assi principali di inerzia rispetto agli assi di riferimento X,Y.
    Il codice C++ sorgente di zax riporta:
    CODICE
    /* Calcola l'inclinazione degli assi principali d'inerzia */
    if (geo.ix-geo.iy!=0) geo.alfa=atan(-2*geo.ixy/(geo.ix-geo.iy))/2; else alfa=0;
    if (geo.ix<geo.iy)    geo.alfa+=1.570796327;

    Quindi se Jx è diverso da Jy alfa non è indeterminato e calcolabile con la classica formula, altrimenti alfa è indeterminato e quindi ogni coppia di assi aventi origine in (xg,yg), baricentro della sezione, è una coppia di assi principali di inerzia, in questo caso mi sembra che zax abbia posto alfa = 0, anche se non capisco perchè è stato assegnato il valore con la notazione alfa=0, anzichè geo.alfa=0 (chiedo agli esperti di C++: è forse la stessa cosa?).
    Il codice VBA tradotto da afazio riporta invece:
    CODICE
    If (geo.ix - geo.iy = 0) Then
           geo.alfa = atan(-2 * geo.ixy / (geo.ix - geo.iy)) / 2
       ElseIf (geo.ixy > 0#) Then
           geo.alfa = -0.7854
       Else
           geo.alfa = 0.7854
       End If

    A parte l'errore di traduzione di "!=", noto che afazio nel caso in cui non risultasse geo.ix - geo.iy = 0 (che andava appunto tradotto come geo.ix - geo.iy <> 0, quindi Jx <> Jy) assegna a geo.alfa il valore +/- pigreco/4.
    Riporto una revisione della traduzione della funzione calcola_caratt_geometriche
    CODICE
    Sub calcola_caratt_geometriche(ByRef polic As poligono_sezione, ByRef geo As geometria_sezione)
    Dim k As Integer          
    Dim kp1 As Integer      
    Dim np As Integer        
    Dim a As Double            
    Dim d As Double            
    Dim hy As Double          
    Dim hx As Double          
    ' Azzera inizialmente tutte le variabili statiche da calcolare (l'operatore # rafforza il fatto che le variabili vanno trattate come double
    geo.area = 0#
    geo.scx = 0#
    geo.scy = 0#
    geo.ix = 0#
    geo.iy = 0#
    geo.ixy = 0#
    ' Calcola le caratteristiche statiche di ogni singolo poligono rispetto ad una coppia di assi paralleli ad x e y passanti per il baricentro geometrico dei poligoni di coordinate xg ed yg che sono variabili globali
    For np = 0 To NMAXPOLI - 1                      
       For k = 0 To polic(np).numv - 1            
           If k = polic(np).numv - 1 Then        
               kp1 = 0                        
               Else                            
               kp1 = k + 1                  
           End If
           a = polic(np).x(kp1) - polic(np).x(k)  
           d = polic(np).y(kp1) - polic(np).y(k)  
           hy = polic(np).y(k) - yg              
           hx = polic(np).x(k) - xg          
           geo.area = geo.area + polic(np).omog * a * (hy + d / 2)  
           geo.scx = geo.scx + polic(np).omog * a / 2 * (hy ^ 2 + 1 / 3 * d ^ 2 + d * hy)
           geo.scy = geo.scy - polic(np).omog * d / 2 * (hx ^ 2 + 1 / 3 * a ^ 2 + a * hx)
           geo.ix = geo.ix + polic(np).omog * a / 3 * (hy ^ 3 + hy * d ^ 2 + 3 / 2 * d * hy ^ 2 + 1 / 4 * d ^ 3)  
           geo.iy = geo.iy - polic(np).omog * d / 3 * (hx ^ 3 + hx * a ^ 2 + 3 / 2 * a * hx ^ 2 + 1 / 4 * a ^ 3)    
           geo.ixy = geo.ixy + polic(np).omog * a * (hx / 2 * (hy ^ 2 + 1 / 3 * d ^ 2 + d * hy) + a / 2 * (1 / 2 * hy ^ 2 + 1 / 4 * d ^ 2 + 2 / 3 * d * hy))    
           Next
       Next
    ' Inserisce le armature ordinarie nelle caratteristiche statiche
    ' le armature vengono prelevate dalla variabile globale arm di tipo armature_sezione
    For k = 0 To arm.numarm         - 1
       If (arm.af(k) <> 0# And arm.cong(k) = 0) Then    
    'se l'area della k-esima barra di armatura è non nulla e la k-esima barra non è stata congelata si procede ad aggiungere i
    'contributi delle armature rispetto alle caratteristiche geometriche prima calcolate
           geo.area = geo.area + arm.omogarm * arm.af(k)
           geo.scx = geo.scx + arm.omogarm * arm.af(k) * (arm.y(k) - yg)
           geo.scy = geo.scy + arm.omogarm * arm.af(k) * (arm.x(k) - xg)
           geo.ix = geo.ix + arm.omogarm * arm.af(k) * (arm.y(k) - yg) ^ 2
           geo.iy = geo.iy + arm.omogarm * arm.af(k) * (arm.x(k) - xg) ^ 2
           geo.ixy = geo.ixy + arm.omogarm * arm.af(k) * (arm.x(k) - xg) * (arm.y(k) - yg)
       End If
       Next
    ' Inclinazione degli assi principali d'inerzia rispetto agli assi X,Y di riferimento
    If (geo.ix - geo.iy <> 0#) Then                            
       geo.alfa = atan(-2 * geo.ixy / (geo.ix - geo.iy)) / 2   'la nota formula di geometria delle masse
       Else
       geo.alfa = 0                                              'se invece sono uguali ogni coppia di assi di origine xg e yg è una coppia di assi
    End If
    If (geo.ix < geo.iy) Then                               'viene applicata la correzione di alfa
       geo.alfa = geo.alfa + 1.570796327
    End If
      ' Momenti principali d'inerzia */
      geo.ia = (geo.ix + geo.iy) / 2 + Sqr((geo.ix - geo.iy) ^ 2 + 4 * geo.ixy ^ 2) / 2
      geo.ib = (geo.ix + geo.iy) / 2 - Sqr((geo.ix - geo.iy) ^ 2 + 4 * geo.ixy ^ 2) / 2
    End Sub


    Edited by g.iaria - 1/10/2012, 18:53
     
    Top
    .
  2.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Intanto un ringraziamento a giuseppe. In questo modo il rischio di errori di traduzione è ridotto.
    L'errore di traduzione del simbolo "!=" lo avevo già "intuito" quando sono dovuto andare su internet alla ricerca del significato di altro simbolo e in quella occcasione notai che il punto eslamativo era "negativo", e mi resi conto di aver commesso errori in quel che avevo gia tradotto. Ma avendo gli occhi pieni di for e == && decisi di rinviare ad un controllo punto punto non appena terminavo tutta la traslazione del codice che per questo motivo assumeva la caratteristica di "bozza".

    Due note aggiuntive: ai tempi mi ero fatto spedire il codice direttamente da zax. Quelo inviatomi da zax presenta qualche lieve differenza rispetto a quello che pubblico' in ingegneriaforum con ogni probabilita dovuta a variazioni al volo in occasione dello sviluppo di una qualche altra funzione.

    Le righe che gestiscono "' Inclinazione degli assi principali d'inerzia rispetto agli assi X,Y di riferimento" sono:

    CODICE
    /* Inclinazione degli assi principali d'inerzia rispetto agli assi X,Y di riferimento */
    if (geo.ix-geo.iy!=0)   geo.alfa=atan(-2*geo.ixy/(geo.ix-geo.iy))/2;
    else { if (geo.ixy>0.0) geo.alfa=-0.7854; else geo.alfa=0.7854; }
    if (geo.ix<geo.iy)      geo.alfa+=1.570796327;


    che io traduco in:

    CODICE
    if (geo.ix-geo.iy<>0) then
              geo.alfa=atan(-2*geo.ixy/(geo.ix-geo.iy))/2
    elseif (geo.ixy>0.0)  
              then geo.alfa=-0.7854
    else
           geo.alfa=0.7854
    end if
    if (geo.ix<geo.iy)  then    geo.alfa=geo.alfa+1.570796327


    Infine, le matrici di zax sono tutte zero based, quindi occorre iniziare il contatore da 0 e terminarlo a NMAXPOLI-1
     
    Top
    .
  3. francesco.coppola
        +1   -1
     
    .

    User deleted


    A Giuseppe.
    No, alfa e geo.alfa sono cose differenti.
    Un errore di trascrizione di zax.

    L'aggiustamento del valore di alfa (il geo.alfa+=1.57...) lo vedo come 'risolutivo' dell'uscita di atan che non restituisce l'angolo giro, ma solamente al massimo 180°.
     
    Top
    .
  4.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Mi sono documentato in merito alla possibilità di poter ridimensionare una matriche che fa parte di una struttura dati.
    La cosa è possibile purchè la matrice all'interno della definizione della struttura dati non sia stata compiutamente dimensionata.
    Mi spiego con un esempio:

    se all'atto della definzione della struttura scriviamo:

    CODICE
    Public Type TipoProva
       x(0 to 9) As Double
       y(0 to 9) As Double
       nome As String
    End Type


    allora non sarà piu' possibile modificare le dimensioni delle due matrici x e y , ma se invece scriviamo:

    CODICE
    Public Type TipoProva
       x() As Double
       y() As Double
       nome As String
    End Type


    allora all'atto dell'utilizzo di una qualsiasi variabile avente quel tipo, possiamo ridimensionare le dimensioni di qualsiasi delle matrici contenute nella struttura

    CODICE
    Sub provaRedim()
    Dim prova As TipoProva
    Dim i As Integer
    ' primo dimensiono a 10 le due matrici
    ReDim prova.x(0 To 9) As Double
    ReDim prova.y(0 To 9) As Double
    ' leggo 10 numeri per x e 10 per y dal foglio
    For i = 1 To 10
       prova.x(i - 1) = Range("tab_00").Cells(i, 1).Value
       prova.y(i - 1) = Range("tab_00").Cells(i, 2).Value
    Next
    ' adesso ridimensiono solo x a 12 elementi
    ReDim Preserve prova.x(0 To 11) As Double
    ' eda ggiungo due numeri nei due posti in piu'
    prova.x(10) = 11
    prova.x(11) = 12
    ' quindi scrivo la matrice x nel foglio. Se il redim non è andato
    ' a buon fine, dovrei avere errore di indice fuori dall'intervallo
    For i = 1 To 12
       Range("tab_01").Cells(i, 1).Value = prova.x(i - 1)
    Next
    ' ma invece tutto funziona correttamente
    End Sub
     
    Top
    .
  5.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,939
    Reputation
    +187

    Status
    Offline
    Confermo che afazio ha un codice più 'nuovo' di quello che ho pubblicato in ingegneriaforum.

    Più nuovo perchè in qualche punto è stato successivamente modificato quando mi sono reso conto di qualche piccola sbavatura intanto che sviluppavo il software completo.

    Preciso che il valore di alfa, per le ulteriori elaborazioni numeriche, non serve a nulla. Affannarsi dunque a calcolarlo bene non servirebbe a nulla.
    Solamente che nel programma completo disegno l'ellisse centrale d'inerzia con i suoi assi principali, quindi ho voluto calcolare in calcola_caratt_geometriche il valore di inclinazione di tali assi.

    E' corretto quanto dice Giuseppe. Una volta che Jx e Jy siano uguali, qualsiasi asse d'inerzia è principale, dunque definire una inclinazione perde di senso.

    Non riesco però a ricordare a quale inconveniente ero incorso fissando fittizziamente alfa=0 in quei casi.

    Il caso alfa=0 è usuale, quello di un rettangolo parallelo agli assi cartesiani ad esempio. E con alfa=0 di una figura 'giroscopica' non ricordo cosa accadeva. Da qui la decisione di definire un'altra inclinazione (sempre fittizia).
     
    Top
    .
  6.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Stavo iniziando nel tentativo di riempire la variabile poli coi dati letti dal foglio.

    mi ritrovo una struttura cosi definita:

    CODICE
    Public Type TipoPoligono
       x(0 To NMAXVRT - 1) As Double  ' coordinata x del vertice
       y(0 To NMAXVRT - 1) As Double    ' coordinata y del vertice
       selez(0 To NMAXVRT - 1) As Integer  ' 1=vertice selezionato 0=vertice non selezionato
       bloc(0 To NMAXVRT - 1) As Integer   ' Link rigido con altro vertice. Nessun link=-1
       numv As Integer            ' numero di vertici del poligono
       omog As Double  ' coefficiente di omogeneizzazione (per verifiche SLE)
       traz As Integer            ' 0=non reagente a trazione; 1=reagente a trazione
       classe As String       ' Classe di resistenza del cls
       fd As Double            ' Resistenza massima di calcolo (per verifiche SLU)
       automfd As Integer         ' Rende automatico il calcolo di fd in funzione della classe del cls
       dominio As Integer          ' 0=parabola-rettangolo (cls) 1=bilatera (acciaio)
       fase As Integer            ' A futura memoria per gestire fasi di realizzazione
       epsc0 As Double         ' Deformazione in corrispondenza della fine della parte parabola/lineare del dominio
       epscu As Double         ' Deformazione ultima del dominio
       automeps As Integer        ' Rende automatico il calcolo di epsc0 e epscu in funzione della classe del cls
       E_prof As Double       ' NUOVO Modulo elastico acciaio profilo
       incr_prof As Double    ' NUOVO fattore incrudimento acciaio profilo
    End Type


    lE coordinate dei vertici del poligono li posso leggere dall'elenco del foglio che ho pubblicato, ma ho difficoltà a dare dei valori ai rimanenti:

    selez(0 To NMAXVRT - 1) As Integer ' 1=vertice selezionato 0=vertice non selezionato
    bloc(0 To NMAXVRT - 1) As Integer ' Link rigido con altro vertice. Nessun link=-1

    omog As Double ' coefficiente di omogeneizzazione (per verifiche SLE)
    traz As Integer ' 0=non reagente a trazione; 1=reagente a trazione
    classe As String ' Classe di resistenza del cls
    fd As Double ' Resistenza massima di calcolo (per verifiche SLU)
    automfd As Integer ' Rende automatico il calcolo di fd in funzione della classe del cls
    dominio As Integer ' 0=parabola-rettangolo (cls) 1=bilatera (acciaio)
    fase As Integer ' A futura memoria per gestire fasi di realizzazione
    epsc0 As Double ' Deformazione in corrispondenza della fine della parte parabola/lineare del dominio
    epscu As Double ' Deformazione ultima del dominio
    automeps As Integer ' Rende automatico il calcolo di epsc0 e epscu in funzione della classe del cls
    E_prof As Double ' NUOVO Modulo elastico acciaio profilo
    incr_prof As Double ' NUOVO fattore incrudimento acciaio profilo

    Prendiamo come esempio la ELLE che ho disegnato nel foglio, cioe il profilo esterno dell'interza sezione, e supponiamo che trattasi di cls classe C25/30.
    Quali dati devo inserire?

    Altra domanda diretta a Zax: Come vengono trattati i vuoti?

    Seguendo lo sviluppo su ingegneriaforum, mi era sembrato di capire che un vuoto è trattato come un pieno, quindi poligono definito sempre in senso orario, ma avente omogeneizzazione uguale ed opposta a quella del materiale del quale il poligono ne costituisce vuoto


    Altra domanda:

    se all'interno di una sezione in c.a. ho un profilato metallico, questo deve essere definito da un poligono o sbaglio?
    Se è definito come un poligono, come sottraggo la stessa area a quella del cls?

    Inoltre vedo che all'interno della stessa struttura del poligono vi sono dati tipici del cls e dati tipici dell'acciaio. Cio' significa che se quel poligono è in cls devo azzerare tutti i dati tipici dell'acciaio?
     
    Top
    .
  7.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,939
    Reputation
    +187

    Status
    Offline
    Alcuni campi di quella struttura dati servono solamente a gestire l'interfaccia del mio software, non hanno specificità di calcolo vero e proprio e pertanto possono essere anche eliminate.
    Mi riferisco a:

    CODICE
    selez(0 To NMAXVRT - 1) As Integer  ' 1=vertice selezionato 0=vertice non selezionato
    bloc(0 To NMAXVRT - 1) As Integer   ' Link rigido con altro vertice. Nessun link=-1
    automfd As Integer         ' Rende automatico il calcolo di fd in funzione della classe del cls
    fase As Integer            ' A futura memoria per gestire fasi di realizzazione
    automeps As Integer        ' Rende automatico il calcolo di epsc0 e epscu in funzione della classe del cls


    Con selez indico la selezione o meno di alcuni vertici del poligono, per poterne editare le coordinate (lo faccio in modo 'da CAD' come tu avrai visto). bloc viene utilizzato per generare quello che nel programma indico come "link rigido tra vertici" (cosa che potrebbe avere una qualche importanza per alcune sezioni che si vuole modificare con poca 'spesa', ma in fondo non trascendentale).
    automfd, automeps sono variabili che mi consentono di variare automaticamente, sempre nel programma, il valore di fd (resistenza di calcolo caratteristica a compressione) al variare della classe del cls (perchè al contrario potrei volere un ben definito valore di fd, indipendentemente dalla classe, vedi ad esempio la diatriba tra valori caratteristici/valori medi ancora in corso tra g.iaria e Renato per la determinazione della duttilità di curvatura), oppure di calcolare automaticamente, come da normativa, i valori di epsc0 e epscu, che per calcestruzzi con resistenze 'importanti' (oltre i 600 daN/cm²) non sono più i classici 2 per mille e 3.5 per mille.

    Penso che la tua idea di creare nel foglio una tabella di materiali (in cui inserirai i valori di base) possa risolvere la questione.
    Unica osservazione al momento, che mi sento di fare, è sulle nuove variabili che ti ho consigliato di introdurre, ovvero E_prof e incr_prof che cominciano ad avere senso solamente se la variabile dominio e la variabile traz sono impostate ad 1.
    E' una sofisticazione, quella del poligono che reagisce anche a trazione che magari per adesso si può mettere da parte (seppur le varie funzioni che hai tradotto lo prevedano).

    Per i vuoti: fattore di omogeneizzazione del poligono negativo.
    Attenzione a due cose. Agli SLE se il vuoto si trova all'interno di altro poligono con fattore di omogeneizzazione (ipotesi) 0.75, anche il vuoto deve avere lo stesso fattore di omogeneizzazione ma invertito di segno (-0.75).
    Agli SLU un vuoto deve avere lo stesso valore di fd del poligono entro cui sta.

    Infine.
    Un pò scoraggiato dai discorsi fatti da Alberto Ferrari in ingegneriaforum (accusato di concorrenza sleale da altre più blasonate softwarehouse per il suo DORO), non ho volutamente mai reso pubblico il programma sviluppato a partire da queste routine.
    Non volendo ricavare nulla da un simile applicativo (a pagamento ce ne sono anche troppi, non avrei 'pubblico') potrei pure recedere da tale scelta iniziale e rendere pubblico il software. Ditemi voi cosa ne pensate.
    Oppure fatemi un messaggio privato e posso passarvi un link.
     
    Top
    .
  8.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (zax2010 @ 1/10/2012, 10:50) 
    Alcuni campi di quella struttura dati servono solamente a gestire l'interfaccia del mio software, non hanno specificità di calcolo vero e proprio e pertanto possono essere anche eliminate.
    Mi riferisco a:

    CODICE
    selez(0 To NMAXVRT - 1) As Integer  ' 1=vertice selezionato 0=vertice non selezionato
    bloc(0 To NMAXVRT - 1) As Integer   ' Link rigido con altro vertice. Nessun link=-1
    automfd As Integer         ' Rende automatico il calcolo di fd in funzione della classe del cls
    fase As Integer            ' A futura memoria per gestire fasi di realizzazione
    automeps As Integer        ' Rende automatico il calcolo di epsc0 e epscu in funzione della classe del cls


    Con selez indico la selezione o meno di alcuni vertici del poligono, per poterne editare le coordinate (lo faccio in modo 'da CAD' come tu avrai visto). bloc viene utilizzato per generare quello che nel programma indico come "link rigido tra vertici" (cosa che potrebbe avere una qualche importanza per alcune sezioni che si vuole modificare con poca 'spesa', ma in fondo non trascendentale).
    automfd, automeps sono variabili che mi consentono di variare automaticamente, sempre nel programma, il valore di fd (resistenza di calcolo caratteristica a compressione) al variare della classe del cls (perchè al contrario potrei volere un ben definito valore di fd, indipendentemente dalla classe, vedi ad esempio la diatriba tra valori caratteristici/valori medi ancora in corso tra g.iaria e Renato per la determinazione della duttilità di curvatura), oppure di calcolare automaticamente, come da normativa, i valori di epsc0 e epscu, che per calcestruzzi con resistenze 'importanti' (oltre i 600 daN/cm²) non sono più i classici 2 per mille e 3.5 per mille.

    OK, Ho capito. Adesso controllo se in una delle sub che mi hai passato non venga richiamato nessuno dei capi che hai elencato. Se in effetti non ne viene richiamato alcuno penso di snellire la struttura eliminando le realtive voci.
    Se poi nel cosro dello sviluppo di questo applicativo Excel volessimo apportare ulteriori funzionalita come nel tuo programma. provvederemo a farlo insieme.
    Io penso che delle particolarità, come per esempio il calcolo automatico di un fd anzicheno' di un epsc0, se ne debba occupare il programma che pensa a riempire la struttura.

    CITAZIONE
    Penso che la tua idea di creare nel foglio una tabella di materiali (in cui inserirai i valori di base) possa risolvere la questione.
    Unica osservazione al momento, che mi sento di fare, è sulle nuove variabili che ti ho consigliato di introdurre, ovvero E_prof e incr_prof che cominciano ad avere senso solamente se la variabile dominio e la variabile traz sono impostate ad 1.
    E' una sofisticazione, quella del poligono che reagisce anche a trazione che magari per adesso si può mettere da parte (seppur le varie funzioni che hai tradotto lo prevedano).

    Quindi creo a parte in altro foglio una specie di archivio indicizzato dei materiali e per ciascuno di esso fisso i valori dei campi restanti dopo aver soppresso quelli sopra elencati.
    Nel foglio principale dove definisco i poligoni do la possibilità di scegliere tra uno dei materiali dell'archivio attraverso il suo indice. pensero poi nella macro a rimpire le strutture.

    CITAZIONE
    Per i vuoti: fattore di omogeneizzazione del poligono negativo.
    Attenzione a due cose. Agli SLE se il vuoto si trova all'interno di altro poligono con fattore di omogeneizzazione (ipotesi) 0.75, anche il vuoto deve avere lo stesso fattore di omogeneizzazione ma invertito di segno (-0.75).
    Agli SLU un vuoto deve avere lo stesso valore di fd del poligono entro cui sta.

    Quest'ultima non la comprendo. IN ogni caso l'omogeneizzazione di un vuoto deve essere opposto all'omogeneizzazione del suo pieno?
    Perchè poni l'attenzione sul fatto che un vuoto deve avere stassa fd del suo pieno?

    CITAZIONE
    Infine.
    Un pò scoraggiato dai discorsi fatti da Alberto Ferrari in ingegneriaforum (accusato di concorrenza sleale da altre più blasonate softwarehouse per il suo DORO), non ho volutamente mai reso pubblico il programma sviluppato a partire da queste routine.

    Perchè, anziche accusarlo di concorrenza sleale per aver pubblicato quasi gratis programmi ben piu eccellenti dei loro, non lo pagano per indurlo a non pubblicare?
    E che dicono dei programmi gratuiti del prof Gersi e dei suoi allievi?

    CITAZIONE
    Non volendo ricavare nulla da un simile applicativo (a pagamento ce ne sono anche troppi, non avrei 'pubblico') potrei pure recedere da tale scelta iniziale e rendere pubblico il software. Ditemi voi cosa ne pensate.
    Oppure fatemi un messaggio privato e posso passarvi un link.

    Personalmente avrei piacere a possederne una copia, anche se forse gia sai che non me ne farei granchè. Ho gia ricevuto il nocciolo del tuo programma e non la buccia.
    Per renderlo pubblico non saprei cosa dirti, sai come la penso, personalmente non lo pubblicherei poichè pubblicandolo andrei immediatamente in contraddizione con me stesso. é cosa notevole invece il fatto che hai reso pubbliche con tanto di commenti e spiegazioni quel che ti è girato per la testa per far quel programma.

    Grazie
     
    Top
    .
  9.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,939
    Reputation
    +187

    Status
    Offline
    Il motivo per cui un poligono vuoto debba avere lo stesso fd del poligono 'pieno' dentro cui sta è dato da questo pezzetto di codice contenuto in risult_compr:

    CODICE
    If (polic(np).omog < 0#) Then segno = -1 Else segno = 1
      ' Per ogni striscia determina lunghezza, deformazione, tensione, forza
      For y = yn + dx / 2 To ymax Step dx
          Call calcola_lungh_fibra(polic(np), y, fibra)
          def = deform.epsa + (deform.epsb - deform.epsa) * (ymax - y) / (ymax - yamin)
          If (polic(np).dominio = 0) Then
              pressione = parabola_rett(def, polic(np).epsc0) * polic(np).fd
          Else
              pressione = elast_plast_indef(def, fyd_prof, incr_prof, epsyd_prof, E_prof) * fyd_prof
          End If
          forza = segno * fibra.lungh * pressione * dx


    Come vedi ho dovuto definire la variabile 'integrativa' segno, il cui valore, 1 o -1, dipende dal valore della variabili di omog (che è un parametro prettamente SLE, ma che se negativo indica un vuoto).

    Ma il segno negativo non basta. Poichè la lunghezza della fibra (determinata con Call calcola_lungh_fibra(polic(np), y, fibra)) serve a determinare la forza che la fibra 'esercita', il valore di fd (in pressione = parabola_rett(def, polic(np).epsc0) * polic(np).fd) è necessario sia identico, in modo da sottrarre correttamente alla forza-fibra del poligono pieno, la parte forza-fibra 'mancante' (perchè facente parte della porzione di poligono vuoto).

    Io eseguo dei controlli nel software, preliminarmente alle fasi di calcolo, per verificare che questa condizione, non immediatamente 'intuibile' dall'utente, sia effettivamente rispettata.
     
    Top
    .
  10.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (zax2010 @ 1/10/2012, 12:02) 
    Il motivo per cui un poligono vuoto debba avere lo stesso fd del poligono 'pieno' dentro cui sta è dato da questo pezzetto di codice contenuto in risult_compr:

    CODICE
    If (polic(np).omog < 0#) Then segno = -1 Else segno = 1
      ' Per ogni striscia determina lunghezza, deformazione, tensione, forza
      For y = yn + dx / 2 To ymax Step dx
          Call calcola_lungh_fibra(polic(np), y, fibra)
          def = deform.epsa + (deform.epsb - deform.epsa) * (ymax - y) / (ymax - yamin)
          If (polic(np).dominio = 0) Then
              pressione = parabola_rett(def, polic(np).epsc0) * polic(np).fd
          Else
              pressione = elast_plast_indef(def, fyd_prof, incr_prof, epsyd_prof, E_prof) * fyd_prof
          End If
          forza = segno * fibra.lungh * pressione * dx


    Come vedi ho dovuto definire la variabile 'integrativa' segno, il cui valore, 1 o -1, dipende dal valore della variabili di omog (che è un parametro prettamente SLE, ma che se negativo indica un vuoto).

    Ma il segno negativo non basta. Poichè la lunghezza della fibra (determinata con Call calcola_lungh_fibra(polic(np), y, fibra)) serve a determinare la forza che la fibra 'esercita', il valore di fd (in pressione = parabola_rett(def, polic(np).epsc0) * polic(np).fd) è necessario sia identico, in modo da sottrarre correttamente alla forza-fibra del poligono pieno, la parte forza-fibra 'mancante' (perchè facente parte della porzione di poligono vuoto).

    Io eseguo dei controlli nel software, preliminarmente alle fasi di calcolo, per verificare che questa condizione, non immediatamente 'intuibile' dall'utente, sia effettivamente rispettata.

    Ok. chiaro. OLtre che annullare le aree, i vuoti devono anche poter annullare le azioni. Quindi stessa fd.
     
    Top
    .
  11.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,939
    Reputation
    +187

    Status
    Offline
    Stavo pensando che se tu volessi inserire la variabile omog tra le caratteristiche dei materiali, saresti poi costretto a raddoppiare tutti i materiali, perchè poi dovresti avere materiali "pieni" e materiali "vuoti".

    Penso che tale variabile vada invece assegnata in qualche modo (una casellina nel foglio excel) al singolo poligono, indipendentemente dal materiale assegnatogli.
     
    Top
    .
  12.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,939
    Reputation
    +187

    Status
    Offline
    CITAZIONE (afazio @ 1/10/2012, 10:27) 
    Altra domanda:

    se all'interno di una sezione in c.a. ho un profilato metallico, questo deve essere definito da un poligono o sbaglio?
    Se è definito come un poligono, come sottraggo la stessa area a quella del cls?

    Inoltre vedo che all'interno della stessa struttura del poligono vi sono dati tipici del cls e dati tipici dell'acciaio. Cio' significa che se quel poligono è in cls devo azzerare tutti i dati tipici dell'acciaio?

    Non avevo visto questo ultimo 'pezzettino' e mi scuso. Provvedo adesso.
    Nel caso in cui tu avessi un profilo tutto all'interno di un poligono dovrai utilizzare in tutto 3 poligoni per risolvere la cosa:

    1) Il poligono 'pieno';
    2) un poligono 'vuoto' (stesso valore di omog cambiato di segno, stesso valore di fd) con la forma del profilo;
    3) un poligono 'pieno' (con traz=1 - reagente a trazione, dominio=1 - dominio elasto plastico indefinito o con incrudimento) con la forma del profilo.

    In sintesi gli ultimi due profili saranno 'doppioni'. Sono le loro caratteristiche (materiali, ed altro) che li differenzia.

    In effetti le varie variabili (relative al cls e relativa all'acciaio) possono tranquillamente convivere senza necessità di azzeramenti.
    Se vedi (ad esempio sempre in risult_compr) basta settare correttamente la variabile dominio affinchè la procedura 'decida' se utilizzare il dominio parabola-rettangolo (con le variabili relative al cls) oppure l'elasto-plastico indefinito (con le variabili dell'acciaio). Solamente la variabile fd deve di volta in volta essere sostituita con il valore corretto (esempio 141.1 daN/cm² per un cls C25/30, oppure 2238.09 daN/cm² per un acciaio da profilo tipo S235).

    Forse la doppia 'valenza' di questa variabile ti crea qualche problema?
    (Penso di no, se hai la tabella dei materiali, in questa ci sarà anche la variabile dominio che dovrebbe sbrogliare tutte le matasse).
     
    Top
    .
  13.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (zax2010 @ 1/10/2012, 12:15) 
    Stavo pensando che se tu volessi inserire la variabile omog tra le caratteristiche dei materiali, saresti poi costretto a raddoppiare tutti i materiali, perchè poi dovresti avere materiali "pieni" e materiali "vuoti".

    Penso che tale variabile vada invece assegnata in qualche modo (una casellina nel foglio excel) al singolo poligono, indipendentemente dal materiale assegnatogli.

    Io penso di definire il tipo di materiale e poi al poligono attribuire la Proprietà "pieno" o "vuoto" sempre di quel materiale. Siccome in definitiva il tutto si traduce in dover moltiplicare rispettivamente per +1 o per -1 il solo coefficiente di omogeneizzazione, la cosa si risolverebbe con un solo coefficiente in piu'.
    Ovviamente nel codice non faro' alcuna modifica (per adesso) ma limitero' il tutto in fase di input sul foglio.



    CITAZIONE (zax2010 @ 1/10/2012, 14:01) 
    CITAZIONE (afazio @ 1/10/2012, 10:27) 
    Altra domanda:

    se all'interno di una sezione in c.a. ho un profilato metallico, questo deve essere definito da un poligono o sbaglio?
    Se è definito come un poligono, come sottraggo la stessa area a quella del cls?

    Inoltre vedo che all'interno della stessa struttura del poligono vi sono dati tipici del cls e dati tipici dell'acciaio. Cio' significa che se quel poligono è in cls devo azzerare tutti i dati tipici dell'acciaio?

    Non avevo visto questo ultimo 'pezzettino' e mi scuso. Provvedo adesso.
    Nel caso in cui tu avessi un profilo tutto all'interno di un poligono dovrai utilizzare in tutto 3 poligoni per risolvere la cosa:

    1) Il poligono 'pieno';
    2) un poligono 'vuoto' (stesso valore di omog cambiato di segno, stesso valore di fd) con la forma del profilo;
    3) un poligono 'pieno' (con traz=1 - reagente a trazione, dominio=1 - dominio elasto plastico indefinito o con incrudimento) con la forma del profilo.

    In sintesi gli ultimi due profili saranno 'doppioni'. Sono le loro caratteristiche (materiali, ed altro) che li differenzia.

    oK. Come avevo intuito.

    CITAZIONE
    In effetti le varie variabili (relative al cls e relativa all'acciaio) possono tranquillamente convivere senza necessità di azzeramenti.
    Se vedi (ad esempio sempre in risult_compr) basta settare correttamente la variabile dominio affinchè la procedura 'decida' se utilizzare il dominio parabola-rettangolo (con le variabili relative al cls) oppure l'elasto-plastico indefinito (con le variabili dell'acciaio). Solamente la variabile fd deve di volta in volta essere sostituita con il valore corretto (esempio 141.1 daN/cm² per un cls C25/30, oppure 2238.09 daN/cm² per un acciaio da profilo tipo S235).

    Forse la doppia 'valenza' di questa variabile ti crea qualche problema?
    (Penso di no, se hai la tabella dei materiali, in questa ci sarà anche la variabile dominio che dovrebbe sbrogliare tutte le matasse).

    Anche qui tutto chiaro.

    Tanto pour parler... cosi come strutturata la variabile dominio consente di poter considerare solo due tipi di materiali, o meglio solo due tipi di legami costitutivi, uno per il cls ed uno per l'acciaio. Sarebbe interessante poter prevedere, pur rimanendo sempre i due materiali acciaio e conglomerato cementizio (non andremo a costruirci il dominio di rottura per una sezione in
    pl armato "pasta in laterizio armato"), diversi legami costitutivi (e qui potrebbero entrare in gioco i diversi legami confinati del cls o i diversi legami dell'acciaio).
     
    Top
    .
  14.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,939
    Reputation
    +187

    Status
    Offline
    Tanto pour parler....
    Quella di implementare differenti modelli dei legami costitutivi è cosa che vorrei fare prima o poi, implementando un "dominio poligonale", ovvero qualcosa, che opportunamente poligonalizzato, potesse simulare tutti i domini possibili ed immaginabili.
    (Basterà dare alla variabile dominio il valore 2, o 3, o ..... e fare le opportune modifiche alle varie funzioni)

    I domini 'adimensionalizzati' (restituiscono l'aliquota del possibile massimo di tensione, non la tensione) che ho proposto hanno comunque il vantaggio di poter essere utilizzati per differenti misure di "scarpa".

    Come ricorderai in ingegneriaforum mi accingevo a cominciare gli aspetti legati al confinamento (lavoro ancora interrotto e non certo per la mia attuale cessazione di interventi da quella parte). Ecco, io penso che con modello di confinamento tipo EC2-EC8 io riesca sempre ad utilizzare quel pezzettino di codice comunque.
     
    Top
    .
  15.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    L'incrudimento

    @ Zax.
    Hai inserito la possibilità di poter considerare un legame costitutivo per l'acciaio oltre che elasto-perfettamente plastico, anche il legame elasto-plastico con incrudimento ed a tale scopo hai inserito due campi.
    Uno nella struttura del generico poligono, nel caso in cui questo è costituito da acciaio, e lo hai indicato con incr_prof, e l'altro nella struttura che raccoglie i dati relatici alle barre di armatura da c.a. e lo hai indicato con incr_arm.

    Questi due parametri vengono poi passati alla funzione/sub elast_plast_indef() che, per fissata deformazione nel punto/fibra, ti restituisce un coefficiente col quale moltiplicare l'area e la tensione fd del materiale cui è costituita la fibra in esame per ottenere il contributo in forza e/o momenti interni. Praticamente la stessa cosa che ho fatto io nel mio foglio VersezSLU.xls, salvo per il fatto che io ho considerato un legame costituitivo per l'acciaio soltanto elasto-perfettamente plastico.
    Per quanto riguarda l'acciaio in barre da c.a. il fattore di incrudimento lo possiamo assumere pari al minimo che impone la normativa cioè 1.15 per il B450c o altro per il B450A, ma per quanto riguarda gli acciai dolci per carpenteria metallica di cui sono in genere costituiti i profilati, che valore assumere?
    Se seguissimo il criterio fissato dalla norma per il B450C e lo estendessimo anche agli acciai S235, S275, S355 otterremo un valore per incr_prof che si aggira attorno ad 1.50. Comunque non trovo alcun riscontro ne in normativa ne il letteratura anche perchè l'approccio delle verifiche per i profilati è diverso anche se fanno riferimento sia alla tensione di snervamento di calcolo che alla tensione a rottura di calcolo.

    PS: abbi pazienza se ti tempesto di domande, ma finita la fase da ammanuense traduttore adesso devo essere nelle condizioni di entrare dentro il codice se voglio continuare con qualche speranza di successo.

    Nel frattempo:

    acciaios
     
    Top
    .
390 replies since 26/9/2012, 10:47   29394 views
  Share  
.