Notat om ovito og ovitos

Dere som var p? datalaben i dag fikk en kort gjennomgang av ovito med et eksempel p? ? sette opp modifier-pipeline i GUI og med scripting. Under f?lger et kjapt notat om det jeg snakket om: 

 

_澳门葡京手机版app下载

Forelesningsnotat til Ovito for bruk i FYS4460

Dette er skrevet for Ovito versjon 3.0.0. I skrivende stund er den fortsatt under utvikling, men den er enkelt tilgjengelig under Development version p? ovito.org (klikk p? Download)

Ovito GUI

  • Laste inn trajectory-fil
    • Husk File contains time series
  • Color coding
  • Histogram
  • Compute property for ? lage hastighetsmagnitude
  • Se p? denne fordelingen med endret histogram
  • Mange modifiers kan lagre data
  • Eksportere filer til andre formater

Modifier pipeline – et viktig konsept i Ovito!

Modifiers i Ovito inng?r i en s?kalt modifier pipeline. Der vil hver modifier utf?re operasjoner etter tur. En modifier som kommer etter en annen kan bruke informasjonen som den forrige modifieren regnet ut. For eksempel kan vi lage en ComputePropertyModifier (slik som vi nettop gjorde), og deretter la en ColorCodingModifier bruke verdiene som ComputePropertyModifier genererte, slik at vi kan fargelegge partiklene etter magnituden p? hastigheten. Merk at i GUI, s? st?r det ikke modifier p? navnet til modifiers. Derfor vil ComputePropertyModifier dukke opp som Compute Property. Vi velger allikevel ? bruke navnene med modifier p?, fordi det er slik de er navngitt i Python-API'et til Ovito.

Lammps-script som genererer data vi kan se p? i Ovito

units lj
dimension 3
boundary p p p
atom_style atomic

lattice fcc 0.01
region simbox block 0 10 0 10 0 10
create_box 1 simbox
create_atoms 1 box

mass 1 1.0 
velocity all create 2.5 87287

pair_style lj/cut 3.0 
pair_coeff 1 1 1.0 1.0 3.0 
fix 1 all nve

dump 1 all custom 100 dump.lammpstrj id type x y z vx vy vz
thermo 100 
run 10000

Ovitos p? kommandolinjen

F?rst trenger vi ? laste inn en trajectory fil. Import og kode er:

# analyse.py
from ovito.io import import_file
filename = "dump.lammpstrj"
pipeline = import_file(filename, multiple_frames=True)

Deretter ?nsker vi ? gj?re ting. Fra importen har vi f?tt et pipeline-objekt. Dette er et nyttig objekt. For ? kunne se i GUI at vi har gjort ting riktig kan vi legge til pipeline-objektet til scenen som skal rendres: pipeline.add_to_scene(). Da kan vi kj?re scriptet med ovitos -g analyse.py, og Ovito vil ?pne seg og vise den analysen vi har satt opp med scriptet (Forel?pig er den ganske tom).

Gj?re noe interessant med Ovito p? kommandolinje

La oss f?rst sette opp det samme som det vi gjorde i GUI bare med script i stedet. Dette kan v?re en nyttig m?te ? jobbe p? bare for ? slippe ? trykke rundt hele tiden. Vi ?nsker ? legge p? en ComputePropertyModifier og en HistogramModifier for ? beregne om hastighetsfordelingen i systemet n?rmer seg en Maxwell–Boltzmann-distribusjon. N?r man skal bruke nye modifiers er det nyttig ? se i dokumentasjonenm under ovito.modifiers.

myComputePropertyModifier = \
    ComputePropertyModifier(
            output_property="Velocity Magnitude",
            expressions=["sqrt( Velocity.X^2+Velocity.Y^2+Velocity.Z^2)"]
            )
pipeline.modifiers.append(myComputePropertyModifier)

myHistogramModifier = HistogramModifier(
                        property="Velocity Magnitude", 
                        bin_count=100, 
                        fix_xrange=True, 
                        xrange_end=10)
pipeline.modifiers.append(myHistogramModifier)

La oss f?rst kj?re dette med ovitos -g analyse.py for ? sjekke at modifier-pipelinen er satt opp riktig. Om det er riktig skal vi se modifierene stablet opp? hverandre p? h?yre meny i GUI'et. Om vi trykker p? Histogram (Modifier) i h?yre-menyen skal vi dessuten kunne se histogrammet over hastighetsmagnitudene.

Om dette fungerer kan vi g? videre til ? se p? hvordan vi beregner hvordan en st?rrelse varierer gjennom en simulering. La oss for eksempel se p? oppgave a) i prosjekt 1:

Utvikling av hastighetsfordelingen i tid

Vi kan styre hvilket tidssteg i input-filen ovito ser p? med ovito.dataset.anim:

from ovito import dataset
frame = 10
dataset.anim.current_frame = frame
pipeline.compute()

Etter denne operasjonen vil pipeline inneholde verdier i modifier-pipeline beregnet for frame 10 i lammps-dumpfilen.

Om vi ?nsker ? se p? hvordan hastighetsfordelingen endrer seg gjennom simuleringen kan vi l?kke over tidsstegene, kj?re compute(), og hente ut hisogrammet i de aktuelle tidsstegene.

for frame in range(dataset.anim.first_frame, dataset.anim.last_frame, 10):
    pipeline.compute(frame)
    histogram = myHistogramModifier.histogram[:,1]
    plt.plot(histogram, label=str(frame))
plt.show()

N? har vi histogrammet tilgjengelig over tid. Inne i denne l?kken kan vi for eksempel beregne Σihi(t)hi(tn)/Σihi(tn)hi(tn) som et m?l p? hvor godt termalistert systemet er etter en tid t. tn er sluttiden for simuleringen.

Hente partikkelposisjoner

La oss sjekke at vi klarer ? hente ut partikkelposisjonene. Det kan jo hende vi ?nsker ? bruke dem til noe som Ovito ikke har innebygget.

from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
data = pipeline.compute(10)
positions = data.particle_properties['Position']
ax.scatter(positions[:,0], positions[:,1], positions[:,2])
plt.show()

N?r man kj?rer pipeline.compute(<tiddsteg>) f?r man tilgang p? et objekt som inneholder dataene til tidssteget man beregnet for. Dette inneholder b?de beregninger som er gjort i modifiers, og selve r?dataene.

Publisert 15. feb. 2018 14:13 - Sist endret 15. feb. 2018 14:13