%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%MÉTODO 3%%%%%%%%%%%%%%%%%
%%%%%%%%%%%Matriz de flexibilidad%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%FUNCIÓN FLEXIBILIDAD
todos=menu('¿Qué desea?','Conocer AF sólo en los puntos donde se ha medido',...
        'Conocer AF en todos los puntos de la estructura');
    
    %Extensión antisimétrica de los modos
   % tam_extension=128;
    
   % for i=1:m
   % matsin3(:,i)=wextend(1,'asymw',matsin(:,i),tam_extension,'b');
    %matcon3(:,i)=wextend(1,'asymw',matcon(:,i),tam_extension,'b');
    %end
    %---------
    
    if todos==1
        tipo_norm=menu('¿Cómo ha introducido los modos?','Normalizados con la matriz de masa',...
        'Otro tipo de normalización');
        if tipo_norm==1
            clear F;clear Fc;
            
            F=matsin*diag(1./wsin.^2)*matsin';
            Fc=matcon*diag(1./wcon.^2)*matcon';
            AF=Fc-F;
            max(AF)
            disp('Los valores calculados de F y Fc corresponden a la matriz de flexibilidad')
            figure(2)
            plot([1:1:length(abs(max(AF)))],abs(max(AF)))
            hold on
            for p=1:1:length(max(abs(AF)))
                vect=[0:abs(max(AF(:,p)))/(m-1):abs(max(AF(:,p)))];
                plot(p*ones(length(vect)),vect,'r-')
                title('     Decremento de la matriz de flexibilidad, en cada grado de libertad')
            end
            disp('El valor máximo de esta matriz denota el grado de libertad al que quizá esté asociado un daño')
            xlabel('Coordenada de la línea media');ylabel('Variación de la F');
        end
        if tipo_norm==2
            conoce=menu('¿Conoce el factor de escala alfa para escalar los modos?','Si','No');
            if conoce==1
                clear F;clear Fc;
                F=(factor_escala*matsin)*diag(1./wsin.^2)*(factor_escala*matsin');
                Fc=(factor_escala*matcon)*diag(1./wcon.^2)*(factor_escala*matcon');
                AF=F-Fc
                min(AF)
                disp('Los valores calculados de F y Fc corresponden a la matriz de flexibilidad')
                plot([1:1:length(abs(min(AF)))],abs(min(AF)))
                hold on
                for p=1:1:length(max(abs(AF)))
                    vect=[0:abs(min(AF(:,p)))/(m-1):abs(min(AF(:,p)))];
                    plot(p*ones(length(vect)),vect,'r-')
                    title('Decremento de la matriz de flexibilidad, en cada grado de libertad')
                end
                xlabel('Coordenada de la línea media');ylabel('Variación de la F');
                disp('El valor máximo de esta matriz denota el grado de libertad al que quizá esté asociado un daño')
                disp('Los valores calculados de F y Fc corresponden a la matriz de flexibilidad multiplicada por un cierto escalar')
                disp('La grafica denota AF tambien escalada')
            end
            if conoce==2
                menu('El método de la flexibilidad no funciona en este caso','Seguir')
            end
        end
    end
%OBTENEMOS AF PARA TODOS LOS PUNTOS 
    if todos==2
        tipo_norm=menu('¿Cómo ha introducido los modos?','Normalizados con la matriz de masa',...
        'Otro tipo de normalización');
        clear F;clear Fc;
        %Interpolamos para obtener el valor de los modos en todos los puntos            
        tipo_interp=menu('¿Qué tipo de interpolación desea?','Cúbica','Splines(recomendada)');
        [fil,col]=size(matsin);
        [coord_int,modosin,modocon,sdf]=modos_todo_punto(tipo_interp,matsin,matcon,coord,n_elem,nbarra,n_puntos_barra);
        if tipo_norm==1
            F=(modosin)*diag(1./wsin.^2)*(modosin');
            Fc=(modocon)*diag(1./wcon.^2)*(modocon');
            AF=F-Fc;
            %max(abs(AF));
            min(AF)
            [s,d]=max(abs(min(AF)));
            danado=(d/n_elem)-.5;
            barra=int8(danado);
            disp('Probablemente el daño se haya producido en la coordenada')
            disp(coord_int(d))
            disp('De la barra')
            disp(barra)
            disp('Los valores calculados de F y Fc corresponden a la matriz de flexibilidad')
        end
        if tipo_norm==2
            conoce=menu('¿Conoce el factor de escala alfa para escalar los modos?','Si','No');
            if conoce==1
                F=(factor_escala*modosin)*diag(1./wsin.^2)*(factor_escala*modosin');
                Fc=(factor_escala*modocon)*diag(1./wcon.^2)*(factor_escala*modocon');
                AF=F-Fc;
                %max(abs(AF));
                min(AF)
                [s,d]=max(abs(min(AF)));
                danado=(d/n_elem)-.5;
                barra=int8(danado);
                disp('Probablemente el daño se haya producido en la coordenada')
                disp(coord_int(d))
                disp('De la barra')
                disp(barra)
                disp('Los valores calculados de F y Fc corresponden a la matriz de flexibilidad')
            end
            if conoce==2 
                menu('El método de la flexibilidad no funciona en este caso','Seguir')
            end
        end
    end
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[minabsAF,posminabsAF]=min(abs(AF));
[maxnabsAF,posmaxabsAF]=max(abs(AF));
[minAF,posminAF]=min((AF));
[maxAF,posmaxAF]=max((AF));