AquaView 백엔드의 핵심입니다. 5단계 하수처리 공정을 HRT 조절에 따라 수질이 어떻게 변하는지 시그모이드 함수 기반으로 시뮬레이션합니다. 실제 EPA/WEF 데이터를 기반으로 한 수치를 사용합니다.

1. 공정 개요

원수 (BOD 200, TSS 220 mg/L)
  ↓ [1차 침전] HRT 2h  — 무거운 부유물질 중력 침전
  ↓ [폭기조]   HRT 6h  — 미생물이 유기물 분해 (BOD/COD 주요 제거)
  ↓ [2차 침전] HRT 1.5h — 활성슬러지 분리
  ↓ [질산화]   HRT 10h  — NH₃→NO₃ 변환 (암모니아 제거)
  ↓ [소독]     HRT 0.5h — 염소 CT값 기반 병원균 제거
처리수 (BOD <10, TSS <10 mg/L 목표)

사용 수질 지표

8가지 수질 지표를 단계별로 추적합니다:

지표 단위 원수 처리수 목표
BOD (생화학적 산소 요구량) mg/L 200 < 10
TSS (총 부유물질) mg/L 220 < 10
COD (화학적 산소 요구량) mg/L 400 < 40
NH₃-N (암모니아) mg/L 35 < 1
탁도 NTU 50 < 2
pH - 7.2 6.5~8.5
DO (용존 산소) mg/L 0.5 > 3
대장균 CFU/100mL 1,000,000 < 10

2. 핵심 알고리즘: 시그모이드 제거율 함수

HRT 변화에 따라 제거율이 비선형적으로 변하는 현상을 시그모이드 함수로 모델링합니다.

import math

def _sigmoid_removal(
    hrt_ratio: float,
    r_min: float,
    r_max: float,
    steepness: float = 3.0,
    midpoint: float = 1.0
) -> float:
    x = steepness * (hrt_ratio - midpoint)
    sigmoid = 1 / (1 + math.exp(-x))
    return r_min + (r_max - r_min) * sigmoid

수학적 원리

표준 시그모이드 함수:

σ(x) = 1 / (1 + e^(-x))

변형 적용:

removal = r_min + (r_max - r_min) × σ(k × (hrt_ratio - m))
파라미터 의미
r_min HRT→0 시 최소 제거율 0.35
r_max HRT→∞ 시 최대 제거율 0.78
k (steepness) 곡선의 가파름 질산화=4.5, 일반=3.0
m (midpoint) 50% 제거 지점 1.0 (설계 HRT 기준)

실제 시뮬레이션 예시 (폭기조 BOD)

포기조 BOD 제거율 (r_min=0.55, r_max=0.97, k=3.0):

hrt_ratio = 0.5  (HRT 50%):  0.55 + 0.42 × σ(-1.5) = 63% 제거
hrt_ratio = 1.0  (HRT 100%): 0.55 + 0.42 × σ(0)   = 76% 제거  ← 설계값
hrt_ratio = 2.0  (HRT 200%): 0.55 + 0.42 × σ(3.0)  = 95% 제거

HRT 증가에 따라 제거율이 비선형적으로 향상되는 현상을 실제 공학 데이터와 동일하게 모델링합니다.