Everything the TOPIA teaching model needs, in one list: the maps of the
imaginary country "Topia", the deterministic weather / demand / stock
profiles, and the kit of ready energyRt building blocks and scenario levers.
Built by data-raw/topia_maps.R, topia_data.R and topia_modules.R,
folded together by data-raw/topia_assemble.R.
Format
A named list of five elements:
- geoscales
named list of four geoscales::GeoScale objects (
squares,honeycomb,island,continent). Each carries the same hierarchy –nation TOPIA -> zone WEST/CENTRAL/EAST -> regionoverW1,W2,C1..C6,E1..E3– and that layout's polygons, plus a planarareaweight. This is the dataset's ONLY copy of the geometry: the plaintopia$mapand thetopia$geohierarchy table were removed in 0.91. Get either back withgeoscales::geoscale_geometry(gs, "region")andgeoscales::geoscale_leaftable(gs). Every layout draws the same eleven regions in different places, and each assigns the codes so that a zone is one contiguous block on that picture.- weather
deterministic solar / wind / hydro capacity factors for the three teaching calendars. Columns
calendar(s4_h24/m12_h24/topia_seasons),resource(WSOL/WWIN/WHYD),timeslice(e.g.SUM_h12,m06_h12orSUM_DAY) andwval(capacity factor, 0-1). Attributesourcerecords whether it came from IDEEA reanalysis or the curated fallback.- demand
a relative electricity-load shape by timeslice, for the same three calendars. Columns
calendar,timesliceandload(relative, mean ~1); scale it by a region's annual demand and the timeslice shares to get energy per timeslice.- stock
deterministic base-year installed capacity per technology. Columns
techandgw.- modules
the kit – see below.
Details
The profile tables are region-agnostic; expand them to a model's regions
with topia_profiles(). For synthetic shapes on any calendar (rather than
TOPIA's saved curves) use topia_profile().
The modules kit
Mirrors the structure of IDEEA::ideea_modules. Assemble a model from a
chosen region layout, solve it, and layer the levers to run scenarios (see
the topia-use vignette).
- info
a description string.
- calendars
the TOPIA calendars (
annual/topia_seasons/s4_h24/m12_h24) plus the symmetric unit calendars (unit_s4, 4 equal seasons;unit_s4h4, 4x4). Noteannualcannot drive the shipped kits (ELCis balanced at theHOURlevel andtopia_profiles()has no annual shapes); it ships as the coarsest example calendar.- horizons
planning horizons (
base= 2025/2030/2040/2050, each milestone the MID-point of its period, so that is where its costs are discounted from;unit= the single year 2025 for the unit kits).- electricity
per region layout (
R1,R3,R7,R11– an n-region layout is keyedR<n>and takes the first n regions of the canonical west-to-east orderW1,W2,C1..C6,E1..E3), each a "kit":repo(the base repository),geoscale(the layout's slice of thenation -> zone -> regionhierarchy, without geometry – a kit model MUST carry it, see the examples), the individual blocks (repo_comm,repo_supply,DEM_ELC,WSOL/WWIN/WHYD, the technologies,STG_ELC), the scenario leversCO2_CAP,CT_CO2,RES_SHARE,NO_NEW_NUC,EARLY_RET, and the add-on modules – re-declared objects that REPLACE their base counterpart when added withadd(mod, ., overwrite = TRUE):GAS_CURVE(domestic gas as a 3-stepasSupplyCurve()),EWIN_SITES(wind in two site-grade clusters, finite GOOD + down-rated POOR),ENUC_VINT(nuclear in two build vintages, absent from theR1kit, which reaches no nuclear region).The resources are CONCENTRATED, which is what drives trade:
COAandGASare balanced per ZONE (commodity@geoframe) and traded between zones onTBD_COA_*/TBD_GAS_*corridors, with finiteava.upendowments – coal cheap and plentiful inWEST, gas inEAST– above whichIMP_COA/IMP_GASare the unbounded backstop. Electricity is balanced and traded at the region level (TBD_ELC_*). Reservoir hydro sits inC4(12 GW),E1(6) andC1(3), and the single nuclear station inC1. Costs are USD (MUSD/GW, MUSD/PJ).- unit
the "unit model" kits (
U1,U3): every input is 1 on the symmetricunit_s4calendar, single-yearunithorizon,discount = 0, so each variant's objective is a small hand-checkable integer – baseU1solves to exactly 8,U3(trade chain from theW1endowment) to 36,SUP_CURVE(2-step unit supply curve replacing the flat supply) to 10, the self-containedSOLARrepository (on/off resource fromtopia_profile()+ storage bridging) to 10. The arithmetic is written out indata-raw/topia_modules.Rand pinned bytest-unit-model.R.
See also
topia_profiles(), topia_profile(),
calendars, horizons, asSupplyCurve(), the TOPIA vignettes
Other topia:
topia_profile(),
topia_profiles()
Examples
names(topia)
#> [1] "geoscales" "weather" "demand" "stock" "modules"
names(topia$geoscales)
#> [1] "squares" "honeycomb" "island" "continent"
head(topia$weather)
#> calendar resource timeslice wval
#> 1 s4_h24 WSOL FAL_h00 0.00000000
#> 2 s4_h24 WSOL FAL_h01 0.00000000
#> 3 s4_h24 WSOL FAL_h02 0.00000000
#> 4 s4_h24 WSOL FAL_h03 0.00000000
#> 5 s4_h24 WSOL FAL_h04 0.00000000
#> 6 s4_h24 WSOL FAL_h05 0.00132967
topia$stock
#> tech gw
#> 1 ECOA 6
#> 2 EGAS 3
#> 3 ENUC 2
#> 4 EHYD 5
#> 5 ESOL 1
#> 6 EWIN 1
if (FALSE) { # \dontrun{
gs <- topia$geoscales$honeycomb # hierarchy + that layout's polygons
geoscales::geoscale_leaftable(gs) # the region table
plot_geoscale(gs, type = "map")
um <- topia$modules$electricity$R3
mod <- newModel("TOPIA", data = um$repo,
calendar = topia$modules$calendars$s4_h24,
region = um$regions,
horizon = topia$modules$horizons$base,
discount = 0.05)
mod <- setGeoscale(mod, um$geoscale)
scen <- solve_scenario(interpolate_model(mod, "BASE"),
solver = solver_options$glpk)
# the unit model: hand-checkable integer objective (8)
uk <- topia$modules$unit$U1
umod <- newModel("UNIT", data = uk$repo,
calendar = topia$modules$unit$calendars$unit_s4,
region = uk$regions,
horizon = topia$modules$horizons$unit, discount = 0)
} # }
