PlantDesign Toolkit
공장설계·공정 계산을 위한 Python / HTTP API — version 0.11.0
PlantDesign Toolkit is a research-alpha collection of 67 explicit calculation methods for process plant design, equipment screening, techno-economic assessment and environmental accounting. Calculators can run independently, or exchange versioned values through a persisted calculation graph. The package includes Python APIs, a CLI, a local JSON HTTP server, SQLite persistence and an optional DWSIM bridge. There is no application web UI.
모듈의 목적·필수/선택 입력·단위·입력 예제·출력 파라미터를 이 README 아래에 모두 공개합니다. The tables are visible in the README, rather than confined to another document or a collapsed section. Nested example structures are shown as complete JSON inputs; complete structured output examples are linked beside each method.
| Distribution | Location |
|---|---|
| Source / issues | https://github.com/lyullee/plantdesign-toolkit |
| PyPI package name | plantdesign-toolkit |
| Python import | plantdesign |
| Command | plantdesign |
| License | GPL-3.0-only; retain upstream notices for bundled DWSIM-derived models |
| Status | Research alpha / preliminary design, with bounded software and balance verification |
Start with a single calculation
Requires Python 3.11 or later. The ordinary calculators have no third-party runtime dependency. DWSIM execution is optional and requires a separately installed engine and compatible Python.NET environment.
python -m pip install plantdesign-toolkit
from plantdesign import sdk
spec = sdk.describe("pump.size")
print(spec["required_inputs"])
print(spec["input_contract"], spec["output_contract"])
inputs = sdk.example("pump.size") # independent, explicitly assumed example
inputs["volume_flow"] = {"value": 36, "unit": "m3/h"}
result = sdk.calculate("pump.size", inputs)
print(result["values"]["electric_power"], result["units"]["electric_power"])
print(result["assumptions"], result["warnings"], result["checks"])
sdk.calculate() is a pure calculation interface: it does not open a database or start a server. Invalid inputs raise plantdesign.errors.DesignError. Catch DesignError when integrating with another application. Unknown methods raise NotFound, a domain error. Do not interpret a nonempty result as approval of a plant design.
from plantdesign.errors import DesignError
try:
result = sdk.calculate("pump.size", inputs)
except DesignError as error:
print(error.as_dict())
What is an input or output?
- Method slug: the stable identifier, for example
thermal.exchanger_rating. - Quantity: either
{ "value": 3, "unit": "bar" }or a number in the method's documented SI convention. Supplying units explicitly is recommended at application boundaries. Absolute pressure and pressure difference are distinct dimensions; gauge conversions need an atmospheric reference. - Fractions: decimal 0–1, or an accepted quantity such as
{ "value": 72, "unit": "%" }. Each method may impose a stricter bound, such as positive efficiency. - Money: currency is explicit in the input context. A money object must use the exact declared unit, such as
USD,USD/kgorUSD/year. No implicit exchange rate or current price lookup is performed. - Nested inputs: arrays and dictionaries represent streams, equipment, cost items, scenarios, distributions and coefficients. The complete assumed example below each method shows the field names and structure. Required conditional inputs still apply even when a registry entry labels the top-level key optional.
- Result:
valuescontains numbers, nested records, flags ornull;unitscontains their reported units.normalized_inputsandinput_unitsdescribe the SI interpretation.assumptions,warnings,checks,methodandverification_statuscarry interpretation and provenance. - Conditional outputs: a quantity that is undefined, indeterminate or inapplicable can be
null. For example, a product-normalized intensity is undefined when production is zero; a unique IRR is not selected for an ambiguous cash flow. Full examples are representative outputs, not an exhaustive schema for every branch.
The bundled prices, heat-transfer coefficients, kinetics, property tables, emission factors, correlations and distributions are assumed examples, not vendor guarantees, current market data or official regional factors. Replace both the value and its source/date/boundary before assessing a real case. No textbook lookup tables are distributed.
Discover the modules
from plantdesign import sdk
all_methods = sdk.methods()
pump_methods = sdk.methods("E02")
catalog = sdk.catalog() # 44 organizing families; 67 actual calculation methods
spec = sdk.describe("assessment.process")
The 44 family IDs organize the design domain; they are not 44 additional calculators. Some families are implemented through DB, provenance, connections or reporting services. A family being mapped to code does not mean every equation, operating regime or regulatory requirement in a reference work is implemented. See source coverage and remaining work.
Store calculations in SQLite
from plantdesign import sdk
service = sdk.open_service("data/example.sqlite3")
run = service.calculate("pump.size", sdk.example("pump.size"))
saved = service.get_resource("runs", run["id"])
print(saved["status"], saved["result"])
The DB is a separate SQLite file, not data embedded in Python code. open_service() explicitly creates/initializes it. The schema version is 3. A separate DBMS server is not required. Persisted calculations store failed runs as well as successful ones; inspect status and error. Project and case IDs are optional for standalone calculations and required by project-specific integration workflows.
DB resources include projects, cases, chemicals, properties, equipment, streams, connections, reference-data, runs, workflows, plans, plan-runs, plan-batches, design-packages, documents and audit records. Updates use a revision number. A stale competing update returns a conflict rather than silently replacing a newer record. See architecture and data contracts.
Connect calculations and compare scenarios
import json
from pathlib import Path
from plantdesign import sdk
from plantdesign.integration import IntegrationService
service = sdk.open_service("data/example.sqlite3")
integration = IntegrationService(service)
blueprint = json.loads(Path("examples/integrated_project.json").read_text(encoding="utf-8"))
created = integration.import_blueprint(blueprint)
baseline = integration.run(created["plan_id"], {})
reused = integration.run(created["plan_id"], {})
batch = integration.scenarios(created["plan_id"], {
"scenarios": [
{"name": "baseline", "parameters": {}},
{"name": "head margin 20%", "parameters": {"head_margin": 0.2}}
]
})
print(baseline["status"], reused["summary"], batch["status"])
This example uses the repository's examples/ directory. An installed package also exposes the bundled blueprint in api_examples.json or through GET /api/examples/integrated. The integration graph supports up to 128 steps and 50 selected outputs. $ref connects a preceding result, $param binds a plan parameter, and $reference binds versioned reference data. The all-method example exercises 67 methods; it is a software coverage fixture, not a claim that all 67 form one physically solved process.
Reuse checks case, method/version, normalized inputs, data revisions, fingerprints and stored result hashes. A reused computation still produces an identifiable run record and lineage. A parameter change recomputes affected downstream steps. Different software versions are not silently treated as the same calculation. See reproduction and recovery.
CLI
plantdesign --version
plantdesign methods
plantdesign describe pump.size
plantdesign example pump.size
plantdesign catalog
plantdesign --db data/example.sqlite3 calculate pump.size --input examples/pump.json
plantdesign --db data/example.sqlite3 design import --input examples/integrated_project.json
describe, example and catalog do not initialize a DB. Other commands use the selected DB. python -m plantdesign is equivalent to the installed entry point. Windows source checkouts can also use run.ps1 and start-api.ps1; PLANTDESIGN_PYTHON can select the interpreter. The CLI returns 0 for success, 2 for calculation/input/partial-run failure, and 1 for storage or file-input errors.
Local HTTP API
plantdesign --db data/example.sqlite3 serve --host 127.0.0.1 --port 8765
| Request | Purpose / input |
|---|---|
GET /, /health |
JSON discovery and version |
GET /api/catalog |
Module families, method contracts and examples |
GET /api/methods, /api/methods/{slug} |
Method metadata; individual method also includes input/output contracts |
GET /api/modules, /api/source-coverage |
Organizing families and implemented/remaining scope |
GET /api/samples/{slug} |
Assumed input for a method |
GET /api/examples/integrated, /api/examples/scenarios |
Integration request examples |
POST /api/calculations |
{method, inputs, case_id?} |
POST /api/workflows |
Connected calculation graph |
POST /api/workspaces |
{name, case_name} atomic project/case creation |
POST /api/workspaces/quick |
{} create/reuse a standalone calculation workspace |
POST /api/design/import |
Import project, references and plan blueprint |
POST /api/plans/{id}/preview |
Preview parameter changes |
POST /api/plans/{id}/run |
{parameters?, force?, previous_run_id?, expected_revision?} |
POST /api/plans/{id}/scenarios |
{parameters?, scenarios:[{name,parameters}]} |
POST /api/plans/{id}/compare |
{run_ids, metrics?} |
GET /api/{resource}, /api/{resource}/{id} |
Filtered/paged list or stored record |
POST /api/{resource} |
Create a supported resource |
PATCH /api/{resource}/{id} |
Revision-checked update |
GET /api/runs/{id}/report, /api/workflows/{id}/report, /api/plan-runs/{id}/report |
HTML calculation artifact |
POST /api/plan-runs/{id}/package |
{output_root?} create a report package |
GET /api/plan-runs/{id}/package-download |
Download a previously created, hash-checked ZIP |
POST/PATCH require Content-Type: application/json. The body limit is 1 MiB and JSON container nesting is limited to 128 levels. Truncated bodies, duplicate keys, nonfinite JSON numbers and malformed JSON are rejected. Successful calculations return 201; failed or partially completed executions return 422 with their recorded status. Other request errors return a JSON error. The local server has no user authentication or authorization layer and is intended for the documented localhost use case. HTML reports are generated outputs, not an application UI.
Optional DWSIM connection
The pure calculators do not import DWSIM. The bridge runs a separately installed engine in a worker process. Configure DWSIM_BIN, PLANTDESIGN_DWSIM_PYTHON and, if needed, PLANTDESIGN_DWSIM_RUNTIME. Installing the dwsim extra installs Python.NET, not the DWSIM engine. The recorded native-engine tests used DWSIM 9.0.5 on Windows; other engine versions/platforms need their own compatibility verification.
| Request | Purpose |
|---|---|
GET /api/dwsim/status, POST /api/dwsim/probe with {} |
Installation / actual worker probe |
GET /api/dwsim/presets |
Pump, heat exchanger, distillation/separation and integrated-process definitions |
POST /api/dwsim/studies |
{case_id,preset_id,scenarios?}; 202 background submission |
GET /api/dwsim/studies/{id} |
Status, scenario results, snapshots and topology |
GET /api/dwsim/studies?case_id={id} |
Study history |
POST /api/dwsim/studies/{id}/plan |
{index} bind a successful scenario to a downstream plan |
GET /api/dwsim/assessment-basis |
Assumed economic/environmental basis |
POST /api/dwsim/studies/{id}/assessment |
{basis} compare successful native scenarios |
GET /api/dwsim/assessment-risk |
Assumed uncertainty settings |
POST /api/dwsim/studies/{id}/risk |
{basis,uncertainty_options} correlated uncertainty comparison |
The integrated native example connects a pump, two-fluid preheater, pressure valves, an eight-stage methanol/water column and a vapor/liquid separator. Its 18 objects and 17 connections are explicit; hot-water utility boundaries are included. It uses a Raoult ideal-mixture basis at an assumed 36 mol% methanol feed. It is not a validated real plant. Native solver completion is checked independently against mass, component and equipment energy balances, with a 1e-5 relative balance threshold for the recorded example.
assessment.process uses immutable successful native snapshots for equipment-cost scaling, CAPEX/OPEX, sales, taxes/cash flows, NPV/IRR and disposition-based environmental inventory. assessment.risk changes prices and emission factors at fixed process quantities using common seeded draws. It does not re-solve the physical plant per random draw. A heat-recovery target is never automatically subtracted from a solved native duty. See DWSIM model provenance.
Verification, history and resuming work
python -m unittest discover -s tests -t .
python tools/verify.py --label public_release
python tools/verify_installed_package.py --label installed_public_release
python tools/verify_physics.py --label public_physics
Use a new output label for each acceptance run. The six verification phases are input validation, hand-checkable formulas, extreme/boundary values, module connections, regression and end-to-end execution. Historical 0.10.1 verification passed 362 tests; that count is historical, not an automatic guarantee for a later revision. Current release evidence and exact counts are recorded in verification.
- Development history: stages, architectural decisions, detected failures, corrections and evidence locations.
- Architecture: calculator/SDK/API/DB/DAG/native-worker boundaries and data flow.
- Reproduction and continuation: clean installation, rerun order, caches, DB copies and failure recovery.
- Verification evidence and limits: distinguish fixtures, independent formulas, installed-package checks, native solves and physical balance checks.
- Roadmap: missing detail and data needed for economic/environmental improvements.
- Third-party notices: DWSIM-derived models and source bibliography.
- Publication review: excluded source material and release audit procedure.
Copyright, attribution and scope
Original prose, PDF pages, extracted textbook text, scanned diagrams, proprietary lookup tables, the external DWSIM installation, local databases and session logs are not part of the public source allowlist. Bibliographic references identify the engineering background without redistributing the books. Code comments explain the model and equations in independently written language. Required open-source license text and attribution remain intact; those notices must not be removed as "duplicate sentences".
Project code is distributed under GPL-3.0-only for a conservative, compatible public distribution with the GPLv3 DWSIM-derived examples. This is not an official DWSIM or textbook-author product. Software checks do not establish code certification, design approval, environmental permitting, investment approval or site validation. The remaining limitations are recorded per method rather than hidden behind a single global status label.
Contributing and citation
Report a reproducible issue with method slug, version, minimal input, explicit units, expected result and the calculation's assumptions. Use fabricated or shareable data in public issues. A method change should update equations, input/output contracts, assumed examples and the appropriate independent verification. See CONTRIBUTING and CITATION.cff. DOI/archive links are added only after the corresponding publication is confirmed; no unissued DOI is claimed.
The parameter reference below is generated by python tools/build_public_docs.py from registry contracts and executed assumed examples. The generator template is docs/README_GUIDE.md. Do not edit generated tables without updating the generator or model metadata.
All 67 calculation methods at a glance
| Method | Purpose / model |
|---|---|
units.convert |
단위변환 — 같은 차원의 단위변환; 게이지압은 기준 대기압 필요 |
balance.mix |
질량기준 혼합 — 비반응 정상 혼합; streams=[{name,mass_flow,composition}] |
balance.split |
질량기준 분할 — splits=[{name,fraction}]; 성분 선택성이 없는 분할 |
balance.reaction |
전환율 기준 단일 반응 — 반응물 계수 음수·생성물 양수; 분자량 기준 질량수지 검사 |
thermal.duty |
현열·잠열 부하 — 제공된 평균 비열·잠열 기반; 양의 부하는 열 투입 |
thermal.circulation |
폐회로 순환계 열수지 — 일정 물성 액체 폐회로, 축동력 전량 소산·모터손실 외기 방출의 등가 모델 |
hydraulics.pipe |
배관 압력손실 — volume_flow/mass_flow 중 하나 필수; 정상 단상 비압축성 Newtonian 유체; 천이영역 제외 |
pump.size |
펌프 양정·동력 — 지정 효율의 예비 선정; NPSH는 흡입 플랜지 정압 기준 |
tank.size |
수직 원통 탱크 용량 — 직접 요구체적 또는 유량*저장시간 입력; 원통부 용량 |
thermal.exchanger |
열교환기 LMTD 기본설계 — 지정 열부하·온도·유효 U 사용; 단상 기본설계 |
utilities.demand |
유틸리티 소요량 — 가열부하가 있으면 스팀 엔탈피 차이, 냉각부하가 있으면 냉각수 비열·온도상승 필수 |
cost.equipment |
장치 구매비·보정 — 사용자 제공 기준비용·지수; 통화 변경은 환율 필수, 날짜 변경은 비용지수 필수 |
cost.capex |
설치비·총투자비 — 설치계수에 구매비 포함; 간접비·OSBL·예비비 별도 집계 |
cost.opex |
운영비·단위 제조원가 — items=[{name,category,annual_quantity,quantity_unit,unit_price,currency?}] |
phase.flash |
지정 K값 기액 플래시 — Rachford-Rice·2상/단일상 판정; K≈1에서는 기화율 미결정 반환 |
batch.capacity |
배치 사이클·생산능력 — 독립 병렬 용기·순차 레시피·완성 배치 기준 |
gas.compressor |
이상기체 다단 압축기 — 일정 cp·gamma, 동일 단별 압력비, 완전 중간냉각 선택 |
gas.blower |
저압 송풍기 — ΔP/P<=0.1, 입구 실제 체적유량 |
valve.liquid |
비초크 액체 조절밸브 — 난류·비초크·Fp=1; FL 제공, 플래싱/초크는 거부 |
thermal.phase_change |
응축기·리보일러·증발기 — mass_flow 또는 molar_flow+molecular_weight; 상변화측 등온 |
mixing.power |
교반 동력·토크 — 단일 임펠러, Re<=10 또는 Re>=10000; 제공된 계수 |
distillation.binary |
이성분 증류 단수·환류비 — 이상계·일정 상대휘발도·포화액 feed(q=1), McCabe-Thiele 단수 |
column.hydraulics |
트레이·충전탑 예비 수력학 — 제공된 용량계수·압력손실 성능자료; 상세 내부구조 검토는 별도 |
separation.stages |
흡수·스트리핑·추출 평형단 — Kremser, 선형 평형·신선 상대상·희석 용질<=0.1 |
separation.packed_height |
HTU/NTU 충전높이 — 선형 구동력 변화·제공된 총괄 HTU |
solids.handling |
분체 저장·벨트 이송 — 벌크용량·수평/상향 벨트 예비 용량·동력 |
solids.screen |
분급 회수율·물질수지 — 미립/조립 2성분군, 제공된 회수율 |
solids.grind |
Bond 분쇄 동력 — 시험 일지수와 80% 통과입도, 원식 입도 um |
solids.settling |
Stokes 침강·면적 — 희석 구형 입자 Re_p<=0.1 |
solids.centrifuge |
Sigma 원심분리 용량 — 제공된 등가 Sigma 면적·효율, Stokes 입자 |
solids.filter |
정압 케이크 여과 — 비압축성 케이크, 초기 케이크 0; 면적 또는 시간 산정 |
solids.cyclone |
Lapple 사이클론 예비 성능 — 제공된 유효 회전수·손실계수, 단일 입경 효율 |
solids.dryer |
건조기 수지·열부하·면적 — 습량기준 수분·수분수지 공기량; 제공 건조속도로 면적 산정 |
economics.project |
현금흐름·NPV·IRR·회수기간 — 연말 현금흐름·정액 감가상각·제공 세율·균등 원리금; 비전형 현금흐름 IRR 미선택 |
economics.sensitivity |
시나리오·민감도·손익분기 — OAT 절대 시나리오, project NPV 기준 비교; 확률분석 별도 |
materials.select |
재질·균일 부식 검토 — 제공된 매질·온도·농도·부식률 데이터 범위 내 선별 |
controls.review |
계기·제어루프·알람·인터록 초안 — 제공된 태그·범위·설정값·동작의 일관성 검토, 독립 단순 루프 |
thermal.pinch |
핀치·복합곡선·최소 유틸리티 — 일정 CP 현열 스트림 열 캐스케이드 |
process.routes |
공정경로·입지 대안·Pareto 비교 — 지정 대안·제약·정규화 가중 점수 |
vessel.preliminary |
내압 용기 동체·헤드·중량 예비 계산 — 원통·2:1 타원 헤드; 코드 인증 아님 |
reactor.ideal |
등온 CSTR·PFR·배치 반응기 — 일정 밀도·단일 power-law 반응 |
separator.gravity |
기액·액액 중력 분리조 — 지정 액적/계수·비포밍 예비 설계 |
separation.adsorption |
흡착 작업용량·베드 — 단일 성분 Langmuir·지정 이용률 |
separation.membrane |
막분리 투과량·면적·물질수지 — 지정 투과도·배제율 일정 |
separation.ion_exchange |
이온교환 수지·재생량 — 지정 등가 작업용량 |
separation.crystallization |
결정화·침전 평형 수지 — 무수 결정·용매 증발·평형 용해도 |
design.optimize |
제약조건 단일변수 설계 탐색 — 2~200점 유계 격자 탐색; 연속 최적성 보장 없음 |
economics.uncertainty |
경제성 Monte Carlo 불확실성 — 독립 일양·삼각 분포, 2000회 이하 |
safety.hazop_fmea |
HAZOP·FMEA·조치 검토 기록 — 사용자 위험 기록·담당·종결 근거; 자동 안전 승인 아님 |
safety.relief |
단상 방출 오리피스 예비 면적 — 기체/비압축성 액체; 인증 용량·규격 적합 판정 아님 |
environment.inventory |
온실가스·폐수·폐기물·용수 부하 — 명시 경계·출처별 활동량; 전과정 LCA·허가 판정 별도 |
layout.review |
2D 배치·이격·배관거리 검토 — 제공 설치 경계·이격 근거; 3D·법규 자동 판단 아님 |
properties.interpolate |
온도별 사용자 물성 보간 — 구간 선형 보간·범위 외 거부 |
pump.operating_point |
제조사 곡선·시스템 운전점 — 단조 Q-H 곡선 구간 보간·범위 내 교점 |
utilities.inventory |
전력·스팀·질소·공기 등 집계 — 유틸리티·차원별 소요량 합산 |
hydraulics.economic |
경제 관경 대안 비교 — 동일 유량 후보 설치비+압손 전력비 |
assessment.process |
공정 연계 경제성·환경성 종합 평가 — 명시 견적·단가·처분·배출계수·경계; 가정 예비 평가 |
balance.recycle |
전환·회수·퍼지 재순환 수지 — 단일 반응물 선형 정상 재순환 고정점 |
environment.treatment |
대기·폐수·폐기물 처리단계 부하 비교 — 제공 물질별 제거율·직렬 처리 단계; 제거=소멸 아님 |
environment.receiving_water |
방류 수질·열오염 완전혼합 수지 — 단순 완전혼합·열부하; 방류 허가 모델 아님 |
environment.noise |
복수 음원 예비 소음 합산 — 독립 점음원 자유음장·지정 감쇠; 법적 적합 판정 별도 |
environment.impacts |
인벤토리 영향범주 특성화 — 사용자 방법/연도별 특성화계수·범주별 합산; LCA 인증 아님 |
thermal.pinch_segmented |
잠열·구간 CP 핀치 분석 — 구간별 CP·등온 잠열 이벤트 캐스케이드; 열교환망 상세 합성 별도 |
thermal.exchanger_rating |
오염저항·ε-NTU 출구온도 성능평가 — 향류/병류 일정 CP 두 유체; 출구 온도·부하·엔트로피 |
reactor.nonisothermal |
비등온 PFR·배치 반응·냉각 연성 — 단일 power-law·Arrhenius·일정 밀도/CP·적응 RK4; 강성 다중반응 제외 |
design.multivariable |
다변수 제약 조합 탐색 — 1~4변수·2500개 유한 조합 내 최선; 연속 전역 최적성 보장 없음 |
assessment.risk |
상관 단가·배출계수 경제환경 불확실성 — 고정 공정량·Gaussian copula·일양/삼각 분포; 20~500표본 |
Complete module input and output reference
01. units.convert — 단위변환
Purpose / operating model: 같은 차원의 단위변환; 게이지압은 기준 대기압 필요
Equations / algorithm: SI 선형·온도 오프셋 변환
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
value |
yes | integer | declared in object / not applicable | Value |
source_unit |
yes | string | declared in object / not applicable | Source unit |
target_unit |
yes | string | declared in object / not applicable | Target unit |
atmospheric_pressure |
optional / conditional | raw | declared in object / not applicable | Atmospheric pressure |
Complete assumed input example:
{
"source_unit": "m",
"target_unit": "mm",
"value": 1
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
converted_value |
number | mm | Converted value |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: registry.py.
Example assumptions: Explicit assumed example; the input and unit contract still applies.
02. balance.mix — 질량기준 혼합
Purpose / operating model: 비반응 정상 혼합; streams=[{name,mass_flow,composition}]
Equations / algorithm: 성분별 질량 보존
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
streams |
yes | array | declared in object / not applicable | Streams |
Complete assumed input example:
{
"streams": [
{
"composition": {
"A": 0.8,
"B": 0.2
},
"mass_flow": {
"unit": "kg/h",
"value": 1000
},
"name": "원료 1"
},
{
"composition": {
"A": 0.1,
"B": 0.9
},
"mass_flow": {
"unit": "kg/h",
"value": 500
},
"name": "원료 2"
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
mass_flow |
number | kg/s | Mass flow |
component_mass_flows |
object | kg/s | Component mass flows |
composition |
object | mass_fraction | Composition |
mass_balance_residual |
number | kg/s | Mass balance residual |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.balance.
Example assumptions: 정상상태·비반응 혼합; 조성은 질량분율; 온도·엔탈피 혼합은 별도 열수지 필요
03. balance.split — 질량기준 분할
Purpose / operating model: splits=[{name,fraction}]; 성분 선택성이 없는 분할
Equations / algorithm: 분할비 합=1
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
stream |
yes | object | declared in object / not applicable | Stream |
splits |
yes | array | declared in object / not applicable | Splits |
Complete assumed input example:
{
"splits": [
{
"fraction": 0.3,
"name": "a"
},
{
"fraction": 0.7,
"name": "b"
}
],
"stream": {
"composition": {
"A": 1
},
"mass_flow": 10
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
outlets |
array | nested structure / not applicable | Outlets |
mass_balance_residual |
number | kg/s | Mass balance residual |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.balance.
Example assumptions: 성분별 선택성이 없는 단순 분할
04. balance.reaction — 전환율 기준 단일 반응
Purpose / operating model: 반응물 계수 음수·생성물 양수; 분자량 기준 질량수지 검사
Equations / algorithm: n_out=n_in+nu*extent
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
component_molar_flows |
yes | object | declared in object / not applicable | Component molar flows |
stoichiometry |
yes | object | declared in object / not applicable | Stoichiometry |
molecular_weights |
yes | object | declared in object / not applicable | Molecular weights |
key_reactant |
yes | string | declared in object / not applicable | Key reactant |
conversion |
yes | number | 1 | Conversion; fraction, 0–1 unless a stricter method condition applies |
Complete assumed input example:
{
"component_molar_flows": {
"H2": 2,
"O2": 1
},
"conversion": 0.5,
"key_reactant": "H2",
"molecular_weights": {
"H2": 0.002,
"H2O": 0.018,
"O2": 0.032
},
"stoichiometry": {
"H2": -2,
"H2O": 2,
"O2": -1
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
reaction_extent |
number | mol/s | Reaction extent |
component_molar_flows |
object | mol/s | Component molar flows |
component_mass_flows |
object | kg/s | Component mass flows |
mass_flow |
number | kg/s | Mass flow |
composition |
object | mass_fraction | Composition |
mass_balance_residual |
number | kg/s | Mass balance residual |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.balance.
Example assumptions: 단일 반응의 지정 전환율 모델; 화학양론 계수는 반응물 음수·생성물 양수; 반응속도·평형·열수지는 별도
05. thermal.duty — 현열·잠열 부하
Purpose / operating model: 제공된 평균 비열·잠열 기반; 양의 부하는 열 투입
Equations / algorithm: Q=m*Cp*(Tout-Tin)+m*latent*fraction+additional
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Mass flow; mass_flow |
heat_capacity |
yes | quantity {value, unit} or SI number | J/(kg*K) | Heat capacity; heat_capacity |
inlet_temperature |
yes | quantity {value, unit} or SI number | K | Inlet temperature; temperature |
outlet_temperature |
yes | quantity {value, unit} or SI number | K | Outlet temperature; temperature |
latent_heat |
optional / conditional | quantity {value, unit} or SI number | J/kg | Latent heat; specific_energy |
phase_change_fraction |
optional / conditional | number | declared in object / not applicable | Phase change fraction |
additional_heat_duty |
optional / conditional | quantity {value, unit} or SI number | W | Additional heat duty; power |
Complete assumed input example:
{
"heat_capacity": {
"unit": "kJ/(kg*K)",
"value": 4.2
},
"inlet_temperature": {
"unit": "degC",
"value": 20
},
"mass_flow": {
"unit": "kg/s",
"value": 5
},
"outlet_temperature": {
"unit": "degC",
"value": 40
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
sensible_heat_duty |
number | W | Sensible heat duty |
latent_heat_duty |
number | W | Latent heat duty |
total_heat_duty |
number | W | Total heat duty |
heating_duty |
number | W | Heating duty |
cooling_duty |
integer | W | Cooling duty |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.thermal.
Example assumptions: 제공된 평균 비열 및 잠열 사용; 양의 열부하는 유체에 가하는 열; 반응열 등은 부호를 정의한 additional_heat_duty로 입력
06. thermal.circulation — 폐회로 순환계 열수지
Purpose / operating model: 일정 물성 액체 폐회로, 축동력 전량 소산·모터손실 외기 방출의 등가 모델
Equations / algorithm: Qcool=Qheat+Pshaft; Tcool_in=Theated+Pshaft/(m*Cp); Qheat+Pelectric=Qcool+Qmotor
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Mass flow; mass_flow |
heat_capacity |
yes | quantity {value, unit} or SI number | J/(kg*K) | Heat capacity; heat_capacity |
return_temperature |
yes | quantity {value, unit} or SI number | K | Return temperature; temperature |
heated_temperature |
yes | quantity {value, unit} or SI number | K | Heated temperature; temperature |
pump_shaft_power |
yes | quantity {value, unit} or SI number | W | Pump shaft power; power |
hot_water_mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Hot water mass flow; mass_flow |
hot_water_heat_capacity |
yes | quantity {value, unit} or SI number | J/(kg*K) | Hot water heat capacity; heat_capacity |
hot_water_inlet_temperature |
yes | quantity {value, unit} or SI number | K | Hot water inlet temperature; temperature |
cooling_water_heat_capacity |
yes | quantity {value, unit} or SI number | J/(kg*K) | Cooling water heat capacity; heat_capacity |
cooling_water_inlet_temperature |
yes | quantity {value, unit} or SI number | K | Cooling water inlet temperature; temperature |
cooling_water_outlet_temperature |
yes | quantity {value, unit} or SI number | K | Cooling water outlet temperature; temperature |
steam_condensing_temperature |
yes | quantity {value, unit} or SI number | K | Steam condensing temperature; temperature |
assumption_source |
yes | string | declared in object / not applicable | Assumption source |
pump_electric_power |
optional / conditional | quantity {value, unit} or SI number | W | Pump electric power; power |
Complete assumed input example:
{
"assumption_source": "설명용 가정값; 실측 물성·업체 견적 아님",
"cooling_water_heat_capacity": 4200,
"cooling_water_inlet_temperature": {
"unit": "degC",
"value": 10
},
"cooling_water_outlet_temperature": {
"unit": "degC",
"value": 15
},
"heat_capacity": 4200,
"heated_temperature": {
"unit": "degC",
"value": 40
},
"hot_water_heat_capacity": 4200,
"hot_water_inlet_temperature": {
"unit": "degC",
"value": 90
},
"hot_water_mass_flow": 10,
"mass_flow": 10,
"pump_electric_power": 1200,
"pump_shaft_power": 1000,
"return_temperature": 293.15,
"steam_condensing_temperature": {
"unit": "degC",
"value": 120
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
heating_duty |
number | W | Heating duty |
cooling_duty |
number | W | Cooling duty |
pump_heat_to_loop |
number | W | Pump heat to loop |
motor_heat_to_ambient |
number | W | Motor heat to ambient |
cooler_inlet_temperature |
number | K | Cooler inlet temperature |
return_temperature |
number | K | Return temperature |
hot_water_outlet_temperature |
number | K | Hot water outlet temperature |
cooling_water_mass_flow |
number | kg/s | Cooling water mass flow |
cooling_water_temperature_rise |
number | delta_K | Cooling water temperature rise |
loop_energy_residual |
number | W | Loop energy residual |
total_energy_residual |
number | W | Total energy residual |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.thermal.
Example assumptions: 가정 출처: 설명용 가정값; 실측 물성·업체 견적 아님; 일정 비열·정상상태·비압축성 액체; 순환 질량 유출입 없음; 펌프 축동력 전부가 펌프 내부·배관·조절밸브에서 유체 열로 소산; 모터 손실은 외기로 방출; 기계적 소산을 가열기 이후 냉각기 이전에 집중시킨 등가 모델; cooler_inlet_temperature는 혼합된 열적 등가 온도; 배관 외부 열손실 0; 열교환기 압력손실은 사용자 입력 배관 등가 저항에 포함; 스팀은 별도 2차 온수 공급기를 가열; 냉각수는 외부 공급, 공급원 냉동기·펌프 동력은 경계 밖
07. hydraulics.pipe — 배관 압력손실
Purpose / operating model: volume_flow/mass_flow 중 하나 필수; 정상 단상 비압축성 Newtonian 유체; 천이영역 제외
Equations / algorithm: Darcy-Weisbach; Colebrook; laminar f=64/Re
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
density |
yes | quantity {value, unit} or SI number | kg/m3 | Density; density |
viscosity |
yes | quantity {value, unit} or SI number | Pa*s | Viscosity; viscosity |
internal_diameter |
yes | quantity {value, unit} or SI number | m | Internal diameter; length |
length |
yes | quantity {value, unit} or SI number | m | Length; length |
volume_flow |
optional / conditional | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
mass_flow |
optional / conditional | quantity {value, unit} or SI number | kg/s | Mass flow; mass_flow |
roughness |
optional / conditional | quantity {value, unit} or SI number | m | Roughness; length |
minor_loss_coefficient |
optional / conditional | number | declared in object / not applicable | Minor loss coefficient |
fittings |
optional / conditional | array | declared in object / not applicable | Fittings |
max_velocity |
optional / conditional | quantity {value, unit} or SI number | m/s | Max velocity; velocity |
max_pressure_drop |
optional / conditional | quantity {value, unit} or SI number | Pa | Max pressure drop; pressure_difference |
Complete assumed input example:
{
"density": {
"unit": "kg/m3",
"value": 1000
},
"fittings": [
{
"count": 4,
"k": 0.9,
"name": "사용자 지정 엘보"
},
{
"count": 2,
"k": 0.2,
"name": "사용자 지정 밸브"
}
],
"internal_diameter": {
"unit": "mm",
"value": 100
},
"length": {
"unit": "m",
"value": 100
},
"max_velocity": {
"unit": "m/s",
"value": 3
},
"roughness": {
"unit": "mm",
"value": 0.045
},
"viscosity": {
"unit": "cP",
"value": 1
},
"volume_flow": {
"unit": "m3/h",
"value": 36
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
volume_flow |
number | m3/s | Volume flow |
mass_flow |
number | kg/s | Mass flow |
velocity |
number | m/s | Velocity |
reynolds |
number | 1 | Reynolds |
darcy_friction_factor |
number | 1 | Darcy friction factor |
flow_regime |
string | nested structure / not applicable | Flow regime |
total_minor_loss_coefficient |
number | 1 | Total minor loss coefficient |
friction_pressure_drop |
number | Pa | Friction pressure drop |
minor_pressure_drop |
number | Pa | Minor pressure drop |
total_pressure_drop |
number | Pa | Total pressure drop |
head_loss |
number | m | Head loss |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.hydraulics.
Example assumptions: 정상상태 단상 비압축성 Newtonian 유체; Darcy 마찰계수 사용; Fanning 계수와 구분; 관경은 실제 내경; 정수두·경계 압력차는 펌프 모듈에서 별도 계산
08. pump.size — 펌프 양정·동력
Purpose / operating model: 지정 효율의 예비 선정; NPSH는 흡입 플랜지 정압 기준
Equations / algorithm: H=deltaP/(rho*g)+deltaZ+loss/(rho*g); P=rho*g*Q*H/efficiency
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
density |
yes | quantity {value, unit} or SI number | kg/m3 | Density; density |
source_pressure |
yes | quantity {value, unit} or SI number | Pa | Source pressure; pressure |
destination_pressure |
yes | quantity {value, unit} or SI number | Pa | Destination pressure; pressure |
pump_efficiency |
yes | object | 1 | Pump efficiency; fraction, 0–1 unless a stricter method condition applies |
elevation_difference |
optional / conditional | quantity {value, unit} or SI number | m | Elevation difference; length |
pressure_losses |
optional / conditional | quantity {value, unit} or SI number | Pa | Pressure losses; pressure_difference |
motor_efficiency |
optional / conditional | number | 1 | Motor efficiency; fraction, 0–1 unless a stricter method condition applies |
head_margin_fraction |
optional / conditional | number | declared in object / not applicable | Head margin fraction |
suction_absolute_pressure |
optional / conditional | quantity {value, unit} or SI number | Pa | Suction absolute pressure; pressure |
vapor_pressure |
optional / conditional | quantity {value, unit} or SI number | Pa | Vapor pressure; pressure |
suction_velocity |
optional / conditional | quantity {value, unit} or SI number | m/s | Suction velocity; velocity |
npsh_required |
optional / conditional | quantity {value, unit} or SI number | m | Npsh required; length |
npsh_margin |
optional / conditional | quantity {value, unit} or SI number | m | Npsh margin; length |
Complete assumed input example:
{
"density": {
"unit": "kg/m3",
"value": 1000
},
"destination_pressure": {
"unit": "bar",
"value": 3
},
"elevation_difference": {
"unit": "m",
"value": 8
},
"head_margin_fraction": 0.1,
"motor_efficiency": 0.9,
"pressure_losses": {
"unit": "kPa",
"value": 30
},
"pump_efficiency": {
"unit": "%",
"value": 72
},
"source_pressure": {
"unit": "bar",
"value": 1
},
"volume_flow": {
"unit": "m3/h",
"value": 36
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
system_head |
number | m | System head |
design_head |
number | m | Design head |
hydraulic_power |
number | W | Hydraulic power |
shaft_power |
number | W | Shaft power |
electric_power |
number | W | Electric power |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.hydraulics.
Example assumptions: 경계의 속도수두 차이는 무시; elevation_difference는 목적지 액면 높이 - 출발지 액면 높이; NPSH용 suction_absolute_pressure는 펌프 흡입 플랜지의 정압; 효율·NPSH required는 사용자 또는 제조사 제공값
09. tank.size — 수직 원통 탱크 용량
Purpose / operating model: 직접 요구체적 또는 유량*저장시간 입력; 원통부 용량
Equations / algorithm: Vgross=(Vliquid+Vdead)/working_fraction; V=pi*D^2*H/4
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
working_fraction |
yes | number | 1 | Working fraction; fraction, 0–1 unless a stricter method condition applies |
required_liquid_volume |
optional / conditional | quantity {value, unit} or SI number | m3 | Required liquid volume; volume |
volume_flow |
optional / conditional | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
storage_time |
optional / conditional | quantity {value, unit} or SI number | s | Storage time; time |
dead_volume |
optional / conditional | quantity {value, unit} or SI number | m3 | Dead volume; volume |
tank_count |
optional / conditional | integer | declared in object / not applicable | Tank count |
height_to_diameter_ratio |
optional / conditional | number | declared in object / not applicable | Height to diameter ratio |
Complete assumed input example:
{
"height_to_diameter_ratio": 1.2,
"storage_time": {
"unit": "h",
"value": 2
},
"tank_count": 1,
"volume_flow": {
"unit": "m3/h",
"value": 36
},
"working_fraction": 0.8
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
required_liquid_volume |
number | m3 | Required liquid volume |
total_gross_volume |
number | m3 | Total gross volume |
per_tank_gross_volume |
number | m3 | Per tank gross volume |
tank_count |
integer | 1 | Tank count |
internal_diameter |
number | m | Internal diameter |
cylindrical_height |
number | m | Cylindrical height |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.storage.
Example assumptions: 동일 크기의 수직 원통형 탱크; 헤드 형상·노즐·내부구조·기계설계는 별도; dead_volume은 전체 탱크군의 추가 사공간 요구량
10. thermal.exchanger — 열교환기 LMTD 기본설계
Purpose / operating model: 지정 열부하·온도·유효 U 사용; 단상 기본설계
Equations / algorithm: Q=U*A*F*LMTD
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
heat_duty |
yes | quantity {value, unit} or SI number | W | Heat duty; power |
hot_inlet_temperature |
yes | quantity {value, unit} or SI number | K | Hot inlet temperature; temperature |
hot_outlet_temperature |
yes | quantity {value, unit} or SI number | K | Hot outlet temperature; temperature |
cold_inlet_temperature |
yes | quantity {value, unit} or SI number | K | Cold inlet temperature; temperature |
cold_outlet_temperature |
yes | quantity {value, unit} or SI number | K | Cold outlet temperature; temperature |
overall_coefficient |
yes | quantity {value, unit} or SI number | W/(m2*K) | Overall coefficient; heat_transfer_coefficient |
flow_arrangement |
optional / conditional | string | declared in object / not applicable | Flow arrangement; choices: ('countercurrent', 'parallel') |
correction_factor |
optional / conditional | number | 1 | Correction factor; fraction, 0–1 unless a stricter method condition applies |
area_margin_fraction |
optional / conditional | number | declared in object / not applicable | Area margin fraction |
installed_area |
optional / conditional | quantity {value, unit} or SI number | m2 | Installed area; area |
Complete assumed input example:
{
"area_margin_fraction": 0.1,
"cold_inlet_temperature": {
"unit": "degC",
"value": 20
},
"cold_outlet_temperature": {
"unit": "degC",
"value": 40
},
"correction_factor": 0.9,
"flow_arrangement": "countercurrent",
"heat_duty": {
"unit": "kW",
"value": 420
},
"hot_inlet_temperature": {
"unit": "degC",
"value": 90
},
"hot_outlet_temperature": {
"unit": "degC",
"value": 60
},
"overall_coefficient": {
"unit": "W/(m2*K)",
"value": 500
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
heat_duty |
number | W | Heat duty |
terminal_temperature_difference_1 |
number | delta_K | Terminal temperature difference 1 |
terminal_temperature_difference_2 |
number | delta_K | Terminal temperature difference 2 |
lmtd |
number | delta_K | Lmtd |
corrected_lmtd |
number | delta_K | Corrected lmtd |
required_area |
number | m2 | Required area |
design_area |
number | m2 | Design area |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.thermal.
Example assumptions: 지정된 유효 총괄전열계수 U 사용; 입출구 온도 및 열부하는 외부 물질·열수지에서 결정; 기하구조·진동·튜브/쉘 압력손실은 현재 계산범위에 포함하지 않음; installed_area 평가는 지정 온도조건에서 수행
11. utilities.demand — 유틸리티 소요량
Purpose / operating model: 가열부하가 있으면 스팀 엔탈피 차이, 냉각부하가 있으면 냉각수 비열·온도상승 필수
Equations / algorithm: steam=Q/delta_h; cooling_water=Q/(Cp*deltaT)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
annual_operating_hours |
yes | integer | declared in object / not applicable | Annual operating hours |
heating_duty |
optional / conditional | quantity {value, unit} or SI number | W | Heating duty; power |
cooling_duty |
optional / conditional | quantity {value, unit} or SI number | W | Cooling duty; power |
electric_power |
optional / conditional | quantity {value, unit} or SI number | W | Electric power; power |
steam_specific_energy |
optional / conditional | quantity {value, unit} or SI number | J/kg | Steam specific energy; specific_energy |
cooling_water_heat_capacity |
optional / conditional | quantity {value, unit} or SI number | J/(kg*K) | Cooling water heat capacity; heat_capacity |
cooling_water_temperature_rise |
optional / conditional | quantity {value, unit} or SI number | delta_K | Cooling water temperature rise; temperature_difference |
Complete assumed input example:
{
"annual_operating_hours": 1,
"heating_duty": {
"unit": "W",
"value": 5000.0
},
"steam_specific_energy": 1000
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
steam_mass_flow |
number | kg/s | Steam mass flow |
cooling_water_mass_flow |
number | kg/s | Cooling water mass flow |
annual_steam_mass |
number | kg | Annual steam mass |
annual_cooling_water_mass |
number | kg | Annual cooling water mass |
annual_electricity |
number | kWh | Annual electricity |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.thermal.
Example assumptions: steam_specific_energy는 공급 스팀과 회수 응축수의 유효 엔탈피 차이; 연간 사용량은 지정 부하가 운전시간 동안 일정하다고 가정
12. cost.equipment — 장치 구매비·보정
Purpose / operating model: 사용자 제공 기준비용·지수; 통화 변경은 환율 필수, 날짜 변경은 비용지수 필수
Equations / algorithm: C=Cref*(S/Sref)^n*material*pressure*location*(I/Iref)*fx
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
capacity_dimension |
yes | string | declared in object / not applicable | Capacity dimension; choices: ('area', 'volume', 'power', 'mass_flow', 'volume_flow', 'mass', 'length') |
capacity |
yes | quantity {value, unit} or SI number | m2 | Capacity |
reference_capacity |
yes | quantity {value, unit} or SI number | m2 | Reference capacity |
base_cost |
yes | integer | USD | Base cost |
scaling_exponent |
yes | number | declared in object / not applicable | Scaling exponent |
base_currency |
yes | string | declared in object / not applicable | Base currency |
basis_date |
yes | string | declared in object / not applicable | Basis date |
target_date |
yes | string | declared in object / not applicable | Target date |
basis_note |
yes | string | declared in object / not applicable | Basis note |
target_currency |
optional / conditional | string | declared in object / not applicable | Target currency |
material_factor |
optional / conditional | number | declared in object / not applicable | Material factor |
pressure_factor |
optional / conditional | number | declared in object / not applicable | Pressure factor |
location_factor |
optional / conditional | number | declared in object / not applicable | Location factor |
quantity |
optional / conditional | integer | declared in object / not applicable | Quantity |
base_index |
optional / conditional | number | declared in object / not applicable | Base index |
target_index |
optional / conditional | number | declared in object / not applicable | Target index |
exchange_rate |
optional / conditional | number | declared in object / not applicable | Exchange rate |
minimum_capacity |
optional / conditional | quantity {value, unit} or SI number | declared in object / not applicable | Minimum capacity |
maximum_capacity |
optional / conditional | quantity {value, unit} or SI number | declared in object / not applicable | Maximum capacity |
allow_extrapolation |
optional / conditional | boolean | declared in object / not applicable | Allow extrapolation |
Complete assumed input example:
{
"base_cost": 100,
"base_currency": "USD",
"basis_date": "2026-11-04",
"basis_note": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"capacity": {
"unit": "m2",
"value": 0.13862943611198905
},
"capacity_dimension": "area",
"reference_capacity": 10,
"scaling_exponent": 0.5,
"target_date": "2026-11-04"
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
scaled_base_cost |
number | USD | Scaled base cost |
index_factor |
integer | 1 | Index factor |
corrected_unit_cost |
number | USD | Corrected unit cost |
total_purchase_cost |
number | USD | Total purchase cost |
currency |
string | nested structure / not applicable | Currency |
basis_date |
string | nested structure / not applicable | Basis date |
target_date |
string | nested structure / not applicable | Target date |
basis_note |
string | nested structure / not applicable | Basis note |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.costs.
Example assumptions: 사용자가 제공한 기준비용·용량지수·보정계수 사용; 환율은 기준통화 1단위당 목표통화; 용량 지수를 0.6으로 자동 가정하지 않음; 계산식의 문헌 출처와 기준 견적의 출처는 별도 관리
13. cost.capex — 설치비·총투자비
Purpose / operating model: 설치계수에 구매비 포함; 간접비·OSBL·예비비 별도 집계
Equations / algorithm: TCI=fixed_capital+working_capital+land
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
currency |
yes | string | declared in object / not applicable | Currency |
basis_date |
yes | string | declared in object / not applicable | Basis date |
purchased_equipment |
yes | array | declared in object / not applicable | Purchased equipment |
installation_factor |
yes | integer | declared in object / not applicable | Installation factor |
indirect_fraction |
optional / conditional | number | declared in object / not applicable | Indirect fraction |
contingency_fraction |
optional / conditional | number | declared in object / not applicable | Contingency fraction |
offsite_cost |
optional / conditional | integer | USD | Offsite cost |
working_capital |
optional / conditional | integer | USD | Working capital |
land_cost |
optional / conditional | number | USD | Land cost |
Complete assumed input example:
{
"basis_date": "2026-11-04",
"contingency_fraction": 0.2,
"currency": "USD",
"indirect_fraction": 0.1,
"installation_factor": 2,
"offsite_cost": 50,
"purchased_equipment": [
{
"cost": {
"unit": "USD",
"value": 11.774100225154749
},
"name": "가상 응축기"
}
],
"working_capital": 30
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
purchased_equipment_cost |
number | USD | Purchased equipment cost |
installed_isbl_cost |
number | USD | Installed isbl cost |
offsite_cost |
number | USD | Offsite cost |
total_direct_cost |
number | USD | Total direct cost |
indirect_cost |
number | USD | Indirect cost |
contingency |
number | USD | Contingency |
fixed_capital |
number | USD | Fixed capital |
working_capital |
number | USD | Working capital |
land_cost |
number | USD | Land cost |
total_capital |
number | USD | Total capital |
currency |
string | nested structure / not applicable | Currency |
basis_date |
string | nested structure / not applicable | Basis date |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.costs.
Example assumptions: 설치계수는 ISBL 구매비를 포함하며 OSBL·간접비·예비비는 포함하지 않음; 간접비는 ISBL 설치비 + OSBL 비용 기준; 예비비는 직접비 + 간접비 기준; 토지비·운전자본은 고정자본과 별도로 합산; 입력 구매비는 동일 기준일로 보정된 값
14. cost.opex — 운영비·단위 제조원가
Purpose / operating model: items=[{name,category,annual_quantity,quantity_unit,unit_price,currency?}]
Equations / algorithm: annual_cost=sum(quantity*unit_price)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
currency |
yes | string | declared in object / not applicable | Currency |
basis_date |
yes | string | declared in object / not applicable | Basis date |
annual_production |
yes | number | declared in object / not applicable | Annual production |
production_unit |
yes | string | declared in object / not applicable | Production unit |
items |
yes | array | declared in object / not applicable | Items |
Complete assumed input example:
{
"annual_production": 200.0,
"basis_date": "2026-11-04",
"currency": "USD",
"items": [
{
"annual_quantity": 18000.0,
"category": "utility",
"name": "가상 유틸리티 단가",
"quantity_unit": "kg",
"unit_price": 0.01
}
],
"production_unit": "kg"
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
items |
array | nested structure / not applicable | Items |
cost_by_category |
object | USD/year | Cost by category |
annual_operating_cost |
number | USD/year | Annual operating cost |
unit_production_cost |
number | USD/kg | Unit production cost |
currency |
string | nested structure / not applicable | Currency |
basis_date |
string | nested structure / not applicable | Basis date |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.costs.
Example assumptions: annual_quantity와 unit_price는 동일 quantity_unit 기준; 고정 연간 비용은 annual_quantity=1, quantity_unit=year로 입력; 감가상각·금융비용·세금은 현재 OPEX 집계에 자동 포함하지 않음
15. phase.flash — 지정 K값 기액 플래시
Purpose / operating model: Rachford-Rice·2상/단일상 판정; K≈1에서는 기화율 미결정 반환
Equations / algorithm: sum(z_i*(K_i-1)/(1+beta*(K_i-1)))=0
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
feed_molar_flow |
yes | quantity {value, unit} or SI number | mol/s | Feed molar flow; molar_flow |
temperature |
yes | quantity {value, unit} or SI number | K | Temperature; temperature |
pressure |
yes | quantity {value, unit} or SI number | Pa | Pressure; pressure |
composition |
yes | object | declared in object / not applicable | Composition |
k_values |
yes | object | declared in object / not applicable | K values |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
Complete assumed input example:
{
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"composition": {
"A": 0.5,
"B": 0.5
},
"feed_molar_flow": 100,
"k_values": {
"A": 2,
"B": 0.5
},
"pressure": 100000,
"temperature": 300
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
phase |
string | nested structure / not applicable | Phase |
vapor_fraction |
number | 1 | Vapor fraction |
vapor_molar_flow |
number | mol/s | Vapor molar flow |
liquid_molar_flow |
number | mol/s | Liquid molar flow |
liquid_composition |
object | mole_fraction | Liquid composition |
vapor_composition |
object | mole_fraction | Vapor composition |
component_balance_residuals |
object | mol/s | Component balance residuals |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.phase2.
Example assumptions: 지정 온도·압력에서 제공된 K값 사용; 자체 물성 예측 없음; Rachford-Rice 이분법; 단일상에서는 존재하지 않는 상의 조성은 null
16. batch.capacity — 배치 사이클·생산능력
Purpose / operating model: 독립 병렬 용기·순차 레시피·완성 배치 기준
Equations / algorithm: cycle=sum(step times); annual=mass_per_batch*floor(available_time/cycle)*vessels
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
batch_product_mass |
yes | quantity {value, unit} or SI number | kg | Batch product mass; mass |
annual_operating_hours |
yes | integer | declared in object / not applicable | Annual operating hours |
steps |
yes | array | declared in object / not applicable | Steps |
availability |
optional / conditional | number | 1 | Availability; fraction, 0–1 unless a stricter method condition applies |
parallel_vessels |
optional / conditional | integer | declared in object / not applicable | Parallel vessels |
target_annual_mass |
optional / conditional | quantity {value, unit} or SI number | kg | Target annual mass; mass |
Complete assumed input example:
{
"annual_operating_hours": 10,
"batch_product_mass": 10,
"parallel_vessels": 2,
"steps": [
{
"duration": {
"unit": "h",
"value": 0.25
},
"name": "fill"
},
{
"duration": {
"unit": "h",
"value": 0.75
},
"name": "process"
}
],
"target_annual_mass": 200
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
cycle_time |
number | s | Cycle time |
completed_batches_per_vessel |
integer | 1 | Completed batches per vessel |
completed_batches |
integer | 1 | Completed batches |
annual_product_mass |
number | kg | Annual product mass |
longest_step |
string | nested structure / not applicable | Longest step |
required_parallel_vessels |
integer | 1 | Required parallel vessels |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.phase2.
Example assumptions: 같은 용기에서 모든 단계를 순차 수행; 동일 레시피의 독립 병렬 용기; 용기 간 공유 자원·세척 간섭 없음; 연간 운전시간에 availability를 적용한 뒤 완성 배치만 산정
17. gas.compressor — 이상기체 다단 압축기
Purpose / operating model: 일정 cp·gamma, 동일 단별 압력비, 완전 중간냉각 선택
Equations / algorithm: dT=T*((P2/P1)^((gamma-1)/gamma)-1)/eta; P=m*cp*dT
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Mass flow; mass_flow |
inlet_temperature |
yes | quantity {value, unit} or SI number | K | Inlet temperature; temperature |
inlet_pressure |
yes | quantity {value, unit} or SI number | Pa | Inlet pressure; pressure |
outlet_pressure |
yes | quantity {value, unit} or SI number | Pa | Outlet pressure; pressure |
heat_capacity |
yes | quantity {value, unit} or SI number | J/(kg*K) | Heat capacity; heat_capacity |
heat_capacity_ratio |
yes | integer | declared in object / not applicable | Heat capacity ratio |
isentropic_efficiency |
yes | number | 1 | Isentropic efficiency; fraction, 0–1 unless a stricter method condition applies |
motor_efficiency |
optional / conditional | number | 1 | Motor efficiency; fraction, 0–1 unless a stricter method condition applies |
stages |
optional / conditional | integer | declared in object / not applicable | Stages |
perfect_intercooling |
optional / conditional | boolean | declared in object / not applicable | Perfect intercooling |
maximum_outlet_temperature |
optional / conditional | quantity {value, unit} or SI number | K | Maximum outlet temperature; temperature |
Complete assumed input example:
{
"heat_capacity": 1000,
"heat_capacity_ratio": 2,
"inlet_pressure": 100000,
"inlet_temperature": 300,
"isentropic_efficiency": 0.5,
"mass_flow": 1,
"outlet_pressure": 400000
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
shaft_power |
number | W | Shaft power |
electric_power |
number | W | Electric power |
outlet_temperature |
number | K | Outlet temperature |
stage_pressure_ratio |
number | 1 | Stage pressure ratio |
stages |
array | nested structure / not applicable | Stages |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.equipment2.
Example assumptions: 이상기체·일정 비열·비열비; 동일 단별 압력비·효율; 단간 압력손실 없음; 완전 중간냉각 선택 시 각 단 입구를 최초 온도로 복귀
18. gas.blower — 저압 송풍기
Purpose / operating model: ΔP/P<=0.1, 입구 실제 체적유량
Equations / algorithm: P=Q*dP/eta
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
inlet_pressure |
yes | quantity {value, unit} or SI number | Pa | Inlet pressure; pressure |
pressure_rise |
yes | quantity {value, unit} or SI number | Pa | Pressure rise; pressure_difference |
efficiency |
yes | number | 1 | Efficiency; fraction, 0–1 unless a stricter method condition applies |
Complete assumed input example:
{
"efficiency": 0.5,
"inlet_pressure": 100000,
"pressure_rise": 10000,
"volume_flow": 1
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
fluid_power |
number | W | Fluid power |
shaft_power |
number | W | Shaft power |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.equipment2.
Example assumptions: 입구 실제 체적유량; 압축성 효과를 무시하는 저압 근사
19. valve.liquid — 비초크 액체 조절밸브
Purpose / operating model: 난류·비초크·Fp=1; FL 제공, 플래싱/초크는 거부
Equations / algorithm: Kv=Q_m3h*sqrt(SG/dP_bar); FF=0.96-0.28*sqrt(Pv/Pc); dP_limit=FL^2*(P1-FF*Pv)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
density |
yes | quantity {value, unit} or SI number | kg/m3 | Density; density |
inlet_pressure |
yes | quantity {value, unit} or SI number | Pa | Inlet pressure; pressure |
outlet_pressure |
yes | quantity {value, unit} or SI number | Pa | Outlet pressure; pressure |
vapor_pressure |
yes | quantity {value, unit} or SI number | Pa | Vapor pressure; pressure |
critical_pressure |
yes | quantity {value, unit} or SI number | Pa | Critical pressure; pressure |
liquid_recovery_factor |
yes | integer | 1 | Liquid recovery factor; fraction, 0–1 unless a stricter method condition applies |
selected_kv |
optional / conditional | quantity {value, unit} or SI number | Kv | Selected kv; valve_capacity |
Complete assumed input example:
{
"critical_pressure": 10000000,
"density": 1000,
"inlet_pressure": 300000,
"liquid_recovery_factor": 1,
"outlet_pressure": 200000,
"vapor_pressure": 1000,
"volume_flow": {
"unit": "m3/h",
"value": 1
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
required_kv |
number | Kv | Required kv |
required_cv |
number | Cv | Required cv |
pressure_drop |
number | Pa | Pressure drop |
choked_pressure_drop_limit |
number | Pa | Choked pressure drop limit |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.equipment2.
Example assumptions: 난류·비플래싱·비초크 액체, 배관 보정계수 Fp=1; FL은 제공된 밸브 성능값; 캐비테이션 시작점·소음·점성 보정·최종 트림 선정은 별도
20. thermal.phase_change — 응축기·리보일러·증발기
Purpose / operating model: mass_flow 또는 molar_flow+molecular_weight; 상변화측 등온
Equations / algorithm: Q=m*latent*fraction+sensible; A=Q/(U*F*LMTD)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
mode |
yes | string | declared in object / not applicable | Mode; choices: ('condenser', 'reboiler', 'evaporator') |
latent_heat |
yes | quantity {value, unit} or SI number | J/kg | Latent heat; specific_energy |
saturation_temperature |
yes | quantity {value, unit} or SI number | K | Saturation temperature; temperature |
utility_inlet_temperature |
yes | quantity {value, unit} or SI number | K | Utility inlet temperature; temperature |
utility_outlet_temperature |
yes | quantity {value, unit} or SI number | K | Utility outlet temperature; temperature |
overall_coefficient |
yes | quantity {value, unit} or SI number | W/(m2*K) | Overall coefficient; heat_transfer_coefficient |
mass_flow |
optional / conditional | quantity {value, unit} or SI number | kg/s | Mass flow; mass_flow |
molar_flow |
optional / conditional | quantity {value, unit} or SI number | mol/s | Molar flow; molar_flow |
molecular_weight |
optional / conditional | quantity {value, unit} or SI number | kg/mol | Molecular weight; molar_mass |
phase_change_fraction |
optional / conditional | number | 1 | Phase change fraction; fraction, 0–1 unless a stricter method condition applies |
correction_factor |
optional / conditional | number | 1 | Correction factor; fraction, 0–1 unless a stricter method condition applies |
area_margin_fraction |
optional / conditional | number | declared in object / not applicable | Area margin fraction |
additional_heat_duty |
optional / conditional | quantity {value, unit} or SI number | W | Additional heat duty; power |
utility_specific_energy |
optional / conditional | quantity {value, unit} or SI number | J/kg | Utility specific energy; specific_energy |
Complete assumed input example:
{
"latent_heat": 1000,
"mode": "condenser",
"molar_flow": {
"unit": "mol/s",
"value": 50.0
},
"molecular_weight": 0.02,
"overall_coefficient": 100,
"saturation_temperature": 400,
"utility_inlet_temperature": 300,
"utility_outlet_temperature": 350
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
mass_flow |
number | kg/s | Mass flow |
heat_duty |
number | W | Heat duty |
lmtd |
number | delta_K | Lmtd |
required_area |
number | m2 | Required area |
design_area |
number | m2 | Design area |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.phase2.
Example assumptions: 상변화 유체는 지정 포화온도에서 등온; 제공된 잠열·유효 U 사용; 상세 2상 압력손실·혼합물 온도활주는 별도
21. mixing.power — 교반 동력·토크
Purpose / operating model: 단일 임펠러, Re<=10 또는 Re>=10000; 제공된 계수
Equations / algorithm: Re=rho*N*D^2/mu; P=Np*rho*N^3*D^5
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
density |
yes | quantity {value, unit} or SI number | kg/m3 | Density; density |
viscosity |
yes | quantity {value, unit} or SI number | Pa*s | Viscosity; viscosity |
rotation_frequency |
yes | quantity {value, unit} or SI number | Hz | Rotation frequency; frequency |
impeller_diameter |
yes | quantity {value, unit} or SI number | m | Impeller diameter; length |
tank_diameter |
yes | quantity {value, unit} or SI number | m | Tank diameter; length |
regime |
yes | string | declared in object / not applicable | Regime; choices: ('laminar', 'turbulent') |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
drive_efficiency |
optional / conditional | number | 1 | Drive efficiency; fraction, 0–1 unless a stricter method condition applies |
power_number |
optional / conditional | integer | declared in object / not applicable | Power number |
laminar_constant |
optional / conditional | number | declared in object / not applicable | Laminar constant |
Complete assumed input example:
{
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"density": 1000,
"impeller_diameter": 1,
"power_number": 5,
"regime": "turbulent",
"rotation_frequency": 2,
"tank_diameter": 2,
"viscosity": 0.001
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
impeller_reynolds |
number | 1 | Impeller reynolds |
power_number |
number | 1 | Power number |
mixing_power |
number | W | Mixing power |
drive_power |
number | W | Drive power |
torque |
number | N*m | Torque |
tip_speed |
number | m/s | Tip speed |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.equipment2.
Example assumptions: 제공된 형상·매질의 Np 또는 층류 상수 사용; 층류 Re<=10 / 난류 Re>=10000, 천이영역 제외; 임펠러 1개·비기포 유체
22. distillation.binary — 이성분 증류 단수·환류비
Purpose / operating model: 이상계·일정 상대휘발도·포화액 feed(q=1), McCabe-Thiele 단수
Equations / algorithm: Fenske Nmin; McCabe-Thiele equilibrium and operating lines
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
feed_molar_flow |
yes | quantity {value, unit} or SI number | mol/s | Feed molar flow; molar_flow |
feed_light_fraction |
yes | number | 1 | Feed light fraction; fraction, 0–1 unless a stricter method condition applies |
distillate_light_fraction |
yes | number | 1 | Distillate light fraction; fraction, 0–1 unless a stricter method condition applies |
bottoms_light_fraction |
yes | number | 1 | Bottoms light fraction; fraction, 0–1 unless a stricter method condition applies |
relative_volatility |
yes | integer | declared in object / not applicable | Relative volatility |
reflux_ratio |
yes | integer | declared in object / not applicable | Reflux ratio |
equilibrium_source |
yes | string | declared in object / not applicable | Equilibrium source |
Complete assumed input example:
{
"bottoms_light_fraction": 0.2,
"distillate_light_fraction": 0.8,
"equilibrium_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"feed_light_fraction": 0.5,
"feed_molar_flow": 100,
"reflux_ratio": 3,
"relative_volatility": 2
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
minimum_stages |
number | 1 | Minimum stages |
minimum_reflux_ratio |
number | 1 | Minimum reflux ratio |
theoretical_stages |
integer | 1 | Theoretical stages |
feed_stage |
integer | 1 | Feed stage |
distillate_molar_flow |
number | mol/s | Distillate molar flow |
bottoms_molar_flow |
number | mol/s | Bottoms molar flow |
stage_profile |
array | nested structure / not applicable | Stage profile |
light_component_balance_residual |
number | mol/s | Light component balance residual |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.separation2.
Example assumptions: 2성분·일정 상대휘발도·포화액 공급(q=1)·일정 몰유량; Fenske 최소단수; McCabe-Thiele 평형/운전선 계단법; 이론단수는 리보일러 포함·전응축기 제외, 마지막 부분단은 1단으로 올림; 공비·비이상계·트레이 효율은 별도
23. column.hydraulics — 트레이·충전탑 예비 수력학
Purpose / operating model: 제공된 용량계수·압력손실 성능자료; 상세 내부구조 검토는 별도
Equations / algorithm: u_flood=C*sqrt((rhoL-rhoV)/rhoV); A=Q/u_design
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
kind |
yes | string | declared in object / not applicable | Kind; choices: ('tray', 'packed') |
gas_volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Gas volume flow; volume_flow |
gas_density |
yes | quantity {value, unit} or SI number | kg/m3 | Gas density; density |
liquid_density |
yes | quantity {value, unit} or SI number | kg/m3 | Liquid density; density |
capacity_factor |
yes | quantity {value, unit} or SI number | m/s | Capacity factor; velocity |
fraction_of_flooding |
yes | number | 1 | Fraction of flooding; fraction, 0–1 unless a stricter method condition applies |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
actual_trays |
optional / conditional | integer | declared in object / not applicable | Actual trays |
tray_spacing |
optional / conditional | quantity {value, unit} or SI number | m | Tray spacing; length |
pressure_drop_per_tray |
optional / conditional | quantity {value, unit} or SI number | Pa | Pressure drop per tray; pressure_difference |
packed_height |
optional / conditional | quantity {value, unit} or SI number | m | Packed height; length |
pressure_drop_per_height |
optional / conditional | quantity {value, unit} or SI number | Pa/m | Pressure drop per height; pressure_gradient |
additional_height |
optional / conditional | quantity {value, unit} or SI number | m | Additional height; length |
Complete assumed input example:
{
"additional_height": 1,
"capacity_factor": 0.1,
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"fraction_of_flooding": 0.5,
"gas_density": 1,
"gas_volume_flow": 1,
"kind": "packed",
"liquid_density": 101,
"packed_height": {
"unit": "m",
"value": 1.3862943611198906
},
"pressure_drop_per_height": 100
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
flooding_velocity |
number | m/s | Flooding velocity |
design_velocity |
number | m/s | Design velocity |
cross_sectional_area |
number | m2 | Cross sectional area |
internal_diameter |
number | m | Internal diameter |
active_height |
number | m | Active height |
total_height |
number | m | Total height |
pressure_drop |
number | Pa | Pressure drop |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.separation2.
Example assumptions: 업체/실험 기반 Souders-Brown 용량계수와 압력손실 계수 사용; 유효 단면적 기준, 상세 다운커머·위핑·분배기 설계는 별도
24. separation.stages — 흡수·스트리핑·추출 평형단
Purpose / operating model: Kremser, 선형 평형·신선 상대상·희석 용질<=0.1
Equations / algorithm: remaining=(A-1)/(A^(N+1)-1); at A=1: 1/(N+1)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
mode |
yes | string | declared in object / not applicable | Mode; choices: ('absorption', 'stripping', 'extraction') |
feed_carrier_flow |
yes | quantity {value, unit} or SI number | mol/s | Feed carrier flow; molar_flow |
solvent_carrier_flow |
yes | quantity {value, unit} or SI number | mol/s | Solvent carrier flow; molar_flow |
equilibrium_slope |
yes | integer | declared in object / not applicable | Equilibrium slope |
equilibrium_stages |
yes | integer | declared in object / not applicable | Equilibrium stages |
inlet_solute_fraction |
yes | number | 1 | Inlet solute fraction; fraction, 0–1 unless a stricter method condition applies |
equilibrium_source |
yes | string | declared in object / not applicable | Equilibrium source |
Complete assumed input example:
{
"equilibrium_slope": 1,
"equilibrium_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"equilibrium_stages": 2,
"feed_carrier_flow": 1,
"inlet_solute_fraction": 0.09,
"mode": "absorption",
"solvent_carrier_flow": 2
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
separation_factor |
number | 1 | Separation factor |
remaining_fraction |
number | 1 | Remaining fraction |
removal_fraction |
number | 1 | Removal fraction |
outlet_solute_fraction |
number | mole_fraction | Outlet solute fraction |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.separation2.
Example assumptions: Kremser: 희석 용질·일정 carrier 몰유량·선형 평형·신선한 무용질 상대상; 흡수 m=y_gas/x_liquid; 스트리핑 m=y_gas/x_liquid; 추출 m=x_extract/x_raffinate; 흡수 A=L/(mV), 스트리핑 S=mV/L, 추출 E=mS/F
25. separation.packed_height — HTU/NTU 충전높이
Purpose / operating model: 선형 구동력 변화·제공된 총괄 HTU
Equations / algorithm: NTU=(y_in-y_out)/log_mean_driving_force; Z=HTU*NTU
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
inlet_solute_fraction |
yes | number | 1 | Inlet solute fraction; fraction, 0–1 unless a stricter method condition applies |
outlet_solute_fraction |
yes | number | 1 | Outlet solute fraction; fraction, 0–1 unless a stricter method condition applies |
htu |
yes | quantity {value, unit} or SI number | m | Htu; length |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
equilibrium_fraction_at_inlet |
optional / conditional | number | 1 | Equilibrium fraction at inlet; fraction, 0–1 unless a stricter method condition applies |
equilibrium_fraction_at_outlet |
optional / conditional | number | 1 | Equilibrium fraction at outlet; fraction, 0–1 unless a stricter method condition applies |
Complete assumed input example:
{
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"htu": 2,
"inlet_solute_fraction": 0.1,
"outlet_solute_fraction": 0.05
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
ntu |
number | 1 | Ntu |
packed_height |
number | m | Packed height |
log_mean_driving_force |
number | 1 | Log mean driving force |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.separation2.
Example assumptions: 선형 평형·운전선에서 구동력이 선형 변화; 제공된 총괄 HTU 사용, 일정 carrier 유량
26. solids.handling — 분체 저장·벨트 이송
Purpose / operating model: 벌크용량·수평/상향 벨트 예비 용량·동력
Equations / algorithm: V=m*t/(rho_bulk*fill); P=m*g*(lift+resistance*length)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Mass flow; mass_flow |
bulk_density |
yes | quantity {value, unit} or SI number | kg/m3 | Bulk density; density |
storage_time |
yes | quantity {value, unit} or SI number | s | Storage time; time |
working_fraction |
yes | number | 1 | Working fraction; fraction, 0–1 unless a stricter method condition applies |
belt_speed |
yes | quantity {value, unit} or SI number | m/s | Belt speed; velocity |
belt_loading_area |
yes | quantity {value, unit} or SI number | m2 | Belt loading area; area |
conveyor_length |
yes | quantity {value, unit} or SI number | m | Conveyor length; length |
effective_resistance |
yes | number | declared in object / not applicable | Effective resistance |
drive_efficiency |
yes | number | 1 | Drive efficiency; fraction, 0–1 unless a stricter method condition applies |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
conveyor_lift |
optional / conditional | quantity {value, unit} or SI number | m | Conveyor lift; length |
no_load_power |
optional / conditional | quantity {value, unit} or SI number | W | No load power; power |
Complete assumed input example:
{
"belt_loading_area": 0.01,
"belt_speed": 2,
"bulk_density": 100,
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"conveyor_length": 10,
"drive_efficiency": 0.5,
"effective_resistance": 0.1,
"mass_flow": 1,
"storage_time": 10,
"working_fraction": 0.5
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
gross_storage_volume |
number | m3 | Gross storage volume |
belt_mass_capacity |
number | kg/s | Belt mass capacity |
load_power |
number | W | Load power |
drive_power |
number | W | Drive power |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.solids2.
Example assumptions: 벌크밀도·적재단면·유효 저항은 제공된 성능자료; 수평/상향 벨트 예비 동력; 사일로 구조·호퍼 유동성·하향 회생은 별도
27. solids.screen — 분급 회수율·물질수지
Purpose / operating model: 미립/조립 2성분군, 제공된 회수율
Equations / algorithm: undersize=m*(fine*fine_recovery+(1-fine)*(1-coarse_recovery))
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
feed_mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Feed mass flow; mass_flow |
feed_fines_fraction |
yes | number | 1 | Feed fines fraction; fraction, 0–1 unless a stricter method condition applies |
fines_recovery_to_undersize |
yes | number | 1 | Fines recovery to undersize; fraction, 0–1 unless a stricter method condition applies |
coarse_recovery_to_oversize |
yes | number | 1 | Coarse recovery to oversize; fraction, 0–1 unless a stricter method condition applies |
Complete assumed input example:
{
"coarse_recovery_to_oversize": 0.8,
"feed_fines_fraction": 0.4,
"feed_mass_flow": 100,
"fines_recovery_to_undersize": 0.9
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
undersize_mass_flow |
number | kg/s | Undersize mass flow |
oversize_mass_flow |
number | kg/s | Oversize mass flow |
undersize_fines_fraction |
number | mass_fraction | Undersize fines fraction |
oversize_fines_fraction |
number | mass_fraction | Oversize fines fraction |
mass_balance_residual |
number | kg/s | Mass balance residual |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.solids2.
Example assumptions: 건식 성분군 2개: 미립/조립, 지정 회수율 기반
28. solids.grind — Bond 분쇄 동력
Purpose / operating model: 시험 일지수와 80% 통과입도, 원식 입도 um
Equations / algorithm: W=10*Wi*(1/sqrt(P80_um)-1/sqrt(F80_um))
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Mass flow; mass_flow |
feed_p80 |
yes | quantity {value, unit} or SI number | m | Feed p80; length |
product_p80 |
yes | quantity {value, unit} or SI number | m | Product p80; length |
bond_work_index |
yes | quantity {value, unit} or SI number | J/kg | Bond work index; specific_energy |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
drive_efficiency |
optional / conditional | number | 1 | Drive efficiency; fraction, 0–1 unless a stricter method condition applies |
Complete assumed input example:
{
"bond_work_index": {
"unit": "kWh/t",
"value": 10
},
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"drive_efficiency": 0.9,
"feed_p80": {
"unit": "um",
"value": 100
},
"mass_flow": 1,
"product_p80": {
"unit": "um",
"value": 25
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
specific_grinding_energy |
number | J/kg | Specific grinding energy |
shaft_power |
number | W | Shaft power |
drive_power |
number | W | Drive power |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.solids2.
Example assumptions: Bond 80% 통과입도 식, 원식 입도 단위 um·일지수 kWh/t; 시험으로 확보한 Bond 일지수 사용; 습식·폐회로 보정은 별도
29. solids.settling — Stokes 침강·면적
Purpose / operating model: 희석 구형 입자 Re_p<=0.1
Equations / algorithm: v=(rhoP-rhoF)*g*d^2/(18*mu); A=Q/v
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
particle_diameter |
yes | number | m | Particle diameter |
particle_density |
yes | integer | kg/m3 | Particle density |
fluid_density |
yes | integer | kg/m3 | Fluid density |
viscosity |
yes | number | Pa*s | Viscosity |
volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
area_margin_fraction |
optional / conditional | number | declared in object / not applicable | Area margin fraction |
Complete assumed input example:
{
"fluid_density": 1000,
"particle_density": 2000,
"particle_diameter": 1e-05,
"viscosity": 0.001,
"volume_flow": 0.0001
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
settling_velocity |
number | m/s | Settling velocity |
particle_reynolds |
number | 1 | Particle reynolds |
required_area |
number | m2 | Required area |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.solids2.
Example assumptions: 독립 구형 입자·희석 현탁액 Stokes 침강; 응집·간섭 침강은 별도
30. solids.centrifuge — Sigma 원심분리 용량
Purpose / operating model: 제공된 등가 Sigma 면적·효율, Stokes 입자
Equations / algorithm: Q_capacity=v_gravity*Sigma*efficiency
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
particle_diameter |
yes | number | m | Particle diameter |
particle_density |
yes | integer | kg/m3 | Particle density |
fluid_density |
yes | integer | kg/m3 | Fluid density |
viscosity |
yes | number | Pa*s | Viscosity |
volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
equivalent_sigma_area |
yes | quantity {value, unit} or SI number | m2 | Equivalent sigma area; area |
sigma_efficiency |
yes | number | 1 | Sigma efficiency; fraction, 0–1 unless a stricter method condition applies |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
Complete assumed input example:
{
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"equivalent_sigma_area": 100,
"fluid_density": 1000,
"particle_density": 2000,
"particle_diameter": 1e-05,
"sigma_efficiency": 0.5,
"viscosity": 0.001,
"volume_flow": 0.001
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
gravity_settling_velocity |
number | m/s | Gravity settling velocity |
particle_reynolds |
number | 1 | Particle reynolds |
volume_capacity |
number | m3/s | Volume capacity |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.solids2.
Example assumptions: 제공된 유효 Sigma 등가침강면적 사용; 저농도·Stokes 입자, 장치 형상·회전수·동력은 별도
31. solids.filter — 정압 케이크 여과
Purpose / operating model: 비압축성 케이크, 초기 케이크 0; 면적 또는 시간 산정
Equations / algorithm: t=mu*alpha*c*V^2/(2*A^2*dP)+mu*Rm*V/(A*dP)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
mode |
yes | string | declared in object / not applicable | Mode; choices: ('area', 'time') |
viscosity |
yes | quantity {value, unit} or SI number | Pa*s | Viscosity; viscosity |
specific_cake_resistance |
yes | quantity {value, unit} or SI number | m/kg | Specific cake resistance; specific_resistance |
solids_per_filtrate_volume |
yes | quantity {value, unit} or SI number | kg/m3 | Solids per filtrate volume; density |
filtrate_volume |
yes | quantity {value, unit} or SI number | m3 | Filtrate volume; volume |
pressure_difference |
yes | quantity {value, unit} or SI number | Pa | Pressure difference; pressure_difference |
medium_resistance |
yes | quantity {value, unit} or SI number | 1/m | Medium resistance; inverse_length |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
filtration_time |
optional / conditional | quantity {value, unit} or SI number | s | Filtration time; time |
filtration_area |
optional / conditional | quantity {value, unit} or SI number | m2 | Filtration area; area |
Complete assumed input example:
{
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"filtrate_volume": 1,
"filtration_time": 2,
"medium_resistance": 1,
"mode": "area",
"pressure_difference": 1,
"solids_per_filtrate_volume": 1,
"specific_cake_resistance": 2,
"viscosity": 1
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
filtration_area |
number | m2 | Filtration area |
filtration_time |
number | s | Filtration time |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.solids2.
Example assumptions: 정압·비압축성 케이크; 초기 케이크 0; t=mualphacV^2/(2A^2dP)+muRmV/(AdP); 세척·배출 시간은 배치 모듈에 별도 입력
32. solids.cyclone — Lapple 사이클론 예비 성능
Purpose / operating model: 제공된 유효 회전수·손실계수, 단일 입경 효율
Equations / algorithm: d50=sqrt(9*mu*b/(2*pi*Ne*uin*(rhoP-rhoG))); eta=d^2/(d^2+d50^2)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
gas_volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Gas volume flow; volume_flow |
inlet_width |
yes | quantity {value, unit} or SI number | m | Inlet width; length |
inlet_height |
yes | quantity {value, unit} or SI number | m | Inlet height; length |
gas_viscosity |
yes | quantity {value, unit} or SI number | Pa*s | Gas viscosity; viscosity |
gas_density |
yes | quantity {value, unit} or SI number | kg/m3 | Gas density; density |
particle_density |
yes | quantity {value, unit} or SI number | kg/m3 | Particle density; density |
effective_turns |
yes | integer | declared in object / not applicable | Effective turns |
pressure_loss_coefficient |
yes | integer | declared in object / not applicable | Pressure loss coefficient |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
particle_diameter |
optional / conditional | quantity {value, unit} or SI number | m | Particle diameter; length |
Complete assumed input example:
{
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"effective_turns": 1,
"gas_density": 1,
"gas_viscosity": 1e-05,
"gas_volume_flow": 0.1,
"inlet_height": 0.1,
"inlet_width": 0.1,
"particle_density": 1001,
"particle_diameter": 1.196826841204298e-05,
"pressure_loss_coefficient": 2
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
inlet_velocity |
number | m/s | Inlet velocity |
cut_diameter |
number | m | Cut diameter |
pressure_drop |
number | Pa | Pressure drop |
grade_efficiency |
number | 1 | Grade efficiency |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.solids2.
Example assumptions: Lapple 예비 cut-size 모델; 지정 유효 회전수와 손실계수; 단일 입경 효율 d^2/(d^2+d50^2), 재비산·고농도 효과는 별도
33. solids.dryer — 건조기 수지·열부하·면적
Purpose / operating model: 습량기준 수분·수분수지 공기량; 제공 건조속도로 면적 산정
Equations / algorithm: dry_solid=mfeed*(1-Xin); Q=evaporation*latent/(1-loss)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
wet_feed_mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Wet feed mass flow; mass_flow |
inlet_moisture_fraction |
yes | number | 1 | Inlet moisture fraction; fraction, 0–1 unless a stricter method condition applies |
outlet_moisture_fraction |
yes | integer | 1 | Outlet moisture fraction; fraction, 0–1 unless a stricter method condition applies |
latent_heat |
yes | quantity {value, unit} or SI number | J/kg | Latent heat; specific_energy |
inlet_humidity_ratio |
yes | number | declared in object / not applicable | Inlet humidity ratio |
outlet_humidity_ratio |
yes | number | declared in object / not applicable | Outlet humidity ratio |
heat_loss_fraction |
optional / conditional | number | 1 | Heat loss fraction; fraction, 0–1 unless a stricter method condition applies |
additional_sensible_heat |
optional / conditional | quantity {value, unit} or SI number | W | Additional sensible heat; power |
drying_flux |
optional / conditional | quantity {value, unit} or SI number | kg/(m2*s) | Drying flux; mass_flux |
coefficient_source |
optional / conditional | string | declared in object / not applicable | Coefficient source |
Complete assumed input example:
{
"coefficient_source": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님",
"drying_flux": 0.5,
"inlet_humidity_ratio": 0.01,
"inlet_moisture_fraction": 0.5,
"latent_heat": 1000,
"outlet_humidity_ratio": 0.11,
"outlet_moisture_fraction": 0,
"wet_feed_mass_flow": 10
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
dry_solids_mass_flow |
number | kg/s | Dry solids mass flow |
product_mass_flow |
number | kg/s | Product mass flow |
evaporation_mass_flow |
number | kg/s | Evaporation mass flow |
heat_duty |
number | W | Heat duty |
dry_air_mass_flow |
number | kg/s | Dry air mass flow |
drying_area |
number | m2 | Drying area |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.solids2.
Example assumptions: 입출구 수분은 물/습윤물의 질량분율; 습도비는 kg-water/kg-dry-air; 열부하는 지정 잠열·현열·손실 기반; 공기량은 수분수지 기준; 면적은 제공된 유효 건조속도 기준, 공기 열용량·건조동역학 상세해석은 별도
34. economics.project — 현금흐름·NPV·IRR·회수기간
Purpose / operating model: 연말 현금흐름·정액 감가상각·제공 세율·균등 원리금; 비전형 현금흐름 IRR 미선택
Equations / algorithm: NPV=sum(CF_t/(1+r)^t); after-tax annual project/equity cash flows
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
currency |
yes | string | declared in object / not applicable | Currency |
project_years |
yes | integer | declared in object / not applicable | Project years |
initial_capital |
yes | object | USD | Initial capital |
annual_revenue |
yes | integer | USD/year | Annual revenue |
annual_operating_cost |
yes | object | USD/year | Annual operating cost |
discount_rate |
yes | number | declared in object / not applicable | Discount rate |
working_capital |
optional / conditional | object | USD | Working capital |
depreciable_capital |
optional / conditional | number | USD | Depreciable capital |
depreciation_residual |
optional / conditional | number | USD | Depreciation residual |
depreciation_years |
optional / conditional | integer | declared in object / not applicable | Depreciation years |
salvage_value |
optional / conditional | number | USD | Salvage value |
tax_rate |
optional / conditional | number | 1 | Tax rate; fraction, 0–1 unless a stricter method condition applies |
loan_principal |
optional / conditional | number | USD | Loan principal |
loan_interest_rate |
optional / conditional | number | declared in object / not applicable | Loan interest rate |
loan_years |
optional / conditional | integer | declared in object / not applicable | Loan years |
Complete assumed input example:
{
"annual_operating_cost": {
"unit": "USD/year",
"value": 180.0
},
"annual_revenue": 1000000,
"currency": "USD",
"discount_rate": 0.1,
"initial_capital": {
"unit": "USD",
"value": 97.08362459440853
},
"project_years": 5,
"tax_rate": 0.2,
"working_capital": {
"unit": "USD",
"value": 30.0
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
project_cash_flows |
array | USD | Project cash flows |
equity_cash_flows |
array | USD | Equity cash flows |
schedule |
array | nested structure / not applicable | Schedule |
npv |
number | USD | Npv |
irr |
number | 1 | Irr |
irr_status |
string | nested structure / not applicable | Irr status |
payback_years |
number | year | Payback years |
discounted_payback_years |
number | year | Discounted payback years |
equity_npv |
number | USD | Equity npv |
equity_irr |
number | 1 | Equity irr |
equity_irr_status |
string | nested structure / not applicable | Equity irr status |
currency |
string | nested structure / not applicable | Currency |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.economics2.
Example assumptions: t=0 투자, 연말 현금흐름·할인; 정액 감가상각; 적자 세금/손실 이월 혜택 없음; 최종 운전자본 전액 회수, 처분 이익만 과세; 처분 손실 공제 없음; 차입금은 고정 금리 균등 원리금, 원금 말년 정산; project NPV/IRR은 무차입 기준, equity는 차입·이자세금효과 반영; 다중 부호변화의 IRR은 임의의 근을 선택하지 않음
35. economics.sensitivity — 시나리오·민감도·손익분기
Purpose / operating model: OAT 절대 시나리오, project NPV 기준 비교; 확률분석 별도
Equations / algorithm: delta_NPV=NPV_scenario-NPV_base; break-even: project NPV(revenue)=0
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
base_inputs |
yes | object | declared in object / not applicable | Base inputs |
variations |
yes | array | declared in object / not applicable | Variations |
solve_break_even_revenue |
optional / conditional | boolean | declared in object / not applicable | Solve break even revenue |
Complete assumed input example:
{
"base_inputs": {
"annual_operating_cost": {
"unit": "USD/year",
"value": 180.0
},
"annual_revenue": 1000000,
"currency": "USD",
"discount_rate": 0.1,
"initial_capital": {
"unit": "USD",
"value": 97.08362459440853
},
"project_years": 5,
"tax_rate": 0.2,
"working_capital": {
"unit": "USD",
"value": 30.0
}
},
"variations": [
{
"field": "annual_revenue",
"name": "매출",
"values": [
800000,
1200000
]
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
baseline_npv |
number | USD | Baseline npv |
scenarios |
array | nested structure / not applicable | Scenarios |
ranking |
array | nested structure / not applicable | Ranking |
break_even_annual_revenue |
number | USD/year | Break even annual revenue |
currency |
string | nested structure / not applicable | Currency |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.economics2.
Example assumptions: 한 번에 한 변수(OAT), 제공된 절대 시나리오 값; 무차입 project NPV 기준 비교·손익분기; 확률 분포·상관관계·Monte Carlo는 별도
36. materials.select — 재질·균일 부식 검토
Purpose / operating model: 제공된 매질·온도·농도·부식률 데이터 범위 내 선별
Equations / algorithm: required_corrosion_allowance=corrosion_rate*design_life
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
fluid_name |
yes | string | declared in object / not applicable | Fluid name |
temperature |
yes | quantity {value, unit} or SI number | K | Temperature; temperature |
concentration |
yes | number | 1 | Concentration; fraction, 0–1 unless a stricter method condition applies |
design_life |
yes | quantity {value, unit} or SI number | s | Design life; time |
corrosion_allowance |
yes | quantity {value, unit} or SI number | m | Corrosion allowance; length |
candidates |
yes | array | declared in object / not applicable | Candidates |
Complete assumed input example:
{
"candidates": [
{
"corrosion_rate": {
"unit": "mm/year",
"value": 1
},
"fluid_name": "F",
"id": "M1",
"maximum_concentration": 1,
"maximum_temperature": 310,
"minimum_concentration": 0,
"minimum_temperature": 290,
"name": "가상재질1",
"source_note": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님"
},
{
"corrosion_rate": {
"unit": "mm/year",
"value": 3
},
"fluid_name": "F",
"id": "M2",
"maximum_concentration": 1,
"maximum_temperature": 310,
"minimum_concentration": 0,
"minimum_temperature": 290,
"name": "가상재질2",
"source_note": "설명·검증용 가정값; 실측 성능이나 실제 견적 아님"
}
],
"concentration": 0.5,
"corrosion_allowance": 0.002,
"design_life": {
"unit": "year",
"value": 1
},
"fluid_name": "F",
"temperature": 300
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
eligible_candidates |
array | nested structure / not applicable | Eligible candidates |
evaluated_candidates |
array | nested structure / not applicable | Evaluated candidates |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.design_support2.
Example assumptions: 제공된 매질·온도·농도 범위에서만 비교; 외삽하지 않음; 균일 부식률*수명 기준, 피팅·응력부식·오염·기계강도는 별도; 후보 순위는 부식률 기준이며 최종 재질 승인은 별도
37. controls.review — 계기·제어루프·알람·인터록 초안
Purpose / operating model: 제공된 태그·범위·설정값·동작의 일관성 검토, 독립 단순 루프
Equations / algorithm: range, alarm/trip ordering, tag consistency
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
equipment_tags |
yes | array | declared in object / not applicable | Equipment tags |
loops |
yes | array | declared in object / not applicable | Loops |
Complete assumed input example:
{
"equipment_tags": [
"E-101"
],
"loops": [
{
"controller_tag": "TIC-101",
"equipment_tag": "E-101",
"final_element_tag": "TV-101",
"high_alarm": 80,
"high_trip": 90,
"high_trip_action": "사용자 지정 고온 정지",
"loop_tag": "TIC-101",
"low_alarm": 20,
"low_trip": 10,
"low_trip_action": "사용자 지정 저온 정지",
"maximum_value": 100,
"measurement_tag": "TT-101",
"minimum_value": 0,
"setpoint": 50,
"unit": "degC",
"variable": "temperature"
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
loops |
array | nested structure / not applicable | Loops |
instrument_index |
array | nested structure / not applicable | Instrument index |
interlocks |
array | nested structure / not applicable | Interlocks |
review_status |
string | nested structure / not applicable | Review status |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.design_support2.
Example assumptions: 사용자가 지정한 장치·계기·알람·트립·동작을 검토하고 초안으로 정리; 단순 독립 루프; cascade·override·SIL·동특성 튜닝은 별도; 각 limits 값은 SI 단위 객체로 보존
38. thermal.pinch — 핀치·복합곡선·최소 유틸리티
Purpose / operating model: 일정 CP 현열 스트림 열 캐스케이드
Equations / algorithm: shift ±DTmin/2; QHmin=-min(cascade)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
minimum_approach |
yes | quantity {value, unit} or SI number | delta_K | Minimum approach; temperature_difference |
streams |
yes | array | declared in object / not applicable | Streams |
Complete assumed input example:
{
"minimum_approach": 10,
"streams": [
{
"name": "hot",
"inlet_temperature": 400,
"outlet_temperature": 300,
"heat_capacity_flow_W_K": 100
},
{
"name": "cold",
"inlet_temperature": 290,
"outlet_temperature": 390,
"heat_capacity_flow_W_K": 100
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
minimum_heating |
integer | W | Minimum heating |
minimum_cooling |
number | W | Minimum cooling |
maximum_heat_recovery |
number | W | Maximum heat recovery |
intervals |
array | nested structure / not applicable | Intervals |
pinch_temperatures |
array | nested structure / not applicable | Pinch temperatures |
grand_composite_curve |
array | nested structure / not applicable | Grand composite curve |
hot_composite |
array | nested structure / not applicable | Hot composite |
cold_composite |
array | nested structure / not applicable | Cold composite |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 정상상태 일정 열용량 유량; 등온 잠열 제외; 온도 시프트 ±ΔTmin/2, 열 캐스케이드; 열교환망 배치 최적화는 별도
39. process.routes — 공정경로·입지 대안·Pareto 비교
Purpose / operating model: 지정 대안·제약·정규화 가중 점수
Equations / algorithm: constraint screening; min-max score; Pareto
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
weights |
yes | object | declared in object / not applicable | Weights |
alternatives |
yes | array | declared in object / not applicable | Alternatives |
Complete assumed input example:
{
"weights": {
"cost": {
"weight": 0.5,
"direction": "min"
},
"CO2": {
"weight": 0.5,
"direction": "min",
"limit": 200
}
},
"alternatives": [
{
"name": "A",
"metrics": {
"cost": 100,
"CO2": 150
}
},
{
"name": "B",
"metrics": {
"cost": 120,
"CO2": 100
}
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
alternatives |
array | nested structure / not applicable | Alternatives |
recommended |
string | nested structure / not applicable | Recommended |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 사전 정의 대안의 제약·min-max 정규화 가중 점수(낮을수록 우수)·Pareto 비교; 지표 단위·경계는 대안 간 동일하게 준비; 범용 자동 공정 합성 제외
40. vessel.preliminary — 내압 용기 동체·헤드·중량 예비 계산
Purpose / operating model: 원통·2:1 타원 헤드; 코드 인증 아님
Equations / algorithm: t=PD/(2(SE-0.6P)); t_head=PD/(2SE-0.2P)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
design_pressure_difference |
yes | quantity {value, unit} or SI number | Pa | Design pressure difference; pressure |
inside_diameter |
yes | quantity {value, unit} or SI number | m | Inside diameter; length |
straight_length |
yes | quantity {value, unit} or SI number | m | Straight length; length |
allowable_stress |
yes | quantity {value, unit} or SI number | Pa | Allowable stress; pressure |
joint_efficiency |
yes | number | 1 | Joint efficiency; fraction, 0–1 unless a stricter method condition applies |
corrosion_allowance |
yes | quantity {value, unit} or SI number | m | Corrosion allowance; length |
minimum_fabrication_thickness |
yes | quantity {value, unit} or SI number | m | Minimum fabrication thickness; length |
material_density |
yes | quantity {value, unit} or SI number | kg/m3 | Material density; density |
code_basis |
yes | string | declared in object / not applicable | Code basis |
code_edition |
yes | string | declared in object / not applicable | Code edition |
stress_source |
yes | string | declared in object / not applicable | Stress source |
Complete assumed input example:
{
"design_pressure_difference": 1000000.0,
"inside_diameter": 1,
"straight_length": 3,
"allowable_stress": 100000000.0,
"joint_efficiency": 0.85,
"corrosion_allowance": 0.002,
"minimum_fabrication_thickness": 0.005,
"material_density": 7850,
"code_basis": "문헌 예비 내압식; 실제 코드 검토 별도",
"code_edition": "Towler/Sinnott 2판 2013; 인증 규격 아님",
"stress_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
shell_thickness |
number | m | Shell thickness |
head_thickness |
number | m | Head thickness |
estimated_empty_mass |
number | kg | Estimated empty mass |
code_basis |
string | nested structure / not applicable | Code basis |
code_edition |
string | nested structure / not applicable | Code edition |
stress_source |
string | nested structure / not applicable | Stress source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 문헌 내압 원통·2:1 타원 헤드 식; 완전 부식 상태에 부식여유 추가; 외압·좌굴·노즐·지지·피로·풍하중·지진·가공 공차 및 시험압력 검토 제외; 입력 코드·판본 및 온도별 허용응력은 설계자의 검토 근거
41. reactor.ideal — 등온 CSTR·PFR·배치 반응기
Purpose / operating model: 일정 밀도·단일 power-law 반응
Equations / algorithm: V_CSTR=FA0 X/rA; V_PFR=FA0 integral(dX/rA)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
reactor_type |
yes | string | declared in object / not applicable | Reactor type; choices: ('CSTR', 'PFR', 'batch') |
inlet_concentration_mol_m3 |
yes | integer | declared in object / not applicable | Inlet concentration mol m3 |
rate_constant_SI |
yes | number | declared in object / not applicable | Rate constant si |
reaction_order |
yes | integer | declared in object / not applicable | Reaction order |
conversion |
yes | number | 1 | Conversion; fraction, 0–1 unless a stricter method condition applies |
kinetics_source |
yes | string | declared in object / not applicable | Kinetics source |
reaction_enthalpy_J_mol |
optional / conditional | integer | declared in object / not applicable | Reaction enthalpy j mol |
volume_flow |
optional / conditional | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
charge_volume |
optional / conditional | quantity {value, unit} or SI number | m3 | Charge volume; volume |
Complete assumed input example:
{
"reactor_type": "CSTR",
"inlet_concentration_mol_m3": 100,
"rate_constant_SI": 0.1,
"reaction_order": 1,
"conversion": 0.5,
"kinetics_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"volume_flow": 0.01,
"reaction_enthalpy_J_mol": -10000
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
exit_concentration_mol_m3 |
number | mol/m3 | Exit concentration mol m3 |
reaction_time |
number | s | Reaction time |
kinetics_source |
string | nested structure / not applicable | Kinetics source |
active_volume |
number | m3 | Active volume |
residence_time |
number | s | Residence time |
heat_duty |
number | W | Heat duty |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 등온·일정 밀도·단일 비가역 power-law 반응 -rA=k CA^n; k 단위=(mol/m3)^(1-n)/s; 사용자 속도식 자료의 온도에서만 유효; 활성 부피, 공간여유·전열·촉매·폭주 검토 별도; 양의 열부하는 흡열
42. separator.gravity — 기액·액액 중력 분리조
Purpose / operating model: 지정 액적/계수·비포밍 예비 설계
Equations / algorithm: u=K sqrt((rhoL-rhoV)/rhoV); Stokes; V=Q t
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
mode |
yes | string | declared in object / not applicable | Mode; choices: ('vapor_liquid', 'liquid_liquid') |
continuous_volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Continuous volume flow; volume_flow |
light_density |
yes | quantity {value, unit} or SI number | kg/m3 | Light density; density |
heavy_density |
yes | quantity {value, unit} or SI number | kg/m3 | Heavy density; density |
residence_time |
yes | quantity {value, unit} or SI number | s | Residence time; time |
working_fraction |
yes | number | 1 | Working fraction; fraction, 0–1 unless a stricter method condition applies |
souders_brown_coefficient |
optional / conditional | quantity {value, unit} or SI number | m/s | Souders brown coefficient; velocity |
liquid_volume_flow |
optional / conditional | quantity {value, unit} or SI number | m3/s | Liquid volume flow; volume_flow |
droplet_diameter |
optional / conditional | quantity {value, unit} or SI number | m | Droplet diameter; length |
continuous_viscosity |
optional / conditional | quantity {value, unit} or SI number | Pa*s | Continuous viscosity; viscosity |
Complete assumed input example:
{
"mode": "vapor_liquid",
"continuous_volume_flow": 0.1,
"light_density": 2,
"heavy_density": 1000,
"residence_time": 120,
"working_fraction": 0.7,
"souders_brown_coefficient": 0.1,
"liquid_volume_flow": 0.001
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
allowable_velocity |
number | m/s | Allowable velocity |
cross_section_area |
number | m2 | Cross section area |
minimum_diameter |
number | m | Minimum diameter |
working_volume |
number | m3 | Working volume |
total_volume |
number | m3 | Total volume |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 비포밍 중력 분리 예비 크기; 지정 액적/계수·체류시간; 직경과 체류 용량 제약을 각각 만족하는 실제 형상은 별도 설계
43. separation.adsorption — 흡착 작업용량·베드
Purpose / operating model: 단일 성분 Langmuir·지정 이용률
Equations / algorithm: q=qmax bC/(1+bC); M=load/(delta_q utilization)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
solute_mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Solute mass flow; mass_flow |
adsorption_time |
yes | quantity {value, unit} or SI number | s | Adsorption time; time |
langmuir_capacity_kg_kg |
yes | number | declared in object / not applicable | Langmuir capacity kg kg |
langmuir_affinity_m3_kg |
yes | integer | declared in object / not applicable | Langmuir affinity m3 kg |
feed_concentration_kg_m3 |
yes | integer | declared in object / not applicable | Feed concentration kg m3 |
regeneration_concentration_kg_m3 |
yes | integer | declared in object / not applicable | Regeneration concentration kg m3 |
bed_utilization |
yes | number | 1 | Bed utilization; fraction, 0–1 unless a stricter method condition applies |
bulk_density |
yes | quantity {value, unit} or SI number | kg/m3 | Bulk density; density |
performance_source |
yes | string | declared in object / not applicable | Performance source |
Complete assumed input example:
{
"solute_mass_flow": 0.001,
"adsorption_time": 3600,
"langmuir_capacity_kg_kg": 0.2,
"langmuir_affinity_m3_kg": 1,
"feed_concentration_kg_m3": 1,
"regeneration_concentration_kg_m3": 0,
"bed_utilization": 0.8,
"bulk_density": 500,
"performance_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
working_capacity |
number | kg/kg | Working capacity |
adsorbent_mass |
number | kg | Adsorbent mass |
bed_volume |
number | m3 | Bed volume |
performance_source |
string | nested structure / not applicable | Performance source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: Langmuir 평형 작업용량·지정 베드 이용률; 단일 용질; 파과곡선·경쟁흡착·재생 열부하 별도
44. separation.membrane — 막분리 투과량·면적·물질수지
Purpose / operating model: 지정 투과도·배제율 일정
Equations / algorithm: J=Lp(deltaP-deltaPi); A=Qp/J
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
feed_volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Feed volume flow; volume_flow |
water_recovery |
yes | number | 1 | Water recovery; fraction, 0–1 unless a stricter method condition applies |
solute_rejection |
yes | number | 1 | Solute rejection; fraction, 0–1 unless a stricter method condition applies |
feed_concentration_kg_m3 |
yes | integer | declared in object / not applicable | Feed concentration kg m3 |
hydraulic_permeability_m_Pa_s |
yes | number | declared in object / not applicable | Hydraulic permeability m pa s |
pressure_difference |
yes | quantity {value, unit} or SI number | Pa | Pressure difference; pressure |
osmotic_pressure_difference |
yes | quantity {value, unit} or SI number | Pa | Osmotic pressure difference; pressure |
performance_source |
yes | string | declared in object / not applicable | Performance source |
Complete assumed input example:
{
"feed_volume_flow": 0.01,
"water_recovery": 0.5,
"solute_rejection": 0.9,
"feed_concentration_kg_m3": 1,
"hydraulic_permeability_m_Pa_s": 1e-10,
"pressure_difference": 200000.0,
"osmotic_pressure_difference": 100000.0,
"performance_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
permeate_flow |
number | m3/s | Permeate flow |
retentate_flow |
number | m3/s | Retentate flow |
membrane_area |
number | m2 | Membrane area |
permeate_concentration |
number | kg/m3 | Permeate concentration |
retentate_concentration |
number | kg/m3 | Retentate concentration |
performance_source |
string | nested structure / not applicable | Performance source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 지정 투과도·배제율 일정; 용매 부피수지·용질 질량수지; 농도분극·오염·막 수명·축방향 압력손실 별도
45. separation.ion_exchange — 이온교환 수지·재생량
Purpose / operating model: 지정 등가 작업용량
Equations / algorithm: V=Q C t/(capacity utilization)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
ionic_load_eq_m3 |
yes | integer | declared in object / not applicable | Ionic load eq m3 |
service_time |
yes | quantity {value, unit} or SI number | s | Service time; time |
resin_capacity_eq_m3 |
yes | integer | declared in object / not applicable | Resin capacity eq m3 |
capacity_utilization |
yes | number | 1 | Capacity utilization; fraction, 0–1 unless a stricter method condition applies |
regenerant_kg_per_eq |
yes | number | declared in object / not applicable | Regenerant kg per eq |
performance_source |
yes | string | declared in object / not applicable | Performance source |
Complete assumed input example:
{
"volume_flow": 0.001,
"ionic_load_eq_m3": 2,
"service_time": 3600,
"resin_capacity_eq_m3": 1000,
"capacity_utilization": 0.8,
"regenerant_kg_per_eq": 0.1,
"performance_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
resin_volume |
number | m3 | Resin volume |
cycle_load_eq |
number | eq | Cycle load eq |
regenerant_mass |
number | kg | Regenerant mass |
performance_source |
string | nested structure / not applicable | Performance source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 수지 제조사 작업용량·재생 소비계수 입력; 경쟁 이온·파과 해석 별도
46. separation.crystallization — 결정화·침전 평형 수지
Purpose / operating model: 무수 결정·용매 증발·평형 용해도
Equations / algorithm: crystals=solute_in-solubility*remaining_solvent
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
feed_mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Feed mass flow; mass_flow |
feed_solute_fraction |
yes | number | 1 | Feed solute fraction; fraction, 0–1 unless a stricter method condition applies |
solubility_kg_per_kg_solvent |
yes | number | declared in object / not applicable | Solubility kg per kg solvent |
solubility_source |
yes | string | declared in object / not applicable | Solubility source |
solvent_evaporated_fraction |
optional / conditional | integer | 1 | Solvent evaporated fraction; fraction, 0–1 unless a stricter method condition applies |
Complete assumed input example:
{
"feed_mass_flow": 10,
"feed_solute_fraction": 0.3,
"solubility_kg_per_kg_solvent": 0.2,
"solvent_evaporated_fraction": 0,
"solubility_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
crystal_mass_flow |
number | kg/s | Crystal mass flow |
mother_liquor_mass_flow |
number | kg/s | Mother liquor mass flow |
vapor_mass_flow |
number | kg/s | Vapor mass flow |
solute_recovery |
number | 1 | Solute recovery |
mass_residual |
number | kg/s | Mass residual |
solubility_source |
string | nested structure / not applicable | Solubility source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 무수 순수 결정·용매만 증발·평형 용해도; 수화물·입도 분포·핵생성·모액 동반은 별도
47. design.optimize — 제약조건 단일변수 설계 탐색
Purpose / operating model: 2~200점 유계 격자 탐색; 연속 최적성 보장 없음
Equations / algorithm: feasible grid argmin/argmax
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
method |
yes | string | declared in object / not applicable | Method |
base_inputs |
yes | object | declared in object / not applicable | Base inputs |
variable |
yes | string | declared in object / not applicable | Variable |
objective |
yes | string | declared in object / not applicable | Objective |
direction |
yes | string | declared in object / not applicable | Direction; choices: ('min', 'max') |
lower |
yes | number | declared in object / not applicable | Lower |
upper |
yes | number | declared in object / not applicable | Upper |
grid_points |
yes | integer | declared in object / not applicable | Grid points |
constraints |
optional / conditional | object | declared in object / not applicable | Constraints |
Complete assumed input example:
{
"method": "reactor.ideal",
"base_inputs": {
"reactor_type": "CSTR",
"inlet_concentration_mol_m3": 100,
"rate_constant_SI": 0.1,
"reaction_order": 1,
"kinetics_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"volume_flow": 0.01
},
"variable": "conversion",
"objective": "active_volume",
"direction": "min",
"lower": 0.2,
"upper": 0.8,
"grid_points": 7,
"constraints": {
"exit_concentration_mol_m3": {
"maximum": 60
}
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
best |
object | nested structure / not applicable | Best |
evaluations |
array | nested structure / not applicable | Evaluations |
feasible_count |
integer | nested structure / not applicable | Feasible count |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 단일 변수 유계 전수 격자 탐색; 격자 내 최선이며 연속/전역 최적성 증명 아님; 변수는 해당 계산의 숫자 단독 SI 규약을 사용
48. economics.uncertainty — 경제성 Monte Carlo 불확실성
Purpose / operating model: 독립 일양·삼각 분포, 2000회 이하
Equations / algorithm: sample NPV; empirical quantiles
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
base_inputs |
yes | object | declared in object / not applicable | Base inputs |
samples |
yes | integer | declared in object / not applicable | Samples |
seed |
yes | integer | declared in object / not applicable | Seed |
distributions |
yes | object | declared in object / not applicable | Distributions |
Complete assumed input example:
{
"base_inputs": {
"currency": "USD",
"project_years": 10,
"initial_capital": 1000000,
"annual_revenue": 400000,
"annual_operating_cost": 200000,
"discount_rate": 0.08
},
"samples": 100,
"seed": 42,
"distributions": {
"annual_revenue": {
"distribution": "triangular",
"minimum": 300000,
"mode": 400000,
"maximum": 500000
}
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
mean_npv |
number | USD | Mean npv |
p05_npv |
number | USD | P05 npv |
p50_npv |
number | USD | P50 npv |
p95_npv |
number | USD | P95 npv |
probability_positive_npv |
number | nested structure / not applicable | Probability positive npv |
seed |
integer | nested structure / not applicable | Seed |
samples |
integer | nested structure / not applicable | Samples |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 독립 일양/삼각 분포 Monte Carlo; 상관관계 모형 없음; 단가·비용·분포는 사용자 가정, 표본 확률은 금융 수익 보장 아님
49. safety.hazop_fmea — HAZOP·FMEA·조치 검토 기록
Purpose / operating model: 사용자 위험 기록·담당·종결 근거; 자동 안전 승인 아님
Equations / algorithm: RPN=S*O*D
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
node_tags |
yes | array | declared in object / not applicable | Node tags |
reviews |
yes | array | declared in object / not applicable | Reviews |
Complete assumed input example:
{
"node_tags": [
"T-101"
],
"reviews": [
{
"id": "R1",
"node": "T-101",
"deviation": "고압",
"cause": "응축 냉각 상실",
"consequence": "용기 과압",
"severity": 8,
"occurrence": 3,
"detection": 4,
"safeguards": [
"압력 알람"
],
"recommendation": "방출 시나리오 전문 검토",
"owner": "공정 검토자",
"status": "open"
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
reviews |
array | nested structure / not applicable | Reviews |
open_actions |
integer | nested structure / not applicable | Open actions |
maximum_rpn |
integer | 1 | Maximum rpn |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 사용자가 작성한 HAZOP/FMEA 검토 기록·권고·담당·종결 근거 보존; 자동 위험 발견을 보장하지 않음
50. safety.relief — 단상 방출 오리피스 예비 면적
Purpose / operating model: 기체/비압축성 액체; 인증 용량·규격 적합 판정 아님
Equations / algorithm: A=mass_flow/mass_flux
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
fluid_model |
yes | string | declared in object / not applicable | Fluid model; choices: ('incompressible_liquid', 'ideal_gas') |
relief_mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Relief mass flow; mass_flow |
relieving_absolute_pressure |
yes | quantity {value, unit} or SI number | Pa | Relieving absolute pressure; pressure |
back_absolute_pressure |
yes | quantity {value, unit} or SI number | Pa | Back absolute pressure; pressure |
discharge_coefficient |
yes | number | 1 | Discharge coefficient; fraction, 0–1 unless a stricter method condition applies |
combined_correction |
yes | integer | 1 | Combined correction; fraction, 0–1 unless a stricter method condition applies |
scenario |
yes | string | declared in object / not applicable | Scenario |
code_basis |
yes | string | declared in object / not applicable | Code basis |
code_edition |
yes | string | declared in object / not applicable | Code edition |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
density |
optional / conditional | quantity {value, unit} or SI number | kg/m3 | Density; density |
heat_capacity_ratio |
optional / conditional | number | declared in object / not applicable | Heat capacity ratio |
molar_mass |
optional / conditional | quantity {value, unit} or SI number | kg/mol | Molar mass; molar_mass |
temperature |
optional / conditional | quantity {value, unit} or SI number | K | Temperature; temperature |
compressibility_factor |
optional / conditional | number | declared in object / not applicable | Compressibility factor |
Complete assumed input example:
{
"fluid_model": "ideal_gas",
"relief_mass_flow": 1,
"relieving_absolute_pressure": 300000,
"back_absolute_pressure": 100000,
"discharge_coefficient": 0.8,
"combined_correction": 1,
"scenario": "사용자 지정 정상 단상 방출 부하",
"code_basis": "일반 단상 오리피스 식; 인증 아님",
"code_edition": "교재 2013 예비 모델",
"coefficient_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"heat_capacity_ratio": 1.4,
"molar_mass": 0.02897,
"temperature": 300
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
required_area |
number | m2 | Required area |
choked |
boolean | nested structure / not applicable | Choked |
scenario |
string | nested structure / not applicable | Scenario |
code_basis |
string | nested structure / not applicable | Code basis |
code_edition |
string | nested structure / not applicable | Code edition |
coefficient_source |
string | nested structure / not applicable | Coefficient source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 정상 단상 오리피스 식; 2상·반응폭주·점성·액체 기화·배관 배압 해석 별도
51. environment.inventory — 온실가스·폐수·폐기물·용수 부하
Purpose / operating model: 명시 경계·출처별 활동량; 전과정 LCA·허가 판정 별도
Equations / algorithm: emission=activity*factor; waste=stream*disposition
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
annual_operating_hours |
yes | integer | declared in object / not applicable | Annual operating hours |
boundary |
yes | string | declared in object / not applicable | Boundary |
inventory_source |
yes | string | declared in object / not applicable | Inventory source |
streams |
yes | array | declared in object / not applicable | Streams |
activities |
yes | array | declared in object / not applicable | Activities |
water_withdrawal_flow |
yes | quantity {value, unit} or SI number | m3/s | Water withdrawal flow; volume_flow |
water_consumption_fraction |
yes | number | 1 | Water consumption fraction; fraction, 0–1 unless a stricter method condition applies |
Complete assumed input example:
{
"annual_operating_hours": 8000,
"boundary": "예시 지정 경계",
"inventory_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"streams": [
{
"tag": "product",
"mass_flow": 1,
"disposition": {
"product": 0.9,
"air": 0,
"wastewater": 0.1,
"solid": 0,
"recycle": 0
},
"pollutant_mass_fractions": {
"methanol": 0.01
}
}
],
"activities": [
{
"name": "purchased electricity",
"scope": "scope2",
"annual_quantity": 1000,
"activity_unit": "kWh",
"kg_CO2e_per_unit": 0.4,
"factor_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
],
"water_withdrawal_flow": 0.001,
"water_consumption_fraction": 0.5
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
annual_disposition_kg |
object | nested structure / not applicable | Annual disposition kg |
annual_pollutants_kg |
object | nested structure / not applicable | Annual pollutants kg |
annual_scope_CO2e_kg |
object | nested structure / not applicable | Annual scope co2e kg |
annual_CO2e |
number | kg CO2e/year | Annual co2e |
annual_water_withdrawal |
number | m3/year | Annual water withdrawal |
annual_water_consumption |
number | m3/year | Annual water consumption |
CO2e_per_kg_product |
number | kg CO2e/kg | Co2e per kg product |
streams |
array | nested structure / not applicable | Streams |
emission_activities |
array | nested structure / not applicable | Emission activities |
boundary |
string | nested structure / not applicable | Boundary |
inventory_source |
string | nested structure / not applicable | Inventory source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.assessment.
Example assumptions: 사용자 활동량×동일 단위 기준의 배출계수; 지정 경계만 포함; 기체 제품은 자동 대기 배출로 간주하지 않음; 처분 비율로 구분; 계수·GWP·연도·지역·공급원은 factor_source에 명시; 법적 배출 적합 판정이나 전과정 LCA 인증 아님; 냉각수 순환량과 취수·소비량을 구분; 대기/폐수의 오염물질 부하는 처리 후 환경 유입 예측과 구분
52. layout.review — 2D 배치·이격·배관거리 검토
Purpose / operating model: 제공 설치 경계·이격 근거; 3D·법규 자동 판단 아님
Equations / algorithm: clearance=distance-r1-r2
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
equipment |
yes | array | declared in object / not applicable | Equipment |
connections |
yes | array | declared in object / not applicable | Connections |
Complete assumed input example:
{
"equipment": [
{
"tag": "A",
"x": 0,
"y": 0,
"footprint_radius": 1
},
{
"tag": "B",
"x": 10,
"y": 0,
"footprint_radius": 1
}
],
"connections": [
{
"from": "A",
"to": "B",
"required_clearance": 5,
"clearance_basis": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
connections |
array | nested structure / not applicable | Connections |
total_rectilinear_pipe_length |
number | m | Total rectilinear pipe length |
violations |
integer | nested structure / not applicable | Violations |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 2D 원형 설치 경계·직교 배관거리 예비 검토; 접근성·피난·법정 이격은 사용자 요구 거리 근거로 검토; 3D/구조설계 별도
53. properties.interpolate — 온도별 사용자 물성 보간
Purpose / operating model: 구간 선형 보간·범위 외 거부
Equations / algorithm: piecewise linear interpolation
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
temperature |
yes | quantity {value, unit} or SI number | K | Temperature; temperature |
property_unit |
yes | string | declared in object / not applicable | Property unit |
source |
yes | string | declared in object / not applicable | Source |
points |
yes | array | declared in object / not applicable | Points |
Complete assumed input example:
{
"temperature": 310,
"property_unit": "kg/m3",
"source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"points": [
{
"temperature": 300,
"value": 1000
},
{
"temperature": 320,
"value": 980
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
property_value |
number | kg/m3 | Property value |
source |
string | nested structure / not applicable | Source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 사용자 검증 물성의 온도별 구간 선형 보간; 압력·조성 기준은 입력 출처에서 관리
54. pump.operating_point — 제조사 곡선·시스템 운전점
Purpose / operating model: 단조 Q-H 곡선 구간 보간·범위 내 교점
Equations / algorithm: Hpump(Q)=Hstatic+K Q^2
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
static_head |
yes | quantity {value, unit} or SI number | m | Static head; length |
system_resistance_s2_m5 |
yes | integer | declared in object / not applicable | System resistance s2 m5 |
density |
yes | quantity {value, unit} or SI number | kg/m3 | Density; density |
pump_efficiency |
yes | number | 1 | Pump efficiency; fraction, 0–1 unless a stricter method condition applies |
curve_source |
yes | string | declared in object / not applicable | Curve source |
curve |
yes | array | declared in object / not applicable | Curve |
Complete assumed input example:
{
"static_head": 10,
"system_resistance_s2_m5": 100000,
"density": 1000,
"pump_efficiency": 0.8,
"curve_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"curve": [
{
"volume_flow": 0,
"head": 30
},
{
"volume_flow": 0.02,
"head": 10
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
operating_volume_flow |
number | m3/s | Operating volume flow |
operating_head |
number | m | Operating head |
shaft_power |
number | W | Shaft power |
curve_source |
string | nested structure / not applicable | Curve source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 제공 제조사 Q-H 구간 선형 보간·단조 시스템 H=Hstatic+KQ²; 곡선 외삽·NPSH·최소연속유량·가변속도 선정 별도
55. utilities.inventory — 전력·스팀·질소·공기 등 집계
Purpose / operating model: 유틸리티·차원별 소요량 합산
Equations / algorithm: annual=rate*operating_time
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
annual_operating_hours |
yes | integer | declared in object / not applicable | Annual operating hours |
consumers |
yes | array | declared in object / not applicable | Consumers |
Complete assumed input example:
{
"annual_operating_hours": 8000,
"consumers": [
{
"tag": "P1",
"utility": "electricity",
"dimension": "power",
"demand": {
"value": 1,
"unit": "kW"
}
},
{
"tag": "N1",
"utility": "nitrogen",
"dimension": "mass_flow",
"demand": 0.01
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
totals |
array | nested structure / not applicable | Totals |
consumers |
array | nested structure / not applicable | Consumers |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 스팀·냉수·전력·질소·공기 등 사용자 지정 유틸리티별 합계; 서로 다른 차원은 합산하지 않음
56. hydraulics.economic — 경제 관경 대안 비교
Purpose / operating model: 동일 유량 후보 설치비+압손 전력비
Equations / algorithm: annual_cost=capital*charge+Q deltaP/eff*hours*price
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
hydraulic_inputs |
yes | object | declared in object / not applicable | Hydraulic inputs |
currency |
yes | string | declared in object / not applicable | Currency |
pump_efficiency |
yes | number | 1 | Pump efficiency; fraction, 0–1 unless a stricter method condition applies |
electricity_price_per_kWh |
yes | object | USD/kWh | Electricity price per kwh |
annual_operating_hours |
yes | integer | declared in object / not applicable | Annual operating hours |
annual_capital_charge_fraction |
yes | number | declared in object / not applicable | Annual capital charge fraction |
cost_source |
yes | string | declared in object / not applicable | Cost source |
candidates |
yes | array | declared in object / not applicable | Candidates |
Complete assumed input example:
{
"hydraulic_inputs": {
"volume_flow": 0.001,
"density": 1000,
"viscosity": 0.001,
"length": 100,
"roughness": 1e-05
},
"currency": "USD",
"pump_efficiency": 0.8,
"electricity_price_per_kWh": {
"value": 0.1,
"unit": "USD/kWh"
},
"annual_operating_hours": 8000,
"annual_capital_charge_fraction": 0.1,
"cost_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"candidates": [
{
"name": "50 mm",
"diameter": 0.05,
"installed_cost": 10000
},
{
"name": "80 mm",
"diameter": 0.08,
"installed_cost": 15000
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
candidates |
array | nested structure / not applicable | Candidates |
recommended |
string | nested structure / not applicable | Recommended |
minimum_annualized_cost |
number | USD/year | Minimum annualized cost |
cost_source |
string | nested structure / not applicable | Cost source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 사용자 후보 관경·설치비의 연간 자본비+압력손실 전력비 비교; 정상 단상 비압축성; 정수압·구매 펌프·유량 제어 비용은 별도; 실제 시장 가격 자동 가정 없음
57. assessment.process — 공정 연계 경제성·환경성 종합 평가
Purpose / operating model: 명시 견적·단가·처분·배출계수·경계; 가정 예비 평가
Equations / algorithm: process -> utilities -> CAPEX/OPEX/revenue -> NPV/IRR + inventory
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
process_metrics |
yes | object | declared in object / not applicable | Process metrics |
basis |
yes | object | declared in object / not applicable | Basis |
process_source |
yes | string | declared in object / not applicable | Process source |
Complete assumed input example:
{
"process_metrics": {
"feed_mass": {
"value": 1.3838832,
"unit": "kg/s"
},
"feed_temperature": {
"value": 293.15,
"unit": "K"
},
"feed_pressure": {
"value": 101325.0,
"unit": "Pa"
},
"feed_enthalpy": {
"value": -1829.7033412351411,
"unit": "kJ/kg"
},
"feed_methanol_mass_fraction": {
"value": 0.5001196632779414,
"unit": "1"
},
"feed_water_mass_fraction": {
"value": 0.4998803367220586,
"unit": "1"
},
"pumped_mass": {
"value": 1.3838832,
"unit": "kg/s"
},
"pumped_temperature": {
"value": 293.1699670003287,
"unit": "K"
},
"pumped_pressure": {
"value": 301325.0,
"unit": "Pa"
},
"pumped_enthalpy": {
"value": -1829.4112559390717,
"unit": "kJ/kg"
},
"pumped_methanol_mass_fraction": {
"value": 0.5001196632779414,
"unit": "1"
},
"pumped_water_mass_fraction": {
"value": 0.4998803367220586,
"unit": "1"
},
"heated_mass": {
"value": 1.3838832,
"unit": "kg/s"
},
"heated_temperature": {
"value": 319.42640660747713,
"unit": "K"
},
"heated_pressure": {
"value": 281325.0,
"unit": "Pa"
},
"heated_enthalpy": {
"value": -1731.8989766316238,
"unit": "kJ/kg"
},
"heated_methanol_mass_fraction": {
"value": 0.5001196632779414,
"unit": "1"
},
"heated_water_mass_fraction": {
"value": 0.4998803367220586,
"unit": "1"
},
"column_feed_mass": {
"value": 1.3838832,
"unit": "kg/s"
},
"column_feed_temperature": {
"value": 319.4795128904956,
"unit": "K"
},
"column_feed_pressure": {
"value": 101325.0,
"unit": "Pa"
},
"column_feed_enthalpy": {
"value": -1731.8989394475432,
"unit": "kJ/kg"
},
"column_feed_methanol_mass_fraction": {
"value": 0.5001196632779414,
"unit": "1"
},
"column_feed_water_mass_fraction": {
"value": 0.4998803367220586,
"unit": "1"
},
"distillate_mass": {
"value": 0.7106573503632283,
"unit": "kg/s"
},
"distillate_temperature": {
"value": 339.8738838298527,
"unit": "K"
},
"distillate_pressure": {
"value": 101325.0,
"unit": "Pa"
},
"distillate_enthalpy": {
"value": -1117.2827787155925,
"unit": "kJ/kg"
},
"distillate_methanol_mass_fraction": {
"value": 0.9378332377048909,
"unit": "1"
},
"distillate_water_mass_fraction": {
"value": 0.06216676229510909,
"unit": "1"
},
"flash_feed_mass": {
"value": 0.7106573503632283,
"unit": "kg/s"
},
"flash_feed_temperature": {
"value": 330.710626368568,
"unit": "K"
},
"flash_feed_pressure": {
"value": 70000.0,
"unit": "Pa"
},
"flash_feed_enthalpy": {
"value": -1117.2827785628429,
"unit": "kJ/kg"
},
"flash_feed_methanol_mass_fraction": {
"value": 0.9378332377048909,
"unit": "1"
},
"flash_feed_water_mass_fraction": {
"value": 0.06216676229510909,
"unit": "1"
},
"gas_mass": {
"value": 0.020426691452446737,
"unit": "kg/s"
},
"gas_temperature": {
"value": 330.710626368568,
"unit": "K"
},
"gas_pressure": {
"value": 70000.0,
"unit": "Pa"
},
"gas_enthalpy": {
"value": 46.671510831617,
"unit": "kJ/kg"
},
"gas_methanol_mass_fraction": {
"value": 0.9843964489437684,
"unit": "1"
},
"gas_water_mass_fraction": {
"value": 0.01560355105623159,
"unit": "1"
},
"liquid_mass": {
"value": 0.6902306588994397,
"unit": "kg/s"
},
"liquid_temperature": {
"value": 330.710626368568,
"unit": "K"
},
"liquid_pressure": {
"value": 70000.0,
"unit": "Pa"
},
"liquid_enthalpy": {
"value": -1151.7288507963228,
"unit": "kJ/kg"
},
"liquid_methanol_mass_fraction": {
"value": 0.9364552456495976,
"unit": "1"
},
"liquid_water_mass_fraction": {
"value": 0.06354475435040237,
"unit": "1"
},
"bottoms_mass": {
"value": 0.6732268957428085,
"unit": "kg/s"
},
"bottoms_temperature": {
"value": 371.65525532191174,
"unit": "K"
},
"bottoms_pressure": {
"value": 101325.0,
"unit": "Pa"
},
"bottoms_enthalpy": {
"value": -2081.499268318897,
"unit": "kJ/kg"
},
"bottoms_methanol_mass_fraction": {
"value": 0.03807261118878612,
"unit": "1"
},
"bottoms_water_mass_fraction": {
"value": 0.9619273888112139,
"unit": "1"
},
"hot_in_mass": {
"value": 2.0,
"unit": "kg/s"
},
"hot_in_temperature": {
"value": 368.15,
"unit": "K"
},
"hot_in_pressure": {
"value": 300000.0,
"unit": "Pa"
},
"hot_in_enthalpy": {
"value": -2142.823991983974,
"unit": "kJ/kg"
},
"hot_out_mass": {
"value": 2.0,
"unit": "kg/s"
},
"hot_out_temperature": {
"value": 352.7677340571156,
"unit": "K"
},
"hot_out_pressure": {
"value": 290000.0,
"unit": "Pa"
},
"hot_out_enthalpy": {
"value": -2210.296802705594,
"unit": "kJ/kg"
},
"shaft_power": {
"value": 0.4042109395812837,
"unit": "kW"
},
"heat_duty": {
"value": 134.9456214428584,
"unit": "kW"
},
"engine_area": {
"value": 5.0,
"unit": "m2"
},
"reboiler_raw": {
"value": -2729.6217947077225,
"unit": "kW"
},
"condenser_raw": {
"value": 2528.205228978433,
"unit": "kW"
},
"stage_count": {
"value": 8.0,
"unit": "1"
},
"methanol_purity": {
"value": 0.8945334882210616,
"unit": "1"
},
"gas_methanol_purity": {
"value": 0.9725802062188924,
"unit": "1"
},
"liquid_methanol_purity": {
"value": 0.8923059262391173,
"unit": "1"
},
"reboiler_duty": {
"value": 2729.6217947077225,
"unit": "kW"
},
"condenser_duty": {
"value": 2528.205228978433,
"unit": "kW"
},
"electric_power": {
"value": 0.4491232662014263,
"unit": "kW"
},
"hot_water_duty": {
"value": 134945.6,
"unit": "W"
}
},
"basis": {
"currency": "USD",
"annual_operating_hours": 8000,
"project_years": 10,
"discount_rate": 0.08,
"tax_rate": 0.2,
"cost_and_factor_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"basis_date": "2026-11-04",
"steam_specific_energy": {
"value": 2100,
"unit": "kJ/kg"
},
"cooling_water_heat_capacity": 4200,
"cooling_water_temperature_rise": 10,
"auxiliary_electric_power": {
"value": 5,
"unit": "kW"
},
"cooling_water_makeup_fraction": 0.02,
"water_density": 1000,
"water_consumption_fraction": 0.5,
"steam_price_per_kg": {
"value": 0.025,
"unit": "USD/kg"
},
"electricity_price_per_kWh": {
"value": 0.12,
"unit": "USD/kWh"
},
"hot_water_price_per_GJ": {
"value": 10,
"unit": "USD/GJ"
},
"makeup_water_price_per_m3": {
"value": 1,
"unit": "USD/m3"
},
"feed_price_per_kg": {
"value": 0.2,
"unit": "USD/kg"
},
"waste_treatment_price_per_kg": {
"value": 0.03,
"unit": "USD/kg"
},
"annual_fixed_operating_cost": {
"value": 100000,
"unit": "USD/year"
},
"working_capital": 100000,
"installed_cost_factor": 3,
"contingency_fraction": 0.15,
"carbon_price_per_tonne": {
"value": 30,
"unit": "USD/tCO2e"
},
"equipment_costs": [
{
"tag": "P-101",
"capacity_metric": "shaft_power",
"capacity_dimension": "power",
"reference_capacity": {
"value": 1000,
"unit": "W"
},
"reference_cost": 5000,
"scaling_exponent": 0.6,
"quote_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
{
"tag": "E-101",
"capacity_metric": "engine_area",
"capacity_dimension": "area",
"reference_capacity": {
"value": 5,
"unit": "m2"
},
"reference_cost": 15000,
"scaling_exponent": 0.6,
"quote_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
{
"tag": "T-101",
"capacity_metric": "feed_mass",
"capacity_dimension": "mass_flow",
"reference_capacity": {
"value": 1.3838832,
"unit": "kg/s"
},
"reference_cost": 200000,
"scaling_exponent": 0.6,
"quote_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
{
"tag": "S-101",
"capacity_metric": "distillate_mass",
"capacity_dimension": "mass_flow",
"reference_capacity": {
"value": 0.71,
"unit": "kg/s"
},
"reference_cost": 20000,
"scaling_exponent": 0.6,
"quote_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
],
"stream_disposition": {
"GAS": {
"product": 1,
"air": 0,
"wastewater": 0,
"solid": 0,
"recycle": 0
},
"LIQUID": {
"product": 1,
"air": 0,
"wastewater": 0,
"solid": 0,
"recycle": 0
},
"BOTTOMS": {
"product": 0,
"air": 0,
"wastewater": 1,
"solid": 0,
"recycle": 0
}
},
"product_price_per_kg": {
"GAS": {
"value": 0.7,
"unit": "USD/kg"
},
"LIQUID": {
"value": 0.6,
"unit": "USD/kg"
},
"BOTTOMS": {
"value": 0,
"unit": "USD/kg"
}
},
"minimum_methanol_mass_fraction": {
"GAS": 0,
"LIQUID": 0,
"BOTTOMS": 0
},
"emission_factors": {
"electricity": {
"value": 0.4,
"unit": "kgCO2e/kWh",
"source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
"steam": {
"value": 0.15,
"unit": "kgCO2e/kg",
"source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
"hot_water": {
"value": 60,
"unit": "kgCO2e/GJ",
"source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
},
"additional_emission_activities": []
},
"process_source": "가정 예제; 계약 fixture 기반 공정량, 현장 데이터 아님"
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
purchase_cost |
number | USD | Purchase cost |
initial_capital |
number | USD | Initial capital |
annual_operating_cost |
number | USD/year | Annual operating cost |
annual_revenue |
number | USD/year | Annual revenue |
annual_operating_margin |
number | USD/year | Annual operating margin |
npv |
number | USD | Npv |
irr |
number | 1 | Irr |
payback_years |
number | year | Payback years |
annual_CO2e |
number | kg CO2e/year | Annual co2e |
CO2e_per_kg_product |
number | kg CO2e/kg | Co2e per kg product |
annual_water_withdrawal |
number | m3/year | Annual water withdrawal |
annual_water_consumption |
number | m3/year | Annual water consumption |
annual_waste_mass |
number | kg/year | Annual waste mass |
annual_air_mass |
number | kg/year | Annual air mass |
annual_product_mass |
number | kg/year | Annual product mass |
operating_cost_per_kg_product |
number | USD/kg | Operating cost per kg product |
annual_cost_breakdown |
object | nested structure / not applicable | Annual cost breakdown |
equipment_costs |
array | nested structure / not applicable | Equipment costs |
environmental_inventory |
object | nested structure / not applicable | Environmental inventory |
cash_flow_schedule |
array | nested structure / not applicable | Cash flow schedule |
project_cash_flows |
array | nested structure / not applicable | Project cash flows |
basis_source |
string | nested structure / not applicable | Basis source |
process_source |
string | nested structure / not applicable | Process source |
basis_date |
string | nested structure / not applicable | Basis date |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.assessment.
Example assumptions: 공급원별 비용/배출계수·설비 견적·설치계수는 사용자 입력; 현재 시장 가격 자동 조회 없음; 계산된 스팀·온수 공급 열과 펌프 및 지정 보조 전력 포함; 장치 견적 목록의 범위는 입력 책임; 냉각수 순환량×지정 보충률로 취수 산정; 배관/밸브 등 투자비는 설치계수 또는 견적에 포함해야 함; 처분/판매 비율과 순도 기준 명시; 회수 제품의 재순환 공정은 자동 재수렴하지 않음; 구매 에너지는 scope2로 분류; 현장 보일러는 추가 활동 및 경계 변경이 필요; 가정 시나리오 경제성·환경성 평가이며 투자 수익·배출 허가·실제 성능 인증 아님
58. balance.recycle — 전환·회수·퍼지 재순환 수지
Purpose / operating model: 단일 반응물 선형 정상 재순환 고정점
Equations / algorithm: Freactor=Ffresh/(1-(1-X)*recovery*(1-purge))
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
fresh_reactant_flow |
yes | quantity {value, unit} or SI number | mol/s | Fresh reactant flow; molar_flow |
single_pass_conversion |
yes | number | 1 | Single pass conversion; fraction, 0–1 unless a stricter method condition applies |
unreacted_recovery |
yes | number | 1 | Unreacted recovery; fraction, 0–1 unless a stricter method condition applies |
purge_fraction |
yes | number | 1 | Purge fraction; fraction, 0–1 unless a stricter method condition applies |
Complete assumed input example:
{
"fresh_reactant_flow": 100,
"single_pass_conversion": 0.5,
"unreacted_recovery": 0.9,
"purge_fraction": 0.1
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
reactor_reactant_feed |
number | mol/s | Reactor reactant feed |
recycle_flow |
number | mol/s | Recycle flow |
converted_reactant_flow |
number | mol/s | Converted reactant flow |
purge_flow |
number | mol/s | Purge flow |
unrecovered_flow |
number | mol/s | Unrecovered flow |
overall_conversion |
number | 1 | Overall conversion |
fresh_balance_residual |
number | mol/s | Fresh balance residual |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.advanced.
Example assumptions: 단일 반응물·지정 단회 전환율/미반응 회수율·퍼지; 선형 재순환 정상 고정점 해석해; 다성분 비선형 열역학 재순환은 별도 DWSIM 공정 필요
59. environment.treatment — 대기·폐수·폐기물 처리단계 부하 비교
Purpose / operating model: 제공 물질별 제거율·직렬 처리 단계; 제거=소멸 아님
Equations / algorithm: outlet=inlet*product(1-removal_fraction)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
annual_operating_hours |
yes | integer | declared in object / not applicable | Annual operating hours |
inlet_pollutant_mass_flows |
yes | object | declared in object / not applicable | Inlet pollutant mass flows |
performance_source |
yes | string | declared in object / not applicable | Performance source |
stages |
yes | array | declared in object / not applicable | Stages |
Complete assumed input example:
{
"annual_operating_hours": 8000,
"inlet_pollutant_mass_flows": {
"VOC": {
"value": 0.1,
"unit": "kg/s"
}
},
"performance_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"stages": [
{
"name": "capture",
"removal_fractions": {
"VOC": 0.9
},
"electric_power": 1000,
"coefficient_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
{
"name": "polish",
"removal_fractions": {
"VOC": 0.5
},
"electric_power": 500,
"coefficient_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
outlet_pollutant_mass_flows |
object | kg/s | Outlet pollutant mass flows |
annual_outlet_pollutant_mass |
object | kg/year | Annual outlet pollutant mass |
removed_loads |
object | kg/s | Removed loads |
electric_power |
number | W | Electric power |
annual_electricity |
number | kWh/year | Annual electricity |
stages |
array | nested structure / not applicable | Stages |
performance_source |
string | nested structure / not applicable | Performance source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.assessment.
Example assumptions: 제공 제거율의 직렬 처리단계 대안 모델; 물질별 제거 부하를 별도로 기록; 제거량은 소멸을 의미하지 않으며 포집물·슬러지·전환 생성물의 후속 수지는 별도; 대기 확산·독성·수질 기준·허가 적합 판정 별도
60. environment.receiving_water — 방류 수질·열오염 완전혼합 수지
Purpose / operating model: 단순 완전혼합·열부하; 방류 허가 모델 아님
Equations / algorithm: Cmix=sum(Q*C)/sum(Q); heat=Q*rho*Cp*dT
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
receiving_volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Receiving volume flow; volume_flow |
effluent_volume_flow |
yes | quantity {value, unit} or SI number | m3/s | Effluent volume flow; volume_flow |
receiving_temperature |
yes | quantity {value, unit} or SI number | K | Receiving temperature; temperature |
effluent_temperature |
yes | quantity {value, unit} or SI number | K | Effluent temperature; temperature |
density |
yes | quantity {value, unit} or SI number | kg/m3 | Density; density |
heat_capacity |
yes | quantity {value, unit} or SI number | J/(kg*K) | Heat capacity; heat_capacity |
mixing_basis |
yes | string | declared in object / not applicable | Mixing basis |
receiving_concentrations_kg_m3 |
yes | object | declared in object / not applicable | Receiving concentrations kg m3 |
effluent_concentrations_kg_m3 |
yes | object | declared in object / not applicable | Effluent concentrations kg m3 |
Complete assumed input example:
{
"receiving_volume_flow": 9,
"effluent_volume_flow": 1,
"receiving_temperature": 293.15,
"effluent_temperature": 313.15,
"density": 1000,
"heat_capacity": 4200,
"mixing_basis": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"receiving_concentrations_kg_m3": {
"A": 0.001
},
"effluent_concentrations_kg_m3": {
"A": 0.011
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
mixed_temperature |
number | K | Mixed temperature |
mixed_concentrations_kg_m3 |
object | kg/m3 | Mixed concentrations kg m3 |
thermal_discharge |
number | W | Thermal discharge |
mixing_basis |
string | nested structure / not applicable | Mixing basis |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.assessment.
Example assumptions: 정상 완전 혼합·동일 밀도/비열·무반응·외부 열교환 없음; 열오염 예비 부하와 희석 수지이며 혼합대·수생태 영향·방류 허가 모델 아님
61. environment.noise — 복수 음원 예비 소음 합산
Purpose / operating model: 독립 점음원 자유음장·지정 감쇠; 법적 적합 판정 별도
Equations / algorithm: Lp=Lw+10log(Qdirectivity/(4pi*r^2)); total=10log(sum(10^(Lp/10)))
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
acoustic_basis |
yes | string | declared in object / not applicable | Acoustic basis |
sources |
yes | array | declared in object / not applicable | Sources |
Complete assumed input example:
{
"acoustic_basis": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"sources": [
{
"name": "P1",
"sound_power_dBA": 90,
"distance": 10,
"directivity_factor": 1,
"additional_attenuation_dB": 0
},
{
"name": "P2",
"sound_power_dBA": 90,
"distance": 10,
"directivity_factor": 1,
"additional_attenuation_dB": 0
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
receiver_level_dBA |
number | dBA | Receiver level dba |
sources |
array | nested structure / not applicable | Sources |
acoustic_basis |
string | nested structure / not applicable | Acoustic basis |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.assessment.
Example assumptions: 독립 점음원·자유음장 기하 감쇠와 지정 지향성/추가 감쇠; 대수 합산; A 가중 음향파워 입력; 반사·회절·기상·주파수별 전파·법적 소음 적합 판정 별도
62. environment.impacts — 인벤토리 영향범주 특성화
Purpose / operating model: 사용자 방법/연도별 특성화계수·범주별 합산; LCA 인증 아님
Equations / algorithm: impact_category=sum(inventory*characterization_factor)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
inventory |
yes | object | declared in object / not applicable | Inventory |
characterization_source |
yes | string | declared in object / not applicable | Characterization source |
characterization_factors |
yes | array | declared in object / not applicable | Characterization factors |
Complete assumed input example:
{
"inventory": {
"CO2": {
"value": 100,
"unit": "kg/year"
},
"CH4": {
"value": 2,
"unit": "kg/year"
}
},
"characterization_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"characterization_factors": [
{
"flow": "CO2",
"category": "GWP_example",
"inventory_unit": "kg/year",
"impact_unit": "kgCO2e/year",
"factor": 1
},
{
"flow": "CH4",
"category": "GWP_example",
"inventory_unit": "kg/year",
"impact_unit": "kgCO2e/year",
"factor": 25
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
impacts |
object | nested structure / not applicable | Impacts |
contributions |
array | nested structure / not applicable | Contributions |
characterization_source |
string | nested structure / not applicable | Characterization source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.assessment.
Example assumptions: 사용자 인벤토리×방법/연도별 특성화계수; 영향 범주별 합산; 서로 다른 범주를 임의 합산/가중하지 않음; 누락 인벤토리·시스템 경계·공급망 데이터와 ISO LCA 검토 별도
63. thermal.pinch_segmented — 잠열·구간 CP 핀치 분석
Purpose / operating model: 구간별 CP·등온 잠열 이벤트 캐스케이드; 열교환망 상세 합성 별도
Equations / algorithm: temperature shift; latent jumps + sensible cascade
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
minimum_approach |
yes | quantity {value, unit} or SI number | delta_K | Minimum approach; temperature_difference |
streams |
yes | array | declared in object / not applicable | Streams |
Complete assumed input example:
{
"minimum_approach": 10,
"streams": [
{
"name": "hot",
"kind": "hot",
"data_source": "고도화 검증용 가정값. 실측 속도상수·열전달·시장 분포·상관 자료 아님.",
"segments": [
{
"inlet_temperature": 400,
"outlet_temperature": 350,
"heat_capacity_flow_W_K": 100
},
{
"inlet_temperature": 350,
"outlet_temperature": 300,
"heat_capacity_flow_W_K": 200
}
],
"latent_loads": [
{
"temperature": 350,
"heat_duty": 1000
}
]
},
{
"name": "cold",
"kind": "cold",
"data_source": "고도화 검증용 가정값. 실측 속도상수·열전달·시장 분포·상관 자료 아님.",
"segments": [
{
"inlet_temperature": 290,
"outlet_temperature": 340,
"heat_capacity_flow_W_K": 200
},
{
"inlet_temperature": 340,
"outlet_temperature": 390,
"heat_capacity_flow_W_K": 100
}
],
"latent_loads": [
{
"temperature": 340,
"heat_duty": 1000
}
]
}
]
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
minimum_heating |
integer | W | Minimum heating |
minimum_cooling |
number | W | Minimum cooling |
maximum_heat_recovery |
number | W | Maximum heat recovery |
total_hot_duty |
number | W | Total hot duty |
total_cold_duty |
number | W | Total cold duty |
energy_residual |
number | W | Energy residual |
intervals |
array | nested structure / not applicable | Intervals |
grand_composite_curve |
array | nested structure / not applicable | Grand composite curve |
hot_composite |
array | nested structure / not applicable | Hot composite |
cold_composite |
array | nested structure / not applicable | Cold composite |
pinch_temperatures |
array | nested structure / not applicable | Pinch temperatures |
sensible_segments |
array | nested structure / not applicable | Sensible segments |
latent_events |
array | nested structure / not applicable | Latent events |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.refinement.
Example assumptions: 구간별 일정 CP·등온 잠열의 온도 시프트와 열 캐스케이드; 잠열 전후 잔차 모두 확인; 공급 가능한 유틸리티 온도/압력과 열교환망·면적·경제 최적화는 별도; 제공된 데이터 구간 내 목표값이며 실제 DWSIM 열부하를 자동 감산하지 않음
64. thermal.exchanger_rating — 오염저항·ε-NTU 출구온도 성능평가
Purpose / operating model: 향류/병류 일정 CP 두 유체; 출구 온도·부하·엔트로피
Equations / algorithm: 1/Udirty=1/Uclean+Rf; Q=epsilon*Cmin*(Th-Tc)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
arrangement |
yes | string | declared in object / not applicable | Arrangement; choices: ('countercurrent', 'cocurrent') |
hot_inlet_temperature |
yes | quantity {value, unit} or SI number | K | Hot inlet temperature; temperature |
cold_inlet_temperature |
yes | quantity {value, unit} or SI number | K | Cold inlet temperature; temperature |
hot_mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Hot mass flow; mass_flow |
cold_mass_flow |
yes | quantity {value, unit} or SI number | kg/s | Cold mass flow; mass_flow |
hot_heat_capacity |
yes | quantity {value, unit} or SI number | J/(kg*K) | Hot heat capacity; heat_capacity |
cold_heat_capacity |
yes | quantity {value, unit} or SI number | J/(kg*K) | Cold heat capacity; heat_capacity |
clean_overall_coefficient |
yes | quantity {value, unit} or SI number | W/(m2*K) | Clean overall coefficient; heat_transfer_coefficient |
total_fouling_resistance_m2_K_W |
yes | number | declared in object / not applicable | Total fouling resistance m2 k w |
area |
yes | quantity {value, unit} or SI number | m2 | Area; area |
coefficient_source |
yes | string | declared in object / not applicable | Coefficient source |
Complete assumed input example:
{
"arrangement": "countercurrent",
"hot_inlet_temperature": 400,
"cold_inlet_temperature": 300,
"hot_mass_flow": 1,
"cold_mass_flow": 1,
"hot_heat_capacity": 1000,
"cold_heat_capacity": 1000,
"clean_overall_coefficient": 100,
"total_fouling_resistance_m2_K_W": 0.001,
"area": 10,
"coefficient_source": "고도화 검증용 가정값. 실측 속도상수·열전달·시장 분포·상관 자료 아님."
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
heat_duty |
number | W | Heat duty |
hot_outlet_temperature |
number | K | Hot outlet temperature |
cold_outlet_temperature |
number | K | Cold outlet temperature |
effectiveness |
number | 1 | Effectiveness |
NTU |
number | 1 | Ntu |
dirty_overall_coefficient |
number | W/(m2*K) | Dirty overall coefficient |
minimum_terminal_approach |
number | delta_K | Minimum terminal approach |
entropy_generation |
number | W/K | Entropy generation |
energy_residual |
number | W | Energy residual |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.refinement.
Example assumptions: 향류/병류 두 유체 ε-NTU; 일정 CP·무상변화·무외부 열손실; 1/Udirty=1/Uclean+Rf; Rf는 동일 면적 기준의 총 오염저항; 압력손실·관/쉘 상세 구조·2상·비등온 물성 변화는 별도
65. reactor.nonisothermal — 비등온 PFR·배치 반응·냉각 연성
Purpose / operating model: 단일 power-law·Arrhenius·일정 밀도/CP·적응 RK4; 강성 다중반응 제외
Equations / algorithm: dC/dt=-k(T) C^n; rhoCp*dT/dt=-deltaH*r-UAvol*(T-Tc)
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
reactor_type |
yes | string | declared in object / not applicable | Reactor type; choices: ('PFR', 'batch') |
inlet_concentration_mol_m3 |
yes | integer | declared in object / not applicable | Inlet concentration mol m3 |
inlet_temperature |
yes | quantity {value, unit} or SI number | K | Inlet temperature; temperature |
reference_temperature |
yes | quantity {value, unit} or SI number | K | Reference temperature; temperature |
reference_rate_constant_SI |
yes | number | declared in object / not applicable | Reference rate constant si |
activation_energy_J_mol |
yes | integer | declared in object / not applicable | Activation energy j mol |
reaction_order |
yes | integer | declared in object / not applicable | Reaction order |
reaction_enthalpy_J_mol |
yes | integer | declared in object / not applicable | Reaction enthalpy j mol |
volumetric_heat_capacity_J_m3_K |
yes | integer | declared in object / not applicable | Volumetric heat capacity j m3 k |
volumetric_heat_transfer_W_m3_K |
yes | integer | declared in object / not applicable | Volumetric heat transfer w m3 k |
coolant_temperature |
yes | quantity {value, unit} or SI number | K | Coolant temperature; temperature |
kinetics_and_heat_transfer_source |
yes | string | declared in object / not applicable | Kinetics and heat transfer source |
minimum_valid_temperature |
yes | quantity {value, unit} or SI number | K | Minimum valid temperature; temperature |
maximum_valid_temperature |
yes | quantity {value, unit} or SI number | K | Maximum valid temperature; temperature |
active_volume |
yes | quantity {value, unit} or SI number | m3 | Active volume; volume |
volume_flow |
optional / conditional | quantity {value, unit} or SI number | m3/s | Volume flow; volume_flow |
reaction_time |
optional / conditional | quantity {value, unit} or SI number | s | Reaction time; time |
relative_tolerance |
optional / conditional | number | declared in object / not applicable | Relative tolerance |
maximum_steps |
optional / conditional | integer | declared in object / not applicable | Maximum steps |
Complete assumed input example:
{
"reactor_type": "PFR",
"inlet_concentration_mol_m3": 100,
"inlet_temperature": 300,
"reference_temperature": 300,
"reference_rate_constant_SI": 0.1,
"activation_energy_J_mol": 50000,
"reaction_order": 1,
"reaction_enthalpy_J_mol": -10000,
"volumetric_heat_capacity_J_m3_K": 4000000,
"volumetric_heat_transfer_W_m3_K": 1000,
"coolant_temperature": 290,
"kinetics_and_heat_transfer_source": "고도화 검증용 가정값. 실측 속도상수·열전달·시장 분포·상관 자료 아님.",
"minimum_valid_temperature": 280,
"maximum_valid_temperature": 360,
"active_volume": 0.1,
"volume_flow": 0.01
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
outlet_concentration_mol_m3 |
number | mol/m3 | Outlet concentration mol m3 |
outlet_temperature |
number | K | Outlet temperature |
conversion |
number | 1 | Conversion |
residence_or_reaction_time |
number | s | Residence or reaction time |
reaction_heat_released |
number | W | Reaction heat released |
external_heat_removed |
number | W | External heat removed |
sensible_heat |
number | W | Sensible heat |
energy_residual |
number | W | Energy residual |
accepted_steps |
integer | nested structure / not applicable | Accepted steps |
attempts |
integer | nested structure / not applicable | Attempts |
maximum_scaled_step_error |
number | nested structure / not applicable | Maximum scaled step error |
profile |
array | nested structure / not applicable | Profile |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.refinement.
Example assumptions: 단일 비가역 power-law·Arrhenius·일정 밀도/부피 열용량; PFR 체류좌표 또는 정용적 배치; RK4 두 반간격/한 전체간격 오차 제어; 지정 유효 온도 범위·단계 한계에서 실패 시 결과 미반환; 양의 제거열은 냉각, 음수는 외부 가열; 강성 다중반응·안전 폭주 인증은 별도
66. design.multivariable — 다변수 제약 조합 탐색
Purpose / operating model: 1~4변수·2500개 유한 조합 내 최선; 연속 전역 최적성 보장 없음
Equations / algorithm: feasible Cartesian grid argmin/argmax
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
method |
yes | string | declared in object / not applicable | Method |
base_inputs |
yes | object | declared in object / not applicable | Base inputs |
variables |
yes | object | declared in object / not applicable | Variables |
objective |
yes | string | declared in object / not applicable | Objective |
direction |
yes | string | declared in object / not applicable | Direction; choices: ('min', 'max') |
constraints |
optional / conditional | object | declared in object / not applicable | Constraints |
Complete assumed input example:
{
"method": "thermal.exchanger_rating",
"base_inputs": {
"arrangement": "countercurrent",
"hot_inlet_temperature": 400,
"cold_inlet_temperature": 300,
"hot_mass_flow": 1,
"cold_mass_flow": 1,
"hot_heat_capacity": 1000,
"cold_heat_capacity": 1000,
"clean_overall_coefficient": 100,
"total_fouling_resistance_m2_K_W": 0.001,
"area": 10,
"coefficient_source": "고도화 검증용 가정값. 실측 속도상수·열전달·시장 분포·상관 자료 아님."
},
"variables": {
"area": [
5,
10,
15
],
"total_fouling_resistance_m2_K_W": [
0,
0.001,
0.002
]
},
"objective": "heat_duty",
"direction": "max",
"constraints": {
"cold_outlet_temperature": {
"maximum": 360
}
}
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
best |
object | nested structure / not applicable | Best |
evaluations |
array | nested structure / not applicable | Evaluations |
feasible_count |
integer | nested structure / not applicable | Feasible count |
evaluated_count |
integer | nested structure / not applicable | Evaluated count |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.refinement.
Example assumptions: 유한 후보 조합 전수 탐색·제약 검사; 연속/전역 최적성 보장 없음; 입력값·단위·각 계산기의 물리 유효범위를 유지하며 실패 조합을 별도 기록
67. assessment.risk — 상관 단가·배출계수 경제환경 불확실성
Purpose / operating model: 고정 공정량·Gaussian copula·일양/삼각 분포; 20~500표본
Equations / algorithm: PSD Cholesky; inverse marginal CDF; coupled NPV/CO2e quantiles
Input parameters (required means the top-level key is mandatory; conditional requirements are also checked by the calculator):
| Parameter | Required | Type | SI unit / convention | Meaning / condition |
|---|---|---|---|---|
process_metrics |
yes | object | declared in object / not applicable | Process metrics |
basis |
yes | object | declared in object / not applicable | Basis |
process_source |
yes | string | declared in object / not applicable | Process source |
distributions |
yes | object | declared in object / not applicable | Distributions |
latent_correlation |
yes | array | declared in object / not applicable | Latent correlation |
samples |
yes | integer | declared in object / not applicable | Samples |
seed |
yes | integer | declared in object / not applicable | Seed |
uncertainty_source |
yes | string | declared in object / not applicable | Uncertainty source |
Complete assumed input example:
{
"process_metrics": {
"feed_mass": {
"value": 1.3838832,
"unit": "kg/s"
},
"feed_temperature": {
"value": 293.15,
"unit": "K"
},
"feed_pressure": {
"value": 101325.0,
"unit": "Pa"
},
"feed_enthalpy": {
"value": -1829.7033412351411,
"unit": "kJ/kg"
},
"feed_methanol_mass_fraction": {
"value": 0.5001196632779414,
"unit": "1"
},
"feed_water_mass_fraction": {
"value": 0.4998803367220586,
"unit": "1"
},
"pumped_mass": {
"value": 1.3838832,
"unit": "kg/s"
},
"pumped_temperature": {
"value": 293.1699670003287,
"unit": "K"
},
"pumped_pressure": {
"value": 301325.0,
"unit": "Pa"
},
"pumped_enthalpy": {
"value": -1829.4112559390717,
"unit": "kJ/kg"
},
"pumped_methanol_mass_fraction": {
"value": 0.5001196632779414,
"unit": "1"
},
"pumped_water_mass_fraction": {
"value": 0.4998803367220586,
"unit": "1"
},
"heated_mass": {
"value": 1.3838832,
"unit": "kg/s"
},
"heated_temperature": {
"value": 319.42640660747713,
"unit": "K"
},
"heated_pressure": {
"value": 281325.0,
"unit": "Pa"
},
"heated_enthalpy": {
"value": -1731.8989766316238,
"unit": "kJ/kg"
},
"heated_methanol_mass_fraction": {
"value": 0.5001196632779414,
"unit": "1"
},
"heated_water_mass_fraction": {
"value": 0.4998803367220586,
"unit": "1"
},
"column_feed_mass": {
"value": 1.3838832,
"unit": "kg/s"
},
"column_feed_temperature": {
"value": 319.4795128904956,
"unit": "K"
},
"column_feed_pressure": {
"value": 101325.0,
"unit": "Pa"
},
"column_feed_enthalpy": {
"value": -1731.8989394475432,
"unit": "kJ/kg"
},
"column_feed_methanol_mass_fraction": {
"value": 0.5001196632779414,
"unit": "1"
},
"column_feed_water_mass_fraction": {
"value": 0.4998803367220586,
"unit": "1"
},
"distillate_mass": {
"value": 0.7106573503632283,
"unit": "kg/s"
},
"distillate_temperature": {
"value": 339.8738838298527,
"unit": "K"
},
"distillate_pressure": {
"value": 101325.0,
"unit": "Pa"
},
"distillate_enthalpy": {
"value": -1117.2827787155925,
"unit": "kJ/kg"
},
"distillate_methanol_mass_fraction": {
"value": 0.9378332377048909,
"unit": "1"
},
"distillate_water_mass_fraction": {
"value": 0.06216676229510909,
"unit": "1"
},
"flash_feed_mass": {
"value": 0.7106573503632283,
"unit": "kg/s"
},
"flash_feed_temperature": {
"value": 330.710626368568,
"unit": "K"
},
"flash_feed_pressure": {
"value": 70000.0,
"unit": "Pa"
},
"flash_feed_enthalpy": {
"value": -1117.2827785628429,
"unit": "kJ/kg"
},
"flash_feed_methanol_mass_fraction": {
"value": 0.9378332377048909,
"unit": "1"
},
"flash_feed_water_mass_fraction": {
"value": 0.06216676229510909,
"unit": "1"
},
"gas_mass": {
"value": 0.020426691452446737,
"unit": "kg/s"
},
"gas_temperature": {
"value": 330.710626368568,
"unit": "K"
},
"gas_pressure": {
"value": 70000.0,
"unit": "Pa"
},
"gas_enthalpy": {
"value": 46.671510831617,
"unit": "kJ/kg"
},
"gas_methanol_mass_fraction": {
"value": 0.9843964489437684,
"unit": "1"
},
"gas_water_mass_fraction": {
"value": 0.01560355105623159,
"unit": "1"
},
"liquid_mass": {
"value": 0.6902306588994397,
"unit": "kg/s"
},
"liquid_temperature": {
"value": 330.710626368568,
"unit": "K"
},
"liquid_pressure": {
"value": 70000.0,
"unit": "Pa"
},
"liquid_enthalpy": {
"value": -1151.7288507963228,
"unit": "kJ/kg"
},
"liquid_methanol_mass_fraction": {
"value": 0.9364552456495976,
"unit": "1"
},
"liquid_water_mass_fraction": {
"value": 0.06354475435040237,
"unit": "1"
},
"bottoms_mass": {
"value": 0.6732268957428085,
"unit": "kg/s"
},
"bottoms_temperature": {
"value": 371.65525532191174,
"unit": "K"
},
"bottoms_pressure": {
"value": 101325.0,
"unit": "Pa"
},
"bottoms_enthalpy": {
"value": -2081.499268318897,
"unit": "kJ/kg"
},
"bottoms_methanol_mass_fraction": {
"value": 0.03807261118878612,
"unit": "1"
},
"bottoms_water_mass_fraction": {
"value": 0.9619273888112139,
"unit": "1"
},
"hot_in_mass": {
"value": 2.0,
"unit": "kg/s"
},
"hot_in_temperature": {
"value": 368.15,
"unit": "K"
},
"hot_in_pressure": {
"value": 300000.0,
"unit": "Pa"
},
"hot_in_enthalpy": {
"value": -2142.823991983974,
"unit": "kJ/kg"
},
"hot_out_mass": {
"value": 2.0,
"unit": "kg/s"
},
"hot_out_temperature": {
"value": 352.7677340571156,
"unit": "K"
},
"hot_out_pressure": {
"value": 290000.0,
"unit": "Pa"
},
"hot_out_enthalpy": {
"value": -2210.296802705594,
"unit": "kJ/kg"
},
"shaft_power": {
"value": 0.4042109395812837,
"unit": "kW"
},
"heat_duty": {
"value": 134.9456214428584,
"unit": "kW"
},
"engine_area": {
"value": 5.0,
"unit": "m2"
},
"reboiler_raw": {
"value": -2729.6217947077225,
"unit": "kW"
},
"condenser_raw": {
"value": 2528.205228978433,
"unit": "kW"
},
"stage_count": {
"value": 8.0,
"unit": "1"
},
"methanol_purity": {
"value": 0.8945334882210616,
"unit": "1"
},
"gas_methanol_purity": {
"value": 0.9725802062188924,
"unit": "1"
},
"liquid_methanol_purity": {
"value": 0.8923059262391173,
"unit": "1"
},
"reboiler_duty": {
"value": 2729.6217947077225,
"unit": "kW"
},
"condenser_duty": {
"value": 2528.205228978433,
"unit": "kW"
},
"electric_power": {
"value": 0.4491232662014263,
"unit": "kW"
},
"hot_water_duty": {
"value": 134945.6,
"unit": "W"
}
},
"basis": {
"currency": "USD",
"annual_operating_hours": 8000,
"project_years": 10,
"discount_rate": 0.08,
"tax_rate": 0.2,
"cost_and_factor_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님.",
"basis_date": "2026-11-04",
"steam_specific_energy": {
"value": 2100,
"unit": "kJ/kg"
},
"cooling_water_heat_capacity": 4200,
"cooling_water_temperature_rise": 10,
"auxiliary_electric_power": {
"value": 5,
"unit": "kW"
},
"cooling_water_makeup_fraction": 0.02,
"water_density": 1000,
"water_consumption_fraction": 0.5,
"steam_price_per_kg": {
"value": 0.025,
"unit": "USD/kg"
},
"electricity_price_per_kWh": {
"value": 0.12,
"unit": "USD/kWh"
},
"hot_water_price_per_GJ": {
"value": 10,
"unit": "USD/GJ"
},
"makeup_water_price_per_m3": {
"value": 1,
"unit": "USD/m3"
},
"feed_price_per_kg": {
"value": 0.2,
"unit": "USD/kg"
},
"waste_treatment_price_per_kg": {
"value": 0.03,
"unit": "USD/kg"
},
"annual_fixed_operating_cost": {
"value": 100000,
"unit": "USD/year"
},
"working_capital": 100000,
"installed_cost_factor": 3,
"contingency_fraction": 0.15,
"carbon_price_per_tonne": {
"value": 30,
"unit": "USD/tCO2e"
},
"equipment_costs": [
{
"tag": "P-101",
"capacity_metric": "shaft_power",
"capacity_dimension": "power",
"reference_capacity": {
"value": 1000,
"unit": "W"
},
"reference_cost": 5000,
"scaling_exponent": 0.6,
"quote_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
{
"tag": "E-101",
"capacity_metric": "engine_area",
"capacity_dimension": "area",
"reference_capacity": {
"value": 5,
"unit": "m2"
},
"reference_cost": 15000,
"scaling_exponent": 0.6,
"quote_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
{
"tag": "T-101",
"capacity_metric": "feed_mass",
"capacity_dimension": "mass_flow",
"reference_capacity": {
"value": 1.3838832,
"unit": "kg/s"
},
"reference_cost": 200000,
"scaling_exponent": 0.6,
"quote_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
{
"tag": "S-101",
"capacity_metric": "distillate_mass",
"capacity_dimension": "mass_flow",
"reference_capacity": {
"value": 0.71,
"unit": "kg/s"
},
"reference_cost": 20000,
"scaling_exponent": 0.6,
"quote_source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
],
"stream_disposition": {
"GAS": {
"product": 1,
"air": 0,
"wastewater": 0,
"solid": 0,
"recycle": 0
},
"LIQUID": {
"product": 1,
"air": 0,
"wastewater": 0,
"solid": 0,
"recycle": 0
},
"BOTTOMS": {
"product": 0,
"air": 0,
"wastewater": 1,
"solid": 0,
"recycle": 0
}
},
"product_price_per_kg": {
"GAS": {
"value": 0.7,
"unit": "USD/kg"
},
"LIQUID": {
"value": 0.6,
"unit": "USD/kg"
},
"BOTTOMS": {
"value": 0,
"unit": "USD/kg"
}
},
"minimum_methanol_mass_fraction": {
"GAS": 0,
"LIQUID": 0,
"BOTTOMS": 0
},
"emission_factors": {
"electricity": {
"value": 0.4,
"unit": "kgCO2e/kWh",
"source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
"steam": {
"value": 0.15,
"unit": "kgCO2e/kg",
"source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
},
"hot_water": {
"value": 60,
"unit": "kgCO2e/GJ",
"source": "사용자 검토용 가정 예제. 실제 견적·배출계수·현장 성능 데이터 아님."
}
},
"additional_emission_activities": []
},
"process_source": "가정 공정량; 실제 스냅샷 평가는 별도 DB 연결",
"distributions": {
"feed_price_per_kg.value": {
"distribution": "uniform",
"minimum": 0.18,
"maximum": 0.22
},
"steam_price_per_kg.value": {
"distribution": "triangular",
"minimum": 0.02,
"mode": 0.025,
"maximum": 0.03
},
"emission_factors.steam.value": {
"distribution": "uniform",
"minimum": 0.12,
"maximum": 0.18
}
},
"latent_correlation": [
[
1,
0.5,
0
],
[
0.5,
1,
0.3
],
[
0,
0.3,
1
]
],
"samples": 40,
"seed": 42,
"uncertainty_source": "고도화 검증용 가정값. 실측 속도상수·열전달·시장 분포·상관 자료 아님."
}
Output parameters (result["values"]; units are returned separately in result["units"]):
| Output | Type | Unit | Meaning |
|---|---|---|---|
npv_mean |
number | USD | Npv mean |
npv_p05 |
number | USD | Npv p05 |
npv_p50 |
number | USD | Npv p50 |
npv_p95 |
number | USD | Npv p95 |
probability_positive_npv |
number | 1 | Probability positive npv |
annual_CO2e_mean |
number | kg CO2e/year | Annual co2e mean |
annual_CO2e_p05 |
number | kg CO2e/year | Annual co2e p05 |
annual_CO2e_p95 |
number | kg CO2e/year | Annual co2e p95 |
operating_cost_statistics |
object | nested structure / not applicable | Operating cost statistics |
samples |
integer | nested structure / not applicable | Samples |
seed |
integer | nested structure / not applicable | Seed |
latent_correlation |
array | nested structure / not applicable | Latent correlation |
distribution_order |
array | nested structure / not applicable | Distribution order |
input_samples |
array | nested structure / not applicable | Input samples |
outcomes |
array | nested structure / not applicable | Outcomes |
process_source |
string | nested structure / not applicable | Process source |
uncertainty_source |
string | nested structure / not applicable | Uncertainty source |
Full structured result, including nested rows, assumptions, warnings and checks: result JSON. Implementation: plantdesign.calculations.refinement.
Example assumptions: 고정한 공정 스냅샷에서 평가 단가/배출계수만 확률화; 운전조건 변화에 대한 DWSIM 재수렴은 수행하지 않음; 상관행렬은 Gaussian copula의 잠재 정규 상관이며 변환한 단가의 Pearson 상관과 동일하지 않을 수 있음; 준정부호 Cholesky·일양/삼각 주변분포·고정 seed; 동일 seed는 공정 대안에 공통 난수 사용; 분포·상관·표본 분위수는 사용자 가정; 실제 시장/배출 예측이나 수익 보장 아님
Metadata
Release files for plantdesign-toolkit 0.11.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| plantdesign_toolkit-0.11.0.tar.gz | 895.4 kB | With provenance | Details for plantdesign_toolkit-0.11.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| plantdesign_toolkit-0.11.0-py3-none-any.whl | Python 3 | none | any | Details for plantdesign_toolkit-0.11.0-py3-none-any.whl |
Total release size: 1.3 MB
Release files / plantdesign_toolkit-0.11.0.tar.gz
| Download URL | plantdesign_toolkit-0.11.0.tar.gz |
|---|---|
| Size | 895.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
69cf339180bfe486f0201ca076cc8642a28aa43e76a6259672417967f9ecaffa
|
|
BLAKE2b-256 checksum How to use checksums |
f472832c1cbd8ea39634e0508fc54b77140c438baac381eb9c9a36d2309624a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / plantdesign_toolkit-0.11.0-py3-none-any.whl
| Download URL | plantdesign_toolkit-0.11.0-py3-none-any.whl |
|---|---|
| Size | 407.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b5ef01e087e6f19a7f53b1b0d6be34fd4347c2166821be693b3fa650acb152c3
|
|
BLAKE2b-256 checksum How to use checksums |
2c349ed298df31f69e006ca12a41a44c7dbb48db9a4d09196a1c76d79c915d57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logSecurity for plantdesign-toolkit 0.11.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for plantdesign_toolkit-0.11.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.