wikipaom2015:lez06
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
| wikipaom2015:lez06 [2015/03/30 13:35] – 87991 | wikipaom2015:lez06 [2016/03/14 17:27] (versione attuale) – [Il Fortran] ebertocchi | ||
|---|---|---|---|
| Linea 1: | Linea 1: | ||
| + | | ||
| + | ===== Costruzione della matrice rigidezza vincolata ===== | ||
| + | Prendendo in esame la stessa struttura si illustra un esempio di costruzione della " | ||
| + | Nel caso specifico si considerano vincolati i nodi " | ||
| + | {{ : | ||
| + | |||
| + | Rispetto al riferimento illustrato sopra, gli spostamenti imposti sono: | ||
| + | {**U4=0**, **V4=0**, | ||
| + | Come descritto dalla lezione 4, l' | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | |||
| + | {{: | ||
| + | |||
| + | Pertanto alle equazioni di equilibrio corrispondenti ai gradi di libertà vincolati (2,7,8) si sostituiscono l' | ||
| + | Considerando nello specifico il grado di libertà " | ||
| + | In questo modo senza togliere il carattere di incognita ad " | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Si esegue la medesima operazione sulla colonna " | ||
| + | |||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | {{: | ||
| + | |||
| + | Si ottiene così il sistema matriciale vincolato relativo al grado di libertà " | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Si effettuano le stesse operazioni per i gradi di libertà " | ||
| + | |||
| + | {{: | ||
| + | |||
| + | La matrice ottenuta è la " | ||
| + | La soluzione avrà forma del tipo **δ' = Kv< | ||
| + | Da " | ||
| + | Si ricavano quindi le reazioni vincolari sotto le quali questa rimane in equilibrio. | ||
| + | In particolare riconsiderando la matrice di rigidezza " | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Il Fortran ===== | ||
| + | |||
| + | Vedere anche | ||
| + | [[http:// | ||
| + | [[https:// | ||
| + | [[https:// | ||
| + | ==== Cosa è il Fortran? ==== | ||
| + | |||
| + | Il ''''' | ||
| + | Esso rappresenta il primo tentativo di scrivere un linguaggio standard formalizzato, | ||
| + | Dunque, con il linguaggio di programmazione l' | ||
| + | |||
| + | In particolare, | ||
| + | |||
| + | ==== Introduzione all' | ||
| + | |||
| + | Per scrivere il programma abbiamo bisogno innanzitutto di un editor di testo. Es: //gedit// che permette di scrivere file di testo non formattati. Posso pertanto scrivere come se avessi righe e colonne (ad esempio la lettera m è larga quanto la lettera i). | ||
| + | Per salvare un file scritto con //gedit// come programma Fortran dobbiamo salvarlo con estensione **.for**. | ||
| + | Una delle peculiarità del Fortran è quella di non essere //case sensitive//, | ||
| + | Per compilare il programma vi sono delle convenzioni da conoscere: | ||
| + | |||
| + | * Il compilatore utilizza solo le prime 72 colonne di ogni riga, ciò significa che tutti i caratteri dalla 73° colonna in poi saranno ignorati e, pertanto, non eseguiti. | ||
| + | * La prima colonna è riservata all' | ||
| + | * La 2°,3°,4° e 5° colonna sono spazi riservati per // | ||
| + | |||
| + | ATTENZIONE: non è obbligatorio dare un' | ||
| + | aventi stesso nome all' | ||
| + | delle righe è numerico, | ||
| + | che segue un' | ||
| + | |||
| + | * La 6° colonna è riservata alla simbologia di continuazione di comando. Questo serve per portare a capo un' | ||
| + | * Dalla 7° alla 72° colonna vi è l' | ||
| + | |||
| + | ==== Linee guida per la compilazione corretta del programma ==== | ||
| + | Visto quanto detto sopra, è buona regola di programmazione iniziare il programma con una riga che metta in evidenza lo spazio a nostra disposizione per scrivere le istruzioni e identifichi le colonne adibite a funzioni specifiche. Quindi, volendo è possibile identificare le prime 7 colonne con il proprio indice colonna, in modo da mettere in evidenza le colonne con le funzionalità precedentemente descritte, le colonne dalla 8° alla 71° con un simbolo generico, come ad esempio =, per identificare lo spazio a disposizione e la 72° con il carattere !, in modo da avere uno " | ||
| + | Per poter compilare adeguatamente il programma, è bene concepirlo inizialmente come un insieme funzionale di blocchi, nel modo seguente: | ||
| + | * **Nome del programma** si indica il nome mediante il comando __PROGRAM__ | ||
| + | * **Dichiariamo le variabili** il FORTRAN utilizza un' // | ||
| + | * **INTEGER** : la variabile indica un numero intero. | ||
| + | * **REAL** : la variabile indica un numero reale, in virgola mobile con o senza segno, in singola precisione (7 cifre significative). | ||
| + | * **DOUBLE PRECISION** : La variabile indica un numero REAL, sempre con la virgola, ma con doppia precisione (circa 15 cifre significative). | ||
| + | * **COMPLEX** : indica un numero complesso, quindi, si devono indicare parte reale e parte immaginaria. | ||
| + | * **LOGICAL** : memorizza solo due valori: __.true.__ e __.false.__. | ||
| + | * **CHARACTER** : memorizza una stringa completa di tipo " | ||
| + | * **Corpo del programma** è un listato di comandi che il compilatore esegue, effettuando operazioni tra le variabili indicate nella dichiarazione. **ATTENZIONE: | ||
| + | * **END** è il comando che termina l' | ||
| + | |||
| + | Per far girare correttamente il file editor appena creato, esso dovrà essere salvato tramite il comando **SAVE AS** inserendo il **nomefile.for**. In questo modo, il file potrà essere letto ed eseguito correttamente dal terminale della macchina sulla quale si sta lavorando. | ||
| + | |||
| + | Nel caso in cui il terminale dovesse dare un errore di file inesistente è necessario assicurarsi di aver salvato il file in // cygwin > home > nome utente // | ||
| + | |||
| + | Una volta salvato il file, si deve aprire il terminale ed inserire il seguente comando. | ||
| + | * Nel caso in cui si lavori in ambiente LINUX: | ||
| + | |||
| + | gfortran nomefile.for && | ||
| + | |||
| + | * Nel caso in cui si lavori in ambiente WINDOWS: | ||
| + | |||
| + | gfortran nomefile.for && | ||
| + | |||
| + | dove **a.out** (o **a.exe**) sono gli eseguibili creati con la compilazione e sono sostanzialmente la traduzione del codice Fortran in linguaggio macchina, per l’architettura specifica. | ||
| + | Do sia il comando di compilazione che di esecuzione accodati tramite il doppio &&, se la compilazione va a buon fine eseguo altrimenti no. | ||
| + | Il costrutto **./a.out** si può ' | ||
| + | |||
| + | **osservazione**: | ||
| + | (in virgola mobile) è rappresentato su " | ||
| + | possono essere suddivisi in 3 parti: | ||
| + | |||
| + | * **per i single precision (32 bit)** | ||
| + | * 1) un bit di segno | ||
| + | * 2) 8 bit per l' | ||
| + | * 3) 23 bit per la mantissa (dove posso scrivere 2^23 numeri) | ||
| + | |||
| + | |||
| + | 1 8 23 -> lunghezza in bit | ||
| + | +-+--------+----------------------+ | ||
| + | 31 30 22 | ||
| + | |||
| + | * **per i double precision (64 bit)** | ||
| + | * 1) un bit di segno | ||
| + | * 2) 11 bit per l' | ||
| + | * 3) 52 bit per la mantissa (dove posso scrivere 2^52 numeri) | ||
| + | |||
| + | |||
| + | 1 8 52 -> lunghezza in bit | ||
| + | +-+--------+----------------------+ | ||
| + | 63 62 51 | ||
| + | |||
| + | ==== Esempi programmi==== | ||
| + | |||
| + | ===Hello World=== | ||
| + | Un primo approccio alla programmazione è stato la compilazione del programma **Hello World**. | ||
| + | |||
| + | |||
| + | c234567==============================================================72 | ||
| + | program HeLLow | ||
| + | write(*,*) 'Hello World by group 6!!!' | ||
| + | end | ||
| + | |||
| + | Questo programma, una volta eseguito, stampa il testo //Hello World by group 6!!!//. | ||
| + | Questa è la prima occasione in cui vediamo il comando **WRITE(*, | ||
| + | |||
| + | Possiamo accodare dei file in output separandoli con una virgola. In questo modo, senza richiamare più volte il comando su righe successive, è possibile scrivere più stringhe, una in sequenza all' | ||
| + | |||
| + | | ||
| + | |||
| + | Nel caso in cui il comando fosse troppo lungo, poichè oltrepassante la 72° colonna, lo si può spezzare andando a capo e scrivendo, in corrispondenza della sesta colonna della riga siccessiva, un qualsivoglia carattere come un __$__ o un __+__, **ma non uno spazio**: | ||
| + | |||
| + | c234567==============================================================! | ||
| + | write(*,*) ' | ||
| + | | ||
| + | |||
| + | |||
| + | ~~DISCUSSION|Note di redazione~~ | ||
