UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea...

28
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

Transcript of UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea...

Page 1: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

UNIVERSITÁ DEGLI STUDI ROMA TRE

Dipartimento di Ingegneria

Corso di Laurea inIngegneria Civile per la Protezione dai Rischi Naturali

Relazione di fine tirocinio

Studente:Lorenzo Rotondi

Tutor:Ing. Stefano Gabriele

Anno Accademico 2014/2015

Page 2: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Indice

1 Introduzione 1

2 Matlab 2

3 SAP2000-matlab 5

4 Implementazione analisi 84.1 Gap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4.1.1 Definizione modello per mezzo di codice . . . . . . . . . . . . . . . 84.1.2 Risultati analisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2 Modello mensola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154.2.1 Definizione modello per mezzo di codice . . . . . . . . . . . . . . . 154.2.2 Risultati analisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.3 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

i

Page 3: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Capitolo 1

Introduzione

Il tesista Lorenzo Rotondi ha svolto l’attività di tirocinio presso il laboratorio di mo-dellazione 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 matlabe l’acquisizione dei principi di programmazione nel linguaggio matlab con il fine diriuscire 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 seguentelavoro è stato necessario per affrontare le problematiche e la metodologia di lavoro adottataper lo sviluppo dell’argomento di tesi. Inizialmente ci si è interessati allo studio e allacomprensione del software matlab e del suo linguaggio di programmazione.

Nel capitolo 1 si introdurrà il software matlab e si spiegheranno brevemente le suecapacità. Nel capitolo 2 è fornita un introduzione alle API di SAP2000 e alla metodologiadi accesso alla struttura interna del software tramite applicazioni esterne. Nell’ultimocapitolo sono stati sviluppati dei codici in linguaggio matlab costituenti un’applicazionecapace di interagire con il software di analisi agli elementi finiti, vengono inoltre mostratele 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 evidenzala riduzione dei tempi di studio di un problema, specialmente se sono necessarie unnumero elevato analisi, a patto che sia redatto un corretto codice in grado di eseguire taleprocedure.

1

Page 4: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Capitolo 2

Matlab

Matlab è un linguaggio per la computazione tecnica. In un ambiente interattivoesso, tramite notazione matematica, integra il calcolo numerico, la visualizzazione e laprogrammazione.

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

Page 5: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Matlab si basa sul calcolo matriciale, l’elemento di base è un array che non richiededi essere dimensionato. Ciò permette la risoluzione di molti problemi di calcolo tecnici, inparticolare quelli con formulazioni vettoriali e matriciali, attraverso algoritmi molto piùsemplici e snelli rispetto a quelli che sarebbero necessari in un programma di linguaggioscalare non interattivo. Non a caso il nome del programma matlab è un abbreviazioneper matrix laboratory. Questo tipo di dati sono, in generale, vettori bidimensionali con mrighe e n colonne i cui singoli elementi sono variabili reali oppure complesse. Una matricepuò essere creata introducendo esplicitamente i suoi valori mediante un comando diassegnazione, oppure come risultato di comandi o funzioni predefiniti. Ad esempio ilcomando:

A= [1 2 3; 4 5 6]

crea la matrice A inoltre il ; fa si che il valore della variabile non sia visualizzato aseguito della definizione. Ovviamente matlab ha anche altri modi di immagazzinare datinumerici 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 desktopmatlab, la command window, la command history , il workspace, oltre alla sezionehelp che mostra l’elenco delle procedure per le quali è disponibile una descrizioneper avere informazioni specifiche su un comando.

• La libreria di funzioni matematiche. Una vasta collezione di algoritmi che spazianodalle funzioni matematiche elementari fino a quelle più complesse(calcolo degliautovalori, 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 adue o tre dimensioni ma anche processing, animazioni e presentazioni.

• Matlab API. Una libreria che permette di integrare funzioni matlab con altrilinguaggi.

Molto utili per gli utenti solo le cosiddette toolboxes, queste sono delle collezionicomplete di funzioni matlab che estendono l’ambiente di matlab per risolvere particolaricategorie 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 codicematlab sono chiamati M-files. Dopo aver creato un M-file usando un qualsiasi editor ditesto, tale file può essere usato come un comando od una funzione matlab. Esistono duegeneri di M-file. Gli script non accettano argomenti d’entrata o di uscita, operano su dati

3

Page 6: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

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 nuovidati su cui operare. Sebbene gli script non forniscano dati di output, qualsiasi variabileche loro creano rimane nel workspace, per essere usata in calcoli successivi. Inoltre gliscript possono produrre dei grafici usando funzioni come plot. Functions che possonoaccettare argomenti d’entrata e argomenti di uscita. Il nome dell’M-file e della funzionedevono 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 diprogrammazione. Ciò ha comportato la necessità di acquisire familiarità con i vari tipi divariabili del linguaggio, le varie funzioni predefinite nel software, le capacità grafiche e lecapacità di automatizzazione e di controllo da remoto.

4

Page 7: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Capitolo 3

SAP2000-matlab

Questa parte è dedicata a mostrare come usare le Open Application Programming Interfacedi SAP2000 o OAPI per far partire SAP2000, costruire un modello, e lanciare l’analisi daun applicazione esterna. In questo caso è stato utilizzato il linguaggio di programmazionematlab sebbene anche altri linguaggi possano essere utilizzati come ad esempio VisualBasic per accedere alle funzioni OAPI di SAP2000. Incluso con il software si trova ladocumentazione 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 codiceriguardante la funzione interessata. Possiamo controllare SAP2000 da un file matlabdefinendo anche la geometria del modello utilizzando questo linguaggio di programmazione.Per creare un modello bisogna eseguire tutti gli step che si eseguirebbero se si operassedirettamente con SAP2000 solo che queste operazioni vengono condotte da dietro lequinte attraverso un codice in linguaggio matlab. Ovviamente una buona conoscenzadel software SAP2000 è una condizione necessaria per controllare un modello attraversole sue OAPI.

Le Application Programming Interface (API) permettono di creare spreadsheet, plugine applicazioni che possono interfacciarsi con i software CSI. Le API sono compatibilicon la maggior parte dei linguaggi di programmazione inclusi Visual Basic, C++, VisualFortan, Python e matlab.

5

Page 8: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Le Application Programming Interface (API) di SAP2000 sono uno strumento di pro-grammazione finalizzato ad offrire una possibilità di accesso all’analisi e alla progettazionedel 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, siha 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 unaserie 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 chele 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, perfacilitare 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 diSAP2000;

• 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’utilizzodipende in maggior parte dalla scelta del linguaggio di programmazione e dall’ambientedi programmazione con cui ci si deve interfacciare, con questa frrase si vuole indicare chela sintassi da utilizzare e le potenzialità di organizzazione dell’applicazione che si intendesviluppare differiscono a seconda dei vari linguaggi. Come assistenza nell’utilizzo delleAPI di SAP2000, una dettagliata documentazione è fornita attraverso l’istallazione. Laguida 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 semplicedi applicazione. (inserire diagramma di flusso)

Matlab è in grado di leggere tutto quello che c’è sul modello. Da un punto di vistainformatico questa cosa è possibile perché esiste ed è prevista in SAP2000 un linguaggio discambio tra SAP2000 e altri linguaggi esterni, normalmente linguaggi di programmazioneesterna (visual basic,C++, etc. . . ) per cui si può gestire un modello in forma nascostanon agendo direttamente sull’interfaccia di SAP2000. Ovviamente come tutti i linguaggidi programmazione per poterlo utilizzare bisogna conoscere la sintassi per poter impostarecerte funzioni ed organizzare una procedura ma anche per ricavare e trattare i dati. Ingenerale, 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 elaborareda un file già aperto. Inoltre è un ottimo mezzo nel caso in cui si debbano ripetere lestesse 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 dieseguire tutto manualmente, ovviamente i tempi sarebbero completamente diversi. Il

6

Page 9: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

caso di processi iterativi è solo un semplice esempio dell’importanza di poter controllareSAP2000 in maniera automatica dalle retrovie.

Il primo step che permette di utilizzare le CSi API da un applicazione esterna è dicollegare SAP2000 alla stessa applicazione. Per poter effettuare uno scambio di dati trale applicazioni esterne e SAP2000 questi bisogna che siano organizzati secondo un arrayin 1 dimensione. Per far questo si introducono due linee di codice che restano immutateper 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 referencefeature(’COM_PassSafeArrayByRef ’, 1);

Successivamente bisogna creare un oggetto SAP2000 nell’applicazione, una volta creatoil collegamento si può aprire il software. A questo punto si può aprire un nuovo file o unogià esistente, in generale tutti i comandi sono preceduti dalla dicitura SapObject.SapModelper 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 objectSapModel = SapObject.SapModel;

% start Sap2000 applicationSapObject.ApplicationStart;

Impostare questi comandi permette di accedere alla struttura interna del softwareeffettuando tutte le operazioni dall’esterno. In questo caso sono state evidenziate solo lefunzioni che permettono l’interazione con applicazioni esterne e sono una serie di azionicomuni a tutti i codici. La parte successiva dell’applicazione sarà relativa allo scopo che sivuole e quindi cambierà da caso a caso. In questo senso lo sviluppo di un codice completosarà trattato nel prossimo capitolo.

7

Page 10: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Capitolo 4

Implementazione analisi

Scopo della seguente sezione è quella di mostrare l’interazione tra SAP2000 e matlabattraverso dei semplici esempi. Per fare ciò sono stati realizzati degli script ad hoc chesaranno introdotti e descritti man mano. Nei paragrafi seguenti si analizzerà prima ilcomportamento di un elemento non lineare della libreria di SAP2000 successivamente sieseguirà un’analisi su delle strutture semplici schematizzate come sistemi ad 1 gdl il tuttosfruttando le OAPI di SAP2000 e implementando un codice matlab capace di eseguirequeste operazioni.

4.1 Gap

4.1.1 Definizione modello per mezzo di codice

Il primo esempio di interazione matlab-SAP2000 è presentato di seguito e consiste nelladefinizione e analisi di un elemento non linear link: il gap. Lo script realizzato è unsemplice esempio delle potenzialità delle OAPI di SAP2000 e delle capacità del softwaredi 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 elasticonon 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 esi 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’aperturadel 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 eproprietà 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 lineareviene utilizzata per i gdl cui sono state specificate proprietà non lineari. Per tutti glialtri gdl, che al contrario non hanno specificate proprietà non lineari, sono utilizzate le

8

Page 11: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Figura 4.1: Schema nlink gap

caratteristiche elastiche in caso si effettui un analisi non lineare. Solo i risultati di analisinon lineari prevedono il comportamento non lineare dell’elemento.

La relazione non lineare forza-spostamento che caratterizza l’elemento è data dallaseguente relazione:

f =

{k(d+ open), se d+open<00, altrimenti

Dove k è la rigidezza della molla , e open è l’apertura iniziale del gap che può esserepositiva o nulla.

Il codice scritto tramite linguaggio matlab permette di interagire con SAP2000aprire l’applicazione e definire l’elemento link con successiva analisi ed estrapolazionedei dati. Per ogni operazione che si vuole eseguire su SAP2000 bisogna scrivere lacorrispondente funzione nel codice rispettando la classe dei parametri definiti all’internodi una funzione OAPI. La funzione che permette di definire un elemento gap e le sueproprietà è SetGap. Aprendo la documentazione si comprende quale siano i parametri dadefinire 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

Page 12: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

• 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, tramitearray di double;

• I valori di apertura iniziali per ogni gdl con proprietà non lineari, tramite un arraydi 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 sivuole 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 tradue punti nel modello. Questa parte è possibile grazie alla funzione AddByCoord chepermette di definire, tramite coordinate da specificare nella funzione, i nodi estremi tracui andrà inserito il link. Infine come ultimo passo per la costruzione del modello sonostati assegnati i vincoli ai nodi grazie alla funzione SetRestraints. Ogni vincolo, carrello,cerniera, incastro è definito attraverso una variabile indipendente rappresentata da unarray 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 comandodi matlab logical. Perciò ogni vincolo è stato definito con un array di 6 valori doublecontenenti 0 o 1 e poi trasformati in valori boolean così che rispettassero la sintassi diinput della funzione SetRestraint.Nel modello un nodo è stato vincolato applicandogli unincastro 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 LinkDOF = logical ([1;0;0;0;0;0]);

% 2 DOF fissiFixed=logical ([0;0;0;0;0;0]);

% 3 NON LINEAR PROPERTIES da assegnare al LinkNLPROP = logical ([1;0;0;0;0;0]);

% 4 effective stiffnessKe = [100000;0;0;0;0;0];

% 5 effective dampingCe = [0;0;0;0;0;0];

% 6 initial stiffness applies for nonlinear analysesKGAP=input(’inserire K Gap [Default: 100000]: ’);if isempty(KGAP)

KGAP = 100000;endk = [KGAP ;0;0;0;0;0];

10

Page 13: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

% 7 initial open GAPop = [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 massret = SapModel.PropLink.SetWeightAndMass(’GAP ’,0,0.001,0,0,0);

% aggiunge link tra 2 nodiret = SapModel.LinkObj.AddByPoint(’3’,’4’,’GAP ’,0,’’,’GAP ’);

Una volta realizzato l’elemento si passa alla definizione ed analisi dello stesso. Questefasi sono state fatte anch’esse sotto forma di codice. La sequenza di azioni per definireun analisi prevede dapprima la definizione di un load pattern, l’applicazione del loadpattern al modello e infine la creazione di un load case che definisce il tipo di analisi chesi vuole effettuare. Per questa applicazione si è deciso di effettuare un analisi staticanon 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 nonsi conoscono le entità delle forze cui sarà soggetta la struttura. Per effettuare l’analisi incontrollo di spostamento bisogna specificare un elemento da monitorare, generalmente unnodo, e specificare lo spostamento obiettivo dell’analisi. La scelta di salvare i risultatiintermedi permette di vedere come l’elemento, più in generale la struttura, reagiscedurante l’avanzare dell’analisi. La specificata combinazione di carichi è applicata in modoincrementale, usando gli step necessari a soddisfare l’equilibrio ed a produrre il numerorichiesto di output da salvare. Le equazioni non lineari sono risolte iterativamente adogni step. Questo richiede ogni volta la risoluzione della matrice di rigidezza, le iterazioniterminano 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 unnuovo 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 funzionePointObj.SetLoadForce in cui va specificato il nome del nodo cui si vuole assegnare ilload pattern, il nome del load pattern stesso e il valore che deve avere tramite un array didouble 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 conle varie estensioni .SetCase, .SetLoadApplication, .SetLoads, .SetResultsSaved permettonodi definire tutti i parametri del load case. L’analisi è in controllo di spostamento etermina 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 verrannoutilizzati 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

Page 14: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

% Analisi statica non lineare% add new load patternret = SapModel.LoadPatterns.Add(’Forza ’,1);

% Assegna load to pointValue= [1;0;0;0;0;0];

ret = SapModel.PointObj.SetLoadForce(’4’,’Forza ’,Value);

% add static nonlinear load caseret = SapModel.LoadCases.StaticNonlinear.SetCase(’NLST ’);

% Definisce i parametri di applicazione del caricoLoadControl = 2;DispType = 2;Displ = 0.04;Monitor =1;DOF =1;

ret = SapModel.LoadCases.StaticNonlinear ...... SetLoadApplication(’NLST ’,2,2,Displ ,1,DOF ,’4’,’’);

% set load dateLoadT={’Load ’;’Load ’};LoadN={’DEAD ’;’Forza ’};SF={ -1; -1};

ret = SapModel.LoadCases.StaticNonlinear ...... SetLoads(’NLST ’,2, LoadT ,LoadN ,SF);

% set results saved parametersSavestep=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 ealla 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 interessaret = SapModel.Results.Setup.DeselectAllCasesAndCombosForOutput;ret = SapModel.Results.Setup.SetCaseSelectedForOutput(’NLST ’);

12

Page 15: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Per l’estrapolazione dei dati sono state create delle variabili nulle che successivamenteconterranno i dati di output del modello questa operazione preliminare è necessaria perestrarre i dati altrimenti non si potrebbero leggere in alcun modo se non accedendodirettamente al programma SAP2000. Si dice che le variabili vengono inizializzate.

Codice 4.4: Estrapolazione dati di output

%Deformazione

%Inizializza le variabiliGAPNumeroRisultati = 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 variabiliGAPNumeroRisultatiS = 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

Page 16: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

... GAPElmS ,GAPPointElmS ,GAPLoadCaseS ,GAPStepTypeS ,GAPStepNumS ,...

... GAPPoutp ,GAPV2 ,GAPV3 ,GAPT ,GAPM2L ,GAPM3L );

Matlab raccoglie i dati dell’analisi nelle variabili che sono state inizializzate. A questopunto è in grado di gestirli ed elaborarli. Per esempio i dati di output dell’analisi possonoessere utilizzati dal codice per disegnare la curva forza spostamento che caratterizza illink. L’utilizzo del codice permette anche di inserire rapidamente nel grafico i nomi degliassi di riferimento, la leggenda e il titolo del grafico.

Codice 4.5: Elaborazione dati di output

% PLOT GRAFICO FORZA -DEFORMAZIONE

%DATI%FORZAN=GAPN;

%DEFORMAZIONEd=GAPU1

%PLOTplot(d,N);hold alltitle(’Modello giunto ’);xlabel(’Deformazione [m]’);ylabel(’Forza [kN]’);

Il codice introdotto in precedenza rappresenta una successione di operazioni che per-mette 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’interoprocedimento e con notevole risparmio di tempo. Per una completa trattazione delproblema 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 windowdi matlab. A questo punto verranno eseguite tutta la serie di operazioni specificate nelcodice e si potranno ottenere direttamente i risultati dell’analisi.

La finalità ultima dello script realizzato è quella di analizzare il comportamento delnon linear link gap. Per capire ciò si analizza la relazione forza-spostamento che lodefinisce. Questa relazione è stata rappresentata sotto forma di un diagramma che vieneriportato qui di seguito. Come si può vedere questa è caratterizzata da un primo tratto arigidezza nulla che coincide con la fase in cui il gap si trova ancora in una configurazioneaperta. Poi una volta che l’apertura si è chiusa il link inizia a reagire seguendo un ramodi curva stabilito dalla rigidezza predefinita in fase di input.

Questa semplice analisi ha permesso di mostrare le potenzialità di SAP2000 di riusciread interagire con applicazioni esterne al programma tramite i più diffusi linguaggi diprogrammazione in uso. La creazione di un codice in linguaggio matlab ha permesso di

14

Page 17: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

−0.045 −0.04 −0.035 −0.03 −0.025 −0.02 −0.015 −0.01 −0.005 0−120

−100

−80

−60

−40

−20

0

Deformazione [m]

For

za [k

N]

Punto chiusura

Tratto gap reagente

Figura 4.2: Relazione forza-spostamento gap

analizzare il comportamento dell’elemento gap senza operare direttamente nell’interfacciadi SAP2000. É stato, quindi, evidenziato il comportamento non lineare del non linearlink, tracciando il legame forza-spostamento che lo caratterizza. Dato che l’elemento gapben si presta alla modellazione del contatto tra strutture, nel prossimo paragrafo si vedràun applicazione in tal senso.

4.2 Modello mensola

4.2.1 Definizione modello per mezzo di codice

Le capacità delle OAPI non si limitano alla possibilità di indagare elementi singoli mapermettono 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 neindagherà il comportamento sotto l’azione di una storia accelerometrica. Le struttureavranno la stessa altezza e saranno collegate in testa tramite un elemento gap, sebbenesiano caratterizzate da una stessa altezza le strutture hanno proprietà dinamiche differenti,ciò è stato possibile intervenendo sui modificatori di proprietà. L’analisi e l’estrapolazionedei dati verrà interamente gestita da codice. Il semplice modello è costituito da duesistemi 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 materialeal modello basata su normative o codici e altre proprietà definite nel file ’CSiMaterialLi-brary*.xml’ che si trova nella cartella di installazione. É possibile specificare il nome cheil 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

Page 18: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

materiale predefinita nel file ’CSiMaterialLibrary*.xml , in questo caso Italia, la normativao linea guida di quella regione da seguire per la definizione del materiale in questo caso leUNI EN 206-1:2006 e UNI 11104:2004. Il calcestruzzo utilizzato è un C32/40.

Si definisce quindi una sezione, che verrà successivamente assegnata all’elementocreato, specificando il nome della sezione, il materiale da cui è composta tra quelli definitie le dimensioni. In questo caso si è utilizzata la funzione SetRectangle che prevede ladefinizione di sole sezioni rettangolari, qualora si volesse una sezione dalla forma diversabasta cambiare la funzione di input scegliendo tra quelle presenti nelle OAPI con lafunzione voluta.

Codice 4.6: Definizione materiale e sezione

%definizione materialeret = SapModel.PropMaterial.AddMaterial(’C32/40’,2,’Italy ’,......’UNI EN 206 -1:2006 e UNI 11104:2004 ’ , ’ C32/40’);

%definizione sezioneret = SapModel.PropFrame.SetRectangle (’30x30 ’,’C32 /40 ’ ,0.3 ,0.3);

Veniamo adesso alla costruzione della geometria del modello vera e propria. Sonostati aggiunti al modello due elementi frame specificando le coordinate del nodo i di inizioelemento e del non j di fine elemento definendo anche il nome dell’oggetto e il materialeche lo caratterizza. Un altra possibilità di definizione dell’oggetto è quella di inserirlo tradue nodi già esistenti e in questo caso non si dovrebbero inserire le coordinate ma solo inomi dei nodi. Ai due elementi frame vanno quindi assegnati degli opportuni vincoli, inparticolare 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 nelquale 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 vettorecorrispondente sarà False. Il vettore è composto nel seguente modo:[

U1 U2 U3 R1 R2 R3]

Ogni grado di libertà ha un esatta posizione nel vettore e per vincolarlo o non vincolarlobisogna immettere i valori boolean True o False nella posizione relativa al gdl che sivuole controllare. Costruito il modello geometrico composto da due mensole bisognainserire un link gap che colleghi i nodi di sommità delle due. Quindi bisogna definireinnanzitutto le proprietà del link e successivamente assegnarlo specificando i nodi di inizioe di fine elemento. La definizione delle proprietà del gap è effettuata attraverso il comandoSetGap che è definito da una serie di parametri di ingresso tra cui il nome da assegnareall’elemento, i gradi di libertà che si vuole siano attivi o fissi cioè vincolati, se uno specificogdl abbia proprietà non lineari attive o meno, la rigidezza elastica dell’elemento e il suoeventuale coefficiente di smorzamento elastico (queste proprietà sono prese per l’elementoqualora si effettui un’analisi elastica oppure non siano attive le non linearità del gdl), leproprietà non lineari del link quindi rigidezza ed apertura del giunto. Solo successivamentesi può assegnare il link tra due nodi alla stregua di quanto si farebbe direttamente daSAP2000 utilizzando il comando ’draw 2 link joint’.

16

Page 19: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Codice 4.7: Definizione geometria modello

%Strutture 1 e 2% add frame object by coordinatesret = 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 struttureret = SapModel.PointObj.ChangeName(’1’, ’BaseStr1 ’);ret = SapModel.PointObj.ChangeName(’2’, ’TopStr1 ’);ret = SapModel.PointObj.ChangeName(’3’, ’BaseStr2 ’);ret = SapModel.PointObj.ChangeName(’4’, ’TopStr2 ’);

% Vincoli NodiIncastro = 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 nodoret = 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% ModificatoriMassMod=input(’inserire modificatore massa struttura 1: ’);ValMod =[1;1;1;1;1;1; MassMod ;1];ret = SapModel.FrameObj.SetModifiers(’Str1 ’, ValMod );

% rapporto tra le masseRapMass=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 LinkDOF = logical ([1;0;0;0;0;0]);

% 2 DOF fissiFixed=logical ([0;0;0;0;0;0]);

% 3 NON LINEAR PROPERTIES da assegnare al LinkNLPROP = logical ([1;0;0;0;0;0]);

% 4 effective stiffnessKe = [100000;0;0;0;0;0];

% 5 effective damping

17

Page 20: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Ce = [0;0;0;0;0;0];

% 6 initial stiffness applies for nonlinear analysesKGAP=input(’inserire K Gap [Default: 100000]: ’);if isempty(KGAP)

KGAP = 100000;endk = [KGAP ;0;0;0;0;0];

% 7 initial open GAPop = [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 massret = SapModel.PropLink.SetWeightAndMass(’GAP ’,0,0.001,0,0,0);

% aggiunge link tra 2 nodiret = SapModel.LinkObj.AddByPoint(’TopStr1 ’,’TopStr2 ’,’GAP ’,0,’GAP ’);

Le due strutture appaiono come una coppia di pilastri affiancati l’un l’altro. Gli elementibeam 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 allabase. Un’analisi non linear time history è eseguita utilizzando come storia di accelerazione

18

Page 21: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Figura 4.4: El Centro time history

alla base la storia accelerometrica dell’evento sismico di El Centro. Se le struttureavessero le stesse proprietà dinamiche (periodo e frequenza) queste non arriverebberomai al contatto perché le due strutture si muoverebbero in fase. Quindi in questo caso lestrutture sono state ideate in modo tale che abbiano caratteristiche dinamiche differentianche se ad una prima occhiata sembrerebbe che possiedano la stessa configurazione. Inparticolare agendo sui property modifiers della struttura 2 si è definita per quest’ultimauna massa 2 volte maggiore che la struttura 1. In questo modo le due strutture hannodiverse proprietà dinamiche e vibreranno fuori fase. Inoltre per livelli di oscillazioni diuna certa entità potranno anche collidere tra di loro. Il codice matlab relativo alladefinizione della non linear time history analysis è riportato di seguito.

Codice 4.8: Definizione non linear time history analysis

% Definisce funzione time history da un fileret = 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 caseret = SapModel.LoadCases.DirHistNonlinear.SetCase(’NLDTH ’);

%Define load casesMyLoadType ={’Accel ’;’Accel ’};MyLoadName ={’U1 ’;’U1 ’};MyFunc={’ElCentro ’;’ElCentro ’};ScaleFactor=input(’inserire fattore di scala: ’);

19

Page 22: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

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 dampingDamp=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 datanstep=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 funzionestabilita è l’accelerazione al suolo di El Centro. Quest’ultima è molto diffusa nellaletteratura 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 ilpercorso completo del file stesso. Successivamente si definisce il load case vero e proprio enella sua definizione verrà specificata come azione agente la storia accelerometrica di ElCentro, agente nella direzione interessata in questo caso U1. Ovviamente questa funzionepuò essere anche scalata a piacere attraverso la variabile scale factor che è l’ultimoparametro necessario per definire l’azione di carico. Invece per portare a compimento ladefinizione del load case bisogna settare il coefficiente di smorzamento che si vuole assegnarealla struttura durante l’analisi e inoltre specificare il passo temporale di integrazione edil numero di punti totali. Ovviamente con l’aumentare dei punti cresce l’accuratezzadell’analisi ma allo stesso tempo cresce l’onere computazionale aumentando i tempi dirisoluzione. Le righe di codice qui di seguito permettono infine di salvare il modellofacendo aprire direttamente la stessa finestra che si aprirebbe se si salvasse sa SAP2000ed una volta che il modello è stato salvato attraverso la funzione RunAnalysis viene fattapartire 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 stepret = SapModel.Results.Setup.SetOptionModalHist (2);%Run model (this will create the analysis model)ret = SapModel.Analyze.RunAnalysis;

20

Page 23: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

L’estrazione dei risultati dal modello analizzato è un altra operazione realizzabile attraversoil codice di programmazione. In più è possibile scrivere il codice anche in modo che unavolta estratti i dati vengano elaborati e i risultati per esempio plottati in via grafica inmodo automatico. L’estrazione dei dati di output del modello è possibile creando dellevariabili vuote per ogni tipologia di dato che si vuole raccogliere e definite in modo cherispettino la classe di variabili a cui appartengono ogni dato. Quando si esegue una taleoperazione si parla di inizializzare le variabili. Essendo i dati raccolti nelle rispettivevariabili è possibile elaborarli eseguendo delle operazioni sulle variabili stesse. In fine siplottano i risultati graficamente.

Codice 4.10: Estrapolazione dati di output

%Spostamento Joint

%Inizializza le variabilit1NumeroRisultati = 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 variabilit2NumeroRisultati = 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

Page 24: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

... t2Obj , t2Elm , t2LoadCase , t2StepType , t2StepNum ,...

... t2U1 , t2U2 , t2U3 , t2R1 , t2R2 , t2R3);

%Deformazione

%Inizializza le variabiliGAPNumeroRisultati = 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 variabiliGAPNumeroRisultatiS = 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

Page 25: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

Codice 4.11: Elaborazione dati di output

% PLOT GRAFICO FORZA -DEFORMAZIONE

figure (1)plot(t1StepNum ,t1U1);hold alltitle(’Spostamento TopStr1 ’);xlabel(’Tempo (sec)’);ylabel(’Spostamento (m)’);

figure (2)plot(t2StepNum ,t2U1);hold alltitle(’Spostamento TopStr2 ’);xlabel(’Tempo (sec)’);ylabel(’Spostamento (m)’);

figure (3)plot(GAPStepNum ,GAPN);hold alltitle(’Forza gap ’);xlabel(’Tempo (sec)’);ylabel(’Forza (kN)’);

figure (4)plot(GAPStepNum ,GAPU1);hold alltitle(’Deformazione gap ’);xlabel(’Tempo (sec)’);ylabel(’Spostamento (m)’);

La scrittura di un codice completo che va dalla definizione del modello fino all’elaborazionedei dati non è un operazione immediata e prevede un livello sufficiente di capacità diprogrammazione e per questo richiede del tempo. Però una volta messo a punto un codicesi hanno notevoli vantaggi. Nel caso in cui si abbia interesse ad eseguire numerose analisio se si volessero cambiare rapidamente i parametri del modello. Lanciando lo scriptcontenente il codice è il calcolatore che svolge tutto in automatico seguendo le righe dicodice scritte. Con la finestra di SAP2000 a vista si vedrebbe come il file evolve manmano che lo script avanza e si assisterebbe alla creazione del modello e alla sua analisisenza 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 adiacentisi avvicinano ed entrano in contatto l’un l’altra portando a chiusura il gap di separazionetra le strutture stesse. Il codice implementato ha permesso una rapida disamina dei risultatidell’analisi effettuata sul modello a 2 gdl. Nel seguito si metteranno in riporteranno

23

Page 26: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

0 2 4 6 8 10 12−0.04

−0.03

−0.02

−0.01

0

0.01

0.02

0.03

0.04Spostamento TopStr1

Tempo (sec)

Spo

stam

ento

(m

)

Figura 4.5: Spostamento sommità struttura 1

0 2 4 6 8 10 12−0.04

−0.03

−0.02

−0.01

0

0.01

0.02

0.03

0.04Spostamento TopStr2

Tempo (sec)

Spo

stam

ento

(m

)

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 delladistanza 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 picchidell’andamento temporale della deformazione dell n link che superano in compressionei 2cm. Negli stessi istanti temporali coincidono dei picchi di forza agente ne link cherappresentano la forza che si scambiano le due strutture del modello quando arrivano acontatto. Conseguentemente la storia di spostamento dei nodi di sommità degli edificiè influenzata da questa non linearità di contatto che si manifesta istantaneamente, inaggiunta le due storie di spostamento differiscono per via delle diverse proprietà dinamicheche possiedono e che le portano a vibrare fuori fase.

24

Page 27: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

0 2 4 6 8 10 12−0.04

−0.03

−0.02

−0.01

0

0.01

0.02

0.03

0.04Deformazione gap

Tempo (sec)

Spo

stam

ento

(m

)

Figura 4.7: Deformazione non linear gap

0 2 4 6 8 10 12−50

−40

−30

−20

−10

0

Forza gap

Tempo (sec)

For

za (

kN)

Figura 4.8: Forza normale non linear gap

4.3 Conclusioni

Lo scopo prefissato era quello di introdurre un nuovo approccio per effettuare analisiattraverso il software SAP2000 implementando un codice in linguaggio di programmazionematlab. Il suddetto scopo è stato possibile raggiungerlo utilizzando una delle ultimetecnologie disponibili nel software SAP2000: le Application Programming Interface (API).

Per poter raggiungere questo obiettivo ed evidenziare le capacità di utilizzo delle APIsono state sviluppate due applicazioni in linguaggio di programmazione matlab chepermettono il controllo di SAP2000 da remoto. Le applicazioni create riguardano l’analisidi elementi non lineari presenti nella libreria di SAP2000 e una semplice loro inserimentoin un modello a 2 gdl. Il codice realizzato permette la gestione dei dati di input sia dioutput ed una successiva elaborazione. Il controllo dei modelli e dei risultati da unapiattaforma esterna al software di analisi Essendo le API di SAP2000 una genericafunzione che permette il controllo dell’intera struttura del software di analisi lo stile di

25

Page 28: UNIVERSITÁ DEGLI STUDI ROMA TRE Corso di Laurea indidaingcivile.altervista.org/files/Lorenzo-Rotondi-LM-PRN.pdf · Capitolo 3 SAP2000-matlab QuestaparteèdedicataamostrarecomeusareleOpenApplicationProgrammingInterface

programmazione utilizzato deve essere adattato alle funzioni definite nelle linee guide.Bisogna quindi avere conoscenza del linguaggio di programmazione utilizzato e in primoluogo la necessaria conoscenza dell’utilizzo di SAP2000 nella procedura standard.

Il lavoro svolto nel periodo di tirocinio è servito come base per proseguire il lavorodi tesi, nel quale è stato fatto un ampio utilizzo di applicazioni esterne a SAP2000opportunamente organizzate per gli scopi prefissati. Infatti sono state sviluppate diverseapplicazioni aventi controllo su un gran numero di parametri del modello e su un grannumero di analisi da eseguire e in queste circostante sono evidenti i vantaggi di utilizzareuna procedura automatizzata da remoto.

In ultima non è da dimenticare l’importanza della supervisione umana sull’applicazionedi qualsiasi procedura e la capacità dell’utente e sensibilità di selezionare le variabili dianalisi ed interpretare i risultati che in fin dei conti è l’aspetto più importante di unanalisi.

26