coke-oven-maintenance-plan/README.md

69 lines
4 KiB
Markdown

# 일관 제철소 코크스 오븐 조업 시뮬레이터 (Coke Oven Operation Simulator)
본 프로젝트는 일관 제철소(Integrated Steel Mill) 코크스 오븐 배터리(Coke Oven Battery)의 연소실(Combustion Chamber)과 탄화실(Coke Chamber) 내벽 간의 열전달 및 조업 스케줄을 시스템 모델링하고 시뮬레이션하기 위한 코드 패키지입니다.
---
## 🚀 주요 개선 사항: 초고속 NumPy 1D 열전달 솔버 도입
기존 시뮬레이터는 내벽의 1차원 비선형 열전도 편미분방정식을 풀기 위해 범용 PDE 솔버인 `py-pde` 라이브러리를 사용했습니다. 하지만 `py-pde`는:
1. 범용 솔버 특성상 매 조업 루프마다 방정식을 인메모리 컴파일하는 큰 오버헤드가 발생했습니다.
2. 132개의 모든 오븐 벽을 풀기 위해 대규모 프로세스 풀(`multiprocessing.Pool(12)`)을 매 스텝마다 생성/소멸시켜 직렬화 및 IPC 통신 병목이 극심했습니다.
**새로 도입된 해결책 (Custom NumPy Solver):**
- **초고속 순수 NumPy 계산**: 프로세스 생성 및 통신 오버헤드 없이 단일 스레드 순차 연산만으로 마이크로초 단위로 작동합니다.
- **수학적 완벽 일치**: 기존 `py-pde` 베이스라인 솔버의 계산 결과와 $10^{-13}$ K (기계 정밀도 한계) 미만의 오차로 **100% 동일한 온도 결과**를 도출합니다.
- **엄청난 성능 단축**: 60시간 동안의 연속 오븐 조업 시뮬레이션 시간을 기존 약 **20분**에서 단 **58초** 수준으로 **20배 이상(스텝별로는 1000배 이상) 단축**시켰습니다.
---
## 📁 주요 디렉토리 및 파일 구조
- **`Battery.py`**: 시뮬레이션의 핵심 코드로, 오븐 스케줄링(`Battery`), 벽면 열전도(`RefractoryWall`), 연소열 발열량 계산(`CombustionChamber`), 석탄 열량 흡수(`CokeCharge`) 등을 모델링합니다.
- **`CokeOvenWallTemperature.csv`**: 장입 이후 경과 시간에 따른 코크스 오븐 내벽 온도 측정 테이블 파일입니다.
- **`Heat_Plan_*.csv` / `sample_heat_*.txt`**: 노열 공급 프로그램 및 가열 계획 데이터 파일입니다.
- **`(답변)20240611_코크스 코드 질의사항(서용원).pptx`**: 코크스 조업 코드 로직과 해석 모델에 대한 Q&A 자료입니다. (추가 개발을 위해 반드시 참고하시기 바랍니다.)
- **`gas.history`, `wall.history`, `coke.history`, `oven.state`**: 이전 시뮬레이션 결과로부터 상태를 복구하기 위한 피클(pickle) 데이터 파일들입니다.
---
## 🛠️ 개발 환경 설정 및 실행 방법
본 프로젝트는 최신 `Cantera 3.2.0` 환경에 최적화되어, 기존 CTI/XML 포맷을 최신 **YAML 포맷**(`gri30.yaml`)으로 대체하여 Cantera 3+ 호환성을 확보했습니다.
### 1. 가상환경 구축 및 패키지 설치
터미널에서 아래 명령어를 실행하여 파이썬 가상환경을 활성화하고 패키지를 설치합니다:
```bash
# 가상환경 생성
python3 -m venv .venv
# 가상환경 활성화 (Linux/macOS)
source .venv/bin/activate
# 필수 패키지 설치
pip install -r requirements.txt
```
### 2. 시뮬레이션 실행
가상환경이 활성화된 상태에서 메인 시뮬레이터를 실행합니다:
```bash
python Battery.py
```
실행이 완료되면 최종 시뮬레이션의 가스 온도, 벽 온도, 코크스 조업 상태를 `gas.history2`, `wall.history2` 등으로 자동 저장합니다.
---
## ⚙️ 솔버 구성 설정 (Configuration)
`Battery.py` 파일 최상단의 글로벌 설정 변수 `USE_CUSTOM_SOLVER`를 통해 손쉽게 검증 및 가속화 모드를 토글할 수 있습니다:
```python
# Battery.py 상단 설정
USE_CUSTOM_SOLVER = True # True: 초고속 NumPy FDM 솔버 (기본값)
# False: 검증용 py-pde 베이스라인 솔버
```
> [!TIP]
> 추가 개발 시 새로 짠 솔버가 올바른 결과를 내는지 확인하려면 `USE_CUSTOM_SOLVER = False`로 두고 기존 논문/해석 엔진 데이터와 크로스 체크(Cross-check) 하실 수 있습니다.