calculate_reynolds_number
Calculates Reynolds number using velocity, characteristic length, fluid density, and dynamic viscosity to classify flow as laminar, transitional, or turbulent.
Instructions
Calculate Reynolds number: Re = ρvL/μ.
Determines flow regime (laminar, transitional, turbulent).
Args:
velocity: Flow velocity in m/s
characteristic_length: Characteristic length in meters (pipe diameter, etc.)
fluid_density: Fluid density in kg/m³
dynamic_viscosity: Dynamic viscosity in Pa·s (water=0.001, air=1.8e-5)
Returns:
Dict containing:
- reynolds_number: Re (dimensionless)
- flow_regime: "laminar" (Re<2300), "transitional" (2300-4000), "turbulent" (Re>4000)
Example - Water in pipe:
result = await calculate_reynolds_number(
velocity=2.0, # m/s
characteristic_length=0.05, # 5cm diameter
fluid_density=1000, # water
dynamic_viscosity=0.001
)
# Re = 100,000 → turbulentInput Schema
| Name | Required | Description | Default |
|---|---|---|---|
| velocity | Yes | ||
| characteristic_length | Yes | ||
| fluid_density | Yes | ||
| dynamic_viscosity | Yes |
Implementation Reference
- MCP tool handler (async) that defines the calculate_reynolds_number tool. Accepts velocity, characteristic_length, fluid_density, and dynamic_viscosity as parameters, creates a ReynoldsNumberRequest, delegates to the core calculation, and returns a dict.
@tool # type: ignore[arg-type] async def calculate_reynolds_number( velocity: float, characteristic_length: float, fluid_density: float, dynamic_viscosity: float, ) -> dict: """Calculate Reynolds number: Re = ρvL/μ. Determines flow regime (laminar, transitional, turbulent). Args: velocity: Flow velocity in m/s characteristic_length: Characteristic length in meters (pipe diameter, etc.) fluid_density: Fluid density in kg/m³ dynamic_viscosity: Dynamic viscosity in Pa·s (water=0.001, air=1.8e-5) Returns: Dict containing: - reynolds_number: Re (dimensionless) - flow_regime: "laminar" (Re<2300), "transitional" (2300-4000), "turbulent" (Re>4000) Example - Water in pipe: result = await calculate_reynolds_number( velocity=2.0, # m/s characteristic_length=0.05, # 5cm diameter fluid_density=1000, # water dynamic_viscosity=0.001 ) # Re = 100,000 → turbulent """ from ..fluid_advanced import ReynoldsNumberRequest, calculate_reynolds_number as calc_reynolds request = ReynoldsNumberRequest( velocity=velocity, characteristic_length=characteristic_length, fluid_density=fluid_density, dynamic_viscosity=dynamic_viscosity, ) response = calc_reynolds(request) return response.model_dump() - Core implementation of Reynolds number calculation using Re = (rho * v * L) / mu. Determines flow regime: laminar (<2300), transitional (2300-4000), or turbulent (>4000).
def calculate_reynolds_number(request: ReynoldsNumberRequest) -> ReynoldsNumberResponse: """Calculate Reynolds number: Re = ρvL/μ. The Reynolds number characterizes the flow regime: - Re < 2300: Laminar flow - 2300 < Re < 4000: Transitional flow - Re > 4000: Turbulent flow Args: request: Reynolds number request Returns: Reynolds number and flow regime """ rho = request.fluid_density v = request.velocity L = request.characteristic_length mu = request.dynamic_viscosity Re = (rho * v * L) / mu # Determine flow regime if Re < 2300: regime = "laminar" elif Re < 4000: regime = "transitional" else: regime = "turbulent" return ReynoldsNumberResponse( reynolds_number=Re, flow_regime=regime, ) - Pydantic request model for Reynolds number calculation with velocity, characteristic_length, fluid_density, and dynamic_viscosity fields.
class ReynoldsNumberRequest(BaseModel): """Request for Reynolds number calculation.""" velocity: float = Field(..., description="Flow velocity in m/s", gt=0.0) characteristic_length: float = Field( ..., description="Characteristic length (diameter, chord) in meters", gt=0.0 ) fluid_density: float = Field(..., description="Fluid density in kg/m³", gt=0.0) dynamic_viscosity: float = Field(..., description="Dynamic viscosity in Pa⋅s", gt=0.0) - Pydantic response model for Reynolds number containing reynolds_number (float) and flow_regime (string).
class ReynoldsNumberResponse(BaseModel): """Response for Reynolds number.""" reynolds_number: float = Field(..., description="Reynolds number (dimensionless)") flow_regime: str = Field(..., description="Flow regime: laminar, transitional, or turbulent") - src/chuk_mcp_physics/tools/fluid.py:454-455 (registration)Tool registered via @tool decorator on the async calculate_reynolds_number function, making it available as an MCP tool.
@tool # type: ignore[arg-type] async def calculate_reynolds_number(