MaterialDB
compass.materials.database.MaterialDB는 광학 재료 물성(optical material properties)의 중앙 레지스트리입니다. 시뮬레이션에 사용되는 모든 재료에 대해 파장 의존적 굴절률(refractive index)
Interactive Material Optical Properties
Select a material to view its refractive index (n) and extinction coefficient (k) across the visible spectrum.
생성자
class MaterialDB:
def __init__(self, db_path: Optional[str] = None):매개변수:
db_path-- CSV 재료 파일이 포함된 디렉터리 경로. 기본값은 프로젝트 루트의materials/디렉터리입니다.
생성 시 MaterialDB는 자동으로 다음을 수행합니다:
- 내장 상수 및 해석적(analytic) 재료를 등록합니다 (에어, 폴리머, 유전체)
- 재료 디렉터리에서 테이블화된 CSV 데이터를 로드합니다 (실리콘, 텅스텐, 컬러 필터)
- CSV 파일이 없는 경우 근사 내장 데이터로 대체합니다
조회 메서드
get_nk
def get_nk(self, name: str, wavelength: float) -> Tuple[float, float]:주어진 파장(um 단위)에서 굴절률의 실수부와 허수부인 (n, k)를 반환합니다.
예외 발생: 재료가 등록되어 있지 않은 경우 KeyError가 발생합니다.
get_epsilon
def get_epsilon(self, name: str, wavelength: float) -> complex:주어진 파장에서 복소 유전율
get_epsilon_spectrum
def get_epsilon_spectrum(self, name: str, wavelengths: np.ndarray) -> np.ndarray:파장 배열에 대한 복소 유전율 값의 배열을 반환합니다.
list_materials
def list_materials(self) -> List[str]:등록된 모든 재료 이름의 정렬된 목록을 반환합니다.
has_material
def has_material(self, name: str) -> bool:해당 재료가 데이터베이스에 존재하면 True를 반환합니다.
등록 메서드
register_constant
def register_constant(self, name: str, n: float, k: float = 0.0) -> None:파장에 무관한 고정 굴절률을 가진 재료를 등록합니다.
db.register_constant("my_glass", n=1.52, k=0.0)register_cauchy
def register_cauchy(self, name: str, A: float, B: float = 0.0, C: float = 0.0) -> None:코시 분산 모델(Cauchy dispersion model)을 사용하는 재료를 등록합니다:
여기서
db.register_cauchy("polymer", A=1.56, B=0.004, C=0.0)register_sellmeier
def register_sellmeier(self, name: str, B: List[float], C: List[float]) -> None:셀마이어 분산 모델(Sellmeier dispersion model)을 사용하는 재료를 등록합니다:
db.register_sellmeier(
"sio2",
B=[0.6961663, 0.4079426, 0.8974794],
C=[0.0684043**2, 0.1162414**2, 9.896161**2],
)load_csv
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.0 | 1.0 | 0.0 |
polymer_n1p56 | 코시 | A=1.56, B=0.004 | 1.56 | 0.0 |
sio2 | 셀마이어 | 3항 | 1.46 | 0.0 |
si3n4 | 셀마이어 | 2항 | 2.0 | 0.0 |
hfo2 | 코시 | A=1.90, B=0.02 | 1.90 | 0.0 |
tio2 | 코시 | A=2.27, B=0.05 | 2.27 | 0.0 |
silicon | 테이블화 | Green 2008 | 3.5-5.6 | 0.003-3.0 |
tungsten | 테이블화 | 근사값 | 3.4-3.7 | 2.7-3.4 |
cf_red | 테이블화 | 로렌츠 | 1.55 | 0-0.15 |
cf_green | 테이블화 | 로렌츠 | 1.55 | 0-0.12 |
cf_blue | 테이블화 | 로렌츠 | 1.55 | 0-0.18 |
금속 (Metals)
CIS 배선, 금속 그리드, 플라즈모닉 구조에 사용되는 금속의 테이블화된 광학 상수입니다. 파장 범위: 300--1100 nm.
| 이름 | 화학식 | 출처 | n (550nm) | k (550nm) |
|---|---|---|---|---|
aluminum | Al | Rakic 1998 | 0.58 | 5.52 |
gold | Au | Johnson & Christy 1972 | 0.17 | 3.29 |
silver | Ag | Johnson & Christy 1972 | 0.07 | 4.39 |
copper | Cu | Johnson & Christy 1972 | 0.53 | 1.74 |
titanium | Ti | Johnson & Christy 1974 | 2.37 | 3.30 |
titanium_nitride | TiN | Patsalas 2003 | 1.31 | 2.31 |
유전체 (Dielectrics)
반사 방지 코팅(ARC), 패시베이션, 투명 전도체에 사용되는 유전체 박막의 테이블화된 광학 상수입니다.
| 이름 | 화학식 | 출처 | n (550nm) | k (550nm) |
|---|---|---|---|---|
silicon_nitride | Si3N4 | Philipp 1973 | 2.02 | 0.0 |
aluminum_oxide | Al2O3 | Malitson 1962 | 1.77 | 0.0 |
tantalum_pentoxide | Ta2O5 | Bright 2012 | 2.11 | 0.0 |
magnesium_fluoride | MgF2 | Dodge 1984 | 1.38 | 0.0 |
zinc_oxide | ZnO | Bond 1965 | 2.07 | 0.0 |
indium_tin_oxide | ITO | Konig 2014 | 1.95 | 0.0 |
silicon_oxynitride | SiON | 근사값 | 1.70 | 0.0 |
폴리머 (Polymers)
마이크로렌즈, 평탄화층, 포토레지스트에 사용되는 폴리머 재료의 테이블화된 광학 상수입니다.
| 이름 | 화학식 | 출처 | n (550nm) | k (550nm) |
|---|---|---|---|---|
pmma | PMMA | Sultanova 2009 | 1.49 | 0.0 |
polycarbonate | PC | Sultanova 2009 | 1.58 | 0.0 |
polyimide | PI | Birkholz 2000 | 1.70 | 0.0 |
benzocyclobutene | BCB | Dow Chemical | 1.54 | 0.0 |
su8 | SU-8 | MicroChem | 1.59 | 0.0 |
반도체 (Semiconductors)
실리콘 외의 반도체 재료로, NIR 센서 및 III-V족 센서 모델링에 사용됩니다.
| 이름 | 화학식 | 출처 | n (550nm) | k (550nm) |
|---|---|---|---|---|
germanium | Ge | Aspnes 1983 | 4.04 | 0.36 |
gallium_arsenide | GaAs | Aspnes 1983 | 3.98 | 0.17 |
indium_phosphide | InP | Aspnes 1983 | 3.70 | 0.17 |
MaterialData
각 재료의 내부 데이터 컨테이너입니다:
@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]] = NoneMaterialData.get_nk(wavelength) -> Tuple[float, float]
적절한 분산 모델(dispersion model)을 사용하여 (n, k)를 반환합니다.
MaterialData.get_epsilon(wavelength) -> complex
CSV 자동 로딩
생성 시 MaterialDB는 다음 파일명 매핑을 사용하여 재료 디렉터리에서 CSV 파일을 검색합니다:
기본 재료 (최상위 디렉터리):
| 재료 이름 | 예상 파일명 |
|---|---|
silicon | silicon_green2008.csv, silicon_palik.csv |
tungsten | tungsten.csv |
cf_red | color_filter_red.csv |
cf_green | color_filter_green.csv |
cf_blue | color_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 파일은 선택 사항입니다. 파일이 없으면 해당 재료는 등록되지 않습니다 (대체 데이터 없음).