Skip to main content
Glama
gabrielserrao

pyResToolbox MCP Server

gas_sg_from_composition

Calculate gas specific gravity from hydrocarbon molecular weight and non-hydrocarbon mole fractions using molecular weight weighted average method for compositional gas characterization.

Instructions

Calculate gas specific gravity from composition.

COMPOSITIONAL GAS CHARACTERIZATION - Computes gas specific gravity from hydrocarbon molecular weight and non-hydrocarbon mole fractions. Uses molecular weight weighted average method. Essential when gas composition is known but SG measurement is unavailable or unreliable.

Parameters:

  • hc_mw (float, required): Hydrocarbon molecular weight in lb/lbmol. Valid: 10-200. Typical: 16-50. Example: 18.5 for typical natural gas.

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

  • h2s (float, optional, default=0.0): H2S mole fraction (0-1). Typical: 0-0.05. Example: 0.02 for 2% H2S (sour gas).

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

  • h2 (float, optional, default=0.0): H2 mole fraction (0-1). Typical: 0-0.01. Example: 0.0 (rare in natural gas).

Calculation Method: Weighted average based on molecular weights:

  • HC fraction: User-provided MW (hc_mw)

  • CO2: MW = 44.01 lb/lbmol

  • H2S: MW = 34.08 lb/lbmol

  • N2: MW = 28.01 lb/lbmol

  • H2: MW = 2.02 lb/lbmol

  • Air: MW = 28.97 lb/lbmol (reference for SG)

Formula: MW_avg = hc_fraction × hc_mw + co2 × 44.01 + h2s × 34.08 + n2 × 28.01 + h2 × 2.02 SG = MW_avg / 28.97

Typical Hydrocarbon MW:

  • Pure methane: 16.04

  • Dry gas (C1-C2): 16-18

  • Associated gas (C1-C4): 18-25

  • Wet gas (C1-C6): 25-35

  • Condensate gas: 35-50

Applications:

  • Compositional Simulation: Convert composition to SG for black oil models

  • Gas Plant Feed: Characterize feed gas from composition analysis

  • Sales Gas Specs: Calculate SG for pipeline specifications

  • Contaminated Gas: Analyze gas with high non-hydrocarbon content

  • Laboratory Data: Convert GC analysis to SG

Non-Hydrocarbon Effects:

  • CO2 increases SG (MW=44.01 > air MW=28.97)

  • H2S increases SG (MW=34.08 > air MW=28.97)

  • N2 slightly decreases SG (MW=28.01 ≈ air MW=28.97)

  • H2 significantly decreases SG (MW=2.02 << air MW=28.97)

Returns: Dictionary with:

  • gas_specific_gravity (float): Gas SG (dimensionless, air=1)

  • composition (dict): Detailed composition breakdown

    • hydrocarbon_fraction: Mole fraction of hydrocarbons

    • hydrocarbon_mw: Provided hydrocarbon MW

    • co2_fraction: CO2 mole fraction

    • h2s_fraction: H2S mole fraction

    • n2_fraction: N2 mole fraction

    • h2_fraction: H2 mole fraction

  • method (str): "Molecular weight weighted average"

  • units (str): "dimensionless (air=1)"

  • inputs (dict): Echo of input parameters

Common Mistakes:

  • Using weight fraction instead of mole fraction

  • Incorrect hydrocarbon MW (must be average MW of HC fraction)

  • Mole fractions don't sum to 1.0 (should sum to 1.0)

  • Using component MW instead of mixture MW for hydrocarbons

  • Not accounting for all non-hydrocarbon components

Example Usage:

{
    "hc_mw": 18.5,
    "co2": 0.05,
    "h2s": 0.0,
    "n2": 0.01,
    "h2": 0.0
}

Result: SG ≈ 0.65-0.70 (typical natural gas with 5% CO2, 1% N2).

Note: Mole fractions must sum to 1.0. If only HC fraction is provided, ensure hc_fraction = 1.0 - (co2 + h2s + n2 + h2). Hydrocarbon MW should be the average MW of the hydrocarbon fraction, not individual component MW.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
requestYes

Implementation Reference

  • The handler function for the 'gas_sg_from_composition' tool. It uses pyrestoolbox.gas.gas_sg to compute specific gravity from hydrocarbon MW and impurity mole fractions, formats the response with composition breakdown.
    @mcp.tool()
    def gas_sg_from_composition(request: GasSGFromCompositionRequest) -> dict:
        """Calculate gas specific gravity from composition.
    
        **COMPOSITIONAL GAS CHARACTERIZATION** - Computes gas specific gravity from
        hydrocarbon molecular weight and non-hydrocarbon mole fractions. Uses molecular
        weight weighted average method. Essential when gas composition is known but SG
        measurement is unavailable or unreliable.
    
        **Parameters:**
        - **hc_mw** (float, required): Hydrocarbon molecular weight in lb/lbmol.
          Valid: 10-200. Typical: 16-50. Example: 18.5 for typical natural gas.
        - **co2** (float, optional, default=0.0): CO2 mole fraction (0-1).
          Typical: 0-0.20. Example: 0.05 for 5% CO2.
        - **h2s** (float, optional, default=0.0): H2S mole fraction (0-1).
          Typical: 0-0.05. Example: 0.02 for 2% H2S (sour gas).
        - **n2** (float, optional, default=0.0): N2 mole fraction (0-1).
          Typical: 0-0.10. Example: 0.01 for 1% N2.
        - **h2** (float, optional, default=0.0): H2 mole fraction (0-1).
          Typical: 0-0.01. Example: 0.0 (rare in natural gas).
    
        **Calculation Method:**
        Weighted average based on molecular weights:
        - HC fraction: User-provided MW (hc_mw)
        - CO2: MW = 44.01 lb/lbmol
        - H2S: MW = 34.08 lb/lbmol
        - N2: MW = 28.01 lb/lbmol
        - H2: MW = 2.02 lb/lbmol
        - Air: MW = 28.97 lb/lbmol (reference for SG)
    
        Formula: MW_avg = hc_fraction × hc_mw + co2 × 44.01 + h2s × 34.08 + n2 × 28.01 + h2 × 2.02
        SG = MW_avg / 28.97
    
        **Typical Hydrocarbon MW:**
        - Pure methane: 16.04
        - Dry gas (C1-C2): 16-18
        - Associated gas (C1-C4): 18-25
        - Wet gas (C1-C6): 25-35
        - Condensate gas: 35-50
    
        **Applications:**
        - **Compositional Simulation:** Convert composition to SG for black oil models
        - **Gas Plant Feed:** Characterize feed gas from composition analysis
        - **Sales Gas Specs:** Calculate SG for pipeline specifications
        - **Contaminated Gas:** Analyze gas with high non-hydrocarbon content
        - **Laboratory Data:** Convert GC analysis to SG
    
        **Non-Hydrocarbon Effects:**
        - CO2 increases SG (MW=44.01 > air MW=28.97)
        - H2S increases SG (MW=34.08 > air MW=28.97)
        - N2 slightly decreases SG (MW=28.01 ≈ air MW=28.97)
        - H2 significantly decreases SG (MW=2.02 << air MW=28.97)
    
        **Returns:**
        Dictionary with:
        - **gas_specific_gravity** (float): Gas SG (dimensionless, air=1)
        - **composition** (dict): Detailed composition breakdown
          - hydrocarbon_fraction: Mole fraction of hydrocarbons
          - hydrocarbon_mw: Provided hydrocarbon MW
          - co2_fraction: CO2 mole fraction
          - h2s_fraction: H2S mole fraction
          - n2_fraction: N2 mole fraction
          - h2_fraction: H2 mole fraction
        - **method** (str): "Molecular weight weighted average"
        - **units** (str): "dimensionless (air=1)"
        - **inputs** (dict): Echo of input parameters
    
        **Common Mistakes:**
        - Using weight fraction instead of mole fraction
        - Incorrect hydrocarbon MW (must be average MW of HC fraction)
        - Mole fractions don't sum to 1.0 (should sum to 1.0)
        - Using component MW instead of mixture MW for hydrocarbons
        - Not accounting for all non-hydrocarbon components
    
        **Example Usage:**
        ```python
        {
            "hc_mw": 18.5,
            "co2": 0.05,
            "h2s": 0.0,
            "n2": 0.01,
            "h2": 0.0
        }
        ```
        Result: SG ≈ 0.65-0.70 (typical natural gas with 5% CO2, 1% N2).
    
        **Note:** Mole fractions must sum to 1.0. If only HC fraction is provided,
        ensure hc_fraction = 1.0 - (co2 + h2s + n2 + h2). Hydrocarbon MW should be
        the average MW of the hydrocarbon fraction, not individual component MW.
        """
        sg = gas.gas_sg(
            hc_mw=request.hc_mw,
            co2=request.co2,
            h2s=request.h2s,
            n2=request.n2,
            h2=request.h2
        )
    
        # Calculate composition details
        total_non_hc = request.co2 + request.h2s + request.n2 + request.h2
        hc_fraction = 1.0 - total_non_hc
    
        return {
            "gas_specific_gravity": float(sg),
            "composition": {
                "hydrocarbon_fraction": float(hc_fraction),
                "hydrocarbon_mw": request.hc_mw,
                "co2_fraction": request.co2,
                "h2s_fraction": request.h2s,
                "n2_fraction": request.n2,
                "h2_fraction": request.h2,
            },
            "method": "Molecular weight weighted average",
            "units": "dimensionless (air=1)",
            "inputs": request.model_dump(),
        }
  • Pydantic input schema (BaseModel) for the tool, validating hydrocarbon molecular weight and mole fractions of CO2, H2S, N2, H2.
    class GasSGFromCompositionRequest(BaseModel):
        """Request model for gas SG from composition calculation."""
    
        model_config = ConfigDict(
            json_schema_extra={
                "example": {
                    "hc_mw": 20.5,
                    "co2": 0.05,
                    "h2s": 0.01,
                    "n2": 0.02,
                    "h2": 0.0,
                }
            }
        )
    
        hc_mw: float = Field(..., gt=0, description="Hydrocarbon molecular weight (lb/lbmol)")
        co2: float = Field(0.0, ge=0, le=1, description="CO2 mole fraction")
        h2s: float = Field(0.0, ge=0, le=1, description="H2S mole fraction")
        n2: float = Field(0.0, ge=0, le=1, description="N2 mole fraction")
        h2: float = Field(0.0, ge=0, le=1, description="H2 mole fraction")
  • Registration of all gas tools, including 'gas_sg_from_composition', by calling register_gas_tools which defines the decorated handler functions.
    register_gas_tools(mcp)

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