From 62ca711dae502e10bf38f091e8a36f53547d7b11 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Sat, 7 Oct 2023 18:48:35 -0400 Subject: [PATCH] Add test for time domain reduction module --- test/TDR/Generators_data.csv | 5 ++++ test/TDR/clusters_true.jld2 | Bin 0 -> 50060 bytes test/time_domain_reduction.jl | 43 ++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 test/TDR/Generators_data.csv create mode 100644 test/TDR/clusters_true.jld2 create mode 100644 test/time_domain_reduction.jl diff --git a/test/TDR/Generators_data.csv b/test/TDR/Generators_data.csv new file mode 100644 index 0000000000..9393ab0727 --- /dev/null +++ b/test/TDR/Generators_data.csv @@ -0,0 +1,5 @@ +Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MaxCapTag_1,MaxCapTag_2,MaxCapTag_3,MinCapTag_1,MinCapTag_2,MinCapTag_3,MGA,Resource_Type,CapRes_1,ESR_1,ESR_2,region,cluster +natural_gas_combined_cycle,1,1,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,NE,1 +solar_pv,1,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,solar_photovoltaic,0.8,1,1,NE,1 +onshore_wind,1,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,onshore_wind_turbine,0.8,1,1,NE,1 +battery,1,0,0,1,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,0,0,1,0,0,1,0,battery_mid,0.95,0,0,NE,0 diff --git a/test/TDR/clusters_true.jld2 b/test/TDR/clusters_true.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..577756f73d6d67eb822c86808e0c61d29212848b GIT binary patch literal 50060 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 literal 0 HcmV?d00001 diff --git a/test/time_domain_reduction.jl b/test/time_domain_reduction.jl new file mode 100644 index 0000000000..d813047bfe --- /dev/null +++ b/test/time_domain_reduction.jl @@ -0,0 +1,43 @@ +module TestTDR + +import Test, GenX, JLD2, Clustering + +# suppress printing +console_out = stdout +redirect_stdout(devnull) + +test_folder = settings_path = "TDR" + +if isdir(joinpath(test_folder, "TDR_Results")) + rm(joinpath(test_folder, "TDR_Results"), recursive=true) +end + +# Inputs for cluster_inputs function +genx_setup = Dict() +genx_setup["NetworkExpansion"] = 0 +genx_setup["TimeDomainReduction"] = 1 +genx_setup["TimeDomainReductionFolder"] = "TDR_Results" +genx_setup["MultiStage"] = 0 +genx_setup["UCommit"] = 2 +genx_setup["CapacityReserveMargin"] = 1 +genx_setup["Reserves"] = 0 +genx_setup["MinCapReq"] = 1 +genx_setup["MaxCapReq"] = 1 +genx_setup["EnergyShareRequirement"] = 1 +genx_setup["CO2Cap"] = 2 + +clustering_test = GenX.cluster_inputs(test_folder, settings_path, genx_setup)["ClusterObject"] + +# Load true clustering +clustering_true = JLD2.load(joinpath(test_folder,"clusters_true.jld2"))["ClusterObject"] + +# Clustering validation +R = Clustering.randindex(clustering_test, clustering_true)[2] +I = Clustering.mutualinfo(clustering_test, clustering_true) + +# restore printing +redirect_stdout(console_out) +Test.@test R > 0.9 # Rand index should be close to 1 +Test.@test I > 0.8 # Mutual information should be close to 1 + +end # module TestTDR \ No newline at end of file