Il Bar dell'Ingegneria

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

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

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Le variabili globali

    Gran parte delle procedure presenti nel codice originario richiamano delle variabili globali che devono pertanto essere definite a monte ed essere visibili alle procedure, quindi variabili pubbliche.

    /* -------------------------------------------------------------------------- */
    /* Alcune delle funzioni qui presentate presuppongono l'utilizzo di variabili */
    /* globali che devono/possono essere dichiarate nel file di progetto */
    /* Si espongono di seguito le variabili necessarie: */
    /* struct poligono_sezione poli[NMAXPOLI]; */
    /* struct armature_sezione arm; */
    /* struct soll_esterne soll[NMAXCOMB]; */
    /* float xg,yg; // Posizione baricentro senza tenere in conto le armature // */
    /* float fyd_arm,E_arm; // Tensione snervamento, modulo elastico barre // */
    /* float fyd_prof,E_prof; // Tensione snervamento, modulo elastico profili // */
    /* -------------------------------------------------------------------------- */

    In VBA la definizione delle variabili globali viene eseguita mediante l'istruzione: Public variabile as tipoVariabile
    quindi ecco le definizioni:

    CODICE
    Public poli(0 To NMAXPOLI - 1) As poligono_sezione
    Public arm As armature_sezione
    Public soll(0 To NMAXCOMB - 1) As soll_esterne
    Public xg As Double
    Public yg As Double
    Public fyd_arm As Double
    Public E_arm As Double
    Public fyd_prof As Double
    Public E_prof As Double


    La prima sub:

    ecco la prima sub che calcola le caratteristiche geometriche di un poligono passato come riferimento, leggendo i dati della variabile globale arm e depositando i risultati nella variabile passata come riferimento geo

    CODICE
    ' --------------------------------------------------------------------------
    ' nome suB         : calcola_caratt_geometriche(
    ' Scopo            : Calcola le caratteristiche geometriche della sezione.
    '                    Utilizza le variabili globali xg,yg - baricentro della
    '                    sezione omogenea senza armature - calcolate con la fun-
    '                    zione definisci_baricentro() perchè le caratteristiche
    '                    geometriche sono riferite a questo punto.
    ' Parametri         : Polic: Puntatore a struttura dati dei singoli poligoni che co-
    '                    stituiscono la sezione (in questo modo si possono pro-
    '                    cessare poligoni differenti da quelli di input, ad esem-
    '                    pio la sola parte reagente)
    '                    Geo: puntatore a variabile avente struttura geometria sezione
    '                    che sarà riempita coi valori derivanti da calcolo
    ' Valore restituito: la variabile passata come riferimento riempita coi dati calcolati
    ' Implementazione  : Luglio 2011
    ' Autore           : Zax2010
    ' traduzione in VBA : Afazio Settembre 2012
    ' ---------------------------------------------------------------------------
    Sub calcola_caratt_geometriche(ByRef polic As poligono_sezione, ByRef geo As geometria_sezione)
    Dim k As Integer, kp1 As Integer, np As Integer
    Dim a As Double, d As Double, hy As Double, hx As Double
    ' Azzera inizialmente tutte le variabili statiche da calcolare */
       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 */
       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 * hy + d * d / 3 + d * hy)
               geo.scy = geo.scy - polic(np).omog * d / 2 * (hx * hx + a * a / 3 + a * hx)
               geo.ix = geo.ix + polic(np).omog * a / 3 * (hy ^ 3 + hy * d * d + 3 * hy * hy * d / 2 + (d ^ 3) / 4)
               geo.iy = geo.iy - polic(np).omog * d / 3 * (hx ^ 3 + hx * a * a + 3 * hx * hx * a / 2 + a ^ 3 / 4)
               geo.ixy = geo.ixy + polic(np).omog * a * (hx / 2 * (hy * hy + d * d / 3 + d * hy) + a / 2 * (hy * hy / 2 + d * d / 4 + 2 * d * hy / 3))
           Next
       Next
       ' Inserisce le armature ordinarie nelle caratteristiche statiche
       ' le armature vengono prelevate dalla variabile globale arm
       For k = 0 To arm.numarm - 1
           If (arm.af(k) = 0# And arm.cong(k) = 0) Then
             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
       ElseIf (geo.ixy > 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
       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


    Penso di apportare una modifica alla sub inserendo anche come parametro la variabile delle armature in modo da rendere la sub più autonoma.

    Mi sono accorto solo adesso della presenza della funzione Pow che penso sia mancante in VBA ed anche la funzione sqrt che in VBA diventa Sqr. Corretto.

    Edited by afazio - 27/9/2012, 17:04
     
    Top
    .
390 replies since 26/9/2012, 10:47   29394 views
  Share  
.