From 16a4a8f2d9a458e8a2b3195f5fcf233c05ec01b6 Mon Sep 17 00:00:00 2001 From: prod2 Date: Wed, 5 Apr 2023 10:57:56 +0200 Subject: [PATCH] change to xyz usage, use jmol to visualize --- .gitignore | 3 + FreeMono.ttf | Bin 293572 -> 0 bytes ffs.toml | 16 ++++ forces.nim | 108 +++++++++++++++++++++ genrandom.nim | 53 +++++++++++ input.toml | 35 ------- linalg.nim | 18 ++-- main.nim | 187 +++++-------------------------------- parsexyz.nim | 39 ++++++++ particle.nim | 20 ++++ vis.nim | 254 -------------------------------------------------- 11 files changed, 274 insertions(+), 459 deletions(-) create mode 100644 .gitignore delete mode 100644 FreeMono.ttf create mode 100644 ffs.toml create mode 100644 forces.nim create mode 100644 genrandom.nim delete mode 100644 input.toml create mode 100644 parsexyz.nim create mode 100644 particle.nim delete mode 100644 vis.nim diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2ef716b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +main +genrandom +*.xyz \ No newline at end of file diff --git a/FreeMono.ttf b/FreeMono.ttf deleted file mode 100644 index 96b830e61ca58839380cd0e767de89ead096c05d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293572 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

atfA;KgSGhB@vtoT~-^LYoTPbE7u&I?3 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

v+7u7yun8GAk=7>ed2b3F6!m^X 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 diff --git a/ffs.toml b/ffs.toml new file mode 100644 index 0000000..3bd7835 --- /dev/null +++ b/ffs.toml @@ -0,0 +1,16 @@ +[test] +# time step +dt = 0.001 +# maximum time +t = 100.0 +# gravitational acceleration +g = 0.000001 +# lennard jones parameters +lennardE = 15 +lennardS = 0.5 +# boundary details +boundary = 30.0 +# save to disk every n time steps +saveInterval = 500 +# initial velocity randomizer - adds extraVel at the start of calculation in a random direction to every particle +extraVel = 1.0 \ No newline at end of file diff --git a/forces.nim b/forces.nim new file mode 100644 index 0000000..1108100 --- /dev/null +++ b/forces.nim @@ -0,0 +1,108 @@ +import parsetoml +import particle +import linalg +import math +import strformat +import random + +type + ForceField = ref object + # this is stretching the definition of an ff beyond what's reasonable + # should be split in two - the actual ff and calculation parameters + lennardE*: float + lennardS*: float + gravAcc*: float + boundary*: float + dt*: float + maxt*: float + saveInterval*: int + extraVel*: float # TODO remove this once diff velocity is implemented + # TODO: new options - thermostat and periodic boundaries + # cutoff distance for calculations + # load velocity as diff from last two frames options and adapt genrandom for that option + +proc newForceField*(path: string, name: string): ForceField = + new(result) + + # read config file + let input = parsetoml.parseString(path.readFile()) + + # initialize variables based on input file + let config = input[name] + result.dt = config["dt"].getFloat() + result.maxt = config["t"].getFloat() + result.gravAcc = config["g"].getFloat() + result.lennardE = config["lennardE"].getFloat() + result.lennardS = config["lennardS"].getFloat() + result.boundary = config["boundary"].getFloat() + result.saveInterval = config["saveInterval"].getInt() + result.extraVel = config["extraVel"].getFloat() + +proc applyExtraVel*(particles: var seq[Particle], ff: ForceField) = + for i in 0..particles.high(): + particles[i].vel = vector(rand(ff.extraVel * 2) - ff.extraVel, rand(ff.extraVel * 2) - ff.extraVel, rand(ff.extraVel * 2) - ff.extraVel) + +proc getAcc(particles: seq[Particle], ff: ForceField, index: int): Vector = + result = vector0() + let posThis = particles[index].pos + let mThis = particles[index].mass + for i in 0..particles.high: + if i == index: + continue + let diff = particles[i].pos - posThis + if diff.len() == 0.0: + raise newException(Defect, &"overlap between {i} and {index}") + let direction = diff.normalize() + let distance = diff.len() + + # Lennard-Jones + # F = 4e (6s^6/r^7 - 12s^12/r^13) + result -= direction * (4f * ff.lennardE * (6.0 * (ff.lennardS^6)/(distance^7) - 12.0 * (ff.lennardS^12)/(distance^13))) / mThis + + # Gravity downwards + result += vector(0, 0, ff.gravAcc) + +proc keepInside(particles: var seq[Particle], ff: ForceField, index: int) = + # TODO: thermostatic walls and periodic boundary condition + let posThis = particles[index].pos + let velThis = particles[index].vel + + if posThis.x > ff.boundary and velThis.x > 0: + particles[index].vel.x = -velThis.x + + if posThis.x < -ff.boundary and velThis.x < 0: + particles[index].vel.x = -velThis.x + + if posThis.y > ff.boundary and velThis.y > 0: + particles[index].vel.y = -velThis.y + + if posThis.y < -ff.boundary and velThis.y < 0: + particles[index].vel.y = -velThis.y + + if posThis.z > ff.boundary and velThis.z > 0: + particles[index].vel.z = -velThis.z + + if posThis.z < -ff.boundary and velThis.z < 0: + particles[index].vel.z = -velThis.z + +proc iterate*(particles: var seq[Particle], ff: ForceField, t: float) = + let dt = ff.dt + block step: + # iterate through particles + # update positions + for i in 0..particles.high: + let part = particles[i] + particles[i].pos = part.pos + part.vel * dt + dt * dt * 0.5 * part.acc + + # update acceleration and velocity + for i in 0..particles.high: + let part = particles[i] + let newAcc = getAcc(particles, ff, i) + let newVel = part.vel + (part.acc + newAcc) * (dt * 0.5) + particles[i].vel = newVel + particles[i].acc = newAcc + + # enforce boundary + for i in 0..particles.high: + keepInside(particles, ff, i) + diff --git a/genrandom.nim b/genrandom.nim new file mode 100644 index 0000000..f99ec55 --- /dev/null +++ b/genrandom.nim @@ -0,0 +1,53 @@ +# generate input xyz based on some parameters + +import random +import os +import strutils +import strformat +import particle +import linalg +import parsexyz +import forces + +if paramCount() != 3: + echo "usage ./genrandom n filename.xyz settingsName" + quit 1 + +let atomCount = parseInt(paramStr(1)) +let filename = paramStr(2) +let settingsName = paramStr(3) + +let ff = newForceField("ffs.toml", settingsName) +let boundary = ff.boundary +let lennardS = ff.lennardS + +var particles: seq[Particle] + +# get particles +for i in 0..atomCount: + block thisPart: + let name = &"c{i}" + var attempt = 0 + while true: + # too many attempts: stop trying to spawn this particle + inc attempt + if attempt > 10: + break thisPart + + # random position + let pos = vector(rand(2 * boundary)-boundary, rand(2*boundary)-boundary, rand(2*boundary) - boundary) + + # check for overlap, go back to start of while if there is one + for p in particles: + if (p.pos - pos).len() < lennardS * 2.5: + break + + # this reached? particle successfully spawned + particles.add(newParticle(name, pos, 1.0)) + break thisPart + + +# and write them to xyz +var f = open(filename, fmWrite) +appendXyz(f, particles, 0.0) +f.close() \ No newline at end of file diff --git a/input.toml b/input.toml deleted file mode 100644 index 9cb7742..0000000 --- a/input.toml +++ /dev/null @@ -1,35 +0,0 @@ -[config] -# time step -dt = 0.001 -# maximum time -t = 1000.0 -# gravitational constant -G = 0.0 -# gravitational acceleration -g = 0.000001 -# stabilize centre of mass? -stab_mass = false -# how often reset centre of mass -stab_interval = 100 -# lennard jones parameters -lennardE = 15 -lennardS = 0.5 -# boundary details -boundary = 30.0 -# save to disk every n time steps -saveInterval = 200 - -# format: after an initial config block, -# every block is one object, with the name being in square brackets -# mandatory fields: - # pos (vector) - initial position - # vel (vector) - initial velocity - # mass - its mass - -[random] -count = 80 -xmin = -29.0 -xmax = 29.0 -ymin = -29.0 -ymax = 29.0 -vmax = 0.0 diff --git a/linalg.nim b/linalg.nim index fd82ea1..0e0235f 100644 --- a/linalg.nim +++ b/linalg.nim @@ -5,27 +5,31 @@ type Vector* = object x*: float y*: float + z*: float -func vector*(x, y: float): Vector = - Vector(x: x, y: y) +func vector*(x, y, z: float): Vector = + Vector(x: x, y: y, z: z) + +func vector0*: Vector = + vector(0.0, 0.0, 0.0) func `+`*(a, b: Vector): Vector = - Vector(x: a.x + b.x, y: a.y + b.y) + Vector(x: a.x + b.x, y: a.y + b.y, z: a.z + b.z) func `-`*(a: Vector): Vector = - Vector(x: -a.x, y: -a.y) + Vector(x: -a.x, y: -a.y, z: -a.z) func `-`*(a, b: Vector): Vector = a + (-b) func `*`*(a: Vector, f: float): Vector = - Vector(x: a.x * f, y: a.y * f) + Vector(x: a.x * f, y: a.y * f, z: a.z * f) func `*`*(f: float, a: Vector): Vector = a * f func dot*(a, b: Vector): float = - a.x * b.x + a.y * b.y + a.x * b.x + a.y * b.y + a.z * b.z func len*(a: Vector): float = sqrt(dot(a, a)) @@ -43,4 +47,4 @@ func `-=`*(a: var Vector, b: Vector) = a = a - b func `$`*(a: Vector): string = - &"[{a.x}, {a.y}]" + &"{a.x} {a.y} {a.z}" diff --git a/main.nim b/main.nim index 9900d79..f0c5f57 100644 --- a/main.nim +++ b/main.nim @@ -1,178 +1,39 @@ -import linalg -import parsetoml +import particle +import parsexyz +import forces -import math import strformat -import random +import os -# define types -type - Particle = object - name: string - pos: Vector - vel: Vector - acc: Vector - mass: float +# what's the input file name? +if paramCount() != 2: + echo "Usage: ./main inputfile.xyz settingName" + quit 1 +if not fileExists("ffs.toml"): + echo "Error: input.toml doesn't exist" + quit 2 +let xyzPath = paramStr(1) +let ffName = paramStr(2) +echo &"Using {xyzPath} as input, {ffName} as calculation settings" -# read input file -let input = parsetoml.parseString("input.toml".readFile()) +let ff = newForceField("ffs.toml", ffName) -# initialize variables based on input file -let config = input["config"] -var t = 0.0 # current time -let dt = config["dt"].getFloat() -let maxt = config["t"].getFloat() -let gravConst = config["G"].getFloat() -let gravAcc = config["g"].getFloat() -let stabilizeMassCentre = config["stab_mass"].getBool() -let stabInterval = config["stab_interval"].getInt() -var stabCounter = 0 -let lennardE = config["lennardE"].getFloat() -let lennardS = config["lennardS"].getFloat() -let boundary = config["boundary"].getFloat() -let saveInterval = config["saveInterval"].getInt() -# a thing that runs every 100 frames to move the centre of mass back to the original one -var particles: seq[Particle] = @[] +var particles: seq[Particle] = parseXyz(xyzPath) -# process the rest of the input file -for key, val in input.tableVal.pairs: - if key == "config": - continue - elif key == "random": - let count = val["count"].getInt() - let xmin = val["xmin"].getFloat() - let xmax = val["xmax"].getFloat() - let ymin = val["ymin"].getFloat() - let ymax = val["ymax"].getFloat() - let vmax = val["vmax"].getFloat() - for i in 0..count: - block thisPart: - var particle = Particle(name: "random") - var pass = false - var attempt = 0 - while not pass: - inc attempt - if attempt > 10: - break thisPart - particle.pos = vector(rand(xmax-xmin)+xmin, rand(ymax-ymin)+ymin) - pass = true - for p in particles: - if (p.pos - particle.pos).len() < lennardS * 2.5: - pass = false - break - particle.vel = vector(rand(vmax), rand(vmax)) - particle.acc = vector(0.0, 0.0) - particle.mass = 1.0 - particles.add(particle) - else: - let x: float = val["pos"][0].getFloat() - let y: float = val["pos"][1].getFloat() - let vx: float = val["vel"][0].getFloat() - let vy: float = val["vel"][1].getFloat() - let pos = vector(x, y) - let vel = vector(vx, vy) - let mass = val["mass"].getFloat() - let particle = Particle(name: key, pos: pos, vel: vel, acc: vector(0,0), mass: mass) - particles.add(particle) +applyExtraVel(particles, ff) # TODO replace this # open the output file -let f = open("output.txt", fmWrite) -# do the simulation, writing results to a file (streaming) -f.writeLine("mdsim input file: input.toml") -proc oupStatus = - # output current status - var status: string = "" - for i in 0..particles.high: - status &= &"{particles[i].name} {$particles[i].pos} {$particles[i].vel} " - f.writeLine(&"{t} {status}") - -oupStatus() - -proc getForces(index: int): Vector = - result = vector(0, 0) - let posThis = particles[index].pos - let mThis = particles[index].mass - for i in 0..particles.high: - if i == index: - continue - let diff = particles[i].pos - posThis - let direction = diff.normalize() - let distance = diff.len() - let mThat = particles[i].mass - - # gravity between particles - # m2 * C / r^2 (so it's acceleartion, mass of this doesn't apply) - result += direction * (mThat * gravConst / distance / distance) - - # Lennard-Jones - # F = 4e (6s^6/r^7 - 12s^12/r^13) - result -= direction * (4f * lennardE * (6.0 * (lennardS^6)/(distance^7) - 12.0 * (lennardS^12)/(distance^13))) / mThis - - result += vector(0, gravAcc) - -proc keepInside(index: int) = - let posThis = particles[index].pos - let velThis = particles[index].vel - - if posThis.x > boundary and velThis.x > 0: - particles[index].vel.x = -velThis.x - - if posThis.x < -boundary and velThis.x < 0: - particles[index].vel.x = -velThis.x - - if posThis.y > boundary and velThis.y > 0: - particles[index].vel.y = -velThis.y - - if posThis.y < -boundary and velThis.y < 0: - particles[index].vel.y = -velThis.y - - -proc getCentreOfMass(): Vector = - var totMass = 0.0 - result = vector(0.0, 0.0) - for i in 0..particles.high: - let part = particles[i] - totMass += part.mass - result += part.pos * part.mass - result = result / totMass - -let initCentreOfMass = getCentreOfMass() - -proc resetCentreOfMass() = - let cCentre = getCentreOfMass() - let delta = cCentre - initCentreOfMass - for i in 0..particles.high: - particles[i].pos -= delta - +let f = open(xyzPath, fmAppend) var saveCounter = 0 -while t < maxt: - block step: - # iterate through particles - for i in 0..particles.high: - let part = particles[i] - particles[i].pos = part.pos + part.vel * dt + dt * dt * 0.5 * part.acc - - for i in 0..particles.high: - let part = particles[i] - let newAcc = getForces(i) - let newVel = part.vel + (part.acc + newAcc) * (dt * 0.5) - particles[i].vel = newVel - particles[i].acc = newAcc - - # enforce boundary - for i in 0..particles.high: - keepInside(i) +var t = 0.0 +while t < ff.maxt: + iterate(particles, ff, t) inc saveCounter - if saveCounter >= saveInterval: + if saveCounter >= ff.saveInterval: saveCounter = 0 - oupStatus() - t += dt - inc stabCounter - if stabCounter > stabInterval: - stabCounter = 0 - if stabilizeMassCentre: - resetCentreOfMass() + appendXyz(f, particles, t) + t += ff.dt # cleanup f.close() \ No newline at end of file diff --git a/parsexyz.nim b/parsexyz.nim new file mode 100644 index 0000000..dd08b99 --- /dev/null +++ b/parsexyz.nim @@ -0,0 +1,39 @@ +# Reader/writer for xyz files +import particle +import strutils +import strscans +import strformat +import linalg + +proc parseXyz*(path: string): seq[Particle] = + let f = readFile(path) + let lines = f.split("\n") + var i = 0 + while i <= lines.high(): + # read a single frame + # read atom count + let atomCount = parseInt(lines[i]) + inc i + + # the comment + let comment = lines[i] + inc i + + var x, y, z: float + var name: string + # the atoms + if i + atomCount + 1 >= lines.high(): # tolerate empty line at end + for j in 0..atomCount-1: + if not lines[i + j].scanf("$s$w$s$f$s$f$s$f$s", name, x, y, z): + raise newException(Defect, "Invalid format on line " & $i) + result.add(newParticle(name, vector(x, y, z), massFromName(name))) + break + i += atomCount + +proc appendXyz*(f: File, parts: seq[Particle], t: float) = + # f should be open in APPEND mode + f.writeLine(parts.len()) # atom count + f.writeLine("t = " & $t) # comment line containing the time + for atom in parts: + let pos = atom.pos + f.writeLine(&"{atom.name} {pos.x} {pos.y} {pos.z}") diff --git a/particle.nim b/particle.nim new file mode 100644 index 0000000..e747bde --- /dev/null +++ b/particle.nim @@ -0,0 +1,20 @@ +import linalg + +# define types +type + Particle* = object + name*: string + pos*: Vector + vel*: Vector + acc*: Vector + mass*: float + +func `$`*(part: Particle): string = + # Conversion to xyz + part.name & " " & $part.pos + +func newParticle*(name: string, pos: Vector, mass: float): Particle = + Particle(name: name, pos: pos, vel: vector0(), acc: vector0(), mass: mass) + +func massFromName*(name: string): float = + 1.0 # TODO implement \ No newline at end of file diff --git a/vis.nim b/vis.nim deleted file mode 100644 index ec21997..0000000 --- a/vis.nim +++ /dev/null @@ -1,254 +0,0 @@ -import sdl2 -import sdl2/ttf - -import strutils -import linalg -import sequtils -import strformat -import os - -var filename = "output.txt" -if paramCount() > 0: - filename = paramStr(1) -let lines = filename.readFile().split('\n').filterIt(it.len() > 0) - -const - windowWidth = 1000 - windowHeight = 1000 - - ballRadius = 8 - textHeight = 35 - - # assumed to be in ratio with the win width/height - xMin = -50.0 - xMax = 50.0 - yMin = -50.0 - yMax = 50.0 - -type - Particle = object - pos: Vector - vel: Vector - name: string - -var lineN = 1 -proc parseLine(line: string, t: var float): seq[Particle] = - type - TokenType = enum - ttFloat, ttString - Token = object - lineN: int - case kind: TokenType: - of ttFloat: - floatVal: float - of ttString: - stringVal: string - - var - c = 1 - tokens: seq[Token] - - proc advance: char = - c.inc - line[c-1] - - proc peek: char = - if c > line.high(): - '\0' - else: - line[c] - - proc scanNum: float = - let start = c - 1 - while peek() in {'0'..'9'}: - discard advance() - if peek() == '.': - discard advance() - while peek() in {'0'..'9'}: - discard advance() - if peek() == 'e': - discard advance() - if peek() == '-' or peek() == '+': - discard advance() - while peek() in {'0'..'9'}: - discard advance() - return parseFloat(line[start..c-1]) - - proc scanIdent: string = - let start = c - 1 - while peek() in {'a' .. 'z'}: - discard advance() - return line[start..c-1] - - t = scanNum() - while c < line.len(): - case advance(): - of '-': - tokens.add(Token(lineN: lineN, kind: ttFloat, floatVal: scanNum())) - of '0'..'9': - tokens.add(Token(lineN: lineN, kind: ttFloat, floatVal: scanNum())) - of 'a' .. 'z': - tokens.add(Token(lineN: lineN, kind: ttString, stringVal: scanIdent())) - else: - discard #whitespace or [ or ] - - var i = 0 - while i < tokens.len(): - try: - let name = tokens[i].stringVal - let x = tokens[i+1].floatVal - let y = tokens[i+2].floatVal - let vx = tokens[i+3].floatVal - let vy = tokens[i+4].floatVal - i += 5 - result.add(Particle(name: name, pos: vector(x, y), vel: vector(vx, vy))) - except: - echo "parsing crashed on line" & $tokens[i].lineN - raise newException(Defect, "Parser crash") - - inc lineN - - -proc vec2scr(v: Vector, x, y: var cint) = - let xper = (v.x - xMin) / (xMax - xMin) - let yper = (v.y - yMin) / (yMax - yMin) - x = cint(xper * windowWidth) - y = cint(yper * windowHeight) - -# traces -var trace: array[2000, Vector] -var traceIndex = 0 - -proc drawRectAt(v: Vector, renderer: RendererPtr) = - trace[traceIndex] = v - traceIndex.inc() - if traceIndex > trace.high(): - traceIndex = 0 - # how many % of the screen it is at - var x, y: cint - vec2scr(v, x, y) - if x < ballRadius or y < ballRadius: - return - if x + ballRadius > windowWidth or y + ballRadius > windowHeight: - return - x -= ballRadius - y -= ballRadius - let size = cint(2 * ballRadius) - var r = rect(x, y, size, size) - renderer.fillRect(r) - -proc drawArrow(start: Vector, delta: Vector, renderer: RendererPtr) = - var x, y: cint - var ex, ey: cint - vec2scr(start, x, y) - vec2scr(start+delta, ex, ey) - renderer.drawLine(x, y, ex, ey) - -proc drawTrace(renderer: RendererPtr) = - var x, y: cint - for v in trace: - vec2scr(v, x, y) - renderer.drawPoint(x, y) - -proc draw(renderer: RendererPtr, font: FontPtr, frame: int, speed: int) = - let line = lines[frame] - var t = 0.0 - let parts = parseLine(line, t) - - renderer.setDrawColor(0, 0, 0, 255) - renderer.clear() - - renderer.setDrawColor(255, 255, 255, 255) - for i in 0..parts.high: - let part = parts[i] - part.pos.drawRectAt(renderer) - #part.pos.drawArrow(part.vel, renderer) - - renderer.setDrawColor(0, 0, 255, 255) - #renderer.drawTrace() - - let color = color(255, 255, 255, 0) - let text = &"t = {t:>09.2f} frame = {frame} speed = {speed}" - let surface = ttf.renderTextSolid(font, text, color) - let texture = renderer.createTextureFromSurface(surface) - surface.freeSurface() - defer: texture.destroy() - let textWidth: int = text.len() * int(float(textHeight) * 0.6) - var r = rect( - cint((windowWidth - textWidth) div 2), - 0, - cint(textWidth), - textHeight - ) - renderer.copy(texture, nil, addr r) - - renderer.present() - -type SDLException = object of Defect -template sdlFailIf(cond: bool, reason: string) = - if cond: - raise newException(SDLException, reason & ", SDL error " & $getError()) - -proc main = - - sdlFailIf(not sdl2.init(INIT_VIDEO or INIT_TIMER or INIT_EVENTS)): - "SDL2 init required" - defer: sdl2.quit() - - let win = createWindow( - title = "vis", - x = SDL_WINDOWPOS_CENTERED, - y = SDL_WINDOWPOS_CENTERED, - w = windowWidth, - h = windowHeight, - flags = SDL_WINDOW_SHOWN - ) - - sdlFailIf (win.isNil): "window couldn't be created" - defer: win.destroy() - - let renderer = createRenderer( - window = win, - index = -1, - flags = Renderer_Accelerated or Renderer_PresentVsync or Renderer_TargetTexture - ) - - sdlFailIf renderer.isNil: "renderer couldn't be created" - defer: renderer.destroy() - - sdlFailIf(not ttfInit()): "TTF init failed" - defer: ttfQuit() - - let font = ttf.openFont("FreeMono.ttf", textHeight) - sdlFailIf(font.isNil): "font couldn't be created" - - var - running = true - frame = 0 - speed = 1 - - while running: - var event = defaultEvent - while pollEvent(event): - case event.kind: - of QuitEvent: - running = false - break - of KeyDown: - if event.key.keysym.scancode == SDL_SCANCODE_UP: - speed *= 2 - elif event.key.keysym.scancode == SDL_SCANCODE_DOWN: - if speed > 1 or speed < -1: - speed = speed div 2 - elif event.key.keysym.scancode == SDL_SCANCODE_LEFT: - speed = -speed - else: - discard - frame += speed - if frame < 1: - frame = 1 - if frame > lines.high(): - frame = lines.high() - draw(renderer, font, frame, speed) - -main() \ No newline at end of file