// Calcule les matrice ADRESS, NUMER et UC 
// si on des conditions aux limites de Diriclet 
// sur toute la frontiere
//
//  on choisit un element Q2 pour la vitesse et Q1 pour la pression
//  on a donc les degres de liberte suivants
//
//  Npt u + Npt v + Np P
//
//  Conditions aux limites 
//  u et v fixe  sur tout le bord

function [NUMER, ADRESS, UC, NI] = cond_limit_2D(COOR_u,CONNEC_u,COOR_p,CONNEC_p,Npt_p);
[Npt_u dim ] = size(COOR_u);
[Nelt Nno_u] = size(CONNEC_u);
[Nelt Nno_p] = size(CONNEC_p);
//
//  creation du vecteur NUMER
// U = [u; v; p];
//
Ndof_el = 2*Nno_u + Nno_p;
Ndof = 2*Npt_u + Npt_p;

NUMER=zeros(Ndof,1);
NI = 0;
nc = 0;
for i=1:Npt_u
   x = COOR_u(i,1); y = COOR_u(i,2);
   if x <> 0 & x <> 1 & y <> 0 & y <> 1 then            
     NUMER(i) = NI+1;
     NUMER(Npt_u+i) = NI+2;
     NI = NI+2;
   else
     NUMER(i) = Ndof-nc;
     NUMER(Npt_u+i) = Ndof-nc-1;
     nc = nc + 2;   
   end;
end;

Ncl = floor(Npt_p/2)+1;
for i = 1:Ncl-1
   NUMER(2*Npt_u+i) = NI+1;
   NI = NI+1;
end;

NUMER(2*Npt_u+Ncl) = Ndof-nc;
nc = nc +1;

for i = Ncl+1:Npt_p
   NUMER(2*Npt_u+i) = NI+1;
   NI = NI+1;
end;

//
//  creation de la matrice ADRESS
//
ADRESS = zeros(Nelt,Ndof_el);
for i =1:Nelt
  for j = 1:Nno_u
    ADRESS(i,j         ) = NUMER(CONNEC_u(i,j));
    ADRESS(i,Nno_u+j   ) = NUMER(Npt_u+CONNEC_u(i,j));    
  end;
  for j = 1:Nno_p
    ADRESS(i,2*Nno_u +j) = NUMER(2*Npt_u+CONNEC_p(i,j));    
  end;
end;
//
//  creation du vecteur UC
//  
UC = zeros(Ndof-NI,1);  
for i=1:Npt_u
  x = COOR_u(i,1); y = COOR_u(i,2);
  if x == 0 | x == 1 | y == 0 | y == 1 then
     UC(NUMER(i)      -NI) = exp(x)*(y*sin(y) - cos(y));  // u_x
     UC(NUMER(Npt_u+i)-NI) = exp(x)*y*cos(y);             // u_y
  end;
end;
x = COOR_p(Ncl,1); y = COOR_p(Ncl,2); 
 UC(1) = 2*exp(x)*cos(y);

endfunction;
