%Descripción del progama:
%el programa presente ha sido realizado con el fin de poder realizar
%el calculo del factor de seguridad por medio de distintos métodos
%obedeciendo distintos tipos de ecuasiones, en base a que tipos de disponen
%al momento de realizar el cálculo, con el fín de poder determinar dicho
%factor de una forma sencilla.

%Autor del proyecto: Juan Esteban Arévalo

disp('Bienvenido, este programa está diseñado para poder determinar el factor')
pause(2.5)
disp('de seguridad utilizando distintas fórmulas de método de talud infinito')
pause(2.5)
disp('en base a la presencia o ausencia de distintas variables')
pause(2.5)
disp('primero ingrese la cantidad de FS que calculará en esta sesión')
pause(2.5)
disp('para ser posteriormente graficados una vez calculados (máximo 10) ')
contador= input(' ');
fs1=0;
fs2=0;
fs3=0;
fs4=0;
fs5=0;
fs6=0;
fs7=0;
fs8=0;
fs9=0;

numfs=0;
while contador>numfs
    disp('Digite un numero para seleccionar las fórmulas a ejecutar:')
    pause(1)
    disp('1: Para un suelo con o sin cohesión ')
    disp('2: Con presencia de coeficientes sísmicos pseudoestáticos ')
    disp('3: Según esfuerzos efectivos o esfuerzos totales ')
    disp('4: Teniendo en cuenta sobrecargas de arboles o por la ecuación general ')
    menu= input(' ');
    switch menu
    case 1
    disp('A continuación se proseguirá a calcular el factor de seguridad teniendo')
    pause(2)
    disp('en cuenta si el suelo está seco y sin cohesión o saturado y con cohesión')
    pause(2)
    disp('para seleccionar el caso requerido digite el número correspondiente:')
    pause(1)
    disp('1: Para un suelo seco y sin cohesión ')
    disp('2: Saturado y con cohesión')
    menu= input(' ');
    switch menu
        case 1
        af= input ('ingrese el ángulo de fricción interna o ángulo de reposo en grados ');
        angulofric = tan(af);
        ai= input ('ingrese el ángulo de la pendiente en grados ');
        anguloinc = tan(ai);
        numfs = numfs+1;
        fs=(angulofric/anguloinc);
        if numfs==1
            fs0=fs;
        end
        if numfs==2
            fs1=fs;
        end
        if numfs==3
            fs2=fs;
        end
        if numfs==4
            fs3=fs;
        end
        if numfs==5
            fs4=fs;
        end
        if numfs==6
            fs5=fs;
        end
        if numfs==7
            fs6=fs;
        end
        if numfs==8
            fs7=fs;
        end
        if numfs==9
            fs8=fs;
        end
        if numfs==10
            fs9=fs;
        end
        
        case 2
        af= input ('ingrese el ángulo de fricción interna o ángulo de reposo en grados ');
        angulofric = tan(af);
        ai= input ('ingrese el ángulo de la pendiente en grados ');
        cosai = cos(ai);
        senai = sin(ai);
        cohe= input ('ingrese el valor de la cohesión en t/m2 ');
        zprof= input ('ingrese la profundidad del talud en metros ');
        ysat= input ('ingrese el peso unitario del suelo saturado en t/m3 ');
        presu= input ('ingrese la presión de los poros en t/m2 ');
        numfs = numfs+1;
        fs= ((cohe+(zprof*ysat*((cosai*cosai)-presu))*angulofric)/(zprof*ysat*senai*cosai));
        if numfs==1
            fs0=fs;
        end
        if numfs==2
            fs1=fs;
        end
        if numfs==3
            fs2=fs;
        end
        if numfs==4
            fs3=fs;
        end
        if numfs==5
            fs4=fs;
        end
        if numfs==6
            fs5=fs;
        end
        if numfs==7
            fs6=fs;
        end
        if numfs==8
            fs7=fs;
        end
        if numfs==9
            fs8=fs;
        end
        if numfs==10
            fs9=fs;
        end        
        otherwise
            disp('Ingrese un numero valido y reinicie la aplicación')
    end 
    
    case 2
    disp('A continuación se proseguirá a calcular el factor de seguridad teniendo')
    pause(2)
    disp('en cuenta la presencia de coeficientes sísmicos pseudoestáticos')
    pause(1)
    
        af= input ('ingrese el ángulo de fricción interna o ángulo de reposo en grados ');
        angulofric = tan(af);
        ai= input ('ingrese el ángulo de la pendiente en grados ');
        cosai = cos(ai);
        senai = sin(ai);
        cohe= input ('ingrese el valor de la cohesión en t/m2 ');
        zprof= input ('ingrese la profundidad del talud en metros ');
        zw= input ('ingrese la profundidad a partir del nivel freático en metros ');
        ysat= input ('ingrese el peso unitario del suelo saturado en t/m3 ');
        yinsat= input ('ingrese el peso unitario del suelo insaturado en t/m3 ');
        yprima= input ('ingrese el peso unitario efectivo bajo el nivel freático en t/m3 ');
        peso= input ('ingrese el peso total del talud en toneladas ');
        vertcoef= ('ingrese el coeficiente sísmico vertical pseudo estático ');
        horicoef= ('ingrese el coeficiente sísmico horizontal pseudo estático ');
        estab= ('ingrese el valor de fuerzas de estabilidad ');
        numfs = numfs+1;
        fs= (((cohe/cosai)+(angulofric*((cosai*((yinsat*zw)+(yprima*(zprof-zw))))-(horicoef*peso*senai)-(vertcoef*peso*cosai))))/((senai*((yinsat*zw)+(yprima*(zprof-zw))))+(ysat*(zprof-zw)*senai)+(vertcoef*peso*senai*cosai)+(horicoef*peso*cosai)-estab));
        if numfs==1
            fs0=fs;
        end
        if numfs==2
            fs1=fs;
        end
        if numfs==3
            fs2=fs;
        end
        if numfs==4
            fs3=fs;
        end
        if numfs==5
            fs4=fs;
        end
        if numfs==6
            fs5=fs;
        end
        if numfs==7
            fs6=fs;
        end
        if numfs==8
            fs7=fs;
        end
        if numfs==9
            fs8=fs;
        end
        if numfs==10
            fs9=fs;
        end
        
    case 3
    disp('A continuación se proseguirá a calcular el factor de seguridad teniendo')
    pause(2)
    disp('en cuenta los esfuerzos efectivos y totales')
    pause(2)
    disp('para seleccionar el caso requerido digite el número correspondiente: ')
    pause(1)
    disp('1:Esfuerzos efectivos ')
    disp('2:Esfuerzos totales ')
    menu= input(' ');
    switch menu
        case 1
        S= input ('ingrese 1 si la cohesión es cero o 2 si además el flujo es paralelo a la superficie del terreno ');
            if S==1;
            presu= input ('ingrese la presión de los poros en t/m2 ');
            ypeso= input ('ingrese el peso unitario del suelo en t/m3 ');    
            zprof= input ('ingrese la profundidad del talud en metros ');
            af= input ('ingrese el ángulo de fricción interna o ángulo de reposo en grados ');
            angulofric = tan(af);
            ai= input ('ingrese el ángulo de la pendiente en grados ');
            cosai = cos(ai);
            tanai = tan(ai);
            numfs = numfs+1;
            fs= ((1-(presu/(ypeso*zprof*(cosai*cosai))))*(angulofric/tanai));
            if numfs==1
            fs0=fs;
            end
            if numfs==2
            fs1=fs;
            end
            if numfs==3
            fs2=fs;
            end
            if numfs==4
            fs3=fs;
            end
            if numfs==5
            fs4=fs;
            end
            if numfs==6
            fs5=fs;
            end
            if numfs==7
            fs6=fs;
            end
            if numfs==8
            fs7=fs;
            end
            if numfs==9
            fs8=fs;
            end
            if numfs==10
            fs9=fs;
            end
            
            elseif S==2
            zprof= input ('ingrese la profundidad del talud en metros ');
            zw= input ('ingrese la profundidad a partir del nivel freático en metros ');
            ysat= input ('ingrese el peso unitario del suelo saturado en t/m3 ');
            yinsat= input ('ingrese el peso unitario del suelo insaturado en t/m3 ');        
            af= input ('ingrese el ángulo de fricción interna o ángulo de reposo en grados ');
            angulofric = tan(af);
            ai= input ('ingrese el ángulo de la pendiente en grados ');
            tanai = tan(ai);
            mprof= (zw/zprof);
            numfs = numfs+1;
            fs= ((1-(mprof*(ysat/yinsat)))*(angulofric/tanai));
            if numfs==1
            fs0=fs;
            end
            if numfs==2
            fs1=fs;
            end
            if numfs==3
            fs2=fs;
            end
            if numfs==4
            fs3=fs;
            end
            if numfs==5
            fs4=fs;
            end
            if numfs==6
            fs5=fs;
            end
            if numfs==7
            fs6=fs;
            end
            if numfs==8
            fs7=fs;
            end
            if numfs==9
            fs8=fs;
            end
            if numfs==10
            fs9=fs;
            end
            
            end
    
        case 2
        cu= input ('ingrese el esfuerzo de resistencia al corte en t/m2 ');
        ai= input ('ingrese el ángulo de la pendiente en grados ');
        cosai = cos(ai);
        senai = sin(ai);
        zprof= input ('ingrese la profundidad del talud en metros ');
        ypeso= input ('ingrese el peso unitario del suelo en t/m3 ');
        numfs = numfs+1;    
        fs= (cu/(ypeso*zprof*cosai*senai));
            if numfs==1
            fs0=fs;
            end
            if numfs==2
            fs1=fs;
            end
            if numfs==3
            fs2=fs;
            end
            if numfs==4
            fs3=fs;
            end
            if numfs==5
            fs4=fs;
            end
            if numfs==6
            fs5=fs;
            end
            if numfs==7
            fs6=fs;
            end
            if numfs==8
            fs7=fs;
            end
            if numfs==9
            fs8=fs;
            end
            if numfs==10
            fs9=fs;
            end 
        
        otherwise
            disp('Ingrese un numero valido y reinicie la aplicación ')
    end 
        
    case 4
    disp('A continuación se proseguirá a calcular el factor de seguridad teniendo')
    pause(2)
    disp('en cuenta otros tipos de operaciones')
    pause(2)
    disp('para seleccionar el caso requerido digite el número correspondiente:')
    pause(1)
    disp('1:Sobrecargas de arboles ')
    disp('2:Ecuación general ')
    menu= input(' ');
    switch menu
        case 1
        cohe= input ('ingrese el valor de la cohesión en t/m2 ');
        zprof= input ('ingrese la profundidad del talud en metros ');
        ysat= input ('ingrese el peso unitario del suelo saturado en t/m3 ');
        yinsat= input ('ingrese el peso unitario del suelo insaturado en t/m3 ');
        ai= input ('ingrese el ángulo de la pendiente en grados ');
        cosai = cos(ai);
        senai = sin(ai);
        af= input ('ingrese el ángulo de fricción interna o ángulo de reposo en grados ');
        angulofric = tan(af);
        zw= input ('ingrese la profundidad a partir del nivel freático en metros ');
        Cresis= ('ingrese el valor de la resistencia de las raices de los arboles ');
        qsobre= ('ingrese el valor de la sobrecarga generada por el arbol ');
        numfs = numfs+1;
        fs= ((Cresis+cohe+((cosai*cosai)*(qsobre+yinsat*(zprof-zw)+(ysat-yinsat)*zw)*angulofric))/(senai*cosai*(qsobre+yinsat*(zprof-zw)+ysat*zw)));
            if numfs==1
            fs0=fs;
            end
            if numfs==2
            fs1=fs;
            end
            if numfs==3
            fs2=fs;
            end
            if numfs==4
            fs3=fs;
            end
            if numfs==5
            fs4=fs;
            end
            if numfs==6
            fs5=fs;
            end
            if numfs==7
            fs6=fs;
            end
            if numfs==8
            fs7=fs;
            end
            if numfs==9
            fs8=fs;
            end
            if numfs==10
            fs9=fs;
            end
                
        case 2
         af= input ('ingrese el ángulo de fricción interna o ángulo de reposo en grados ');
        angulofric = tan(af);
        ai= input ('ingrese el ángulo de la pendiente en grados ');
        cosai = cos(ai);
        senai = sin(ai);
        cohe= input ('ingrese el valor de la cohesión en t/m2 ');
        zprof= input ('ingrese la profundidad del talud en metros ');
        zw= input ('ingrese la profundidad a partir del nivel freático en metros ');
        ysat= input ('ingrese el peso unitario del suelo saturado en t/m3 ');
        yinsat= input ('ingrese el peso unitario del suelo insaturado en t/m3 ');
        yprima= input ('ingrese el peso unitario efectivo bajo el nivel freático en t/m3 ');
        yagua= 0.998;
        mcons= zw/zprof;
        numfs = numfs+1;
        fs= ((cohe+((1-mcons)*yinsat+(mcons*ysat)-(mcons*yagua))*zprof*(cosai*cosai)*angulofric)/(((1-mcons)*yinsat+(mcons*ysat))*zprof*senai*cosai));
             if numfs==1
            fs0=fs;
            end
            if numfs==2
            fs1=fs;
            end
            if numfs==3
            fs2=fs;
            end
            if numfs==4
            fs3=fs;
            end
            if numfs==5
            fs4=fs;
            end
            if numfs==6
            fs5=fs;
            end
            if numfs==7
            fs6=fs;
            end
            if numfs==8
            fs7=fs;
            end
            if numfs==9
            fs8=fs;
            end
            if numfs==10
            fs9=fs;
            end     
        
        otherwise
            disp('Ingrese un numero valido y reinicie la aplicación')
    end     
    
        otherwise
    disp('ingrese un numero valido y reinicie la aplicación')
    end
end    
    
disp('el/los factor(es) de seguridad es(son): ')
disp(fs0)
grafica=fs0;
if fs1~= 0;
grafica=[fs0;fs1];
disp(fs1)
end
if fs2~=0;
grafica=[fs0;fs1;fs2];
disp(fs2)
end
if fs3~=0;
grafica=[fs0;fs1;fs2;fs3];
disp(fs3)
end
if fs4~=0;
grafica=[fs0;fs1;fs2;fs3;fs4];
disp(fs4)
end
if fs5~=0;
grafica=[fs0;fs1;fs2;fs3;fs4;fs5];
disp(fs5)
end
if fs6~=0;
grafica=[fs0;fs1;fs2;fs3;fs4;fs5;fs6];
disp(fs6)
end
if fs7~=0;
grafica=[fs0;fs1;fs2;fs3;fs4;fs5;fs6;fs7];
disp(fs7)
end
if fs8~=0;
grafica=[fs0;fs1;fs2;fs3;fs4;fs5;fs6;fs7;fs8];
disp(fs8)
end
if fs9~=0;
grafica=[fs0;fs1;fs2;fs3;fs4;fs5;fs6;fs7;fs8;fs9];
disp(fs9)
end
plot(grafica)
grid on