{
const tileWidth = 30;
const svg = d3.select(DOM.svg(7 * tileWidth, 7 * tileWidth));
const n = ['c', 'd', 'e', 'f', 'g', 'a', 'b'];
const data = [];
for (let i = 0; i < 7; ++i) {
for (let j = 0; j < 7; ++j) {
data.push({
i: i,
j: j,
value: 0,
text: n[i] + n[j]
});
}
}
const tile = svg
.selectAll("g")
.data(data)
.enter()
.append("g")
.attr("transform", function(d, i) {
return `translate(${d.j * tileWidth},${(6 - d.i) * tileWidth})`;
});
tile
.append("rect")
.attr("x", 0)
.attr("y", 0)
.attr("width", tileWidth)
.attr("height", tileWidth)
.attr("fill", d => d3.interpolateReds(Math.abs(d.value)))
.attr("stroke", "white")
.attr("stroke-width", 2);
tile
.append("text")
.attr('x', 5)
.attr('y', (tileWidth * 2) / 3)
.text(d => d.text);
const A = orbitals.map(o => o.orbital[0][2]);
while (true) {
const re = d3.range(7).map(i => d3.range(7).map(j => 0));
const im = d3.range(7).map(i => d3.range(7).map(j => 0));
const de = d3.range(7).map(i => d3.range(7).map(j => 0));
const t = Date.now();
for (let i = 0; i < 7; ++i) {
for (let j = 0; j < 7; ++j) {
for (let n = 0; n < 49; ++n) {
re[i][j] +=
A[n] * orbitals[n].orbital[i][j] * Math.cos(orbitals[n].energy * t);
im[i][j] +=
A[n] * orbitals[n].orbital[i][j] * Math.cos(orbitals[n].energy * t);
}
}
}
let s = 0;
for (let i = 0; i < 7; ++i) {
for (let j = 0; j < 7; ++j) {
de[i][j] = re[i][j] * re[i][j] + im[i][j] * im[i][j];
s += de[i][j];
}
}
for (let i = 0; i < 7; ++i) {
for (let j = 0; j < 7; ++j) {
de[i][j] /= s;
}
}
for (let l = 0; l < 49; ++l) {
data[l].value = de[data[l].i][data[l].j];
}
svg
.selectAll("rect")
.attr("fill", d => d3.interpolateReds(Math.abs(d.value)));
yield Promises.delay(200, svg.node());
}
}