Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions calc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
const cpu_pd = 12.375; // kJ/(c*hr)
const mem_pd = 900; // kJ/(128GiB*hr)
const gpu_pd = 1440; // kJ/(gpu*hr)
const lqd_pd = 230; // kJ/(cpu hours)
const air_pd = 720; // kJ/any hours, div by cpu_fac for cpu, by gpu_fac for gpu

const cpu_fac = 104.2;
const gpu_fac = 4;
const ssd_pd = 10.8;

const eff = 1.176;

const car_fac = 16;
const co2_fac = 0.095;

function calculate() {
const ptime = parseFloat(document.getElementById('input1').value);
const type = document.getElementById('input2').value
const data = parseFloat(document.getElementById('input3').value);
const dtime = parseFloat(document.getElementById('input4').value);
console.log(ptime);
console.log(type);
console.log(data);
console.log(dtime);

if (isNaN(ptime) || isNaN(data) || isNaN(dtime)) {
alert("Please enter valid choices in all fields.");
return;
}

let c_part = 0;
let mem_part = 0;
let cool_part = 0;
let adj_time = NaN;
switch (type) {
case "thin":
adj_time = ptime / cpu_fac;
c_part = ptime * cpu_pd * eff;
mem_part = adj_time * mem_pd * eff;
cool_part = adj_time * lqd_pd + air_pd * eff;
case "fat":
adj_time = ptime / cpu_fac;
c_part = ptime * cpu_pd * eff;
mem_part = adj_time * mem_pd * 2 * eff;
cool_part = adj_time * lqd_pd + air_pd * eff;
case "gpu":
adj_time = ptime / gpu_fac;
c_part = ptime * gpu_pd * eff;
mem_part = adj_time * mem_pd * eff / 2;
cool_part = adj_time * air_pd * 2 * eff;
}
const c_draw = (c_part + mem_part + cool_part) / 1000; // as MJ
const d_draw = (data / 4096) * ssd_pd * dtime * 24 * 60 * 60 / 1000;

const total_draw = (c_draw + d_draw) / 1000;
const car_km = total_draw / car_fac;
const co2_total = total_draw / co2_fac;

//const compute_frac = c_draw / (total_draw * 1000);

let disp_1 = total_draw;
if (disp_1 > 10) {
disp_1 = Math.round(total_draw);
}
else {
disp_1 = Math.round(total_draw * 100) / 100;
}

let disp_2 = co2_total;
if (disp_2 > 10) {
disp_2 = Math.round(co2_total);
}
else {
disp_2 = Math.round(co2_total * 100) / 100;
}

let disp_3 = car_km;
if (disp_3 > 10) {
disp_3 = Math.round(car_km);
}
else {
disp_3 = Math.round(car_km * 100) / 100;
}

document.getElementById('result1').querySelector('.result-value').innerText = disp_1;
document.getElementById('result2').querySelector('.result-value').innerText = disp_2;
document.getElementById('result3').querySelector('.result-value').innerText = disp_3;
}
50 changes: 19 additions & 31 deletions impact-calculator.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CO2 Emissions Calculator</title>
<link rel="stylesheet" href="styles.css">
<script src="calc.js"></script>
</head>
<body class="calculator-page">
<header class="header">
Expand All @@ -16,7 +17,7 @@
<li><a href="best-practices.html">Best Practices</a></li>
<li><a href="about.html">About Us</a></li>
</ul>
</nav>
</nav>type
</header>

<h1>CO2 Emissions Calculator</h1>
Expand All @@ -26,16 +27,24 @@ <h1>CO2 Emissions Calculator</h1>
<h2>Input Fields</h2>
<hr style="border-top: 2px solid white;">
<div class="input-box">
<label>Average Supercomputing Hours</label>
<input type="text" class="input" id="input1">
<label>Processor time spent (hours)</label>
<input type="number" class="input" id="input1">
</div>
<div class="input-box">
<label>Type of Supercomputing Task</label>
<input type="text" class="input" id="input2">
<label>Type of node</label>
<select for="tasktype" class="input" id="input2">
<option value="thin">Thin (CPU)</option>
<option value="fat">Fat (CPU)</option>
<option value="gpu">GPU</option>
</select>
</div>
<div class="input-box">
<label>Power Consumption</label>
<input type="text" class="input" id="input3">
<label>Total data generated (GiB)</label>
<input type="number" class="input" id="input3">
</div>
<div class="input-box">
<label>Total duration of project (days)</label>
<input type="number" class="input" id="input4">
</div>
<button class="calculate-button" onclick="calculate()">Calculate</button>
</div>
Expand All @@ -48,38 +57,17 @@ <h2>Results</h2>
<div class="smaller-semi-circle"></div>
<div class="efficiency-box" id="result1">
<p class="result-value"></p>
<p>Your CO2 emissions per hour</p>
<p>Gigajoules of energy used</p>
</div>
<div class="efficiency-box" id="result2">
<p class="result-value"></p>
<p>Your CO2 emissions per year</p>
<p>Tonnes of CO2 emitted</p>
</div>
<div class="efficiency-box" id="result3">
<p class="result-value"></p>
<p>Kilometers by car driven</p>
<p>Thousands of km driven by car</p>
</div>
</div>
</div>

<script>
function calculate() {
const input1 = parseFloat(document.getElementById('input1').value);
const input2 = parseFloat(document.getElementById('input2').value);
const input3 = parseFloat(document.getElementById('input3').value);

if (isNaN(input1) || isNaN(input2) || isNaN(input3)) {
alert("Please enter valid numbers in all fields.");
return;
}

const result = input1 + input2 + input3;

const output = [result + ' kg', result + ' kg', result + ' km'];

document.getElementById('result1').querySelector('.result-value').innerText = output[0];
document.getElementById('result2').querySelector('.result-value').innerText = output[1];
document.getElementById('result3').querySelector('.result-value').innerText = output[2];
}
</script>
</body>
</html>