Я пытаюсь смоделировать базовые полупроводниковые модели для педагогических целей - начиная с модели дрейф-диффузия. Хотя я не хочу использовать готовый полупроводниковый симулятор - я буду изучать другие (распространенные, недавние или малоизвестные) модели, но я хочу использовать готовый решатель PDE.
Но даже для простого одномерного случая дрейф-диффузионная модель состоит из нескольких связанных нелинейных уравнений в частных производных:
Уравнения плотности тока
Непрерывность уравнения
Уравнение Пуассона
и ряд граничных условий.
Я попробовал некоторые решатели Python FEM, FEniCS / Dolfin и SfePy , но безуспешно из-за невозможности сформулировать их в слабой вариационной форме с помощью тестовых функций.
Конечно, есть возможность реализовать численное решение с нуля, но я еще не изучал FEM / Numeric, так что я надеюсь, что это не единственный мой вариант, так как я не хочу быть перегруженным численными проблемами.
Так есть ли пакет (предпочтительно с открытым исходным кодом), который будет принимать эти уравнения в такой форме и решать их? Или, может быть, вариационная форма, требуемая инструментами, не так сложна? В любом случае, какие у меня варианты?
Благодарность
Изменить: Попытка формулирования слабой вариационной формы для FEniCS / Dolfin или SfePy
Используя три уравнения в частных производных (Пуассона + два уравнения неразрывности с заменой J), мы ищем V, n и p. Уравнение Пуассона (с использованием тестовой функции ) является прямым. У меня, однако, трудности с уравнениями неразрывности.
Второй PDE (сильная форма) где - постоянные, - скалярные функции
Пусть обозначает тестовую функцию для второго PDE. потом
Особенно беспокоит интеграл:
Но является вектором, а - скалярами. Затем используйте идентификатор
Поскольку V решается с помощью уравнения Пуассона, можем ли мы использовать недавно вычисленное значение, как это разрешено в программном обеспечении Dolfin / FEniCS, и упростить, как мы рассматриваем V в этом втором связанном уравнении? Такие методы работают при дискретизации (например, Gummel, ...), чего я не делаю в этих готовых решателях!
Также граничные условия даны в терминах не , как вы это реализуете? Должен ли я решить для пяти переменных , даже если определяется V и n?