//   calcule U dans le cas lineaire 
//   a partir de Fext  et la foncion cal_Melm
//
function U = cal_sol_lin(cal_Melm,Fext,U)
//
   global NUMER ADRESS Nno_u Nno_p Npt_u Npt_p;
   global UC NI;

   [A,F]= assemblage(cal_Melm,Fext,U);

//   if Ndof < 500 then 
//     n1 = rank(full(A));
//     n2 = size(A);
//     fprintf(%io(2),'  rang de A = %d ; taille de A = %d',n1,n2(1));
//     if n1 ~= n2(1) then pause; end;
//   end;
//   B = A(1:2*Npt_u,2*Npt_u+(1:Npt_p));   rank(full(B));


   AI = A(1:NI,1:NI);

   M12 = A(1:NI,NI+1:$);
   FI = F(1:NI) - M12 * UC;

   [h,rk] = lufact(AI);
   UI = lusolve(h,FI);
   ludel(h);
   U = [UI ; UC];
endfunction
