from fipy import CellVariable, Grid1D
from numpy import array, empty
from time import time

# initialize:
Nx = 2
mesh = Grid1D(nx=Nx, dx=1.0)
y = CellVariable(mesh=mesh, value=2.0, hasOld=0)
z = y-1
print'y', y
print'z', z
print'y.grad', y.getGrad()
print'z.grad', z.getGrad()
print  


where = [0, 1]
y.setValue(1.0, where=where)
print'y', y
print'z', z
print'y.grad', y.getGrad()
print'z.grad', z.getGrad()
print

Ny = 1
ystore = empty((Ny * Nx,))
ystore[0] = 2.0
ystore[1] = 0.0
y.value = ystore
y.stale = 1  # comment out this line to check behavior without stale update
print'y', y
print'z', z
print'y.grad', y.getGrad()
print'z.grad', z.getGrad()
print


where = [0, 1]
y.setValue(0.0, where=where)
print'y', y
print'z', z
print'y.grad', y.getGrad()
print'z.grad', z.getGrad()
print


Ntest = 10000
tin = time()
for itest in range(Ntest):
    where = [0, 1]
    y.setValue(0.0, where=where)
    #y.value[1] = 0.0
    #y.stale = 1

tout = time()
print tout - tin

