FF_CURVED

Overview

The FF_CURVED function calculates the Darcy friction factor for fluid flowing through curved pipes or helical coils, automatically handling both laminar and turbulent flow regimes. Curved pipe flow is common in heat exchangers, industrial coils, and piping systems where space constraints require compact designs.

Flow in curved pipes differs significantly from straight pipe flow due to secondary flow patterns induced by centrifugal forces. These secondary flows, characterized by the Dean number (De = Re \sqrt{D_i/D_c}), increase wall shear stress and thus the friction factor compared to equivalent straight pipe flow. The Dean number combines the Reynolds number with the curvature ratio to quantify the strength of secondary flow effects.

This implementation uses the fluids library, which provides multiple correlation methods based on the Heat Exchanger Design Handbook recommendations. For detailed API information, see the fluids.friction documentation.

The function automatically selects between laminar and turbulent correlations based on the critical Reynolds number, which is higher for curved pipes than for straight pipes. The default transition criterion uses the Schmidt correlation:

Re_{crit} = 2300 \left[ 1 + 8.6 \left( \frac{D_i}{D_c} \right)^{0.45} \right]

For the laminar regime, the default Schmidt correlation multiplies the straight-pipe friction factor by a curvature correction:

f_{curved} = f_{straight} \left[ 1 + 0.14 \left( \frac{D_i}{D_c} \right)^{0.97} Re^{1 - 0.644 (D_i/D_c)^{0.312}} \right]

The turbulent regime uses different Schmidt correlations depending on Reynolds number range, accounting for both curvature effects and pipe wall roughness. Multiple alternative correlations are available through the ff_curved_method parameter, including White, Mori-Nakayama, Prasad, and others for specific applications or validation purposes.

This example function is provided as-is without any representation of accuracy.

Excel Usage

=FF_CURVED(Re, Di, Dc, roughness, ff_curved_method, rec_method, laminar_method, turbulent_method, Darcy)
  • Re (float, required): Reynolds number with D=Di, [-]
  • Di (float, required): Inner diameter of the tube making up the coil, [m]
  • Dc (float, required): Diameter of the helix/coil (center-to-center), [m]
  • roughness (float, optional, default: 0): Roughness of pipe wall, [m]
  • ff_curved_method (str, optional, default: null): Specific correlation method to use, overriding automatic selection
  • rec_method (str, optional, default: “Schmidt”): Critical Re transition method
  • laminar_method (str, optional, default: “Schmidt laminar”): Laminar regime correlation
  • turbulent_method (str, optional, default: “Schmidt turbulent”): Turbulent regime correlation
  • Darcy (bool, optional, default: true): If false, returns Fanning friction factor

Returns (float): Friction factor, [-]

Examples

Example 1: Turbulent flow with default parameters

Inputs:

Re Di Dc
100000 0.02 0.5

Excel formula:

=FF_CURVED(100000, 0.02, 0.5)

Expected output:

0.023

Example 2: Laminar flow in helical coil

Inputs:

Re Di Dc
250 0.02 0.1

Excel formula:

=FF_CURVED(250, 0.02, 0.1)

Expected output:

0.475

Example 3: Turbulent flow with pipe roughness

Inputs:

Re Di Dc roughness
50000 0.01 0.2 0.0001

Excel formula:

=FF_CURVED(50000, 0.01, 0.2, 0.0001)

Expected output:

0.0494

Example 4: Return Fanning friction factor instead of Darcy

Inputs:

Re Di Dc Darcy
100000 0.02 0.5 false

Excel formula:

=FF_CURVED(100000, 0.02, 0.5, FALSE)

Expected output:

0.006

Example 5: Turbulent flow with Guo method

Inputs:

Re Di Dc ff_curved_method
200000 0.01 0.2 Guo

Excel formula:

=FF_CURVED(200000, 0.01, 0.2, "Guo")

Expected output:

0.022

Python Code

import micropip
await micropip.install(["fluids"])
from fluids.friction import friction_factor_curved as fluids_friction_factor_curved

def ff_curved(Re, Di, Dc, roughness=0, ff_curved_method=None, rec_method='Schmidt', laminar_method='Schmidt laminar', turbulent_method='Schmidt turbulent', Darcy=True):
    """
    Calculate friction factor for fluid flowing in a curved pipe or helical coil, supporting both laminar and turbulent regimes.

    See: https://fluids.readthedocs.io/fluids.friction.html#fluids.friction.friction_factor_curved

    This example function is provided as-is without any representation of accuracy.

    Args:
        Re (float): Reynolds number with D=Di, [-]
        Di (float): Inner diameter of the tube making up the coil, [m]
        Dc (float): Diameter of the helix/coil (center-to-center), [m]
        roughness (float, optional): Roughness of pipe wall, [m] Default is 0.
        ff_curved_method (str, optional): Specific correlation method to use, overriding automatic selection Valid options: White, Mori Nakayama laminar, Schmidt laminar, Guo, Ju, Schmidt turbulent, Prasad, Mandal Nigam, Mori Nakayama turbulent, Czop. Default is None.
        rec_method (str, optional): Critical Re transition method Valid options: Seth Stahel, Ito, Kubair Kuloor, Kutateladze Borishanskii, Schmidt, Srinivasan. Default is 'Schmidt'.
        laminar_method (str, optional): Laminar regime correlation Valid options: White, Mori Nakayama laminar, Schmidt laminar. Default is 'Schmidt laminar'.
        turbulent_method (str, optional): Turbulent regime correlation Valid options: Guo, Ju, Schmidt turbulent, Prasad, Mandal Nigam, Mori Nakayama turbulent, Czop. Default is 'Schmidt turbulent'.
        Darcy (bool, optional): If false, returns Fanning friction factor Default is True.

    Returns:
        float: Friction factor, [-]
    """
    # Convert inputs to appropriate types
    try:
        Re = float(Re)
        Di = float(Di)
        Dc = float(Dc)
        roughness = float(roughness)
    except (ValueError, TypeError):
        return "Error: Could not convert numeric parameters."

    # Validate inputs
    if Re <= 0:
        return "Error: Reynolds number must be positive."
    if Di <= 0:
        return "Error: Inner diameter must be positive."
    if Dc <= 0:
        return "Error: Coil diameter must be positive."
    if roughness < 0:
        return "Error: Roughness cannot be negative."

    # Handle None for ff_curved_method
    if ff_curved_method is None:
        ff_curved_method = None

    try:
        result = fluids_friction_factor_curved(
            Re=Re,
            Di=Di,
            Dc=Dc,
            roughness=roughness,
            Method=ff_curved_method,
            Rec_method=rec_method,
            laminar_method=laminar_method,
            turbulent_method=turbulent_method,
            Darcy=Darcy
        )

        # Handle special float values
        if result != result:  # NaN check
            return "nan"
        if result == float('inf'):
            return "inf"
        if result == float('-inf'):
            return "-inf"

        return float(result)
    except Exception as e:
        return f"Error computing friction factor: {str(e)}"

Online Calculator