|
|
Ringrazio Zax2013, AFazio, GIaria per il loro contributo, oltre che i suggerimenti di Francesco.Coppola i quali mi hanno permesso di estendere il foglio al calcolo ed alla visualizzazione del diagramma del dominio di rottura anche alle travi in cap di qualsiasi forma in pressoflessione deviata. Brevemente vado ad illustrare le modifiche principali fatte al foglio di calcolo VerSectZax. Innanzitutto definiamo il legame costitutivo bilineare dell'acciaio di precompressione come da normativa EC2.
Uploaded with ImageShack.us Il codice relativo è il seguente:
CODICE ' -------------------------------------------------------------------------- ' Nome funzione : elast_plast_indefps( ' Scopo funzione : Dal diagramma elasto-plastico lineare adimensionalizzato ' ricava un fattore alfa, funzione della deformazione, ' che moltiplicato per fydp da la effettiva tensione nei ' trefoli ' Parametri formali: def=valore della deformazione dell'acciaio, fydp=tensione ' di snervamento, Ep=modulo elastico dell'acciaio. ' Valore restituito: fattore alfa compreso tra 0 ed 1.xx ' Implementazione : Novembre 2012 ' Autore : Tex ' -------------------------------------------------------------------------- Private Function elast_plast_indefps(def As Double, fydp As Double, Ep As Double) 'def --> deformazione della fibra di cls all'altezza del cavo.
'1.15 < k < 1.35 pendenza del tratto plastico valori consigliati da normativa 'cautelativamente usiamo k = 1.15 Const k As Double = 1.15 'euk = 0.035 deformazione di rottura 35 per mille Const euk As Double = 0.035 Dim coeff As Double coeff = fydp / Ep If def >= coeff Then 'elast_plast_indefps = 1# 'Dim A As Double, b As Double 'Dim A1 As Double, B1 As Double 'A = (k - 1#) * fydp 'b = euk - coeff 'B1 = def - coeff 'A1 = A * B1 / b 'elast_plast_indefps = (fydp + A1) / fydp 'ricomponiamo la funzione in un calcolo unico 'elast_plast_indefps = ((fydp - def * Ep) * k + (def - euk) * Ep) / (fydp - euk * Ep) 'dividiamo il tutto per Ep 'elast_plast_indefps = ((fydp / Ep - def) * k + (def - euk)) / (fydp / Ep - euk) 'assegnamo coeff=fydp/Ep da cui elast_plast_indefps = ((coeff - def) * k + (def - euk)) / (coeff - euk) Else elast_plast_indefps = def * Ep / fydp End If
End Function Andiamo a definire inoltre una struttura dati per contenere le coordinate dell'acciaio da precompressione, in questo caso per comodità estendiamo la struttura preesistente delle barre di armatura ordinaria:
CODICE ' -------------------------------------------------------------------------- ' ' Struttura dati in cui sono definiti i dati delle singole barre di armatura ' ' presenti nella sezione ' ' -------------------------------------------------------------------------- ' Public Type armature_sezione af() As Double ' area della barra di armatura o del trefolo (1 To NMaxArm) X() As Double ' coordinata x della barra o del trefolo (1 To NMaxArm) Y() As Double ' coordinata y della barra o del trefolo (1 To NMaxArm) omogarm() As Double ' coefficiente di omogeneizzazione barre o trefoli (per verifiche SLE) (1 To NMaxArm) numarm As Integer ' numero di barre e trefoli per l'intera sezione fyd() As Double ' Tensione snervamento barre o trefoli sigma_sp0() As Double ' Tensione dei trefoli depurata dalle perdite def_prec() As Double ' deformazione trefolo dovuto alla precompressione depurata dalle perdite End Type ' -------------------------------------------------------------------------- ' Bisogna definire la tensione di tesatura dei trefoli sigmaspi, per brevità diamo una percentuale di perdita del 22.4% a tempo infinito. Per un calcolo più accurato delle perdite si rimanda ai testi di normativa, ed alla bibliografia esistente. Per lo stato deformativo iniziale dovuto alla precompressione scriviamo questa struttura:
CODICE armp.numarm = NMaxArmp For i = 1 To n_cavi_sez armp.X(i) = cx(i) '[mm] armp.Y(i) = cy(i) '[mm] armp.af(i) = Asp(i) 'Af [mm2] armp.omogarm(i) = nsp - 1# 'tengo conto del foro nel cls armp.fyd(i) = fyd / gammasp 'Tensione snervamento trefoli di progetto armp.sigma_sp0(i) = sigma_preteso_ultimo(i) - sigma_perdite_ultimo(i) armp.def_prec(i) = -armp.sigma_sp0(i) / E_armp Next Infine calcolo N dovuto alle forze di precompressione sommato a N dovuto ai carichi esterni da applicare alla sezione.
CODICE Public Sub Calcolo_precompressione(ByVal N_ As Double, ByVal Mx_ As Double, ByVal My_ As Double, _ Nd As Double, Mx As Double, My As Double)
'Caratteristiche di sollecitazione dovute ai carichi esterni. 'N_ sforzo normale (compressione positiva) [N] 'Mx_ momento flettente in direzione x [N*mm] 'My_ momento flettente in direzione y [N*mm] 'nd = N_ + N_p --> sforzo assiale per carichi assiali + precomp. 'Mx = Mx_ + Mx_p --> momento per carichi verticali + momento precomp. 'My = My_ + My_p --> momento per carichi orizzontali + momento precomp. ReDim sigma_preteso_ultimo(0 To n_cavi_sez) As Double ReDim sigma_perdite_ultimo(0 To n_cavi_sez) As Double Dim i As Integer 'Tensione iniziale di tesatura For i = 1 To n_cavi_sez sigma_preteso(i) = sigma_spi Next i 'Tensioni nei cavi amplificate (o ridotte) Dim g_prec As Double g_prec = 1# For i = 1 To n_cavi_sez sigma_preteso_ultimo(i) = sigma_preteso(i) * g_prec Next i '***************************************************************** 'Determinazione della sollecitazione dovuta a precompressione '***************************************************************** Dim N_p As Double 'Sforzo normale dovuto alle forze di precompressione Dim Mx_p As Double 'Momento lungo x " Dim My_p As Double 'Momento lungo y " Dim sigma_sp0 As Double 'Tensione dei trefoli depurata dalle perdite N_p = 0#: Mx_p = 0#: My_p = 0# For i = 1 To n_cavi_sez sigma_perdite_ultimo(i) = (perdite / 100#) * sigma_preteso(i) sigma_sp0 = sigma_preteso_ultimo(i) - sigma_perdite_ultimo(i) N_p = N_p + sigma_sp0 * Asp(i) Mx_p = Mx_p - sigma_sp0 * Asp(i) * (ygO - cy(i)) My_p = My_p + sigma_sp0 * Asp(i) * (xgO - cx(i)) Next i Nd = N_ + N_p 'sforzo assiale per carichi assiali + precomp. Mx = Mx_ + Mx_p 'momento per carichi verticali + momento precomp. My = My_ + My_p 'momento per carichi orizzontali + momento precomp. End Sub Integriamo la funzione risult_traz tenendo conto della deformazione precedentemente assegnata ai trefoli.
CODICE ' -------------------------------------------------------------------------- ' Nome sub :risult_traz( ' Scopo funzione : Calcola la risultante di trazione nella sezione per da- ' to posizionamento dell'asse neutro, ed anche il suo ' punto di applicazione. ' ATTENZIONE per determinare forze derivanti dalle armatu- ' o dai profili metallici, la procedura utilizza le va- ' riabili globali: E_arm,E_prof,fyd_arm,fyd_prof ' Parametri formali: Struttura dati con tutti i poligoni che costituiscono la ' sezione, struttura dati con tutte le armature della se- ' zione. ymax=massima ordinata della sezione in cls, ' yamin=minima ordinata delle barre di armatura, yn=ordi- ' nata dell'asse neutro, struttura dati con le deforma- ' zioni limite a rottura ' Valore restituito: Struttura dati con risultante e punto di applicazione ' Implementazione : Luglio 2011 ' Autore : Zax2010 ' traduzione in VBA : Afazio Settembre 2012 ' modifiche : Giuseppe Iaria Ottobre 2012 ' modifiche : Tex Dicembre 2012 ' --------------------------------------------------------------------------
Private Function risult_traz(ByRef polic() As poligono_sezione, armco As armature_sezione, armcp As armature_sezione, deform As deform_sezione, _ ymax As Double, yamin As Double, yn As Double) As risultante_n ...... ...... For k = 1 To armcp.numarm If armcp.Y(k) > yn Then GoTo continua3 'esclude le armature compresse def = deform.epsa + (deform.epsb - deform.epsa) * (ymax - armcp.Y(k)) / (ymax - yamin) pressione = -elast_plast_indefps(Abs(def + armcp.def_prec(k)), armcp.fyd(k), E_armp) * armcp.fyd(k) forza = pressione * armcp.af(k) risult_traz.n = risult_traz.n + forza Scx = Scx + forza * armcp.Y(k) Scy = Scy + forza * armcp.X(k) continua3: Next Lo stesso facciamo con risult_compr.
CODICE ' -------------------------------------------------------------------------- ' nome sub : risult_compr( ' Scopo funzione : Calcola la risultante di compressione nella sezione per ' dato posizionamento dell'asse neutro, ed anche il suo ' punto di applicazione ' ATTENZIONE per determinare forze derivanti dalle armatu- ' o dai profili metallici, la procedura utilizza le va- ' riabili globali: E_arm,E_prof,fyd_arm,fyd_prof ' Parametri formali: Struttura dati con tutti i poligoni che costituiscono la ' sezione, struttura dati con tutte le armature della se- ' zione. ymax=massima ordinata della sezione in cls, ' yamin=minima ordinata delle barre di armatura, yn=ordi- ' nata dell'asse neutro, struttura dati con le deforma- ' zioni limite a rottura ' Valore restituito: Struttura dati con risultante e punto di applicazione ' Implementazione : Luglio 2011 ' traduzione in VBA : Afazio Settembre 2012 ' Autore : Zax2010 ' modifiche : Giuseppe Iaria Ottobre 2012 ' modifiche : Tex Dicembre 2012 ' -------------------------------------------------------------------------- Private Function risult_compr(ByRef polic() As poligono_sezione, armco As armature_sezione, armcp As armature_sezione, _ deform As deform_sezione, ymax As Double, yamin As Double, yn As Double) As risultante_n ..... ..... For k = 1 To armcp.numarm If armcp.Y(k) < yn Then GoTo continua7 'le armature sono tese e passa oltre def = deform.epsa + (deform.epsb - deform.epsa) * (ymax - armcp.Y(k)) / (ymax - yamin) pressione = elast_plast_indefps(def + armcp.def_prec(k), armcp.fyd(k), E_armp) * armcp.fyd(k) forza = pressione * armcp.af(k) risult_compr.n = risult_compr.n + forza Scx = Scx + forza * armcp.Y(k) Scy = Scy + forza * armcp.X(k) continua7: Next
Edited by texitaliano64 - 18/1/2014, 13:27
|
|