############ CASCADE OF TURBINES/PUMPS
altitude1 = 1000
altitude2 = 500
altitude3 = 200
rho = 1000
g = 9.81
eff_turbine1 = 0.8
eff_turbine2 = 0.85
J2MWh = 2.77778e-10
n.add("Bus", "bus 1")
n.add("Bus", "bus 2")
n.add("Bus", "bus 3")
n.add("Bus", "bus pump 1")
n.add("Bus", "bus pump 2")
n.add("Bus", "bus load 1")
n.add("Bus", "bus load 2")
n.add("Store", "store1", bus="bus 1", e_nom=1e4, e_initial=5e3, marginal_cost=1)
n.add("Store", "store2", bus="bus 2", e_nom=1e4, e_initial=5e3, marginal_cost=1)
n.add("Store", "store3", bus="bus 3", e_nom=1e4, e_initial=5e3, marginal_cost=1)
n.add("Generator", "pump 1", bus="bus pump 1", p_nom=1e4, marginal_cost=2)
n.add("Generator", "pump 2", bus="bus pump 2", p_nom=1e4, marginal_cost=2)
n.add("Load", "load 1", bus="bus load 1", p_set=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
n.add("Load", "load 2", bus="bus load 2", p_set=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
n.add("Link", "Turbine 1", bus0="bus 1", bus1="bus load 1", bus2="bus 2", efficiency=rho*g*(altitude1-altitude2)*eff_turbine1*J2MWh, efficiency2=1, p_nom=1e4, marginal_cost=1)
n.add("Link", "Turbine 2", bus0="bus 2", bus1="bus load 2", bus2="bus 3", efficiency=rho*g*(altitude2-altitude3)*eff_turbine2*J2MWh, efficiency2=1, p_nom=1e4, marginal_cost=1)
n.add("Link", "Pump 1", bus0="bus pump 1", bus1="bus 2", bus2="bus 1", efficiency=-1/(J2MWh*rho*g*(altitude1-altitude2)), efficiency2=1/(J2MWh*rho*g*(altitude1-altitude2)), p_nom=1e5, marginal_cost=1)
n.add("Link", "Pump 2", bus0="bus pump 2", bus1="bus 3", bus2="bus 2", efficiency=-1/(J2MWh*rho*g*(altitude2-altitude3)), efficiency2=1/(J2MWh*rho*g*(altitude2-altitude3)), p_nom=1e5, marginal_cost=1)
# optimize :
n.optimize(solver_name='highs', solver_options={})