Last updated: 2025-10-06 14 min read

설정 파일 상세 설명

파일 구조 개요 (JSON v3.0)

JSON 설정 파일은 네 가지 주요 섹션으로 구성됩니다:

json
{
    "version": "3.0",              // 파일 형식 버전 (v3.0 권장)
    "title": "...",                 // 시뮬레이션 제목
    "description": "...",           // 설명 (선택사항)
    "id": "...",                    // 고유 식별자 (선택사항)
    "reactorConfig": { ... },       // 반응기 형상 및 램프
    "solverConfig": { ... },        // Solver 설정
    "spatialFilter": { ... }        // 관심 영역 (선택사항)
}

섹션 1: 반응기 설정 (reactorConfig)

JSON v3.0에서 반응기 설정은 두 부분으로 나뉩니다:

  • lampSpecs: 램프 사양 정의 (재사용 가능한 템플릿)
  • lampLayout: 램프 배치 정보 (lampSpecs 참조)

램프 사양 (lampSpecs)

reactorConfig.lampSpecs[] 램프 물리적 사양을 정의하며, 여러 위치에서 재사용할 수 있습니다:

매개변수타입단위설명
id문자열-램프 사양 식별자 (필수)
lampType문자열-"lp" (저압) 또는 "mp" (중압)
description문자열-램프 설명 (선택사항)
power숫자와트 (W)램프 입력 전력
eta숫자-램프 효율 (0-1), UV로 방출되는 에너지 비율
arcLength숫자미터 (m)램프의 아크 길이
diameter숫자미터 (m)램프 튜브의 외경
sleeveDia숫자미터 (m)석영 슬리브의 외경
sleeveThickness숫자미터 (m)석영 슬리브 두께
uvBands배열-파장대 정보 배열

램프 배치 (lampLayout)

reactorConfig.lampLayout[] 램프의 위치와 동작을 정의합니다:

매개변수타입단위설명
lampId문자열-참조할 lampSpecs의 id
dimming숫자-디밍 수준 (0-1), 1.0 = 최대 출력
position배열[3]미터 (m)중심 위치 [x, y, z]
direction배열[3]-램프 축 방향 벡터 [dx, dy, dz] (정규화됨)

예제 (단일 램프):

json
"reactorConfig": {
    "lampSpecs": [
        {
            "id": "LP150W",
            "lampType": "lp",
            "power": 150.0,
            "eta": 0.35,
            "arcLength": 0.8,
            "diameter": 0.015,
            "sleeveDia": 0.025,
            "sleeveThickness": 0.002,
            "uvBands": [
                { "lambda": 254, "waterRI": 1.33, "waterUVT": 0.95, "relativeEnergy": 1.0, "sleeveRI": 1.5, "sleeveUVT": 0.90, "gef": 1.0 }
            ]
        }
    ],
    "lampLayout": [
        { "lampId": "LP150W", "dimming": 1.0, "position": [0.0, 0.0, 0.0], "direction": [0.0, 0.0, 1.0] }
    ]
}

예제 (동일 사양 다중 램프):

json
"reactorConfig": {
    "lampSpecs": [
        {
            "id": "LP150W",
            "lampType": "lp",
            "power": 150.0,
            "eta": 0.35,
            "arcLength": 0.8,
            "diameter": 0.015,
            "sleeveDia": 0.025,
            "sleeveThickness": 0.002,
            "uvBands": [
                { "lambda": 254, "waterRI": 1.33, "waterUVT": 0.95, "relativeEnergy": 1.0, "sleeveRI": 1.5, "sleeveUVT": 0.90, "gef": 1.0 }
            ]
        }
    ],
    "lampLayout": [
        { "lampId": "LP150W", "dimming": 1.0, "position": [0.1, 0.0, 0.5], "direction": [0.0, 0.0, 1.0] },
        { "lampId": "LP150W", "dimming": 1.0, "position": [-0.1, 0.0, 0.5], "direction": [0.0, 0.0, 1.0] },
        { "lampId": "LP150W", "dimming": 0.8, "position": [0.0, 0.1, 0.5], "direction": [0.0, 0.0, 1.0] }
    ]
}

참고사항:

  • position: 반응기 좌표계에서 각 램프의 중심점
  • direction: 램프의 축방향 벡터 (반응기 좌표계 기준)
  • eta: 일반적인 값: LP 램프 0.30-0.40, MP 램프 0.10-0.20
  • dimming: 감광 시나리오에는 <1.0 사용

UV 파장대 설정 (uvBands)

lampSpecs[].uvBands[] 각 램프 사양에 파장대 정보를 포함합니다:

매개변수타입단위설명
lambda숫자나노미터 (nm)파장
waterRI숫자-해당 파장에서 물의 굴절률
waterUVT숫자-물의 UV 투과율 (0-1)
relativeEnergy숫자-해당 파장에서 에너지의 비율
sleeveRI숫자-석영 슬리브의 굴절률
sleeveUVT숫자-슬리브의 UV 투과율 (0-1)
gef숫자-Germicidal Effectiveness

중요: 모든 relativeEnergy 값의 합은 반드시 1.0이어야 합니다. 중요: 동일 에너지라도 파장에 따라 살균 효과가 다릅니다. gef 값은 소독 대상 물질에 따라 달라야 합니다.

단일 파장 예제 (254nm만):

json
"uvBands": [
    {
        "lambda": 254,
        "waterRI": 1.33,
        "waterUVT": 0.95,
        "relativeEnergy": 1.0,
        "sleeveRI": 1.5,
        "sleeveUVT": 0.90,
        "gef": 1.0
    }
]

다중 파장 예제 (VUV 램프, 185nm + 254nm):

json
"uvBands": [
    {
        "lambda": 185,
        "waterRI": 1.485,
        "waterUVT": 0.247,
        "relativeEnergy": 0.04,
        "sleeveRI": 1.575,
        "sleeveUVT": 0.90,
        "gef": 1.0
    },
    {
        "lambda": 254,
        "waterRI": 1.375,
        "waterUVT": 0.98,
        "relativeEnergy": 0.96,
        "sleeveRI": 1.505,
        "sleeveUVT": 0.98,
        "gef": 1.0
    }
]

참고사항:

  • LP 램프: 일반적으로 254nm에서 90-95%, 185nm에서 5-10%
  • MP 램프: 넓은 스펙트럼을 모델링하기 위해 여러 대역 사용
  • waterUVT: 수질 테스트(UVT254 또는 흡광도)에서 측정
  • gef: 특정 살균 효과 데이터가 없으면 1.0 사용

섹션 2: 솔버 설정 (solverConfig)

Solver는 아무런 값을 입력하지 않아도 기본값으로 작동합니다.

매개변수타입설명
radiationModel문자열"mpss" 또는 "msss"계산 방법
rootFindingMethod문자열"bisection" 또는 "brents"수치 솔버
relativeTolerance숫자예: 1.0e-5수렴 허용 오차
maxIteration정수예: 50최대 솔버 반복 횟수
lampSegmentation정수예: 1000램프 세그먼트 수 (높을수록 정확)
numThreads정수0 = 자동병렬연산 스레드 수 (0은 자동 감지)
enableShadowing불린true/false램프 간 차폐 계산 활성화

예제:

json
"solverConfig": {
    "radiationModel": "mpss",
    "rootFindingMethod": "brents",
    "relativeTolerance": 1.0e-5,
    "maxIteration": 50,
    "lampSegmentation": 1000,
    "numThreads": 0,
    "enableShadowing": false
}

권장사항:

  • MPSS: 램프를 점으로 모델링. 램프 길이가 매우 짧은 경우.
  • MSSS: 램프를 선으로 모델링. 대부분의 계산에 적합.
  • lampSegmentation: 1000개 권장
  • numThreads: 0 (자동)은 사용 가능한 모든 CPU 코어 사용
  • enableShadowing: 램프의 개수가 많거나, 램프간 거리가 가까운 경우에 활성화

섹션 3: 공간 필터 (spatialFilter) - 선택사항

특정 영역으로 계산을 제한하여 시간 절약:

매개변수타입단위설명
enabled불린-공간 필터링 활성화
xMin숫자미터최소 x 좌표
xMax숫자미터최대 x 좌표
yMin숫자미터최소 y 좌표
yMax숫자미터최대 y 좌표
zMin숫자미터최소 z 좌표
zMax숫자미터최대 z 좌표

예제:

json
"spatialFilter": {
    "enabled": true,
    "xMin": -0.1,
    "xMax": 0.1,
    "yMin": -0.1,
    "yMax": 0.1,
    "zMin": 0.0,
    "zMax": 1.0
}

사용 시기:

  • 반응기 외에 유입/유출 파이프 라인 등이 모델링 되어 반응기 영역에만 관심이 있을 때
  • 특정 영역에 초점을 맞춘 반복 설계
  • 박스 외부의 포인트는 조사량 = 0


부록 A: 매개변수 빠른 참조

램프 설정

매개변수타입범위일반적인 값단위
powerReal> 0LP: 40-150, MP: 1000-5000W
etaReal0-1LP: 0.30-0.40, MP: 0.10-0.20-
arcLengthReal> 00.3-1.5m
diameterReal> 00.010-0.020m
dimmingReal0-11.0 (최대 출력)-
sleeveDiaReal> 00.020-0.030m
sleeveThicknessReal≥ 00.001-0.003m

물/슬리브 특성

매개변수타입범위일반적인 값단위
waterUVTReal0-10.85-0.98 (254nm에서 cm당)-
waterRIReal> 11.33 (254nm)-
sleeveUVTReal0-10.90-0.98-
sleeveRIReal> 11.5-1.6 (석영)-

솔버 설정

매개변수타입범위권장
lampSegmentationint100-50001000
maxIterationint10-100050
relativeToleranceReal1e-8 ~ 1e-31e-5
numThreadsint0-2560 (자동)


부록 B: JSON 템플릿 샘플 (v3.0)

템플릿 1: 단일 LP 램프

json
{
    "version": "3.0",
    "title": "단일 LP 램프 반응기",
    "reactorConfig": {
        "lampSpecs": [
            {
                "id": "LP150W",
                "lampType": "lp",
                "power": 150.0,
                "eta": 0.35,
                "arcLength": 0.8,
                "diameter": 0.015,
                "sleeveDia": 0.025,
                "sleeveThickness": 0.002,
                "uvBands": [
                    {
                        "lambda": 254,
                        "waterRI": 1.33,
                        "waterUVT": 0.95,
                        "relativeEnergy": 1.0,
                        "sleeveRI": 1.5,
                        "sleeveUVT": 0.90,
                        "gef": 1.0
                    }
                ]
            }
        ],
        "lampLayout": [
            {
                "lampId": "LP150W",
                "dimming": 1.0,
                "position": [0.0, 0.0, 0.5],
                "direction": [0.0, 0.0, 1.0]
            }
        ]
    },
    "solverConfig": {
        "radiationModel": "mpss",
        "rootFindingMethod": "brents",
        "relativeTolerance": 1.0e-5,
        "maxIteration": 50,
        "lampSegmentation": 1000,
        "numThreads": 0,
        "enableShadowing": false
    }
}

템플릿 2: 다중 파장 램프 (VUV/UV)

json
{
    "version": "3.0",
    "title": "185nm 및 254nm LP 램프",
    "reactorConfig": {
        "lampSpecs": [
            {
                "id": "LP_VUV_UV",
                "lampType": "lp",
                "power": 150.0,
                "eta": 0.35,
                "arcLength": 0.8,
                "diameter": 0.015,
                "sleeveDia": 0.025,
                "sleeveThickness": 0.002,
                "uvBands": [
                    {
                        "lambda": 185,
                        "waterRI": 1.485,
                        "waterUVT": 0.25,
                        "relativeEnergy": 0.04,
                        "sleeveRI": 1.575,
                        "sleeveUVT": 0.90,
                        "gef": 1.0
                    },
                    {
                        "lambda": 254,
                        "waterRI": 1.33,
                        "waterUVT": 0.95,
                        "relativeEnergy": 0.96,
                        "sleeveRI": 1.5,
                        "sleeveUVT": 0.90,
                        "gef": 1.0
                    }
                ]
            }
        ],
        "lampLayout": [
            {
                "lampId": "LP_VUV_UV",
                "dimming": 1.0,
                "position": [0.0, 0.0, 0.5],
                "direction": [0.0, 0.0, 1.0]
            }
        ]
    },
    "solverConfig": {
        "radiationModel": "mpss",
        "rootFindingMethod": "brents",
        "relativeTolerance": 1.0e-5,
        "maxIteration": 50,
        "lampSegmentation": 1000,
        "numThreads": 0,
        "enableShadowing": false
    }
}

템플릿 3: 다중 램프

json
{
    "version": "3.0",
    "title": "MSSS로 빠른 계산",
    "reactorConfig": {
        "lampSpecs": [
            {
                "id": "LP150W",
                "lampType": "lp",
                "power": 150.0,
                "eta": 0.35,
                "arcLength": 0.8,
                "diameter": 0.015,
                "sleeveDia": 0.025,
                "sleeveThickness": 0.002,
                "uvBands": [
                    {
                        "lambda": 254,
                        "waterRI": 1.33,
                        "waterUVT": 0.95,
                        "relativeEnergy": 1.0,
                        "sleeveRI": 1.5,
                        "sleeveUVT": 0.90,
                        "gef": 1.0
                    }
                ]
            }
        ],
        "lampLayout": [
            {
                "lampId": "LP150W",
                "dimming": 1.0,
                "position": [0.0, 0.0, 0.5],
                "direction": [0.0, 0.0, 1.0]
            },
            {
                "lampId": "LP150W",
                "dimming": 1.0,
                "position": [0.1, 0.0, 0.5],
                "direction": [0.0, 0.0, 1.0]
            }
        ]
    },
    "solverConfig": {
        "radiationModel": "msss",
        "rootFindingMethod": "brents",
        "relativeTolerance": 1.0e-4,
        "maxIteration": 30,
        "lampSegmentation": 500,
        "numThreads": 0,
        "enableShadowing": false
    }
}