Skip to content

Conversation

@franiqui
Copy link
Collaborator

@franiqui franiqui commented Aug 5, 2025

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.

@franiqui franiqui requested a review from MakisH August 5, 2025 16:08
@franiqui franiqui self-assigned this Aug 5, 2025
Copy link
Member

@MakisH MakisH left a comment

Choose a reason for hiding this comment

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

Thank you for the clean PR! See some first comments on the structure.

I have not yet looked into the codes or the parameters, I would do that once the locations of the files have converged, to not lose track of the suggestions and changes.

The 3D and 3D-3D cases run, anything with the 1D code does not at the moment, but this is probably related to my system (see also #648 (comment)).

Please add some content to the PR description as well.

Copy link
Member

Choose a reason for hiding this comment

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

The results/ folder is very nice for your thesis, but not something for the tutorials. Eventually, this directory (with a copy of the rest) would be something for Zenodo or a separate repository on the LRZ GitLab.

We could also then take these application case guidelines into account: https://precice.org/community-guidelines-application-cases.html

Copy link
Member

Choose a reason for hiding this comment

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

Visualization scripts (for tutorials) should be in the root directory of the tutorial. See the structure of a tutorial in https://precice.org/community-contribute-to-precice.html#structure-of-a-tutorial

- **Pressure** from upstream to downstream

This allows realistic simulation of pressure wave propagation.

Copy link
Member

Choose a reason for hiding this comment

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

Something nice to have here would be the config visualization (see other tutorials for examples):

https://precice.org/tooling-config-visualization.html


```bash
cd case-3d/fluid3d-openfoam-uncoupled && ./run.sh
```
Copy link
Member

Choose a reason for hiding this comment

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

A visualization section is missing.

---

## Setup

Copy link
Member

Choose a reason for hiding this comment

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

Don't forget to cite the original work (paper and dataset) here.
In the PR description, I would expect an overview of the changes to that.


## Setup

This tutorial demonstrates how to model the **water hammer phenomenon** — a transient pressure surge caused by a rapid change in flow — using **partitioned coupling** with [preCICE](https://precice.org).
Copy link
Member

Choose a reason for hiding this comment

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

Instead of the link to preCICE (which should be clear from the context), I would expect here a problem definition and a reference to the original benchmark.

<precice-configuration experimental="true">
<log>
<sink
filter="%Severity% >= trace and %Rank% = 0"
Copy link
Member

Choose a reason for hiding this comment

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

In the final state, the logging level should be the default:

Suggested change
filter="%Severity% >= trace and %Rank% = 0"
filter="%Severity% > debug and %Rank% = 0"

(same in all files)

In one terminal, execute

```bash
cd case-1d/fluid1d-python-uncoupled && ./run.sh
Copy link
Member

Choose a reason for hiding this comment

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

Even in the monolithic 1D case, I am currently getting an issue with Nutils:

Image

This is something I am facing in another tutorial with Nutils 9 as well (but not all), so I don't think that this is something wrong with your code.

Copy link
Member

@MakisH MakisH Aug 12, 2025

Choose a reason for hiding this comment

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

Running with scipy works but throws a (maybe useful) warning:

NutilsDeprecationWarning: providing evaluation arguments as keyword arguments is deprecated, please use the "arguments" parameter instead
  In /home/gc/repos/precice/tutorials/water-hammer/case-1d/fluid1d-python-uncoupled/Fluid1D.py:107
DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
  In /home/gc/repos/precice/tutorials/water-hammer/case-1d/fluid1d-python-uncoupled/Fluid1D.py:111

I modified run.sh to NUTILS_MATRIX=scipy python3 Fluid1D.py and I added scipy to requirements.txt to get this.

Copy link
Member

Choose a reason for hiding this comment

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

This file is failing the markdown-lint check. For now, just rename it to README.txt (but see the discussion about the location of the results directory).

franiqui and others added 24 commits October 6, 2025 12:04
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
REmove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Remove decorative headers
Copy link
Member

@MakisH MakisH left a comment

Choose a reason for hiding this comment

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

Some first comments. I still need to run the case and look into the Nutils scripts.


ddtSchemes
{
//default Euler;
Copy link
Member

Choose a reason for hiding this comment

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

There are a couple of commented-out options in fvSchemes and fvSolution files. Is there a reason to keep them around?

@@ -0,0 +1,12 @@
#!/bin/bash

Copy link
Member

Choose a reason for hiding this comment

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

As a good practice, exit when there are errors or undefined variables:

Suggested change
set -e -u

@@ -0,0 +1,166 @@
---
title: Partitioned Water Hammer
keywords: OpenFOAM, Nutils, preCICE, multiscale, fluid, transient
Copy link
Member

Choose a reason for hiding this comment

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

Since "multiscale" can also refer to micro-macro coupling:

Suggested change
keywords: OpenFOAM, Nutils, preCICE, multiscale, fluid, transient
keywords: OpenFOAM, Nutils, preCICE, geometric-multiscale, fluid, transient

In this tutorial, the computational domain is split into two coupled regions: a 1D pipe section and a 3D pipe section.
The coupling is performed using **preCICE**.

Case setup inspired by [1].
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
Case setup inspired by [1].
The case setup is inspired by [1].


Case setup inspired by [1].
This tutorial extends the study conducted in [2], which implemented the water hammer benchmark using a 1D-3D coupling with preCICE.
In that study, the cross-section of the pipe was squared. It has been changed to a circular cross-section in the present 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
In that study, the cross-section of the pipe was squared. It has been changed to a circular cross-section in the present tutorial.
In that study, the cross-section of the pipe was square. In this tutorial, this has been changed to a circular cross-section.

Case setup inspired by [1].
This tutorial extends the study conducted in [2], which implemented the water hammer benchmark using a 1D-3D coupling with preCICE.
In that study, the cross-section of the pipe was squared. It has been changed to a circular cross-section in the present tutorial.
`1D` denotes the reduced-order domain (e.g., a Nutils solver) and `3D` denotes the full 3D CFD domain (e.g., OpenFOAM).
Copy link
Member

Choose a reason for hiding this comment

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

I would avoid starting a sentence with a code snippet or number:

Suggested change
`1D` denotes the reduced-order domain (e.g., a Nutils solver) and `3D` denotes the full 3D CFD domain (e.g., OpenFOAM).
In the following, `1D` denotes the reduced-order domain (e.g., a Nutils solver) and `3D` denotes the full 3D CFD domain (e.g., OpenFOAM).

In that study, the cross-section of the pipe was squared. It has been changed to a circular cross-section in the present tutorial.
`1D` denotes the reduced-order domain (e.g., a Nutils solver) and `3D` denotes the full 3D CFD domain (e.g., OpenFOAM).

The problem consists of a straight pipe of length `L = 1000 m` and diameter `D = 2 m`.
Copy link
Member

Choose a reason for hiding this comment

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

You can also use math mode, if you want: https://precice.org/docs-meta-cheatsheet.html#latex-math-syntax


![preCICE configuration visualization 1D-3D](images/tutorials-waterhammer-1d3d-precice-config.png)

preCICE configuration for the 3D-1D simulation (image generated using the [precice-config-visualizer](https://precice.org/tooling-config-visualization.html))
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 duplicate:

Suggested change
preCICE configuration for the 3D-1D simulation (image generated using the [precice-config-visualizer](https://precice.org/tooling-config-visualization.html))
preCICE configuration for the 3D-1D simulation:

## Available solvers

* OpenFOAM (sonicLiquidFoam). A compressible OpenFOAM solver. For more information, have a look at the [OpenFOAM adapter documentation](https://precice.org/adapter-openfoam-overview.html)
* Nutils v9. A Python-based finite element framework. For more information, see the [Nutils adapter documentation](https://precice.org/adapter-nutils.html)
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
* Nutils v9. A Python-based finite element framework. For more information, see the [Nutils adapter documentation](https://precice.org/adapter-nutils.html)
* Nutils. A Python-based finite element framework. For more information, see the [Nutils adapter documentation](https://precice.org/adapter-nutils.html). This Nutils solver requires Nutils v9.

(for consistency with other tutorials)

./setcase.sh 3d1d
```

Open **two terminals** and start the corresponding participants for your chosen setup.
Copy link
Member

Choose a reason for hiding this comment

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

The default symlink is to 3d1d, but that scenario only comes next. Let's change that to 1d3d.

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

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

2 participants