'Main'-funksjon
I main har vi laget en hovedramme for hvordan programmet kan bygges opp. Her er også forslag til flere av funksjonskallene inkludert slik at det blir lettere å komme igang med programmeringen. Legg merke til at funksjonene lesinput og lengder allerede er implementert.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
from structure_visualization import * def main(): # -----Rammeanalyse----- # ---------------------- def main(): # -----Initialiserer figuererfigurer----- fig_init, ax_init, fig_def, ax_def = setup_plots() # -----Til visualiseringen, velg første indeks brukt i nummerering av noder og element----- first_index = 1 # -----Leser input-data----- npunkt, punkt, nelem, elem, nlast, last = lesinput() # -----Plott initalramme----- plot_structure(fig_init, ax_init, punkt, elem, 1, first_index) # -----Regner ut lengder til elementene------ elementlengder = lengder(punkt, elem, nelem) # -----Fastinnspenningsmomentene------ # Lag funksjon selv fim = moment(npunkt, punkt, nelem, elem, nlast, last, elementlengder) # -----Setter opp lastvektor----- # Lag funksjon selv b = lastvektor(fim, npunkt, punkt, nelem, elem) # ------Setter opp systemstivhetsmatrisen----- # Lag funksjon selv K = stivhet(nelem, elem, elementlengder, npunkt) # ------Innfører randbetingelser------ # Lag funksjon selv Kn, Bn = bc(npunkt, punkt, K, b) # -----Løser ligningssystemet------ # Lag funksjon selv rot = ... # Hint, se side for løsing av lineære systemer i Python #------Finner endemoment for hvert element----- # Lag funksjon selv endemoment = endeM(npunkt, punkt, nelem, elem, elementlengder, rot, fim) #-----Skriver ut hva rotasjonen ble i de forskjellige nodene----- print("Rotasjoner i de ulike punktene:") print(rot) #-----Skriver ut hva momentene ble for de forskjellige elementene----- print("Elementvis endemoment:") print(endemoment) #-----Plott deformert ramme----- skalering = 100; # Du kan endre denne konstanten for å skalere de synlige deformasjonene til rammen plot_structure_def(fig_def, ax_def, punkt, elem, 1, first_index, skalering*rot) plt.show() |
Info |
---|
Dersom du ønsker tips til å forbedre kodingen din, besøk siden Tips and tricks for coding. Andre nyttige sider for dette prosjektet kan være LaTeX, Inkscape TexText og Python. |
Utdelte funksjoner
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
import numpy as np def lengder(knutepunkt, element, nelem): elementlengder = np.zeros((nelem, 1)) # Beregner elementlengder med Pythagoras' laeresetning for i in range (0, nelem): # OBS! Grunnet indekseringsyntaks i Python-arrays vil ikke denne funksjonen fungere naar vi bare har ett element. dx = knutepunkt[element[i, 0], 0] - knutepunkt[element[i, 1], 0] dy = knutepunkt[element[i, 0], 1] - knutepunkt[element[i, 1], 1] elementlengder[i] = np.sqrt(dx*dx + dy*dy) return elementlengder |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
import numpy as np def lesinput(): # Åpner inputfilen fid = open("input.txt", "r") # Leser totalt antall punkt npunkt = int(fid.readline()) # 'fid.readline()' leser en linje, 'int(...)' gjør at linjen tolkes som et heltall # LESER INN XY-KOORDINATER TIL KNUTEPUNKTENE # Nodenummer tilsvarer radnummer i "Node-variabel" # x-koordinat lagres i kolonne 1, y-koordinat i kolonne 2 # Grensebetingelse lagres i kolonne 3; 1 = fast innspent og 0 = fri rotasjon punkt = np.loadtxt(fid, dtype = int, max_rows = npunkt) # 'max_rows = npunkt' sorger for at vi bare leser # de 'npunkt' neste linjene i tekstfilen # Leser antall elementer nelem = int(fid.readline()) # Leser konnektivitet: Sammenheng mellom elementender og knutepunktnummer samt EI for elementene # Elementnummer tilsvarer radnummer i "elem"-variabel # Knutepunktnummer for lokal ende 1 lagres i kolonne 1 # Knutepunktnummer for lokal ende 2 lagres i kolonne 2 # Det anbefales at knutepunktnummerering starter på 0, slik at det samsvarerer med listeindeksering i Python # E-modul for materiale lagres i kolonne 3 # Tverrsnittstype lagres i kolonne 4; I-profil = 1 og rørprofil = 2 elem = np.loadtxt(fid, dtype = int, max_rows = nelem) # Leser antall laster som virker på rammen nlast = int(fid.readline()) # Leser lastdata # Bestem selv verdiene som er nødvendig å lese inn, samt hva verdiene som leses inn skal representere last = np.loadtxt(fid, dtype = float, max_rows = nlast) # <-- Forslag til innlesing av lastdata # Lukker input-filen fid.close() return npunkt, punkt, nelem, elem, nlast, last |
Inputfil - Eksempel
Følgende er et eksempel på hvordan input.txt kan se ut. I dette eksemplet er det ikke lagt til noen laster på konstruksjonen.
Note |
---|
OBS! Husk å fjerne kommentarene fra egen inputfil. |
No Format |
---|
9 # Antall knutepunkt 0 0 1 # [x, y, Innspenning] 0 10 0 0 20 0 10 20 0 10 10 0 10 0 0 20 20 0 20 10 0 20 0 0 10 # Antall element 0 1 70854000 1 # [Lokal ende 1, Lokal ende 2, Elastisitetsmodul, Profil] 1 2 70854000 1 1 4 141708000 2 2 3 70854000 2 4 3 70854000 1 5 4 70854000 1 3 6 70854000 2 4 7 141708000 1 7 6 70854000 2 8 7 70854000 1 0 # Antall laster |