2015-10-13 5 views
1

Я новичок в FiPy, и я решаю уравнение Пуассона для потенциала внутри трехмерного тома. Он отлично работает для граничных условий поверхности, но теперь мне нужно разместить проводник внутри. Это будет постоянная потенциальная поверхность, и я понимаю, что вы не можете использовать потенциал .constrain для внутренних поверхностей.Внутренние граничные условия FiPy

В документации предлагается использовать ImplicitSourceTerm вместе с маской, определяющей поверхность, но неясно, как это можно использовать, чтобы ограничить потенциал постоянным или эквивалентно ограничить электрическое поле перпендикулярно поверхности. Это возможно?

Спасибо за любую помощь.

ответ

2

Обсуждение в http://www.ctcms.nist.gov/fipy/documentation/USAGE.html#applying-internal-boundary-conditions описывает именно то, что вы пытаетесь сделать. Кажется, я знаю, почему это, возможно, не сработало для вас. При объявлении ImplicitSourceTerm, FiPy должен быть осторожным, чтобы не добавлять отрицательные значения к диагонали матрицы, поэтому он проверяет признаки коэффициентов ImplicitSourceTerm и сравнивает их с признаками диагональных элементов, образующих DiffusionTerm (и другие) которые уже были помещены в матрицу; если знаки противоположны, то FiPy явно обрабатывает эти ячейки (помещает все в вектор RHS).

Если объявить уравнение (как я первоначально сделал), как

eq = (fp.DiffusionTerm(coeff=dielectric) + charge == 
     conductor * largeValue * conductorPotential 
     - fp.ImplicitSourceTerm(coeff=conductor * largeValue) 

тогда все о проводнике получает положить на векторе RHS и неявный решатель никогда не «видит» его. Если вы измените порядок последних двух терминов, то conductor * largeValue будет помещен на матричную диагональ, а conductor * largeValue * conductorPotential будет помещен в RHS, а в решении для этих ячеек доминирует conductorPotential.

Короче, что я хочу сказать, что это имеет значение (для FiPy (в данном случае)) говорят ли вы

V == conductorPotential 

или

conductorPotential == V 

Я отправил ноутбук IPython в https://gist.github.com/guyer/a61d5adfa9a050eb970a

+0

Благодарим вас за ответ и ваш яркий пример ноутбука iPython. В моем конкретном случае проблема заключалась не в порядке терминов. Я имею дело с большими потенциалами (10^5), и из-за этого я устанавливаю большой Value = 10^15. Это дает бессмысленные результаты. Тем не менее, я обнаружил, что установка largeValue = 10^10 дает разумные результаты. Похоже, я где-то создал переполнение. – OnTheContrary

 Смежные вопросы

  • Нет связанных вопросов^_^