function [base_h,A_h,inib_h,tamb_h] = elimina_elemento_hier2(base_h,...
    A_h,inib_h,tamb_h,kv,passov,iv,j)
%rearranja as colunas da matriz de base multinivel A_h de modo a eliminar
%o elemento j da base multinivel base_h. Supoe que o elemento
%pertence ao nivel kv. Supoe que o maior nivel
%presente nessa matriz eh iv. Supoe tambem que o trecho de qualquer nivel k
%consiste de tamb_h(k) colunas comecando na coluna inib_h(k). Devolve um
%indice jnovo da coluna aberta. Tambem ajusta os vetores tamb_h, inib_h, e
%rearranja os elementos da base base_h.elementos de modo a manter a
%correspondencia com as colunas de A_h.

%fprintf(2,'eliminando o elemento %d do nivel %d\n', j,kv);
np = size(A_h,1);
jult = inib_h(kv) + tamb_h(kv) - 1; %ultimo elemento do nivel kv
assert(j >= inib_h(kv))
assert(j <= jult)
if j ~= jult
    A_h(:,j) = A_h(:,jult);
    base_h.elementos(j) = base_h.elementos(jult);
end
tamb_h(kv) = tamb_h(kv) - 1;
jvago = jult;
rv = kv + passov;
while rv <= iv
    if tamb_h(rv) ~= 0
        jult = inib_h(rv) + tamb_h(rv) - 1; %ultimo elemento do nivel rv
        assert(jvago == inib_h(rv) - 1)
        A_h(:,jvago) = A_h(:,jult);
        base_h.elementos(jvago) = base_h.elementos(jult);
        inib_h(rv) =inib_h(rv) - 1;
        jvago = jult;
    end
    rv = rv + passov;
end

A_h(:,jvago:jvago) = [];
base_h.elementos(jvago:jvago) = [];

