---
title: "Equações de Darcy-Weisbach"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Equações de Darcy-Weisbach}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

library(hf)
```



## Introdução

A equação de Darcy-Weisbach é a fórmula universal e teoricamente mais rigorosa para o cálculo da perda de carga em condutos forçados. Ao contrário de fórmulas empíricas como a de Hazen-Williams, a equação de Darcy-Weisbach é aplicável a **qualquer fluido** e **qualquer regime de escoamento** (laminar, transição ou turbulento).

No pacote `hf`, a equação baseia-se na vazão volumétrica ($Q$):

$$h_f = f \frac{8 L Q^2}{\pi^2 g D^5}$$

Em que:

* $h_f$: Perda de carga distribuída (m)
* $f$: Fator de atrito de Darcy (adimensional)
* $L$: Comprimento da tubulação (m)
* $Q$: Vazão volumétrica ($m^3/s$)
* $D$: Diâmetro interno (m)
* $g$: Aceleração da gravidade ($m/s^2$)



## 1. O Fator de Atrito ($f$)

O fator de atrito depende do Número de Reynolds e da rugosidade relativa do tubo. O pacote `hf` fornece duas funções distintas para calculá-lo:

* `calc_friction_cw()`: Utiliza a equação implícita de **Colebrook-White** (padrão). Encontra a raiz exata iterativamente.
* `calc_friction_sj()`: Utiliza a equação explícita de **Swamee-Jain**, uma aproximação de alta precisão que não requer iteração.

```{r fator_atrito}
# Parâmetros do escoamento
Re <- 100000        # Número de Reynolds
e <- 0.00026        # Rugosidade absoluta (m)
D <- 0.1            # Diâmetro (m)

# Comparando ambos os métodos
calc_friction_cw(reynolds = Re, roughness = e, diameter = D)
calc_friction_sj(reynolds = Re, roughness = e, diameter = D)
```

## 2. Calculando a Perda de Carga com Injeção Funcional

A função `calc_head_loss_darcy` calcula a perda, mas você pode "injetar" a função de atrito que deseja utilizar através do argumento `friction_fun`.

```{r perda_carga}
# 1. Padrão (Usa Colebrook-White automaticamente)
calc_head_loss_darcy(
  length = 100, flow = 0.02, diameter = 0.1, roughness = 0.00026
)

# 2. Injeção Funcional (Usando Swamee-Jain)
calc_head_loss_darcy(
  length = 100, flow = 0.02, diameter = 0.1, roughness = 0.00026,
  friction_fun = calc_friction_sj
)

# 3. Valor Direto (Se você já calculou o fator de atrito)
calc_head_loss_darcy(
  length = 100, flow = 0.02, diameter = 0.1, friction_factor = 0.025
)
```

## 3. Calculando Diâmetro e Vazão

Como o fator de atrito cria uma dependência circular matemática, o pacote `hf` utiliza solucionadores numéricos internos (`uniroot`) para encontrar os valores exatos de diâmetro e vazão. A injeção funcional também funciona nestas funções.

```{r solucionadores}
# Calcular o diâmetro necessário para uma perda de 8.56m
calc_diameter_darcy(
  loss = 8.56, length = 100, flow = 0.02, roughness = 0.00026
)

# Calcular a vazão máxima para a mesma perda de carga
calc_flow_darcy(
  loss = 8.56, length = 100, diameter = 0.1, roughness = 0.00026
)
```
