CoolFace
Datasetpublic

AISDL-SNU/LithoBench-PDE

LithoBench-PDE A benchmark dataset for PDE-based computational lithography simulation, constructed by generating high-fidelity 3D reference simulations for photomasks from the LithoBench dataset. Each sample contains intermediate 2D and 3D field data from the lithography simulation pipeline, providing ground-truth input-output pairs for three PDE learning tasks corresponding to three governing PDEs of photolithography. PDE Learning Tasks For each photomask, the… See the full description on the dataset page: https://huggingface.co/datasets/AISDL-SNU/LithoBench-PDE.

sourceHugging Facecc-by-4.0updated 3mo agoView on Hugging Face
0likes511downloads
Dataset Card

LithoBench-PDE

A benchmark dataset for PDE-based computational lithography simulation, constructed by generating high-fidelity 3D reference simulations for photomasks from the LithoBench dataset. Each sample contains intermediate 2D and 3D field data from the lithography simulation pipeline, providing ground-truth input-output pairs for three PDE learning tasks corresponding to three governing PDEs of photolithography.

PDE Learning Tasks

For each photomask, the reference simulation pipeline generates three ground-truth input-output pairs:

TaskPDEMappingInputOutputShape
Mask illuminationMaxwell's equationM → EM (photomask)E (diffracted near field)[H, W][2, 2, H, W] (complex64)
Post-exposure bakeReaction-diffusion equationh → mh (photoacid concentration)m (deprotection image)[25, H, W][25, H, W]
DevelopmentEikonal equationR → TR (development rate)T (development time)[25, H, W][25, H, W]
  • M → E: Given a 2D photomask pattern, solve Maxwell's equations to predict the diffracted near field (DNF), represented as a 2×2 Jones matrix of the electric field (complex-valued). Reference solutions are computed by rigorous coupled wave analysis (RCWA).
  • h → m: Given a 3D photoacid concentration volume (25 z-slices), solve the reaction-diffusion equation governing the deprotection reaction during post-exposure bake (PEB) to produce the deprotection image. Reference solutions are computed by the finite difference method (FDM).
  • R → T: Given a 3D development rate field (25 z-slices), solve the eikonal equation to obtain the development time field, whose isosurface defines the 3D developed photoresist structure. Reference solutions are computed by the fast marching method (FMM).

All data are generated under a fixed nominal condition of an annular source, 0 nm focus, and 20 mJ/cm² dose, with a uniform grid spacing of 4 nm.

Photomask Categories

CategorySamplesSpatial SizeDescription
Metal_I1,600512×512Curvilinear metal photomasks (train)
Metal_T1,600512×512Rectilinear metal target layouts (train)
Contact_I163512×512Curvilinear contact photomasks (test, out-of-distribution)
Contact_T163512×512Rectilinear contact target layouts (test, out-of-distribution)

Total: 3,526 samples (~378 GB)

The photomask plane is represented on a 2048 nm × 2048 nm domain (512 × 512 grid at 4 nm spacing). 3D photoresist fields are represented on a 2048 nm × 2048 nm × 100 nm domain (512 × 512 × 25 grid). The DNF E is represented with four complex electric field components EUV (U, V ∈ {x, y}), where EUV denotes the U component of the electric field for incident light polarized in V direction.

System Requirements

Software dependencies

The loader and visualization code are pure Python and run on CPU.

  • Operating system. Developed and tested on Linux x86_64 (Ubuntu). The code is OS-independent and should also run on macOS and Windows (untested).
  • Python 3.9 or newer (tested on 3.11).
  • Python packages (see `requirements.txt`)

Hardware

No special hardware is needed. A CUDA-capable GPU is recommended for further computation on the data such as training models.

Installation

bash
# (optional) create a clean environment
conda create -n lithobench-pde python=3.11 -y
conda activate lithobench-pde

# install dependencies
pip install -r requirements.txt

Or install the packages directly:

bash
pip install "torch>=2.0" "numpy>=1.23" "huggingface_hub>=0.20" \
            "plotly>=5.0" "numpy-stl>=3.0" "scikit-image>=0.20" "matplotlib>=3.5"

Download

Option 1: Download zip archives (recommended for full categories)

Pre-packaged zip files are available for each category:

python
from huggingface_hub import hf_hub_download

# Download a single category as zip
path = hf_hub_download(
    "AISDL-SNU/LithoBench-PDE",
    "zip/Contact_I.zip",
    repo_type="dataset",
    local_dir="./data",
)
bash
# Or using the CLI
huggingface-cli download AISDL-SNU/LithoBench-PDE zip/Contact_I.zip --repo-type dataset --local-dir ./data

Option 2: Download individual .pt files

python
from huggingface_hub import hf_hub_download

path = hf_hub_download(
    "AISDL-SNU/LithoBench-PDE",
    "LithoBench_PDE/Contact_I/INV_X8__0_0.pt",
    repo_type="dataset",
)

Option 3: Download an entire category folder

python
from huggingface_hub import snapshot_download

snapshot_download(
    "AISDL-SNU/LithoBench-PDE",
    repo_type="dataset",
    allow_patterns="LithoBench_PDE/Contact_I/*",
    local_dir="./data",
)

Usage

Quick start (load a sample)

python
import torch
from huggingface_hub import hf_hub_download

path = hf_hub_download(
    "AISDL-SNU/LithoBench-PDE",
    "LithoBench_PDE/Contact_I/INV_X16__0_0.pt",
    repo_type="dataset",
)
sample = torch.load(path, map_location="cpu")
for k in ["M", "E", "h", "m", "R", "T"]:
    print(k, tuple(sample[k].shape), sample[k].dtype)

Expected output (a few seconds once the file has downloaded):

M (512, 512) torch.float32
E (2, 2, 512, 512) torch.complex64
h (25, 512, 512) torch.float32
m (25, 512, 512) torch.float32
R (25, 512, 512) torch.float32
T (25, 512, 512) torch.float32

Dataset class

The LithoBenchPDE class in LithoBench_PDE.py loads the data and can select the per-task input and target tensors.

python
from LithoBench_PDE import LithoBenchPDE
from torch.utils.data import DataLoader

# From the Hub (downloads .pt files to local cache) or a local directory
ds = LithoBenchPDE.from_hub("AISDL-SNU/LithoBench-PDE", categories=["Contact_I"])
ds = LithoBenchPDE("./LithoBench_PDE", categories=["Contact_I", "Metal_I"])
# sample keys: M, E, h, m, R, T, sample_id, category

# Filter to a single PDE task -> samples become {"input", "target", "sample_id", "category"}
ds = LithoBenchPDE.from_hub("AISDL-SNU/LithoBench-PDE", task="maxwell")  # or "reaction_diffusion", "eikonal"

for batch in DataLoader(ds, batch_size=4, shuffle=True):
    inputs, targets = batch["input"], batch["target"]

Visualization

The notebooks in `vis/` render the data and prediction examples from the bundled fig_data/. They run on CPU and need no GPU or model checkpoints. Open a notebook and run all cells, which takes about 30 to 60 seconds each on a normal desktop CPU. Figures render inline, and vis_data.ipynb also saves an interactive .html export. The helper functions in vis/utils_*.py (vis_mask, vis_field, and others) also work on your own tensors of the same shape.

NotebookDataContent
vis/vis_data.ipynbfig_data/f3_preddataset samples and prediction examples
vis/vis_PW.ipynbfig_data/f4_PWprocess window
vis/vis_SMO.ipynbfig_data/f5_SMOsource-mask optimization

File Format

Each .pt file is a Python dictionary saved with torch.save() containing:

python
{
    "M": torch.Tensor,  # [H, W] float32        - photomask pattern
    "E": torch.Tensor,  # [2, 2, H, W] complex64 - diffracted near field
    "h": torch.Tensor,  # [25, H, W] float32     - photoacid concentration
    "m": torch.Tensor,  # [25, H, W] float32     - deprotection image
    "R": torch.Tensor,  # [25, H, W] float32     - development rate
    "T": torch.Tensor,  # [25, H, W] float32     - development time
}

License

Photomask layouts are derived from the LithoBench dataset, which is also MIT licensed.

Citation

TBA