Desse datasystemane er jammen kompliserte, la oss leke med dei!

Tenk deg det at vi kan få lys til å gjøre som vi vil! Du som blar i denne bloggen for eksempel: Rører du ved tastaturet for å bla ned, ja da øker du lysstyrken en plass på skjermen og kanskje senker den en annen plass. På samme måte kan vi vri virkeligheten sånn som vi vil med kode! Her vil du lese litt om metodene vi bruker, ikke bli bekymret om du ikke forstår!

Bildet kan inneholde: datamaskin, data-tastatur, personlig datamaskin, perifer, inndataenhet.

Abstrakt tegning av kode.

Et ganske øyeblikkelig problem oppsto jo når vi skulle kjøre simuleringen vår. Partiklene fortsatte i alle retninger for alltid! Boksen vår utvidet seg og ble bare større og større! Partikler er dumme, vi måtte jo selvfølgelig fortelle dem at de opplever et ellastisk støt med veggen. Vi prøvde først å sjekke alle partiklene for å se om de traff "veggene" for så endre fortegn til hastigheten til den komponenten som var vinkelrett på veggene. Du husker at vi definerte ellastisk støt som ingen energi tapt til omgivelsene? Det er derfor vi bare kan "snu" hastigheten til partikkelen. Viste seg at det tok enormt lang tid! Etter iherdig leting fant vi en funksjon som finner alle OG endrer hastighetene på ett blunk! Denne heter "numpy.where" og måten den fungere på er at den sjekker om x-, y- eller z-posisjonene er rundt 0 eller L. Om det stemmer så endrer den fortegnet til den respektive hastighetskomponenten. Du kan se for deg "numpy.where" som en pirat som alltid følger med og skyter deg på rett kurs som illustrert i figur 2.

Bildet kan inneholde: produkt, svart, organisme, skråningen, gjøre.
Figur 2: Her ser vi numpy.where som alltid følger med ved vegg \(x = L,\quad z = L\).

Endelig! Boksen vår er full av bevegelige partikler! Da kan vi begynne med å lage et hull slik at boksen vår kan få en drivkraft i retning oppover. Vi setter at z-aksen er positiv oppover og definerer et hull i bunnen av boksen (altså i x-, y-planet). Partiklene er skikkelig dumme, de aner ikke hvor de er eller hvorfor. De bare flyr rundt. Det vil vi også at de skal gjøre! Fordi, for å slippe og kompensere for partikler som går ut av boksen med nye så registrerer vi bare de som befinner seg innenfor "hullet". Vanskelig og se for seg, men la oss vise deg i figur 3. En uvitende partikkel (oransje) havner i området hvor vi har definert et hull! Hva er kriteriene for hullet?, spørr du. Vel:

  1. x-posisjonen må være større enn "low" og mindre enn "high". Det vil si at vi kan skrive betingelsen som: \(low \leq x \leq high\).
  2. y-posisjonen må også være større enn "low" og mindre enn "high". Vi kan også skrive det om på formen: \(low \leq y \leq high\).
  3. z-posisjonen til partikkelen må være mindre eller lik 0. Som kan skrives som \(z \leq 0\)
    Bildet kan inneholde: rektangel, skråningen, triangel, gjøre, linje.
    Figur 3: Detaljert tegning av hullet som vi implementerer.

     

Den opplever et ellastisk støt med "veggen" og fortsetter videre. MEN, før den får oppleve støtet lagrer vi partikkelen sin kontaktinformasjon og hastighet i z-retning uten samtykke. Deretter forteller vi partikkelen at den opplever et ellastisk støt. Dette gjør vi for hver partikkel som oppfyller alle kriteriene for hullet og finner dermed alle som "forlater" boksen på et gitt tidsintervall. Finne ut en måte å sjekke alle kriteriene samtidig på, var vrient. Det første som slo oss var å bruke "numpy.where", men den tar bare to argumenter! Vi har jo tre... Etter litt om og men, mye kaffe, litt smågodt og søvn. Kom vi over en annen metode fra samme pakke kalt "numpy.logical_and". Den klarer både flere argumenter OG returnerer kun noe som heter "booleanske" verdier. I korte trekk er det "True" eller "False". Slik som en datamaskin opererer vet du, 0 og 1! Dette gjorde at argumentene våre kunne bli evaluert mye raskere og finere enn med "numpy.where". Hvis alle kriteriene er oppfylt, er partikkelen godkjent og telt som en av de som har forlatt boksen. Slik som vist i figur 4.

Figur 4: Her sitter numpy.logical_and og manuelt sjekker alle partiklene med scanner.

Spennende! Ta meg videre:D

Publisert 13. sep. 2021 22:08 - Sist endret 13. sep. 2021 22:08