-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New way of transferring air between zones. #1
base: master
Are you sure you want to change the base?
Conversation
Now every zone can trigger group sharing. In group sharing the gases and temperatures are transfered based on average between all connected zones avoiding "slow transfer through bottlenecks" and processing order problems. The speed of transfer decays with total volume of connected zones. The old way is kept to generate pressure differences for airflows.
Тоже писал подобную штуку, только она уравнивала в группе зон, когда разница показателей была меньше определённого порога. |
Поясни один момент, как твой код будет реагировать, если у нас будет 2 разных разгерметизации в 2 кусках станции? он будет уравнивать 2 не связанных друг с другом кластера? |
а, кластер состоит только из зоны и зон, которые к ней законнекчены? маленький кластер. Не увидел, чтобы для зон в кластере sharerequired обнулялось, ты уверен, что это не даст кучу лишний расчётов для одних и тех же зон в одном цикле? |
|
не пойму, как этим кодом свяжутся 4 сектора коридора, идущие друг за другом |
и, насколько я понял, старый механизм переноса газа остаётся, и тоже проводит вычисления, плюс ещё и эта штука с кластерами, которая никак не стабилизирует, а тоже устраивает это жуткое бесконечное ассимптотическое стремление к среднему значению? |
@@ -82,16 +84,89 @@ zone/proc/process() | |||
if(C.A.zone.air.compare(C.B.zone.air) || total_space) | |||
ZMerge(C.A.zone,C.B.zone) | |||
|
|||
//Share some | |||
ShareRequired = 0 | |||
//Share test | |||
for(var/zone/Z in connected_zones) | |||
//Ensure we're not doing pointless calculations on equilibrium zones. | |||
if(abs(air.total_moles - Z.air.total_moles) > 0.1 || abs(air.temperature - Z.air.temperature) > 0.1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Здесь происходит отсеивание ненужных вычислений. Если тебе кажется, что до разницы в 0.1 моделировать нет смысла, то можешь это число поднять.
PS Это уравнение неплохо бы дополнить || abs(air.oxygen - Z.air.oxygen) > 0.1 || abs(air.nitrogen - Z.air.nitrogen) > 0.1 || abs(air.carbon_dioxide -Z.air.carbon_dioxide) > 0.1
Смотри комменты к коду |
ах, рекурсия. Так всё же, обычный sharezone тоже работает, и мы имеем в 2 раза больше вычислений? Не вижу места, где он обходится. лучше бы сделал так, чтобы с новой формулой горения бомбы можно было бы собирать. |
Buffing blooding.
Now every zone can trigger group sharing. In group sharing the gases and temperatures are transfered based on average between all connected zones avoiding "slow transfer through bottlenecks" and processing order problems. The speed of transfer decays with total volume of connected zones.
The old way is kept to generate pressure differences for airflows.