<jupyter_start><jupyter_text>Cálculo da Área de Armadura através de processo iterativo - DIN1045-1  Definição das propriedades<jupyter_code>%%render params 3
f_yk = 500 * MPa
f_yd = f_yk / 1.15
f_tkcal = 525 * MPa
f_tdcal = f_tkcal / 1.15
E_s = 200000 * MPa
ε_yd = f_yd / E_s
f_ck = 30 * MPa
α = 0.85
f_cd = α * f_ck / 1.5

# Parâmetros do uso do diagrama retangular:
α_R = 0.81 
k_a = 0.416 # $\alpha_R$, $k_a$: parâmetros do diagrana parábola-retângulo
#%%render 2
h = .24 * m
d = .205 * m
b= 1 *  m

z_s1 = h/2 - (h-d)

M_Ed = 77.39 * kN * m
N_Ed = 0 * kN
# e_d = M_Ed / N_Ed # Dá erro quando N=0, duh
h_kern = (h/6)
M_Eds = M_Ed - N_Ed * z_s1<jupyter_output><empty_output><jupyter_text>1º passo de iteraçãoA ruptura é definida pela zona de concreto em compressão ou pelo aço? Assumindo que o plano de deformação está entre os domínios 2 e 3:<jupyter_code>ε_c2u = - 3.5 * mm / m
ε_su = 25 * mm / m
ξ_23 =  ε_c2u / (ε_c2u - ε_su)
x = ξ_23 * d
x = ξ_23 * d
z = d - k_a * x
ζ = z/d
print(f'x = {x}\n',f'z = {z}\n',f'ζ = {ζ}\n')
%%render
F_cd = - α_R*b*x*f_cd
M_Rds = -F_cd*z
M_Eds = M_Eds
if M_Rds > M_Eds:
    print("Viga no estádio 2" + " - completar código para estádio 2")
else:
    print("Viga no estádio 3 ou 4 - seguir com cálculo")<jupyter_output>Viga no estádio 3 ou 4 - seguir com cálculo<jupyter_text>2º Passo de iteraçãoO aço alcança a tensão de escoamento no ELU?<jupyter_code>ξ_34 =  ε_c2u / (ε_c2u - ε_yd); print(ξ_34)
x = ξ_34 * d; print(x)
z = d - k_a * x; print(z)
ζ = z/d; print(ζ)
%%render
F_cd = - α_R*b*x*f_cd 
M_Rds = -F_cd*z
M_Eds = M_Eds
if M_Rds > M_Eds:
    print("Viga no estádio 3 - Seguir com cálculo no estádio 3")
else:
    print("Viga no estádio 4 - Ruptura sem aviso - Redimensionar")
# Criar algoritmo para iterar até chegar em M_Rds = M_Eds, variando ε_s1

#Calculadora do momento em função da deformação no aço, para o dominio 3
def calc_M(ε_sd):
    global ξ, x, z, ζ, F_cd, M_Rds
    ξ = ε_c2u / (ε_c2u - ε_sd)#; print(ξ)
    x = ξ * d# ; print(x)
    z = d - k_a * x#; print(z)
    ζ = z/d#; print(ζ)
    F_cd = - α_R*b*x*f_cd#; print(α_R, b, x, f_cd,F_cd)
    M_Rds = - F_cd * z
    
    return M_Rds
     
pts=1000
ε_list = []
M_list = []
M_Ed_list = [] 

for e in range(0,pts+1,1):
    ε = (((pts-e)/pts)*ε_yd + (e/pts)*ε_su)
    ε_list.append(float(ε))
    
    M = calc_M(ε)
    M_list.append(float(M))
    M_Ed_list.append(float(M_Eds.prefix('k')))
    
    
print(M_Eds)
# Plotando o gráfico para ver se faz sentido: Gráfico de MRds variando com ε

data={'M':M_list,'M_Ed':M_Ed_list }

dados = pd.DataFrame(data, index=ε_list)

#dados.plot.scatter(x='ε', y='M', ='M_Ed_list')

lines = dados.plot.line()
# Como pegar o ponto exato??

def find_match_dom3(M_Ed_list, M_lis):
    global M_subtract
    M_Ed_array = np.array(M_Ed_list)
    M_array = np.array(M_list)
    M_subtract = M_Ed_array - M_array
    for i in range(M_subtract.size):
        if M_subtract[i] > 0:
            print(i, i-1,M_array[i-1],M_array[i])
            return i-1
            break
pos=find_match_dom3(M_Ed_list, M_list)
# Agora tenho um intervalo pequeno o bastante pra que haja convergencia...
# Aqui escrevi uma função para buscar o valor de M que bate com M_Eds

M_Eds_float = float(M_Eds)

pts = 1000
ε_list_narrowed = [((pts-i)/pts)*ε_list[pos]+(i/pts)*ε_list[pos+1] for i in range(pts)]

def converjator(M_Eds):
    for ε in ε_list_narrowed:
        M = float(calc_M(ε))
        #print(M - float(M_Eds), M)
        if abs(M-M_Eds) < 1E-3:
            return [M, ε]
Ans=converjator(float(M_Eds))
M_Ans = Ans[0]
ε_Ans = Ans[1]
calc_M(ε_Ans)
%%render 2
ε_sd = Ans[1]
M_Eds
M_Rds = Ans[0] * kN * m
ξ
x=x.prefix('c') 
z=z.prefix('c') 
ζ
F_cd
σ_s1d = f_yd + ((ε_sd - ε_yd)/(ε_su - ε_yd))*(f_tdcal - f_yd)
erfA_s1 = ((-F_cd+N_Ed)* (σ_s1d) ** -1).prefix('c')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14225721784776904, 'fraction_numerical': 0.032020997375328084, 'mean_word_length': 3.1695842450765865, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '301219', 'license': 'MIT', 'n_tokens_mistral': 1963, 'n_tokens_neox': 1869, 'n_words': 455, 'path': 'Rebar_First_Principles_DIN1045-1-Copy1 - teste Minnert Cap. 5.ipynb', 'repo_name': 'arnoldBR/reinforcedConcrete', 'size': '3810'}