<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://thechange.wiki/index.php?action=history&amp;feed=atom&amp;title=Code%3Ahow-much-energy-storage.c</id>
	<title>Code:how-much-energy-storage.c - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://thechange.wiki/index.php?action=history&amp;feed=atom&amp;title=Code%3Ahow-much-energy-storage.c"/>
	<link rel="alternate" type="text/html" href="https://thechange.wiki/index.php?title=Code:how-much-energy-storage.c&amp;action=history"/>
	<updated>2026-04-27T00:27:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://thechange.wiki/index.php?title=Code:how-much-energy-storage.c&amp;diff=2770&amp;oldid=prev</id>
		<title>Elie: Created page with &quot;{{mbox|This code is currently just a '''draft'''. It hasn't been tested. It hasn't even been run once. It doesn't do anything yet. It's just a prototype of the analysis we're going to need for research page: How much seasonal energy storage?.}}  &lt;syntaxhighlight lang=&quot;c&quot;&gt; #define N 8760 typedef double num; // number  // input parameters to tweak num supply_demand_ratio = 2; num solar_wind_ratio    = 1; num battery_capacity        = 1; // TODO: change this default val...&quot;</title>
		<link rel="alternate" type="text/html" href="https://thechange.wiki/index.php?title=Code:how-much-energy-storage.c&amp;diff=2770&amp;oldid=prev"/>
		<updated>2024-12-30T21:41:09Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{mbox|This code is currently just a &amp;#039;&amp;#039;&amp;#039;draft&amp;#039;&amp;#039;&amp;#039;. It hasn&amp;#039;t been tested. It hasn&amp;#039;t even been run once. It doesn&amp;#039;t do anything yet. It&amp;#039;s just a prototype of the analysis we&amp;#039;re going to need for research page: &lt;a href=&quot;/How_much_seasonal_energy_storage%3F&quot; title=&quot;How much seasonal energy storage?&quot;&gt;How much seasonal energy storage?&lt;/a&gt;.}}  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt; #define N 8760 typedef double num; // number  // input parameters to tweak num supply_demand_ratio = 2; num solar_wind_ratio    = 1; num battery_capacity        = 1; // TODO: change this default val...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{mbox|This code is currently just a '''draft'''. It hasn't been tested. It hasn't even been run once. It doesn't do anything yet. It's just a prototype of the analysis we're going to need for research page: [[How much seasonal energy storage?]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define N 8760&lt;br /&gt;
typedef double num; // number&lt;br /&gt;
&lt;br /&gt;
// input parameters to tweak&lt;br /&gt;
num supply_demand_ratio = 2;&lt;br /&gt;
num solar_wind_ratio    = 1;&lt;br /&gt;
num battery_capacity        = 1; // TODO: change this default value to something meaningful&lt;br /&gt;
num charge_efficiency       = 0.85;&lt;br /&gt;
num electrolysis_efficiency = 0.79;&lt;br /&gt;
&lt;br /&gt;
// input data&lt;br /&gt;
num wind[N];&lt;br /&gt;
num solar[N];&lt;br /&gt;
num base_demand[N];&lt;br /&gt;
num heat_demand[N];&lt;br /&gt;
&lt;br /&gt;
// output data&lt;br /&gt;
num battery_charge[N];&lt;br /&gt;
num hydrogen_stock[N];&lt;br /&gt;
num non_renewable_heating[N]    = {0};&lt;br /&gt;
num non_renewable_electricity[N]= {0};&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
 // TODO: load data from files into arrays&lt;br /&gt;
 // ...&lt;br /&gt;
 // init variables&lt;br /&gt;
 num charge = 0;&lt;br /&gt;
 num hydrogen = 0;&lt;br /&gt;
 // precalculate variables&lt;br /&gt;
 num sum_wind=0; for(int i=0;i&amp;lt;N;i++) sum_wind += wind[i];&lt;br /&gt;
 num sum_solar=0;for(int i=0;i&amp;lt;N;i++) sum_solar+= solar[i];&lt;br /&gt;
 num sum_base=0; for(int i=0;i&amp;lt;N;i++) sum_base += base_demand[i];&lt;br /&gt;
 num sum_heat=0; for(int i=0;i&amp;lt;N;i++) sum_heat += heat_demand[i];&lt;br /&gt;
 num wind_scale = (sum_base + sum_heat) / sum_wind  * supply_demand_ratio / (1 + solar_wind_ratio);&lt;br /&gt;
 num solar_scale= (sum_base + sum_heat) / sum_solar * supply_demand_ratio / (1 + solar_wind_ratio) * solar_wind_ratio;&lt;br /&gt;
 num undo_charge_efficiency = 1/charge_efficiency;&lt;br /&gt;
 // main loop&lt;br /&gt;
 for (int i=0; i&amp;lt;N; i++) {&lt;br /&gt;
  num heating = heat_demand[i];&lt;br /&gt;
  num electricity_supply = solar[i]*solar_scale + wind[i]*wind_scale;&lt;br /&gt;
  // 1st priority: meet base demand&lt;br /&gt;
  num diff = electricity_supply - base_demand[i];&lt;br /&gt;
  if (diff &amp;gt; 0) {&lt;br /&gt;
   // 2nd priority: charge battery&lt;br /&gt;
   charge += diff * charge_efficiency;&lt;br /&gt;
   if (charge &amp;gt; battery_capacity) {&lt;br /&gt;
    diff = (charge - battery_capacity) * undo_charge_efficiency;&lt;br /&gt;
    charge = battery_capacity;&lt;br /&gt;
    // 3rd priority: use surplus electricity for heating&lt;br /&gt;
    heating -= diff;&lt;br /&gt;
    if (heating &amp;lt; 0) {&lt;br /&gt;
     hydrogen += -heating * electrolysis_efficiency; // 4th priority: produce hydrogen gas&lt;br /&gt;
     heating = 0;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
  else {  // diff &amp;lt;= 0:&lt;br /&gt;
   // take from battery: meet the rest of base demand&lt;br /&gt;
   charge += diff;&lt;br /&gt;
   if (charge &amp;lt; 0) {&lt;br /&gt;
    non_renewable_electricity[i] = -charge; // renewables failed, battery dead&lt;br /&gt;
    charge = 0;&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
  // burn hydrogen for heating if needed&lt;br /&gt;
  hydrogen -= heating;&lt;br /&gt;
  if (hydrogen &amp;lt; 0) {&lt;br /&gt;
   non_renewable_heating[i] = -hydrogen; // renewables failed, ran out of hydrogen&lt;br /&gt;
   hydrogen = 0;&lt;br /&gt;
  }&lt;br /&gt;
  // save the result&lt;br /&gt;
  battery_charge[i] = charge;&lt;br /&gt;
  hydrogen_stock[i] = hydrogen;&lt;br /&gt;
 }&lt;br /&gt;
 // TODO: output the results&lt;br /&gt;
 // ...&lt;br /&gt;
 return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elie</name></author>
	</entry>
</feed>