pde-steady-solver
Description
Steady-State PDE Solving: Custom Neural Operator Design
Objective
Design and implement a custom neural operator for steady-state PDE solving on structured 2D meshes. Your code goes in the Model class in models/Custom.py. Three reference implementations (FNO, Transformer, Transolver) are provided as read-only context.
Model Interface
Your model receives args at initialization and must implement:
forward(self, x, fx, T=None, geo=None) -> output
x: spatial coordinates, shape(B, N, space_dim)wherespace_dim=2fx: input function values, shape(B, N, fun_dim)— can beNoneiffun_dim=0T: time embedding (unused for steady tasks, alwaysNone)geo: geometry info (unused, alwaysNone)- output: predicted solution, shape
(B, N, out_dim)
Key args attributes: n_hidden, n_layers, n_heads, space_dim, fun_dim, out_dim, act, mlp_ratio, dropout, geotype (always structured_2D), shapelist (grid dimensions [H, W]), unified_pos, ref, slice_num, modes.
Evaluation
Trained and evaluated on three structured 2D PDE benchmarks (relative L2 error, lower is better):
- Airfoil (NACA airflow, fun_dim=2, out_dim=1, 221x51 grid)
- Darcy (Darcy flow, fun_dim=1, out_dim=1, 85x85 grid after downsampling)
- Pipe (pipe flow, fun_dim=2, out_dim=1, 129x129 grid)
Training epochs vary per dataset: Airfoil (100), Darcy (300), Pipe (50), all with OneCycleLR scheduler.
Code
1import torch2import torch.nn as nn3import numpy as np4from timm.models.layers import trunc_normal_5from layers.Basic import MLP6from layers.Embedding import timestep_embedding, unified_pos_embedding789class Model(nn.Module):10def __init__(self, args):11super(Model, self).__init__()12self.__name__ = 'Custom'13self.args = args14## embedding15if args.unified_pos and args.geotype != 'unstructured':
Additional context files (read-only):
Neural-Solver-Library/models/Transolver.pyNeural-Solver-Library/models/FNO.pyNeural-Solver-Library/models/Transformer.pyNeural-Solver-Library/layers/Basic.pyNeural-Solver-Library/layers/Embedding.pyNeural-Solver-Library/layers/Physics_Attention.pyNeural-Solver-Library/layers/FNO_Layers.py
Results
| Model | Type | rel err Airfoil ↓ | rel err Darcy ↓ | rel err Pipe ↓ |
|---|---|---|---|---|
| fno | baseline | 0.006 | 0.010 | 0.007 |
| transformer | baseline | 0.015 | 0.004 | 0.008 |
| transolver | baseline | 0.005 | 0.006 | 0.004 |