Last active
April 7, 2020 12:47
-
-
Save PedroBern/71b04b1332b4c1ee8cf1fbc7f9de2c34 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
title: "Concreto Protendido e Pré-Moldado - Trabalho A1" | |
author: "Pedro Bernardino Alves Moreira - 20142104155" | |
abstract: "O trabalho foi calculado em linguágem R, esse relatório foi gerado automáticamente a partir dos dados de entrada. Um link para o código utilizado é disponibilizado ao final do trabalho." | |
date: "31/03/2020" | |
output: pdf_document | |
header-includes: | |
- \renewcommand{\abstractname}{Introdução} | |
--- | |
```{r setup, include=FALSE} | |
knitr::opts_chunk$set(echo = T) | |
options(knitr.kable.NA = '') | |
library(kableExtra) | |
library(tidyverse) | |
library(dplyr) | |
library(rsdepth) | |
library(ggplot2) | |
library(cowplot) | |
``` | |
# Dados | |
A seguir os dados relativos ao aluno, conforme a tabela enviada junto com as questões. | |
```{r dados-iniciais-aluno, echo=F} | |
A <- 100 # cm | |
B <- 32 # cm | |
F <- 50 # cm | |
q <- 30 # kN/m | |
g <- 0 # kN/m | |
L <- 25 # m | |
Fck <- 50 # MPa | |
CP <- 175 # - | |
phi <- 12.5 # mm x 7 | |
# exemplo slide 5 | |
# A <- 110 # cm | |
# B <- 70 # cm | |
# F <- 55 # cm | |
# q <- 20 # kN/m | |
# g <- 8 # kN/m | |
# L <- 26 # m | |
# Fck <- 50 # MPa | |
# CP <- 175 # - | |
# phi <- 12.5 # mm x 7 | |
``` | |
```{r dados-iniciais-problema, echo=F} | |
C <- 20 # cm | |
D <- 25 # cm | |
E <- 10 # cm | |
G <- 15 # cm | |
H <- 20 # cm | |
r <- 10 # cm | |
# exemplo slide 5 | |
# C <- 15 # cm | |
# D <- 30 # cm | |
# E <- 15 # cm | |
# G <- 5 # cm | |
# H <- 20 # cm | |
# r <- 10 # cm | |
``` | |
```{r tabela-valores-iniciais, echo=F} | |
dfUnits <- c("cm", "cm", "cm", "kN/m", "kN/m", "m", "MPa", "", "mm") | |
colNames <- c("A", "B", "F", "q", "g", "L", "Fck", "CP", "phi") | |
valores <- data.frame( | |
A=A, B=B, F=F, q=q, g=g, L=L, Fck=Fck, CP=CP, phi=phi | |
) | |
kable( | |
valores, | |
"latex", | |
col.names = dfUnits, | |
escape = F, | |
booktabs = T, | |
caption = "Variáveis do aluno", | |
linesep = "\\addlinespace", | |
align = "c", | |
digits = 2 | |
) %>% | |
add_header_above(header = colNames, line = F, align = "c", escape = F) %>% | |
kable_styling(latex_options = c("HOLD_position")) | |
``` | |
## 1 - Determinar a posição do centróide ($yi$) e momento de inércia ($I$) da seção. | |
```{r centroide, echo=F} | |
p1 <- c(-B/2, 0) | |
p2 <- c(B/2, 0) | |
p3 <- c(B/2, D) | |
p4 <- c(C/2, E + D) | |
p5 <- c(C/2, F + E + D) | |
p6 <- c(A/2, G + F + E + D) | |
p7 <- c(A/2, H + G + F + E + D) | |
p8 <- c(-A/2, H + G + F + E + D) | |
p9 <- c(-A/2, G + F + E + D) | |
p10 <- c(-C/2, F + E + D) | |
p11 <- c(-C/2, E + D) | |
p12 <- c(-B/2, D) | |
# Coordenadas de cada vertice da seção | |
coordenadas_da_seção <- rbind( | |
p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 | |
) | |
# Cálculo do centroide | |
CG <- centroid(coordenadas_da_seção) | |
CG <- CG[2] | |
``` | |
```{r inercia, echo=F} | |
# Formulas | |
inercia_retangulo <- function(b, h) b * h^3 / 12 | |
inercia_triangulo <- function(b, h) b * h^3 / 36 | |
# Ditâncias em Y do centro de cada figura até o eixo X (base) | |
# retangulos | |
y_fig_1 <- D / 2 | |
y_fig_2 <- (G + F + E) / 2 + D | |
y_fig_3 <- H + G + F + E + D - H / 2 | |
# triangulos | |
y_fig_4 <- E / 3 + D | |
y_fig_5 <- y_fig_4 | |
y_fig_6 <- F + E + D + 2 * G / 3 | |
iy_fig_7 <- y_fig_6 | |
# Dados pra tabela: | |
# Momentos de inércia em cm4 | |
momento_de_I_figuras <- c( | |
inercia_retangulo(B, D), # fig 1 | |
inercia_retangulo(C, G + F + E), # fig 2 | |
inercia_retangulo(A, H), # fig 3 | |
inercia_triangulo(B / 2 - C / 2, E), # fig 4 | |
inercia_triangulo(B / 2 - C / 2, E), # fig 5 | |
inercia_triangulo(A / 2 - C / 2, G), # fig 6 | |
inercia_triangulo(A / 2 - C / 2, G) # fig 7 | |
) | |
# áreas em cm2 | |
areas_figuras <- c( | |
B * D, # fig 1 | |
C * (G + F + E), # fig 2 | |
A * H, # fig 3 | |
E * (B / 2 - C / 2) / 2, # fig 4 | |
E * (B / 2 - C / 2) / 2, # fig 5 | |
G * (A / 2 - C / 2) / 2, # fig 6 | |
G * (A / 2 - C / 2) / 2 # fig 7 | |
) | |
# distância pro CG em cm | |
d_figuras <- c( | |
CG - (D / 2), # fig 1 | |
CG - ((G + F + E) / 2 + D), # fig 2 | |
CG - (H / 2 + G + F + E + D), # fig 3 | |
CG - (D + E / 3), # fig 4 | |
CG - (D + E / 3), # fig 5 | |
CG - (2 * G / 3 + F + E + D), # fig 6 | |
CG - (2 * G / 3 + F + E + D) # fig 7 | |
) | |
# Tabela | |
tabela_inercias <- | |
data.frame( | |
Ix = momento_de_I_figuras, | |
Areas = areas_figuras, | |
ds = abs(d_figuras) | |
) | |
tabela_inercias <- mutate(tabela_inercias, formula = Ix + Areas * ds^2) | |
I <- sum(tabela_inercias$formula) | |
tabela_inercias <- add_row(tabela_inercias, formula = I) | |
``` | |
```{r tabela-inercias, echo=F} | |
dfUnits <- c("cm4", "cm2", "cm", "cm4") | |
colNames <- c("", "Ix", "Áreas", "d", "Formula") | |
rownames(tabela_inercias) <- c("Fig. 1", "Fig. 2", "Fig. 3", | |
"Fig. 4", "Fig. 5", "Fig. 6", | |
"Fig. 7", "Somatório") | |
kable( | |
tabela_inercias, | |
"latex", | |
col.names = dfUnits, | |
escape = F, | |
booktabs = T, | |
caption = "Cálculo da inércia", | |
linesep = "\\addlinespace", | |
align = "c", | |
digits = 2 | |
) %>% | |
add_header_above(header = colNames, line = F, align = "c", escape = F) %>% | |
kable_styling(latex_options = c("HOLD_position")) | |
``` | |
- Posição do centroide: $y_i = `r CG` \; cm$ | |
- Momento de inércia: $I = `r I` \; cm^4$ | |
## 2 - Determinar os momentos fletores máximos devido ao peso próprio ($M_{pp}$) e à carga acidental ($M_q$). | |
<!-- Peso proprio --> | |
```{r peso-proprio, echo=F} | |
densidade_concreto <- 25 # kN/m3 | |
area_secao <- ( # m2 | |
A * H + | |
D * B + | |
C * (G + F + E) + | |
E * (B / 2 - C / 2) + | |
G * (A / 2 - C / 2) | |
) * 10^-4 | |
pp <- densidade_concreto * area_secao | |
``` | |
<!-- Momento fletor máximo devido ao peso próprio --> | |
```{r Mpp, echo=F} | |
Mpp <- pp * L^2 / 8 | |
``` | |
<!-- Momento fletor máximo devido a carga acidental --> | |
```{r Mq, echo=F} | |
Mq <- q * L^2 / 8 | |
``` | |
<!-- Momento fletor máximo devido a carga permanente --> | |
```{r Mg, echo=F} | |
Mg <- g * L^2 / 8 | |
``` | |
- $M_{pp} = `r Mpp` \; kN.m$ | |
- $M_q = `r Mq` \; kN.m$ | |
## 3 - Determinar a força de protenção ($P$) necessária e o número de cordoalhas necessária. | |
<!-- Tensões máximas na secao mais solicitada --> | |
```{r tensoes, echo=F} | |
H_total <- D + E + F + G + H | |
Ws <- (I / (H_total - CG)) * 10^-6 # m3 | |
Wi <- (I / CG) * 10^-6 # m3 | |
T_pp_i <- Mpp * 10^-3 / Wi # Mpa | |
T_pp_s <- Mpp * 10^-3 / Ws # Mpa | |
T_q_i <- Mq * 10^-3 / Wi # Mpa | |
T_q_s <- Mq * 10^-3 / Ws # Mpa | |
T_g_i <- Mg * 10^-3 / Wi # Mpa | |
T_g_s <- Mg * 10^-3 / Ws # Mpa | |
tensoes_i <- T_pp_i + T_q_i + T_g_i # Mpa | |
tensoes_s <- T_pp_s + T_q_s + T_g_s # Mpa | |
``` | |
<!-- Determinação da força de protenção nescessária --> | |
```{r protencao, echo=F} | |
e <- (CG - r) * 10^-2 # m | |
P <- tensoes_i / (1 / area_secao + e / Wi) * 10^3 # kN | |
``` | |
<!-- Determinação do número de cordoalhas --> | |
```{r cordoalhas, echo=F} | |
alongamento <- function(CP, phi){ | |
res <- NA | |
if(CP == 175) { | |
if(phi == 12.5 | phi == 12.7) res <- 149.1 | |
if(phi == 15.2) res <- 219.7 | |
} | |
if(CP == 195) { | |
if(phi == 12.5 | phi == 12.7) res <- 168.6 | |
if(phi == 15.2) res <- 239.2 | |
} | |
res | |
} | |
Nc <- alongamento(CP, phi) / 1.15 # kn/cordoalha | |
n_cordoalhas_fracao <- P / Nc | |
``` | |
- $P = `r -P` \; kN \;(Compressão)$ | |
- Fração de cordoalhas: $`r n_cordoalhas_fracao`$ | |
- Número de cordoalhas: $`r ceiling(n_cordoalhas_fracao)`$ | |
## 4 - Calcular as tensões na seção de meio de vão, estimando as perdas em 10% e considerando os seguintes limites: | |
<!-- Cálculos --> | |
```{r momentos_nas_secoes, echo=F} | |
# exemplo slide 3 | |
# L <- 20 | |
# q <- 24 | |
# g <- 12 | |
# pp <- 9 | |
# Wi <- 0.062 | |
# Ws <- 0.078 | |
# e <- 0.4025 | |
# area_secao <- 0.36 | |
# P <- 3674 | |
# perda <- 0.08 | |
perda <- 0.1 | |
Fcd <- Fck * 1.4 # MPa | |
T_t_max <- 0.1 * Fck # MPa | |
T_c_max_1 <- 0.5 * Fck # primeira fase # MPa | |
T_c_max_2 <- Fcd # segunda fase # MPa | |
n <- 10 | |
l <- L / n | |
secoes <- 1:(n/2 + 1) | |
tabela_das_secoes <- data.frame( | |
s=integer(0), | |
x=numeric(0), | |
pp=numeric(0), | |
q=numeric(0), | |
g=numeric(0), | |
T_i_pp=numeric(0), | |
T_s_pp=numeric(0), | |
T_i_q=numeric(0), | |
T_s_q=numeric(0), | |
T_i_P=numeric(0), | |
T_s_P=numeric(0), | |
T_i_pp_P=numeric(0), | |
T_s_pp_P=numeric(0), | |
soma_tensao_i=numeric(0), | |
soma_tensao_s=numeric(0), | |
atende_t=logical(0), | |
atende_1=logical(0), | |
atende_2=logical(0) | |
) | |
momento_secao_devido <- function(x, q){ | |
q * L * x / 2 - q * x^2 / 2 | |
} | |
M_P <- P * (1 - perda) * e | |
T_i_P <- (- P * (1 - perda) / area_secao - M_P / Wi) * 10^-3 | |
T_s_P <- (- P * (1 - perda) / area_secao + M_P / Ws) * 10^-3 | |
nova_linha <- function(s){ | |
x <- (s - 1) * l | |
q_ <- momento_secao_devido(x, q) | |
g_ <- momento_secao_devido(x, g) | |
pp_ <- momento_secao_devido(x, pp) | |
T_i_pp_ <- (pp_ / Wi) * 10^-3 | |
T_s_pp_ <- - (pp_ / Ws) * 10^-3 | |
T_i_q_ <- (q_ / Wi) * 10^-3 | |
T_s_q_ <- - (q_ / Ws) * 10^-3 | |
T_i_pp_P_ <- T_i_pp_ + T_i_P | |
T_s_pp_P_ <- T_s_pp_ + T_s_P | |
atende_t <- T_i_pp_ + T_i_q_ + T_i_P <= T_t_max & | |
T_s_pp_ + T_s_q_ + T_s_P <= T_t_max | |
atende_1 <- T_i_pp_P_ >= - T_c_max_1 & | |
T_s_pp_P_ >= - T_c_max_1 | |
atende_2 <- - T_c_max_2 <= T_i_pp_ + T_i_q_ + T_i_P & | |
- T_c_max_2 <= T_s_pp_ + T_s_q_ + T_s_P | |
data.frame(s=s, x=x, pp=pp_, q=q_, g=g_, | |
T_i_pp=T_i_pp_, T_s_pp=T_s_pp_, | |
T_i_q=T_i_q_, T_s_q=T_s_q_, | |
T_i_P=T_i_P, T_s_P=T_s_P, | |
T_i_pp_P=T_i_pp_P_, T_s_pp_P=T_s_pp_P_, | |
soma_tensao_i=T_i_pp_ + T_i_q_ + T_i_P, | |
soma_tensao_s=T_s_pp_ + T_s_q_ + T_s_P, | |
atende_t=ifelse(atende_t == TRUE, "Sim", "Não"), | |
atende_1=ifelse(atende_1 == TRUE, "Sim", "Não"), | |
atende_2=ifelse(atende_2 == TRUE, "Sim", "Não") | |
) | |
} | |
for (k in secoes) { | |
tabela_das_secoes=rbind(tabela_das_secoes,nova_linha(k)) | |
} | |
tabela_das_secoes <- tabela_das_secoes %>% | |
mutate(soma_momentos=rowSums(tabela_das_secoes[3:5])) | |
``` | |
```{r tabela-momento-secoes, echo=F} | |
dfUnits2 <- c("","m", "kNm", "kNm", "kNm", "kNm") | |
colNames2 <- c("s", "x", "pp", "q", "g", "soma") | |
kable( | |
tabela_das_secoes[,c(1:5, 19)], | |
"latex", | |
col.names = dfUnits2, | |
escape = F, | |
booktabs = T, | |
caption = "Momento fletor em casa seção", | |
linesep = "\\addlinespace", | |
align = "c", | |
digits = 2 | |
) %>% | |
add_header_above(header = colNames2, line = F, align = "c", escape = F) %>% | |
kable_styling(latex_options = c("HOLD_position")) | |
``` | |
```{r grafico-momentos, echo=F, fig.height=3} | |
p1 <- tabela_das_secoes[,c(1:5, 19)] %>% | |
gather(tipo, momento, -c(s, x, soma_momentos)) %>% | |
ggplot(aes(x, momento, col=tipo)) + | |
geom_line() + | |
ylab("Momento (kN.m)") + | |
xlab("Distância (m)") + | |
theme_bw() + | |
ggtitle("Momento agrupado por tipo") | |
p2 <- tabela_das_secoes[,c(1:5, 19)] %>% | |
ggplot(aes(x, soma_momentos)) + | |
geom_line() + | |
ylab("Momento (kN.m)") + | |
xlab("Distância (m)") + | |
theme_bw() + | |
ggtitle("Momento total no vão") | |
plot_grid(p1, p2, rel_widths = c(1.2, 1)) | |
``` | |
```{r tabela-tensoes, echo=F} | |
col1 <- c("","i", "s","i", "s","i", "s","i", "s", "i", "s", "tração", "fase 1", "fase 2" ) | |
col2 <- c("s", "pp"=2, "q"=2, "P"=2, "pp + P"=2, "soma"=2, "atende"=3) | |
kable( | |
tabela_das_secoes[,c(1,6:18)], | |
"latex", | |
col.names = col1, | |
escape = F, | |
booktabs = T, | |
caption = "Tensões inferior e superior em cada seção (MPa)", | |
linesep = "\\addlinespace", | |
align = "c", | |
digits = 2 | |
) %>% | |
add_header_above(header = col2, line = F, align = "c", escape = F) %>% | |
kable_styling(latex_options = c("HOLD_position")) | |
``` | |
```{r tabela-tensoes-meio, echo=F} | |
col2 <- c("", "Tensões (MPa)"=2) | |
col1 <- c("Ti", "Ts") | |
df <- data.frame( | |
Ti=c( | |
tabela_das_secoes[6,]$T_i_pp[1], | |
tabela_das_secoes[6,]$T_i_P[1], | |
tabela_das_secoes[6,]$T_i_pp_P[1], | |
tabela_das_secoes[6,]$T_i_q[1], | |
tabela_das_secoes[6,]$soma_tensao_i[1], | |
tabela_das_secoes[6,]$soma_tensao_i[1] + tabela_das_secoes[6,]$T_i_pp_P[1] | |
), | |
Ts=c( | |
tabela_das_secoes[6,]$T_s_pp[1], | |
tabela_das_secoes[6,]$T_s_P[1], | |
tabela_das_secoes[6,]$T_s_pp_P[1], | |
tabela_das_secoes[6,]$T_s_q[1], | |
tabela_das_secoes[6,]$soma_tensao_s[1], | |
tabela_das_secoes[6,]$soma_tensao_s[1] + tabela_das_secoes[6,]$T_s_pp_P[1] | |
)) | |
rownames(df) <- c( | |
"pp", "P", "pp + P", "q", "Soma (pp + P + q)", "Soma (pp + P + q + 'pp+P')" | |
) | |
kable( | |
df, | |
"latex", | |
col.names = col1, | |
escape = F, | |
booktabs = T, | |
caption = "Tensões no meio do vão (MPa)", | |
linesep = "\\addlinespace", | |
align = "c", | |
digits = 2 | |
) %>% | |
add_header_above(header = col2, line = F, align = "c", escape = F) %>% | |
kable_styling(latex_options = c("HOLD_position")) | |
``` | |
## 5 - Verificar as tensões na seção de meio de vão, estimando as perdas em 10% e considerando os seguintes limites: | |
- Fase 1, atende? `r tabela_das_secoes[6,]$atende_1` | |
- Fase 2, atende? `r tabela_das_secoes[6,]$atende_2` | |
--- | |
## Código | |
A seguir o link do código escrito para gerar esse pdf, contendo a memória de cálculo. | |
[Clique aqui.](https://gist.github.com/PedroBern/71b04b1332b4c1ee8cf1fbc7f9de2c34) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment