import dynode.main as dyn
import numpy
from pylab import *
s=dyn.CVOde(dyn.OdeLorenz,dyn.OdeAdams,dyn.OdeFunctional)            

s.set_cst([10.0,28.0,8.0/3,27.0])
s.root_find(1,dyn.OdeZeroCrossUp)
s.init(0.0,[1.0,1.0,1.0],1e-6,[1e-7])
data1=s.solve(0.01,50.0)
t=data1[0]
x=data1[1]
y=data1[2]
z=data1[3]
figure(1)
plot(x,y)
                
data2=s.get_roots(0,0) 
t=data2[0]
x=data2[1]
y=data2[2]
z=data2[3]
figure(2)
plot(x,y,marker=".",linestyle="",markersize=1)
                

s.close()

plot=dyn.Plot()
fig1=dyn.Figure()
fig1.set_camera(300)
fig2=dyn.Figure()
a=50.0
b=40.0
fig1.viewbox(-a,a,-a,a,-a,a)
fig2.viewbox(-a,a,-a,a,-a,a)
g1=dyn.Grid(fig1,-b,b,10,-b,b,10,0,ticks=1,rgb=[1.0,0.5,1.0])
p1=dyn.Plot3d(fig1,data1[1],data1[2],data1[3],style=dyn.PlotStyleLines,rgb=[0,0,1.0],width=1.0)
g2=dyn.Grid(fig2,-b,b,10,-b,b,10,0,ticks=1,rgb=[1.0,0.5,1.0])
p1=dyn.Plot3d(fig2,data2[1],data2[2],data2[3],style=dyn.PlotStylePoints,rgb=[0,0,1.0],width=2.0)
plot.show()
plot.wait()
path="../../../../figures/numerique/dynode/pydynode/"
img=fig1.get_image()
img.save(path+"plot3.png","PNG")
img=fig2.get_image()
img.save(path+"plot4.png","PNG")
plot.close()
                

def dKinetic(t,p):
    dq = p
    return dq
  
def dPotential(t,q):
    dp = [0,0,0]
    dp[0] = q[0]
    dp[1] = q[1]
    dp[2] = q[2]
    return dp

def energy(t,q,p):
    return 0.5*(p[0]*p[0]+p[1]*p[1]+p[2]*p[2])+0.5*(q[0]*q[0]+q[1]*q[1]+q[2]*q[2]);
                

def bfield(t,x):
    return [0,0,-1]
                
def rootfn(t,q,p):
    return [q[0],q[2]]
                

import dynode.main as dyn
solver=dyn.Verlet(0)
solver.set_eqn(3,dKinetic,dPotential,energy)
solver.set_bfield(dyn.BFieldUniform,bfield)
solver.set_rootfn(2,rootfn)
solver.init(0.0,[1.0,0.0,0.0],[0.0,1.0,1],0.01)
data=solver.solve(0.1,100)
t=data[0]
x=data[1]
y=data[2]
z=data[3]
e=data[7]
                

solver.root_find(1,0,1e-3)
data=solver.solve(1.0,1000)
roots1=solver.get_roots(0)
roots2=solver.get_roots(1)
solver.close()
                

plot=dyn.Plot()
fig1=dyn.Figure()
fig1.set_camera(10)
fig1.viewbox(-2.0,2.0,-2.0,2.0,-2.0,2.0)
g1=dyn.Grid(fig1,-1.0,1.0,10,-1.0,1.0,10,0,ticks=1)
p1=dyn.Plot3d(fig1,x,y,z,style=dyn.PlotStyleLines)
fig2=dyn.Figure()
fig2.set_camera(10)
fig2.viewbox(-2.0,2.0,-2.0,2.0,-2.0,2.0)
g2=dyn.Grid(fig2,-1.0,1.0,10,-1.0,1.0,10,0,ticks=1)
p2=dyn.Plot3d(fig2,roots1[1],roots1[2],roots1[3],style=dyn.PlotStylePoints,width=2.0)
p3=dyn.Plot3d(fig2,roots2[1],roots2[2],roots2[3],style=dyn.PlotStylePoints,width=2.0)
plot.show()
plot.wait()
path="../../../../figures/numerique/dynode/pydynode/"
img=fig1.get_image()
img.save(path+"plot5.png","PNG")
img=fig2.get_image()
img.save(path+"plot6.png","PNG")
plot.close()
                
