R/simulate_solar_radiation.R
simulate_solar_radiation.RdGenerates synthetic incoming solar radiation series for multiple stations using physically consistent astronomical and atmospheric controls.
simulate_solar_radiation(
stations,
time_index,
rainfall = NULL,
rh = NULL,
atmospheric_transmissivity = 0.65,
cloud_attenuation = 0.12,
humidity_attenuation = 0.08,
elevation_factor = 0.00012,
seasonal_strength = 1,
noise_sd = 1.5,
min_radiation = 0,
max_radiation = 35,
seed = NULL
)data.frame from create_stations()
data.frame from generate_time_index()
Optional numeric vector. Rainfall series from simulate_rainfall(). Used for cloud attenuation effects.
Optional numeric vector. Relative humidity series from simulate_rh(). Used for atmospheric moisture attenuation.
Numeric. Baseline atmospheric transmissivity coefficient. Default = 0.65
Numeric. Radiation reduction factor from rainfall/cloudiness. Default = 0.12
Numeric. Radiation reduction factor from RH. Default = 0.08
Numeric. Radiation increase per meter elevation. Default = 0.00012
Numeric. Controls annual radiation seasonality. Default = 1
Numeric. Standard deviation of stochastic variability. Default = 1.5
Numeric. Minimum allowable solar radiation. Default = 0
Numeric. Maximum allowable solar radiation. Default = 35
Optional numeric seed.
data.frame containing:
Station name
Longitude
Latitude
Elevation
Simulation timestamp
Calendar year
Calendar month
Climatological season
Simulated solar radiation (MJ/m²/day)
Potential clear-sky radiation
Cloud attenuation factor
Fraction of available sunshine reaching the surface
Solar radiation anomaly
The simulation incorporates:
annual solar cycle,
latitude-dependent extraterrestrial radiation,
cloud/rainfall attenuation,
humidity effects,
elevation enhancement,
seasonal variability,
stochastic atmospheric variability,
physically bounded radiation values.
Solar radiation is simulated as:
daily total radiation (MJ/m²/day) for daily simulations
monthly mean radiation for monthly simulations
yearly mean radiation for yearly simulations
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.
rain <- simulate_rainfall(
stations,
time_index
)
#> Rainfall simulation complete for 3 stations.
rh <- simulate_rh(
stations,
time_index
)
#> Relative humidity simulation complete for 3 stations.
solar <- simulate_solar_radiation(
stations = stations,
time_index = time_index,
rainfall = rain$Rainfall,
rh = rh$RH,
seed = 123
)
#> Solar radiation simulation complete for 3 stations.
head(solar)
#> Station LON LAT ELEV DATE Year Month Season
#> 1 Station_1 -2.062112 10.68112 422.5 2000-01-16 2000 1 Dry
#> 4 Station_1 -2.062112 10.68112 422.5 2000-02-15 2000 2 Dry
#> 7 Station_1 -2.062112 10.68112 422.5 2000-03-16 2000 3 Pre-Wet
#> 10 Station_1 -2.062112 10.68112 422.5 2000-04-15 2000 4 Pre-Wet
#> 13 Station_1 -2.062112 10.68112 422.5 2000-05-16 2000 5 Pre-Wet
#> 16 Station_1 -2.062112 10.68112 422.5 2000-06-15 2000 6 Wet
#> Solar_Radiation Clear_Sky_Radiation Cloud_Factor Sunshine_Fraction
#> 1 17.15 21.57 0.82 0.8037165
#> 4 23.03 23.39 0.91 0.9342460
#> 7 22.51 25.16 0.87 0.8482541
#> 10 25.10 25.92 0.91 0.9291880
#> 13 26.50 25.71 0.94 0.8963896
#> 16 19.47 25.36 0.77 0.7643867
#> Radiation_Anomaly
#> 1 -1.28
#> 4 1.05
#> 7 -0.14
#> 10 2.69
#> 13 4.33
#> 16 -0.86