FaceVariables в FiPy

Я моделирую электрический ток через различные структуры с помощью FiPy. Для этого я решаю уравнение Лапласа для электрического потенциала. Затем я использую закон Ома для получения поля и с помощью проводимости получаю плотность тока.

FiPy хранит потенциал как переменную, ориентированную на ячейку, и его градиент как переменную, ориентированную на лицо, что имеет для меня смысл. У меня два вопроса по поводу гранецентрированных переменных:

  1. Если у меня есть двух- или трехмерная проблема, FiPy вычисляет градиент во всех направлениях (ddx, ddy, ddz). Градиент - это FaceVariable, который всегда определяется на грани между двумя центрами ячеек. Для структурированной (четырехугольной) сетки только одна из производных должна быть больше нуля, поскольку для любой грани положение двух задействованных центров ячеек должно отличаться только в одной координате. Однако в моем моделировании часто случается, что более чем одна из производных (ddx, ddy, ddz) больше нуля, даже для структурированной сетки.
    В руководстве дается следующее объяснение метода FaceGrad: Вернуть градиент (phi) как FaceVariable ранга 1, используя разность для нормального направления (градиент второго порядка).
    Я не понимаю, чем это отличается от моего понимания, указанного выше.
    Что делает его еще более проблематичным: всякий раз, когда включается "слишком много" производных, ток не кажется сохраненным, даже в простейших структурах, которые я моделирую ...

  2. Есть ли умный способ получить доступ к данным, хранящимся в лицевой переменной? Предположим, я хотел бы вычислить электрический ток, проходящий через мою смоделированную структуру.
    На данный момент я сохраняю данные, хранящиеся в FaceVariable, в виде tsv-файла. Это дает таблицу с (x, y, z) -позициями и (ddx, ddy, ddz) -значениями. Я читаю файл и сохраняю данные в массивы, чтобы использовать их в Python. Это кажется нелогичным и действительно неудобным. Было бы намного лучше иметь доступ к FaceVariable в определенных плоскостях или в определенных точках.


person lmr    schedule 15.02.2018    source источник
comment
Как вы определяете текущую преемственность?   -  person jeguyer    schedule 16.02.2018
comment
У меня есть две внешние грани, к которым приложены граничные условия Дирихле, то есть напряжение. Я вычисляю полный ток, проходящий через эту границу, и ток, проходящий через другую. Иногда эти значения отличаются на несколько процентов, чего не должно быть ... (Это касается и простых геометрических фигур, таких как 2-мерный прямоугольник ...)   -  person lmr    schedule 18.02.2018
comment
Как вы рассчитываете ток?   -  person jeguyer    schedule 20.02.2018
comment
По закону Ома. Проводимость x град (потенциал) = плотность тока   -  person lmr    schedule 20.02.2018
comment
Какое именно выражение вы используете? Как проиллюстрировано в записной книжке Jupyter, на которую я ссылался в своем ответе, каждый выбор, который вы можете сделать при расчете, имеет последствия.   -  person jeguyer    schedule 21.02.2018
comment
Я использую faceGrad и оцениваю его на границе. Из записной книжки Jupyter я понял, что с консервативным граничным условием остается только второй член выражения faceGrad. Поскольку это гауссов градиент, оцениваемый в центре ячейки, это объясняет, почему в некоторых случаях может быть разница между током, проходящим через две разные границы ... Еще раз спасибо;)   -  person lmr    schedule 22.02.2018


Ответы (1)


  1. В документации это не разъясняется, но .faceGrad включает тангенциальные компоненты, которые учитывают не только значения центра соседних ячеек. Подробные выражения для различных типов градиенты, которые FiPy может вычислить (да, это должно быть в документации: # 560 ).

  2. Значение доступно с помощью myFaceVar.value, а координаты - с помощью myFaceVar.mesh.faceCenters. FiPy разработан на основе неструктурированных сеток, поэтому создание произвольных срезов нетривиально. Объекты CellVariable поддерживают интерполяцию путем вызова myCellVar((xs, ys, zs)), а объекты FaceVariable - нет. См. это обсуждение < / а>.

person jeguyer    schedule 16.02.2018
comment
Ноутбук Jupyter - отличный ресурс. FiPy частично хорошо документирован, а частично - плохо документирован. Относительно 2 .: я бы подумал, что можно получить доступ к данным faceVariable через координаты x, y, z, поскольку таким образом можно экспортировать данные. Но потом я продолжу экспорт и реимпорт. - person lmr; 18.02.2018
comment
Но FiPy не экспортирует данные, обращаясь к координатам x, y, z. FiPy экспортирует таблицу, состоящую из столбцов x, y, z и значения. Это то, что я показал вам, как получить. - person jeguyer; 20.02.2018