У меня есть трехмерное я sh, и я хочу отсортировать переменные fipy по углу: моя идея состояла в том, чтобы преобразовать значения в массив numpy и использовать функцию argsort (). После каждого временного шага я хочу обновить ограничения и значения для меня sh в измененном порядке. Tph0 / 1 - это переменные ячейки и лица me sh.
Моя попытка В функции, которую я использую:
def sortTviaphi(Tsorted):
...
# phi0 and phi1 are already calculated, verified and are being sorted here
sort0 = phi0.argsort()
phi1 = array(phi1)
sort1 = phi1.argsort()
return Tph0[sort0],Tph1[sort1]
# sortTviaphi(Tsorted)[0]: Cell, sortTviaphi(Tsorted)[1]: Face -Var
После первого временного шага, который я использую:
Tsorted = CellVariable(mesh=mesh,name='Temperature',value=sortTviaphi(Tsorted)[0].value)
# [0] for CellVariable
в качестве попытки (здесь) обновить старую переменную CellVariable и для обновления из ограничения:
Tsorted.faceGrad.constrain(a/lam*(Tu-sortTviaphi(Tsorted)[1].value)* mesh.faceNormals,where=F)
res=eqx.solve(var=Tsorted,dt=dt)
1) Я совершенно не уверен, что это правильный подход, но кажется, что это не работает должным образом, когда я сравниваю результаты с ожиданиями. Есть ли более простой (или прямой) способ справиться с подобными проблемами сортировки в fipy?
2) Я предполагаю, что мое утверждение из Tsorted не работает, так как значения не работают обновлять отсортированным способом, а точнее "алгоритмическим способом", 3D me sh был создан с помощью gm sh, что я и хотел предотвратить. Это правильно?