Skip to main content
Glama

pyResToolbox MCP Server

gas_rate_linear

Calculate gas production rates for horizontal wells using real gas pseudopressure to account for pressure-dependent gas properties like Z-factor and viscosity variations.

Instructions

Calculate gas production rate for linear flow.

INFLOW PERFORMANCE TOOL - Computes gas production rate for horizontal wells or wells with linear flow geometry using real gas pseudopressure formulation. This accounts for pressure-dependent gas properties (Z-factor, viscosity) which are significant for gas systems. More accurate than simplified Darcy's law for gas.

Parameters:

  • pi (float, required): Initial/reservoir pressure in psia. Must be > 0. Example: 5000.0.

  • sg (float, required): Gas specific gravity (air=1). Valid: 0.55-3.0. Typical: 0.6-1.2. Example: 0.7.

  • degf (float, required): Reservoir temperature in °F. Valid: -460 to 1000. Example: 180.0.

  • psd (float or list, required): Sandface/draining pressure(s) in psia. Must be > 0 and < pi. Can be scalar or array. Example: 2000.0 or [1000, 2000, 3000].

  • h (float, required): Net pay thickness in feet. Must be > 0. Typical: 10-200 ft. Example: 50.0.

  • k (float, required): Permeability in millidarcies (mD). Must be > 0. Typical: 1-1000 mD. Example: 100.0.

  • area (float, required): Cross-sectional flow area in square feet. Must be > 0. Typical: 100-10000 ft². Example: 1000.0.

  • length (float, required): Flow length in feet. Must be > 0. Typical: 100-5000 ft. Example: 500.0.

  • h2s (float, optional, default=0.0): H2S mole fraction (0-1). Typical: 0-0.05. Example: 0.0.

  • co2 (float, optional, default=0.0): CO2 mole fraction (0-1). Typical: 0-0.20. Example: 0.0.

  • n2 (float, optional, default=0.0): N2 mole fraction (0-1). Typical: 0-0.10. Example: 0.0.

Flow Geometry: Linear flow occurs in:

  • Horizontal wells (early-time flow)

  • Hydraulically fractured vertical wells (fracture flow)

  • Channelized gas reservoirs

  • Edge water drive systems

Pseudopressure Method: Uses real gas pseudopressure (m(p)) which linearizes the gas diffusivity equation: m(p) = 2∫(p/(μZ))dp from pb to p

This accounts for:

  • Z-factor variation with pressure

  • Gas viscosity variation with pressure

  • Non-linear pressure behavior

Flow Formula (Linear): qg = (k × area × (m(pi) - m(pwf))) / (1422 × T × length)

Where PVT properties are integrated over pressure range.

Linear vs Radial Flow:

  • Linear: Flow perpendicular to wellbore (horizontal wells)

  • Radial: Flow converging to wellbore (vertical wells)

  • Linear flow typically has higher productivity than radial

Returns: Dictionary with:

  • value (float or list): Gas rate in MSCF/day (matches input psd shape)

  • method (str): "Pseudopressure linear flow"

  • units (str): "MSCF/day"

  • inputs (dict): Echo of input parameters

Common Mistakes:

  • Using separator temperature instead of reservoir temperature

  • Pressure in barg/psig instead of psia (must be absolute)

  • Not accounting for non-hydrocarbon fractions (H2S, CO2, N2)

  • Confusing flow area (perpendicular to flow) with wellbore area

  • Using wrong flow length (should be distance from boundary to well)

  • Confusing linear flow (horizontal wells) with radial flow (vertical wells)

  • Not accounting for net pay thickness correctly

Example Usage:

{ "pi": 5000.0, "sg": 0.7, "degf": 180.0, "psd": [2000, 3000, 4000], "h": 50.0, "k": 100.0, "area": 1000.0, "length": 500.0, "h2s": 0.0, "co2": 0.0, "n2": 0.0 }

Result: Gas rate decreases as sandface pressure increases (typical IPR curve).

Note: This tool uses pseudopressure method which is more accurate than simplified Darcy's law for gas. Always account for non-hydrocarbon components (H2S, CO2, N2) as they affect Z-factor and flow calculations significantly. Linear flow is characteristic of horizontal wells and hydraulically fractured wells.

Input Schema

NameRequiredDescriptionDefault
requestYes

Input Schema (JSON Schema)

{ "properties": { "request": { "$ref": "#/$defs/GasRateLinearRequest" } }, "required": [ "request" ], "type": "object" }

Implementation Reference

  • The MCP tool handler function 'gas_rate_linear' that processes the request, calls the underlying pyrestoolbox.gas.gas_rate_linear computation for linear gas flow using pseudopressure method, formats the output, and returns a dictionary with value, method, units, and inputs.
    @mcp.tool() def gas_rate_linear(request: GasRateLinearRequest) -> dict: """Calculate gas production rate for linear flow. **INFLOW PERFORMANCE TOOL** - Computes gas production rate for horizontal wells or wells with linear flow geometry using real gas pseudopressure formulation. This accounts for pressure-dependent gas properties (Z-factor, viscosity) which are significant for gas systems. More accurate than simplified Darcy's law for gas. **Parameters:** - **pi** (float, required): Initial/reservoir pressure in psia. Must be > 0. Example: 5000.0. - **sg** (float, required): Gas specific gravity (air=1). Valid: 0.55-3.0. Typical: 0.6-1.2. Example: 0.7. - **degf** (float, required): Reservoir temperature in °F. Valid: -460 to 1000. Example: 180.0. - **psd** (float or list, required): Sandface/draining pressure(s) in psia. Must be > 0 and < pi. Can be scalar or array. Example: 2000.0 or [1000, 2000, 3000]. - **h** (float, required): Net pay thickness in feet. Must be > 0. Typical: 10-200 ft. Example: 50.0. - **k** (float, required): Permeability in millidarcies (mD). Must be > 0. Typical: 1-1000 mD. Example: 100.0. - **area** (float, required): Cross-sectional flow area in square feet. Must be > 0. Typical: 100-10000 ft². Example: 1000.0. - **length** (float, required): Flow length in feet. Must be > 0. Typical: 100-5000 ft. Example: 500.0. - **h2s** (float, optional, default=0.0): H2S mole fraction (0-1). Typical: 0-0.05. Example: 0.0. - **co2** (float, optional, default=0.0): CO2 mole fraction (0-1). Typical: 0-0.20. Example: 0.0. - **n2** (float, optional, default=0.0): N2 mole fraction (0-1). Typical: 0-0.10. Example: 0.0. **Flow Geometry:** Linear flow occurs in: - Horizontal wells (early-time flow) - Hydraulically fractured vertical wells (fracture flow) - Channelized gas reservoirs - Edge water drive systems **Pseudopressure Method:** Uses real gas pseudopressure (m(p)) which linearizes the gas diffusivity equation: m(p) = 2∫(p/(μZ))dp from pb to p This accounts for: - Z-factor variation with pressure - Gas viscosity variation with pressure - Non-linear pressure behavior **Flow Formula (Linear):** qg = (k × area × (m(pi) - m(pwf))) / (1422 × T × length) Where PVT properties are integrated over pressure range. **Linear vs Radial Flow:** - Linear: Flow perpendicular to wellbore (horizontal wells) - Radial: Flow converging to wellbore (vertical wells) - Linear flow typically has higher productivity than radial **Returns:** Dictionary with: - **value** (float or list): Gas rate in MSCF/day (matches input psd shape) - **method** (str): "Pseudopressure linear flow" - **units** (str): "MSCF/day" - **inputs** (dict): Echo of input parameters **Common Mistakes:** - Using separator temperature instead of reservoir temperature - Pressure in barg/psig instead of psia (must be absolute) - Not accounting for non-hydrocarbon fractions (H2S, CO2, N2) - Confusing flow area (perpendicular to flow) with wellbore area - Using wrong flow length (should be distance from boundary to well) - Confusing linear flow (horizontal wells) with radial flow (vertical wells) - Not accounting for net pay thickness correctly **Example Usage:** ```python { "pi": 5000.0, "sg": 0.7, "degf": 180.0, "psd": [2000, 3000, 4000], "h": 50.0, "k": 100.0, "area": 1000.0, "length": 500.0, "h2s": 0.0, "co2": 0.0, "n2": 0.0 } ``` Result: Gas rate decreases as sandface pressure increases (typical IPR curve). **Note:** This tool uses pseudopressure method which is more accurate than simplified Darcy's law for gas. Always account for non-hydrocarbon components (H2S, CO2, N2) as they affect Z-factor and flow calculations significantly. Linear flow is characteristic of horizontal wells and hydraulically fractured wells. """ # Convert psd to numpy array for processing psd_array = np.asarray(request.psd) is_scalar = psd_array.ndim == 0 if is_scalar: psd_array = np.array([psd_array]) # Call gas_rate_linear with correct parameters qg = gas.gas_rate_linear( k=request.k, pr=request.pi, pwf=psd_array, area=request.area, length=request.length, degf=request.degf, sg=request.sg, h2s=request.h2s, co2=request.co2, n2=request.n2, ) # Convert numpy array to list for JSON serialization if isinstance(qg, np.ndarray): value = qg.tolist() else: value = float(qg) return { "value": value, "method": "Pseudopressure linear flow", "units": "MSCF/day", "inputs": request.model_dump(), }
  • Pydantic model 'GasRateLinearRequest' defining and validating all input parameters for the gas_rate_linear tool, including pressures, fluid properties, reservoir dimensions, and non-hydrocarbon fractions.
    class GasRateLinearRequest(BaseModel): """Request model for linear gas inflow performance calculation.""" pi: float = Field(..., gt=0, description="Initial reservoir pressure (psia)") sg: float = Field( ..., ge=0.5, le=2.0, description="Gas specific gravity (air=1, dimensionless)" ) degf: float = Field( ..., gt=-460, lt=1000, description="Temperature (degrees Fahrenheit)" ) psd: Union[float, List[float]] = Field( ..., description="Sandface pressure (psia) - scalar or array" ) h: float = Field(..., gt=0, description="Net pay thickness (ft)") k: float = Field(..., gt=0, description="Permeability (mD)") area: float = Field(..., gt=0, description="Drainage area (sq ft)") length: float = Field(..., gt=0, description="Well length (ft)") h2s: float = Field( 0.0, ge=0.0, le=1.0, description="H2S mole fraction (dimensionless)" ) co2: float = Field( 0.0, ge=0.0, le=1.0, description="CO2 mole fraction (dimensionless)" ) n2: float = Field( 0.0, ge=0.0, le=1.0, description="N2 mole fraction (dimensionless)" ) @field_validator("psd") @classmethod def validate_pressure(cls, v): """Validate pressure values.""" if isinstance(v, list): if not all(p > 0 for p in v): raise ValueError("All sandface pressure values must be positive") else: if v <= 0: raise ValueError("Sandface pressure must be positive") return v
  • The registration of inflow tools (including gas_rate_linear) by importing and calling register_inflow_tools on the FastMCP server instance in the main server module.
    from .tools.inflow_tools import register_inflow_tools from .tools.simtools_tools import register_simtools_tools from .tools.brine_tools import register_brine_tools from .tools.layer_tools import register_layer_tools from .tools.library_tools import register_library_tools register_oil_tools(mcp) register_gas_tools(mcp) register_inflow_tools(mcp)
  • The registration function that defines and registers the gas_rate_linear tool using @mcp.tool() decorator when called.
    def register_inflow_tools(mcp: FastMCP) -> None:

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gabrielserrao/pyrestoolbox-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server