4.3 Zooplankton

Zooplankton are the animal component of plankton, ranging from microscopic protozoans to large jellyfish. They link primary producers to higher trophic levels and play key roles in nutrient cycling.

Major Groups

Copepods

Most abundant metazoans on Earth. Key link in marine food webs. Calanus, Acartia.

Krill

Euphausiids. Swarm in millions. Critical food for whales, penguins, fish.

Jellyfish

Cnidarians. Increasing due to overfishing and warming. Bloom dynamics.

Protozoans

Foraminifera, radiolarians, ciliates. Important in microbial loop. Shells form sediments.

Diel Vertical Migration

The largest animal migration on Earth occurs daily in the ocean:

Zooplankton descend 100-1000m during day (predator avoidance) and ascend at night (feeding in surface waters)

Night

Surface feeding

↕ 100-1000m

Migration range

Day

Deep refuge

Grazing Impact

\( G = g_{max} \frac{P^n}{K^n + P^n} Z \)

Holling Type III grazing: gmax=max rate, K=half-saturation, P=phytoplankton, Z=zooplankton

Zooplankton can consume 10-100% of daily phytoplankton production, controlling bloom dynamics.

Python: DVM Model

#!/usr/bin/env python3
"""zooplankton.py - Diel vertical migration model"""
import numpy as np
import matplotlib.pyplot as plt

def dvm_depth(hour, z_day=400, z_night=50, transition_width=2):
    """
    Model zooplankton depth during diel vertical migration
    hour: time of day (0-24)
    """
    # Sinusoidal migration pattern
    # Day at depth, night at surface
    phase = np.pi * (hour - 6) / 12  # sunrise at 6, sunset at 18
    depth = (z_day + z_night) / 2 + (z_day - z_night) / 2 * np.cos(phase)
    return depth

hours = np.linspace(0, 24, 100)
depth = dvm_depth(hours)

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(hours, depth, 'b-', lw=2)
ax.fill_between(hours, depth, 500, alpha=0.3)
ax.set_xlabel('Hour of Day')
ax.set_ylabel('Depth (m)')
ax.set_title('Diel Vertical Migration')
ax.set_ylim(500, 0)  # Inverted y-axis
ax.axvspan(6, 18, alpha=0.2, color='yellow', label='Daylight')
ax.set_xticks([0, 6, 12, 18, 24])
ax.set_xticklabels(['Midnight', 'Sunrise', 'Noon', 'Sunset', 'Midnight'])
ax.legend()