파트 D: 솔버 안정성/메싱
이 절에서는 솔버 안정성과 메시 선택에 초점을 맞춥니다. 1차원(1D) 시뮬레이션은 일반적으로 매우 안정적이며 빠르게 실행됩니다. 차원이 1D에서 2D, 3D로 증가할수록 방정식 수와 그들 사이의 연결 항 수가 증가하여 수치적 불안정성이 더 발생하기 쉬워집니다. 2D 또는 3D 시뮬레이션에서 설정이 신중하게 선택되지 않으면 시뮬레이션이 수렴하지 못할 수 있습니다.
여기서는 몇 가지 간단한 설정을 의도적으로 극단으로 밀어 비수렴을 유도한 다음, 왜 그런 일이 발생하는지와 이를 어떻게 수정할 수 있는지 진단합니다. 이러한 일반적인 실패 모드를 직접 재현함으로써, 증상을 인식하고 적절한 해결책(예: 메시 조정, 바이어스 스텝 크기 감소, 극단적인 재료 매개변수 완화)을 적용하여 안정적인 해를 복구하는 방법을 배우게 됩니다.
1. 비현실적으로 낮은 값
많은 경우 수렴 문제는 비물리적인 입력값에서 발생합니다. 이를 보여주기 위해 캐리어 이동도를 의도적으로 0으로 설정하고, 결과적으로 발생하는 오류를 살펴봅니다. 물론 실제 재료에서 이동도는 절대로 진정한 0이 아니며 항상 유한한 값을 갖습니다. 그러나 이 예제는 솔버에 비현실적인 매개변수를 주었을 때 어떤 일이 발생하는지를 보여줍니다.
Electrical Parameters 편집기(메인 창 → Device 탭)를 열고 ??에 표시된 것처럼 이동도를 0으로 설정합니다. 이제 시뮬레이션을 실행합니다. ??와 유사한 오류 화면이 나타나며, 잔차 요약 주변의 세로 빨간 상자와 충돌 메시지 근처의 가로 빨간 상자 두 개가 보일 것입니다.
세로 빨간 상자를 보면 f()=2.54e2가 보이고, 그 뒤에 f()가 매우 큰 다른 줄들(예:
1e15, 1e5, 1e8, 1e7)이 보입니다. 여기서 f()는 솔버
잔차 오차로, 결합된 방정식들이 현재 얼마나 잘 만족되고 있는지를 나타내는 척도입니다. 이상적으로는 솔버 잔차가 정확히 0이어야 하지만, 실제로는 이는 결코 달성될 수 없습니다. 1e−10에서 1e−8 범위의 잔차는 매우 좋은 수렴을 나타내며, 1e−1 정도의 값도 여전히 허용 가능합니다.
반면 수백 단위의 잔차(예: 2.54e2)는 특히 1e15처럼 큰 성분 값이 동반될 경우, 솔버가 어려움을 겪고 시스템이 불안정해졌다는 명확한 신호입니다.
가로 빨간 상자는 일반적으로 실행이 საბოლოապես 중단되는 이유를 보고합니다: Holes asking for 이는 계산된 준페르미 준위가 표로 정의된 범위를 벗어났음을 의미합니다. 시작 전에 모델은 준페르미 준위 대 캐리어 밀도와 같은 관계를 큰 에너지 범위 도메인에 대해 미리 표로 계산합니다 - 실제로는 보통 소자에서 기대하는 것보다 훨씬 더 큰 범위입니다. 솔버가 불안정해지면 모델은 그 범위를 훨씬 넘는 비현실적인 값을 요구할 수 있으며, 그 시점에서 솔버는 필요한 양을 평가할 수 없게 되어 중단됩니다. 3e5 but only defined in range [min, max].
요약하면, 이동도를 비물리적인 값(μ = 0)으로 설정함으로써 방정식을 물리적으로 의미가 없는 영역으로 밀어 넣었고, 그 결과 수치적 방법이 실패한 것입니다: 큰 잔차가 발생하고, 이어서 사전 계산된 표 범위를 벗어난 값에 대한 요청이 발생한 후, 최종적으로 충돌합니다. 중요한 점은 이 결과가 모델의 약점이나 소프트웨어 버그가 아니라는 것입니다.
비물리적 매개변수를 입력함으로써 솔버는 수학적으로나 물리적으로 유효한 해가 존재하지 않는 영역으로 밀려났으며, 따라서 의미 있는 결과를 제공할 수 없습니다.
2. 비현실적으로 높은 값
이 예제에서는 캐리어 이동도를 μ = 1×106 m²·V⁻¹·s⁻¹로 설정합니다. 이는
반도체 drift–diffusion 모델에 대해 의도적으로 비물리적인 값입니다: 이러한 크기의 값은
유기 또는 일반적인 반도체에서의 hopping/ band 수송보다는 금속성 전도 영역과
연관될 수 있습니다. 실제로는 OFET 시뮬레이션에 이처럼 큰 값을 사용하지 않습니다.
이 설정으로 시뮬레이션을 실행하면 솔버가 수렴에 어려움을 겪는 것을 관찰할 수 있습니다. 잔차
표시(f()를 보고하는 상자)에서는
1e24, 1e19, 1e21과 같은 매우 큰 오차가
줄어들지 않는 것을 볼 수 있습니다. 솔버가 일관된 상태를 찾는 초기 몇 번의 반복 동안 잔차가
높게 나타나는 것은 정상이지만, 곧 작은 값으로 안정되어야 합니다. 지속적으로 거대한 잔차가 나타난다면
선택한 매개변수로 인해 시스템이 수치적으로 경직되었거나 비물리적이 되었다는 분명한 संकेत입니다.
핵심은 다음과 같습니다: 비현실적으로 높은 이동도는 피해야 합니다. 과도한 수송 계수는 PDE 시스템을 매우 경직되게 만들어 조건수를 악화시키고 비수렴을 초래합니다. 해당 재료 시스템에 대해 물리적으로 타당한 μ 값을 사용하고 안정적인 동작을 복구하기 위해 적당한 바이어스 스텝으로 다시 실행하십시오.
3. 잘못된 소자 구조
이 예제에서는 contact editor를 열어 Source의 접촉 폭을 매우 작은 값( ?? 참조), 즉 1마이크론으로 설정합니다. 언뜻 보기에는 이것이 문제가 없어 보일 수 있지만, 미묘한 문제가 생깁니다: 시뮬레이션은 유한차분 메시를 기반으로 하며, 전기장과 캐리어 밀도 같은 양은 정의된 메시 점에서만 계산됩니다.
Electrical 탭 아래에 있는 Electrical Mesh Editor를 살펴보면, 이 초박형 1마이크론 접촉이 메시 점 사이에 들어가 있음을 알 수 있습니다( ?? 참조). 그 결과 접촉은 유한차분 격자에서 사실상 “누락”되며 소자 구조에 제대로 적용되지 않습니다. 이는 정의된 기하 구조와 수치 메시 사이의 불일치를 만들어 시뮬레이션이 수렴하지 못하게 합니다.
이를 수정하려면 접촉 두께를 늘려 최소 하나의 메시 점과 겹치게 하거나, 유한차분 격자에서 메시 밀도를 높여(즉, 더 많은 점을 추가하여) 접촉이 정확히 포착되도록 하면 됩니다.
4. 너무 많은 메시 점
유한차분 모델을 처음 시작할 때 흔한 선입견은 메시 점을 더 많이 넣으면 자동으로 더 정확한 결과가 나온다는 것입니다. 흔히 다음과 같이 생각합니다: “메시 점 5개는 형편없을 것이지만, 1000개는 훌륭할 것이다.” 실제로는 그렇지 않습니다.
OghmaNano는 Scharfetter–Gummel scheme이라는 이산화 방법을 사용하며, 이는 메시 점 사이의 캐리어 밀도와 전위 같은 양을 정확하게 보간합니다. 솔버는 노드 사이에서 단순히 직선 거동을 가정하지 않습니다; 대신 비교적 거친 메시에서도 높은 정확도로 수송 물리를 포착하는 지수 적합 접근을 사용합니다. 이는 놀라울 정도로 적은 점으로도 좋은 정확도를 얻을 수 있음을 의미합니다.
메시 밀도를 높이는 것은 단지 실행 시간을 늘리는 것에 그치지 않고—오히려 안정성과 정확도를 떨어뜨릴 수 있습니다. 더 미세한 메시는 더 큰 방정식 시스템을 생성하여 수치 문제를 풀기 더 어렵게 만듭니다. 결과적으로 행렬이 더 경직되고, 잔차가 증가할 수 있으며, 솔버가 수렴에 어려움을 겪을 수 있습니다.
물리를 포착하고, 시뮬레이션 시간을 합리적으로 유지하며,
불필요한 수치 오차를 피하는 것 사이에는 항상 절충이 존재합니다. 아래 그림은 이를 보여줍니다: 소자 전체에
100개의 메시 점을 사용하면, 솔버는 처음에 매우 큰 잔차(예: 1e6, 1e5)를 보고합니다. 수많은 반복 이후에야
합리적인 f() 값으로 안정됩니다. 이러한 불안정성은 메시가 지나치게 미세하여
솔버가 처리하기 어려운 시스템이 되었기 때문에 발생합니다.