def __init__(self): """Initialise a default context.""" self.verbose = False self.track_exchanges = False self.regions = regions.All self.startdate = startdate # Number of timesteps is determined by the number of demand rows. self.hours = len(hourly_regional_demand) # Estimate the number of years from the number of simulation hours. if self.hours == 8760 or self.hours == 8784: self.years = 1 else: self.years = self.hours / (365.25 * 24) self.relstd = 0.002 # 0.002% unserved energy self.generators = [ generators.CCGT(polygons.wildcard, 20000), generators.OCGT(polygons.wildcard, 20000) ] self.demand = hourly_demand.copy() self.timesteps = len(self.demand) self.spill = pd.DataFrame() self.generation = pd.DataFrame() self.unserved = pd.DataFrame() # System non-synchronous penetration limit self.nsp_limit = float(configfile.get('limits', 'nonsync-penetration')) self.exchanges = np.zeros( (self.hours, polygons.numpolygons, polygons.numpolygons)) self.costs = costs.NullCosts()
def theworks(context): """All technologies.""" re100(context) # pylint: disable=redefined-outer-name egs = generators.Geothermal_EGS(polygons.wildcard, 0, configfile.get('generation', 'egs-geothermal-trace'), 38) hsa = generators.Geothermal_HSA(polygons.wildcard, 0, configfile.get('generation', 'hsa-geothermal-trace'), 38) pt = generators.ParabolicTrough(polygons.wildcard, 0, 2, 6, configfile.get('generation', 'cst-trace'), 12) coal = generators.Black_Coal(polygons.wildcard, 0) coal_ccs = generators.Coal_CCS(polygons.wildcard, 0) ccgt = generators.CCGT(polygons.wildcard, 0) ccgt_ccs = generators.CCGT_CCS(polygons.wildcard, 0) ocgt = generators.OCGT(polygons.wildcard, 0) batt = generators.Battery(polygons.wildcard, 0, 0) diesel = generators.Diesel(polygons.wildcard, 0) dem = generators.DemandResponse(polygons.wildcard, 0, 300) biomass = generators.Biomass(polygons.wildcard, 0) greenpower = generators.GreenPower(polygons.wildcard, 0) btm_pv = generators.Behind_Meter_PV(polygons.wildcard, 0, configfile.get('generation', 'rooftop-pv-trace'), 0) g = context.generators context.generators = [hsa, egs, pt, coal, coal_ccs, ccgt, ccgt_ccs] + g[:-4] + \ [btm_pv, ocgt, diesel, batt, dem, biomass, greenpower]
def test_010(self): """Running in one region only produces no interstate exchanges.""" import pandas as pd for rgn in regions.All: if rgn is regions.snowy: continue self.context = nemo.Context() self.context.track_exchanges = True self.context.regions = [rgn] loadpoly = [k for k, v in rgn.polygons.items() if v > 0][0] nswpoly = [k for k, v in regions.nsw.polygons.items() if v > 0][0] qldpoly = [k for k, v in regions.qld.polygons.items() if v > 0][0] sapoly = [k for k, v in regions.sa.polygons.items() if v > 0][0] taspoly = [k for k, v in regions.tas.polygons.items() if v > 0][0] vicpoly = [k for k, v in regions.vic.polygons.items() if v > 0][0] self.context.generators = [] for poly in [nswpoly, qldpoly, sapoly, taspoly, vicpoly]: self.context.generators.append(generators.OCGT(poly, 100)) nemo.run(self.context, endhour=pd.Timestamp('2010-01-05')) self.assertEqual((self.context.exchanges[0] > 0).sum(), 1, 'Only one exchange > 0') # FIXME: we need a numpy array that can be indexed from 1 self.assertTrue( self.context.exchanges[0, loadpoly - 1, loadpoly - 1] > 0, 'Only rgn->rgn is > 0')
def replacement(context): """The current NEM fleet, more or less. >>> class C: pass >>> c = C() >>> replacement(c) >>> len(c.generators) 14 """ coal = generators.Black_Coal(polygons.wildcard, 0) ocgt = generators.OCGT(polygons.wildcard, 0) context.generators = [coal] + _hydro() + [ocgt]
def coal_ccs(context): """Coal CCS scenario. >>> class C: pass >>> c = C() >>> coal_ccs(c) >>> len(c.generators) 14 """ coal = generators.Coal_CCS(polygons.wildcard, 0) ocgt = generators.OCGT(polygons.wildcard, 0) context.generators = [coal] + _hydro() + [ocgt]
def ccgt_ccs(context): """CCGT CCS scenario. >>> class C: pass >>> c = C() >>> ccgt_ccs(c) >>> len(c.generators) 14 """ # pylint: disable=redefined-outer-name ccgt = generators.CCGT_CCS(polygons.wildcard, 0) ocgt = generators.OCGT(polygons.wildcard, 0) context.generators = [ccgt] + _hydro() + [ocgt]
def re_plus_fossil(context): """Mostly renewables with some fossil augmentation. >>> class C: pass >>> c = C() >>> c.generators = [] >>> re_plus_fossil(c) >>> len(c.generators) 183 """ re100(context) # pylint: disable=redefined-outer-name coal = generators.Black_Coal(polygons.wildcard, 0) ccgt = generators.CCGT(polygons.wildcard, 0) ocgt = generators.OCGT(polygons.wildcard, 0) g = context.generators context.generators = [coal, ccgt] + g[:-4] + [ocgt]
def re_plus_ccs(context): """Mostly renewables with fossil and CCS augmentation. >>> class C: pass >>> c = C() >>> c.generators = [] >>> re_plus_ccs(c) >>> len(c.generators) 185 """ re100(context) coal = generators.Black_Coal(polygons.wildcard, 0) # pylint: disable=redefined-outer-name coal_ccs = generators.Coal_CCS(polygons.wildcard, 0) # pylint: disable=redefined-outer-name ccgt = generators.CCGT(polygons.wildcard, 0) ccgt_ccs = generators.CCGT_CCS(polygons.wildcard, 0) ocgt = generators.OCGT(polygons.wildcard, 0) g = context.generators context.generators = [coal, coal_ccs, ccgt, ccgt_ccs] + g[:-4] + [ocgt]