Сортировать переменные и обновить ограничения в том же порядке - PullRequest
0 голосов
/ 17 марта 2020

У меня есть трехмерное я 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, что я и хотел предотвратить. Это правильно?

...