Skip to content

Commit ca063aa

Browse files
committed
Initial setup for GitHub Pages deployment
1 parent d6c960a commit ca063aa

47 files changed

Lines changed: 9839 additions & 2 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/deploy.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Deploy to GitHub Pages
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: read
10+
pages: write
11+
id-token: write
12+
13+
concurrency:
14+
group: "pages"
15+
cancel-in-progress: false
16+
17+
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
24+
- name: Setup Node
25+
uses: actions/setup-node@v4
26+
with:
27+
node-version: "20"
28+
cache: 'npm'
29+
30+
- name: Install dependencies
31+
run: npm ci
32+
33+
- name: Build
34+
run: npm run build
35+
36+
- name: Setup Pages
37+
uses: actions/configure-pages@v4
38+
39+
- name: Upload artifact
40+
uses: actions/upload-pages-artifact@v3
41+
with:
42+
path: ./out
43+
44+
deploy:
45+
environment:
46+
name: github-pages
47+
url: ${{ steps.deployment.outputs.page_url }}
48+
runs-on: ubuntu-latest
49+
needs: build
50+
steps:
51+
- name: Deploy to GitHub Pages
52+
id: deployment
53+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# dependencies
2+
/node_modules
3+
/.pnp
4+
.pnp.js
5+
6+
# testing
7+
/coverage
8+
9+
# next.js
10+
/.next/
11+
/out/
12+
13+
# production
14+
/build
15+
16+
# misc
17+
.DS_Store
18+
*.pem
19+
20+
# debug
21+
npm-debug.log*
22+
yarn-debug.log*
23+
yarn-error.log*
24+
25+
# local env files
26+
.env*.local
27+
28+
# vercel
29+
.vercel
30+
31+
# typescript
32+
*.tsbuildinfo
33+
next-env.d.ts

LICENSE

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2025 ExaNLA Network
3+
Copyright (c) 2024 ExaNLA-Network
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1818
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1919
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2020
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21-
SOFTWARE.
21+
SOFTWARE.

README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
2+
3+
## Getting Started
4+
5+
First, run the development server:
6+
7+
```bash
8+
npm run dev
9+
# or
10+
yarn dev
11+
# or
12+
pnpm dev
13+
# or
14+
bun dev
15+
```
16+
17+
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18+
19+
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20+
21+
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
22+
23+
## Learn More
24+
25+
To learn more about Next.js, take a look at the following resources:
26+
27+
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28+
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29+
30+
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
31+
32+
## Deploy on Vercel
33+
34+
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35+
36+
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// Define Application Categories
2+
export const applicationCategories = {
3+
COMPUTATIONAL_CHEMISTRY: "Computational Chemistry",
4+
MATERIALS_SCIENCE: "Materials Science",
5+
PHYSICS_SIMULATION: "Physics Simulation",
6+
HIGH_PERFORMANCE_COMPUTING: "High-Performance Computing",
7+
} as const;
8+
9+
export type ApplicationCategoryValue = typeof applicationCategories[keyof typeof applicationCategories];
10+
11+
export interface Application {
12+
id: string;
13+
title: string;
14+
description: string;
15+
content: string;
16+
logo: string;
17+
website: string;
18+
categories: ApplicationCategoryValue[];
19+
}
20+
21+
// Applications data
22+
export const applications: Application[] = [
23+
{
24+
id: 'quantum-espresso',
25+
title: 'Quantum ESPRESSO',
26+
description: 'An integrated suite for first-principles electronic structure calculations and materials modeling',
27+
content: `Quantum ESPRESSO is an integrated suite of open-source computer codes for electronic-structure calculations and materials modeling at the nanoscale. It is based on density-functional theory, plane waves, and pseudopotentials.
28+
29+
Key numerical linear algebra components:
30+
- Dense eigenvalue problems for electronic states calculation
31+
- Large-scale parallel diagonalization using ELPA or other solvers
32+
- Iterative eigensolvers for ground state calculations
33+
- Efficient handling of plane-wave basis sets
34+
- Performance optimization through advanced linear algebra libraries
35+
36+
The integration with modern linear algebra libraries like ELPA and MAGMA has significantly improved its performance on modern HPC architectures, enabling larger and more complex simulations.`,
37+
logo: '/applications/logo/logo-quantumespresso_10.jpg',
38+
website: 'https://www.quantum-espresso.org/',
39+
categories: [applicationCategories.COMPUTATIONAL_CHEMISTRY, applicationCategories.MATERIALS_SCIENCE, applicationCategories.PHYSICS_SIMULATION, applicationCategories.HIGH_PERFORMANCE_COMPUTING],
40+
},
41+
{
42+
id: 'yambo',
43+
title: 'YAMBO',
44+
description: 'A state-of-the-art code for Many-Body calculations in solid state and molecular physics',
45+
content: `YAMBO is a scientific code implementing Many-Body Perturbation Theory (MBPT) methods for calculating electronic and optical properties of materials from first principles. It takes full advantage of modern HPC architectures through optimized linear algebra operations.
46+
47+
Key numerical linear algebra aspects:
48+
- Complex linear algebra operations for Green\'s function methods
49+
- Parallel eigenvalue solvers for quasiparticle calculations
50+
- Efficient handling of large matrices in GW calculations
51+
- Linear response calculations using advanced linear algebra
52+
- Integration with high-performance libraries for optimal performance
53+
54+
The code heavily relies on distributed linear algebra operations and benefits greatly from modern numerical libraries that can efficiently handle both dense and sparse computations on large matrices.`,
55+
logo: '/applications/yambo-logo.png',
56+
website: 'https://www.yambo-code.eu/',
57+
categories: [applicationCategories.MATERIALS_SCIENCE, applicationCategories.PHYSICS_SIMULATION, applicationCategories.HIGH_PERFORMANCE_COMPUTING],
58+
},
59+
{
60+
id: 'cp2k',
61+
title: 'CP2K',
62+
description: 'A quantum chemistry and solid state physics software package for atomistic simulations',
63+
content: `CP2K is an open-source electronic structure and molecular dynamics software package that performs atomistic simulations of solid state, liquid, molecular, and biological systems. It provides a rich set of features based on density functional theory (DFT) using both the Gaussian and plane wave approaches.
64+
65+
Key numerical linear algebra components:
66+
- Distributed dense matrix operations for electronic structure
67+
- Sparse matrix algebra for linear scaling DFT methods
68+
- Efficient eigensolvers using ELPA and other libraries
69+
- Matrix operations in mixed Gaussian/Plane-Wave approach
70+
- Advanced linear scaling techniques for large systems
71+
72+
The performance of CP2K heavily relies on efficient linear algebra operations, particularly in its DBCSR (Distributed Block Compressed Sparse Row) library for sparse matrix operations and its integration with state-of-the-art dense linear algebra libraries like ELPA for diagonalization tasks.`,
73+
logo: '/applications/cp2k-logo.png',
74+
website: 'https://www.cp2k.org/',
75+
categories: [applicationCategories.COMPUTATIONAL_CHEMISTRY, applicationCategories.MATERIALS_SCIENCE, applicationCategories.PHYSICS_SIMULATION, applicationCategories.HIGH_PERFORMANCE_COMPUTING],
76+
}
77+
];

app/applications/page.tsx

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
import Image from 'next/image';
2+
import { applicationCategories, applications } from './applications-data';
3+
4+
export type ApplicationCategoryValue = typeof applicationCategories[keyof typeof applicationCategories];
5+
6+
// Helper function to get category styles (similar to other pages)
7+
function getCategoryStyle(category: ApplicationCategoryValue) {
8+
switch (category) {
9+
case applicationCategories.COMPUTATIONAL_CHEMISTRY:
10+
return 'bg-sky-100 text-sky-800';
11+
case applicationCategories.MATERIALS_SCIENCE:
12+
return 'bg-emerald-100 text-emerald-800';
13+
case applicationCategories.PHYSICS_SIMULATION:
14+
return 'bg-violet-100 text-violet-800';
15+
case applicationCategories.HIGH_PERFORMANCE_COMPUTING:
16+
return 'bg-amber-100 text-amber-800';
17+
default:
18+
return 'bg-gray-100 text-gray-800';
19+
}
20+
}
21+
22+
export default function ApplicationsPage() {
23+
// Calculate category distribution
24+
const categoryCounts = applications.reduce((acc, app) => {
25+
app.categories.forEach(category => {
26+
acc[category] = (acc[category] || 0) + 1;
27+
});
28+
return acc;
29+
}, {} as Record<ApplicationCategoryValue, number>);
30+
31+
const allCategories = Object.values(applicationCategories);
32+
33+
return (
34+
<div className="container mx-auto px-4 py-8">
35+
<h1 className="text-3xl font-bold mb-8">Applications</h1>
36+
37+
<div className="grid grid-cols-1 gap-8">
38+
{applications.map((application) => (
39+
<div key={application.id} className="bg-white rounded-lg shadow-md overflow-hidden">
40+
<div className="p-6">
41+
<div className="flex gap-8">
42+
{/* Left side: Logo and Website */}
43+
<div className="flex-shrink-0 w-48 flex flex-col items-center">
44+
<div className="w-32 h-32 relative mb-4">
45+
<Image
46+
src={application.logo}
47+
alt={`${application.title} logo`}
48+
fill
49+
className="object-contain"
50+
/>
51+
</div>
52+
<a
53+
href={application.website}
54+
target="_blank"
55+
rel="noopener noreferrer"
56+
className="text-blue-600 hover:text-blue-800 text-sm text-center"
57+
>
58+
Visit Website →
59+
</a>
60+
</div>
61+
62+
{/* Right side: Content */}
63+
<div className="flex-grow">
64+
<h2 className="text-2xl font-semibold mb-4">{application.title}</h2>
65+
<p className="text-gray-600 mb-4">{application.description}</p>
66+
<div className="flex flex-wrap gap-2 mb-4">
67+
{application.categories.map((category) => (
68+
<span
69+
key={category}
70+
className={`px-3 py-1 rounded-full text-sm ${getCategoryStyle(category)}`}
71+
>
72+
{category}
73+
</span>
74+
))}
75+
</div>
76+
<div className="prose max-w-none">
77+
{application.content.split('\n\n').map((paragraph, index) => (
78+
<p key={index} className="text-gray-700 mb-4">
79+
{paragraph.trim()}
80+
</p>
81+
))}
82+
</div>
83+
</div>
84+
</div>
85+
</div>
86+
</div>
87+
))}
88+
</div>
89+
90+
{/* Application Category Distribution Section */}
91+
<div className="mt-16 pt-10 border-t border-gray-200">
92+
<div className="text-center">
93+
<h2 className="text-2xl font-bold text-gray-900 sm:text-3xl">Application Category Distribution</h2>
94+
<p className="mt-2 max-w-2xl mx-auto text-lg text-gray-500">
95+
Overview of application categorizations.
96+
</p>
97+
</div>
98+
<div className="mt-8 grid grid-cols-1 gap-y-6 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-x-6">
99+
{allCategories.map((category) => (
100+
<div key={category} className={`p-4 rounded-lg shadow-md ${getCategoryStyle(category).replace('text-', 'bg-').replace('-800', '-100').replace('-100', '-50')} border border-gray-200`}>
101+
<h3 className={`text-lg font-medium ${getCategoryStyle(category).split(' ')[1]}`}>{category}</h3>
102+
<p className={`mt-1 text-3xl font-semibold ${getCategoryStyle(category).split(' ')[1]}`}>
103+
{categoryCounts[category] || 0}
104+
</p>
105+
<p className={`text-sm ${getCategoryStyle(category).split(' ')[1]} opacity-75`}>
106+
{categoryCounts[category] === 1 ? 'Application' : 'Applications'}
107+
</p>
108+
</div>
109+
))}
110+
</div>
111+
</div>
112+
</div>
113+
);
114+
}

0 commit comments

Comments
 (0)