Skip to content

MaterialDB

compass.materials.database.MaterialDB는 광학 재료 물성(optical material properties)의 중앙 레지스트리입니다. 시뮬레이션에 사용되는 모든 재료에 대해 파장 의존적 굴절률(refractive index) (n,k) 및 복소 유전율(complex permittivity) ε을 제공합니다.

Interactive Material Optical Properties

Select a material to view its refractive index (n) and extinction coefficient (k) across the visible spectrum.

n (refractive index)4.05.06.0k (extinction coeff.)0.001.002.00400450500550600650700750Wavelength (nm)nk

생성자

python
class MaterialDB:
    def __init__(self, db_path: Optional[str] = None):

매개변수:

  • db_path -- CSV 재료 파일이 포함된 디렉터리 경로. 기본값은 프로젝트 루트의 materials/ 디렉터리입니다.

생성 시 MaterialDB는 자동으로 다음을 수행합니다:

  1. 내장 상수 및 해석적(analytic) 재료를 등록합니다 (에어, 폴리머, 유전체)
  2. 재료 디렉터리에서 테이블화된 CSV 데이터를 로드합니다 (실리콘, 텅스텐, 컬러 필터)
  3. CSV 파일이 없는 경우 근사 내장 데이터로 대체합니다

조회 메서드

get_nk

python
def get_nk(self, name: str, wavelength: float) -> Tuple[float, float]:

주어진 파장(um 단위)에서 굴절률의 실수부와 허수부인 (n, k)를 반환합니다.

예외 발생: 재료가 등록되어 있지 않은 경우 KeyError가 발생합니다.

get_epsilon

python
def get_epsilon(self, name: str, wavelength: float) -> complex:

주어진 파장에서 복소 유전율 ε=(n+ik)2을 반환합니다.

get_epsilon_spectrum

python
def get_epsilon_spectrum(self, name: str, wavelengths: np.ndarray) -> np.ndarray:

파장 배열에 대한 복소 유전율 값의 배열을 반환합니다.

list_materials

python
def list_materials(self) -> List[str]:

등록된 모든 재료 이름의 정렬된 목록을 반환합니다.

has_material

python
def has_material(self, name: str) -> bool:

해당 재료가 데이터베이스에 존재하면 True를 반환합니다.

등록 메서드

register_constant

python
def register_constant(self, name: str, n: float, k: float = 0.0) -> None:

파장에 무관한 고정 굴절률을 가진 재료를 등록합니다.

python
db.register_constant("my_glass", n=1.52, k=0.0)

register_cauchy

python
def register_cauchy(self, name: str, A: float, B: float = 0.0, C: float = 0.0) -> None:

코시 분산 모델(Cauchy dispersion model)을 사용하는 재료를 등록합니다:

n(λ)=A+Bλ2+Cλ4

여기서 λ의 단위는 um입니다. 소광 계수(extinction coefficient) k는 0입니다 (비흡수성).

python
db.register_cauchy("polymer", A=1.56, B=0.004, C=0.0)

register_sellmeier

python
def register_sellmeier(self, name: str, B: List[float], C: List[float]) -> None:

셀마이어 분산 모델(Sellmeier dispersion model)을 사용하는 재료를 등록합니다:

n2(λ)=1+iBiλ2λ2Ci
python
db.register_sellmeier(
    "sio2",
    B=[0.6961663, 0.4079426, 0.8974794],
    C=[0.0684043**2, 0.1162414**2, 9.896161**2],
)

load_csv

python
def load_csv(self, name: str, filepath: str, interpolation: str = "cubic_spline") -> None:

CSV 파일에서 테이블화된 재료 데이터를 로드합니다. CSV 형식은 다음과 같습니다:

# wavelength(um), n, k
0.400, 5.381, 0.340
0.410, 5.253, 0.296
...

#으로 시작하는 줄은 주석으로 처리됩니다. 데이터는 파장 기준으로 자동 정렬됩니다. 보간(interpolation)은 3차 스플라인(cubic spline)을 사용하며 (4개 이상의 데이터 포인트 필요), 대체 방법으로 선형 보간(linear interpolation)을 사용합니다.

매개변수:

  • name -- 등록할 재료 이름.
  • filepath -- CSV 파일 경로.
  • interpolation -- "cubic_spline" (기본값) 또는 "linear".

내장 재료

기본 재료

이름유형모델일반적인 n일반적인 k
air상수n=1.0, k=0.01.00.0
polymer_n1p56코시A=1.56, B=0.0041.560.0
sio2셀마이어3항1.460.0
si3n4셀마이어2항2.00.0
hfo2코시A=1.90, B=0.021.900.0
tio2코시A=2.27, B=0.052.270.0
silicon테이블화Green 20083.5-5.60.003-3.0
tungsten테이블화근사값3.4-3.72.7-3.4
cf_red테이블화로렌츠1.550-0.15
cf_green테이블화로렌츠1.550-0.12
cf_blue테이블화로렌츠1.550-0.18

금속 (Metals)

CIS 배선, 금속 그리드, 플라즈모닉 구조에 사용되는 금속의 테이블화된 광학 상수입니다. 파장 범위: 300--1100 nm.

이름화학식출처n (550nm)k (550nm)
aluminumAlRakic 19980.585.52
goldAuJohnson & Christy 19720.173.29
silverAgJohnson & Christy 19720.074.39
copperCuJohnson & Christy 19720.531.74
titaniumTiJohnson & Christy 19742.373.30
titanium_nitrideTiNPatsalas 20031.312.31

유전체 (Dielectrics)

반사 방지 코팅(ARC), 패시베이션, 투명 전도체에 사용되는 유전체 박막의 테이블화된 광학 상수입니다.

이름화학식출처n (550nm)k (550nm)
silicon_nitrideSi3N4Philipp 19732.020.0
aluminum_oxideAl2O3Malitson 19621.770.0
tantalum_pentoxideTa2O5Bright 20122.110.0
magnesium_fluorideMgF2Dodge 19841.380.0
zinc_oxideZnOBond 19652.070.0
indium_tin_oxideITOKonig 20141.950.0
silicon_oxynitrideSiON근사값1.700.0

폴리머 (Polymers)

마이크로렌즈, 평탄화층, 포토레지스트에 사용되는 폴리머 재료의 테이블화된 광학 상수입니다.

이름화학식출처n (550nm)k (550nm)
pmmaPMMASultanova 20091.490.0
polycarbonatePCSultanova 20091.580.0
polyimidePIBirkholz 20001.700.0
benzocyclobuteneBCBDow Chemical1.540.0
su8SU-8MicroChem1.590.0

반도체 (Semiconductors)

실리콘 외의 반도체 재료로, NIR 센서 및 III-V족 센서 모델링에 사용됩니다.

이름화학식출처n (550nm)k (550nm)
germaniumGeAspnes 19834.040.36
gallium_arsenideGaAsAspnes 19833.980.17
indium_phosphideInPAspnes 19833.700.17

MaterialData

각 재료의 내부 데이터 컨테이너입니다:

python
@dataclass
class MaterialData:
    name: str
    mat_type: Literal["constant", "tabulated", "cauchy", "sellmeier"]
    n_const: float = 1.0
    k_const: float = 0.0
    wavelengths: Optional[np.ndarray] = None
    n_data: Optional[np.ndarray] = None
    k_data: Optional[np.ndarray] = None
    interpolation: str = "cubic_spline"
    cauchy_A: float = 1.0
    cauchy_B: float = 0.0
    cauchy_C: float = 0.0
    sellmeier_B: Optional[List[float]] = None
    sellmeier_C: Optional[List[float]] = None

MaterialData.get_nk(wavelength) -> Tuple[float, float]

적절한 분산 모델(dispersion model)을 사용하여 (n, k)를 반환합니다.

MaterialData.get_epsilon(wavelength) -> complex

ε=(n+ik)2을 반환합니다.

CSV 자동 로딩

생성 시 MaterialDB는 다음 파일명 매핑을 사용하여 재료 디렉터리에서 CSV 파일을 검색합니다:

기본 재료 (최상위 디렉터리):

재료 이름예상 파일명
siliconsilicon_green2008.csv, silicon_palik.csv
tungstentungsten.csv
cf_redcolor_filter_red.csv
cf_greencolor_filter_green.csv
cf_bluecolor_filter_blue.csv

CSV 파일이 발견되면 자동으로 로드됩니다. 그렇지 않으면 내장 근사값이 사용됩니다.

확장 재료 (분류된 하위 디렉터리):

하위 디렉터리재료
metals/aluminum.csv, gold.csv, silver.csv, copper.csv, titanium.csv, titanium_nitride.csv
dielectrics/silicon_nitride.csv, aluminum_oxide.csv, tantalum_pentoxide.csv, magnesium_fluoride.csv, zinc_oxide.csv, indium_tin_oxide.csv, silicon_oxynitride.csv
polymers/pmma.csv, polycarbonate.csv, polyimide.csv, benzocyclobutene.csv, su8.csv
semiconductors/germanium.csv, gallium_arsenide.csv, indium_phosphide.csv

확장 재료 CSV 파일은 선택 사항입니다. 파일이 없으면 해당 재료는 등록되지 않습니다 (대체 데이터 없음).