|
21 | 21 | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
22 | 22 | <link rel="icon" type="image/x-icon" href="res/icon.ico"> |
23 | 23 | <script> |
24 | | - async function ghapi(url) { |
25 | | - return fetch(url).then((r) => r.json()); |
26 | | - } |
27 | | - |
28 | | - let htmlLoaded = false; |
29 | | - window.addEventListener("DOMContentLoaded", () => { htmlLoaded = true; }); |
30 | | - |
31 | | - function onHTML(func) { |
32 | | - window.addEventListener("DOMContentLoaded", func); |
33 | | - |
34 | | - if (htmlLoaded) { |
35 | | - func(); |
36 | | - } |
37 | | - } |
38 | | - |
39 | | - ghapi("https://api.github.com/repos/MFlowCode/MFC/releases/latest").then((r) => { |
40 | | - onHTML(() => { |
41 | | - document.getElementById("release-ver").innerText = r["tag_name"]; |
42 | | - }) |
43 | | - }); |
44 | | - |
45 | | - ghapi("https://api.github.com/repos/MFlowCode/MFC/contributors").then((r) => { |
46 | | - onHTML(() => { |
47 | | - let container = document.getElementById("ft-contrib"); |
48 | | - |
49 | | - for (let contrib of r) { |
50 | | - let lnk = document.createElement("a"); |
51 | | - lnk.classList.add("w-12", "h-12", "float-left"); |
52 | | - lnk.href = contrib.html_url; |
53 | | - |
54 | | - let img = document.createElement("div"); |
55 | | - img.classList.add("w-12", "h-12", "bg-cover"); |
56 | | - |
57 | | - img.style.backgroundImage = `url('${contrib.avatar_url}')`; |
58 | | - |
59 | | - lnk.appendChild(img); |
60 | | - container.appendChild(lnk); |
61 | | - } |
62 | | - }); |
63 | | - }); |
64 | | - |
65 | | - class FS { |
66 | | - constructor(name, image, computer, accelerators, walltime, source) { |
67 | | - this.name = name; |
68 | | - this.image = image; |
69 | | - this.computer = computer; |
70 | | - this.accelerators = accelerators; |
71 | | - this.walltime = walltime; |
72 | | - this.source = source; |
73 | | - } |
74 | | - }; |
75 | | - |
76 | 24 | const sims = [ |
77 | | - new FS("Viscous Taylor-Green vortex","res/simulations/h.png","Delta", "128 A100s", "17h" , "https://vimeo.com/1019922003?share=copy"), |
78 | | - new FS("Shedding water droplet", "res/simulations/a.png", "Summit", "960 V100s", "4h", "https://player.vimeo.com/video/905208069"), |
79 | | - new FS("Flow over an airfoil (vorticity)", "res/simulations/g.png", "Delta", "128 A100s", "19h", "https://vimeo.com/917305340/c05fd414c8?share=copy"), |
80 | | - new FS("Cavitation fragments kidney stone", "res/simulations/d.png", "Summit", "576 V100s", "30 min", "https://doi.org/10.48550/arXiv.2305.09163"), |
81 | | - new FS("Breakup of vibrated interface", "res/simulations/f.png", "Summit", "128 V100s", "4h","https://player.vimeo.com/video/922022757"), |
82 | | - new FS("Mach 2 flow over a sphere", "res/simulations/i.png", "Phoenix", "36 V100s", "30m", "https://vimeo.com/1020775531?share=copy"), |
83 | | - new FS("Mach 2 shear layer", "res/simulations/j.png", "Phoenix", "32 V100s", "15m", "https://vimeo.com/1020775541?share=copy"), |
84 | | - new FS("Collapsing bubbles (pressure)", "res/simulations/b.png", "Summit", "216 V100s", "3h", "https://doi.org/10.48550/arXiv.2305.09163"), |
85 | | - new FS("Collapsing bubbles (streamlines)", "res/simulations/c.png", "Summit", "216 V100s", "3h", "https://doi.org/10.48550/arXiv.2305.09163"), |
| 25 | + { name: "Viscous Taylor-Green vortex", image: "res/simulations/h.png", computer: "Delta", accelerators: "128 A100s", walltime: "17h", source: "https://vimeo.com/1019922003?share=copy" }, |
| 26 | + { name: "Shedding water droplet", image: "res/simulations/a.png", computer: "Summit", accelerators: "960 V100s", walltime: "4h", source: "https://player.vimeo.com/video/905208069" }, |
| 27 | + { name: "Flow over an airfoil (vorticity)", image: "res/simulations/g.png", computer: "Delta", accelerators: "128 A100s", walltime: "19h", source: "https://vimeo.com/917305340/c05fd414c8?share=copy" }, |
| 28 | + { name: "Cavitation fragments kidney stone", image: "res/simulations/d.png", computer: "Summit", accelerators: "576 V100s", walltime: "30 min", source: "https://doi.org/10.48550/arXiv.2305.09163" }, |
| 29 | + { name: "Breakup of vibrated interface", image: "res/simulations/f.png", computer: "Summit", accelerators: "128 V100s", walltime: "4h", source: "https://player.vimeo.com/video/922022757" }, |
| 30 | + { name: "Mach 2 flow over a sphere", image: "res/simulations/i.png", computer: "Phoenix", accelerators: "36 V100s", walltime: "30m", source: "https://vimeo.com/1020775531?share=copy" }, |
| 31 | + { name: "Mach 2 shear layer", image: "res/simulations/j.png", computer: "Phoenix", accelerators: "32 V100s", walltime: "15m", source: "https://vimeo.com/1020775541?share=copy" }, |
| 32 | + { name: "Collapsing bubbles (pressure)", image: "res/simulations/b.png", computer: "Summit", accelerators: "216 V100s", walltime: "3h", source: "https://doi.org/10.48550/arXiv.2305.09163" }, |
| 33 | + { name: "Collapsing bubbles (streamlines)", image: "res/simulations/c.png", computer: "Summit", accelerators: "216 V100s", walltime: "3h", source: "https://doi.org/10.48550/arXiv.2305.09163" }, |
86 | 34 | ]; |
87 | 35 |
|
88 | | - /* |
89 | | - <div class="flex flex-col text-white rounded bg-slate-900 rounded-b-lg"> |
90 | | - <div class="flex-1 grid bg-white pb-2"> |
91 | | - <img class="place-self-center" src="res/simulations/a.png"> |
92 | | - </div> |
93 | | - <div class="flex flex-row items-center"> |
94 | | - <img class="h-10 bg-white" src="res/logo.png" /> |
95 | | - <div class="flex-1 font-semibold text-center"> |
96 | | - Bubble collapse from acoustic source |
97 | | - </div> |
98 | | - <a class="w-10 text-center" href="#"> |
99 | | - <i class="fa-solid fa-arrow-up-right-from-square"></i> |
100 | | - </a> |
101 | | - </div> |
102 | | - <div class="grid grid-cols-3 gap-4 px-4 py-2"> |
103 | | - <div class="flex flex-row items-center"> |
104 | | - <div><i class="fa-solid fa-server"></i></div> |
105 | | - <div class="flex-1 text-center">Summit</div> |
106 | | - </div> |
107 | | - <div class="flex flex-row items-center"> |
108 | | - <div><i class="fa-solid fa-microchip"></i></div> |
109 | | - <div class="flex-1 text-center">10k A100</div> |
110 | | - </div> |
111 | | - <div class="flex flex-row items-center"> |
112 | | - <div><i class="fa-solid fa-clock"></i></div> |
113 | | - <div class="flex-1 text-center">10h</div> |
114 | | - </div> |
115 | | - </div> |
116 | | - </div> |
117 | | - */ |
118 | | - |
119 | | - onHTML(() => { |
120 | | - for (let sim of sims) { |
121 | | - let container = document.createElement("div"); |
122 | | - container.classList.add("flex", "flex-col", "text-white", "rounded", "bg-slate-900", "rounded-b-lg"); |
123 | | - |
124 | | - let topdiv = document.createElement("div"); |
125 | | - topdiv.classList.add("flex-1", "grid", "bg-white", "pb-2"); |
126 | | - |
127 | | - let img = document.createElement("img"); |
128 | | - img.src = sim.image; |
129 | | - img.classList.add("place-self-center"); |
130 | | - |
131 | | - topdiv.appendChild(img); |
132 | | - container.appendChild(topdiv); |
133 | | - |
134 | | - let middiv = document.createElement("div"); |
135 | | - middiv.classList.add("flex", "flex-row", "items-center"); |
136 | | - |
137 | | - let logoDiv = document.createElement("div"); |
138 | | - logoDiv.classList.add("flex", "flex-col", "h-full", "bg-white", "justify-center"); |
139 | | - |
140 | | - let logo = document.createElement("img"); |
141 | | - logo.src = "res/logo.png"; |
142 | | - logo.classList.add("h-10"); |
143 | | - |
144 | | - logoDiv.appendChild(logo); |
145 | | - middiv.appendChild(logoDiv); |
146 | | - |
147 | | - let title = document.createElement("div"); |
148 | | - title.classList.add("flex-1", "p-2", "font-semibold", "text-center"); |
149 | | - title.innerText = sim.name; |
150 | | - |
151 | | - middiv.appendChild(title); |
152 | | - |
153 | | - let lnk = document.createElement("a"); |
154 | | - lnk.href = sim.source; |
155 | | - lnk.classList.add("w-10", "text-center"); |
156 | | - |
157 | | - let icon = document.createElement("i"); |
158 | | - icon.classList.add("fa-solid", "fa-arrow-up-right-from-square"); |
159 | | - |
160 | | - lnk.appendChild(icon); |
161 | | - middiv.appendChild(lnk); |
162 | | - container.appendChild(middiv); |
163 | | - |
164 | | - let botdiv = document.createElement("div"); |
165 | | - botdiv.classList.add("grid", "grid-cols-3", "gap-4", "px-4", "py-2"); |
166 | | - |
167 | | - const items = [ |
168 | | - ["fa-server", sim.computer ], |
169 | | - ["fa-microchip", sim.accelerators], |
170 | | - ["fa-clock", sim.walltime ] |
171 | | - ]; |
172 | | - |
173 | | - for (let r in items) { |
174 | | - let div = document.createElement("div"); |
175 | | - div.classList.add("flex", "flex-row", "items-center"); |
176 | | - |
177 | | - let iconDiv = document.createElement("div"); |
178 | | - iconDiv.classList.add("pr-2"); |
179 | | - |
180 | | - let icon = document.createElement("i"); |
181 | | - icon.classList.add("fa-solid", items[r][0]); |
182 | | - iconDiv.appendChild(icon); |
183 | | - div.appendChild(iconDiv); |
184 | | - |
185 | | - let text = document.createElement("div"); |
186 | | - text.classList.add("flex-1", "text-center"); |
187 | | - text.innerText = items[r][1]; |
188 | | - |
189 | | - div.appendChild(text); |
190 | | - botdiv.appendChild(div); |
191 | | - } |
192 | | - |
193 | | - container.appendChild(botdiv); |
194 | | - |
195 | | - document.getElementById("ft-sim").appendChild(container); |
196 | | - } |
197 | | - }); |
198 | | - |
199 | | - class FScale { |
200 | | - constructor(image, computer) { |
201 | | - this.image = image; |
202 | | - this.computer = computer; |
203 | | - } |
204 | | - }; |
205 | | - |
206 | | - scalings = [ |
207 | | - new FScale("res/weakScaling/frontier.svg", "Oak Ridge Frontier (AMD MI250X GPUs)"), |
208 | | - new FScale("res/weakScaling/summit.svg", "Oak Ridge Summit (NVIDIA V100 GPUs)") |
| 36 | + const scalings = [ |
| 37 | + { image: "res/weakScaling/frontier.svg", label: "Oak Ridge Frontier (AMD MI250X GPUs)" }, |
| 38 | + { image: "res/weakScaling/summit.svg", label: "Oak Ridge Summit (NVIDIA V100 GPUs)" }, |
209 | 39 | ]; |
210 | 40 |
|
211 | | - onHTML(() => { |
212 | | - for (let scl of scalings) { |
213 | | - let container = document.createElement("div"); |
214 | | - container.classList.add("flex", "md:w-2/6", "flex-col", "text-white", "rounded", "bg-slate-900", "rounded-b-lg"); |
215 | | - |
216 | | - let topdiv = document.createElement("div"); |
217 | | - topdiv.classList.add("flex-1", "grid", "bg-white", "pb-2"); |
218 | | - |
219 | | - let img = document.createElement("img"); |
220 | | - img.src = scl.image; |
221 | | - img.classList.add("place-self-center"); |
222 | | - |
223 | | - topdiv.appendChild(img); |
224 | | - container.appendChild(topdiv); |
225 | | - |
226 | | - let middiv = document.createElement("div"); |
227 | | - middiv.classList.add("flex", "flex-row", "items-center"); |
228 | | - |
229 | | - let logoDiv = document.createElement("div"); |
230 | | - logoDiv.classList.add("flex", "flex-col", "h-full", "bg-white", "justify-center"); |
231 | | - |
232 | | - |
233 | | - let title = document.createElement("div"); |
234 | | - title.classList.add("flex-1", "p-2", "font-semibold", "text-center"); |
235 | | - title.innerText = scl.computer; |
236 | | - |
237 | | - middiv.appendChild(title); |
238 | | - |
239 | | - let botdiv = document.createElement("div"); |
240 | | - botdiv.classList.add("flex-1","p-2","font-semibold","text-center"); |
241 | | - botdiv.innerText=scl.computer; |
242 | | - |
243 | | - container.appendChild(botdiv); |
| 41 | + document.addEventListener("DOMContentLoaded", () => { |
| 42 | + document.getElementById("ft-sim").innerHTML = sims.map(s => ` |
| 43 | + <div class="flex flex-col text-white rounded bg-slate-900 rounded-b-lg"> |
| 44 | + <div class="flex-1 grid bg-white pb-2"> |
| 45 | + <img class="place-self-center" src="${s.image}" alt="${s.name}"> |
| 46 | + </div> |
| 47 | + <div class="flex flex-row items-center"> |
| 48 | + <div class="flex flex-col h-full bg-white justify-center"> |
| 49 | + <img class="h-10" src="res/logo.png" alt=""> |
| 50 | + </div> |
| 51 | + <div class="flex-1 p-2 font-semibold text-center">${s.name}</div> |
| 52 | + <a class="w-10 text-center" href="${s.source}"> |
| 53 | + <i class="fa-solid fa-arrow-up-right-from-square"></i> |
| 54 | + </a> |
| 55 | + </div> |
| 56 | + <div class="grid grid-cols-3 gap-4 px-4 py-2"> |
| 57 | + <div class="flex flex-row items-center"> |
| 58 | + <div class="pr-2"><i class="fa-solid fa-server"></i></div> |
| 59 | + <div class="flex-1 text-center">${s.computer}</div> |
| 60 | + </div> |
| 61 | + <div class="flex flex-row items-center"> |
| 62 | + <div class="pr-2"><i class="fa-solid fa-microchip"></i></div> |
| 63 | + <div class="flex-1 text-center">${s.accelerators}</div> |
| 64 | + </div> |
| 65 | + <div class="flex flex-row items-center"> |
| 66 | + <div class="pr-2"><i class="fa-solid fa-clock"></i></div> |
| 67 | + <div class="flex-1 text-center">${s.walltime}</div> |
| 68 | + </div> |
| 69 | + </div> |
| 70 | + </div> |
| 71 | + `).join(""); |
244 | 72 |
|
245 | | - document.getElementById("ft-scaling").appendChild(container); |
246 | | - } |
| 73 | + document.getElementById("ft-scaling").innerHTML = scalings.map(s => ` |
| 74 | + <div class="flex md:w-2/6 flex-col text-white rounded bg-slate-900 rounded-b-lg"> |
| 75 | + <div class="flex-1 grid bg-white pb-2"> |
| 76 | + <img class="place-self-center" src="${s.image}" alt="${s.label}"> |
| 77 | + </div> |
| 78 | + <div class="flex-1 p-2 font-semibold text-center">${s.label}</div> |
| 79 | + </div> |
| 80 | + `).join(""); |
| 81 | + |
| 82 | + fetch("https://api.github.com/repos/MFlowCode/MFC/releases/latest") |
| 83 | + .then(r => r.json()) |
| 84 | + .then(r => { if (r.tag_name) document.getElementById("release-ver").innerText = r.tag_name; }) |
| 85 | + .catch(() => {}); |
| 86 | + |
| 87 | + fetch("https://api.github.com/repos/MFlowCode/MFC/contributors") |
| 88 | + .then(r => r.json()) |
| 89 | + .then(contributors => { |
| 90 | + const container = document.getElementById("ft-contrib"); |
| 91 | + for (const c of contributors) { |
| 92 | + const a = document.createElement("a"); |
| 93 | + a.className = "w-12 h-12 float-left"; |
| 94 | + a.href = c.html_url; |
| 95 | + |
| 96 | + const div = document.createElement("div"); |
| 97 | + div.className = "w-12 h-12 bg-cover"; |
| 98 | + div.style.backgroundImage = `url('${c.avatar_url}')`; |
| 99 | + |
| 100 | + a.appendChild(div); |
| 101 | + container.appendChild(a); |
| 102 | + } |
| 103 | + }) |
| 104 | + .catch(() => {}); |
247 | 105 | }); |
248 | 106 | </script> |
249 | 107 | </head> |
|
0 commit comments