oil_twu_critical_properties
Calculate critical temperature, pressure, and volume for petroleum fractions using the Twu correlation for EOS fluid characterization and phase behavior modeling.
Instructions
Calculate critical properties using Twu (1984) correlation.
CRITICAL PROPERTIES ESTIMATION - Most widely used method for estimating Tc, Pc, Vc for petroleum fractions and plus fractions.
Twu Method:
More accurate than older correlations (Riazi-Daubert, Kesler-Lee)
Uses molecular weight and specific gravity
Optional boiling point for improved accuracy
Damping factor for heavy ends
Returns:
Tc: Critical temperature (°R)
Pc: Critical pressure (psia)
Vc: Critical volume (cuft/lbmol)
Also returns: SG, Tb (if not provided)
Critical for:
EOS (PR, SRK) fluid characterization
Plus fraction splitting
Compositional simulation
Phase behavior modeling
Args: request: Molecular weight, specific gravity, optional boiling point, damping
Returns: Dictionary with all critical properties
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Implementation Reference
- The handler function implementing the oil_twu_critical_properties tool logic. It uses the Twu correlation via pyrestoolbox.oil.oil_twu_props to compute critical properties from molecular weight, specific gravity, and damping factor.def oil_twu_critical_properties(request: TwuPropertiesRequest) -> dict: """Calculate critical properties using Twu (1984) correlation. **CRITICAL PROPERTIES ESTIMATION** - Most widely used method for estimating Tc, Pc, Vc for petroleum fractions and plus fractions. **Twu Method:** - More accurate than older correlations (Riazi-Daubert, Kesler-Lee) - Uses molecular weight and specific gravity - Optional boiling point for improved accuracy - Damping factor for heavy ends **Returns:** - Tc: Critical temperature (°R) - Pc: Critical pressure (psia) - Vc: Critical volume (cuft/lbmol) - Also returns: SG, Tb (if not provided) **Critical for:** - EOS (PR, SRK) fluid characterization - Plus fraction splitting - Compositional simulation - Phase behavior modeling Args: request: Molecular weight, specific gravity, optional boiling point, damping Returns: Dictionary with all critical properties """ # oil_twu_props doesn't take tb as input, it calculates it result = oil.oil_twu_props( mw=request.mw, sg=request.sg, damp=request.damp ) # result is tuple: (sg, tb, tc, pc, vc) return { "specific_gravity": float(result[0]) if not isinstance(result[0], np.ndarray) else result[0].tolist(), "boiling_point_degR": float(result[1]) if not isinstance(result[1], np.ndarray) else result[1].tolist(), "critical_temperature_degR": float(result[2]) if not isinstance(result[2], np.ndarray) else result[2].tolist(), "critical_pressure_psia": float(result[3]) if not isinstance(result[3], np.ndarray) else result[3].tolist(), "critical_volume_cuft_lbmol": float(result[4]) if not isinstance(result[4], np.ndarray) else result[4].tolist(), "method": "Twu (1984) correlation", "inputs": request.model_dump(), "note": "Use for plus fraction characterization and EOS modeling" }
- Pydantic BaseModel defining the input schema (parameters with validation and descriptions) for the tool.class TwuPropertiesRequest(BaseModel): """Request model for Twu critical properties calculation.""" mw: Union[float, List[float]] = Field( ..., gt=0, description="Molecular weight (lb/lbmol) - scalar or array" ) sg: Union[float, List[float]] = Field( ..., gt=0, description="Specific gravity - scalar or array" ) tb: Optional[Union[float, List[float]]] = Field( None, description="Boiling point (degR) - optional" ) damp: float = Field( 0.0, ge=0, le=1, description="Damping factor (0-1)" )
- src/pyrestoolbox_mcp/server.py:24-24 (registration)Registration call in the main server.py file that invokes register_oil_tools(mcp), which defines and registers the oil_twu_critical_properties tool using @mcp.tool() decorator.register_oil_tools(mcp)
- src/pyrestoolbox_mcp/tools/oil_tools.py:1026-1026 (registration)The @mcp.tool() decorator immediately before the handler definition, which registers the function as an MCP tool.@mcp.tool()