Verifica s.l.u.

Analisi del codice sorgente (v.1.0)

Introduzione

Esistono sicuramente programmi più completi e ricchi di funzioni legate alla metodologia agli stati limite (Esercizio e Ultimi) ma spesso ci si dimentica della necessità, penso abbastanza diffusa, di dover controllare rapidamente un piccolo progetto in maniera diretta, senza dover passare per eccezionali ma mastodontiche suite di programmi di calcolo. In più, molti programmi che sono funzionali e leggeri, non rendono disponibile il codice sorgente. Certamente questo non significa che contengano errori o bug gravi, tuttavia può essere importante per uno studente capire come funzionano software che magari hanno richiesto una grossa fatica per nascere e che spesso sono usati con una comprensibile leggerezza, dimenticando il percorso che ha portato ad una metodologia numerica così avanzata. In ogni caso il mio è un "minuscolo" progetto che spero possa risultare utile e funzionale tuttavia se si dovessero riscontrare bug o problemi Vi prego di segnalarmeli via mail o sourceforge.

Analisi della struttura di calcolo

Dopo aver recepito l'input dell'utente e aver inizializzato le variabili, il programma determina il primo punto del diagramma de interazione ponendo l'asse neutro a meno infinito ovvero facendo si che l'intera sezione lavori in trazione. Il record Rcouples[i] consente di salvare per ogni i-esima posizione dell'asse neutro, la coppia N-M resistente.


//***************************************************************
//Campo 1, fisso X a -OO => Sezione tesa, cls NON Reagente
//Entrambi i ferri al 10/1000;
//primo punto;
RCouples[i].Nrd:= -(As1*fsd)-(Ass*fsd);
RCouples[i].Mrd:= -(fsd*As1*((h/2)-d1))+(fsd*Ass*(d-(h/2)));
n1:=RCouples[i].Nrd;//salvo per traccia di campi di rottura
m1:=RCouples[i].Mrd;


Dopo aver preso alcuni punti tra -OO e il bordo superiore della sezione, possiamo subito vedere lo schema tipo dell'analisi effettuata dal programma: ciclo while che scandisce la sezione con passo di un 1mm e che di volta in volta sfrutta le varie equazioni di similitudine tra triangoli per determinare la deformazione del calcestruzzo (epc) dell'armatura compressa (eps1) e di quella tesa (eps), seguito da l'impostazione delle equazioni per la coppia resistente.


//***************************************************************
//Campo 2, polo = 10/1000 dell'acciaio inferiore As
while X<(d*clscollapse) do
begin
epc:=(10/1000)*(X/(d-X));
eps1:=epc*(X-d1)/X; //ha segno !

if ABS(eps1) < ABS((fsd/Rect.Es)) then //se elastico...
sgs1:=eps1*Rect.Es
else //...altrimenti...
sgs1:=SIGN(eps1)*fsd;
Rcouples[i].Nrd:=(PRCoef.GetPsi(epc)*b*fcd1*X) + (As1*sgs1) - Ass*fsd;
Rcouples[i].Mrd:=(PrCoef.GetPsi(epc)*b*fcd1*X)*((h/2)-(PrCoef.GetChi(epc)*X) )+
As1*sgs1*((h/2)-d1) + fsd*Ass*(d-(h/2));
X:=X+passo;
i:=i+1;
end;

Le funzioni GetPsi e GetChi, calcolano dei coefficienti moltiplicativi che permettono di determinare l'area dello stressblock sul cls e il punto di applicazione della compressione in funzione della deformazione massima del calcestruzzo. Questa puņ essere "reale" (nel caso della sezione rettangolare ) o "fittizia" se il programma sta deteterminando degli stress block sulle flangie delle sezioni a T, dove la geometria del problema fa sì che lo SB non sia completamente sviluppato. In quest'ultimo caso, il programma determina uno SB integrale, uno da rimuovere ed effettua il calcolo di risultante e baricentro (pto di applicazione della risultante) tramite sottrazione. Da notare che in questo modo non si aggiungono approssimazioni alla procedura: infatti non si fanno ipotesi di considerare costante la deformazione sulle ali della sezione a T e neppure si trascura il fatto che il diagramma parabola-rettangolo si sviluppa "a cavallo" della flangia.

L'uso dei coefficienti di riempimento e posizione derivano dallo sviluppo dell'equazione che descrive il diagramma parabola-rettangolo e più direttamente dal calcolo (integrale) per ricavare area e baricentro della parabola. Una tabella che li descrive puņ essere rintracciata nel bollettino CEB 123.

Poi, di volta in volta, l'applicazione impone detrminate posizioni dell'asse neutro per determinare esattamente i punti che separano i campi di rottura:

//***************************************************************
n7:=RCouples[i].Nrd;//salvo per traccia di campi di rottura
m7:=RCouples[i].Mrd;


Alla fine, l'array RCouples risulta contenere tutte le coppie (N,M) che costituiscono il diagramma di interazione e il suo ultimo elemento valido viene tracciato con l'indice Last_i



SourceForge.net Logo