9.2 Marine Minerals
The ocean floor contains vast mineral resources: manganese nodules, cobalt crusts, polymetallic sulfides. Mining is technically possible but raises environmental and legal challenges.
Deep-Sea Mineral Types
Polymetallic Nodules
Potato-sized on abyssal plains. Mn, Ni, Cu, Co. Clarion-Clipperton Zone (Pacific). Grow mm/million years.
Cobalt-Rich Crusts
On seamount slopes. Mn, Co, Ni, platinum group. Pacific seamounts. 1-25 cm thick.
Massive Sulfides (SMS)
At hydrothermal vents. Cu, Zn, Au, Ag. Active and inactive vent sites.
Resource Estimates
~21 billion t
Nodules (CCZ alone)
~1 billion t
Cobalt crusts
~600 million t
Seafloor sulfides
Environmental Concerns
Habitat Destruction
Mining removes substrate. Slow recovery (centuries+). Unique ecosystems at vents.
Sediment Plumes
Mining creates turbidity. Can spread hundreds of km. Affects filter feeders.
Unknown Biodiversity
Many species undescribed. Mining may cause extinctions before discovery.
Noise & Light
Deep-sea life adapted to dark, quiet. Mining disrupts these conditions.
Python: Nodule Growth
#!/usr/bin/env python3
"""marine_minerals.py - Manganese nodule formation"""
import numpy as np
import matplotlib.pyplot as plt
def nodule_growth(time_myr, growth_rate_mm_myr=5):
"""
Nodule radius growth over time
Typical growth rate: 1-10 mm/million years
"""
return growth_rate_mm_myr * time_myr
def nodule_mass(radius_mm, density=2000):
"""
Approximate nodule mass (kg)
Assuming spherical
"""
radius_m = radius_mm / 1000
volume = (4/3) * np.pi * radius_m**3
return volume * density
# Growth over geological time
time = np.linspace(0, 20, 100) # million years
radii = nodule_growth(time)
masses = nodule_mass(radii) * 1000 # grams
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
ax1.plot(time, radii, 'b-', lw=2)
ax1.set_xlabel('Time (million years)')
ax1.set_ylabel('Radius (mm)')
ax1.set_title('Nodule Growth')
ax1.grid(True, alpha=0.3)
ax2.plot(time, masses, 'g-', lw=2)
ax2.set_xlabel('Time (million years)')
ax2.set_ylabel('Mass (g)')
ax2.set_title('Nodule Mass')
ax2.grid(True, alpha=0.3)
plt.tight_layout()
# CCZ resource estimate
area_ccz = 4.5e6 # km²
nodules_per_sqm = 15 # average
avg_mass = 0.05 # kg
total = area_ccz * 1e6 * nodules_per_sqm * avg_mass / 1e9
print(f"CCZ nodule resource estimate: {total:.0f} billion tonnes")