Skip to content

Instantly share code, notes, and snippets.

@PedroBern
Last active April 7, 2020 12:47
Show Gist options
  • Save PedroBern/71b04b1332b4c1ee8cf1fbc7f9de2c34 to your computer and use it in GitHub Desktop.
Save PedroBern/71b04b1332b4c1ee8cf1fbc7f9de2c34 to your computer and use it in GitHub Desktop.
---
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