calculate_venturi_effect
Compute throat velocity, pressure drop, and volumetric flow rate for fluid flowing through a constriction, applying the continuity equation and Bernoulli's principle.
Instructions
Calculate Venturi effect (flow through constriction).
Uses continuity equation and Bernoulli's principle.
Args:
inlet_diameter: Inlet diameter in meters
throat_diameter: Throat (constriction) diameter in meters
inlet_velocity: Inlet velocity in m/s
fluid_density: Fluid density in kg/m³
Returns:
Dict containing:
- throat_velocity: Velocity at throat in m/s
- pressure_drop: Pressure drop from inlet to throat in Pascals
- flow_rate: Volumetric flow rate in m³/s
Example - Venturi meter:
result = await calculate_venturi_effect(
inlet_diameter=0.1, # 10 cm
throat_diameter=0.05, # 5 cm
inlet_velocity=2.0, # m/s
fluid_density=1000 # water
)
# throat_velocity = 8 m/s (4x area reduction)Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| inlet_diameter | Yes | ||
| throat_diameter | Yes | ||
| inlet_velocity | Yes | ||
| fluid_density | Yes |
Implementation Reference
- Async tool handler for calculate_venturi_effect that wraps the core logic. Decorated with @tool for MCP registration. Accepts inlet_diameter, throat_diameter, inlet_velocity, fluid_density and returns throat_velocity, pressure_drop, flow_rate.
async def calculate_venturi_effect( inlet_diameter: float, throat_diameter: float, inlet_velocity: float, fluid_density: float, ) -> dict: """Calculate Venturi effect (flow through constriction). Uses continuity equation and Bernoulli's principle. Args: inlet_diameter: Inlet diameter in meters throat_diameter: Throat (constriction) diameter in meters inlet_velocity: Inlet velocity in m/s fluid_density: Fluid density in kg/m³ Returns: Dict containing: - throat_velocity: Velocity at throat in m/s - pressure_drop: Pressure drop from inlet to throat in Pascals - flow_rate: Volumetric flow rate in m³/s Example - Venturi meter: result = await calculate_venturi_effect( inlet_diameter=0.1, # 10 cm throat_diameter=0.05, # 5 cm inlet_velocity=2.0, # m/s fluid_density=1000 # water ) # throat_velocity = 8 m/s (4x area reduction) """ from ..fluid_advanced import VenturiEffectRequest, calculate_venturi_effect as calc_venturi request = VenturiEffectRequest( inlet_diameter=inlet_diameter, throat_diameter=throat_diameter, inlet_velocity=inlet_velocity, fluid_density=fluid_density, ) response = calc_venturi(request) return response.model_dump() - Core implementation of Venturi effect calculation using continuity equation (A1*v1 = A2*v2) and Bernoulli's principle (ΔP = 0.5*ρ*(v2² - v1²)). Computes throat velocity, pressure drop, and flow rate.
def calculate_venturi_effect(request: VenturiEffectRequest) -> VenturiEffectResponse: """Calculate Venturi effect (flow through constriction). Uses continuity equation and Bernoulli's principle: - A₁v₁ = A₂v₂ (continuity) - P₁ + (1/2)ρv₁² = P₂ + (1/2)ρv₂² (Bernoulli) Args: request: Venturi effect request Returns: Throat velocity and pressure drop """ d1 = request.inlet_diameter d2 = request.throat_diameter v1 = request.inlet_velocity rho = request.fluid_density # Areas A1 = math.pi * (d1 / 2.0) ** 2 A2 = math.pi * (d2 / 2.0) ** 2 # Continuity: A₁v₁ = A₂v₂ v2 = v1 * (A1 / A2) # Bernoulli: ΔP = (1/2)ρ(v₂² - v₁²) pressure_drop = 0.5 * rho * (v2 * v2 - v1 * v1) # Flow rate flow_rate = A1 * v1 return VenturiEffectResponse( throat_velocity=v2, pressure_drop=pressure_drop, flow_rate=flow_rate, ) - VenturiEffectRequest Pydantic schema: defines input fields (inlet_diameter, throat_diameter, inlet_velocity, fluid_density) with validation constraints.
class VenturiEffectRequest(BaseModel): """Request for Venturi effect calculation (flow through constriction).""" inlet_diameter: float = Field(..., description="Inlet diameter in meters", gt=0.0) throat_diameter: float = Field(..., description="Throat diameter in meters", gt=0.0) inlet_velocity: float = Field(..., description="Inlet velocity in m/s", ge=0.0) fluid_density: float = Field(default=1000.0, description="Fluid density in kg/m³", gt=0.0) - VenturiEffectResponse Pydantic schema: defines output fields (throat_velocity, pressure_drop, flow_rate).
class VenturiEffectResponse(BaseModel): """Response for Venturi effect.""" throat_velocity: float = Field(..., description="Velocity at throat in m/s") pressure_drop: float = Field(..., description="Pressure drop from inlet to throat in Pascals") flow_rate: float = Field(..., description="Volumetric flow rate in m³/s") - src/chuk_mcp_physics/tools/fluid.py:497-538 (registration)The @tool decorator on line 497 registers calculate_venturi_effect as an MCP tool in the tools/fluid.py module.
@tool # type: ignore[arg-type] async def calculate_venturi_effect( inlet_diameter: float, throat_diameter: float, inlet_velocity: float, fluid_density: float, ) -> dict: """Calculate Venturi effect (flow through constriction). Uses continuity equation and Bernoulli's principle. Args: inlet_diameter: Inlet diameter in meters throat_diameter: Throat (constriction) diameter in meters inlet_velocity: Inlet velocity in m/s fluid_density: Fluid density in kg/m³ Returns: Dict containing: - throat_velocity: Velocity at throat in m/s - pressure_drop: Pressure drop from inlet to throat in Pascals - flow_rate: Volumetric flow rate in m³/s Example - Venturi meter: result = await calculate_venturi_effect( inlet_diameter=0.1, # 10 cm throat_diameter=0.05, # 5 cm inlet_velocity=2.0, # m/s fluid_density=1000 # water ) # throat_velocity = 8 m/s (4x area reduction) """ from ..fluid_advanced import VenturiEffectRequest, calculate_venturi_effect as calc_venturi request = VenturiEffectRequest( inlet_diameter=inlet_diameter, throat_diameter=throat_diameter, inlet_velocity=inlet_velocity, fluid_density=fluid_density, ) response = calc_venturi(request) return response.model_dump()