Skip to content

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

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.

@@ -0,0 +1,142 @@
---
title: Partitioned 1D Burgers' Equation
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
title: Partitioned 1D Burgers' Equation
title: Partitioned Burgers' equation 1D

- **Dirichlet**: Solves the left half $[0,1]$ and receives Dirichlet boundary conditions at the interface.
- **Neumann**: Solves the right half $[1,2]$ and receives Neumann boundary conditions at the interface.

Both outer boundaries use zero-gradient conditions $\frac{\partial u}{\partial x} = 0$. The problem is solved for different initial conditions of superimposed sine waves, which can be generated using the provided script.
Copy link
Member

Choose a reason for hiding this comment

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

Which script, how/when do I need to run it?

Comment on lines +38 to +40
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.

This information goes into subsection "Available solvers"

</p>


## Running the tutorial
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
## Running the tutorial
## Running the simulation

Comment on lines +58 to +60
```bash
python3 generate_ic.py --epoch <seed>
```
Copy link
Member

Choose a reason for hiding this comment

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

Is this really a script that is general to all solvers? (otherwise, put in subfolders)
still, a tools subfolder could be good`

Comment on lines +272 to +274
# sol = solve_ivp(wrapper.rhs, (t, t_end), u, method='BDF', t_eval=[t_end], jac=wrapper.jac) # BDF higher order implicit timestepping
# u = sol.y[:, -1]
# u = u + dt * burgers_rhs(t, u, dx, C_viscosity, wrapper.bc_left(u), wrapper.bc_right(u)) # Explicit Euler
Copy link
Member

Choose a reason for hiding this comment

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

Do we need this commented-out code? If yes, could we make this configurable (i.e. testable)?

Comment on lines +51 to +53
<!-- <acceleration:constant>
<relaxation value="0.01" />
</acceleration:constant> -->
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
<!-- <acceleration:constant>
<relaxation value="0.01" />
</acceleration:constant> -->

. ../../tools/log.sh
exec > >(tee --append "$LOGFILE") 2>&1

echo "[preCICE] Waiting for Dirichlet participant..."
Copy link
Member

Choose a reason for hiding this comment

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

No need to log this. preCICE should do this, no?

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.

set -e -u

rm -f solver-scipy/full_domain.npz
rm -f images/full_domain_evolution.png images/full_domain_timestep_slice.png images/gradient_timestep_slice.png images/initial_condition.png
Copy link
Member

Choose a reason for hiding this comment

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

move those results to output/?

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants