Pipe joints break the simulation

Hi, I encountered some runaway instabilities when trying to design an engine with a proper gas generator. I managed to create a minimal model which seems to reproduce this problem.

r=0.02m, h=1m pipe quickly stabilizes at 54.5kg/s

r=0.02m, h=(0.6m + 0.4m) pipe with a r=0.02m, h=0.01m joint, instead of doing the same, quickly diverges to ~±2000kg/s, with the pressures around the middle of this pipe oscillating between -3GPa to 3GPa (±30000bar)

I’ve encountered this before already, assuming it’s caused by my incorrect impeller setup (causing counter-rotation before GG torque kicks in, and breaking stuff), but now I’m certain it’s a problem in the simulation.

I believe the expected result in this case would be for both flows to act pretty much in the same way, unless I’m misunderstanding what branches/nodes represent here.


this forum could use a better way to share the model .json files

{
  "version": "0.3.0",
  "name": "pipetest2",
  "timestamp": 1766853459394,
  "selected": [
    {
      "name": "100cm pipe",
      "category": 2,
      "type": "Branch",
      "dimType": "Circle",
      "dimA": 0.02,
      "dimB": null,
      "length": 1,
      "volume": 0.0012566370614359172,
      "node_i": "NodeInlet",
      "node_j": "NodeOutlet1",
      "roughness": 0.0000015,
      "fittings": [],
      "n": 1
    }
  ],
  "selectedLinks": [],
  "dragging": null,
  "model": {
    "nodes": [
      {
        "name": "NodeInlet",
        "category": 1,
        "type": "NodeInlet",
        "fluid": "RP1"
      },
      {
        "name": "NodeInlet1",
        "category": 1,
        "type": "NodeInlet",
        "fluid": "RP1"
      },
      {
        "name": "Joint",
        "category": 1,
        "type": "NodeInternal",
        "dimType": "Circle",
        "dimA": 0.02,
        "dimB": null,
        "length": 0.01,
        "volume": 0.000012566370614359173
      },
      {
        "name": "NodeOutlet",
        "category": 1,
        "type": "NodeOutlet"
      },
      {
        "name": "NodeOutlet1",
        "category": 1,
        "type": "NodeOutlet"
      }
    ],
    "branches": [
      {
        "name": "100cm pipe",
        "category": 2,
        "type": "Branch",
        "dimType": "Circle",
        "dimA": 0.02,
        "dimB": null,
        "length": 1,
        "volume": 0.0012566370614359172,
        "node_i": "NodeInlet",
        "node_j": "NodeOutlet1",
        "roughness": 0.0000015,
        "fittings": [],
        "n": 1
      },
      {
        "name": "60cm pipe",
        "category": 2,
        "type": "Branch",
        "dimType": "Circle",
        "dimA": 0.02,
        "dimB": null,
        "length": 0.6,
        "volume": 0.0007539822368615503,
        "node_i": "NodeInlet1",
        "node_j": "Joint",
        "roughness": 0.0000015,
        "fittings": [],
        "n": 1
      },
      {
        "name": "40cm pipe",
        "category": 2,
        "type": "Branch",
        "dimType": "Circle",
        "dimA": 0.02,
        "dimB": null,
        "length": 0.4,
        "volume": 0.000502654824574367,
        "node_i": "Joint",
        "node_j": "NodeOutlet",
        "roughness": 0.0000015,
        "fittings": [],
        "n": 1
      }
    ],
    "machineries": [],
    "transmissions": [],
    "solids": [],
    "control_parameters": [
      {
        "name": "5bar",
        "category": 6,
        "type": "ControlParameter",
        "component": "NodeInlet",
        "component_category": 1,
        "component_port": "cp",
        "value": 500000
      },
      {
        "name": "5 bar",
        "category": 6,
        "type": "ControlParameter",
        "component": "NodeInlet1",
        "component_category": 1,
        "component_port": "cp",
        "value": 500000
      },
      {
        "name": "1bar",
        "category": 6,
        "type": "ControlParameter",
        "component": "NodeOutlet1",
        "component_category": 1,
        "component_port": "cp",
        "value": 100000
      },
      {
        "name": "1 bar",
        "category": 6,
        "type": "ControlParameter",
        "component": "NodeOutlet",
        "component_category": 1,
        "component_port": "cp",
        "value": 100000
      }
    ]
  },
  "modelPositions": {
    "nodes": {
      "NodeInlet": {
        "x": -90,
        "y": -150
      },
      "NodeInlet1": {
        "x": 760,
        "y": -150
      },
      "NodeOutlet": {
        "x": 800,
        "y": 130
      },
      "NodeOutlet1": {
        "x": -50,
        "y": 130
      },
      "Joint": {
        "x": 760,
        "y": -10
      }
    },
    "branches": {
      "100cm pipe": {
        "x": -90,
        "y": -10
      },
      "60cm pipe": {
        "x": 760,
        "y": -80
      },
      "40cm pipe": {
        "x": 760,
        "y": 60
      }
    },
    "machineries": {},
    "transmissions": {},
    "solids": {},
    "control_parameters": {
      "5bar": {
        "x": -270,
        "y": -200
      },
      "5 bar": {
        "x": 580,
        "y": -200
      },
      "1bar": {
        "x": -260,
        "y": 130
      },
      "1 bar": {
        "x": 590,
        "y": 130
      }
    }
  },
  "charts": {
    "currentResponsiveBreakpoint": "lg",
    "currentNumCols": null,
    "layouts": {
      "lg": [
        {
          "i": "Chart 1",
          "x": 2,
          "y": 0,
          "w": 3,
          "h": 4,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 2",
          "x": 6,
          "y": 0,
          "w": 3,
          "h": 4,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 3",
          "x": 9,
          "y": 0,
          "w": 3,
          "h": 4,
          "minW": 2,
          "minH": 2
        }
      ],
      "md": [
        {
          "i": "Chart 1",
          "x": 0,
          "y": 0,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 2",
          "x": 2,
          "y": 0,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 3",
          "x": 4,
          "y": 0,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        }
      ],
      "sm": [
        {
          "i": "Chart 1",
          "x": 0,
          "y": 0,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 2",
          "x": 2,
          "y": 0,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 3",
          "x": 4,
          "y": 0,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        }
      ],
      "xs": [
        {
          "i": "Chart 1",
          "x": 0,
          "y": 0,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 2",
          "x": 2,
          "y": 0,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 3",
          "x": 0,
          "y": 2,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        }
      ],
      "xxs": [
        {
          "i": "Chart 1",
          "x": 0,
          "y": 0,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 2",
          "x": 0,
          "y": 2,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        },
        {
          "i": "Chart 3",
          "x": 0,
          "y": 4,
          "w": 2,
          "h": 2,
          "minW": 2,
          "minH": 2
        }
      ]
    },
    "chartInfos": {
      "Chart 1": {
        "title": "Chart 1",
        "axes": {
          "ṁ": {
            "label": "ṁ",
            "variableName": "ṁ",
            "components": [
              {
                "name": "100cm pipe",
                "category": 2,
                "type": "Branch"
              }
            ]
          }
        },
        "isSelected": true
      },
      "Chart 2": {
        "title": "Chart 2",
        "axes": {
          "ṁ": {
            "label": "ṁ",
            "variableName": "ṁ",
            "components": [
              {
                "name": "60cm pipe",
                "category": 2,
                "type": "Branch"
              }
            ]
          }
        },
        "isSelected": false
      },
      "Chart 3": {
        "title": "Chart 3",
        "axes": {
          "P": {
            "label": "P",
            "variableName": "P",
            "components": [
              {
                "name": "Joint",
                "category": 1,
                "type": "NodeInternal"
              }
            ]
          }
        },
        "isSelected": false
      }
    },
    "samplers": {}
  },
  "simulation": {
    "simulationState": "ended",
    "maxTime": 1,
    "signature": {}
  }
}

Thanks for that, it’s a limitation of the solver - when the volume of individual branches go below a certain point, it can oscillate and get unstable, damping with more volume, and friction losses (via roughness and fittings) can help.