Для примера в этой статье будет использоваться вот такая схема:
Вы можете скачать stks-файл примера и открыть его в Стоксе.
В этом примере:
В статье будет использоваться термин ядро сети – так в коде Стокса называются участки труб, между которыми поток может перераспределяться. Если сеть тупиковая, то расход в каждом участке складывается из расходов приcоединённых к нему участков, стоящих дальше от источника. Но когда есть кольцо, невозможно заранее определить, как поток распределится между полукольцами, нужно проводить увязку. Аналогично в случае, когда источник не один – какую часть потребления возьмёт на себя один источник, а какую второй, мы можем узнать только после увязки. Можно было бы назвать это "кольцевые участки", если бы не существовало сетей с несколькими источниками.
Какого-то общеупотребимого подходящего термина для обозначения таких участков я (автор Стокса) не нашёл, поэтому придумал такой для внутреннего использования. Можете не пытаться искать его в интернете.
Для понимания: в представленном примере ядро – это трубы чёрного и оранжевого цветов. А остальные – тупиковые ответвления от ядра.
В Стоксе есть функция автоматического подбора минимально необходимых внутренних диаметров труб в сети.
Диаметры подбираются таким образом, чтобы выполнялись следующие условия:
Если есть кольца или несколько источников, то все участки делятся на два вида: "ядро сети" и отходящие от него тупиковые участки. Всем трубам "ядра" назначается один диаметр. Трубам тупиковых ответвлений алгоритм автоподбора пытается назначить такие диаметры, чтобы падение давления на погонный метр трубопровода было примерно одинаковым на всех участках – насколько это возможно при заданных условиях.
Если давление на источнике меньше, чем минимально допустимое для какого-либо узла, очевидно, изменением диаметров труб проблему исправить невозможно. В таком случае будет выдано сообщение "В сети #XX не хватит давления узлам: YY." и автоподбор для этой подсети производиться не будет. Вам требуется сначала изменить давления узлов так, чтобы давления в источниках были выше минимально допустимого давления для любого из остальных узлов (с учётом разницы в высоте между ними).
В общем случае Стокс подбирает диаметры так, чтобы давление и скорость держались в требуемых пределах при той схеме, которая нарисована.
Но в некоторых случаях можно попытаться обеспечить в сети запас прочности для работоспособности в случае аварий:
На этом этапе программа ищет такой минимальный диаметр, при назначении которого всем трубам сети давление и скорость течения будут в заданных пределах.
Диаметр, полученный на прошлом этапе, назначается в неизменном виде только ядру сети – кольцам и трубам от источников до точки слияния потоков (в сетях с несколькими источниками). В проекте-примере это трубы чёрного и оранжевого цветов.
На тупиковых участках, отходящих от кольца в сторону потребителей, Стокс пытается уменьшить диаметры до минимально допустимых. При этом диаметры отдельных труб в цепочке от ядра сети до потребителя по возможности подбираются так, чтобы общее падение давления распределялось между ними пропорционально их длине (насколько это возможно в заданных условиях). Т.к. происходит не точное вычисление нужных диаметров, а выбор из списка вариантов, для всех участков выбирается ближайший больший. А на последнем участке цепочки Стокс наоборот пытается снизить диаметр, чтобы потратить накопленный при этих округлениях вверх запас давления.