Inconsistent in moving boundary
Hi,
I don't know if anyone has the same problem with me. To me it seems there are some problems with the moving boundary condition.
I have a moving boundary that has the same velocity on the whole moving body, that means, each particle in the body has the same velocity. However, several seconds later, the moving body is always distorted, some particles of the body move faster and same move slower, but if you check the velocity of the body, every particle still has the same velocity.
I have been checking it for a long time. It seems error occurs in JSphGpu::RunMotion or cusph::MoveLinBound, although given the same velocity, the moving distance in a time step is not the same in each particle.
I wonder that this is because of numerical error, but I am not sure. Is there anyone has the same problem?
I don't know if anyone has the same problem with me. To me it seems there are some problems with the moving boundary condition.
I have a moving boundary that has the same velocity on the whole moving body, that means, each particle in the body has the same velocity. However, several seconds later, the moving body is always distorted, some particles of the body move faster and same move slower, but if you check the velocity of the body, every particle still has the same velocity.
I have been checking it for a long time. It seems error occurs in JSphGpu::RunMotion or cusph::MoveLinBound, although given the same velocity, the moving distance in a time step is not the same in each particle.
I wonder that this is because of numerical error, but I am not sure. Is there anyone has the same problem?
Comments
In fact I have just experienced this bug myself and reported it to the guys who develop that part of the code. Hopefully an answer will be available shortly but in the meantime I can confirm that you are not alone!
Best regards.
Thanks a lot. Glad to hear that somebody is figuring out a solution!
I found that if the moving velocity was larger than some value this problem would never occur, however this criterion value is case dependent.
In the file Types.h line 29:
//#define DT_ALLPARTICLES //-Activates/deactivates the use of all particles (not only the fluid ones) to compute the value of dt.
Try to activate this just to check that this is not the source of your problem and report to us what happened, please.
Alex
I have been in contact with the main developer who has looked into the problem.
Unfortunately it is not a bug rather it is a consequence of using single precision floating point accuracy. Effectively the position update of the particles succumbs to minute errors due to floating point precision, this means that the more particles the case has and the smaller the time-step that the case demands is more likely to result in a noticeable error in the position of some particles.
Accuracy issues such as this are currently being looked at for the next release of DS and are a common issue in any computational code, especially in particle based models.
I'm sorry there isn't a definitive answer to your problem but all we can say at this point is you need to be as mindful about the effects of floating point accuracy on the moving boundary particles as you do the normal particles, so be careful of the size of your domain and be aware that as you increase your particle count the effects the rounding error will always increase throughout all aspects of the code.
Best regards.
Thanks so much.
Now I can avoid this error by increasing the velocity of boundary movement, therefore there should be no problem in my computation. Now I am implementing some constitutive models of granular materials and soils into DS, do you have any plan for this?
Looking forward to the next release, hope this can be solved.
Chong