CCGT and OCGT as extendable generators

256 views
Skip to first unread message

mmou...@gmail.com

unread,
Sep 11, 2020, 2:43:21 AM9/11/20
to pypsa
Hello, 

I am currently running PyPSA-Eur and was wondering if it is possible to have the existing installed capacities of OCGT and CCGT in the network while also allowing them to be extendable. I see that there is an option under ['electricity']['extendable_carriers']['Generator'] to make CCGT and OCGT extendable carriers which adds them to the network with a zero initial capacity. Is there a way to have the initial capacity be the currently installed gas plants and allow for expansion above the currently installed capacities? 

Thank you in advance! 

Kind regards, 
Marissa 

Fabian Hofmann

unread,
Sep 11, 2020, 4:46:56 AM9/11/20
to py...@googlegroups.com

Hey Marissa,

that's a good question. Form the pure config side this is not possible. You could make a work-around and modify attach_conventional_generators in add_electricity.py such that for carrier == 'OCGT' or 'CCGT' ensure


p_nom_min = ppl.p_nom,

p_nom_extendable = True,

capital_cost=costs.at[carrier, 'capital_cost'],

marginal_cost=costs.at[carrier, 'marginal_cost'],


in the generator assignment. I didn't test this, but it should work.


Best

Fabian H
--
You received this message because you are subscribed to the Google Groups "pypsa" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pypsa+un...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/pypsa/6b97a7be-be07-4faa-a0e6-aa1ba3a1d4bcn%40googlegroups.com.

Marissa Moultak

unread,
Sep 11, 2020, 10:12:37 PM9/11/20
to Fabian Hofmann, py...@googlegroups.com
Hi Fabian, 

Thank you for the quick response and for the suggestion. I tried to implement the work-around you suggested, but am unfortunately running into an error when I try to solve the network. When I try to solve the network, I get the following error: "CPLEX Error  1616: Line 290597: Expected identifier, found '>'.". I tried to figure out what is going wrong but can't seem to make sense as to why this is occurring. Would you have any ideas? 

I included the code I am currently running for the attach_conventional_generators in the add_electricity script and the full error log below. 

Code for attach_conventional_generators:
Screen Shot 2020-09-11 at 19.04.24.png


Error log: 
Screen Shot 2020-09-11 at 19.00.41.png

Thanks for your help! 

Best, 
Marissa 



You received this message because you are subscribed to a topic in the Google Groups "pypsa" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/pypsa/NYZCqUToweE/unsubscribe.
To unsubscribe from this group and all its topics, send an email to pypsa+un...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/pypsa/d66d1657-70fe-dd73-edbd-a3dd60ce4809%40gmail.com.

Marissa Moultak

unread,
Sep 15, 2020, 1:28:52 AM9/15/20
to Fabian Hofmann, py...@googlegroups.com

Hi Fabian,

I believe that I was able to fix the error in my previous post. In order to do so, I had to make a small change in the PyPSA code. This was needed to be able to add the p_nom_min of the existing installed capacities for the conventional generators that I would like to allow to extend above the capacities given in the powerplant database. In the networkclustering.py script, I had to add “‘p_nom_min’:np.sum” to the strategies, as shown in the following block of code:

def normed_or_uniform(x):
        return x/x.sum() if x.sum(skipna=False) > 0 else pd.Series(1./len(x), x.index)
    weighting = generators.weight.groupby(grouper, axis=0).transform(normed_or_uniform)
    generators['capital_cost'] *= weighting
    strategies = {'p_nom_max': np.min,
'p_nom_min': np.sum, 'weight': np.sum, 'p_nom': np.sum, 'capital_cost': np.sum}
    strategies.update(custom_strategies)
    if strategies['p_nom_max'] is np.min:
        generators['p_nom_max'] /= weighting

In addition, I edited the add_electricity script to attach the extendable conventional generators. To do so, I added a new variable to the config file “conventional_extendable_carriers", added the code below to defined “attach_conventional_extendable_generators”, and of course add "attach_conventional_extendable_generators(n, costs, ppl)" to the bottom of the add_electricity.py script. 

Coded added to add_electricity.py to included extendable conventional generators:

def attach_conventional_extendable_generators(n, costs, ppl):
    carriers = snakemake.config['electricity']['conventional_extendable_carriers']
    _add_missing_carriers_from_costs(n, costs, carriers)
    ppl = (ppl.query('carrier in @carriers').join(costs, on='carrier')
           .rename(index=lambda s: 'C' + str(s)))
    ccgt = ppl.query('carrier == "CCGT"')
    ocgt = ppl.query('carrier == "OCGT"')
    nuclear = ppl.query('carrier == "nuclear"')
    biomass = ppl.query('carrier == "biomass"')

    logger.info('Adding {} generators as extendable generators with minimum capacities\n{}'
                .format(len(ppl), ppl.groupby('carrier').p_nom.sum()))
    if 'CCGT' in carriers:
        n.madd("Generator", ccgt.index,
               carrier=ccgt.carrier,
               bus=ccgt.bus,
               p_nom=ccgt.p_nom,
               p_nom_min=ccgt.p_nom,
               p_nom_extendable=True,
               efficiency=ccgt.efficiency,
               marginal_cost=costs.at['CCGT', 'marginal_cost'],
               capital_cost=costs.at['CCGT', 'capital_cost'])
   
    if 'OCGT' in carriers:
        n.madd("Generator", ocgt.index,
               carrier=ocgt.carrier,
               bus=ocgt.bus,
               p_nom=ocgt.p_nom,
               p_nom_min=ocgt.p_nom,
               p_nom_extendable=True,
               efficiency=ocgt.efficiency,
               marginal_cost=costs.at['OCGT', 'marginal_cost'],
               capital_cost=costs.at['OCGT', 'capital_cost'])
                       
    if 'nuclear' in carriers:
        n.madd("Generator", nuclear.index,
               carrier=nuclear.carrier,
               bus=nuclear.bus,
               p_nom=nuclear.p_nom,
               p_nom_min=nuclear.p_nom,
               p_nom_extendable=True,
               efficiency=nuclear.efficiency,
               marginal_cost=costs.at['nuclear', 'marginal_cost'],
               capital_cost=costs.at['nuclear', 'capital_cost'])
    if 'biomass' in carriers:
        n.madd("Generator", biomass.index,
               carrier=biomass.carrier,
               bus=biomass.bus,
               p_nom=biomass.p_nom,
               p_nom_min=biomass.p_nom,
               p_nom_extendable=True,
               efficiency=biomass.efficiency,
               marginal_cost=costs.at['biomass', 'marginal_cost'],
               capital_cost=costs.at['biomass', 'capital_cost'])

attach_conventional_extendable_generators(n, costs, ppl)

I am not sure if this is a correct way to do it, but it seems to be working for me so far.

Best,
Marissa

Message has been deleted

Fabian Neumann

unread,
Nov 26, 2021, 2:47:34 PM11/26/21
to Samira Vogt, pypsa
Hi Samira,

Likely, the following is the issue:

The settings

`extendable_carriers: Generators: ["OCGT"]`

and

`conventional_carriers: ["OCGT"]`

are incompatible with each other.

One adds the technology without capacities and extendable, the other
adds the technology with capacities but not extendable.

When clustering by technology, the settings of both do not agree.

https://github.com/PyPSA/pypsa-eur/blob/1da908b956cc82e844aaf333907f1d84fe50ae2b/config.default.yaml#L46-L58

Carriers in conventional_carriers must not also be in extendable_carriers.

https://pypsa-eur.readthedocs.io/en/latest/configuration.html#electricity

Best wishes,

Fabian N

On 25.11.21 14:47, Samira Vogt wrote:
> Ciao Marissa and Fabian,
>
> thanks for sharing these Information. I also wanted to make
> conventionals extendable and as far as I could see most of the above
> mentioned code is implemented now.
> I am getting an error, which looks like this:
>
> File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/pandas/core/groupby/groupby.py",
> line 1160, in <lambda>
>
>     f = lambda x: func(x, *args, **kwargs)
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/pypsa/networkclustering.py",
> line 49, in consense
>
>     assert ((x == v).all() or x.isnull().all()), (
>
> AssertionError: In Generator cluster p_nom_extendable the values of
> attribute p_nom_extendable do not agree:
>
> C823      False
>
> 0 CCGT     True
>
> Name: p_nom_extendable, dtype: bool
>
> [Thu Nov 25 14:26:14 2021]
>
> Error in rule simplify_network:
>
>     jobid: 4
>
>     output: networks/elec_s.nc,
> resources/regions_onshore_elec_s.geojson,
> resources/regions_offshore_elec_s.geojson, resources/busmap_elec_s.csv,
> resources/connection_costs_s.csv
>
>     log: logs/simplify_network/elec_s.log (check log file(s) for error
> message)
>
>
> Traceback (most recent call last):
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/executors/__init__.py",
> line 593, in _callback
>
>     raise ex
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/concurrent/futures/thread.py",
> line 57, in run
>
>     result = self.fn(*self.args, **self.kwargs)
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/executors/__init__.py",
> line 579, in cached_or_run
>
>     run_func(*args)
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/executors/__init__.py",
> line 2461, in run_wrapper
>
>     raise ex
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/executors/__init__.py",
> line 2358, in run_wrapper
>
>     run(
>
>   File "/Users/samira/Documents/pypsa/pypsa-eur/Snakefile", line 525,
> in __rule_simplify_network
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/script.py",
> line 1371, in script
>
>     executor.evaluate()
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/script.py",
> line 381, in evaluate
>
>     self.execute_script(fd.name, edit=edit)
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/script.py",
> line 582, in execute_script
>
>     self._execute_cmd(
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/script.py",
> line 414, in _execute_cmd
>
>     return shell(
>
>   File
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/shell.py",
> line 266, in __new__
>
>     raise sp.CalledProcessError(retcode, cmd)
>
> subprocess.CalledProcessError: Command 'set -euo pipefail;
> /Users/samira/anaconda3/envs/pypsa-eur/bin/python3.8
> /Users/samira/Documents/pypsa/pypsa-eur/.snakemake/scripts/tmpn3ilvvpa.simplify_network.py'
> returned non-zero exit status 1.
>
> Removing output files of failed job simplify_network since they might be
> corrupted:
>
> resources/connection_costs_s.csv
>
> Shutting down, this might take some time.
>
> Exiting because a job execution failed. Look above for error message
>
> Complete log:
> /Users/samira/Documents/pypsa/pypsa-eur/.snakemake/log/2021-11-25T142526.879252.snakemake.log
>
> Do you have any ideas on what could be the problem? Any help is appreciated.
>
> Thank you and have a nice day,
> Samira
> logger.info <http://logger.info>('Adding {} generators as extendable
> generators with minimum capacities\n{}'
>                 .format(len(ppl), ppl.groupby('carrier').p_nom.sum()))
>     if 'CCGT' in carriers:
>         n.madd("Generator", ccgt.index,
>                carrier=ccgt.carrier,
>                bus=ccgt.bus,
>                p_nom=ccgt.p_nom,
>                p_nom_min=ccgt.p_nom,
>                p_nom_extendable=True,
>                efficiency=ccgt.efficiency,
>                marginal_cost=costs.at <http://costs.at>['CCGT',
> 'marginal_cost'],
>                capital_cost=costs.at <http://costs.at>['CCGT',
> 'capital_cost'])
>
>     if 'OCGT' in carriers:
>         n.madd("Generator", ocgt.index,
>                carrier=ocgt.carrier,
>                bus=ocgt.bus,
>                p_nom=ocgt.p_nom,
>                p_nom_min=ocgt.p_nom,
>                p_nom_extendable=True,
>                efficiency=ocgt.efficiency,
>                marginal_cost=costs.at <http://costs.at>['OCGT',
> 'marginal_cost'],
>                capital_cost=costs.at <http://costs.at>['OCGT',
> 'capital_cost'])
>
>     if 'nuclear' in carriers:
>         n.madd("Generator", nuclear.index,
>                carrier=nuclear.carrier,
>                bus=nuclear.bus,
>                p_nom=nuclear.p_nom,
>                p_nom_min=nuclear.p_nom,
>                p_nom_extendable=True,
>                efficiency=nuclear.efficiency,
>                marginal_cost=costs.at <http://costs.at>['nuclear',
> 'marginal_cost'],
>                capital_cost=costs.at <http://costs.at>['nuclear',
> 'capital_cost'])
>     if 'biomass' in carriers:
>         n.madd("Generator", biomass.index,
>                carrier=biomass.carrier,
>                bus=biomass.bus,
>                p_nom=biomass.p_nom,
>                p_nom_min=biomass.p_nom,
>                p_nom_extendable=True,
>                efficiency=biomass.efficiency,
>                marginal_cost=costs.at <http://costs.at>['biomass',
> 'marginal_cost'],
>                capital_cost=costs.at <http://costs.at>['biomass',
> 'capital_cost'])||
> ||attach_conventional_extendable_generators(n, costs, ppl)
> |
>
> I am not sure if this is a correct way to do it, but it seems to be
> working for me so far.
>
> Best,
> Marissa
>
>
> On Fri, Sep 11, 2020 at 7:11 PM Marissa Moultak <mmou...@gmail.com>
> wrote:
>
> Hi Fabian,
>
> Thank you for the quick response and for the suggestion. I tried
> to implement the work-around you suggested, but am unfortunately
> running into an error when I try to solve the network. When I
> try to solve the network, I get the following error: "CPLEX
> Error  1616: Line 290597: Expected identifier, found '>'.". I
> tried to figure out what is going wrong but can't seem to make
> sense as to why this is occurring. Would you have any ideas?
>
> I included the code I am currently running for the
> attach_conventional_generators in the add_electricity script
> and the full error log below.
>
> Code for attach_conventional_generators:
> Screen Shot 2020-09-11 at 19.04.24.png
>
>
> Error log:
> Screen Shot 2020-09-11 at 19.00.41.png
>
> Thanks for your help!
>
> Best,
> Marissa
>
>
>
> On Fri, Sep 11, 2020 at 1:46 AM Fabian Hofmann
> <fabianmar...@gmail.com> wrote:
>
> Hey Marissa,
>
> that's a good question. Form the pure config side this is
> not possible. You could make a work-around and modify
> attach_conventional_generators in add_electricity.py such
> that for carrier == 'OCGT' or 'CCGT' ensure
>
>
> p_nom_min = ppl.p_nom,
>
> p_nom_extendable = True,
>
> capital_cost=costs.at <http://costs.at>[carrier,
> 'capital_cost'],
>
> marginal_cost=costs.at <http://costs.at>[carrier,
>> <https://groups.google.com/d/msgid/pypsa/6b97a7be-be07-4faa-a0e6-aa1ba3a1d4bcn%40googlegroups.com?utm_medium=email&utm_source=footer>.
>
> --
> You received this message because you are subscribed to a
> topic in the Google Groups "pypsa" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/pypsa/NYZCqUToweE/unsubscribe
> <https://groups.google.com/d/topic/pypsa/NYZCqUToweE/unsubscribe>.
> To unsubscribe from this group and all its topics, send an
> email to pypsa+un...@googlegroups.com.
> To view this discussion on the web, visit
> https://groups.google.com/d/msgid/pypsa/d66d1657-70fe-dd73-edbd-a3dd60ce4809%40gmail.com
> <https://groups.google.com/d/msgid/pypsa/d66d1657-70fe-dd73-edbd-a3dd60ce4809%40gmail.com?utm_medium=email&utm_source=footer>.
>
> --
> You received this message because you are subscribed to the Google
> Groups "pypsa" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to pypsa+un...@googlegroups.com
> <mailto:pypsa+un...@googlegroups.com>.
> To view this discussion on the web, visit
> https://groups.google.com/d/msgid/pypsa/1a0ecda5-08fa-4957-b4bc-29afc2c8c8e1n%40googlegroups.com
> <https://groups.google.com/d/msgid/pypsa/1a0ecda5-08fa-4957-b4bc-29afc2c8c8e1n%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
Fabian Neumann (he/him)
Postdoctoral Researcher

Department of Digital Transformation in Energy Systems
Institute of Energy Technology
Technische Universität Berlin

Group website: https://tub-ensys.github.io
Personal website: https://neumann.fyi

Visitor Address:
Einsteinufer 25 (TA 8)
10587 Berlin
Message has been deleted

Fabian Neumann

unread,
Dec 7, 2021, 1:00:22 PM12/7/21
to py...@googlegroups.com
That should actually work. Did you recreate all files from
networks/elec.nc and downstream?

On 04.12.21 11:49, Samira Vogt wrote:
> Hi Fabian,
> thanks for the reply.
>
> In the config file I actually put those settings:
>
> extendable_carriers:
> Generator: [nuclear, OCGT, CCGT]
> StorageUnit: [] # battery, H2
> Store: [battery, H2]
> Link: []
>
> conventional_carriers: [oil, coal, lignite, geothermal, biomass]
>
> So there should in theory not be conflicts between conventional_carriers
> and extendable_carriers right?
>
> Best regards,
> Samira
> >     output: networks/elec_s.nc <http://elec_s.nc>,
> >     self.execute_script(fd.name <http://fd.name>, edit=edit)
> >
> >   File
> >
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/script.py",
>
> > line 582, in execute_script
> >
> >     self._execute_cmd(
> >
> >   File
> >
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/script.py",
>
> > line 414, in _execute_cmd
> >
> >     return shell(
> >
> >   File
> >
> "/Users/samira/anaconda3/envs/pypsa-eur/lib/python3.8/site-packages/snakemake/shell.py",
>
> > line 266, in __new__
> >
> >     raise sp.CalledProcessError(retcode, cmd)
> >
> > subprocess.CalledProcessError: Command 'set -euo pipefail;
> > /Users/samira/anaconda3/envs/pypsa-eur/bin/python3.8
> >
> /Users/samira/Documents/pypsa/pypsa-eur/.snakemake/scripts/tmpn3ilvvpa.simplify_network.py
> <http://tmpn3ilvvpa.simplify_network.py>'
> > logger.info <http://logger.info> <http://logger.info
> <http://logger.info>>('Adding {} generators as extendable
> > generators with minimum capacities\n{}'
> >                 .format(len(ppl),
> ppl.groupby('carrier').p_nom.sum()))
> >     if 'CCGT' in carriers:
> >         n.madd("Generator", ccgt.index,
> >                carrier=ccgt.carrier,
> >                bus=ccgt.bus,
> >                p_nom=ccgt.p_nom,
> >                p_nom_min=ccgt.p_nom,
> >                p_nom_extendable=True,
> >                efficiency=ccgt.efficiency,
> >                marginal_cost=costs.at <http://costs.at>
> <http://costs.at <http://costs.at>>['CCGT',
> > 'marginal_cost'],
> >                capital_cost=costs.at <http://costs.at>
> <http://costs.at <http://costs.at>>['CCGT',
> > 'capital_cost'])
> >
> >     if 'OCGT' in carriers:
> >         n.madd("Generator", ocgt.index,
> >                carrier=ocgt.carrier,
> >                bus=ocgt.bus,
> >                p_nom=ocgt.p_nom,
> >                p_nom_min=ocgt.p_nom,
> >                p_nom_extendable=True,
> >                efficiency=ocgt.efficiency,
> >                marginal_cost=costs.at <http://costs.at>
> <http://costs.at <http://costs.at>>['OCGT',
> > 'marginal_cost'],
> >                capital_cost=costs.at <http://costs.at>
> <http://costs.at <http://costs.at>>['OCGT',
> > 'capital_cost'])
> >
> >     if 'nuclear' in carriers:
> >         n.madd("Generator", nuclear.index,
> >                carrier=nuclear.carrier,
> >                bus=nuclear.bus,
> >                p_nom=nuclear.p_nom,
> >                p_nom_min=nuclear.p_nom,
> >                p_nom_extendable=True,
> >                efficiency=nuclear.efficiency,
> >                marginal_cost=costs.at <http://costs.at>
> <http://costs.at <http://costs.at>>['nuclear',
> > 'marginal_cost'],
> >                capital_cost=costs.at <http://costs.at>
> <http://costs.at <http://costs.at>>['nuclear',
> > 'capital_cost'])
> >     if 'biomass' in carriers:
> >         n.madd("Generator", biomass.index,
> >                carrier=biomass.carrier,
> >                bus=biomass.bus,
> >                p_nom=biomass.p_nom,
> >                p_nom_min=biomass.p_nom,
> >                p_nom_extendable=True,
> >                efficiency=biomass.efficiency,
> >                marginal_cost=costs.at <http://costs.at>
> <http://costs.at <http://costs.at>>['biomass',
> > 'marginal_cost'],
> >                capital_cost=costs.at <http://costs.at>
> <http://costs.at <http://costs.at>>['biomass',
> > capital_cost=costs.at <http://costs.at> <http://costs.at
> <http://costs.at>>[carrier,
> > 'capital_cost'],
> >
> > marginal_cost=costs.at <http://costs.at> <http://costs.at
> <https://groups.google.com/d/msgid/pypsa/6b97a7be-be07-4faa-a0e6-aa1ba3a1d4bcn%40googlegroups.com?utm_medium=email&utm_source=footer
> <https://groups.google.com/d/msgid/pypsa/d66d1657-70fe-dd73-edbd-a3dd60ce4809%40gmail.com?utm_medium=email&utm_source=footer
> <https://groups.google.com/d/msgid/pypsa/d66d1657-70fe-dd73-edbd-a3dd60ce4809%40gmail.com?utm_medium=email&utm_source=footer>>.
>
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "pypsa" group.
> > To unsubscribe from this group and stop receiving emails from it,
> send
> > an email to pypsa+un...@googlegroups.com
> > <mailto:pypsa+un...@googlegroups.com>.
> > To view this discussion on the web, visit
> >
> https://groups.google.com/d/msgid/pypsa/1a0ecda5-08fa-4957-b4bc-29afc2c8c8e1n%40googlegroups.com
> <https://groups.google.com/d/msgid/pypsa/1a0ecda5-08fa-4957-b4bc-29afc2c8c8e1n%40googlegroups.com>
>
> >
> <https://groups.google.com/d/msgid/pypsa/1a0ecda5-08fa-4957-b4bc-29afc2c8c8e1n%40googlegroups.com?utm_medium=email&utm_source=footer
> <https://groups.google.com/d/msgid/pypsa/1a0ecda5-08fa-4957-b4bc-29afc2c8c8e1n%40googlegroups.com?utm_medium=email&utm_source=footer>>.
>
>
> --
> Fabian Neumann (he/him)
> Postdoctoral Researcher
>
> Department of Digital Transformation in Energy Systems
> Institute of Energy Technology
> Technische Universität Berlin
>
> Group website: https://tub-ensys.github.io
> <https://tub-ensys.github.io>
> Personal website: https://neumann.fyi <https://neumann.fyi>
>
> Visitor Address:
> Einsteinufer 25 (TA 8)
> 10587 Berlin
>
> --
> You received this message because you are subscribed to the Google
> Groups "pypsa" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to pypsa+un...@googlegroups.com
> <mailto:pypsa+un...@googlegroups.com>.
> To view this discussion on the web, visit
> https://groups.google.com/d/msgid/pypsa/4508addd-3383-4eb1-bd94-73dd29848caan%40googlegroups.com
> <https://groups.google.com/d/msgid/pypsa/4508addd-3383-4eb1-bd94-73dd29848caan%40googlegroups.com?utm_medium=email&utm_source=footer>.
Reply all
Reply to author
Forward
0 new messages