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/04/11 13:40] – 87865 | 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~~ |