Skip to content

Investigate slowness and memory usage compared to Python #190

@mratsim

Description

@mratsim

Reported by @narimiran on IRC

import math
import arraymancer

const
  dz = 0.01
  z = 100
  spaceSteps = int(z / dz)
  timeSteps = 50000
  dt = 0.12 / timeSteps
  alpha = 2.0
  startingTemp = 30.0
  oscillations = 20.0

var
  Ts = startingTemp * ones[float](timeSteps, spaceSteps)


for j in 0 ..< timeSteps:
  Ts[j, 0] = startingTemp - oscillations * sin(2.0 * PI * j.float / timeSteps)

proc f(T: Tensor[float]): Tensor[float] =
  let d2T_dz2 = (T[_, 0..^3] - 2.0 * T[_, 1..^2] + T[_, 2..^1]) / dz^2
  return alpha * d2T_dz2

proc eulerSolve(Ts: var Tensor[float]) =
  for t in 0 ..< timeSteps-1:
    Ts[t+1, 1..^2] = Ts[t, 1..^2] + dt * f(Ts[t, _])
    Ts[t+1, ^1] = Ts[t+1, ^2]

Ts.eulerSolve()

2018-03-03_22-18-27

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions