Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Lingkang Jin
    @Lingkangjin
    Hello everyone, after several running scenarios, I have discovered that in Calliope, Storage could "destroy" the energy whenever it likes, meaning it produces and consumes at the same time-step, I guess is due to the characteristics of the model; I was wondering in which kind of situation this could happen? because in some other cases this behaviour just does not exist, knowing the cause of the problem I may work around it during the modelling phase of the problem.
    13 replies
    Lingkang Jin
    @Lingkangjin
    Senza titolo.png
    b-jesse
    @b-jesse
    Hello again. I have another question about the run configurations and the interaction between calliope and gurobi. My model currently takes a long time to solve and I would like to limit the maximum computation time. I know that gurobi has this functionality (https://www.gurobi.com/documentation/9.5/refman/timelimit.html). However, I don't know how to easily set this parameter when I run my model with calliope. Is there a method how I can set this parameter in/with calliope (e.g. in the model.yaml?) Or do I have to let calliope build my model and start the solving in the python interface of gurobi?
    13 replies
    gio-mot
    @gio-mot
    Good evening, I am developing a model of the African continent based on a Calliope, but I have incurred in some issues regarding costs results. I am modelling the power system as it is, so I am not including investment costs, to optimize the operation of the existing power stations. For some technologies I have only fixed O&M costs, for which I used the setting om _annual, which should be annual fixed opex for unit of installed capacity. Anyhow, these costs result null when investment costs are not considered. Did I misunderstand the nature of this setting or is there an issue in its definition?
    Thank you very much
    Lingkang Jin
    @Lingkangjin
    Hello everyone, is it possible to constraint some conversion system to be supplied ONLY by energy production of a defined set of technologies? currently, I would like to assess a scenario with green hydrogen production, i.e. hydrogen production only with electricity produced by RES, rather than a generic electricity carrier.
    Francesco Lombardi
    @FLomb

    Hello everyone, is it possible to constraint some conversion system to be supplied ONLY by energy production of a defined set of technologies? currently, I would like to assess a scenario with green hydrogen production, i.e. hydrogen production only with electricity produced by RES, rather than a generic electricity carrier.

    Hi, what I would do then would be to differentiate electricity carriers. For instance, you could say that renewabes produce "renewable electricity", whilst other things produce "electricity". Your electrolyser would only be allowed to operate with an input of "renewable electricity", making sure that you produce green hydrogen only. At the same time, you should define a new, "dummy" technology to convert "renewable electricity" into generic "electricity", with no cost and unitary efficiency, so that renewables are also enabled to feed the generic "electricty" demand like all other techs

    1 reply
    Francesco Lombardi
    @FLomb

    Good evening, I am developing a model of the African continent based on a Calliope, but I have incurred in some issues regarding costs results. I am modelling the power system as it is, so I am not including investment costs, to optimize the operation of the existing power stations. For some technologies I have only fixed O&M costs, for which I used the setting om _annual, which should be annual fixed opex for unit of installed capacity. Anyhow, these costs result null when investment costs are not considered. Did I misunderstand the nature of this setting or is there an issue in its definition?
    Thank you very much

    Hi, wow, looks like an ambitious attempt! (: is this part of some bigger project? Anyway, if you are defining some om_annual that should work fine without any investment cost. A different thing is the om_fractional_investment, which is based on investment cost. However, for any fixed cost, including om_annual, you need to have a lifetime and an interest_rate defined as well.

    2 replies
    Fin Christie
    @FinChristie
    Hello, I was wondering if anyone would be able to help me with a model "unbounded" issue I am having in calliope. I am building a energy system model for a sustainable home, which uses a fictional harmonic compensation device - as a sort of ancillary service. The proof of concept model was working well until I introduced variable electricity prices (buying from grid). I did this by setting file allowed to ['resource','om_prod'] in model.yaml and by adding a timeseries for grid electricity prices to the technology. After completing these steps I ran the model, the model successfully pre-processed but the model.run() failed, giving various "Critical" errors saying the problem was unbounded. From my understanding this would normally be due to a lack of constraints (vs variables) but the messages seems to suggest this is not the case. Does anyone have any experience/ knowledge of these issues?Thank you so much in advance for your help and taking the time to read my problem.
    image.png
    here are some screenshots of firstly the terminal output that says the problem is unbounded
    and the model.yaml file
    image.png
    Francesco Lombardi
    @FLomb
    Hi @FinChristie. I've never used the "file_allowed" functionality, but I suggest you try with a normal override. Anyhow, the problem being unbounded might mean you have defined something wrong in these new inputs, for instance, negative prices that may make the "minimum" system cost impossible to determine
    Fin Christie
    @FinChristie
    Hi @FLomb, thanks for your help. Would overrides allow me to continuously update the price for each hour of the models simulation? My original plan was to build an automated script that ran the model for every hour, and updated the om_prod value based on the price timeseries. My main concern with this approach was that the storage would reset everytime the model was run. This is why I started to look into the "file_allowed" functionality as it seemed to meet the model's requirements.
    Rodrigo Amaro e Silva
    @ramaroesilva

    Hi @FinChristie. I agree with @FLomb. Personally, I've never used the "file_allowed" configuration.

    But for your intention, it should be enough to do: your_tech.costs.monetary.om_prod=file_name.csv:col_name

    Fin Christie
    @FinChristie
    Hi @ramaroesilva, thank you for your help also. I think the statement you suggested is what I have in my techs.yaml file
    6 replies
    image.png
    and this is the csv file
    image.png
    I also get a "MergeError" at the end of the model run, but I had assumed that is was just a result of the unbounded issues:
    image.png
    manukath
    @manuelkat
    Hello Calliope community! Where can I find detailed information beyond the manual about the receding horizon control algorithm used in operation mode?
    Francesco Lombardi
    @FLomb
    Hi @manuelkat, check out this (https://www.sciencedirect.com/science/article/pii/S0306261921000313), section 3.2.2
    manukath
    @manuelkat

    Thank you @FLomb! I have modeled a community of several households. Each household has solar panels and a small buffer storage. All households share heat pumps, one of which fills a large hot water storage tank. They also share a battery and a large seasonal hydrogen storage tank, which is charged by an electrolyzer and discharged by a fuel cell. The goal is to store the part of the PV electricity that is not used for daily needs and the battery for the dark season, so that greenhouse gas emissions are minimized.

    In Planning Mode, I get a typical seasonal storage curve optimized over a year, which means in April the hydrogen storage is fully discharged, in October fully charged. I would like to get a similar storage curve in operation mode with a window of 48h and a horizon of 24h as in planning mode, which I have not yet succeeded in doing. My idea so far is to define artificial om_con via a timeseries in the charge period negative for the electrolyzer, in the discharge period negative for the fuel cell as an incentive, however it is hard to set the amount of om_con correctly. Do you have any ideas how to better implement seasonal operation in operation mode?

    1 reply
    RicardoMirandaC
    @RicardoMirandaC
    Hi guys! I have an issue. Im working in a proyect to my university, this proyect aims to deliver an energy solution based on a electrolyser. My main doubt is how can I get the data from an electrolyser, I mean, the power energy comes from a photovoltaic panel and converted to hydrogen by the electrolyser, and then, this hydrogen enters a fuell cell and is converted to electricity and heat, so, can I get this data?. Because when I run the model, altought this two locations are connected and have the same carriers, the hydrogen doesnt come into the fuell cell and doesnt produce electricity and heat, so I plan to use that data as resources in a dummy suply, and supply hydrogen to the fuell cell and finally get electricity and heat. That is how I think it can work, but I dont know how should it be done. Thanks!
    5 replies
    James Morris
    @jmorrisnrel
    image.png

    Are the units for available resource (resource) kWh | kWh/m^2 | kWh/kW or are they actually kW*timestep | kW*timestep/m^2 | kW*timestep/kW for problems with non-hourly timesteps. For example if I pass in 400 for a supply tech's resource Calliope would assume that the supply is outputting 400 kW over whatever the model timestep is rather than producing 400 kWh during each timestep. With a 15min timestep that would be 400kWh for a whole hour vs 400 kWh every 15 min for the hour totaling 1600 kWh. I've looked through the constraint definition code and don't see a reference to the timestep weights for resource so my assumption is that no scaling is happening according to the timesteps. It feels a little pedantic but seems like the units for that constraint should either be kW*timestep | kW*timestep/m^2 | kW*timestep/kW or just kW | kW/m^2 | kW/kW to better describe the behavior of the parameter when the model timestep isn't hourly. In a similar vein, I'm wondering if the units for the ramp rate (energy_ramping) should be documented as %/timestep rather than %/hour.

    For more context we're working on some dynamic resampling of input timeseries to support quickly switching between model timesteps without having to manually resample each input timeseries and had to do some digging to make sure we understood how those parameters worked.

    8 replies
    FAYDI
    @FAYDI
    Hi all, I would like to know the formulation for the calculation of the LCOE in the calliope code. I aim to understand, for instance a couple PV/Battery, how the energy delivred is calculated int the denominator of the LCOE (the total PV energy, or the delivred PV energy to the demand plus the output energy coming from the battery to the demand). If someone could answer me it would be really great.
    5 replies
    Lingkang Jin
    @Lingkangjin
    Hello everyone, I would like to model different types of electrolysers in Calliope; One is an alkaline electrolytic cell that has better cost advantages than the PEM EC. Another is a PEM electrolytic cell that has a better response than alkaline EC.
    I would like to optimize the amount of each EC introduced. But it is difficult to model the responsiveness in minutes with Calliope.
    Do you have any suggestions to represent the response speed of EC?
    6 replies
    huhu
    @huhu78391034_twitter

    Hello all, I wonder why I found that the optimisation results (under plan mode) will be different for the same time on the same day if I use a different subset of timesteps.

    For example, for the national-scale example, if the subset time is: subset_time: ['2005-01-01', '2005-01-02'], there are 2464 MW CSP and 505.9 MW battery storage at 15:00 on 1 Jan. However, if the subset is subset_time: ['2005-01-01', '2005-01-05'], the results for the same time on the same day is different, which are 9000 MW CSP and -286.9 MW battery.

    Could anyone let know why is this?
    Thank you so much for your help in advance.
    Francesco Lombardi
    @FLomb
    hi @huhu78391034_twitter , that is the expected behaviour. In fact, the optimal mix of technologies is determined based on the demand and renewable availability time series that they have to deal with. With more days (even just three more, as in your case), the problem to be optimised changes. Perhaps there are now slightly different peaks to be met at times in which renewables availability is slightly more/less favourable, etc. Imagine you run for only 1 week in January and then for a full year. Of course the result changes because, for a full year, the optimisation algorithm realises that the deployed capacity needs to be able to deal with seasonal changes that didn't exist in the week of January; right? Well, the same happens, although to a lesser extent, when moving from the first 2 days of January to the first 5.
    Rodrigo Amaro e Silva
    @ramaroesilva

    Just to add to what @FLomb accurately said: for different periods, there may be different optimal combinations of installed capacities.

    Which would mean that the same day, for the same weather conditions, you would have different generation profiles (identical in shape, if dispatch is not involved, but with a different magnitude)

    huhu
    @huhu78391034_twitter
    Hello @FLomb and @ramaroesilva , thank you so much for your responses. That makes sense! It is really helpful!! Just to follow up: so am I correct in saying that Calliope optimises the technology mix over the subset time period users specify rather than optimises for every single time step (e.g. one hour)?
    Rodrigo Amaro e Silva
    @ramaroesilva
    I would say it's correct to say that Calliope optimizes both, but with the main goal of minimizing costs (or whatever cost function you define) over the whole period
    in a sense that, when you have controllable elements (like batteries) with will forcibly look at smaller timescales to manage the dispatch (for batteries, when it's charged or discharged)
    Rodrigo Amaro e Silva
    @ramaroesilva

    another example is that often for PV, the optimized parameters* have contrasting impacts in summer/winter: too much capacity may generation less valuable surplus in summer, too little may lead to negligible relevance in winter time.

    *in calliope it's mostly capacity, but the same could be said, for example, for the inclination

    jgwagenfeld
    @jgwagenfeld
    In the end you have the above mentioned two optimizations happening at the same time. A dispatch optimization - so when to operate a power plant and when not, and second the capacity expansion. For calliope, building capacity is only allowed at timestep 0 (there are other tools, which e.g. allow further expansion in year x if you plan to run multiple years). So this always happens for the full time period.
    If your system has dispatchable sources, e.g. a diesel generator which can start up or shut down, this is optimized for each timestep. The result will be the global optimum of both of these optimizations (if youre not using the operate mode, where you fix all capacity and just optimize the dispatch)
    huhu
    @huhu78391034_twitter
    Hello, I found that when I integrated a heating system with several heating technologies (gas supply, gas boilers, heating demand) in a certain location, the optimisation results (e.g. costs, energy capacity) for the electricity system changed a lot, even though I only have a grid electricity supply and battery in the electrical system. The heating system and electrical system should be independent because they use different carriers, but why integrating heating technology would affect the optimisation results of the electrical system?
    Can anyone let me know the reasons? Thank you so much for your help in advance!
    4 replies
    RicardoMirandaC
    @RicardoMirandaC
    Hi everyone! I've an issue. It's possible to store a carrier in a defined period of time, and then use this storage in a different period of time?. For example, if I have a photovoltaic system to feed a company's demand, and maybe at some point of the day, the generation is bigger than this demand, so, can I store this power in a battery and use it at night, but only between 8:00 pm to 6:00 am for example? Thanks in advance!
    9 replies
    lilu31
    @lilu31

    Hi everybody, I am new to Calliope. I want to build a model for a domestiv PV system which has a dynamic feed-in tariff for the exportet energy (e.g. 10 ct./kWh from 12-5 AM and 15 ct./kWh from 5-11 AM and so on) which differs from the electricity tariff of the home owner (e.g. a constant 30 ct./kWh). Is it possible to implement the "negative cost" i.e. revenue of a technology as a timeseries? Thanks in advance! The documentation states the following:

    "Revenue and export
    It is possible to specify revenues for technologies simply by setting a negative cost value. For example, to consider a feed-in tariff for PV generation, it could be given a negative operational cost equal to the real operational cost minus the level of feed-in tariff received.

    Export is an extension of this, allowing an energy carrier to be removed from the system without meeting demand. This is analogous to e.g. domestic PV technologies being able to export excess electricity to the national grid. A cost (or negative cost: revenue) can then be applied to export."

    3 replies
    lilu31
    @lilu31
    Is it already possible to model electric vehicles as flexible loads and/or as Vehicle to X?
    13 replies
    Federico Damonte
    @federicodmn97_twitter
    Is calliope aviable on windows 11?
    Rodrigo Amaro e Silva
    @ramaroesilva

    @federicodmn97_twitter sure thing.

    just follow the instructions in https://calliope.readthedocs.io/en/stable/user/installation.html

    but, just as a disclaimer, calliope is not a stand-alone software. you either use it through Python or the web version implemented by NREL https://github.com/NREL/engage

    Francesco Lombardi
    @FLomb

    @federicodmn97_twitter sure thing.

    just follow the instructions in https://calliope.readthedocs.io/en/stable/user/installation.html

    but, just as a disclaimer, calliope is not a stand-alone software. you either use it through Python or the web version implemented by NREL https://github.com/NREL/engage

    exactly! (: But yes, I have some students running it on Win11 right now

    Federico Damonte
    @federicodmn97_twitter
    I have already follow the instruction, I have installed before python, miniconda then
    pip install pyomo
    conda install -c conda-forge xarray dask netCDF4 bottleneck
    pip insta the other one, and after that when i tried to use
    conda create -c conda-forge -n calliope calliope
    my computer went down
    Jdanebergs
    @Jdanebergs
    Hi, I am thinking about to use Calliope in an upcoming project to model a local energy system. The energy system should be connected to a national grid and be able to account for ancillery grid sercvice such as frequency control from a local battery. Do you know if it has been done in any previous work with Calliope or how easy it would to include such a functionality?