File size: 7,106 Bytes
07a5280 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | ---
license: mit
language:
- en
tags:
- OneScience
- fluid-mechanics
- flow-field-prediction
- neural-operator
- Navier-Stokes
frameworks: PyTorch
---
<p align="center">
<strong>
<span style="font-size: 30px;">FNO</span>
</strong>
</p>
# Model Introduction
FNO (Fourier Neural Operator) is a class of neural operators for parameterized partial differential equations. It directly learns mappings from input functions to solution functions by parameterizing integral kernels in Fourier space. Using the OneScience skill workflow, this project independently reproduces the FNO-2D experiment for predicting the vorticity of two-dimensional incompressible Navier–Stokes flows.
Paper: [Fourier Neural Operator for Parametric Partial Differential Equations](https://arxiv.org/abs/2010.08895)
# Model Description
This implementation takes 10 consecutive 64 × 64 vorticity fields as input and autoregressively predicts the next 10 frames. It first maps the historical fields and two-dimensional periodic coordinates into a latent space of width 32, then applies four Fourier layers. Each layer retains 12 Fourier modes along each spatial dimension, adds a 1 × 1 local convolution to the spectral convolution, and applies BatchNorm and ReLU. A 32 → 128 → 1 projection head generates the vorticity field for the next time step. Each prediction is appended to the input window for closed-loop rollout inference.
## Use Cases
| Use case | Description |
| --- | --- |
| Parameterized PDE operator learning | Learns mappings from PDE parameters, coefficient fields, or initial conditions to solution fields, especially when a PDE must be solved repeatedly for many parameter settings. |
| Burgers' equation prediction | Predicts future states from initial conditions for the one-dimensional Burgers' equation, demonstrating operator learning for nonlinear evolution equations. |
| Darcy flow prediction | Predicts steady-state solutions from two-dimensional diffusion or permeability coefficient fields for applications such as porous-media flow and groundwater seepage. |
| Navier–Stokes flow prediction | Autoregressively predicts the evolution of two-dimensional incompressible flow from historical vorticity fields. |
# Usage
## 1. Using OneCode
Try intelligent, one-click AI4S programming in the OneCode online environment:
[Try intelligent, one-click AI4S programming](https://web-2069360198568017922-iaaj.ksai.scnet.cn:58043/home)
## 2. Manual Installation and Usage
**Hardware requirements**
- A GPU or DCU is recommended.
- A CPU can be used for import checks and small-scale connectivity tests, but full training and inference will be slow.
- DCU users must install DTK in advance. DTK 25.04.2 or later, or the OneScience-recommended version for the current cluster, is recommended.
### Download the Model Package
```bash
modelscope download --model OneScience/FNO --local_dir ./FNO
cd FNO
```
### Set Up the Runtime Environment
**DCU environment**
```bash
# Activate DTK and Conda first
conda create -n onescience311 python=3.11 -y
conda activate onescience311
# Installation with uv is also supported
pip install onescience[cfd-dcu] -i http://mirrors.onescience.ai:3141/pypi/simple/ --trusted-host mirrors.onescience.ai
```
**GPU environment**
```bash
# Activate Conda first
conda create -n onescience311 python=3.11 -y libstdcxx-ng=12 libgcc-ng=12 gcc_linux-64=12 gxx_linux-64=12
conda activate onescience311
# Installation with uv is also supported
pip install onescience[cfd-gpu] -i http://mirrors.onescience.ai:3141/pypi/simple/ --trusted-host mirrors.onescience.ai
```
### Training Data
The experiment uses `NavierStokes_V1e-5_N1200_T20.mat`, whose shape is `[N,H,W,T]=[1200,64,64,20]`. For each trajectory, the first 10 frames are inputs and the final 10 frames are prediction targets. The first 1,000 trajectories are used for training and the remaining 200 for testing. There is no separate validation set, and no normalization is applied.
Download the data with:
```bash
modelscope download --dataset OneScience/fno --local_dir ./data
```
After downloading, set `data.root` in `config/config.yaml` to the data directory and confirm that `data.file` matches the MAT filename above. The training script strictly validates the field name, shape, dtype, and finite values.
### Training
The default configuration corresponds to the FNO-2D experiment with `ν=1e-5` and `T=20` in the paper. It trains for 500 epochs with a batch size of 20, uses Adam with an initial learning rate of `1e-3`, and halves the learning rate every 100 epochs.
```bash
python scripts/train.py --config config/config.yaml --device auto
```
The weights with the best full-trajectory relative L2 error on the training set are saved to `weight/best_model.pth`. The latest complete training state from every epoch is saved to `weight/last_model.pth`, and the training history is written to `results/train_history.json`.
### Trained Weights
`weight/best_model.pth` contains the best weights from the full training run and can be used directly for inference.
### Inference
Before running inference, make sure the configured data path is valid and `weight/best_model.pth` exists. The standard inference run uses the 200 configured test trajectories and a 10-step closed-loop rollout, printing batch progress and the final relative L2 error in real time:
```bash
python scripts/inference.py --config config/config.yaml
```
Inference outputs are saved as:
- `results/predictions.npz`: predictions, ground truth, sample indices, and prediction times;
- `results/metrics.json`: overall and per-step metrics, including comparisons with the reference values from the paper;
- `results/per_sample_metrics.csv`: per-sample relative L2 errors.
### Evaluation and Visualization
After training and inference, run:
```bash
python scripts/result.py --config config/config.yaml --sample-index 0
```
The script recomputes metrics from `predictions.npz`, cross-checks the JSON and CSV outputs, best epoch, and prediction shape, and then generates:
- `results/training_curves.png`: training/test errors and training-objective curves;
- `results/sample_000_rollout.png`: ground truth, predictions, and absolute errors at `t=11, 16, 20` for a representative sample;
- `results/run_metadata.json`: configuration, runtime environment, assumptions, file hashes, and quality checks;
- `results/summary.md`: a summary of experimental results.
# Official OneScience Resources
| Platform | OneScience Main Repository | Skills Repository |
| --- | --- | --- |
| Gitee | https://gitee.com/onescience-ai/onescience | https://gitee.com/onescience-ai/oneskills |
| GitHub | https://github.com/onescience-ai/OneScience | https://github.com/onescience-ai/oneskills |
# Citation and License
- Paper: [Fourier Neural Operator for Parametric Partial Differential Equations](https://arxiv.org/abs/2010.08895)
- The code in this model package is licensed under the MIT License. Use of the model weights is also subject to the licenses and applicable terms of the training data and third-party dependencies.
|