diff --git a/md/input_relatory.lua b/md/input_relatory.lua deleted file mode 100644 index 6407453..0000000 --- a/md/input_relatory.lua +++ /dev/null @@ -1,256 +0,0 @@ --- C:\Users\iury\Desktop\PSRio_Atual\psrio.exe --model OPTGEN -r "D:\PSRIO-scripts\md\input_relatory.lua" "D:\Dropbox (PSR)\PSR_main\OPTGEN\DASHBOARD\caso_timing" - -local studies = PSR.studies(); - --- COLLECTIONS -local area = {}; -local balancingarea = {}; -local balancingareahydro = {}; -local balancingareathermal = {}; -local battery = {}; -local bus = {}; -local circuit = {}; -local circuitssum = {}; -local concentratedsolarpower = {}; -local dclink = {}; -local demand = {}; -local demandsegment = {}; -local electrificationdemand = {}; -local electrificationdemandsegment = {}; -local electrificationnetwork = {}; -local electrificationnode = {}; -local electrificationprocess = {}; -local electrificationproducer = {}; -local electrificationstorage = {}; -local electrificationtransport = {}; -local expansioncapacity = {}; -local expansionconstraint = {}; -local expansiondecision = {}; -local expansionproject = {}; -local flowcontroller = {}; -local fuel = {}; -local fuelconsumption = {}; -local fuelcontract = {}; -local fuelreservoir = {}; -local gasemission = {}; -local gasnode = {}; -local generator = {}; -local generationconstraint = {}; -local generic = {}; -local genericconstraint = {}; -local hydro = {}; -local hydrogaugingstation = {}; -local interconnection = {}; -local interconnectionsum = {}; -local maintenance = {}; -local powerinjection = {}; -local region = {}; -local renewable = {}; -local renewablegaugingstation = {}; -local reservegenerationconstraint = {}; -local reservoirset = {}; -local system = {}; -local study = {}; -local thermal = {}; -local thermalcombinedcycle = {}; - -for i = 1, studies do - table.insert(area, Area(i)); - table.insert(balancingarea, BalancingArea(i)); - table.insert(balancingareahydro, BalancingAreaHydro(i)); - table.insert(balancingareathermal, BalancingAreaThermal(i)); - table.insert(battery, Battery(i)); - table.insert(bus, Bus(i)); - table.insert(circuit, Circuit(i)); - table.insert(circuitssum, CircuitsSum(i)); - table.insert(concentratedsolarpower, ConcentratedSolarPower(i)); - table.insert(dclink, DCLink(i)); - table.insert(demand, Demand(i)); - table.insert(demandsegment, DemandSegment(i)); - table.insert(electrificationdemand, ElectrificationDemand(i)); - table.insert(electrificationdemandsegment, ElectrificationDemandSegment(i)); - table.insert(electrificationnetwork, ElectrificationNetwork(i)); - table.insert(electrificationnode, ElectrificationNode(i)); - table.insert(electrificationprocess, ElectrificationProcess(i)); - table.insert(electrificationproducer, ElectrificationProducer(i)); - table.insert(electrificationstorage, ElectrificationStorage(i)); - table.insert(electrificationtransport, ElectrificationTransport(i)); - table.insert(expansioncapacity, ExpansionCapacity(i)); - table.insert(expansionconstraint, ExpansionConstraint(i)); - table.insert(expansiondecision, ExpansionDecision(i)); - table.insert(expansionproject, ExpansionProject(i)); - table.insert(flowcontroller, FlowController(i)); - table.insert(fuel, Fuel(i)); - table.insert(fuelconsumption, FuelConsumption(i)); - table.insert(fuelcontract, FuelContract(i)); - table.insert(fuelreservoir, FuelReservoir(i)); - table.insert(gasemission, GasEmission(i)); - table.insert(gasnode, GasNode(i)); - table.insert(generator, Generator(i)); - table.insert(generationconstraint, GenerationConstraint(i)); - table.insert(generic, Generic(i)); - table.insert(genericconstraint, GenericConstraint(i)); - table.insert(hydro, Hydro(i)); - table.insert(hydrogaugingstation, HydroGaugingStation(i)); - table.insert(interconnection, Interconnection(i)); - table.insert(interconnectionsum, InterconnectionSum(i)); - table.insert(maintenance, Maintenance(i)); - table.insert(powerinjection, PowerInjection(i)); - table.insert(region, Region(i)); - table.insert(renewable, Renewable(i)); - table.insert(renewablegaugingstation, RenewableGaugingStation(i)); - table.insert(reservegenerationconstraint, ReserveGenerationConstraint(i)); - table.insert(reservoirset, ReservoirSet(i)); - table.insert(system, System(i)); - table.insert(study, Study(i)); - table.insert(thermal, Thermal(i)); - table.insert(thermalcombinedcycle, ThermalCombinedCycle(i)); -end - -local function create_tab(label, icon) - local tab = Tab(label); - tab:set_icon(icon); - tab:push("# " .. label); - return tab; -end - -local function create_prefix(label) - local prefix = ""; - if studies > 1 then - prefix = "|" .. label; - end - return prefix; -end - -local function get_study_parameter(i, key, true_value) - if study[i]:get_parameter(key, -1) == true_value then - return "yes"; - else - return "no"; - end -end - -function Tab.push_cases_header(self) - local row = "| Case Parameter | "; - for i = 1, studies do - row = row .. generic[i]:dirname() .. " | "; - end - self:push(row); - - local row = "|:-:| "; - for i = 1, studies do - row = row .. ":-:|"; - end - self:push(row); -end - -function Tab.push_collections_size(self, label, collection) - local row = "| " .. label .. " | "; - for i = 1, studies do - row = row .. #collection[i] .. " | "; - end - self:push(row); -end - -local function tab_info() - local tab = create_tab("Info", "info"); - - tab:push("## Summary"); - - tab:push_cases_header(); - - local row = "| Execution Type | "; - for i = 1, studies do - local execution_type = "Policy"; - if study[i]:get_parameter("Objetivo", -1) == 2 then - execution_type = "Simulation"; - end - row = row .. execution_type .. " | "; - end - tab:push(row); - - local row = "| Stage Type | "; - for i = 1, studies do - local stage_type = "Unknow"; - if study[i]:stage_type() == 1 then - stage_type = "Weekly"; - elseif study[i]:stage_type() == 2 then - stage_type = "Monthly"; - end - row = row .. stage_type .. " | "; - end - tab:push(row); - - local row = "| Stages | "; - for i = 1, studies do - local stages = study[i]:stages(); - row = row .. stages .. " | "; - end - tab:push(row); - - local row = "| Initial Year of Study | "; - for i = 1, studies do - local initial_year = study[i]:initial_year(); - row = row .. initial_year .. " | "; - end - tab:push(row); - - local row = "| Blocks | "; - for i = 1, studies do - local blocks = study[i]:get_parameter("NumberBlocks", 0); - row = row .. blocks .. " | "; - end - tab:push(row); - - local row = "| Forward Series | "; - for i = 1, studies do - local scenarios = study[i]:scenarios(); - row = row .. scenarios .. " | "; - end - tab:push(row); - - local row = "| Backward Series | "; - for i = 1, studies do - local openings = study[i]:openings(); - row = row .. openings .. " | "; - end - tab:push(row); - - local row = "| Hourly Representation | "; - for i = 1, studies do - local hourly = get_study_parameter(i, "SIMH", 2); - row = row .. hourly .. " | "; - end - tab:push(row); - - local row = "| Network Representation | "; - for i = 1, studies do - local network = get_study_parameter(i, "Rede", 1); - row = row .. network .. " | "; - end - tab:push(row); - - local row = "| Typical Days Representation | "; - for i = 1, studies do - local typical_days = get_study_parameter(i, "TDAY", 1); - row = row .. typical_days .. " | "; - end - tab:push(row); - - tab:push("## Dimensions"); - - tab:push_cases_header(); - tab:push_collections_size("Systems", system); - tab:push_collections_size("Hydro Plants", hydro); - tab:push_collections_size("Thermal Plants", thermal); - tab:push_collections_size("Renewable Plants", renewable); - tab:push_collections_size("Batteries", battery); - tab:push_collections_size("Power Injections", powerinjection); - tab:push_collections_size("Interconnections", interconnection); - - return tab; -end - -local dashboard = Dashboard(); -dashboard:push(tab_info()); -dashboard:save("dashboard"); \ No newline at end of file diff --git a/md/input_summary.lua b/md/input_summary.lua new file mode 100644 index 0000000..547e670 --- /dev/null +++ b/md/input_summary.lua @@ -0,0 +1,348 @@ +-- C:\Users\iury\Desktop\PSRio_Atual\psrio.exe --model SDDP -r "D:\PSRIO-scripts\md\input_summary.lua" "C:\PSR\Sddp17.2\Example\Hourly_representation\Case27" + +local studies = PSR.studies(); + +-- COLLECTIONS +local area = {}; +local balancingarea = {}; +local balancingareahydro = {}; +local balancingareathermal = {}; +local battery = {}; +local bus = {}; +local circuit = {}; +local circuitssum = {}; +local concentratedsolarpower = {}; +local dclink = {}; +local demand = {}; +local demandsegment = {}; +local electrificationdemand = {}; +local electrificationdemandsegment = {}; +local electrificationnetwork = {}; +local electrificationnode = {}; +local electrificationprocess = {}; +local electrificationproducer = {}; +local electrificationstorage = {}; +local electrificationtransport = {}; +local expansioncapacity = {}; +local expansionconstraint = {}; +local expansiondecision = {}; +local expansionproject = {}; +local flowcontroller = {}; +local fuel = {}; +local fuelconsumption = {}; +local fuelcontract = {}; +local fuelreservoir = {}; +local gasemission = {}; +local gasnode = {}; +local generator = {}; +local generationconstraint = {}; +local generic = {}; +local genericconstraint = {}; +local hydro = {}; +local hydrogaugingstation = {}; +local interconnection = {}; +local interconnectionsum = {}; +local maintenance = {}; +local powerinjection = {}; +local region = {}; +local renewable = {}; +local renewablegaugingstation = {}; +local reservegenerationconstraint = {}; +local reservoirset = {}; +local system = {}; +local study = {}; +local thermal = {}; +local thermalcombinedcycle = {}; + +-- colors +local colors = { + inelastic_demand = "#082B70", + elastic_demand = "#3AB495", + thermal = "#F28E2B", + hydro = "#4E79A7", + solar = "#F1CE63", + wind = "#8CD17D", + renewable = "#8a8881", + csp = "#b0ada4", + battery = "#FF9DA7", +}; + +-- dictionary +local dictionary = { + tab_name = { + en = "Summary", + es = "Resumem", + pt = "Resumo" + }, + inelastic_demand = { + en = "Demand", + es = "Demanda", + pt = "Demanda" + }, + elastic_demand = { + en = "Elastic demand", + es = "Demanda elástica", + pt = "Demanda elástica" + }, + thermal_capacity = { + en = "Thermal capacity", + es = "Capacidad térmica", + pt = "Capacidade térmica" + }, + hydro_capacity = { + en = "Hydro capacity", + es = "Capacidad hidrica", + pt = "Capacidade hidrica" + }, + solar_capacity = { + en = "Solar capacity", + es = "Capacidad solar", + pt = "Capacidade solar" + }, + wind_capacity = { + en = "Wind capacity", + es = "Capacidad eólica", + pt = "Capacidade eólica" + }, + Others_renewables_capacity = { + en = "Other renewables capacity", + es = "Capacidad de otras energías renovables", + pt = "Capacidade de outras energias renováveis" + }, + csp_capacity = { + en = "CSP capacity", + es = "Capacidad CSP", + pt = "Capacidade CSP" + }, + battery_capacity = { + en = "Battery capacity", + es = "Capacidad de batería", + pt = "Capacidade da bateria" + }, + capacity_by_tech = { + en = "Technology Capacity", + es = "Capacidad per Tecnología", + pt = "Capacidade por tecnologia" + }, + capacity_mix = { + en = "Capacity mix", + es = "Mezcla de capacidad", + pt = "Mix de capacidade" + }, + injections = { + en = "Injections", + es = "Inyecciones", + pt = "Injeções" + }, + inflows = { + en = "Inflows", + es = "Aportes", + pt = "Afluências" + }, + system = { + en = "System", + es = "Sistema", + pt = "Sistema" + }, + capacity = { + en = "Capacity", + es = "Capacidad", + pt = "Capacidade" + } +}; + +for i = 1, studies do + table.insert(area, Area(i)); + table.insert(balancingarea, BalancingArea(i)); + table.insert(balancingareahydro, BalancingAreaHydro(i)); + table.insert(balancingareathermal, BalancingAreaThermal(i)); + table.insert(battery, Battery(i)); + table.insert(bus, Bus(i)); + table.insert(circuit, Circuit(i)); + table.insert(circuitssum, CircuitsSum(i)); + table.insert(concentratedsolarpower, ConcentratedSolarPower(i)); + table.insert(dclink, DCLink(i)); + table.insert(demand, Demand(i)); + table.insert(demandsegment, DemandSegment(i)); + table.insert(electrificationdemand, ElectrificationDemand(i)); + table.insert(electrificationdemandsegment, ElectrificationDemandSegment(i)); + table.insert(electrificationnetwork, ElectrificationNetwork(i)); + table.insert(electrificationnode, ElectrificationNode(i)); + table.insert(electrificationprocess, ElectrificationProcess(i)); + table.insert(electrificationproducer, ElectrificationProducer(i)); + table.insert(electrificationstorage, ElectrificationStorage(i)); + table.insert(electrificationtransport, ElectrificationTransport(i)); + table.insert(expansioncapacity, ExpansionCapacity(i)); + table.insert(expansionconstraint, ExpansionConstraint(i)); + table.insert(expansiondecision, ExpansionDecision(i)); + table.insert(expansionproject, ExpansionProject(i)); + table.insert(flowcontroller, FlowController(i)); + table.insert(fuel, Fuel(i)); + table.insert(fuelconsumption, FuelConsumption(i)); + table.insert(fuelcontract, FuelContract(i)); + table.insert(fuelreservoir, FuelReservoir(i)); + table.insert(gasemission, GasEmission(i)); + table.insert(gasnode, GasNode(i)); + table.insert(generator, Generator(i)); + table.insert(generationconstraint, GenerationConstraint(i)); + table.insert(generic, Generic(i)); + table.insert(genericconstraint, GenericConstraint(i)); + table.insert(hydro, Hydro(i)); + table.insert(hydrogaugingstation, HydroGaugingStation(i)); + table.insert(interconnection, Interconnection(i)); + table.insert(interconnectionsum, InterconnectionSum(i)); + table.insert(maintenance, Maintenance(i)); + table.insert(powerinjection, PowerInjection(i)); + table.insert(region, Region(i)); + table.insert(renewable, Renewable(i)); + table.insert(renewablegaugingstation, RenewableGaugingStation(i)); + table.insert(reservegenerationconstraint, ReserveGenerationConstraint(i)); + table.insert(reservoirset, ReservoirSet(i)); + table.insert(system, System(i)); + table.insert(study, Study(i)); + table.insert(thermal, Thermal(i)); + table.insert(thermalcombinedcycle, ThermalCombinedCycle(i)); +end + +-- get language +local function get_language(case) + local language = study[case]:get_parameter("Idioma", 0); + if language == 1 then + return "es"; + elseif language == 2 then + return "pt"; + else -- language == 0 + return "en"; + end +end +local language = get_language(1); + +local function demand_hourly(case) + local generic = Generic(case); + local sddp = generic:load_table_without_header("sddp.dat"); + + for key = 1,#sddp do + if string.sub(sddp[key][1],1,9) == "DCHR LOAD" then + if string.sub(sddp[key][1],11,11) == "1" then + return true + end + end + end + + return false +end +local demand_is_hourly = demand_hourly(1) + +local function create_tab(label, icon) + local tab = Tab(label); + tab:set_icon(icon); + tab:push("# " .. label); + return tab; +end + + +local function create_prefix(label) + local prefix = ""; + if studies > 1 then + prefix = "|" .. label; + end + return prefix; +end + +local function demand_data(case, tab) + local demand = demand[case]; + local study = study[case]; + local system = system[case]; + + local demand_data; + if demand_is_hourly then + demand_data = system.sensitivity * demand.inelastic_hour:aggregate_agents(BY_SUM(), Collection.SYSTEM):aggregate_blocks(BY_SUM()):aggregate_stages(BY_SUM(),Profile.PER_YEAR); + else + demand_data = system.sensitivity * demand.inelastic_block:aggregate_agents(BY_SUM(), Collection.SYSTEM):aggregate_blocks(BY_SUM()):aggregate_stages(BY_SUM(),Profile.PER_YEAR); + end + + if demand_data:loaded() then + -- local chart = Chart(); + -- chart:add_column(demand_data); + -- tab:push("## " .. dictionary.inelastic_demand[language]); + -- tab:push(chart); + demand_data:save("demanda_MD",{fast_csv = true}) + end + +end + +local function capacity_data(case, tab) + local thermal = thermal[case]; + local hydro = hydro[case]; + local battery = battery[case]; + local renewable = renewable[case]; + local system = system[case]; + + local thermal_capacity = ifelse(thermal.state:ne(1),thermal.max_generation_available,0):aggregate_agents(BY_SUM(),Collection.SYSTEM):aggregate_stages(BY_SUM(),Profile.PER_YEAR):select_stage(1); + local hydro_capacity = ifelse(hydro.state:ne(1),hydro.max_generation_available,0):aggregate_agents(BY_SUM(),Collection.SYSTEM):aggregate_stages(BY_SUM(),Profile.PER_YEAR):select_stage(1); + local renewable_capacity = ifelse(renewable.state:ne(1) & renewable.tech_type:ne(2) & renewable.tech_type:ne(1) & renewable.tech_type:ne(5),renewable.capacity,0):aggregate_agents(BY_SUM(),Collection.SYSTEM):aggregate_stages(BY_SUM(),Profile.PER_YEAR):select_stage(1); + local solar_capacity = ifelse(renewable.state:ne(1) & renewable.tech_type:eq(2),renewable.capacity,0):aggregate_agents(BY_SUM(),Collection.SYSTEM):aggregate_stages(BY_SUM(),Profile.PER_YEAR):select_stage(1); + local wind_capacity = ifelse(renewable.state:ne(1) & renewable.tech_type:eq(1),renewable.capacity,0):aggregate_agents(BY_SUM(),Collection.SYSTEM):aggregate_stages(BY_SUM(),Profile.PER_YEAR):select_stage(1); + local csp_capacity = ifelse(renewable.state:ne(1) & renewable.tech_type:eq(5),renewable.capacity,0):aggregate_agents(BY_SUM(),Collection.SYSTEM):aggregate_stages(BY_SUM(),Profile.PER_YEAR):select_stage(1); + local battery_capacity = ifelse(battery.state:ne(1),battery.capacity,0):aggregate_agents(BY_SUM(),Collection.SYSTEM):aggregate_stages(BY_SUM(),Profile.PER_YEAR):select_stage(1); + + local some_data_loaded = thermal_capacity:loaded() or + hydro_capacity:loaded() or + solar_capacity:loaded() or + wind_capacity:loaded() or + renewable_capacity:loaded() or + csp_capacity:loaded() or + battery_capacity:loaded(); + + if some_data_loaded then + -- local chart = Chart(); + -- chart:add_categories(thermal_capacity, dictionary.thermal_capacity[language], + -- {xLabel = dictionary.system[language], + -- yLabel = dictionary.capacity[language]}); + -- chart:add_categories(hydro_capacity, dictionary.hydro_capacity[language]); + -- chart:add_categories(solar_capacity, dictionary.solar_capacity[language]); + -- chart:add_categories(wind_capacity, dictionary.wind_capacity[language]); + -- chart:add_categories(renewable_capacity, dictionary.Others_renewables_capacity[language]); + -- chart:add_categories(csp_capacity, dictionary.csp_capacity[language]); + -- chart:add_categories(battery_capacity, dictionary.battery_capacity[language]); + -- tab:push("## " .. dictionary.capacity_by_tech[language]); + -- tab:push(chart); + + -- local chart = Chart(); + -- chart:add_pie(thermal_capacity:aggregate_agents(BY_SUM(),dictionary.thermal_capacity[language])); + -- chart:add_pie(hydro_capacity:aggregate_agents(BY_SUM(),dictionary.hydro_capacity[language])); + -- chart:add_pie(solar_capacity:aggregate_agents(BY_SUM(),dictionary.solar_capacity[language])); + -- chart:add_pie(wind_capacity:aggregate_agents(BY_SUM(),dictionary.wind_capacity[language])); + -- chart:add_pie(renewable_capacity:aggregate_agents(BY_SUM(),dictionary.wind_capacity[language])); + -- chart:add_pie(csp_capacity:aggregate_agents(BY_SUM(),dictionary.csp_capacity[language])); + -- chart:add_pie(battery_capacity:aggregate_agents(BY_SUM(),dictionary.battery_capacity[language])); + -- tab:push("## " .. dictionary.capacity_mix[language]); + -- tab:push(chart); + + local concatenate_data = {}; + local concatenate_data_percent = {}; + for _,system in ipairs(system:labels()) do + local concatenate_capacity = concatenate(thermal_capacity:select_agents({system}):add_suffix("_" .. dictionary.thermal_capacity[language]), + hydro_capacity:select_agents({system}):add_suffix("_" .. dictionary.hydro_capacity[language]), + solar_capacity:select_agents({system}):add_suffix("_" .. dictionary.solar_capacity[language]), + wind_capacity:select_agents({system}):add_suffix("_" .. dictionary.wind_capacity[language]), + renewable_capacity:select_agents({system}):add_suffix("_" .. dictionary.Others_renewables_capacity[language]), + csp_capacity:select_agents({system}):add_suffix("_" .. dictionary.csp_capacity[language]), + battery_capacity:select_agents({system}):add_suffix("_" .. dictionary.battery_capacity[language]) + ); + local total_capacity = concatenate_capacity:aggregate_agents(BY_SUM(),"Total_Capacity"); + table.insert(concatenate_data,concatenate_capacity); + table.insert(concatenate_data_percent,(concatenate_capacity/total_capacity):convert("%")); + end + concatenate(concatenate_data):save("capacity_MD",{fast_csv = true}) + concatenate(concatenate_data_percent):save("capacity_MD_percent",{fast_csv = true}) + end + +end + +-- local dashboard = Dashboard(); +-- local tab = create_tab(dictionary.tab_name[language],"book-open"); +demand_data(1, tab) +capacity_data(1, tab) +-- dashboard:push(tab); +-- dashboard:save("dashboard"); \ No newline at end of file