이 도구가 하는 일
저류층을 압력이 균일한 탱크로 보고, 관측된 압력 이력을 가장 잘 재현하는 원시부존량과 구동 파라미터를 찾아냅니다. 물질수지식을 월 단위로 전진 적분하면서 각 시점의 압력을 풀고, 그 압력과 실측 압력의 차이(RMSE)를 최소화하는 방향으로 파라미터를 회귀시킵니다.
산출하는 값
OOIP / GIIP, 대수층 유입량 We, 구동지수(DDI·SDI·WDI·CDI·TDI), 회수율, 폐기압력 도달 시점, 탱크 간 이동량.
Outputs필요한 입력
날짜별 저류층 압력과 누적 생산량(유·가스·수), PVT 상수 몇 개, 구동 메커니즘 선택. 최소 3개 행이면 계산됩니다.
Inputs다루지 않는 것
공간 분포, 상대투과도, 개별 유정 거동, 코닝, 압력 구배. 탱크 내부는 항상 균일한 압력으로 가정합니다.
Out of scope초기 스크리닝, 부존량 검증, 구동 메커니즘 판별, 교육용에 적합합니다. 정밀한 개발 계획 수립에는 3D 수치 시뮬레이션이 필요합니다.
화면 구성
화면은 위에서 아래로 다섯 개 영역입니다.
| 영역 | 내용 |
|---|---|
| 타이틀 바 | File / Analysis / View / Help 메뉴, 우측에 현재 모델 요약 칩과 라이트·다크 전환 버튼. |
| 툴바 | Run Analysis Example Data Clear, 유체 종류 선택, CSV Report. |
| 사이드바 (좌) | 모든 입력 패널. 제목을 누르면 접히고 펼쳐집니다. 패널 제목 옆의 shared 는 전 탱크 공통, tank 는 현재 선택된 탱크에만 적용된다는 표시입니다. |
| 스테이지 (우) | 경고 상자 → KPI 5개 → 차트 2개 → 탭 패널 5개 순서. |
| 상태 표시줄 | 계산 상태, 유체 종류, 이력 행 수, 마지막 실행 시각, 요약 결과. |
사이드바 맨 아래 Method 패널에는 현재 유체 모드에 해당하는 지배 방정식이 항상 표시됩니다. Help → Method & Assumptions 를 누르면 그 패널로 바로 이동합니다.
기본 작업 순서
처음 열면 예제 데이터가 자동으로 로드되어 이미 계산이 끝난 상태입니다. 내 자료로 바꾸는 과정은 다음과 같습니다.
유체 종류를 정한다
툴바의 Fluid 에서 Oil · Black-oil (Havlena–Odeh) 또는 Dry Gas · P/z Material Balance 를 고릅니다. 유체를 바꾸면 이력 표가 해당 예제 데이터로 초기화됩니다. 따라서 유체 선택을 가장 먼저 하십시오.
탱크와 PVT를 설정한다
단일 탱크라면 Tanks 에서 초기압력 Pi 만 맞추면 됩니다. 이어서 Fluid & PVT 에 온도, 기포점, Boi, Rsi, co, z, Bw 를 입력합니다. 아래쪽 Derived Bgi / Derived Bob 값이 입력과 함께 즉시 갱신되므로 오타를 바로 확인할 수 있습니다.
구동 메커니즘을 고른다
Drive Mechanism 에서 가스캡 비 m 과 암석·공극수 압축률을, Aquifer 에서 대수층 모델을 지정합니다. 무엇을 골라야 할지 모르겠다면 일단 기본값(Pot)으로 두고 8절의 Campbell 플롯으로 판단하십시오.
생산 이력을 넣는다
하단 Production History 탭에 직접 입력하거나, File → Import History from CSV… 로 불러옵니다. 최소 3개 행, 그리고 압력이 이력 동안 변해야 부존량이 결정됩니다.
계산하고 매칭한다
Run Analysis(⌥R)는 부존량 N만 맞춥니다. 잔차가 크면 History Match Regression 에서 추가 파라미터를 체크하고 Run Regression(⌥G)을 누릅니다.
검증하고 내보낸다
Match Diagnostics 로 행별 잔차를, Diagnostic Plot 으로 물리적 타당성을 확인합니다. 결과는 CSV(⌥S) 또는 Report(PDF 인쇄)로 내보냅니다.
입력 항목 전체 레퍼런스
사이드바 패널 순서 그대로 정리했습니다. 화면에서 보이는 이름과 이 표의 이름이 1:1로 대응합니다.
4.1 Model Identification 전역
모델 이름 한 칸뿐입니다. 타이틀 바 우측 칩, 인쇄 보고서 제목,
CSV 파일 이름에 그대로 쓰입니다. 파일명으로 쓸 때 영문·숫자·.·-
외의 문자는 _ 로 치환됩니다.
4.2 Tanks 탱크별
| 필드 | 단위 | 기본값 | 설명 |
|---|---|---|---|
| Tank name | — | Tank 1 | 이력 표의 압력 열 제목, 범례, 회귀 목록에 표시됩니다. |
| Initial pressure Pi | psia | 4200 | 물질수지의 기준 압력. 최소 15. 기포점이 Pi 를 넘으면 Pi 로 잘라내고 포화 상태로 취급하며 경고를 띄웁니다. |
| Production share | % of field | 100 | 전체 필드 생산량 중 이 탱크가 차지하는 비율. 모든 탱크의 합이 100%여야 하며, 합계는 패널 하단 Allocation total 에 실시간 표시됩니다 (초록=정상, 주황=불일치). |
탱크 칩의 + Tank 로 추가하면 가장 지분이 큰 탱크의 몫을 절반 나눠
새 탱크에 주고, Pi 는 현재 탱크 값을 복사합니다. 칩의 × 로 삭제하면
그 지분이 첫 번째 탱크로 돌아가고 관련 연결도 함께 제거됩니다. 탱크는 최소 1개 필요합니다.
4.3 Tank Connections 탱크 2개 이상일 때만 표시
두 탱크 사이 유동은 압력차에 비례합니다.
+ Add connection 으로 행을 추가하고 양쪽 탱크와 T 를 지정합니다. 같은 탱크를 양쪽에 고르면 자동으로 다른 탱크로 바뀝니다. T 를 0으로 두면 연결이 없는 것과 같습니다. 연결을 하나도 만들지 않으면 탱크들은 완전히 독립된 구획으로 계산되며 경고가 표시됩니다.
4.4 Fluid & PVT 전 탱크 공통
| 필드 | 단위 | 기본값 | 설명 |
|---|---|---|---|
| Reservoir temp. T | °F | 220 | Bg 계산에 직접 들어갑니다. 두 유체 모드 모두 사용. |
| Bubble point Pb | psia | 3200 | 오일 모드 전용. 이 압력을 기준으로 Bo·Rs 상관식이 두 갈래로 갈립니다. |
| Oil FVF at Pi Boi | rb/stb | 1.32 | 오일 모드 전용. 초기 압력에서의 오일 용적계수. |
| Solution GOR Rsi | scf/stb | 650 | 오일 모드 전용. Pb 이상에서는 일정하게 유지됩니다. |
| Oil compressibility co | 1/psi | 0.000012 | 오일 모드 전용. 미포화 구간의 Bo 기울기를 결정합니다. |
| Gas deviation factor z | — | 0.92 | 이력 전 구간에서 상수로 취급합니다. 0.2 ~ 1.5. |
| Water FVF Bw | rb/stb | 1.03 | 생산수 부피를 저류층 조건으로 환산할 때 씁니다. |
Derived Bgi 와 Derived Bob 은 입력이 아니라 위 값들로부터 계산된 확인용 표시입니다. Bgi 가 예상 범위를 벗어나면 온도나 z 를 의심하십시오.
4.5 Drive Mechanism 탱크별
| 필드 | 단위 | 기본값 | 설명 |
|---|---|---|---|
| Gas cap ratio m | GIIP·Bgi / N·Boi | 0 | 가스캡 부피와 오일존 부피의 비. 오일 모드 전용이며, 건성가스 모드에서는 값을 넣어도 무시되고 경고가 뜹니다. 0이면 가스캡 없음. |
| Connate water Swc | fraction | 0 | 공극수 포화도. 0 ~ 0.95. |
| Formation compr. cf | 1/psi | 0 | 암석 압축률. |
| Water compr. cw | 1/psi | 0 | 공극수 압축률. |
Swc·cf·cw 세 값은 함께 암석·공극수 팽창항을 만듭니다.
세 값이 모두 0이면 이 항은 사라집니다. 기본값이 0인 이유는 이 항 없이도 예제 데이터가 정확히 재현되도록 하기 위해서입니다. 실제 자료에서는 미포화 저류층일수록 이 항의 기여가 커집니다.
4.6 Aquifer 탱크별
탱크마다 서로 다른 대수층 모델을 붙일 수 있습니다. 모델을 바꾸면 해당 모델에 필요한 입력 칸만 나타나고, 회귀 대상 목록도 함께 바뀝니다.
| 모델 | 거동 | 언제 쓰나 |
|---|---|---|
| None | We = 0 | 체적 고갈 구동. 대수층이 없다고 확신할 때, 또는 Campbell 플롯이 수평선일 때. |
| Pot | We = J·(Pi − p) 순간 반응, 경로 무관 |
가장 단순한 1-파라미터 모델. 기본값이며 첫 시도로 적합합니다. 시간 지연이 없어 압력 강하에 즉시 반응합니다. |
| Schilthuis | dWe/dt = C·(Pi − p) 정상 상태 |
대수층이 사실상 무한하고 경계 압력이 유지될 때. 유입이 시간에 누적되므로 후반부 지지력이 커집니다. |
| Fetkovich | 유한 대수층, 준정상 상태 고갈되며 지지력 감소 |
대수층 크기가 제한적이어서 시간이 지나면 힘이 빠지는 경우. 후반부 압력 급락을 재현할 때 유용합니다. |
| Carter–Tracy | 비정상 상태 van Everdingen–Hurst 근사 |
물리적으로 가장 엄밀한 옵션. 대수층 물성(k, φ, μw, ro, h, θ)을 알고 있을 때. 중첩 적분 없이 축차식으로 풉니다. |
모델별 입력
| 모델 | 필드 | 단위 | 기본값 |
|---|---|---|---|
| Pot | Aquifer strength J | MMrb / psi | 0.0015 |
| Schilthuis | Influx constant C | MMrb / (psi·day) | 0.000002 |
| Fetkovich | Aquifer volume Wi | MMrb | 500 |
| Productivity index J | rb / (day·psi) | 4 | |
| Aquifer total compr. ct | 1/psi | 0.000006 | |
| Carter–Tracy | Permeability k | md | 50 |
| Porosity φ | fraction | 0.2 | |
| Water viscosity μw | cp | 0.5 | |
| Reservoir radius ro | ft | 3000 | |
| Aquifer thickness h | ft | 50 | |
| Encroachment angle θ | degrees | 60 | |
| Aquifer total compr. ct | 1/psi | 0.000006 |
θ 는 저류층 원주 중 대수층과 접한 각도입니다. 360°면 완전히 둘러싸인 형태, 60°면 한쪽 측면만 접한 형태입니다. Carter–Tracy 유입량은 θ 에 정비례하므로 이 값 하나로 대수층 세기를 크게 조절할 수 있습니다.
4.7 History Match Regression
회귀로 맞출 파라미터를 체크박스로 고릅니다. 목록은 탱크 수, 유체 모드, 선택된 대수층 모델에 따라 자동으로 다시 만들어집니다. 자세한 사용법은 6절에 있습니다.
4.8 Forecast Assumptions
| 필드 | 단위 | 기본값 | 설명 |
|---|---|---|---|
| Forecast period | months | 60 | 이력 마지막 날짜 이후 예측 기간. 1 ~ 600. |
| Abandonment pressure | psia | 800 | 탱크 압력이 이 값 이하로 떨어지면 폐기로 처리합니다. 최소 15. |
| Oil rate | Mstb/day | 10 | 오일 모드 전용. 예측 구간 동안 일정한 필드 전체 생산율. |
| Gas rate | MMscf/day | 18 / 100 | 오일 모드 기본 18, 건성가스 모드로 바꾸면 100으로 자동 변경됩니다. |
| Water rate | Mstb/day | 4 | 예측 구간의 산수량. |
| Reallocate rate… | 체크박스 | 켜짐 | 탱크 2개 이상일 때만 나타납니다. 켜면 폐기된 탱크의 생산 지분이 아직 살아 있는 탱크들로 재배분됩니다. |
예측 생산율은 필드 전체 기준입니다. 각 탱크는 Production share 비율만큼 나눠 부담합니다. 생산율이 0이면 저류층이 고갈되지 않아 예측이 무의미해지므로 경고가 표시됩니다.
생산 이력 입력
5.1 표 직접 입력
Production History 탭의 열 구성입니다.
| 열 | 단위 | 비고 |
|---|---|---|
| Date | YYYY-MM-DD | 날짜 선택기로 입력. 순서가 뒤죽박죽이어도 계산 시 자동 정렬됩니다. |
| Reservoir pressure | psia | 탱크가 여러 개면 탱크 이름별로 열이 하나씩 생깁니다. 값이 없는 칸은 비워두면 그 시점 그 탱크는 매칭에서 제외됩니다. |
| Cum. oil | MMstb | 누적값(증분 아님). 건성가스 모드에서는 무시됩니다. |
| Cum. gas | Bscf | 누적값. 건성가스 모드에서는 이 열이 주 생산량입니다. |
| Cum. water | MMbbl | 누적 산수량. |
| Comment | — | 계산에 영향 없음. 메모용. |
행이 유효하게 인식되는 조건
- 날짜가 채워져 있을 것
- 탱크 압력 중 최소 하나가 0보다 큰 숫자일 것
이 조건을 만족하는 행이 3개 이상이어야 계산이 시작됩니다.
탭 제목 옆 숫자와 상태 표시줄의 history rows 가 유효 행 수를 보여줍니다.
표 아래 버튼: + Add row 빈 행 추가,
Load sample 예제 데이터 다시 불러오기,
Clear all 전체 삭제. 각 행 오른쪽 × 로 개별 삭제합니다.
5.2 CSV 가져오기
File → Import History from CSV… 로 파일을 고릅니다.
헤더 줄은 필요 없습니다 — YYYY-MM-DD 형식으로 시작하는 줄만
읽고 나머지는 전부 무시하므로, 기존 보고서를 그대로 넣어도 이력 행만 골라냅니다.
가져오기는 기존 이력 표를 완전히 덮어씁니다. 압력 열 개수는 현재 만들어 둔 탱크 수와 같아야 하므로, 탱크를 먼저 만든 다음 CSV 를 불러오십시오.
히스토리 매칭
6.1 두 개의 실행 버튼
Run Analysis ⌥R
부존량 N(탱크마다 하나)만 회귀합니다. 나머지 파라미터는 사이드바에 입력한 값 그대로 고정됩니다. 빠르고 결과가 안정적입니다.
기본 실행Run Regression ⌥G
N 에 더해 History Match Regression 에서 체크한 파라미터를 함께 맞춥니다. 실행 후 이전 RMSE 와 비교한 결과가 패널에 표시됩니다.
확장 실행두 경우 모두 N 은 항상 회귀 대상입니다. 체크박스에서 N 을 해제해도 부존량은 계속 맞춰집니다 — 물질수지에서 N 은 관측 압력으로부터 결정되는 값이지 사용자가 지정하는 값이 아니기 때문입니다.
6.2 회귀로 맞출 수 있는 파라미터
| 파라미터 | 표시 조건 |
|---|---|
| In-place volume | 항상 (탱크마다 하나, 기본 체크됨) |
| Gas cap ratio m | 오일 모드일 때 |
| Aquifer strength J | Pot 모델 |
| Influx constant C | Schilthuis 모델 |
| Aquifer volume Wi · PI J · ct | Fetkovich 모델 |
| k · φ · μw · ro · h · θ · ct | Carter–Tracy 모델 |
| Transmissibility | 탱크 연결이 있을 때 (연결마다 하나) |
탱크가 여러 개면 목록이 탱크별 그룹으로 나뉘고, 각 그룹 제목에 해당 탱크의 색 점이 붙습니다. 회귀가 끝나면 찾아낸 값이 사이드바 입력 칸에 자동으로 반영되므로, 화면의 입력값은 언제나 지금 그려진 결과와 일치합니다.
6.3 매칭 품질 판단
KPI의 History match RMSE 가 유일한 목적함수입니다. 관측 압력이 있는 모든 (시점 × 탱크) 조합의 잔차 제곱평균제곱근이며 단위는 psi 입니다.
| RMSE | 해석 |
|---|---|
| < 10 psi | 사실상 완전 일치. 자기 정합적인 합성 자료이거나 모델이 매우 잘 맞는 경우. |
| 10 – 50 psi | 실측 자료로서는 양호. 게이지 오차와 같은 수준. |
| 50 – 150 psi | 사용 가능하지만 구동 메커니즘을 재검토할 여지가 있음. |
| > 150 psi | 도구가 경고를 띄웁니다. 대수층 모델을 바꾸거나 회귀 파라미터를 늘리십시오. |
물질수지의 고전적 함정입니다. 부존량과 대수층 세기를 동시에 회귀시키면 해가 하나로 정해지지 않습니다. 작은 저류층 + 강한 대수층과 큰 저류층 + 약한 대수층이 거의 같은 압력 이력을 만들어내기 때문입니다.
실제로 이 도구의 예제에서도, 참값인 N=35 MMstb 보다 N=20.5 MMstb + 강한 대수층 조합이 더 낮은 RMSE 를 내는 경우가 있습니다. RMSE 만 보고 판단하지 마십시오.
대응 방법: 지질학적으로 알고 있는 값(대수층 크기, 접촉 각도 등)은 체크를 풀어 고정하고, 회귀 파라미터를 최소한으로 유지하십시오. 그리고 8절의 진단 플롯으로 물리적 타당성을 반드시 교차 검증하십시오.
6.4 계산 방식
- Nelder–Mead 심플렉스법. 모든 파라미터를 로그 공간에서 다루므로 항상 양수가 유지됩니다.
- 최대 반복 횟수는
min(600, 150 + 120 × 파라미터 수), 수렴 허용오차1e-6. - 회귀 중에는 이력 구간만 시뮬레이션합니다. 예측 구간은 계산 시간만 늘릴 뿐 목적함수에 기여하지 않기 때문입니다.
- 실행 시간과 사용된 파라미터 수는 회귀 후 패널에 표시됩니다.
결과 읽기
7.1 KPI 다섯 개
| 지표 | 의미 |
|---|---|
| Estimated OOIP / GIIP | 회귀로 찾은 전체 부존량. 다중 탱크면 모든 탱크의 합입니다. 단위는 오일 MMstb, 가스 Bscf. |
| Last observed pressure | 이력 마지막 시점의 관측 압력. 그 시점에 값이 있는 탱크들의 평균입니다. |
| History match RMSE | 압력 잔차. 10 psi 미만이면 소수점 한 자리까지 표시합니다. |
| Forecast recovery factor | 예측 종료 시점의 누적 생산량 ÷ 부존량. |
| Cumulative water influx | 예측 종료 시점까지 전 탱크의 누적 We 합계 (MMrb). |
7.2 상단 차트 두 개
Pressure History Match — 관측 압력(점선+마커)과 모델 압력, 그리고 예측 구간을 겹쳐 그립니다. 여기서 두 선이 눈에 띄게 벌어지는 구간이 모델이 설명하지 못하는 구간입니다.
Cumulative Production — 이력과 예측을 이어 붙인 누적 생산 곡선. 오일 모드는 누적 오일, 건성가스 모드는 누적 가스를 그립니다.
두 차트 모두 마우스를 올리면 십자선과 값 툴팁이 나타납니다.
7.3 탭 다섯 개
| 탭 | 내용 |
|---|---|
| Production History | 입력 표 자체. 옆의 숫자는 유효 행 수입니다. |
| Match Diagnostics | 행별 관측 압력, 모델 압력, 잔차, 누적 We, 지배 구동 메커니즘, 상태. 다중 탱크면 탱크 열이 추가됩니다. |
| Forecast | 예측 구간의 날짜별 누적 생산, 필드 압력, 수 유입량, 회수율, 상태. |
| Tanks | 탱크별 요약: 부존량, 지분, 최종 압력, 누적 We, 순 이동량, 회수율, 대수층 모델, 폐기 여부. |
| Diagnostic Plot | 8절 참조. |
View 메뉴로는 Production History · Match Diagnostics · Forecast · Diagnostic Plot 네 개로 이동할 수 있습니다. Tanks 탭은 탭 막대를 직접 클릭해 여십시오.
7.4 예측 상태 표시
| 상태 | 의미 |
|---|---|
| On forecast | 정상 생산 중. |
| Abandonment p | 단일 탱크가 폐기압력에 도달. 예측이 여기서 멈춥니다. |
| 〈탱크〉 at abandonment | 재배분이 꺼진 상태에서 어느 탱크가 폐기압력 도달. |
| N of M shut in | 재배분이 켜진 상태에서 M개 중 N개가 폐쇄됨. 남은 탱크가 생산을 이어받습니다. |
| All tanks shut in | 모든 탱크 폐쇄. 예측 종료. |
| In-place limit | 누적 생산량이 부존량에 도달. 예측 생산율이 비현실적으로 높다는 신호입니다. |
| No solution | 해당 시점에서 물리적 해를 찾지 못함. 입력을 점검하십시오. |
7.5 구동지수
각 시점의 총 채굴량(voidage) 중 어느 에너지가 몇 퍼센트를 담당했는지를 나타냅니다. 다섯 값의 합은 1입니다.
| 지수 | 표시 이름 | 에너지원 |
|---|---|---|
| DDI | Depletion | 오일·용존가스 팽창 (고갈 구동) |
| SDI | Gas cap | 가스캡 팽창 |
| WDI | Water influx | 대수층 수 유입 |
| CDI | Rock + water | 암석·공극수 압축 |
| TDI | Tank transfer | 연결된 이웃 탱크로부터의 유입 |
Match Diagnostics 표의 Dominant drive 열은 그 시점에서 기여도가
가장 큰 항목을 보여줍니다(2% 미만이면 —).
진단 플롯
Diagnostic Plot 탭의 Plot 선택기에서 고릅니다. 탱크가 여러 개면 옆에 탱크 선택기가 함께 나타나며, 각 플롯 아래에는 해석 요령이 항상 한 문단으로 표시됩니다.
8.1 Havlena–Odeh straight line 오일 모드
가로축은 총 팽창 Eₜ (rb/stb), 세로축은 수 유입과 탱크 이동을 제거한 채굴량 F − Wₑ − X (MMrb) 입니다.
점이 위로 휘면 설명되지 않은 에너지가 더 있다는 뜻이고, 아래로 휘면 대수층을 과대평가한 것입니다.
8.2 p/z plot 건성가스 모드
유체를 건성가스로 바꾸면 첫 번째 옵션이 이 플롯으로 바뀝니다. 가로축 누적 가스 Gp (Bscf), 세로축 p/z (psia).
순수 체적 고갈 가스전은 직선이며, 그 직선이 가로축과 만나는 점이 GIIP 입니다. 점이 직선보다 위에 있으면 대수층 지지가 있다는 뜻입니다.
8.3 Campbell / Cole — aquifer diagnostic
대수층 유무를 판별하는 가장 실용적인 도구입니다. 가로축 누적 생산량, 세로축 F/Eₜ (대수층이 없다고 가정하고 관측 압력으로 계산).
같은 플롯이지만 관례상 오일은 Campbell, 가스는 Cole 로 부릅니다. Fluid 설정에 따라 메뉴 이름이 자동으로 바뀌며, 가스 모드에서는 가로축이 Gp, 기준선이 G 가 됩니다.
- 수평선 → 순수 체적 고갈. 대수층 모델은 None 으로 두십시오.
- 우상향 → 고갈 모델로 설명되지 않는 에너지 유입. 대수층 지지가 있습니다.
- 우하향 → 부존량이나 PVT 입력을 다시 확인해 보십시오.
수평 점선은 회귀로 찾은 N(가스는 G) 위치를 표시하므로 비교 기준이 됩니다.
8.4 Drive index history
7.5절의 다섯 구동지수를 시간에 대해 누적 면적으로 쌓아 보여줍니다. 각 띠의 두께가 그 시점의 기여도입니다. 기여가 거의 없는 항목은 아예 표시되지 않습니다.
초반에는 고갈 구동이 지배하다가 후반으로 갈수록 수 유입 비중이 커지는 형태가 대수층 지지 저류층의 전형적인 모습입니다.
8.5 Water influx vs. time
누적 수 유입 Wₑ (실선)과 저류층 조건으로 환산한 누적 산수량 Wp·Bw (점선)를 함께 그립니다.
두 선이 만나는 지점이 중요합니다. 산수량이 유입량을 따라잡으면 대수층은 더 이상 압력을 지지하지 못하고, 그 시점부터 압력 감소가 가팔라집니다.
8.6 Inter-tank transfer 다중 탱크 전용
탱크별 누적 순 이동량 (MMrb). 양수는 이웃으로부터 지원받고 있다는 뜻, 음수는 이웃을 먹여 살리고 있다는 뜻입니다. 모든 곡선의 합은 항상 0입니다 — 이동은 부피를 옮길 뿐 만들어내지 않습니다.
8.7 Production share history 다중 탱크 전용
탱크별 생산 지분을 누적 면적으로 표시합니다. 이력 구간에서는 입력한 비율로 고정되어 있고, 예측 구간에서 탱크가 폐기될 때마다 남은 탱크의 지분이 계단식으로 올라갑니다. 재배분을 꺼두면 전 구간에서 평평합니다.
다중 탱크 모델링
구획화된 저류층, 단층으로 나뉜 블록, 압력 거동이 뚜렷하게 다른 영역을 별도 탱크로 모델링합니다. 모든 탱크의 압력은 매 시간 단계마다 Newton 반복으로 하나의 연립계로 동시에 풀립니다.
9.1 만드는 순서
- Tanks 패널의
+ Tank(⌥K)로 탱크를 추가합니다. - 탱크 칩을 눌러 선택한 뒤 이름·Pi·생산 지분을 각각 설정합니다. Allocation total 이 100%가 되도록 맞추십시오.
- 탱크마다 Drive Mechanism 과 Aquifer 를 따로 지정합니다. 패널 제목 옆 배지에 지금 편집 중인 탱크 이름이 표시됩니다.
- Tank Connections 에서 연결을 추가하고 T 값을 넣습니다.
- 이력 표에 탱크별 압력 열이 생겼으므로 각 탱크의 관측 압력을 입력합니다.
File → Load Two-Tank Example 로 완성된 2탱크 예제를 불러올 수 있습니다. North(22 MMstb, Pot 대수층)가 South(13 MMstb, 고갈 구동)를 T=8 rb/(day·psi)로 먹여 살리는 구성이라, 두 구획이 눈에 띄게 다른 속도로 고갈되는 모습을 볼 수 있습니다.
9.2 주의할 점
- 압력 자료가 없는 탱크는 부존량이 결정되지 않습니다. 모든 탱크에 최소한 몇 개의 관측 압력이 있어야 합니다.
- 연결을 하나도 만들지 않으면 탱크들은 독립 구획이 됩니다. 그래도 계산은 되지만, 그럴 거라면 별도 모델로 나누는 편이 명확합니다.
- 탱크 수가 늘면 회귀 파라미터도 늘어 비유일성이 급격히 심해집니다. 2~3개 구획 이상은 신중하게 접근하십시오.
- PVT는 전 탱크 공통입니다. 구획마다 유체 물성이 크게 다르다면 이 도구의 범위를 벗어납니다.
내보내기와 보고서
10.1 CSV ⌥S
계산을 한 번 이상 실행한 뒤에만 동작합니다. 하나의 파일 안에 여러 블록이 순서대로 들어갑니다.
| 블록 | 내용 |
|---|---|
| 머리말 | 모델 이름, 생성 시각(ISO), 유체 종류, 탱크 수, 총 부존량, RMSE, 회귀에 사용된 파라미터 목록. |
| TANKS | 탱크별 이름·부존량·지분·Pi·가스캡 m·대수층 모델과 모든 대수층 입력값. |
| CONNECTIONS | 연결이 있을 때만. 양쪽 탱크 이름과 T. |
| HISTORY MATCH | (시점 × 탱크)별 관측·모델 압력, 잔차, 누적 생산, We, 이동량 X, 그리고 DDI·SDI·WDI·CDI·TDI. |
| FORECAST | 날짜별 누적 생산, 필드 압력, 수 유입, 회수율, 상태, 그리고 탱크별 압력 열. |
파일 이름은 〈모델이름〉-report.csv 입니다.
10.2 PDF 보고서 ⌘P
Report 버튼 또는 File → Print Report / PDF. 아직 계산하지 않았다면 자동으로 한 번 실행한 뒤 인쇄 대화상자를 엽니다. 인쇄용 레이아웃에서는 사이드바와 메뉴가 숨겨지고, 상단에 모델 이름이 붙은 제목이 나타납니다. 브라우저 인쇄 대화상자에서 대상을 “PDF로 저장” 으로 고르십시오.
인쇄 결과에는 현재 열려 있는 탭의 내용이 담깁니다. 원하는 표를 먼저 띄워 둔 다음 인쇄하십시오.
메뉴 · 단축키
11.1 단축키
Windows·Linux 에서는 ⌥ 대신 Alt, ⌘P 대신 Ctrl+P 입니다.
11.2 메뉴 전체
| 메뉴 | 항목 | 동작 |
|---|---|---|
| File | New Model | 탱크 1개, 빈 행 3개로 초기화합니다. |
| Load Example Data | 현재 유체 모드의 단일 탱크 예제를 불러옵니다. | |
| Load Two-Tank Example | 2탱크 예제를 불러오고 곧바로 계산해 Tanks 탭을 엽니다. | |
| Import History from CSV… | 5.2절 참조. | |
| Export Results as CSV | 10.1절 참조. | |
| Print Report / PDF | 10.2절 참조. | |
| Analysis | Run & History Match | 계산 후 Match Diagnostics 탭으로 이동합니다. |
| Clear Outputs | 결과·차트·경고를 지웁니다. 입력은 유지됩니다. | |
| Fluid: Oil (Black-oil) | 유체 전환. 이력 표가 해당 예제로 초기화됩니다. | |
| Fluid: Dry Gas (P/z) | ||
| View | 탭 4종 | Production History · Match Diagnostics · Forecast · Diagnostic Plot 로 이동. |
| Toggle Light / Dark | 테마 전환. 선택은 브라우저에 저장됩니다. | |
| Help | Method & Assumptions | 사이드바 Method 패널을 펼치고 그 위치로 스크롤합니다. |
경고 메시지 해설
스테이지 상단의 Data quality checks 상자에 나타나는 메시지입니다. 경고가 있어도 계산은 진행되지만(행 부족은 예외), 결과 신뢰도에 직결되므로 반드시 확인하십시오.
| 메시지 | 원인과 조치 |
|---|---|
| At least 3 valid history rows are required | 유효 행이 3개 미만입니다. 계산이 중단됩니다. 날짜와 압력이 모두 채워진 행을 늘리십시오. |
| Production shares total …% | 탱크 지분 합계가 100%가 아닙니다. Tanks 패널에서 조정하십시오. |
| Bubble point exceeds Pi … | 기포점이 초기압력보다 큽니다. Pi 로 잘라내고 포화 상태로 계산합니다. 의도한 것이 아니라면 Pb 를 낮추십시오. |
| Observed pressure exceeds Pi … | 관측 압력이 초기압력보다 높습니다. Pi 를 올리거나 해당 압력 값을 확인하십시오. |
| … has no observed pressures | 그 탱크에 관측 압력이 하나도 없어 부존량을 결정할 수 없습니다. |
| Gas cap ratio is ignored in dry-gas mode | 건성가스 모드에서는 m 이 쓰이지 않습니다. 0으로 되돌리거나 무시하십시오. |
| Cumulative oil / gas decreases at … | 누적 생산량이 감소했습니다. 증분값을 누적값 자리에 넣었을 가능성이 높습니다. |
| Cumulative water decreases at … | 위와 같은 이유. 누적 산수량을 확인하십시오. |
| Pressure is constant across the history | 압력이 변하지 않으면 물질수지로 부존량을 풀 수 없습니다. 압력 자료를 확인하십시오. |
| Tanks have no connections | 탱크가 여러 개인데 연결이 없어 독립 구획으로 계산됩니다. 의도한 것인지 확인하십시오. |
| Forecast rate is zero | 예측 생산율이 0이라 저류층이 고갈되지 않습니다. Forecast Assumptions 를 확인하십시오. |
| History match RMSE is … psi | RMSE 가 150 psi 를 넘었습니다. 회귀 파라미터를 늘리거나 다른 대수층 모델을 시도하십시오. |
계산 방법과 가정
13.1 지배 방정식
두 유체 모드 모두 같은 형태의 일반화 물질수지식을 씁니다.
13.2 PVT 상관식
z 는 이력 전 구간에서 상수입니다. 압력에 따라 z 가 크게 변하는 고압 가스전에서는 이 근사가 오차를 만들 수 있습니다.
13.3 시간 전진 방식
Pot 을 제외한 모든 대수층 모델에서 수 유입량은 경로 의존적입니다. 지금까지 압력이 어떻게 변해 왔는지가 현재 유입량을 결정하기 때문에, 행별로 닫힌 해를 역산할 수 없고 시간을 따라 전진 적분해야 합니다.
- 격자는 월 단위(1개월 = 30.4375일). 격자에서 벗어난 이력 날짜는 별도 스텝으로 삽입됩니다.
- 격자 사이의 누적 생산량은 이력 자료를 선형 보간해 채웁니다.
- 단일 탱크는 압력 잔차에 대한 이분법으로, 다중 탱크는 Newton 반복으로 전 탱크 압력을 동시에 풉니다.
- 물리적 최소 압력은 20 psia 로 제한됩니다.
13.4 대수층 식
Carter–Tracy 의 무차원 압력 P_D 와 그 도함수는 Edwardson 다항식 근사를 씁니다. Fetkovich 는 스크리닝 목적상 역류(대수층으로 물이 되돌아가는 흐름)를 허용하지 않습니다.
13.5 알아 둘 가정
- 탱크 내부 압력은 항상 균일합니다. 압력 구배도, 유동 지연도 없습니다.
- PVT는 전 탱크 공통이며 z 는 상수입니다.
- 생산 가스유비 Rp 는 입력한 누적 오일과 누적 가스로부터 계산됩니다.
- 예측 구간의 생산율은 일정합니다. 감퇴 곡선이나 유정 단위 제어는 없습니다.
- 상대투과도, 코닝, 중력 분리 등 유동 현상은 전혀 모델링하지 않습니다.
문제 해결
| 증상 | 원인과 해결 |
|---|---|
| 계산이 시작되지 않는다 | 유효 행이 3개 미만입니다. 날짜와 0보다 큰 압력이 모두 있는 행을 세어 보십시오.
상태 표시줄의 history rows 가 실제 인식된 개수입니다. |
| “In-place volume could not be resolved” | 회귀가 물리적인 부존량을 찾지 못했습니다. 압력이 실제로 감소하는지, 누적 생산량이 단조 증가하는지, Pi 가 관측 압력보다 높은지 확인하십시오. |
| 부존량이 비현실적으로 크거나 작다 | 대수층 세기와의 비유일성 때문일 가능성이 높습니다(6.3절). 대수층 파라미터를 고정하고 다시 회귀시켜 보십시오. |
| RMSE 가 줄지 않는다 | 구동 메커니즘 자체가 틀렸을 수 있습니다. Campbell 플롯으로 대수층 유무를 먼저 판별하고, 그에 맞는 모델로 바꾸십시오. |
| 예측이 몇 스텝 만에 끝난다 | 예측 생산율이 너무 높거나 폐기압력이 너무 높습니다.
Forecast 탭 마지막 행의 상태(In-place limit / Abandonment p)가
어느 쪽인지 알려 줍니다. |
| 입력을 고쳤는데 차트가 그대로다 | 입력 변경만으로는 재계산되지 않습니다. Run Analysis(⌥R)를 다시 누르십시오. |
| 유체를 바꿨더니 이력이 사라졌다 | 유체 전환 시 이력 표가 해당 예제 데이터로 초기화되는 설계입니다. 유체를 먼저 고르고 자료를 입력하거나, CSV 로 다시 불러오십시오. |
| CSV 가져오기에서 열이 어긋난다 | 압력 열 개수가 현재 탱크 수와 다릅니다. 탱크를 먼저 만든 뒤 가져오십시오. |
| Derived Bgi 가 이상하다 | 저류층 온도나 z 입력을 확인하십시오. Bg 는 두 값에 정비례합니다. |