function v = phi(z,tipok,toroidal,tensorial,dobrado,C,R,TD,LD)
%calcula elemento generico da base de aproximacao
%z(1),z(2) sao coordenadas absolutas do argumento 
%C(1),C(2) eh o centro do elemento
%R(1),R(2) sao raios absolutos do elemento
%LD eh o tamanho do dominio
%TD eh o tamanho da grade de centros
%se toroidal for true usa dominio toroidal senao usa dominio R^2
%se tensorial for true usa elemento tensorial senao usa elemento radial
%se dobrado for true torna o elemento periodico por somatoria senao por
%cossenoide
%supoe que psi-mae e phi_mae sao simetricas

assert(~((~toroidal) && (dobrado)));
for j =1:2
    %calcula argumento dz(j) relativo ao centros e escalado de modo que 
    %o raio do elemento eh 1
    if (~toroidal) || dobrado
        dz(j) = abs((z(j) - C(j))/R(j));
        
    else
        t = 2*pi*(z(j)-C(j))/LD(j);
        dz(j) = LD(j)*sqrt((1 - cos(t))/2)/R(j)/pi;
    end
    %calcula o periodo TR(j) na mesma escala
    TR(j) = LD(j)/R(j);
end
if tensorial
    v = psi_mae(dz(1),tipok,dobrado,TR(1))*psi_mae(dz(2),tipok,dobrado,TR(2));
else
    v = phi_mae(dz(1),dz(2),tipok,dobrado,TR(1),TR(2));
end


