import fpuchain.main
import numpy
from pylab import *
nvar=128
f=fpuchain.main.FpuPerCuda(128)
f.init(1) # condition initiale : mode 1
b=0.1
n=2 # terme non lineaire quadratique
nm=10 # nombre de modes
h=0.1
n1=2000
n2=500
f.run(h,n1,n2,b,n,nm)
f.close()
            
figure(0)
for m in range(nm):
    plot(f.emodemat[:,m])
xlabel("t/(n1h)")
ylabel("Em")
            
matshow(numpy.transpose(f.qstat))
xlabel("t/(n1h)")
ylabel("k")
title("q")
colorbar()
            
matshow(numpy.transpose(f.pstat))
xlabel("t/(n1h)")
ylabel("k")
title("p")
colorbar()
            
nvar1_cpu=[64,128,256,512,1024]
t1_cpu = [14.7,29.2,57.6,115,227]
nvar1_cuda=[64,128,256,512,513,1024,2048]
t1_cuda=[15.15,15.46,18.31,28.75,143,190,277]
nvar2_cpu=[64,128,256,512,1024,4096]
t2_cpu=[16.2,32.1,64.1,128.4,258,1044]
nvar2_cuda=[64,128,256,512,1024,1025,2048,4096,8192]
t2_cuda=[10.6,10.6,10.7,11.7,17.5,75.5,83,121,232]
figure(3)
loglog(nvar1_cpu,t1_cpu)
loglog(nvar1_cuda,t1_cuda)
loglog(nvar2_cpu,t2_cpu)
loglog(nvar2_cuda,t2_cuda)
xlabel("nvar")
ylabel("t (s)")
legend(("(1) cpu","(1) cuda","(2) cpu","(2) cuda"),loc='upper right')
            
