시뮬레이션 유체역학 소프트웨어 마지막 수정: 2026-08-28 04:49:12

1. 개요[편집]

EPANET
개발미국 환경보호청 (EPA) · Lewis Rossman
주요 판본2.0 (2000) · 2.2 (2020, 압력기반 해석 추가)
라이선스퍼블릭 도메인 (C 소스 공개)
대상가압 상수관망의 수리·수질 해석
미지수절점 수두 H · 관 유량 Q
지배식절점 연속식 + 관로 손실식 (비선형)
해법전역 경사법 (Todini-Pilati, 1988) — 뉴턴 반복 + 희소 촐레스키

수도꼭지를 동시에 열면 언덕 위 집의 수압이 얼마나 떨어지는가. 그리고 그 물이 정수장을 떠난 지 며칠째인가.

EPANET미국 환경보호청(EPA)이 개발한 가압 상수관망 해석 엔진으로, 관·펌프·밸브·저수조로 이루어진 관망에서 절점 수두와 관 유량을 풀고 그 위에 잔류염소 감쇠·체류시간 같은 수질 거동을 모의하는 소프트웨어다.

퍼블릭 도메인이라 상용 관망 해석 소프트웨어(WaterGEMS, InfoWater 등)의 상당수가 이 엔진 또는 그 계보를 감싸고 있으며, 학계 논문의 벤치마크 관망도 거의 전부 EPANET 입력 파일(.inp)로 유통된다. 2.0(2000년)이 오래 표준이었고, 2.2(2020년)에서 압력 의존 수요(PDA)와 새 수렴 판정이 들어갔다.1

같은 EPA 계보의 우수관망 모형은 SWMM, 하천 쪽은 HEC-RAS다. 셋의 결정적 차이는 EPANET이 자유수면을 다루지 않는다는 것 — 관은 언제나 가압 만관이고, 그래서 수심이라는 미지수가 없다.

2. 무엇을 미지수로 두는가[편집]

관망을 노드와 링크의 그래프로 본다. 노드는 절점(수요가 걸린 관 접합부), 저수지(수두 고정), 물탱크(수위가 시간에 따라 변함)이고, 링크는 관·펌프·밸브다.

지배식은 두 종류뿐이다.

절점 연속식 — 각 절점 ii 에서 들어온 유량과 나간 유량의 차가 수요와 같다.

jQij=Di\sum_{j}Q_{ij}=D_i

관로 손실식 — 각 링크에서 양 끝 수두차가 유량의 함수로 주어진다.

HiHj=hij=rijQijB1Qij+mijQijQijH_i-H_j=h_{ij}=r_{ij}\,\lvert Q_{ij}\rvert^{\,B-1}Q_{ij}+m_{ij}\lvert Q_{ij}\rvert Q_{ij}

rr 은 마찰 저항계수, mm 은 미소손실 계수, BB 는 유량 지수다. 절댓값을 끼워 넣은 것은 역류에서도 손실이 흐름을 방해하도록 부호를 살리기 위한 것이며, 이 형태 덕분에 관망 코드가 흐름 방향을 미리 정할 필요가 없어진다.

절점이 NN 개, 링크가 MM 개면 미지수 N+MN+M 개에 식 N+MN+M 개다. 다만 비선형이라 한 번에 안 풀린다. 여기서부터가 관망 해석의 본론이다.

2.1. 손실식 세 가지[편집]

SI 단위(유량 m3/s\mathrm{m^3/s}, 길이·지름 m, 손실 m) 기준으로 EPANET이 쓰는 저항계수는 다음과 같다.

손실식저항계수 r지수 B
하젠-윌리엄스10.67 L C−1.852 d−4.8711.852
달시-바이스바흐0.0826 f L d−52
셰지-매닝10.29 n² L d−5.332
미소손실0.0826 K d−42

달시-바이스바흐의 0.0826은 8/(π2g)8/(\pi^2g) 이고, 셰지-매닝의 10.29는 만관 원관에 매닝 공식을 적용해 R=d/4R=d/4 를 대입하면 그대로 나온다. 즉 뒤의 둘은 유도된 상수이고, 하젠-윌리엄스의 10.67만 회귀식에서 온 숫자다.

셋 중 무엇을 고르느냐가 실무에서 은근히 중요하다.

  • 하젠-윌리엄스는 20세기 초 미국 상수도 자료에 맞춘 순수 경험식이다. 물, 상온, 완전난류라는 좁은 조건에서만 유효하고 CC 는 순수한 조도가 아니다. 그럼에도 북미 상수도에서 압도적으로 많이 쓰이는데, 이유는 CC 값에 대한 100년치 실무 감각이 쌓여 있기 때문이다.
  • 달시-바이스바흐달시-바이스바흐 식 문서가 다루듯 물리적으로 일반적이지만, ff무디 선도 위에서 ReRe 와 상대조도의 함수라 매 반복마다 콜브룩 식을 풀어야 한다. 그리고 Re23004000Re\approx2300{\sim}4000 천이역에서 ff 가 불연속으로 점프하는 문제가 있어, EPANET은 그 구간을 3차 다항식으로 보간해 ffdf/dRe\mathrm{d}f/\mathrm{d}Re 를 연속으로 만든다. 물리가 아니라 야코비안을 위한 처리다.
  • 셰지-매닝은 상수관망에서 거의 안 쓴다. 개수로용 식이라서 그렇다.

3. 전역 경사법[편집]

관망 방정식을 푸는 방법은 역사적으로 여럿 있었고, 지금 표준은 토디니와 필라티(1988)의 전역 경사법(Global Gradient Algorithm, GGA)이다. 아이디어는 ”QQHH 를 동시에 미지수로 두고 뉴턴을 돌리되, 그 선형계를 절점 방정식으로 축약해 푼다”로 요약된다.

미지 수두 절점의 관계 행렬을 A12\mathbf{A}_{12}(그 전치가 A21\mathbf{A}_{21}), 고정 수두 절점(저수지·탱크)의 관계 행렬을 A10\mathbf{A}_{10} 이라 하면, 뉴턴 반복에서 풀어야 할 선형계는 다음의 안장점(saddle point) 구조를 갖는다.

(A11A12A210)(ΔQΔH)=(rErC)\begin{pmatrix}\mathbf{A}_{11}&\mathbf{A}_{12}\\ \mathbf{A}_{21}&\mathbf{0}\end{pmatrix} \begin{pmatrix}\Delta\mathbf{Q}\\ \Delta\mathbf{H}\end{pmatrix} =-\begin{pmatrix}\mathbf{r}_E\\ \mathbf{r}_C\end{pmatrix}

A11\mathbf{A}_{11}대각 행렬이고 각 성분은 손실식의 도함수다.

(A11)kk=dhkdQk=BrkQkB1+2mkQk(\mathbf{A}_{11})_{kk}=\frac{\mathrm{d}h_k}{\mathrm{d}Q_k}=B\,r_k\lvert Q_k\rvert^{\,B-1}+2m_k\lvert Q_k\rvert

여기가 요령이 나오는 지점이다. A11\mathbf{A}_{11} 이 대각이므로 역행렬이 공짜다. 첫 블록 행에서 ΔQ\Delta\mathbf{Q} 를 소거하면(슈어 보수) 절점 수두만 남는다.

A21A111A12AΔH=f\underbrace{\mathbf{A}_{21}\mathbf{A}_{11}^{-1}\mathbf{A}_{12}}_{\textstyle \mathbf{A}}\,\Delta\mathbf{H}=\mathbf{f}

이렇게 얻은 A\mathbf{A} 의 성질이 이 알고리즘의 전부다. A21=A12T\mathbf{A}_{21}=\mathbf{A}_{12}^{\mathsf T} 이므로

  • A\mathbf{A}대칭이다.
  • 링크 kk 의 컨덕턴스를 pk=1/(A11)kkp_k=1/(\mathbf{A}_{11})_{kk} 로 두면 A\mathbf{A} 는 정확히 가중 그래프 라플라시안이다. 대각은 그 절점에 붙은 pp 들의 합, 비대각은 pij-p_{ij}.
  • 따라서 고정 수두 절점이 하나라도 있으면(즉 그래프가 접지되어 있으면) A\mathbf{A}양정치다.
  • 희소 구조가 곧 관망의 인접 구조다. 관망은 평면에 가깝고 절점 차수가 대개 2~4라 극도로 희소하다.

대칭 양정치 희소행렬이라는 결론은 곧 촐레스키 분해를 쓸 수 있다는 뜻이고, 실제로 EPANET은 다중 최소차수(multiple minimum degree) 절점 재배열로 채움(fill-in)을 줄인 뒤 심볼릭 인수분해를 한 번만 해 두고, 매 반복에서는 수치 인수분해만 반복한다. 관망 위상은 반복 중에 안 변하므로 이 전처리가 통째로 재사용된다.

수두를 얻은 뒤 유량은 링크마다 스칼라 갱신식으로 따로 고친다 — 즉 반복 하나가 “희소 선형계 한 번 + 링크별 대입 한 번”의 두 단계다. 큰 관망에서도 대개 10회 안쪽에서 수렴한다.

초기 유량은 관마다 유속 약 0.3 m/s(1 ft/s)에 해당하는 값으로 잡는다. 하디-크로스와 달리 초기값이 연속식을 만족할 필요가 없다 — 연속식은 수렴 과정에서 만족되며, 이것이 GGA의 실용적 장점 중 하나다.

수렴 판정은 2.0까지 “전체 유량 대비 유량 변화량의 합”이 허용치(기본 0.001) 미만인지 하나였다. 그런데 이 기준이 실제 해에 도달했음을 보장하지 못한다는 지적(고레프 등, 2013)이 나왔고, 2.2에서 최대 수두 오차최대 유량 변화를 별도 기준으로 추가했다. 겉보기 잔차는 작은데 국소적으로 방정식이 크게 안 맞는 상태를 잡아내기 위한 것이다.

4. 하디-크로스는 왜 밀렸나[편집]

1936년 하디 크로스가 제안한 방법은 관망 해석의 원조다. 폐합 루프마다 에너지 불평형을 계산해 그 루프의 모든 관 유량을 한꺼번에 ΔQ\Delta Q 만큼 보정한다.

ΔQ=hkdhk/dQk\Delta Q=-\frac{\sum h_k}{\sum \lvert\mathrm{d}h_k/\mathrm{d}Q_k\rvert}

손으로 풀 수 있게 만든 것이 이 방법의 위대함이었다. 계산기가 없던 시절, 루프 하나당 나눗셈 한 번으로 관망을 풀 수 있다는 것은 혁명이었다.

밀린 이유도 명확하다.

  • 한 번에 루프 하나씩 고친다. 이는 루프 방정식계에 가우스-자이델을 돌리는 것과 같아서, 루프 사이의 결합(비대각항)을 무시한다. 결과적으로 **수렴이 1차(선형)**다. 반면 전 미지수를 동시에 다루는 뉴턴 계열은 2차 수렴한다. 루프가 많고 강하게 얽힌 격자형 관망에서 이 차이는 반복 수십 배로 나타난다.
  • 루프를 찾아야 한다. 독립 폐합 루프 집합을 자동으로 잡는 것은 그래프 문제이고, 가상 루프(저수지 사이 경로)까지 챙겨야 한다. GGA는 절점 방정식만 세우므로 루프를 아예 몰라도 된다.
  • 초기값이 연속식을 만족해야 한다. 모든 절점에서 질량이 맞는 초기 유량 배분을 만들어 주는 것 자체가 일이다.
  • 펌프와 밸브를 다루기 나쁘다. 압력조절밸브(PRV)처럼 상태가 바뀌는 요소는 루프 보정 논리에 자연스럽게 안 들어간다.

중간 단계로 우드와 찰스(1972)의 선형이론법(루프 대신 관 유량을 직접 미지수로 두고 손실식을 유량에 대해 선형화)이 있었고, GGA는 그 계보의 종착점에 가깝다. 요약하면 하디-크로스는 손 계산에 최적화된 방법이고, GGA는 희소 선형대수에 최적화된 방법이다. 계산 환경이 바뀌었으니 답도 바뀐 것이다.2

5. 상태가 바뀌는 요소들 — 진짜 수렴 문제[편집]

GGA 자체는 잘 수렴한다. 실무에서 EPANET이 “수렴하지 않음” 경고를 뱉는 원인은 거의 언제나 뉴턴 반복 바깥에 있는 이산적 상태 전환이다.

  • 체크밸브·펌프. 유량이 음이 되면 닫아야 한다.
  • PRV(감압), PSV(유지), FCV(정유량), TCV, GPV. 각각 활성/완전개방/완전폐쇄의 세 상태를 오간다. PRV는 하류 압력이 설정치보다 낮으면 그냥 열려 있고, 넘으면 설정 수두를 강제하는 고정 수두 절점처럼 행동한다.
  • 탱크. 가득 차면 유입을 끊고, 비면 유출을 끊는다.
  • 제어 규칙. “탱크 수위가 3 m 아래면 펌프 켬” 같은 조건이 붙는다.

EPANET은 매 반복마다(또는 몇 회마다) 상태를 다시 판정하고, 바뀌었으면 방정식계를 갈아 끼운다. 문제는 두 밸브의 상태가 서로를 뒤집는 순환이 생길 수 있다는 것 — A가 닫히면 B가 열리고, B가 열리면 A가 열리고, 다시 A가 닫히는 식이다. 대응책도 정형화되어 있다. 일정 반복 이후에는 상태 검사 빈도를 낮추고, 그래도 안 되면 뉴턴 갱신에 감쇠 계수를 곱해 스텝을 줄인다.

여기서 나오는 실무 지침 하나. 수렴 실패 메시지가 뜨는데 결과 파일은 멀쩡히 나온다. EPANET은 마지막 반복 결과를 그대로 쓰기 때문이다. 보고서에서 이 경고를 무시하고 압력 등고선을 그리는 것이 이 분야의 대표적인 사고 유형이다.

6. 확장기간 모의 (EPS)[편집]

관망 해석은 기본적으로 정상류다. 관성이 무시되고 물의 압축성과 관벽 탄성도 무시되므로, 수요가 바뀌면 관망 전체가 즉시 새 정상상태로 점프한다. 시간 변화는 이 정상해들을 이어 붙여 흉내 낸다 — 이것이 확장기간 모의(Extended Period Simulation)다.

절차는 이렇다.

  1. 현재 시각의 수요(기준 수요 × 시간 패턴 계수)와 탱크 수위로 수리 해를 푼다.
  2. 각 탱크의 순유입량 QTQ_T 로 수위를 전진시킨다. Δy=QTΔt/AT\Delta y=Q_T\Delta t/A_T.
  3. 제어 규칙을 평가해 펌프·밸브 상태를 갱신한다.
  4. 다음 시각으로 간다.

수리 시간 간격 기본값은 1시간이지만, 탱크가 가득 차거나 비는 순간, 또는 제어 규칙이 발동하는 순간에는 그 시점까지만 전진하는 중간 스텝이 자동으로 삽입된다. 안 그러면 탱크가 음수 수위가 되거나 넘친 물을 놓친다.

여기서 EPANET이 하지 않는 일이 중요하다. 밸브를 급히 닫았을 때의 압력파, 펌프 정지 시의 수주분리 같은 과도현상은 이 모형의 세계에 존재하지 않는다. 그건 수충격 해석의 영역이고, 별도의 특성곡선법 코드가 필요하다. EPANET으로 수충격을 못 본다는 사실을 모르고 “압력이 안전하다”고 결론 내리는 것이 이 도구의 가장 위험한 오용이다.

2.2에서 추가된 압력 의존 수요(PDA)도 짚고 갈 만하다. 기본 모드(수요 기반, DDA)는 압력이 0이든 음수든 지정된 수요가 전부 공급된다고 가정한다. 정상 운영에서는 무해하지만 관 파손·화재 시나리오에서는 명백히 틀린 답을 준다 — 압력이 음수인 절점에서 물이 콸콸 나오는 결과가 나온다. PDA는 수요를 압력의 함수로 두어 이를 고친다.

7. 수질 모듈[편집]

수리 해가 유량장을 정해 주면, 그 위에서 물질 이동을 푼다. EPANET의 수질 알고리즘은 라그랑주 방식이다.

관마다 물을 겹치지 않는 여러 개의 구획(segment)으로 쪼개 각각 농도를 부여하고, 시간 스텝마다 유속 × Δt\Delta t 만큼 구획들을 밀어낸다. 하류 끝을 벗어난 물은 절점에서 완전혼합되고, 그 혼합 농도를 가진 새 구획이 하류 관들의 앞쪽에 생긴다. 반응은 각 구획 안에서 따로 적분한다.

C절점=kQkCkkQkC_{\text{절점}}=\frac{\sum_k Q_kC_k}{\sum_k Q_k}

이 방식의 성격은 분명하다. 축방향 분산을 완전히 무시하지만 그 대가로 수치 분산이 없다. 상수관망은 대개 난류이고 체류시간이 길어 분산 효과가 상대적으로 작으므로 합리적인 절충이며, 격자 기반 대류-확산 방정식 솔버로 같은 문제를 풀었을 때 생기는 인위적 수치 확산을 피할 수 있다는 것이 오히려 장점이다.

반응은 관 내부(bulk)와 관벽(wall)으로 나눈다. 잔류염소 1차 감쇠라면 전체 감쇠 상수가

K=kb+kwkfRh(kw+kf),Rh=d4K=k_b+\frac{k_wk_f}{R_h\,(k_w+k_f)},\qquad R_h=\frac{d}{4}

로 합성된다. kbk_b 는 실험실 병시험으로 재는 벌크 감쇠, kwk_w 는 관벽 반응 계수, kfk_f 는 벌크에서 관벽으로의 물질전달계수(셔우드 수로 계산)다. 이 형태가 말해 주는 것은 관벽 반응이 빠르면 물질전달이 율속 단계가 된다는 것 — kwk_w\to\infty 이면 Kkb+kf/RhK\to k_b+k_f/R_h 로 수렴해 관벽 반응 계수와 무관해진다. 그리고 Rh=d/4R_h=d/4 가 분모에 있으므로 가는 관일수록 관벽 효과가 크다. 말단 소구경 관에서 잔류염소가 유난히 빨리 사라지는 이유다.

화학종 추적 외에 두 개의 특수 모드가 있고, 실무에서는 이쪽이 더 많이 쓰인다.

  • 체류시간(water age) — 농도 대신 “물이 계에 들어온 뒤 흐른 시간”을 이송한다. 절점에서는 유량 가중 평균. 사수역(dead end)과 과대 설계된 탱크를 찾는 데 직방이다.
  • 수원 추적(source tracing) — 특정 수원에서 온 물의 비율을 추적한다. 두 정수장이 공급하는 구역의 경계가 어디인지, 수질 민원의 출처가 어딘지를 본다.

8. 툴킷과 생태계[편집]

EPANET이 오래 살아남은 실질적 이유는 엔진이 라이브러리로 분리되어 있다는 점이다. EPANET Programmer's Toolkit은 C API로 관망을 열고, 매개변수를 바꾸고, 한 스텝씩 돌리고, 결과를 읽는 함수를 제공한다. 그 결과 이런 것들이 가능해졌다.

  • 관망 최적설계. 관경 조합을 유전 알고리즘이나 선형계획법 기반 방법으로 탐색하면서, 목적함수 평가마다 엔진을 부른다. 뉴욕 터널 문제, Hanoi 관망 같은 벤치마크가 이 방식으로 수천 편의 논문에 등장했다.
  • 보정. 관 조도 CC 를 관측 압력·유량에 맞추는 역문제. 미지수가 관 수만큼 있어 그룹으로 묶고 정칙화하는 것이 표준이다.
  • 불확실성·신뢰성 해석. 수요 시나리오를 몬테카를로 방법으로 뿌려 압력 부족 확률을 본다.
  • 오염 사고 대응. 어느 절점에 무엇이 유입되면 어디까지 퍼지는지, 감시 센서를 어디에 놓아야 하는지.

파생 도구도 여럿이다. EPANET-MSX는 다중 화학종과 사용자 정의 반응식을 지원하고, WNTR(Water Network Tool for Resilience)은 EPA와 샌디아 국립연구소가 만든 파이썬 패키지로 지진·정전 같은 재해 시나리오와 복구 과정을 관망 위에서 모의한다. OWA(Open Water Analytics) 커뮤니티가 엔진 유지보수를 이어받은 것도 이 생태계가 굴러가는 이유다.

9. 한계[편집]

  • 정상류 가정. 과도현상 없음. 수충격 검토는 별도.
  • 완전혼합 가정. 절점에서 즉시 완전혼합된다고 본다. 실제 십자 교차부에서는 두 유입류가 거의 섞이지 않고 통과하는 경우가 있어, 이것이 수질 예측 오차의 알려진 원인 중 하나다.
  • 스켈레톤화의 함정. 큰 관망은 계산과 자료 관리를 위해 작은 관을 병합해 단순화하는데, 그 과정에서 체류시간과 소화전 유량이 조용히 바뀐다. 수리 해석용 스켈레톤을 수질 해석에 그대로 쓰면 안 된다.
  • 입력이 답을 정한다. 관 조도 CC, 절점 수요 배분, 밸브 개폐 현황 — 셋 다 실측이 거의 없다. 지어진 지 40년 된 관의 실제 내경을 아는 사람은 없다. 그래서 관망 모형의 신뢰도는 검증 및 확인의 관점에서 보면 늘 자료에 발목이 잡혀 있다.3

10. 관련 문서[편집]

11. Footnotes[편집]

  1. EPANET·SWMM·HEC-RAS가 각 분야를 평정한 것은 미 연방정부가 세금으로 만든 소프트웨어를 퍼블릭 도메인으로 푸는 관행 덕이다. 다만 EPANET에는 사연이 하나 더 있다 — 엔진이 C로 깔끔하게 분리되어 있고 입력 파일이 사람이 읽을 수 있는 텍스트라, 학계가 통째로 이 위에 올라탔다. 벤치마크 관망이 .inp 한 파일로 유통되는 덕에 논문 재현성이 다른 수리 분야보다 눈에 띄게 좋다. 형식이 표준을 만든 사례.

  2. 하디 크로스는 구조공학에서 모멘트 분배법을 만든 그 사람이다. 부정정 골조를 손으로 푸는 그 방법 말이다. 두 방법의 논리 구조가 똑같다는 점이 재미있다 — 전체 계를 한 번에 푸는 대신 국소 불평형을 하나씩 분배하며 반복한다. 그리고 두 방법 모두 컴퓨터가 직접 해법을 감당하게 되면서 실무에서 밀려났다. 계산기의 값이 떨어지면 “똑똑한 근사”의 값도 같이 떨어진다.

  3. 그래서 관망 모형 보정의 실체는 대개 “야간 최소유량과 몇 개 지점의 압력에 맞춰 CC 를 그룹별로 조정하는 일”이다. 문제는 CC 가 관 조도만이 아니라 잘못된 수요 배분, 모르는 사이 닫혀 있는 밸브, 누수까지 전부 흡수한다는 것. 특히 닫힌 줄 몰랐던 밸브는 조도 보정으로 절대 못 맞추는 종류의 오차인데, 현장에 나가 보면 그런 밸브가 꼭 하나씩 있다.