UNIVERSITÁ DEGLI STUDI ROMA TRE Dipartimento di Ingegneria

UNIVERSITÁ DEGLI STUDI ROMA TRE
Dipartimento di Ingegneria
Corso di Laurea in
Ingegneria Civile per la Protezione dai Rischi Naturali
Relazione di fine tirocinio
Studente:
Lorenzo Rotondi
Tutor:
Ing. Stefano Gabriele
Anno Accademico 2014/2015
Indice
1 Introduzione
1
2 Matlab
2
3 SAP2000-matlab
5
4 Implementazione analisi
4.1 Gap . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Definizione modello per mezzo di codice
4.1.2 Risultati analisi . . . . . . . . . . . . . .
4.2 Modello mensola . . . . . . . . . . . . . . . . .
4.2.1 Definizione modello per mezzo di codice
4.2.2 Risultati analisi . . . . . . . . . . . . . .
4.3 Conclusioni . . . . . . . . . . . . . . . . . . . .
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
8
14
15
15
23
25
Capitolo 1
Introduzione
Il tesista Lorenzo Rotondi ha svolto l’attività di tirocinio presso il laboratorio di modellazione e simulazione (LaMS) internamente all’Università degli studi di Roma Tre.
L’attività svolta è stata la base per poter affrontare il successivo lavoro di tesi.
Il tirocinio ha visto il tesista alle prese con l’apprendimento del software matlab
e l’acquisizione dei principi di programmazione nel linguaggio matlab con il fine di
riuscire ad interfacciare quest’ultimo con il software di analisi agli elementi finiti SAP2000.
Questa possibilità è permessa attraverso l’utilizzo delle Application Programming Interface
(API)che permettono lo sviluppo di applicazioni esterne al software SAP2000. Il seguente
lavoro è stato necessario per affrontare le problematiche e la metodologia di lavoro adottata
per lo sviluppo dell’argomento di tesi. Inizialmente ci si è interessati allo studio e alla
comprensione del software matlab e del suo linguaggio di programmazione.
Nel capitolo 1 si introdurrà il software matlab e si spiegheranno brevemente le sue
capacità. Nel capitolo 2 è fornita un introduzione alle API di SAP2000 e alla metodologia
di accesso alla struttura interna del software tramite applicazioni esterne. Nell’ultimo
capitolo sono stati sviluppati dei codici in linguaggio matlab costituenti un’applicazione
capace di interagire con il software di analisi agli elementi finiti, vengono inoltre mostrate
le capacità di gestione dei dati di input e di elaborazione dei dati di output.
L’uso di applicazioni esterne di interfaccia con SAP2000 hanno messo in evidenza
la riduzione dei tempi di studio di un problema, specialmente se sono necessarie un
numero elevato analisi, a patto che sia redatto un corretto codice in grado di eseguire tale
procedure.
1
Capitolo 2
Matlab
Matlab è un linguaggio per la computazione tecnica. In un ambiente interattivo
esso, tramite notazione matematica, integra il calcolo numerico, la visualizzazione e la
programmazione.
Figura 2.1: Programma matlab
É pensato per le seguenti utilità:
• Matematica e calcolo;
• Sviluppo di procedura, modellistica, simulazione e prototyping;
• Disegno industriale e scientifico;
• Sviluppo di applicazione, compreso la costruzione grafica dell’interfaccia di utente.
2
Matlab si basa sul calcolo matriciale, l’elemento di base è un array che non richiede
di essere dimensionato. Ciò permette la risoluzione di molti problemi di calcolo tecnici, in
particolare quelli con formulazioni vettoriali e matriciali, attraverso algoritmi molto più
semplici e snelli rispetto a quelli che sarebbero necessari in un programma di linguaggio
scalare non interattivo. Non a caso il nome del programma matlab è un abbreviazione
per matrix laboratory. Questo tipo di dati sono, in generale, vettori bidimensionali con m
righe e n colonne i cui singoli elementi sono variabili reali oppure complesse. Una matrice
può essere creata introducendo esplicitamente i suoi valori mediante un comando di
assegnazione, oppure come risultato di comandi o funzioni predefiniti. Ad esempio il
comando:
A= [1 2 3; 4 5 6]
crea la matrice A inoltre il ; fa si che il valore della variabile non sia visualizzato a
seguito della definizione. Ovviamente matlab ha anche altri modi di immagazzinare dati
numerici e dati non numerici. L’ambiente matlab è composto da cinque parti:
• Ambiente di sviluppo.
• Un insieme di tool che facilitano l’uso di matlab. Questo include il desktop
matlab, la command window, la command history , il workspace, oltre alla sezione
help che mostra l’elenco delle procedure per le quali è disponibile una descrizione
per avere informazioni specifiche su un comando.
• La libreria di funzioni matematiche. Una vasta collezione di algoritmi che spaziano
dalle funzioni matematiche elementari fino a quelle più complesse(calcolo degli
autovalori, Fast Fourier Transform).
• Il linguaggio di programmazione. Un linguaggio di alto livello con controllo di flusso,
funzioni, strutture, input, output.
• Permette di programmare e realizzare programmi complessi.
• Supporto per i grafici. Un numero consistente di facilities per realizzare grafici a
due o tre dimensioni ma anche processing, animazioni e presentazioni.
• Matlab API. Una libreria che permette di integrare funzioni matlab con altri
linguaggi.
Molto utili per gli utenti solo le cosiddette toolboxes, queste sono delle collezioni
complete di funzioni matlab che estendono l’ambiente di matlab per risolvere particolari
categorie di problemi. Tra le varie sono disponibili negli ambiti: elaborazione dei segnali,
sistemi di controllo, simulazione e molti altri.
Matlab è un linguaggio di programmazione potente, i file che contengono codice
matlab sono chiamati M-files. Dopo aver creato un M-file usando un qualsiasi editor di
testo, tale file può essere usato come un comando od una funzione matlab. Esistono due
generi di M-file. Gli script non accettano argomenti d’entrata o di uscita, operano su dati
3
nel workspace. Quando si richiama uno script matlab esegue i comandi presenti nel file.
Gli script possono loro operare su dati esistenti nel workspace o possono creare dei nuovi
dati su cui operare. Sebbene gli script non forniscano dati di output, qualsiasi variabile
che loro creano rimane nel workspace, per essere usata in calcoli successivi. Inoltre gli
script possono produrre dei grafici usando funzioni come plot. Functions che possono
accettare argomenti d’entrata e argomenti di uscita. Il nome dell’M-file e della funzione
devono essere identici. Le funzioni operano su variabili definite nel proprio workspace,
diverso da quello a cui si accede all’ingresso di matlab.
Questa prima fase è stata incentrata sul conoscere il software e il suo linguaggio di
programmazione. Ciò ha comportato la necessità di acquisire familiarità con i vari tipi di
variabili del linguaggio, le varie funzioni predefinite nel software, le capacità grafiche e le
capacità di automatizzazione e di controllo da remoto.
4
Capitolo 3
SAP2000-matlab
Questa parte è dedicata a mostrare come usare le Open Application Programming Interface
di SAP2000 o OAPI per far partire SAP2000, costruire un modello, e lanciare l’analisi da
un applicazione esterna. In questo caso è stato utilizzato il linguaggio di programmazione
matlab sebbene anche altri linguaggi possano essere utilizzati come ad esempio Visual
Basic per accedere alle funzioni OAPI di SAP2000. Incluso con il software si trova la
documentazione OAPI che descrive ogni funzione OAPI nel dettaglio i capitoli includono:
• Introduction;
• Release Notes;
• Getting Started;
• CSi OAPI Functions;
• Exaples Codes;
• Una lista in ordine alfabetico delle funzioni;
• Funzioni Obsolete.
Per ogni funzione è specificata la sintassi, la procedura in un linguaggio Visual Basic,
i parametri necessari, la descrizione della funzione e un semplice esempio di codice
riguardante la funzione interessata. Possiamo controllare SAP2000 da un file matlab
definendo anche la geometria del modello utilizzando questo linguaggio di programmazione.
Per creare un modello bisogna eseguire tutti gli step che si eseguirebbero se si operasse
direttamente con SAP2000 solo che queste operazioni vengono condotte da dietro le
quinte attraverso un codice in linguaggio matlab. Ovviamente una buona conoscenza
del software SAP2000 è una condizione necessaria per controllare un modello attraverso
le sue OAPI.
Le Application Programming Interface (API) permettono di creare spreadsheet, plugin
e applicazioni che possono interfacciarsi con i software CSI. Le API sono compatibili
con la maggior parte dei linguaggi di programmazione inclusi Visual Basic, C++, Visual
Fortan, Python e matlab.
5
Le Application Programming Interface (API) di SAP2000 sono uno strumento di programmazione finalizzato ad offrire una possibilità di accesso all’analisi e alla progettazione
del software SAP2000, permettendo di stabilire un legame diretto, durante la run-time,
tra l’applicazione esterna e il software di analisi. In aggiunta, attraverso l’uso delle API, si
ha la possibilità di sviluppare dei plug-in che estendono il campo di utilizzo del software.
In termini di programmazione le API consistono in una libreria che offre accesso ad una
serie di oggetti e funzioni capaci di controllare in remoto il comportamento di SAP2000,
superando la procedura standard di utilizzo del software stesso. Le principali funzioni che
le API permettono sono riassunte di seguito:
• Interazione diretta ed efficace con i metodi di analisi e progettazione di SAP2000;
• Possibilità di gestire i dati sia in entrata che in uscita, two-way data flow, per
facilitare le procedure di pre e post-elaborazione;
• Compatibilità con la maggior parte dei linguaggi di programmazione;
• Sviluppo di applicazioni che restano compatibili anche con le future versioni di
SAP2000;
• Possibilità di sviluppo di una interfaccia di SAP2000 calibrata secondo le necessità
dell’utente.
Per accedere alle API è richiesta la classica istallazione di SAP2000 niente di più.
Tutte le componenti sono istallate durante il normale setup del programma. L’utilizzo
dipende in maggior parte dalla scelta del linguaggio di programmazione e dall’ambiente
di programmazione con cui ci si deve interfacciare, con questa frrase si vuole indicare che
la sintassi da utilizzare e le potenzialità di organizzazione dell’applicazione che si intende
sviluppare differiscono a seconda dei vari linguaggi. Come assistenza nell’utilizzo delle
API di SAP2000, una dettagliata documentazione è fornita attraverso l’istallazione. La
guida contiene una lista di ogni funzione a disposizione, con la rispettiva esatta sintassi,
una dettagliata descrizione degli argomenti che contiene la funzione e un esempio semplice
di applicazione. (inserire diagramma di flusso)
Matlab è in grado di leggere tutto quello che c’è sul modello. Da un punto di vista
informatico questa cosa è possibile perché esiste ed è prevista in SAP2000 un linguaggio di
scambio tra SAP2000 e altri linguaggi esterni, normalmente linguaggi di programmazione
esterna (visual basic,C++, etc. . . ) per cui si può gestire un modello in forma nascosta
non agendo direttamente sull’interfaccia di SAP2000. Ovviamente come tutti i linguaggi
di programmazione per poterlo utilizzare bisogna conoscere la sintassi per poter impostare
certe funzioni ed organizzare una procedura ma anche per ricavare e trattare i dati. In
generale, tutto ciò che si può fare normalmente tramite l’interfaccia di SAP2000 si può
fare anche da codice, persino i risultati di un analisi si possono riprendere ed elaborare
da un file già aperto. Inoltre è un ottimo mezzo nel caso in cui si debbano ripetere le
stesse analisi per un numero elevato di volte o per lavorare in maniera iterativa. Perciò
è comodo far lavorare matlab in automatico secondo un criterio prestabilito invece di
eseguire tutto manualmente, ovviamente i tempi sarebbero completamente diversi. Il
6
caso di processi iterativi è solo un semplice esempio dell’importanza di poter controllare
SAP2000 in maniera automatica dalle retrovie.
Il primo step che permette di utilizzare le CSi API da un applicazione esterna è di
collegare SAP2000 alla stessa applicazione. Per poter effettuare uno scambio di dati tra
le applicazioni esterne e SAP2000 questi bisogna che siano organizzati secondo un array
in 1 dimensione. Per far questo si introducono due linee di codice che restano immutate
per tutte le applicazioni.
Codice 3.1: Scambio dati array 1 dimensione
% pass data to Sap2000 as one - dimensional arrays
feature ( ’ COM_SafeArraySingleDim ’ , 1);
% pass non - scalar arrays to Sap2000 API by reference
feature ( ’ COM_PassSafeArrayByRef ’ , 1);
Successivamente bisogna creare un oggetto SAP2000 nell’applicazione, una volta creato
il collegamento si può aprire il software. A questo punto si può aprire un nuovo file o uno
già esistente, in generale tutti i comandi sono preceduti dalla dicitura SapObject.SapModel
per cercare di abbreviare questa scrittura tal volta conviene definire un SapModel object.
I seguenti codici eseguono quanto appena detto.
Codice 3.2: Creazione SapObject
% create Sap2000 object
SapObject = actxserver ( ’ Sap2000v16 . SapObject ’);
% create SapModel object
SapModel = SapObject . SapModel ;
% start Sap2000 application
SapObject . ApplicationStart ;
Impostare questi comandi permette di accedere alla struttura interna del software
effettuando tutte le operazioni dall’esterno. In questo caso sono state evidenziate solo le
funzioni che permettono l’interazione con applicazioni esterne e sono una serie di azioni
comuni a tutti i codici. La parte successiva dell’applicazione sarà relativa allo scopo che si
vuole e quindi cambierà da caso a caso. In questo senso lo sviluppo di un codice completo
sarà trattato nel prossimo capitolo.
7
Capitolo 4
Implementazione analisi
Scopo della seguente sezione è quella di mostrare l’interazione tra SAP2000 e matlab
attraverso dei semplici esempi. Per fare ciò sono stati realizzati degli script ad hoc che
saranno introdotti e descritti man mano. Nei paragrafi seguenti si analizzerà prima il
comportamento di un elemento non lineare della libreria di SAP2000 successivamente si
eseguirà un’analisi su delle strutture semplici schematizzate come sistemi ad 1 gdl il tutto
sfruttando le OAPI di SAP2000 e implementando un codice matlab capace di eseguire
queste operazioni.
4.1
4.1.1
Gap
Definizione modello per mezzo di codice
Il primo esempio di interazione matlab-SAP2000 è presentato di seguito e consiste nella
definizione e analisi di un elemento non linear link: il gap. Lo script realizzato è un
semplice esempio delle potenzialità delle OAPI di SAP2000 e delle capacità del software
di interagire con linguaggi di programmazione esterni.
Il link gap è un elemento che connette due nodi adiacenti e permette, per esempio,
di modellarne il contatto tra due strutture adiacenti. Si tratta di un elemento elastico
non lineare caratterizzato da una apertura in compressione e da una rigidezza elastica.
L’elemento si attiva quando i nodi alle sue estremità si avvicinano chiudendo l’apertura e
si disattiva quando si allontanano si tratta perciò di un elemento che per definizione è
funzionante solamente in compressione. Una forza di collisione si genera quando l’apertura
del gap è uguale a zero. In SAP2000 questo elemento è dotato di 6 gradi di libertà,
ogni gdl può essere attivato o meno ed avere delle determinate proprietà di rigidezza e
proprietà dissipative.
Mentre la massa del link è imputata in parti uguali ai due nodi estremi del link.
Generalmente i valori di rigidezza sono 102 − 104 volte la rigidezza degli elementi cui è
collegato. Durante un analisi non lineare una relazione forza-spostamento non lineare
viene utilizzata per i gdl cui sono state specificate proprietà non lineari. Per tutti gli
altri gdl, che al contrario non hanno specificate proprietà non lineari, sono utilizzate le
8
Figura 4.1: Schema nlink gap
caratteristiche elastiche in caso si effettui un analisi non lineare. Solo i risultati di analisi
non lineari prevedono il comportamento non lineare dell’elemento.
La relazione non lineare forza-spostamento che caratterizza l’elemento è data dalla
seguente relazione:
(
k(d + open), se d+open<0
f=
0,
altrimenti
Dove k è la rigidezza della molla , e open è l’apertura iniziale del gap che può essere
positiva o nulla.
Il codice scritto tramite linguaggio matlab permette di interagire con SAP2000
aprire l’applicazione e definire l’elemento link con successiva analisi ed estrapolazione
dei dati. Per ogni operazione che si vuole eseguire su SAP2000 bisogna scrivere la
corrispondente funzione nel codice rispettando la classe dei parametri definiti all’interno
di una funzione OAPI. La funzione che permette di definire un elemento gap e le sue
proprietà è SetGap. Aprendo la documentazione si comprende quale siano i parametri da
definire nella funzione affinché un elemento gap sia correttamente creato in SAP2000.
La sintassi della funzione è spiegata anch’essa e prevede che sia definito:
• Il nome da assegnare al link come stringa;
• I gdl attivi o no attraverso valori boolean True, False;
• I gdl fissi attraverso valori boolean True, False;
• I gdl con proprietà non lineari attraverso valori boolean True, False;
• I valori della rigidezza effettiva per ogni gdl, tramite un array di double;
9
• I valori dello smorzamento effettivo per ogni gdl, tramite un array di double;
• I valori della rigidezza non lineare per ogni gdl con proprietà non lineari, tramite
array di double;
• I valori di apertura iniziali per ogni gdl con proprietà non lineari, tramite un array
di double;
Per evitare problemi numerici è stato assegnato anche un valore minimo di massa al link,
attraverso la funzione SetWeightAndMass nella quale vanno inseriti il nome del link cui si
vuole modificare il parametro e il valore del nuovo parametro da immettere.
Definite le proprietà che deve possedere il link si procede con la sua assegnazione tra
due punti nel modello. Questa parte è possibile grazie alla funzione AddByCoord che
permette di definire, tramite coordinate da specificare nella funzione, i nodi estremi tra
cui andrà inserito il link. Infine come ultimo passo per la costruzione del modello sono
stati assegnati i vincoli ai nodi grazie alla funzione SetRestraints. Ogni vincolo, carrello,
cerniera, incastro è definito attraverso una variabile indipendente rappresentata da un
array di valori boolean True e False ad indicare se un determinato gdl è vincolato o meno.
Nel linguaggio matlab per passare da valori double a valori boolean si utilizza il comando
di matlab logical. Perciò ogni vincolo è stato definito con un array di 6 valori double
contenenti 0 o 1 e poi trasformati in valori boolean così che rispettassero la sintassi di
input della funzione SetRestraint.Nel modello un nodo è stato vincolato applicandogli un
incastro e il nodo esterno è stato lasciato libero.
La parte di codice relativa alle operazioni fino a qui descritte è riportata di seguito.
Codice 4.1: Definizione nlink gap
% GAP
% 1 DOF da assegnare al Link
DOF = logical ([1;0;0;0;0;0]);
% 2 DOF fissi
Fixed = logical ([0;0;0;0;0;0]);
% 3 NON LINEAR PROPERTIES da assegnare al Link
NLPROP = logical ([1;0;0;0;0;0]);
% 4 effective stiffness
Ke = [100000;0;0;0;0;0];
% 5 effective damping
Ce = [0;0;0;0;0;0];
% 6 initial stiffness applies for nonlinear analyses
KGAP = input ( ’ inserire K Gap [ Default : 100000]: ’);
if isempty ( KGAP )
KGAP = 100000;
end
k = [ KGAP ;0;0;0;0;0];
10
% 7 initial open GAP
op = [0.02;0;0;0;0;0];
ret = SapModel . PropLink . SetGap ( ’ GAP ’ , DOF , Fixed , NLPROP , Ke , Ce ,k , op ,0 ,0);
% set link property weight and mass
ret = SapModel . PropLink . SetWeightAndMass ( ’ GAP ’ ,0 ,0.001 ,0 ,0 ,0);
% aggiunge link tra 2 nodi
ret = SapModel . LinkObj . AddByPoint ( ’3 ’ , ’4 ’ , ’ GAP ’ ,0 , ’ ’ , ’ GAP ’);
Una volta realizzato l’elemento si passa alla definizione ed analisi dello stesso. Queste
fasi sono state fatte anch’esse sotto forma di codice. La sequenza di azioni per definire
un analisi prevede dapprima la definizione di un load pattern, l’applicazione del load
pattern al modello e infine la creazione di un load case che definisce il tipo di analisi che
si vuole effettuare. Per questa applicazione si è deciso di effettuare un analisi statica
non lineare in controllo di spostamento. In genere un’analisi in spostamento risulta più
efficace anche perché quasi sempre si conosce il range di spostamento da indagare ma non
si conoscono le entità delle forze cui sarà soggetta la struttura. Per effettuare l’analisi in
controllo di spostamento bisogna specificare un elemento da monitorare, generalmente un
nodo, e specificare lo spostamento obiettivo dell’analisi. La scelta di salvare i risultati
intermedi permette di vedere come l’elemento, più in generale la struttura, reagisce
durante l’avanzare dell’analisi. La specificata combinazione di carichi è applicata in modo
incrementale, usando gli step necessari a soddisfare l’equilibrio ed a produrre il numero
richiesto di output da salvare. Le equazioni non lineari sono risolte iterativamente ad
ogni step. Questo richiede ogni volta la risoluzione della matrice di rigidezza, le iterazioni
terminano quando la la soluzione converge.
Si definisce il load denominato forza da assegnare al nodo libero dell’elemento gap,
questo è stato fatto tramite la funzione LoadPatterns.Add che permette di definire un
nuovo load pattern assegnandogli un nome e specificando anche il tipo di load ( dead, live,
quake etc. . . ) . Mentre per assegnare il load case ad un nodo ci si è serviti della funzione
PointObj.SetLoadForce in cui va specificato il nome del nodo cui si vuole assegnare il
load pattern, il nome del load pattern stesso e il valore che deve avere tramite un array di
double in cui ogni elemento rappresenta una componente della sollecitazione.
F1 F2 F3 M1 M2 M3
Infine si è potuto definire l’analisi statica non lineare. La funzione StaticNonLinear con
le varie estensioni .SetCase, .SetLoadApplication, .SetLoads, .SetResultsSaved permettono
di definire tutti i parametri del load case. L’analisi è in controllo di spostamento e
termina quando il nodo controllato raggiunge i valori di spostamento prefissati. L’analisi
è composta da una serie di step consecutivi di cui si conservano i dati e che verranno
utilizzati nel seguito.
La parte di codice relativa alle operazioni fino a qui descritte è riportata di seguito.
Codice 4.2: Definizione analisi statica non lineare
11
% Analisi statica non lineare
% add new load pattern
ret = SapModel . LoadPatterns . Add ( ’ Forza ’ ,1);
% Assegna load to point
Value = [1;0;0;0;0;0];
ret = SapModel . PointObj . SetLoadForce ( ’4 ’ , ’ Forza ’ , Value );
% add static nonlinear load case
ret = SapModel . LoadCases . StaticNonlinear . SetCase ( ’ NLST ’);
% Definisce i parametri di applicazione del carico
LoadControl = 2;
DispType = 2;
Displ = 0.04;
Monitor =1;
DOF =1;
ret = SapModel . LoadCases . StaticNonlinear ...
... SetLoadApplication ( ’ NLST ’ ,2 ,2 , Displ ,1 , DOF , ’4 ’ , ’ ’);
% set load date
LoadT ={ ’ Load ’; ’ Load ’};
LoadN ={ ’ DEAD ’; ’ Forza ’};
SF ={ -1; -1};
ret = SapModel . LoadCases . StaticNonlinear ...
... SetLoads ( ’ NLST ’ ,2 , LoadT , LoadN , SF );
% set results saved parameters
Savestep = logical (1);
MinStep =40;
MaxStep =40;
OnlyPos = logical (0);
ret = SapModel . LoadCases . StaticNonlinear ...
... SetResultsSaved ( ’ NLST ’ , Savestep , MinStep , MaxStep , OnlyPos );
L’ultima parte del codice è relativa al lancio dell’analisi e all’estrapolazione dei dati e
alla loro elaborazione in forma grafica.
Codice 4.3: Run analysis
% Run model ( this will create the analysis model )
ret = SapModel . Analyze . RunAnalysis ;
% Seleziona il solo load case che interessa
ret = SapModel . Results . Setup . D e s e l e c t A l l C a s e s A n d C o m b o s F o r O u t p u t ;
ret = SapModel . Results . Setup . S e t Ca s e Se l e ct e d Fo r O u tp u t ( ’ NLST ’);
12
Per l’estrapolazione dei dati sono state create delle variabili nulle che successivamente
conterranno i dati di output del modello questa operazione preliminare è necessaria per
estrarre i dati altrimenti non si potrebbero leggere in alcun modo se non accedendo
direttamente al programma SAP2000. Si dice che le variabili vengono inizializzate.
Codice 4.4: Estrapolazione dati di output
% Deformazione
% Inizializza le variabili
GA PNumeroRisultati = 0;
GAPObj = cellstr ( ’ ’);
GAPElm = cellstr ( ’ ’);
GAPLoadCase = cellstr ( ’ ’);
GAPStepType = cellstr ( ’ ’);
GAPStepNum = 0;
GAPU1 = 0;
GAPU2 = 0;
GAPU3 = 0;
GAPR1 = 0;
GAPR2 = 0;
GAPR3 = 0;
% get link deformations for link object
[ ret , GAPNumeroRisultati , GAPObj , GAPElm , GAPLoadCase , GAPStepType ,...
... GAP0StepNum , GAPU1 , GAPU2 , GAPU3 , GAPR1 , GAPR2 , GAPR3 ]=...
... SapModel . Results . LinkDeformation ( ’ GAP ’ ,1 , GAPNumeroRisultati ,...
... GAPObj , GAPElm , GAPLoadCase , GAPStepType , GAPStepNum ,...
... GAPU1 , GAPU2 , GAPU3 , GAPR1 , GAPR2 , GAPR3 );
% Sollecitazioni
% Inizializza le variabili
G APNumeroRisultatiS = 0;
GAPObjS = cellstr ( ’ ’);
GAPElmS = cellstr ( ’ ’);
GAPPointElmS = cellstr ( ’ ’);
GAPLoadCaseS = cellstr ( ’ ’);
GAPStepTypeS = cellstr ( ’ ’);
GAPStepNumS = 0;
GAPPoutp = 0;
GAPV2 = 0;
GAPV3 = 0;
GAPT = 0;
GAPM2L = 0;
GAPM3L = 0;
% get link forces for link object
[ ret , GAPNumeroRisultatiS , GAPObjS , GAPElmS , GAPPointElmS ,...
... GAPLoadCaseS , GAPStepTypeS , GAPStepNumS , GAPPoutp ,...
... GAPV2 , GAPV3 , GAPT , GAPM2L , GAPM3L ] =...
... SapModel . Results . LinkForce ( ’ GAP ’ ,1 , GAPNumeroRisultatiS , GAPObjS ,...
13
... GAPElmS , GAPPointElmS , GAPLoadCaseS , GAPStepTypeS , GAPStepNumS ,...
... GAPPoutp , GAPV2 , GAPV3 , GAPT , GAPM2L , GAPM3L );
Matlab raccoglie i dati dell’analisi nelle variabili che sono state inizializzate. A questo
punto è in grado di gestirli ed elaborarli. Per esempio i dati di output dell’analisi possono
essere utilizzati dal codice per disegnare la curva forza spostamento che caratterizza il
link. L’utilizzo del codice permette anche di inserire rapidamente nel grafico i nomi degli
assi di riferimento, la leggenda e il titolo del grafico.
Codice 4.5: Elaborazione dati di output
% PLOT GRAFICO FORZA - DEFORMAZIONE
% DATI
% FORZA
N = GAPN ;
% DEFORMAZIONE
d = GAPU1
% PLOT
plot (d , N );
hold all
title ( ’ Modello giunto ’);
xlabel ( ’ Deformazione [ m ] ’);
ylabel ( ’ Forza [ kN ] ’);
Il codice introdotto in precedenza rappresenta una successione di operazioni che permette di eseguire un analisi su l’elemento gap operando solamente nell’ambiente matlab.
Una volta realizzato si possono eseguire un gran numero di analisi automatizzando l’intero
procedimento e con notevole risparmio di tempo. Per una completa trattazione del
problema i risultati dell’analisi saranno presentati nel paragrafo successivo.
4.1.2
Risultati analisi
Completato il codice lo si può far girare semplicemente lanciandolo dalla command window
di matlab. A questo punto verranno eseguite tutta la serie di operazioni specificate nel
codice e si potranno ottenere direttamente i risultati dell’analisi.
La finalità ultima dello script realizzato è quella di analizzare il comportamento del
non linear link gap. Per capire ciò si analizza la relazione forza-spostamento che lo
definisce. Questa relazione è stata rappresentata sotto forma di un diagramma che viene
riportato qui di seguito. Come si può vedere questa è caratterizzata da un primo tratto a
rigidezza nulla che coincide con la fase in cui il gap si trova ancora in una configurazione
aperta. Poi una volta che l’apertura si è chiusa il link inizia a reagire seguendo un ramo
di curva stabilito dalla rigidezza predefinita in fase di input.
Questa semplice analisi ha permesso di mostrare le potenzialità di SAP2000 di riuscire
ad interagire con applicazioni esterne al programma tramite i più diffusi linguaggi di
programmazione in uso. La creazione di un codice in linguaggio matlab ha permesso di
14
0
−20
Punto chiusura
Forza [kN]
−40
Tratto gap reagente
−60
−80
−100
−120
−0.045
−0.04
−0.035
−0.03
−0.025
−0.02
Deformazione [m]
−0.015
−0.01
−0.005
0
Figura 4.2: Relazione forza-spostamento gap
analizzare il comportamento dell’elemento gap senza operare direttamente nell’interfaccia
di SAP2000. É stato, quindi, evidenziato il comportamento non lineare del non linear
link, tracciando il legame forza-spostamento che lo caratterizza. Dato che l’elemento gap
ben si presta alla modellazione del contatto tra strutture, nel prossimo paragrafo si vedrà
un applicazione in tal senso.
4.2
4.2.1
Modello mensola
Definizione modello per mezzo di codice
Le capacità delle OAPI non si limitano alla possibilità di indagare elementi singoli ma
permettono di affrontare tutti i problemi che si affronterebbero direttamente su SAP2000.
In questo capitolo si mostrerà un’applicazione dell’elemento gap studiato precedentemente.
Il non linear link verrà inserito tra strutture adiacenti, modellate semplicemente e se ne
indagherà il comportamento sotto l’azione di una storia accelerometrica. Le strutture
avranno la stessa altezza e saranno collegate in testa tramite un elemento gap, sebbene
siano caratterizzate da una stessa altezza le strutture hanno proprietà dinamiche differenti,
ciò è stato possibile intervenendo sui modificatori di proprietà. L’analisi e l’estrapolazione
dei dati verrà interamente gestita da codice. Il semplice modello è costituito da due
sistemi a un gdl. Volendo operare in remoto vanno quindi effettuate tutte le fasi previste,
sotto forma di codice, dalla definizione del materiale alla definizione dell’analisi.
Per prima cosa si definisce un materiale. Questa funzione aggiunge un nuovo materiale
al modello basata su normative o codici e altre proprietà definite nel file ’CSiMaterialLibrary*.xml’ che si trova nella cartella di installazione. É possibile specificare il nome che
il programma dovrà assegnare alle proprietà del materiale, il tipo di materiale (acciaio,
cemento armato, alluminio, etc.), la regione (intesa come nazione) delle proprietà del
15
materiale predefinita nel file ’CSiMaterialLibrary*.xml , in questo caso Italia, la normativa
o linea guida di quella regione da seguire per la definizione del materiale in questo caso le
UNI EN 206-1:2006 e UNI 11104:2004. Il calcestruzzo utilizzato è un C32/40.
Si definisce quindi una sezione, che verrà successivamente assegnata all’elemento
creato, specificando il nome della sezione, il materiale da cui è composta tra quelli definiti
e le dimensioni. In questo caso si è utilizzata la funzione SetRectangle che prevede la
definizione di sole sezioni rettangolari, qualora si volesse una sezione dalla forma diversa
basta cambiare la funzione di input scegliendo tra quelle presenti nelle OAPI con la
funzione voluta.
Codice 4.6: Definizione materiale e sezione
% definizione materiale
ret = SapModel . PropMaterial . AddMaterial ( ’ C32 /40 ’ ,2 , ’ Italy ’ ,...
... ’ UNI EN 206 -1:2006 e UNI 11104:2004 ’ , ’ C32 /40 ’);
% definizione sezione
ret = SapModel . PropFrame . SetRectangle ( ’30 x30 ’ , ’ C32 /40 ’ ,0.3 ,0.3);
Veniamo adesso alla costruzione della geometria del modello vera e propria. Sono
stati aggiunti al modello due elementi frame specificando le coordinate del nodo i di inizio
elemento e del non j di fine elemento definendo anche il nome dell’oggetto e il materiale
che lo caratterizza. Un altra possibilità di definizione dell’oggetto è quella di inserirlo tra
due nodi già esistenti e in questo caso non si dovrebbero inserire le coordinate ma solo i
nomi dei nodi. Ai due elementi frame vanno quindi assegnati degli opportuni vincoli, in
particolare si crea un vincolo incastro alla base dell’elemento mentre il nodo in sommità
è lasciato libero. L’assegnazione dei vincoli è qui effettuata attraverso un vettore nel
quale sono specificati i gradi di libertà vincolati, in questo caso l’elemento del vettore è
True, oppure se sono gradi di libertà non vincolati e in questo caso l’elemento del vettore
corrispondente sarà False. Il vettore è composto nel seguente modo:
U 1 U 2 U 3 R1 R2 R3
Ogni grado di libertà ha un esatta posizione nel vettore e per vincolarlo o non vincolarlo
bisogna immettere i valori boolean True o False nella posizione relativa al gdl che si
vuole controllare. Costruito il modello geometrico composto da due mensole bisogna
inserire un link gap che colleghi i nodi di sommità delle due. Quindi bisogna definire
innanzitutto le proprietà del link e successivamente assegnarlo specificando i nodi di inizio
e di fine elemento. La definizione delle proprietà del gap è effettuata attraverso il comando
SetGap che è definito da una serie di parametri di ingresso tra cui il nome da assegnare
all’elemento, i gradi di libertà che si vuole siano attivi o fissi cioè vincolati, se uno specifico
gdl abbia proprietà non lineari attive o meno, la rigidezza elastica dell’elemento e il suo
eventuale coefficiente di smorzamento elastico (queste proprietà sono prese per l’elemento
qualora si effettui un’analisi elastica oppure non siano attive le non linearità del gdl), le
proprietà non lineari del link quindi rigidezza ed apertura del giunto. Solo successivamente
si può assegnare il link tra due nodi alla stregua di quanto si farebbe direttamente da
SAP2000 utilizzando il comando ’draw 2 link joint’.
16
Codice 4.7: Definizione geometria modello
% Strutture 1 e 2
% add frame object by coordinates
ret = SapModel . FrameObj . AddByCoord (0.5 , 0 , 0 , 0.5 , 0 , 4 ,...
... ’ Str1 ’ , ’ C32 /40 ’ , ’ Str1 ’);
ret = SapModel . FrameObj . AddByCoord (2 , 0 , 0 , 2 , 0 , 4 ,...
... ’ Str2 ’ , ’ C32 /40 ’ , ’ Str2 ’);
% Cambia nome dei nodi di estremita delle strutture
ret = SapModel . PointObj . ChangeName ( ’1 ’ , ’ BaseStr1 ’);
ret = SapModel . PointObj . ChangeName ( ’2 ’ , ’ TopStr1 ’);
ret = SapModel . PointObj . ChangeName ( ’3 ’ , ’ BaseStr2 ’);
ret = SapModel . PointObj . ChangeName ( ’4 ’ , ’ TopStr2 ’);
% Vincoli Nodi
Incastro = logical ([1;1;1;1;1;1]);
Cerniera = logical ([1;1;1;0;0;0]);
Carrello = logical ([0;0;1;0;0;0]);
Libero = logical ([0;0;0;0;0;0]);
% Imposta il vincolo al nodo
ret = SapModel . PointObj . SetRestraint ( ’ BaseStr1 ’ , Incastro );
ret = SapModel . PointObj . SetRestraint ( ’ TopStr1 ’ , Libero );
ret = SapModel . PointObj . SetRestraint ( ’ BaseStr2 ’ , Incastro );
ret = SapModel . PointObj . SetRestraint ( ’ TopStr2 ’ , Libero );
% Modifica proprieta delle strutture
% Modificatori
MassMod = input ( ’ inserire modificatore massa struttura 1: ’);
ValMod =[1;1;1;1;1;1; MassMod ;1];
ret = SapModel . FrameObj . SetModifiers ( ’ Str1 ’ , ValMod );
% rapporto tra le masse
RapMass = input ( ’ inserire rapporto tra le due masse ( m2 / m1 ): ’);
MassMod = MassMod * RapMass ;
ValMod =[1;1;1;1;1;1; MassMod ;1];
ret = SapModel . FrameObj . SetModifiers ( ’ Str2 ’ , ValMod );
% GAP
% 1 DOF da assegnare al Link
DOF = logical ([1;0;0;0;0;0]);
% 2 DOF fissi
Fixed = logical ([0;0;0;0;0;0]);
% 3 NON LINEAR PROPERTIES da assegnare al Link
NLPROP = logical ([1;0;0;0;0;0]);
% 4 effective stiffness
Ke = [100000;0;0;0;0;0];
% 5 effective damping
17
Ce = [0;0;0;0;0;0];
% 6 initial stiffness applies for nonlinear analyses
KGAP = input ( ’ inserire K Gap [ Default : 100000]: ’);
if isempty ( KGAP )
KGAP = 100000;
end
k = [ KGAP ;0;0;0;0;0];
% 7 initial open GAP
op = [0.02;0;0;0;0;0];
ret = SapModel . PropLink . SetGap ( ’ GAP ’ , DOF , Fixed , NLPROP , Ke , Ce ,k , op ,0 ,0);
% set link property weight and mass
ret = SapModel . PropLink . SetWeightAndMass ( ’ GAP ’ ,0 ,0.001 ,0 ,0 ,0);
% aggiunge link tra 2 nodi
ret = SapModel . LinkObj . AddByPoint ( ’ TopStr1 ’ , ’ TopStr2 ’ , ’ GAP ’ ,0 , ’ GAP ’);
Le due strutture appaiono come una coppia di pilastri affiancati l’un l’altro. Gli elementi
beam sono caratterizzati da una sezione 0.3 m x 0.3 m ed hanno altezza pari a 4 m.
Figura 4.3: Modello a 2 gdl.
Costruito il modello occorre definire un analisi e lanciarla ed estrarre i risultati. Si è
scelto di sollecitare lo schema composto dalle due mensole tramite un accelerazione alla
base. Un’analisi non linear time history è eseguita utilizzando come storia di accelerazione
18
Figura 4.4: El Centro time history
alla base la storia accelerometrica dell’evento sismico di El Centro. Se le strutture
avessero le stesse proprietà dinamiche (periodo e frequenza) queste non arriverebbero
mai al contatto perché le due strutture si muoverebbero in fase. Quindi in questo caso le
strutture sono state ideate in modo tale che abbiano caratteristiche dinamiche differenti
anche se ad una prima occhiata sembrerebbe che possiedano la stessa configurazione. In
particolare agendo sui property modifiers della struttura 2 si è definita per quest’ultima
una massa 2 volte maggiore che la struttura 1. In questo modo le due strutture hanno
diverse proprietà dinamiche e vibreranno fuori fase. Inoltre per livelli di oscillazioni di
una certa entità potranno anche collidere tra di loro. Il codice matlab relativo alla
definizione della non linear time history analysis è riportato di seguito.
Codice 4.8: Definizione non linear time history analysis
% Definisce funzione time history da un file
ret = SapModel . Func . FuncTH . SetFromFile_1 ....
...( ’ ElCentro ’ , ’ C :\ Program Files ( x86 )\...
... Computers and Structures \ SAP2000 16\ Time History Functions \....
... ELCENTRO ’ ,0 ,0 ,3 ,2 ,1);
% Define nonlinear direct history load case
ret = SapModel . LoadCases . DirHistNonlinear . SetCase ( ’ NLDTH ’);
% Define load cases
MyLoadType ={ ’ Accel ’; ’ Accel ’};
MyLoadName ={ ’ U1 ’; ’ U1 ’};
MyFunc ={ ’ ElCentro ’; ’ ElCentro ’};
ScaleFactor = input ( ’ inserire fattore di scala : ’);
19
MySF ={ ScaleFactor ;1};
MyTF ={1;1};
MyAT ={0;0};
MyCSys ={ ’ ’; ’ ’};
MyAng ={0;0};
ret = SapModel . LoadCases . DirHistNonlinear . SetLoads ( ’ NLDTH ’ ,2 , MyLoadType ,...
... MyLoadName , MyFunc , MySF , MyTF , MyAT , MyCSys , MyAng );
% set proportional damping
Damp = input ( ’ inserire smorzamento per tutti i modi : [0:1] ’);
ret = SapModel . LoadCases . DirHistNonlinear ...
... SetDampProportional ( ’ NLDTH ’ ,2 ,0 ,0 ,0.01 ,5 , Damp , Damp );
% set time step data
nstep = input ( ’ inserire numero di time step : ’);
nsize = input ( ’ inserire la grandezza dei time step : ’);
ret = SapModel . LoadCases . DirHistNonlinear . SetTimeStep ...
...( ’ NLDTH ’ , nstep , nsize );
Bisogna innanzitutto creare una funzione time history, in questo caso la funzione
stabilita è l’accelerazione al suolo di El Centro. Quest’ultima è molto diffusa nella
letteratura grazie anche al fatto che si trova in un file presente nella cartella di SAP2000.
Quindi per definire la time history si carica il file inserendo nella funzione matlab il
percorso completo del file stesso. Successivamente si definisce il load case vero e proprio e
nella sua definizione verrà specificata come azione agente la storia accelerometrica di El
Centro, agente nella direzione interessata in questo caso U1. Ovviamente questa funzione
può essere anche scalata a piacere attraverso la variabile scale factor che è l’ultimo
parametro necessario per definire l’azione di carico. Invece per portare a compimento la
definizione del load case bisogna settare il coefficiente di smorzamento che si vuole assegnare
alla struttura durante l’analisi e inoltre specificare il passo temporale di integrazione ed
il numero di punti totali. Ovviamente con l’aumentare dei punti cresce l’accuratezza
dell’analisi ma allo stesso tempo cresce l’onere computazionale aumentando i tempi di
risoluzione. Le righe di codice qui di seguito permettono infine di salvare il modello
facendo aprire direttamente la stessa finestra che si aprirebbe se si salvasse sa SAP2000
ed una volta che il modello è stato salvato attraverso la funzione RunAnalysis viene fatta
partire l’analisi.
Codice 4.9: Salvataggio e run analysis
% Salva il modello
[ nomefile , percorso ]= uiputfile ({ ’*. sdb ’ , ’ File SAP2000
(*. sdb ) ’} ,...
... ’ Salva modello ’);
ret = SapModel . File . Save ( fullfile ( percorso , nomefile ));
% Vengono salvti i risultati ad ogni step
ret = SapModel . Results . Setup . SetOptionModalHist (2);
% Run model ( this will create the analysis model )
ret = SapModel . Analyze . RunAnalysis ;
20
L’estrazione dei risultati dal modello analizzato è un altra operazione realizzabile attraverso
il codice di programmazione. In più è possibile scrivere il codice anche in modo che una
volta estratti i dati vengano elaborati e i risultati per esempio plottati in via grafica in
modo automatico. L’estrazione dei dati di output del modello è possibile creando delle
variabili vuote per ogni tipologia di dato che si vuole raccogliere e definite in modo che
rispettino la classe di variabili a cui appartengono ogni dato. Quando si esegue una tale
operazione si parla di inizializzare le variabili. Essendo i dati raccolti nelle rispettive
variabili è possibile elaborarli eseguendo delle operazioni sulle variabili stesse. In fine si
plottano i risultati graficamente.
Codice 4.10: Estrapolazione dati di output
% Spostamento Joint
% Inizializza le variabili
t1NumeroRisultati = 0;
t1Obj = cellstr ( ’ ’);
t1Elm = cellstr ( ’ ’);
t1LoadCase = cellstr ( ’ ’);
t1StepType = cellstr ( ’ ’);
t1StepNum = 0;
t1U1 = 0;
t1U2 = 0;
t1U3 = 0;
t1R1 = 0;
t1R2 = 0;
t1R3 = 0;
[ ret , t1NumeroRisultati , t1Obj , t1Elm , t1LoadCase , t1StepType ,...
... t1StepNum , t1U1 , t1U2 , t1U3 , t1R1 , t1R2 , t1R3 ]=...
... SapModel . Results . JointDispl ( ’ TopStr1 ’ , 1 , t1NumeroRisultati ,...
... t1Obj , t1Elm , t1LoadCase , t1StepType , t1StepNum ,...
... t1U1 , t1U2 , t1U3 , t1R1 , t1R2 , t1R3 );
% Inizializza le variabili
t2NumeroRisultati = 0;
t2Obj = cellstr ( ’ ’);
t2Elm = cellstr ( ’ ’);
t2LoadCase = cellstr ( ’ ’);
t2StepType = cellstr ( ’ ’);
t2StepNum = 0;
t2U1 = 0;
t2U2 = 0;
t2U3 = 0;
t2R1 = 0;
t2R2 = 0;
t2R3 = 0;
[ ret , t2NumeroRisultati , t2Obj , t2Elm , t2LoadCase , t2StepType ,...
... t2StepNum , t2U1 , t2U2 , t2U3 , t2R1 , t2R2 , t2R3 ]=...
... SapModel . Results . JointDispl ( ’ TopStr2 ’ , 1 , t2NumeroRisultati ,...
21
... t2Obj , t2Elm , t2LoadCase , t2StepType , t2StepNum ,...
... t2U1 , t2U2 , t2U3 , t2R1 , t2R2 , t2R3 );
% Deformazione
% Inizializza le variabili
GA PNumeroRisultati = 0;
GAPObj = cellstr ( ’ ’);
GAPElm = cellstr ( ’ ’);
GAPLoadCase = cellstr ( ’ ’);
GAPStepType = cellstr ( ’ ’);
GAPStepNum = 0;
GAPU1 = 0;
GAPU2 = 0;
GAPU3 = 0;
GAPR1 = 0;
GAPR2 = 0;
GAPR3 = 0;
% get link deformations for link object
[ ret , GAPNumeroRisultati , GAPObj , GAPElm , GAPLoadCase , GAPStepType ,...
... GAP0StepNum , GAPU1 , GAPU2 , GAPU3 , GAPR1 , GAPR2 , GAPR3 ]=...
... SapModel . Results . LinkDeformation ( ’ GAP ’ ,1 , GAPNumeroRisultati ,...
... GAPObj , GAPElm , GAPLoadCase , GAPStepType , GAPStepNum ,...
... GAPU1 , GAPU2 , GAPU3 , GAPR1 , GAPR2 , GAPR3 );
% Sollecitazioni
% Inizializza le variabili
G APNumeroRisultatiS = 0;
GAPObjS = cellstr ( ’ ’);
GAPElmS = cellstr ( ’ ’);
GAPPointElmS = cellstr ( ’ ’);
GAPLoadCaseS = cellstr ( ’ ’);
GAPStepTypeS = cellstr ( ’ ’);
GAPStepNumS = 0;
GAPPoutp = 0;
GAPV2 = 0;
GAPV3 = 0;
GAPT = 0;
GAPM2L = 0;
GAPM3L = 0;
% get link forces for link object
[ ret , GAPNumeroRisultatiS , GAPObjS , GAPElmS , GAPPointElmS ,...
... GAPLoadCaseS , GAPStepTypeS , GAPStepNumS , GAPPoutp ,...
... GAPV2 , GAPV3 , GAPT , GAPM2L , GAPM3L ] =...
... SapModel . Results . LinkForce ( ’ GAP ’ ,1 , GAPNumeroRisultatiS , GAPObjS ,...
... GAPElmS , GAPPointElmS , GAPLoadCaseS , GAPStepTypeS , GAPStepNumS ,...
... GAPPoutp , GAPV2 , GAPV3 , GAPT , GAPM2L , GAPM3L );
22
Codice 4.11: Elaborazione dati di output
% PLOT GRAFICO FORZA - DEFORMAZIONE
figure (1)
plot ( t1StepNum , t1U1 );
hold all
title ( ’ Spostamento TopStr1 ’);
xlabel ( ’ Tempo ( sec ) ’);
ylabel ( ’ Spostamento ( m ) ’);
figure (2)
plot ( t2StepNum , t2U1 );
hold all
title ( ’ Spostamento TopStr2 ’);
xlabel ( ’ Tempo ( sec ) ’);
ylabel ( ’ Spostamento ( m ) ’);
figure (3)
plot ( GAPStepNum , GAPN );
hold all
title ( ’ Forza gap ’);
xlabel ( ’ Tempo ( sec ) ’);
ylabel ( ’ Forza ( kN ) ’);
figure (4)
plot ( GAPStepNum , GAPU1 );
hold all
title ( ’ Deformazione gap ’);
xlabel ( ’ Tempo ( sec ) ’);
ylabel ( ’ Spostamento ( m ) ’);
La scrittura di un codice completo che va dalla definizione del modello fino all’elaborazione
dei dati non è un operazione immediata e prevede un livello sufficiente di capacità di
programmazione e per questo richiede del tempo. Però una volta messo a punto un codice
si hanno notevoli vantaggi. Nel caso in cui si abbia interesse ad eseguire numerose analisi
o se si volessero cambiare rapidamente i parametri del modello. Lanciando lo script
contenente il codice è il calcolatore che svolge tutto in automatico seguendo le righe di
codice scritte. Con la finestra di SAP2000 a vista si vedrebbe come il file evolve man
mano che lo script avanza e si assisterebbe alla creazione del modello e alla sua analisi
senza alcun ulteriore intervento esterno.
4.2.2
Risultati analisi
Lo scopo principale di connettere due strutture tramite un elemento gap è che quest’ultimo
è in grado di trasmette forze di impatto attraverso il link quando le due strutture adiacenti
si avvicinano ed entrano in contatto l’un l’altra portando a chiusura il gap di separazione
tra le strutture stesse. Il codice implementato ha permesso una rapida disamina dei risultati
dell’analisi effettuata sul modello a 2 gdl. Nel seguito si metteranno in riporteranno
23
Spostamento TopStr1
0.04
Spostamento (m)
0.03
0.02
0.01
0
−0.01
−0.02
−0.03
−0.04
0
2
4
6
Tempo (sec)
8
10
12
10
12
Figura 4.5: Spostamento sommità struttura 1
Spostamento TopStr2
0.04
0.03
Spostamento (m)
0.02
0.01
0
−0.01
−0.02
−0.03
−0.04
0
2
4
6
Tempo (sec)
8
Figura 4.6: Spostamento sommità struttura 2
gli andamenti temporali dello spostamento dei punti di sommità delle due strutture,
la deformazione dei nlink che in questo caso coincide con la variazione temporale della
distanza tra le due strutture, e lo sforzo normale agente nel non linear gap durante l’analisi.
I diagrammi di forza e deformazione del gap descrivono bene i momenti di chiusura del
gap per cui si giunge a contatto tra le strutture. Tutti questi istanti coincidono con i picchi
dell’andamento temporale della deformazione dell n link che superano in compressione
i 2cm. Negli stessi istanti temporali coincidono dei picchi di forza agente ne link che
rappresentano la forza che si scambiano le due strutture del modello quando arrivano a
contatto. Conseguentemente la storia di spostamento dei nodi di sommità degli edifici
è influenzata da questa non linearità di contatto che si manifesta istantaneamente, in
aggiunta le due storie di spostamento differiscono per via delle diverse proprietà dinamiche
che possiedono e che le portano a vibrare fuori fase.
24
Deformazione gap
0.04
Spostamento (m)
0.03
0.02
0.01
0
−0.01
−0.02
−0.03
−0.04
0
2
4
6
Tempo (sec)
8
10
12
10
12
Figura 4.7: Deformazione non linear gap
Forza gap
0
Forza (kN)
−10
−20
−30
−40
−50
0
2
4
6
Tempo (sec)
8
Figura 4.8: Forza normale non linear gap
4.3
Conclusioni
Lo scopo prefissato era quello di introdurre un nuovo approccio per effettuare analisi
attraverso il software SAP2000 implementando un codice in linguaggio di programmazione
matlab. Il suddetto scopo è stato possibile raggiungerlo utilizzando una delle ultime
tecnologie disponibili nel software SAP2000: le Application Programming Interface (API).
Per poter raggiungere questo obiettivo ed evidenziare le capacità di utilizzo delle API
sono state sviluppate due applicazioni in linguaggio di programmazione matlab che
permettono il controllo di SAP2000 da remoto. Le applicazioni create riguardano l’analisi
di elementi non lineari presenti nella libreria di SAP2000 e una semplice loro inserimento
in un modello a 2 gdl. Il codice realizzato permette la gestione dei dati di input sia di
output ed una successiva elaborazione. Il controllo dei modelli e dei risultati da una
piattaforma esterna al software di analisi Essendo le API di SAP2000 una generica
funzione che permette il controllo dell’intera struttura del software di analisi lo stile di
25
programmazione utilizzato deve essere adattato alle funzioni definite nelle linee guide.
Bisogna quindi avere conoscenza del linguaggio di programmazione utilizzato e in primo
luogo la necessaria conoscenza dell’utilizzo di SAP2000 nella procedura standard.
Il lavoro svolto nel periodo di tirocinio è servito come base per proseguire il lavoro
di tesi, nel quale è stato fatto un ampio utilizzo di applicazioni esterne a SAP2000
opportunamente organizzate per gli scopi prefissati. Infatti sono state sviluppate diverse
applicazioni aventi controllo su un gran numero di parametri del modello e su un gran
numero di analisi da eseguire e in queste circostante sono evidenti i vantaggi di utilizzare
una procedura automatizzata da remoto.
In ultima non è da dimenticare l’importanza della supervisione umana sull’applicazione
di qualsiasi procedura e la capacità dell’utente e sensibilità di selezionare le variabili di
analisi ed interpretare i risultati che in fin dei conti è l’aspetto più importante di un
analisi.
26