HEC-RAS

편집 역사 토론
시뮬레이션 유체역학 소프트웨어 마지막 수정: 2026-08-28 04:33:41

1. 개요[편집]

HEC-RAS
River Analysis System
개발미 육군공병단 수문공학센터 (USACE HEC)
최초 배포1995년 7월 (전신 HEC-2)
분기점5.0 (2016) 2차원 도입 · 6.x 계열 (2021~)
라이선스퍼블릭 도메인
1D 정상류에너지식 + 표준축차법 · 혼합류는 비력
1D 부정류4점 음해(박스) 도식 + 뉴턴 반복
2D음해 유한체적 · 확산파 / SWE-ELM / SWE-EM

댐을 세우면 상류 어디까지 잠기는가. 이 질문에 대한 세계 표준 답변기이자, 미국 홍수보험 지도의 사실상 유일한 계산 근거.

HEC-RAS(River Analysis System)는 미 육군공병단 수문공학센터(HEC)가 개발한 하천 수리 해석 모형으로, 단면 자료로 표현된 1차원 하도와 격자로 표현된 2차원 범람원에서 정상류·부정류 수면형과 침수 범위를 계산하는 소프트웨어다.

전신은 1960년대부터 쓰인 FORTRAN 프로그램 HEC-2이고, 윈도 GUI를 얹어 다시 만든 HEC-RAS 1.0이 1995년 7월에 나왔다. 2016년 5.0에서 2차원 흐름 영역이 들어오면서 성격이 크게 바뀌었고, 6.x 계열에서 유사 이송·수질·토석류까지 붙었다. 퍼블릭 도메인이라 누구나 받아 쓸 수 있고, 그 결과 미국 FEMA 홍수보험연구(FIS)와 한국의 하천기본계획 수리검토가 모두 이 계보 위에 있다.1

물리적 배경은 개수로 유동얕은 물 방정식에, 마찰 모형은 매닝 공식에 있다. 이 문서는 HEC-RAS가 그것들을 어떤 알고리즘으로 실제로 푸는가를 다룬다. 도시 우수관망 쪽 대응물은 SWMM이다.

2. 1차원 정상류 — 표준축차법[편집]

HEC-RAS의 원조이자 아직도 가장 많이 쓰이는 계산이다. 하도를 단면(cross section)의 열로 표현하고, 인접한 두 단면 사이에 에너지 보존을 세운다.

Z2+Y2+α2V222g=Z1+Y1+α1V122g+heZ_2+Y_2+\frac{\alpha_2V_2^2}{2g}=Z_1+Y_1+\frac{\alpha_1V_1^2}{2g}+h_e

ZZ 는 하상고, YY 는 수심(그래서 Z+YZ+Y 가 수면고 WS), α\alpha 는 에너지보정계수다. 손실항은 마찰손실과 단면 변화 손실의 합이다.

he=LSˉf+Cα2V222gα1V122gh_e=L\,\bar S_f+C\left\lvert\frac{\alpha_2V_2^2}{2g}-\frac{\alpha_1V_1^2}{2g}\right\rvert

CC 는 속도수두가 증가하면 수축계수, 감소하면 확대계수를 쓴다. 단면 변화가 완만하면 0.1/0.3, 교량 전후에서는 0.3/0.5, 급격한 변화에서는 0.6/0.8이 관행값이다. 여기서 이미 눈치챌 수 있듯 1차원 모형의 국부 손실은 전부 계수로 처리되며, 그게 이 접근의 성능이자 한계다.

2.1. 통수능 분할과 α[편집]

Sˉf\bar S_fα\alpha 를 계산하려면 단면 하나를 통째로 다루면 안 된다. 실제 단면은 좌둔치–저수로–우둔치로 조도와 수심이 크게 다르고, 그 상태로 평균 유속을 쓰면 운동에너지가 심하게 왜곡된다. 그래서 단면을 소구간으로 쪼개 각각의 통수능을 구한다.

Ki=1niAiRi2/3,Q=(iKi)SfK_i=\frac{1}{n_i}A_iR_i^{2/3},\qquad Q=\left(\sum_iK_i\right)\sqrt{S_f} α=A2i(Ki3/Ai2)K3\alpha=\frac{A^2\sum_i\left(K_i^3/A_i^2\right)}{K^3}

홍수터가 넓고 조도가 큰 하천에서 α\alpha 는 태연히 1.5~3을 넘는다. 이것을 1로 두면 속도수두를 크게 과소평가한다. 그리고 소구간을 어떻게 쪼개느냐(조도 변화점마다? 둔치 경계에서만?)에 따라 Ki\sum K_i 가 달라지므로, 단면 분할은 입력이 아니라 사실상 모형 선택이다.

마찰경사는 두 단면의 평균이 필요한데 평균 방식이 여럿이고, HEC-RAS 기본값은 평균통수능식이다.

Sˉf=(Q1+Q2K1+K2)2\bar S_f=\left(\frac{Q_1+Q_2}{K_1+K_2}\right)^{2}

이 외에 마찰경사의 산술평균·기하평균·조화평균 옵션이 있고, 배수곡선이냐 저하곡선이냐에 따라 어느 쪽이 오차가 작은지가 달라진다.

2.2. 반복 절차[편집]

미지수는 상류 단면의 수면고 하나다. 절차는 단순하다.

  1. 수면고를 가정한다.
  2. 그 수면고로 AA, KK, α\alpha, Sˉf\bar S_f 를 구해 에너지식 오른쪽에서 수면고를 계산한다.
  3. 가정값과 계산값의 차가 허용오차 이내면 채택, 아니면 새 가정값으로 반복.

허용오차 기본값은 0.01 ft(약 3 mm), 최대 반복은 20회다. 갱신은 처음 몇 번은 단순 대입, 이후에는 할선법과 구간 이분법을 섞어 쓴다. 20회 안에 못 맞추면 프로그램은 오차가 가장 작았던 해를 확인하고, 그것도 기준을 못 넘으면 임계수심을 답으로 놓고 진행한다. 이 “임계수심 기본값 처리”가 초보자를 잡는 지점이다 — 계산이 실패했다는 경고가 로그 한 줄로 지나가고 결과 파일에는 그럴듯한 수면형이 남는다. 임계수심 경고가 여러 단면에서 뜬다면 그건 하천이 임계류라서가 아니라 단면 간격이 너무 멀거나 지형이 튄다는 신호로 읽어야 한다.

2.3. 방향, 그리고 혼합류[편집]

계산 방향은 흐름 상태가 정한다.

  • 상류(subcritical) — 하류 경계조건에서 시작해 상류 방향으로 밀어 올린다. 정보가 하류에서 상류로 전파되기 때문이다. 자연하천 대부분이 여기 해당한다.
  • 사류(supercritical) — 상류 경계에서 시작해 하류로 내려간다.
  • 혼합류(mixed) — 두 방향 프로파일을 모두 계산한 뒤, 단면마다 비력(specific force)을 비교해 어느 쪽이 지배하는지 판정하고 도수 위치를 찾는다.
M=Q2gA+zˉAM=\frac{Q^2}{gA}+\bar zA

에너지식으로 도수를 넘을 수 없다는 것은 개수로 유동에서 본 그대로다 — 손실량을 모르니 식이 닫히지 않는다. HEC-RAS가 운동량을 별도로 들고 있는 이유가 이것이고, 교각·둑 같은 외력이 있는 구간에서도 운동량식을 쓴다.

3. 1차원 부정류 — 4점 음해[편집]

홍수파 추적, 조위 영향, 댐 붕괴처럼 시간이 개입하면 생브낭 방정식(1차원 얕은 물 방정식)을 풀어야 한다.

At+Qx=q,Qt+x ⁣(Q2A)+gA(zx+Sf)=0\frac{\partial A}{\partial t}+\frac{\partial Q}{\partial x}=q_\ell, \qquad \frac{\partial Q}{\partial t}+\frac{\partial}{\partial x}\!\left(\frac{Q^2}{A}\right)+gA\left(\frac{\partial z}{\partial x}+S_f\right)=0

HEC-RAS의 부정류 엔진은 바르코(Barkau)의 UNET 코드를 계승한 것으로, 4점 음해(박스) 도식을 쓴다. 격자점 네 개(공간 j,j+1j,j+1 × 시간 n,n+1n,n+1)에 가중치를 걸어 미분을 근사하는데, 시간 가중 θ\theta 가 성격을 결정한다.

fxθ(fj+1n+1fjn+1)+(1θ)(fj+1nfjn)Δx\frac{\partial f}{\partial x}\approx\frac{\theta\,(f_{j+1}^{n+1}-f_j^{n+1})+(1-\theta)(f_{j+1}^{n}-f_j^{n})}{\Delta x}

θ=0.5\theta=0.5 면 2차 정확도지만 중립 안정이라 진동하기 쉽고, θ=1\theta=1 이면 1차 정확도지만 수치 감쇠가 강해 잘 죽는다. HEC-RAS 기본값은 안정성 쪽에 크게 치우친 θ=1.0\theta=1.0 이며, 실무 권장 범위는 대략 0.6~1.0이다.2 정확도를 팔아 안정성을 사는 손잡이가 노출되어 있는 셈이고, 이 값을 낮추면 첨두 감쇠가 줄어드는 대신 계산이 튀기 시작한다.

음해라서 각 시간 스텝마다 비선형 연립계가 생기고, 이를 뉴턴 반복으로 푼다. 야코비안은 단면 순서를 따라 블록 대상(帶狀)이라 희소 직접해로 처리되며, 지류 합류·저류지·수문 같은 내부 경계는 추가 방정식으로 붙는다. 음해이므로 CFL 조건에 묶이지 않아 시간 간격을 크게 쓸 수 있지만, 안 묶인다는 것이 정확하다는 뜻은 아니다Δt\Delta t 를 키우면 홍수파 첨두가 조용히 깎인다.

부정류에서 자주 만나는 불안정과 그 처방도 정형화되어 있다.

  • 혼합류 전이에서의 발진. 프루드 수가 1 근처를 오갈 때 관성항이 해를 튀게 만든다. 국부 부분관성(Local Partial Inertia) 옵션이 Fr\mathrm{Fr} 가 1에 가까워지면 관성항에 감쇠 계수를 곱해 확산파 쪽으로 부드럽게 눕힌다. 물리를 손으로 누르는 것이므로 남용하면 안 되지만, 이걸 안 켜면 계산 자체가 안 끝나는 하천이 있다.
  • 단면 간격. 너무 멀면 홍수파를 못 담고, 너무 촘촘하면(특히 완경사 하천) 인접 단면의 수면고 차가 수치오차 수준으로 작아져 반복이 흔들린다.
  • 단면 특성표의 계단. HEC-RAS는 단면마다 수위-면적-통수능 표를 미리 만들어 보간하는데, 지형점이 성글면 이 곡선에 꺾임이 생기고 야코비안이 튄다.

4. 2차원 — 부분격자 지형과 세 개의 방정식 집합[편집]

5.0부터 들어온 2D 엔진은 구조가 좀 특이하다. 음해 유한체적을 비정형 격자(사각형 위주, 다각형 허용)에서 쓰되, 셀 하나를 균일하다고 보지 않는다.

핵심 아이디어가 부분격자 지형(sub-grid bathymetry)이다. 계산 격자는 성글게(예: 25 m) 깔지만 그 아래 지형(예: 1 m LiDAR DEM)은 그대로 살려서, 전처리 단계에서 셀마다 수위-체적 곡선, 셀 면마다 수위-통수면적·윤변·조도 곡선을 미리 만들어 둔다. 계산은 셀 중심 수위 하나를 미지수로 하되, 체적과 플럭스는 그 곡선에서 읽는다.

이 트릭이 통하는 이유는 수면이 지형보다 훨씬 매끄럽기 때문이다. 수면고를 성글게 표현해도 되지만 체적과 통수 면적은 세밀한 지형이 결정한다는, 꽤 정직한 관찰에 근거한다. 대가는 명확하다 — 제방이나 도로 성토처럼 흐름을 막는 지형은 셀 면을 가로질러 정확히 놓여야 하고, 격자 선이 제방을 비껴가면 부분격자 곡선이 제방을 뚫린 것으로 만들어 버린다. 그래서 2D 격자 작업의 절반은 브레이크라인을 제방 마루에 맞춰 넣는 일이다.3

방정식 집합은 셋 중에 고른다.

옵션운동량식성격
확산파 (기본값)압력·마찰만, 관성 무시가장 빠르고 안정. 완만한 범람에 적합
SWE-ELM완전 천수, 오일러-라그랑주 이류큰 시간 간격 가능, 운동량 보존은 약함
SWE-EM완전 천수, 보존형 운동량급변류·수축부에 유리, 시간 간격 제약이 큼

확산파는 u/t\partial\mathbf{u}/\partial t 와 이류항을 버리고 수면경사와 마찰만 남긴 것이라, 사실상 “국소적으로 매닝 등류”를 매 셀에서 푸는 것이다. 그래서 넓게 퍼지는 홍수터 범람에서는 완전 천수와 거의 같은 답을 훨씬 싸게 주지만, 관성이 실제로 중요한 곳(제방 붕괴 직후의 사류, 교량 수축부, 도시 협착부, 댐 붕괴)에서는 못 쓴다. 기본값이 확산파라는 사실 때문에, 급변류 문제를 기본 설정 그대로 돌려 놓고 결과를 믿는 사고가 실제로 자주 난다.

RAS Mapper가 지형·조도·결과 래스터를 다루고, 강우를 격자에 직접 뿌리는 rain-on-grid 해석과 1D 하도 + 2D 홍수터 결합(1D-2D coupling)도 여기서 구성한다.

5. 구조물 — 계수가 물리를 대신하는 곳[편집]

실무 모형의 시간 대부분은 하도가 아니라 구조물에 쓰인다.

  • 교량 저수위 흐름. 에너지법, 운동량법, 야넬(Yarnell) 경험식, WSPRO 중에서 고른다. 교각 후류의 손실을 무엇으로 볼 것인가에 대한 서로 다른 답들이고, 어느 하나가 늘 옳지 않다. 세 방법을 다 돌려 최댓값을 취하는 옵션까지 있는데, 이것이 불확실성에 대한 솔직한 인정인지 책임 회피인지는 보는 사람에 따라 갈린다.4
  • 교량 고수위 흐름. 형하공간이 잠기면 오리피스식(압력류)과 위어식(도로 월류)으로 갈아탄다.
  • 암거·인라인 구조물·측방 위어. 각각 유입구 제어/유출구 제어, 위어 공식, 잠수 보정을 쓴다.
  • 무효흐름구역(ineffective flow area). 교량 접근부처럼 물은 있지만 하류로 흐르지 않는 부분을 통수 면적에서 빼는 장치. 좌표를 손으로 찍어 넣는 순수한 판단이고, 여기가 1D 모형에서 결과를 가장 크게 흔드는 입력 중 하나다.

6. 보정과 한계[편집]

관측 흔적수위나 수위관측소 자료에 맞추는 보정 손잡이는 사실상 조도계수 nn 하나다. 매닝 공식 문서에서 지적한 문제가 여기서 그대로 재현된다 — nn 은 벽면 조도만이 아니라 단면 간격, 지형 자료 오차, 1차원 가정의 결함, 무효흐름 설정 실수까지 전부 흡수하는 쓰레기통 변수가 된다. 홍수터 nn 을 0.06에서 0.09로 올려 관측에 맞춘 모형은, 그 순간부터 “무엇이 맞아서 맞은 것인지” 말할 수 없게 된다.

구조적 한계도 분명하다.

  • 1D는 흐름 방향을 사용자가 정한다. 단면 선을 어디에 어떤 각도로 긋느냐가 유하거리와 통수 면적을 정하므로, 사행이 심한 하천이나 제방 월류 상황에서 1D 결과는 단면 배치의 함수다.
  • 정상류는 저류를 모른다. 첨두 유량을 그대로 밀어 넣는 계산이라 홍수파 감쇠가 없다. 저류 효과가 큰 하천에서는 수위를 과대평가한다.
  • 지형이 답을 정한다. LiDAR DEM은 물속을 못 보므로 하도 측량과 합성해야 하고, 이 합성이 틀리면 통수능이 통째로 틀린다.
  • 격자·단면 수렴을 확인하는 사람이 드물다. 2D 격자 크기를 절반으로 줄여 다시 돌려 보는 것은 검증 및 확인의 기본인데, 실무 보고서에서 이 표를 보기가 쉽지 않다.

그럼에도 HEC-RAS가 표준인 이유는 SWMM과 같다. 무료이고, 30년치 실무 검증 이력이 있고, 규제 기관이 이 결과를 받아 준다. 엔진이 범인인 경우는 드물고, 대개 입력과 해석이 범인이다.

7. 관련 문서[편집]

8. Footnotes[편집]

  1. 미 연방정부 소프트웨어를 퍼블릭 도메인으로 푸는 관행 덕분에 HEC-RAS(하천)·SWMM(우수)·EPANET(상수)이 각 분야를 평정했다. 재미있는 것은 세 프로그램의 성격 차이다. SWMM과 EPANET은 엔진이 라이브러리로 떨어져 있어 파이썬에서 부르기 쉬운데, HEC-RAS는 GUI 중심으로 자라서 자동화가 상대적으로 불편하다. 그래서 몬테카를로 돌리려고 GUI를 COM으로 두들기는 스크립트가 이 바닥에 대대로 전해 내려온다.

  2. θ=1.0\theta=1.0 이 기본값이라는 사실은 이 코드가 어떤 세상을 상정하는지 잘 보여 준다. 완전 음해는 수치 감쇠가 커서 첨두를 깎지만, 대신 웬만해선 안 죽는다. 수천 개 하천을 돌려야 하는 규제 업무에서는 “약간 부정확하지만 끝나는 계산”이 “정확하지만 절반이 발산하는 계산”을 이긴다. 논문용 도식 선택과 실무용 도식 선택이 갈리는 전형적인 지점.

  3. 부분격자 지형은 처음 보면 반칙 같은데, 사실 유한체적의 정신에 정확히 부합한다. 유한체적이 보장하는 것은 셀 평균량의 보존이지 셀 내부가 균일하다는 것이 아니기 때문. 다만 이 덕분에 “격자를 키워도 결과가 별로 안 변한다”는 착시가 생기기 쉽다. 체적은 지형이 잡아 주지만 운동량 전달과 유속장은 여전히 격자 해상도의 함수라, 격자 수렴 시험은 그대로 필요하다.

  4. 교량 해석에서 “에너지·운동량·야넬을 모두 계산해 최대값을 쓰기” 옵션의 존재는 이 분야의 솔직한 자화상이다. 어느 방법이 옳은지 이론적으로 못 고르니 보수적인 쪽을 택한다는 것인데, 홍수위 산정에서는 그것이 안전측이므로 정당화된다. 문제는 그렇게 얻은 수위로 교량 상판고를 설계하고 나면, 다음 사람이 그 수위를 관측값처럼 취급하기 시작한다는 것이다.