Иерархия усреднений в программе имеется, я уже сам в ней запутался.
По-сути в нормально уравновешенной динамике не нужна иерархия: просто всё в одну кучу валите, делите на число точек, и вуаля!
А вот с баростатом вопрос серьезный, у меня прикладываются силы к граничным молекулам, эти силы могут порождать и поддерживать колебательный режим.
Кстати, это напоминает ситуацию, если на каждом шаге масштабировать скорости, чтобы сравнять кинетическую энергию с ожидаемой температурой (спойлер: получается плохо). Попробуйте делать это не на каждом шагу, а с каким-то приличным периодом (раз в 10-1000 шагов, скажем). Это даст системе шанс уравновеситься между "толчками снаружи". Я к тому, что если это Ваша реализация баростата, то прикольно пробовать что-то новое, и это один из способов пофиксить слишком агресивное поведение термостата/баростата. В любом случае в классических баростатах у Вас будет аналогичный параметр, который точно так же придётся выбирать.