4  O exemplo tutorial

Antes de aplicar o modelo a uma bacia real, vamos dominar o fluxo de trabalho no exemplo tutorial oficial do USGS: uma grade minúscula de 10 × 10 células de 10 m, com 2 zonas de propriedades, chuva em 2 períodos e 60 h de simulação. Ele roda em ~1 segundo e permite entender cada arquivo sem esperar processamento.

NotaOnde fica essa bacia?

É um recorte didático de apenas 100 m × 100 m distribuído pelo USGS junto com o programa — uma encosta-exemplo sem contexto de bacia real (as coordenadas UTM dos eixos são herdadas da grade de exemplo, mas a área é pequena demais para representar qualquer lugar). Nas Partes 2+ do minicurso aplicaremos o mesmo fluxo às bacias reais da Região Serrana/RJ.

Os arquivos estão na pasta exemplo_01/ deste repositório, já com as correções necessárias (ver nota ao final).

4.1 O terreno do exemplo

Para criar intuição antes de olhar arquivo por arquivo, veja o relevo da “bacia” sintética:

Código
library(terra)
dem <- rast("exemplo_01/data/dem.asc")

par(mfrow = c(1, 2), mar = c(2.5, 2.5, 2, 1))
hs <- shade(terrain(dem, "slope", unit = "radians"),
            terrain(dem, "aspect", unit = "radians"))
plot(hs, col = grey(seq(0.2, 1, length.out = 40)), legend = FALSE,
     main = "Relevo sombreado + curvas de nível")
contour(dem, add = TRUE, col = "#8b4513", labcex = 0.7)
persp(dem, theta = 35, phi = 32, expand = 0.55, col = "#e8d9b8",
      border = "#8a7550", main = "Vista 3D", xlab = "x (m)", ylab = "y (m)",
      zlab = "elev. (m)")

O terreno sintético do tutorial: relevo sombreado com curvas de nível (esquerda) e vista em perspectiva 3D (direita).

4.2 Estrutura de pastas

exemplo_01\
├── tpx_in.txt      <- inicialização do TopoIndex
├── tr_in.txt       <- inicialização do TRIGRS (JÁ CORRIGIDO)
├── data\           <- grades de entrada (formato ESRI ASCII, .asc)
└── Resultados\     <- saídas do TRIGRS (criar antes de rodar!)

4.3 As grades de entrada, uma a uma

Cada arquivo .asc da pasta data\ responde a uma pergunta do modelo. Vamos vê-los em grupos, sempre com o mapa correspondente ao lado da descrição.

4.3.1 Topografia: dem.asc, slope.asc, directions.asc

  • dem.asc — o MDE: de onde vem toda a geometria;
  • slope.asc — declividade em graus (o δ da fórmula do FS);
  • directions.asc — direção de fluxo D8, usada pelo TopoIndex para rotear o runoff. A grade do tutorial usa a numeração do próprio TopoIndex (opção 2 no tpx_in.txt: 1=NO, 2=N, 3=NE, 4=O, 5=indefinida, 6=L, 7=SO, 8=S, 9=SE); grades exportadas do ArcGIS/QGIS usam o esquema ESRI (opção 1: 1=L, 2=SE, 4=S, … 128=NE).
Código
slope <- rast("exemplo_01/data/slope.asc")
dirs  <- rast("exemplo_01/data/directions.asc")

par(mfrow = c(1, 3))
plot(dem,   main = "dem.asc — elevação (m)",        col = terrain.colors(25))
plot(slope, main = "slope.asc — declividade (°)",
     col = hcl.colors(25, "YlOrRd", rev = TRUE))
plot(as.factor(dirs), main = "directions.asc — TopoIndex")

As três grades topográficas. Repare onde a declividade é maior — é lá que o FS vai cair primeiro.

4.3.2 Solo: zones.asc, zmax.asc, depthwt.asc

  • zones.asc — a que zona de propriedades cada célula pertence (os parâmetros geotécnicos/hidráulicos de cada zona ficam no tr_in.txt);
  • zmax.asc — profundidade máxima do solo (a base impermeável do modelo);
  • depthwt.asc — profundidade inicial do lençol freático (condição antecedente).
Código
zones <- rast("exemplo_01/data/zones.asc")
zmax  <- rast("exemplo_01/data/zmax.asc")
dwt   <- rast("exemplo_01/data/depthwt.asc")

par(mfrow = c(1, 3))
plot(as.factor(zones), main = "zones.asc — zonas de propriedades")
plot(zmax, main = "zmax.asc — prof. do solo (m)",
     col = hcl.colors(25, "BrwnYl", rev = TRUE))
plot(dwt,  main = "depthwt.asc — prof. inicial do NA (m)",
     col = hcl.colors(25, "Blues", rev = TRUE))

As três grades de solo do tutorial: 2 zonas de propriedades, solo de 1,5 a 2,0 m de espessura e lençol freático inicial em geral a 1,5 m de profundidade.

4.3.3 Chuva de projeto (hietograma): rizero.asc, ri1.asc, ri2.asc

  • rizero.asc — infiltração antecedente de longo prazo (mantém o estado inicial);
  • ri1.asc, ri2.asc — intensidade de chuva de cada período, em m/s (lidas só quando o valor cri correspondente no tr_in.txt é negativo — ver os arquivos de inicialização, abaixo).

A chuva entra no TRIGRS como um hietograma em degraus: a duração total é dividida em períodos (nper no tr_in.txt), cada um com sua intensidade — vinda de um valor uniforme ou de uma grade ri*.asc (chuva variando no espaço, ex.: interpolada de pluviômetros ou de radar). No tutorial são dois períodos — 48 h de chuva fraca antecedente e 12 h de tempestade (intencionalmente exagerada, para forçar instabilidade na grade minúscula):

Código
tt  <- c(0, 48, 48, 60)
int <- c(3e-7, 3e-7, 9e-5, 9e-5) * 3.6e6      # m/s -> mm/h
plot(tt, int, type = "s", lwd = 3, col = "#1f78b4", las = 1,
     xlab = "tempo (h)", ylab = "intensidade (mm/h)",
     main = "Chuva do tutorial: 2 períodos")
polygon(c(0, 48, 48, 0), c(0, 0, 1.08, 1.08), col = "#a6cee344", border = NA)
polygon(c(48, 60, 60, 48), c(0, 0, 324, 324), col = "#1f78b444", border = NA)
text(24, 40, "período 1: 1,08 mm/h × 48 h", cex = 0.9)
text(47, 300, "período 2: 324 mm/h × 12 h", cex = 0.9, adj = 1)

O hietograma do tutorial: as intensidades uniformes cri do tr_in.txt (3×10⁻⁷ e 9×10⁻⁵ m/s) convertidas para mm/h — por serem positivas, são usadas no lugar das grades ri1 e ri2. A tempestade final é irrealista de propósito — é um dado didático.

4.4 Os arquivos de inicialização

Cada programa lê um arquivo de texto com parâmetros e caminhos, na pasta onde é executado:

  • tpx_in.txt (TopoIndex): aponta o MDE e a grade de direções; define o esquema D8 (ESRI = 1, TopoIndex = 2) e quais listas/grades auxiliares salvar.
  • tr_in.txt (TRIGRS): o coração da rodada. Define, entre outros:
    • número de zonas e parâmetros geotécnicos/hidráulicos de cada zona (coesão em Pa, ângulo de atrito φ em graus, peso específico em N/m³, difusividade em m²/s, Ksat em m/s, θsat, θres, α de Gardner);
    • períodos de chuva (nper), instantes de troca (capt) e intensidades (cri ou grades ri*.asc);
    • profundidade da simulação, condição inicial do lençol e opções do modelo (saturado/não saturado, profundidade finita/infinita);
    • tempos de saída e quais grades gravar.
    Um valor negativo de zmax, depth, rizero ou de uma intensidade cri manda o TRIGRS ler a grade correspondente (zmax.asc, depthwt.asc, rizero.asc, ri*.asc) em vez de usar o próprio valor. No tutorial, zmax = -3.001, depth = -2.4 e rizero = -1.0e-9, então essas três grades são lidas; as intensidades cri (3×10⁻⁷ e 9×10⁻⁵ m/s) são positivas e valem uniformemente para toda a grade.

No tutorial, as duas zonas do zones.asc recebem estes parâmetros (linhas zone, 1 e zone, 2 do tr_in.txt):

Parâmetro (unidade SI) Zona 1 Zona 2 Papel no modelo
Coesão c’ (Pa) 3.500 8.000 resistência que não depende da tensão normal
Atrito φ’ (graus) 35 31 resistência friccional
Peso específico γs (N/m³) 22.000 22.000 peso da coluna de solo
Difusividade D₀ (m²/s) 6,0×10⁻⁶ 8,0×10⁻⁴ velocidade da resposta de poro-pressão
Ksat (m/s) 1,0×10⁻⁷ 1,0×10⁻⁴ capacidade de infiltração
θsat / θres 0,45 / 0,05 0,45 / 0,06 teores de umidade saturado/residual
α de Gardner (1/m) −0,5 −8,0 curva K(ψ) da zona não saturada

Repare no contraste: a zona 1 tem o maior ângulo de atrito, mas a menor coesão, e é muito menos permeável (responde devagar); a zona 2 é mais coesiva, com menor ângulo de atrito, e muito mais permeável — a tempestade a atinge rápido. É esse jogo que produz o padrão de instabilidade que veremos no próximo capítulo.

4.5 Unidades — a pegadinha nº 1

O TRIGRS trabalha em SI: metros, segundos, Pascal. A chuva entra em m/s:

\[ 50\ \text{mm/h} = \frac{50}{1000 \times 3600} = 1{,}39 \times 10^{-5}\ \text{m/s} \]

ImportanteCorreções que fizemos no exemplo original do USGS

Se você baixar o exemplo direto da distribuição oficial, três ajustes são necessários (nesta pasta do repositório eles já estão feitos):

  1. No tr_in.txt, os caminhos apontavam para Data/tutorial/, pasta que não existe na distribuição — ajustados para data/;
  2. A grade TIdscelGrid_tutorial é gravada pelo TopoIndex com extensão .txt (não .asc) — o nome no tr_in.txt foi ajustado;
  3. A pasta de saída (Resultados/) precisa existir antes de rodar — o TRIGRS não a cria e falha silenciosamente na gravação.