% Funzione che calcola il livello della falda

function [Livello,PiezDef,PiezDefT,ErrPiezoLink,ARRAYdatePL] = Piezo(PiezDef,PiezDefT,...
    BaroDef,ARRAYdatePL,NuovoZeroPL,NdatiMediaP,Ndatidespike,NodoPiezoLink,ErrPiezoLink,rPL,...
    Anchor_real,marginePiezo,FileName)

text = 'Piezo function started';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);

if NuovoZeroPL == 1
    if NdatiMediaP > Ndatidespike
        Ndati = NdatiMediaP;
    else
        Ndati = Ndatidespike;
    end
    ini = round(Ndati/2)+1;
    if rem(Ndati,2) == 0
        ini = ini+1;
    end
    clear NDati
    ini = ini + marginePiezo;
    ErrPiezoLink = ErrPiezoLink(ini:end,:);
    PiezDef = PiezDef(ini:end,:);
    PiezDefT = PiezDefT(ini:end,:);
    BaroDef = BaroDef(ini:end,:);
    ARRAYdatePL = ARRAYdatePL(ini:end,1); 
end

[dati,~] = size(PiezDef);
ProfFalda = zeros(dati,rPL); % in riga le date, in colonna i piezometri
for p = 1:rPL
    if strcmp(NodoPiezoLink(1,4),'VW kPa') == 1 || strcmp(NodoPiezoLink(1,4),'VW kg/cm2') == 1
        ProfFalda(:,p) = (PiezDef(:,p))/9806.65;
    else
        ProfFalda(:,p) = (PiezDef(:,p) - BaroDef(:,1))/9806.65;
    end
end

if Anchor_real ~= 0 % correggo la profondità del piezometro
%     Nodi = [cell2mat(catena(:,3)) cell2mat(catena(:,2)) cell2mat(catena(:,1))];
%     [r,~] = size(Nodi);
%     % Cerco l'ancora
%     for i = 1:r
%         if Nodi(i,3) == 9
%             break
%         end
%     end
%     diff = Anchor_real - Nodi(i,2);
    NodoPiezoLink(:,3) = num2cell(cell2mat(NodoPiezoLink(:,3)) - Anchor_real);
end

Livello = zeros(dati,rPL);  % Dove sta la falda rispetto al Piano Campagna
clear p
for ii = 1:dati
    for p = 1:rPL
        if  ProfFalda(ii,p) <= 0 % La falda è sotto al piezometro e questo non può leggerne dunque la profondità
            Livello(ii,p) = cell2mat(NodoPiezoLink(p,3));
        else
            Livello(ii,p) = cell2mat(NodoPiezoLink(p,3)) + ProfFalda(ii,p);
        end
    end
end
 
% Impacchettamento matrice errori
[r,~] = size(ErrPiezoLink);
Matrice_err = zeros(r,rPL);
for i = 1:r % date
    d = 1;
    for n = 1:rPL % nodi
        j = 1;
        err = ErrPiezoLink(i,d:d+1);
        while j <= 2
            if err(1,j) == 1
                Matrice_err(i,n) = 1;
                break
            end
            j = j+1;
        end
        d = d+2;
    end
end
ErrPiezoLink = Matrice_err';
    
text = 'Piezo Link elaborated correctly. Piezo function closed';
fprintf(fileID,fmt,text);
fclose(fileID);

end