CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Main CFD Forum

Shallow Water Equations: Roe Approximate Solver First-Order with Wetting-Drying

Register Blogs Members List Search Today's Posts Mark Forums Read

Reply
 
LinkBack Thread Tools Display Modes
Old   July 8, 2015, 13:13
Default Shallow Water Equations: Roe Approximate Solver First-Order with Wetting-Drying
  #1
New Member
 
Michael Halls-Moore
Join Date: Jul 2015
Posts: 2
Rep Power: 0
mhallsmoore is on a distinguished road
Hi,

Firstly, I apologise for the length of this post, but it requires quite a bit of detail and explanation! Thanks in advance for any help you might provide...

I'm currently writing a structured 2D solver using a Godunov-type Finite Volume Method (first-order, i.e. no slope-reconstruction) for the shallow water equations with variable bed slope and friction, in C++.

The code uses the Roe approximate Riemann solver with incorporated bed slope flux, with friction solved in a point-wise manner.

To date the solver works with all test cases I have tried where the water height h (h being the height above the bed) exceeds the height of the bed.

I'm having some trouble with creating effective conditions for what is known as the "wetting-drying condition", which is essentially a moving boundary problem where the equations are solved at adjacent cells, one being "wet" and the other "dry". Dry is defined here as the water depth being less than a pre-specified tolerance value.

I've spent a good bit of time looking at some papers ([1], [2]) but I'm finding it tricky to tease out the algorithm as to how a wetting-drying front is actually implemented. There is mention of a situation where the total surface height H = h + z, where z is the bed height, must have H_L >= H_R, otherwise a modification to the bed slope, z, is needed.

My current algorithm for the Roe fluxes looks a bit like this:

// Only showing x-direction, y-direction is similar
Loop over i
----Loop over j
--------set "left cell" and "right cell"
--------if both cells are "dry" (i.e. h_L < tolerance && h_R < tolerance)
------------set all fluxes to zero
--------else // at least one is dry
------------if it's left one and H_L < H_R
----------------// use correction as in [1]
----------------z_R = z_L - (h_R - h_L);
----------------// set u, v velocities to zero
------------if it's right one and H_R < H_L
----------------// use correction as in [1]
----------------z_L = z_R - (h_L - h_R);
----------------// set u, v velocities to zero
--------// Do flux calculations (i.e. work out alpha, eigenvalues and eigenvectors)
--------// for fluxes and bed slop terms

Firstly, does anybody have any experience implementing an algorithm like this?

I've been trying for the last couple of days with various modifications to the above algorithm and nothing seems to be working. I've -nearly- managed to replicate the periodic tidal case in [1], but this is only with setting a rather high tolerance (>0.05m).

So my questions are:

1) Is my algorithm even correct? Do I need to set some flux terms to zero? Do I need to set more velocity terms to zero?

2) What is a good value to use as a tolerance? Most papers seem to ignore this, but it's an essential model parameter, so I'm left trying arbitrary/reasonable values!

Please let me know if you need more detail in answering the question. I can provide the source code, if necessary.

Thanks in advance for any help provided!

Cheers,

Mike.

---------

[1] Brufau et al. - A numerical model for the flooding and drying of irregular domains - International Journal For Numerical Methods in Fluids, May 2002.

[2] Brufau et al. - Zero mass error using unsteady wetting-drying conditions in shallow flows over dry irregular topography, International Journal For Numerical Methods in Fluids, August 2004.
mhallsmoore is offline   Reply With Quote

Old   July 9, 2015, 03:40
Default Negative depth handling
  #2
New Member
 
Michael Halls-Moore
Join Date: Jul 2015
Posts: 2
Rep Power: 0
mhallsmoore is on a distinguished road
I forgot to mention that I am handling negative depths, using a mass-displacement method, i.e. if a negative depth is encountered (such as near a wet/dry front), the mass is set to zero in this cell (the velocities are also set to zero) and the same mass is subtracted from the neighbouring cell with the highest mass.

However, for the particular test case I described in the first post, negative mass is not reached. The time-step simply becomes too small and the solution terminates. I believe this could be due to overly large wave velocities.

The investigation continues!
mhallsmoore is offline   Reply With Quote

Reply

Tags
godunov method, roe solver, shallow water equations

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Shallow water + VOF MIT OpenFOAM Running, Solving & CFD 4 May 26, 2011 20:27
Shallow water 2D on irregular bed RicardoGoncalves Main CFD Forum 0 July 27, 2010 04:38
Outflow b.c. for shallow water riemann solver phdoofus Main CFD Forum 4 April 15, 2010 15:56
Roe approximate riemann solver Kaira Main CFD Forum 15 August 3, 2006 00:31
roe solver with entropy fix mehdi Main CFD Forum 1 February 26, 2006 06:36


All times are GMT -4. The time now is 00:50.