Skip to content
Back to skills

Seawater Sound Speed Calculation

ASecurity

Calculate sound speed in seawater from practical salinity, temperature, and pressure using the Gibbs Seawater Oceanographic Toolbox.

  • 170 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 11, 2026
toolspythongitapiperformance

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned September 11, 2026

npx -y skills add InternScience/DrClaw --skill seawater-sound-speed-calculation --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Seawater Sound Speed Calculation?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Seawater Sound Speed Calculation
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/internscience-seawater-sound-speed-calculation-drclaw/badge)](https://www.skillsdirectory.com/skills/internscience-seawater-sound-speed-calculation-drclaw)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: seawater-sound-speed-calculation
description: Calculate sound speed in seawater from practical salinity, temperature, and pressure using the Gibbs Seawater Oceanographic Toolbox.
license: MIT license
metadata:
    skill-author: PJLab
---

# Seawater Sound Speed Calculation

## Usage

### 1. MCP Server Definition

```python
import asyncio
import json
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession

class OceanClient:
    """OceanGSW-Tool MCP Client"""

    def __init__(self, server_url: str, api_key: str):
        self.server_url = server_url
        self.api_key = api_key
        self.session = None

    async def connect(self):
        """Establish connection and initialize session"""
        try:
            self.transport = streamablehttp_client(
                url=self.server_url,
                headers={"SCP-HUB-API-KEY": self.api_key}
            )
            self.read, self.write, self.get_session_id = await self.transport.__aenter__()
            self.session_ctx = ClientSession(self.read, self.write)
            self.session = await self.session_ctx.__aenter__()
            await self.session.initialize()
            return True
        except Exception as e:
            print(f"✗ connect failure: {e}")
            return False

    async def disconnect(self):
        """Disconnect from server"""
        try:
            if self.session:
                await self.session_ctx.__aexit__(None, None, None)
            if hasattr(self, 'transport'):
                await self.transport.__aexit__(None, None, None)
        except Exception as e:
            print(f"✗ disconnect error: {e}")

    def parse_result(self, result):
        """Parse MCP tool call result"""
        try:
            if hasattr(result, 'content') and result.content:
                content = result.content[0]
                if hasattr(content, 'text'):
                    return json.loads(content.text)
            return str(result)
        except Exception as e:
            return {"error": f"parse error: {e}", "raw": str(result)}
```

### 2. Sound Speed Calculation Workflow

This workflow calculates sound speed in seawater using thermodynamic equations.

**Workflow Steps:**

1. **Calculate Absolute Salinity** - Convert practical salinity to absolute salinity
2. **Calculate Conservative Temperature** - Convert in-situ temperature to conservative temperature
3. **Calculate Sound Speed** - Compute speed of sound in seawater

**Implementation:**

```python
## Initialize client
client = OceanClient(
    "https://scp.intern-ai.org.cn/api/v1/mcp/34/OceanGSW-Tool",
    "<your-api-key>"
)

if not await client.connect():
    print("connection failed")
    exit()

## Input: Seawater properties
input_params = {
    'SP': [35.0, 5.0],           # Practical salinity (PSU)
    't': [15.0, 10.0],           # In-situ temperature (°C)
    'p': [1000.0, 1000.0],       # Pressure (dbar)
    'lon': [120.0, 165.0],       # Longitude (degrees East)
    'lat': [30.0, 45.0]          # Latitude (degrees North)
}

## Step 1: Calculate absolute salinity (SA)
result = await client.session.call_tool(
    "gsw_example_absolute_salinity",
    arguments={
        "SP": input_params['SP'],
        'p': input_params['p'],
        'lon': input_params['lon'],
        'lat': input_params['lat']
    }
)

result_data = client.parse_result(result)
SA_result = result_data["st"]
print("Absolute Salinity:")
for i, sa in enumerate(SA_result):
    print(f"  SP={input_params['SP'][i]} → SA={sa:.4f} g/kg")

## Step 2: Calculate conservative temperature (CT)
result = await client.session.call_tool(
    "gsw_example_conservative_temperature",
    arguments={
        "SA": SA_result,
        't': input_params['t'],
        'p': input_params['p']
    }
)

result_data = client.parse_result(result)
CT_result = result_data["st"]
print("\nConservative Temperature:")
for i, ct in enumerate(CT_result):
    print(f"  t={input_params['t'][i]}°C → CT={ct:.4f}°C")

## Step 3: Calculate sound speed
result = await client.session.call_tool(
    "gsw_example_sound_speed",
    arguments={
        "SA": SA_result,
        'CT': CT_result,
        'p': input_params['p']
    }
)

result_data = client.parse_result(result)
sound_speed_result = result_data["st"]["sound_speed"]

print("\nSound Speed Results:")
for i, speed in enumerate(sound_speed_result):
    print(f"{i+1}. SA={SA_result[i]:.2f} g/kg, CT={CT_result[i]:.2f}°C, p={input_params['p'][i]} dbar")
    print(f"   Sound speed: {speed:.2f} m/s\n")

await client.disconnect()
```

### Tool Descriptions

**OceanGSW-Tool Server:**
- `gsw_example_absolute_salinity`: Calculate absolute salinity
  - Args:
    - `SP` (list): Practical salinity (PSU)
    - `p` (list): Pressure (dbar)
    - `lon` (list): Longitude (degrees East)
    - `lat` (list): Latitude (degrees North)
  - Returns: Absolute salinity (g/kg)

- `gsw_example_conservative_temperature`: Calculate conservative temperature
  - Args:
    - `SA` (list): Absolute salinity (g/kg)
    - `t` (list): In-situ temperature (°C)
    - `p` (list): Pressure (dbar)
  - Returns: Conservative temperature (°C)

- `gsw_example_sound_speed`: Calculate sound speed
  - Args:
    - `SA` (list): Absolute salinity (g/kg)
    - `CT` (list): Conservative temperature (°C)
    - `p` (list): Pressure (dbar)
  - Returns: Sound speed (m/s)

### Input/Output

**Input:**
- `SP`: Practical salinity (0-42 PSU typical range)
- `t`: In-situ temperature (-2 to 40°C)
- `p`: Sea pressure (0-11000 dbar)
- `lon`: Longitude (-180 to 180°E)
- `lat`: Latitude (-90 to 90°N)

**Output:**
- Sound speed in m/s (typically 1400-1600 m/s in ocean)

### Use Cases

- Underwater acoustics and sonar systems
- Ocean circulation modeling
- Submarine navigation
- Marine seismic surveys
- Oceanographic research

### Performance Notes

- **Standards**: TEOS-10 (Thermodynamic Equation of Seawater)
- **Accuracy**: ±0.02 m/s
- **Execution time**: <1 second for batch calculations

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…