Generates synthetic wind direction fields for multiple stations using stochastic atmospheric circulation dynamics.

simulate_wind_direction(
  stations,
  time_index,
  wind_speed = NULL,
  base_direction = 225,
  seasonal_shift = 30,
  noise_sd = 30,
  extreme_shift_prob = 0.01,
  max_shift = 90,
  seed = NULL
)

Arguments

stations

data.frame from create_stations()

time_index

data.frame from generate_time_index()

wind_speed

Optional numeric vector. Wind speed values used to dynamically adjust directional variability.

If NULL, synthetic wind speed is generated internally.

base_direction

Numeric. Default prevailing wind direction (degrees). Default = 225

seasonal_shift

Numeric. Controls seasonal directional oscillation. Default = 30

noise_sd

Numeric. Base directional variability. Default = 30

extreme_shift_prob

Numeric. Probability of abrupt directional shifts. Default = 0.01

max_shift

Numeric. Maximum extreme directional deviation. Default = 90

seed

Optional numeric seed.

Value

data.frame containing:

Station

Station name

LON

Longitude

LAT

Latitude

ELEV

Elevation

CLIMATE_ZONE

Climate classification

DATE

Simulation timestamp

Year

Calendar year

Month

Calendar month

Season

Climatological season

WindSpeed

Wind speed (m/s)

WindDirection

Wind direction (degrees)

WindSector

Compass sector

Prevailing_Direction

Mean prevailing direction

Direction_Variability

Directional variability

Extreme_Shift

Extreme directional event flag

Wind_u

Zonal wind component

Wind_v

Meridional wind component

Details

The simulation incorporates:

  • prevailing regional wind regimes,

  • seasonal directional shifts,

  • coastal circulation effects,

  • temporal persistence,

  • wind-speed-dependent directional variability,

  • stochastic directional turbulence,

  • extreme wind-direction shifts,

  • optional wind-speed coupling,

  • vector wind components (u and v).

Examples

stations <- create_stations(
  n = 3,
  seed = 123
)
#> Generating synthetic station network...
#> Generated 3 synthetic stations within bounding box.
#> Deriving climate-aware station attributes...

time_index <- generate_time_index(
  start_date = "2000-01-01",
  end_date = "2005-12-31",
  frequency = "monthly"
)
#> Generated 72 time steps at monthly resolution.

ws <- simulate_wind_speed(
  stations,
  time_index
)
#> Wind speed simulation complete for 3 stations.

wd <- simulate_wind_direction(
  stations,
  time_index,
  wind_speed = ws$WindSpeed
)
#> Wind direction simulation complete for 3 stations.

head(wd)
#>      Station       LON      LAT  ELEV CLIMATE_ZONE       DATE Year Month
#> 1  Station_1 -2.062112 10.68112 422.5     Savannah 2000-01-16 2000     1
#> 4  Station_1 -2.062112 10.68112 422.5     Savannah 2000-02-15 2000     2
#> 7  Station_1 -2.062112 10.68112 422.5     Savannah 2000-03-16 2000     3
#> 10 Station_1 -2.062112 10.68112 422.5     Savannah 2000-04-15 2000     4
#> 13 Station_1 -2.062112 10.68112 422.5     Savannah 2000-05-16 2000     5
#> 16 Station_1 -2.062112 10.68112 422.5     Savannah 2000-06-15 2000     6
#>     Season WindSpeed WindDirection WindSector Prevailing_Direction
#> 1      Dry      9.55        160.74          S                  180
#> 4      Dry      7.43        205.29         SW                  180
#> 7  Pre-Wet      5.84        356.08          N                  180
#> 10 Pre-Wet      6.44        277.59          W                  180
#> 13 Pre-Wet      7.19        263.99          W                  180
#> 16     Wet      6.18        198.61          S                  180
#>    Direction_Variability Extreme_Shift Wind_u Wind_v
#> 1                     30             0  -3.15   9.02
#> 4                     30             0   3.17   6.72
#> 7                     60             0   0.40  -5.83
#> 10                    30             0   6.38  -0.85
#> 13                    30             0   7.15   0.75
#> 16                    30             0   1.97   5.86