Multicomponent Model Failing

Hi all,

Bear with me I’m finding it hard to describe this problem… Basically I have a multicomponent model set up, based on the rayleighTaylor2D code, the only modification I have made is that ive reduced the contact area of the two fluids with a bounce back wall on the left and right, that cuts through the domain. The idea is that the lower domain is empty, in the real world sense, so that means its full of air, and I want the fluid to flow into this area.

My first instinct was to use periodic boundary conditions for the “air” fluid, so that air leaving the domain re-enters the system to replace the fluid moving into the void. This doesn’t seem to work however, it appears as though the air just starts compressing and after 20ish iterations it has compressed too much and the model falls apart.

Any ideas?

Ok, well after some further fiddling I have found that the air doesnt compress as i thought, and it does indeed re-enter through the top boundary given some more “gentle” conditions. However the model still falls apart, reporting NAN for energy and density after a certain number of iterations. It looks like it may be a turbulence issue, but I really can’t say. The model just simply works as expected up until a certain number of iterations, then all of a sudden it stops, its quite strange…

Ok, I have managed to get my code working. The method fails in the presence of turbulence, or significant compressibility (ie more significant then weak…).

This thread feels a bit useless now, but hopefully it may help someone who is experiencing these issues.

Actually, I think that the type of thread you created is kind of useful, as it gives an initial lead to other people encountering similar problems.

When you get the feeling that the simulation “suddenly stops”, it often means that a value NAN has appeared somewhere; it appears that processors are much slower processing the value NAN than processing valid numbers. Thus, monitoring the execution speed of a program (printing something on the terminal at regular time intervals) is a convenient way of being aware when numerical instabilities appear.

I have observed the opposite effect: My code becomes much faster when a NAN has emerged. Of course, one also has the possibility to scan for NAN values at a given time step, say every 100th.


#include <cmath>

int isnan(double x);

It returns 0 for a “correct” number and non-zero for a NAN.