Fluid Must Flow


Adds very large pipes with enormous throughput capabilities.

Content
28 days ago
0.17 - 2.0
169K
Logistics Fluids

i Inconsistent pipe throughput

3 years ago
(updated 3 years ago)

So this was something I noticed as I started truly using the mod, but most duct elements seem to have a fluid size of 400, the small straight ducts have a fluid size of 200, while large straights and undergrounds have a fluid size of 1600 (I didnt touch any mod settings). Either this, or some other factors with fluid boxes leads to 2 effects that seem really weird, at least to me:

1 - duct throughput is dependent on which parts you use, not the total # of parts (ex: duct intake -> 4 duct bends -> duct outtake has a max throughput of 5956/sec, while duct intake -> 4 long straight ducts -> duct outtake has a max throughput of 7994/sec)

1.5 - this effect is even more pronounced with small straight ducts, though its a bit harder to test since they tend (as they should) to combine into bigger ducts. Still, for the purpose of testing; a setup of duct intake -> small straight -> regular straight -> small straight -> regular straight -> duct outtake has a max throughput of 3693, even though in theory it has the same # of pipe elements as the one with 4 straight long ducts which features more than 2x throughput.

2 - underground ducts after any element except other underground ducts & long straight ducts are only filled to half-way. Ex: duct intake -> T junction -> underground duct will cause the underground duct to be filled to 800 out of 1600.

... with all that, can the ducts be made to have the same fluid boxes (base_area and height) so it doesnt matter what type of ducts are used, just the # of them? It would make calculating throughput much easier (same as with vanilla pipes - 7 pipes between pumps is 1500/sec flow, no matter what pipes you use) I made a small fix doing just that for my own playthrough, and it just makes everything so much simpler; I know that if I have x amount of pipe entities between my pumps, I can get y throughput. No need to test each line to ensure that this particular configuration gets the throughput I need.

I have posted an image showing this: https://puu.sh/H98s1/2d371b1f1e.png

EDIT:

... I have found even weirder behavior: the order of pipes makes a huge difference.
ex: https://puu.sh/H98CX/65c2759751.png

TL/DR:

Duct fluidboxes differ between different entities (small duct has smaller fluidbox than large duct for example), that causes throughput to vary wildly based on which duct entities you use and in which order.

Suggestion: set every Duct entity to have the same fluidbox base_area and height, thus making throughput depend only on # duct entities (same behavior as pipes in vanilla).

3 years ago

I've seen the same happening with my game as well. If you just have ducts with the same capacity (like long straight/underground), you have max throughput. But if you put any junction or a curve on it, it will instantly choke the throughput. I'm also confused why each different type of duct has a different capacity.

3 years ago
(updated 3 years ago)

The corner pipes should really be updated to have a 1600 unit fluid box. The vanilla pipes have the same size fluid box, so these should as well.

3 years ago

I know this is very old, but I noticed similar issues. A quick dig through the Lua files and using the FluidBox entity as a template...

https://wiki.factorio.com/Types/FluidBox

I see some odd things. Unlike most fluid-handling items in the game and mods, Fluid Must Flow pipe segments and pumps make heavy use of FluidBox height. Almost all segments' size and capacity is based off a multiplier (the one that warns DO NOT CHANGE) in the menu. By default (with that value set to 4), most pipe segments have a height of 2. Intake Pumps, Outtake Pumps and No Return Valves have a height of 8, but that's mostly to help give them a bit more pressure. The one BIG offender here is the Underground Pipe - the Pipe to Ground segment. For some reason, that has a height of 4 - double the height of any other segment.

A quick explanation: The total volume of an item is calculated as base area * height * 100. However, taller items will fill to a smaller percentage of their capacity relative to other, shorter items attached to them. This is why Underground Pipe segments almost never fill up - because they're taller than nearby segments and thus CANNOT fill up, no matter the pressure. Only pumps can fill pipe segments to top. This means that the best way to optimise flow is to put pumps (read: No Return Valves) BEFORE Pipe To Ground segments. These things are essentially super-tall towers, so you need pumps to fill them, then they create a LOT of pressure down-stream.

I don't know why the mod-makers did this. I THINK the logic went along the lines of "Well, the Pipe to Ground segment is as tall as a pipe but also goes a full storey down underground, so it's two storeys tall, right?" Well, yes, but it's also not two storeys ABOVE ground level. It's one storey above ground level and one storey below. I did a small test. I set the Base Level of Pipe to Ground segment to -2 (actually, to 0 - settings.startup["fmf-duct-base-level-multiplier"].value/2). With its existing height of 4, it put its top in-line with the tops of other Ducts, but also extended it below.

Boy that changed behaviour right fast. Now Pipe to Ground segments act like sinks, aggressively draining the fluid from nearby segments and retaining a lot of fluid passively. Now you want pumps (read: No Return Valves) AFTER Pipe to Ground segments because that pumping power helps pull the fluid from the basement and push it into the rest of the system. The rest of the issues still persist, but that bit, at least, works a bit more logically now.

3 years ago

This last post matches my experience too... as I started to use Fluid Must Flow ducts to "BUS" fluids across some distance inside my base I quickly noticed that I was getting throughput limited even in short distances (i.e. across a few duct elements, for example no more than ~6) and I only started to get enough throughput to support my rate of consumption when I placed a "pump" before each and every underground segment... which completely defeats the purpose of a fluid BUS :(

(I.e. I would prefer to not have to have a preferred direction on BUS ducts where the fluids that are intended to be produced in several places in the factory, or even changing places at some point in the future.)

3 years ago

You're always going to get severely diminished performance over multiple pipe segments. That's simply an artefact of how Factorio handles fluid mechanics. For whatever reason, the developers are fine with a system where any pipeline longer than an arm's reach drastically reduces throughput to the point that "pipelines" basically can't exist. I can string a belt a mile long and it'll carry 45 items per second, but I lose 90% of my pump's flow over 5 pipe segments. The only way to get around that is to use directional pumps every X segments (realistically, every 2 or 3). That's not an issue with Fluid Must Flow, though. It's just how the Vanilla game does fluids.

What IS an issue with Fluid Must Flow is the core conceit of creating larger inventories for larger pipe pieces. Absolute throughput through a system is limited by the capacity of the smallest segment (ideally, usually limited by a lot more). At a capacity of 800, Intake/Outtake End Point pumps can only handle 800*60 = 48 000 fluid per second, out of the 72 000 listed. That's JUST the pumps. Introducing smaller segments between them, such as a single 400-capacity segment, can limit flow drastically below that, as well. Larger segments like the 1600-capacity long pipes and the 1600-capacity pipe to ground segments can typically carry fluid without as much of a drop in throughput, but the smaller 800-capacity segments do throttle flow pretty quickly.

I believe the mod gives larger segments a larger inventory under the belief that this equalises flow. In real life, it would. In factorio, though, segment number matters far more than segment capacity so the the smaller segments hard-limit the larger ones. Setting all the segments to the same size would help, but only to a point. You're still left with pipe-to-ground segments which, realistically speaking, SHOULD have different behaviour than straightline segments. With my tweak to their base level (bringing them 2 levels down and in-like with ground level pipes), their behaviour "makes sense" intuitively. It does make calculating throughput more difficult, but it does create a unique behaviour which requires unique solutions. If anything, I'm of the opinion that Vanilla pipe to ground segments should follow similar rules. Then again, I'm of the opinion that Factorio should use a simpler fluid simulation.

3 years ago

You're right, my bad... but I forgot to add something important in my post! Just for the record, in case it's important, if not, just ignore... and you're right, I'm not that versed on how the fluid system work, but I was aware of the throughput limitation per number of pipe segments and was trying to work within that limitation!

So I started with an assumption (which in turn might be incorrect, granted) that if I looked at the 'Maximum Throughput per number of sections' table listed in the Fluid System wiki page and multiplied the value there by 4, I would have enough throughput for my needs.

So if I took the 6 elements maximum (1588) by 4 (6352) and I should have been getting that throughput? I was getting limited to ~1600 only :/ That's where my troubles where made apparent!

And I solved by basically placing a pump before and after each T join into the pipeline, and before each underground segment.

3 years ago

So I started with an assumption (which in turn might be incorrect, granted) that if I looked at the 'Maximum Throughput per number of sections' table listed in the Fluid System wiki page and multiplied the value there by 4, I would have enough throughput for my needs.

A reasonable assumption, certainly, but unfortunately an incorrect one. Factorio's fluid simulation is very counter-intuitive and does not scale well at all with container size or height. Even with Fluid Must Flow pipes, you're still going to lose the majority of your flow across even just a few pipe segments. The only realistic way around it is what you did - place a pump every few pieces. Specifically, place pumps BEFORE Pipe to Ground pieces. Pumps after them help substantially less. And by "pumps," I mean No Return Valves. Those are pumps.

Try to use large pieces if you can, try to avoid using T intersections. If you're going to split the pipe, split it early. If you're going to merge multiple pipes, merge them late. There's not a lot else we can do, even as mod makers. Your options are Fluid Must Flow, Pressurised Fluids or for Wube to actually pull the trigger on a better fluid system where flow doesn't die in the first 3 segments.