'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 og all visualisering allerede er implementert. Flere detaljer om disse funksjonene kommer i neste avsnitt.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
from structure_visualization import * # -----Rammeanalyse----- def main(): # -----Initialiserer figurer----- 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 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 |