Está en la página 1de 10

CURSO ONLINE “PROGRAMACIÓN EN MATLAB

APLICADO A GEOTECNIA”

Práctica. Cimentaciones superficiales

1
Práctica: Cimentaciones superficiales
Introducción 

Posiblemente esta sea una de las prácticas más complejas que se desarrollan en este curso. Sin
embargo, esta dificultad no se debe al código escrito o a la programación en si, sino a la
complejidad del problema a resolver para el cual se escribe este programa.
Por eso, se recuerda que deben tratar de aprender los fundamentos de la programación, y que si
hay algún problema con la teoría de fondo traten de apartarlo en la medida de lo posible. Sin
embargo, se aportará documentación y bibliografía referente a la base teórica en que nos
apoyamos para dar solución al problema.
El problema se ha simplificado en la medida de lo posible para hacer la programación lo más
fácil posible, y que se centre en aprender y practicar los conocimientos aprendidos en este
módulo.

Objetivo 

El objetivo de la práctica es, principalmente, que el alumno practique la introducción y salida de


variables desde archivos externos con otros formatos distintos a MatLab.
Además, se procurará que se practiquen los conceptos aprendidos hasta el módulo actual.

Enunciado del problema 

Se pide el desarrollo de un programa (script) el cual deberá calcular las tensiones bajo una
cimentación superficial (zapata aislada) así como los asientos producidos por las cargas según la
teoría de la elasticidad. Una vez calculado esto, también deberá calcularse la carga ultima que
producirá el fallo de la cimentación según el método de cálculo de Brinch-Hansen.
Para cualquier duda en relación a las teorías usadas para dar solución al problema consulten la
bibliografía.
Los datos iniciales deberán ser tomados de una hoja de cálculo Excel que encontrarán en el
espacio destinado a este módulo. Además, deberá crearse un archivo .txt que incluya los valores
obtenidos a modo de resumen de cálculos.
Para la resolución del problema, se debe adecuar a lo establecido en el documento
“instrucciones del programa”. Donde se especifica que:

 La zapata será rectangular o circular 
 La zapata estará en superficie 
 No habrá inclinación de la carga y ésta será concéntrica 
 No habrá inclinación de la zapata 
 No habrá inclinación del terreno 
 La zapata estará suficientemente alejada de taludes para no tenerlo en cuenta en 
coeficientes correctores 


Curso “Programación en Matlab aplicado a geotecnia”
Los datos que deberán incluirse en el archive resumen serán:

 Zapatas rectangulares (condiciones no drenadas): 
o Tensión vertical y asientos en: 
 Centro del lado “B” 
 Esquina 
 Centro de la zapata 
o Tensión última admisible 
 Zapatas circulares (condiciones drenadas y no drenadas): 
o Tensión vertical y asientos 
 Centro de la zapata 
 Lado de la zapata 
o Tensión última admisible 

Información adicional 
Para el caso no drenado el coeficiente de Poison será 0.5 y el ángulo φ será 0.

Desarrollo de la practica 

Carga de de variables 
Abra un nuevo script.
En primer lugar, se establecerán las variables de entrada. Éstas serán tomadas del Excel adjunto
mediante la función xlsread().
%% Datos
[datos_num,datos_texto] = xlsread('entrada_datos.xlsx');
%definición de variables
b=datos_num(2,1);
L=datos_num(3,1);
Z=datos_num(1,4);
E=datos_num(6,1);
poisson=datos_num(5,1);
p=datos_num(2,4);
a=datos_num(8,1);
cohesion=datos_num(3,4);
phi_prima=datos_num(4,4);

Como se puede observar, los datos se separarán en dos variables: datos_num y datos_texto.
Cada una de ellas contendrá los datos que son de tipo numérico y de tipo texto respectivamente.
En esta ocasión no se ha establecido el rango de datos a cargar en la función ya que
automáticamente MatLab tomará el rango de datos ajustado a los valores que son no nulos. Es
decir: de la A2 a la E10.
Cada variable contendrá una matriz y simplemente igualamos cada una de las variables a su
valor correspondiente en la matriz cargada.


Curso “Programación en Matlab aplicado a geotecnia”
Estructura de selección 
La solución del problema difiere bastante si se trata de una zapata rectangular o si es circular.
Por tanto, se establece una estructura de selección con dos apartados (uno para cada caso) que
dividirá el código en dos. Para la sentencia de comparación, o la condición para que realice los
cálculos para rectangular o circular, se ha utilizado una función llamada strcmp() que consta de
dos argumentos, los cuales serán cadenas de caracteres que serán comparados y si son iguales
devolverá el valor True, y en caso contrario false.
if strcmp(datos_texto(1,2),'rectangular')
Cálculos para rectangular
elseif strcmp(datos_texto(1,2),'circular')
Cálculos para circular
else
error('ERROR AL INTRODUCIR CIRCULAR O RECTANGULAR EN EL
EXCEL')
end
Cálculos para rectangular 
%% Cálculo de tensión vertical esquina de la zapata
R1=(L^2+Z^2)^0.5;
R2=(b^2+Z^2)^0.5;
R3=(L^2+b^2+Z^2)^0.5;
stress_z_esquina=(p/(2*pi))*(atan(L*b/(Z*R3))+(L*b*Z/R3)*((
1/R1^2)+(1/R2^2)));

%Cálculo de asiento esquina de la zapata


M1=(L/b);
N1=(Z/b);
A=(1/(2*pi))*(log((sqrt(1+M1^2+N1^2)+M1)/(sqrt(1+M1^2+N1^2)
-M1))+M1*log((sqrt(1+M1^2+N1^2)+1)/(sqrt(1+M1^2+N1^2)-1)));
B=(N1/(2*pi))*atan(M1/(N1*sqrt(1+M1^2+N1^2)));
asiento_esquina=(p*b/E)*(1-poisson^2)*(A-((1-2*poisson)-(1-
poisson))*B);

%borrar largo y ancho de zapata


clear largo
clear ancho

%% Cálculo de tensión vertical centro


largo=L/2;
ancho=b/2;
R1=(largo^2+Z^2)^0.5;
R2=(ancho^2+Z^2)^0.5;
R3=(largo^2+ancho^2+Z^2)^0.5;
stress_z_centro=((p/(2*pi))*(atan(largo*ancho/(Z*R3))+(larg
o*ancho*Z/R3)*((1/R1^2)+(1/R2^2))))*4;

%Cálculo de asiento centro


M1=(largo/ancho);
N1=(Z/ancho);


Curso “Programación en Matlab aplicado a geotecnia”
A=(1/(2*pi))*(log((sqrt(1+M1^2+N1^2)+M1)/(sqrt(1+M1^2+N1^2)
-M1))+M1*log((sqrt(1+M1^2+N1^2)+1)/(sqrt(1+M1^2+N1^2)-1)));
B=(N1/(2*pi))*atan(M1/(N1*sqrt(1+M1^2+N1^2)));
asiento_centro=((p*ancho/E)*(1-poisson^2)*(A-((1-
2*poisson)-(1-poisson))*B))*4;

%borrar largo y ancho de zapata


clear largo
clear ancho

%% Cálculo de tensión vertical lateral


ancho=b/2;
R1=(L^2+Z^2)^0.5;
R2=(ancho^2+Z^2)^0.5;
R3=(L^2+ancho^2+Z^2)^0.5;
stress_z_lateral=((p/(2*pi))*(atan(L*ancho/(Z*R3))+(L*ancho
*Z/R3)*((1/R1^2)+(1/R2^2))))*2;

%Cálculo de asiento lateral


ancho=b/2;
M1=(L/ancho);
N1=(Z/ancho);
A=(1/(2*pi))*(log((sqrt(1+M1^2+N1^2)+M1)/(sqrt(1+M1^2+N1^2)
-M1))+M1*log((sqrt(1+M1^2+N1^2)+1)/(sqrt(1+M1^2+N1^2)-1)));
B=(N1/(2*pi))*atan(M1/(N1*sqrt(1+M1^2+N1^2)));
asiento_lateral=((p*ancho/E)*(1-poisson^2)*(A-((1-
2*poisson)-(1-poisson))));

%borrar largo y ancho de zapata


clear largo
clear ancho

%Cálculo de la carga última


s_cohesion=0.2*(L/b);
p_ultima=5.14*cohesion*(1+s_cohesion)+p;

Como se puede observar se comienza con unas variables largo y ancho que son eliminadas a
medida que se realiza cada cálculo porque según la posición donde se quiere hacer el cálculo de
la tensión y asiento, estos valores cambian.
La formulación se establece para el cálculo en esquina. Por lo que, si queremos la tensión o
asiento en el centro de la zapata, se deberá calcular para cuatro zapatas con una esquina
coincidente (sería el centro) y sumar los resultados. Aquí se ha aplicado el teorema de
superposición.


Curso “Programación en Matlab aplicado a geotecnia”
Salida de datos al txt 
Una vez se han realizado los cálculo, el último paso es volcarlos al archivo .txt. Para ello,
usaremos la función fprintf(), sin olvidarnos abrir antes el archivo con fopen().
%escritura del archivo txt
fi=fopen('solucion.txt','wt');
fprintf(fi,'tensión vertical en la esquina= %2.4f
kPa',stress_z_esquina)
fprintf(fi,'\n')
fprintf(fi,'tensión vertical en el centro del lateral=
%2.4f kPa',stress_z_lateral)
fprintf(fi,'\n')
fprintf(fi,'tensión vertical en el centro de la zapata=
%2.4f kPa',stress_z_centro)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo la esquina= %2.4f
m',asiento_esquina)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo el centro del lateral= %2.4f
m',asiento_lateral)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo el centro= %2.4f
m',asiento_centro)
fprintf(fi,'\n')
fprintf(fi,'Carga última admisible= %2.4f kPa',p_ultima)
st=fclose(fi);

El identificador de archivo en este caso se ha denominado fi. Y el permiso de escritura indica


que se sobrescribirá todo lo que haya en el archivo previamente. Además, se incluyen líneas con
\n que indican salto de línea. En caso de no introducir \n, se iría imprimiendo todo junto en el
archivo. Si queremos introducir un tabulador, escribiremos \t.
En cuanto al formato de las variables, %2.4f, se indica que mínimo tendrán 2 caracteres y que
los decimales a incluir serán 4.

Proceso para zapatas circulares 
Ahora queda repetir el mismo proceso para los cálculos de zapatas circulares:
% Cálculo tensión vertical bajo el centro
stress_z_centro=p*(1-(1/(1+(a/Z)^2))^(3/2));

% Asiento bajo el centro


Asiento_centro=((2*p*a*(1-poisson)^2)/E)*(sqrt(1+(Z/a)^2)-
(Z/a))*(1+((Z/a)/(2*(1-poisson)*sqrt(1+(Z/a)^2))));

% Asiento superficial en el borde


Asiento_borde=(4/pi)*(p*a/E)*(1-poisson^2);

%% Cálculo de carga última


s_co=1.3;
N_carga=exp(pi*tan(phi_prima))*tan(45+(phi_prima/2))^2;


Curso “Programación en Matlab aplicado a geotecnia”
if poisson==0.5
p_ultima=5.14*cohesion*(1+s_co)+p;
else
s_carga=1+tan(phi_prima);
N_co=(N_carga-1)/tan(phi_prima);
p_ultima=p*N_carga*s_carga+cohesion*N_co*s_co;
end

%% escritura del archivo txt


fi = fopen('solucion.txt','wt');
fprintf(fi,'tensión vertical en en el centro= %2.4f
kPa',stress_z_centro)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo el centro= %2.4f
m',Asiento_centro)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo el borde en superficie= %2.4f
m',Asiento_borde)
fprintf(fi,'\n')
fprintf(fi,'Carga última admisible= %2.4f kPa',p_ultima)
st = fclose(fi);

La única diferencia que se debe comentar es el cálculo de la carga última, donde se incluye otra
estructura de selección para discernir el caso drenado del no drenado (según el módulo de
Poison)

Resumen 

A modo de resumen se incluye a continuación todo el código que debe escribirse para la
solución del problema:
clear all
close all
clc

%% Datos
[datos_num,datos_texto] = xlsread('entrada_datos.xlsx');
%definición de variables
b=datos_num(2,1);
L=datos_num(3,1);
Z=datos_num(1,4);
E=datos_num(6,1);
poisson=datos_num(5,1);
p=datos_num(2,4);
a=datos_num(8,1);
cohesion=datos_num(3,4);
phi_prima=datos_num(4,4);


Curso “Programación en Matlab aplicado a geotecnia”
if strcmp(datos_texto(1,2),'rectangular')
%% Cálculo de tensión vertical esquina de la zapata
R1=(L^2+Z^2)^0.5;
R2=(b^2+Z^2)^0.5;
R3=(L^2+b^2+Z^2)^0.5;
stress_z_esquina=(p/(2*pi))*(atan(L*b/(Z*R3))+(L*b*Z/R3)*((
1/R1^2)+(1/R2^2)));

%Cálculo de asiento esquina de la zapata


M1=(L/b);
N1=(Z/b);
A=(1/(2*pi))*(log((sqrt(1+M1^2+N1^2)+M1)/(sqrt(1+M1^2+N1^2)
-M1))+M1*log((sqrt(1+M1^2+N1^2)+1)/(sqrt(1+M1^2+N1^2)-1)));
B=(N1/(2*pi))*atan(M1/(N1*sqrt(1+M1^2+N1^2)));
asiento_esquina=(p*b/E)*(1-poisson^2)*(A-((1-2*poisson)-(1-
poisson))*B);

%borrar largo y ancho de zapata


clear largo
clear ancho

%% Cálculo de tensión vertical centro


largo=L/2;
ancho=b/2;
R1=(largo^2+Z^2)^0.5;
R2=(ancho^2+Z^2)^0.5;
R3=(largo^2+ancho^2+Z^2)^0.5;
stress_z_centro=((p/(2*pi))*(atan(largo*ancho/(Z*R3))+(larg
o*ancho*Z/R3)*((1/R1^2)+(1/R2^2))))*4;

%Cálculo de asiento centro


M1=(largo/ancho);
N1=(Z/ancho);
A=(1/(2*pi))*(log((sqrt(1+M1^2+N1^2)+M1)/(sqrt(1+M1^2+N1^2)
-M1))+M1*log((sqrt(1+M1^2+N1^2)+1)/(sqrt(1+M1^2+N1^2)-1)));
B=(N1/(2*pi))*atan(M1/(N1*sqrt(1+M1^2+N1^2)));
asiento_centro=((p*ancho/E)*(1-poisson^2)*(A-((1-
2*poisson)-(1-poisson))*B))*4;

%borrar largo y ancho de zapata


clear largo
clear ancho

%% Cálculo de tensión vertical lateral


ancho=b/2;
R1=(L^2+Z^2)^0.5;
R2=(ancho^2+Z^2)^0.5;
R3=(L^2+ancho^2+Z^2)^0.5;
stress_z_lateral=((p/(2*pi))*(atan(L*ancho/(Z*R3))+(L*ancho


Curso “Programación en Matlab aplicado a geotecnia”
*Z/R3)*((1/R1^2)+(1/R2^2))))*2;

%Cálculo de asiento lateral


ancho=b/2;
M1=(L/ancho);
N1=(Z/ancho);
A=(1/(2*pi))*(log((sqrt(1+M1^2+N1^2)+M1)/(sqrt(1+M1^2+N1^2)
-M1))+M1*log((sqrt(1+M1^2+N1^2)+1)/(sqrt(1+M1^2+N1^2)-1)));
B=(N1/(2*pi))*atan(M1/(N1*sqrt(1+M1^2+N1^2)));
asiento_lateral=((p*ancho/E)*(1-poisson^2)*(A-((1-
2*poisson)-(1-poisson))));

%borrar largo y ancho de zapata


clear largo
clear ancho

%Cálculo de la carga última


s_cohesion=0.2*(L/b);
p_ultima=5.14*cohesion*(1+s_cohesion)+p;

%escritura del archivo txt


fi=fopen('solucion.txt','wt');
fprintf(fi,'tensión vertical en la esquina= %2.4f
kPa',stress_z_esquina)
fprintf(fi,'\n')
fprintf(fi,'tensión vertical en el centro del lateral=
%2.4f kPa',stress_z_lateral)
fprintf(fi,'\n')
fprintf(fi,'tensión vertical en el centro de la zapata=
%2.4f kPa',stress_z_centro)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo la esquina= %2.4f
m',asiento_esquina)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo el centro del lateral= %2.4f
m',asiento_lateral)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo el centro= %2.4f
m',asiento_centro)
fprintf(fi,'\n')
fprintf(fi,'Carga última admisible= %2.4f kPa',p_ultima)
st=fclose(fi);

%% Condición para circulares


elseif strcmp(datos_texto(1,2),'circular')
% Cálculo tensión vertical bajo el centro
stress_z_centro=p*(1-(1/(1+(a/Z)^2))^(3/2));


Curso “Programación en Matlab aplicado a geotecnia”
% Asiento bajo el centro
Asiento_centro=((2*p*a*(1-poisson)^2)/E)*(sqrt(1+(Z/a)^2)-
(Z/a))*(1+((Z/a)/(2*(1-poisson)*sqrt(1+(Z/a)^2))));

% Asiento superficial en el borde


Asiento_borde=(4/pi)*(p*a/E)*(1-poisson^2);

%% Cálculo de carga última


s_co=1.3;
N_carga=exp(pi*tan(phi_prima))*tan(45+(phi_prima/2))^2;
if poisson==0.5
p_ultima=5.14*cohesion*(1+s_co)+p;
else
s_carga=1+tan(phi_prima);
N_co=(N_carga-1)/tan(phi_prima);
p_ultima=p*N_carga*s_carga+cohesion*N_co*s_co;
end

%% escritura del archivo txt


fi = fopen('solucion.txt','wt');
fprintf(fi,'tensión vertical en en el centro= %2.4f
kPa',stress_z_centro)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo el centro= %2.4f
m',Asiento_centro)
fprintf(fi,'\n')
fprintf(fi,'Asiento bajo el borde en superficie= %2.4f
m',Asiento_borde)
fprintf(fi,'\n')
fprintf(fi,'Carga última admisible= %2.4f kPa',p_ultima)
st = fclose(fi);

else
error('ERROR AL INTRODUCIR CIRCULAR O RECTANGULAR EN EL
EXCEL')

end

disp('El programa ha terminado de calcular, por favor,


acude al .txt para obtener los resultados.')

Conclusiones y apuntes para tener en cuenta 

Recuerde que los archivos de los cuales se extraen los datos deben estar en el mismo directorio
que el archivo script.

10 
Curso “Programación en Matlab aplicado a geotecnia”

También podría gustarte