Skip to content

New tutorial: Partitioned Burgers eq. 1D #670

Open
vidulejs wants to merge 23 commits intodevelopfrom
partitioned-burgers-1d
Open

New tutorial: Partitioned Burgers eq. 1D #670
vidulejs wants to merge 23 commits intodevelopfrom
partitioned-burgers-1d

Conversation

@vidulejs
Copy link
Collaborator

@vidulejs vidulejs commented Sep 29, 2025

New tutorial case: Partitioned Burgers' Equation in 1D solved with SciPy Finite Volume implementation and a Neural Network surrogate model !

  • Fix README.md to comply with the standard
  • How to run surrogate,
  • Improve README.md further
  • Clean up the scripts in base directory
  • What to do with the initial condition generation? Steps are too complex currently
  • How to reproduce the offline model, i.e., training scripts
  • Either remove old .solver-nutils-dgalerkin or fix
  • Read through again https://precice.org/community-contribute-to-precice.html
  • Allow skipping venv setup

Checklist:

  • I added a summary of any user-facing changes (compared to the last release) in the changelog-entries/<PRnumber>.md.
  • I will remember to squash-and-merge, providing a useful summary of the changes of this PR.

@vidulejs vidulejs requested a review from uekerman September 29, 2025 15:15
… in visualize_partitioned_domain.py. Wrap boundary conditions in new class BoundaryWrapper because they are dependent on the solver iterations. Implement implicit Euler (and Jacobian and residual for the root finding iteration. Initialize participants. Zero gradient condition on the outside boundaries.
@vidulejs vidulejs changed the title Partitioned Burgers eq. 1D New tutorial: Partitioned Burgers eq. 1D Oct 1, 2025
…-surrogate.sh, generate-training-data.sh. Fix floating point issue in t_index. Add --savefile argument to solver-scipy-fvolumes.py to save data for training.
…n scripts. Fix requirements.txt for scipy and surrogate solvers. Add example images for README
…ipt to check for initial conditions after installing environment.
@vidulejs vidulejs marked this pull request as ready for review October 15, 2025 13:04
Copy link
Member

@uekerman uekerman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the very nice addition already! I only had brief look in this first iteration and did not yet try to run things. Please see comments below.

Let's indeed remove the Nutils solver. Could always be added later again.

Comment on lines +4 to +6
rm -rf precice-profiling
rm -f neumann-surrogate.log precice-Neumann-convergence.log precice-Neumann-iterations.log
rm -f surrogate.npz No newline at end of file
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compare how other tutorials do this.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Renamed clean.sh to clean-tutorial.sh. But should it be symlinked to clean-tutorial-base.sh? I need these additional commands.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use tooling in ../tools/cleaning-tools.sh and add a function there if necessary.

Copy link
Member

@uekerman uekerman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was able to run the cases and got meaningful results. We are probably close to merging this. Mainly cosmetics now.

I think a few scripts of utils could go into solver-scipy. Only keep those in utils that are used by neumann-surrogate as well.

@@ -0,0 +1 @@
New tutorial case: Partitioned Burgers' Equation in 1D solved with Finite Volumes and a Neural Network surrogate model !
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
New tutorial case: Partitioned Burgers' Equation in 1D solved with Finite Volumes and a Neural Network surrogate model !
- Added new case: 1D partitioned Burgers' equation with one finite volume and one NN surrogate participant.

Comment on lines +92 to +93

---
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
---

Not used in the docs, but should also not be necessary here.

Comment on lines +44 to +49
The conservative formulation of the Burgers' equation `solver-scipy` is implemented in a first-order finite volume code using Lax-Friedrichs fluxes and implicit Euler time stepping.

This tutorial includes two versions for the Neumann participant:

- A standard finite volume solver (`neumann-scipy`).
- A pre-trained neural network surrogate that approximates the solver (`neumann-surrogate`).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The conservative formulation of the Burgers' equation `solver-scipy` is implemented in a first-order finite volume code using Lax-Friedrichs fluxes and implicit Euler time stepping.
This tutorial includes two versions for the Neumann participant:
- A standard finite volume solver (`neumann-scipy`).
- A pre-trained neural network surrogate that approximates the solver (`neumann-surrogate`).
Currently, the SciPy solver can be used for both side, the NN surrogate solver only for the Neumann side.
- SciPy. Simple finite volume solver using Lax-Friedrichs fluxes and implicit Euler time stepping.
- Surrogate. Pre-trained neural network surrogate.

To be consistent with other tutorials.
TODO: It would be nice to write a few more words on the surrogate here.

Comment on lines +38 to +40
<p align="center">
<img src="images/tutorials-partitioned-burgers-1d-precice-config.png" alt="preCICE configuration visualization" width="600"/>
</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need html for the images in the README, we normally don't use it here.

Suggested change
<p align="center">
<img src="images/tutorials-partitioned-burgers-1d-precice-config.png" alt="preCICE configuration visualization" width="600"/>
</p>
![preCICE configuration visualization](images/tutorials-partitioned-burgers-1d-precice-config.png)

Similarly everywhere here.

<img src="images/tutorials-partitioned-burgers-1d-precice-config.png" alt="preCICE configuration visualization" width="600"/>
</p>

## Available Solvers
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Available Solvers
## Available solvers

<img src="images/tutorials-partitioned-burgers-1d-full-domain-timestep-slice.png" alt="Full Domain Timestep Slice" width="400"/>
</p>

- `gradient-timestep-slice.png`: Gradient $du/dx$ at a selected timestep
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- `gradient-timestep-slice.png`: Gradient $du/dx$ at a selected timestep
- `gradient-timestep-slice.png`: Gradient $du/dx$ at the selected timestep

## Visualization

After both participants (and/or monolithic simulation) have finished, you can run the visualization script.
`visualize_partitioned_domain.py` generates plots comparing the partitioned and monolithic solutions. You can specify which timestep to plot:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
`visualize_partitioned_domain.py` generates plots comparing the partitioned and monolithic solutions. You can specify which timestep to plot:
`visualize_partitioned_domain.py` generates plots comparing the partitioned and monolithic solutions. You can specify which timestep to plot. Call from the root of the tutorial:

`visualize_partitioned_domain.py` generates plots comparing the partitioned and monolithic solutions. You can specify which timestep to plot:

```bash
python3 visualize_partitioned_domain.py --neumann neumann-surrogate/surrogate.npz [timestep]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
python3 visualize_partitioned_domain.py --neumann neumann-surrogate/surrogate.npz [timestep]
python3 utils/visualize_partitioned_domain.py --neumann neumann-surrogate/surrogate.npz [timestep]

pyprecice==3.3.1
scipy==1.16.3
matplotlib==3.10.8
torch==2.9.1 No newline at end of file
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a variant to get PyTorch without all GPU builds? Just to make it smaller here.

## Visualization

After both participants (and/or monolithic simulation) have finished, you can run the visualization script.
`visualize_partitioned_domain.py` generates plots comparing the partitioned and monolithic solutions. You can specify which timestep to plot:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How can I compare partitioned and monolithic solutions? If I just run it after one setup, I only get that one setup.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants