
from matplotlib.pyplot import *
import math
import numpy
import poisson.main
              
 
n=8 
p=5
levels = n-p+1
laplace=poisson.main.Poisson(p,p,levels,1.0,1.0,x0=0.0,y0=0.0)
laplace.laplacien()
laplace.neumann_borders(0.0,0.0,0.0,0.0,0.0)
T1 = 0.0  
T2 = 1.0
laplace.dirichlet_polygon(0,0,[0],[32],T1)
laplace.dirichlet_polygon(32,0,[0],[32],T2)
laplace.interface_polygon(16,0,[0],[32],0.0,2.0,1.0)
result=laplace.opencl_iterations_norm(40,50,omega=1.95)
laplace.init_array() 
result1=laplace.opencl_iterations_norm(40,50,omega=1.98)
laplace.init_array()
result2=laplace.opencl_iterations_norm(40,50,omega=1.99)
laplace.init_array()
result3=laplace.multigrid_Vcycles_norm(1,4,50,2,1,30)
figure(figsize=(8,5))
plot(result[0],result[1],label='1 grille w=1.95')
plot(result1[0],result1[1],label='1 grille w=1.98')
plot(result2[0],result2[1],label='1 grille w=1.99')
plot(result3[0],result3[1],label='4 grilles')
xlabel('niter')  
ylabel('norm')
legend(loc='lower right')
              

T=laplace.get_array() 
flux_x=-laplace.get_derivX()
flux_y=-laplace.get_derivY() 
extent = laplace.get_extent()
figure(figsize=(8,8))
contour(T,20,extent=extent)
imshow(~laplace.get_mask(),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('x')
ylabel('y')
            

a=4
laplace.neumann_polygon(8,10,[0,a,0,-a],[a,0,-a,0],[0,0,0,0],[0,0,0,0],0)
laplace.interface_polygon(20,20,[a,0,-a,0],[0,a,0,-a],0.0,0.0,1.0)
result=laplace.opencl_iterations_norm(20,50,omega=1.99)
T=laplace.get_array()
figure(figsize=(8,8))
contour(T,40,extent=extent)
imshow(~laplace.get_mask(),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('x')
ylabel('y')
              

n=8 
p=5
levels = n-p+1
laplace=poisson.main.Poisson(p,p,levels,1.0,1.0,x0=0.0,y0=0.0)
laplace.laplacien()
laplace.dirichlet_borders(1.0)
laplace.interface_polygon(8,8,[16,0,-16,0],[0,16,0,-16],0.0,1.0,5.0)
laplace.interface_polygon(10,10,[12,0,-12,0],[0,12,0,-12],0.0,5.0,1.0)
laplace.source_rect(16,18,2,2,1.0)
result=laplace.opencl_iterations_norm(30,50,omega=1.97)
figure(figsize=(8,5))
plot(result[0],result[1],label='1 grille w=1.97')
xlabel('niter')  
ylabel('norm')
legend(loc='lower right')
            

T=laplace.get_array() 
extent = laplace.get_extent()
figure(figsize=(8,8))
contour(T,20,extent=extent)
imshow(~laplace.get_mask(),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('x')
ylabel('y')
            

laplace.neumann_polygon(8,7,[0,16,0,-16],[1,0,-1,0],[0,0,0,0],[0,0,0,0],0)
result=laplace.opencl_iterations_norm(30,50,omega=1.97)
T=laplace.get_array() 
figure(figsize=(8,8))
contour(T,20,extent=extent)
imshow(~laplace.get_mask(),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('x')
ylabel('y')
            
