As a fluid dynamic engineer, I’m very aware of the complexity of CFD. It’s absolutely stunning not just that you wrote a basic cfd code in 200 lines, but that it even runs on a browser and, most of all, that you could explain it in 10 minutes. Astonishing
As a functional programmer I see a great deal of redundancy and excess in this code so it could be shortened too. It's rather impressive that they kept it so small.
Glad to see this channel finally get the attention it deserves :) PS: Matthias, consider putting the Discord server in the description of these, since we have a bunch of people there willing to help out others and discuss these videos.
This is exactly what I have wanted to understand for years now. I have long thought it would be so cool to simulate a lava lamp, or the waves on the surface of a swimming pool. Every time I try to read about fluid mechanics, it's page after page of differential equations. You have made this so clear and intuitive. Thank you so much!
THANKYOU! SO many talks about fluid simulations (and fluid/water in general) mistakingly claim (orimply) that water *is* incompressable. this is the first time i've seen someone correctly assert its "functionally incompressable" XD
I know that you have little views, but the content you makes me delightet! It is very hard to find University level tutorials or explanations for fluids and softbodies, so your well made videos are a treasure! Especially for me as a Games Engineer it is very funny to know the math and algorythms.
A great video for aspiring numerical analysts. Amazing to see how you covered incompressibility to the Gauss-Seidel method within 10 minutes and a code that demonstrates all that 👏
Great video, thanks for posting this. I first wrote a MAC-type simulation for incompressible viscous flow back in the early 1980's. Seeing what you have done in 200 lines of code is amazing - we have come a long way! Your explanations are excellent and are a first rate introduction to a complex topic.
Fluid pressure in a tank demo Advection Pressure distribution Guass seidel method Water tunnel Wind tunnel Divergence = 0 Pixels Pixels of television Depends on the resolution of the television Great sir thank you
Description of physical behavior of particle is perfect for free interpretation on code by programmers, for me is most important than explaining mathematical. Good video.
Thank you so much for this information! This is such valuable content for people who are interested but don't have the opportunity or time to acquire this knowledge at a university or by reading specialist literature!
So effective! 15 years ago I was doing these simulations with industrial level CFD software and I was writing much more code just to analyze results. [feels nostalgic]
Ohh my, i never thought i will see a tutorial from THE Matthias Müller. Im such a huuuuuuuuuge fan of your works and papers! You are probably the most cited person in my bachelor and masters thesis - both about fluids. And damn i like your research. So awesome! Keep up your work! Youre freakn awesome in what youre doing!
I just stumbled on your channel. It is great how much good explanations you pack into a dozen minutes. I will recap all the videos in your series and try out the code.
I've read Bridson's book on Fluid Simulation for Computer Graphics, but you give an excellent and brief, yet detailed explanation. It cleared some things up for me. Thank you! Subscribed.
So glad I got this channel recommended to me. The videos along with the PDF overviews are amazing. I'm looking to try them in another language and will be happy to share
Something I've noticed in my physics course is that simulations of complex systems can be incredibly simple. The difficult bit is determining what is the best way to program something, so that it is both accurate and has reasonable computation costs. The programming itself will almost invariably result in a very short program. From what I can tell the huge thousands-of-lines projects that people spend years developing are tools which have many different methods of doing many different things for many different purposes. Each thing is short, the collation of them all into one widely useable toolkit so that no one ever has to code any of it again is not.
Love your videos, Matthias! Such a great initiative to create this video series, and to use web-based tech so that it's easy to play around with your interactive demos. Keep up the great work. ~ Eran.
Awesome! That is the little programm that I always wanted to write myself to simulate the flow around airfoils or sails, but I never managed to get this done. I got a s far as translating the equations to discrete cells, but then I always ended up with very large scarce equation systems, which needed an engine like Matlab to solve. Your choice of the staggered grid and all the other tricks are so elegant and make the solution so lean and efficient. Too bad that you did not post this video years ago, it would have saved me a lot of time. Great job!! Now I am looking forward to your solution of the full Navier-Stokes equations. OK, I'll give you a budget of 300 lines of code for that...😀
You cant find analytic solutions to fluid dynamics unless in some very simple cases like laminar flow through a pipe, which your case definitely isn't. The only solution is discrete CFD simulation and then verify it is close enough to reality
@@miguelguerrero3394 Yes, I know that. Thats why solving the Navier-Stokes equations is on the list of the Millennium Problems, for which the Clay Mathematics Institute offered a US $7 million prize fund ($1 million per problem). CFD is the only option to approach these problems for now...
Thank you so much for the great contents and I have been rewatching the videos many times! ❤ Definitely looking forward to the upcoming tutorials for viscous liquids and other fluid simulation methods.
Thank you so much for this explanation, Matthias! I just found this video : it's fascinating. I've subscribed (of course) and now I'll get a (large) mug of coffee and watch your other videos. Actually, you only need 1000 kgf /cm² to compress water more than 3% , but only an engineer who works in high pressure hydraulics would notice that. Don't worry. 😁
Brilliant, I could follow along pretty easily. The simple simulation strategy and clear visualisations helped. please prepare more projects simulating closed little systems like this! Thank you!
Год назад
Thank you very much. Greetings from Popayan, Colombia.
3:11 The staggered grid is sometimes called the Arakawa grid, after Akio Arakawa, the scientist who popularized it during the nascent years of fluid simulations.
This is amazing. I'm going to see if I can reimplement this in unity with as much optimization I can shove into it and see what is the largest resolution I can simulate in real time.
Very good vidéo ! Just a little remark, Lagrange was born in Italy but worked in France with "L'Académie des Sciences", lived through the French Revolution and his body is actually in the Pantheon so it should probably be Franco-Italian. (the concept of nationality came with the Revolution so it's a bit fuzzy)
@Matthias: Talking about divergence, in theory your video should be five times more informative than the ones on "Two Minute Papers". However, I find this so much more interesting and useful. So, thanks for the additional information inflow. Keep up the great work!
I don't understand why the pressure can be calculated like that. What am I missing? If it's incompressible d will be 0 "after projection"(@7:03), and if you mean the d before the projection then the liquid is no longer incompressible(it compresses/expands momentarily before propagating the corrected values).
Cool stuff, just finished my aerospace engineering masters. My favorite course was a class in CFD theory. Maybe you could make some videos on the finite volume method as well, or finite elements.
This **was** finite volume (the volume we are talking about is one Cell) - for each volume (cell) you are enforcing applying body forces, the divergence is zero (incompressible fluid and no sources or sinks) and the advection of velocities.
I would still love to see a video about rigidbodies, since they tend to be the most common type of simulation in games and film :) Maybe a more detailed tutorial (especially in regards to angular velocity) based on your XPBD bodies paper could be possible ?
Omg, are you the same Matthias who used to present awesome physics simulation stuff as an Nvidia researcher years and years ago? If yes, I can't believe I found another of your channels after so many years haha :-)
Karman vortex street is one of the possible explanations of the wave-particle duality of light. These vortices act as particles and waves at the same time. Imagine that photons are just ether vortices appearing when the ether flows through atoms.
Great... Great... Great job guy !! Thanks so much for sharing !!! (I wrote such simulator for meteorological applications long time ago, but the code was far from this beauty...)
thx for your great intro to this the, it awked the interest to start over with programming simulations.. therefore, my question, how can i start to become more familiar with programming simulations?
I love this and will attempt to recreate this on Python, I only wish we would've gotten an explanation as you were writing the code. I feel sometimes equations and stuff aren't so obvious when implemented into a programming language.
Yeah, the code itself is actually quite poorly-written. I counted at least one variable that was defined, not used, and then redefined in the same scope among many other issues. That's ignoring the random bits of code that are used and never explained in this or a previous tutorial.
I don't write the examples in one go from top to bottom. Getting simulation code right and debugging it is tricky. So I don't spend much time on the beauty of the code. But if you have the time it would be great if you could go over future examples before I publish them. Just let me know (tenminphysics at gmail dot com).
at 9:44 , the subscript of weights of last 2 terms seems like typo. Its w00w11 and w01w11. This was an amazing tutorial thou... Most understandable vdo... Thanks for making this.
Hi, good job! I'd like to understand some things to my own implementations, if you will. 1. How do you avoid high order harmonics due to non-linearity? 2. How does the flow evolve into a von Karman vortex street without viscosity? what is causing the separation of the cylinder?
Congrats for this amazing video. I had never seen this method for forcing the Incompressibility before. Is there any paper in which this method is presented? Could you please share paper or how did you discover it?
This is very impressive! However, there seems to be something wrong with the handling of the velocities within the obstacle or maybe only with the streamlines. When I move the ball around a bit I can change the flow, I can even make streamlines come straight out of the solid obstacle. If I move the ball to the left it appears to be alright, but if I push it to the right a bit then you see the flow coming out of the ball. So I checked the code and deactivated the c.fill() command that fills the ball with the grey color. Now I could see that some sreamlines get started from within the ball with a velocity in the direction of my last push. And when this line then crosses the surface of the obstacle it gets pushed in the direction of the flow around it. Maybe I can fix that myself. (I am currently trying derive a version of this tool where the ball is replaced with the NACA-profile of a Cessna wing. If I can make that work this should be a great tool to demonstrate all sorts of aerodynamical effects, like e.g. the increased lift in ground effect when flying very low.). Edit: Meanwhile I found half a fix. It appears that the script registers the movement of the obstacle and sets the internal velocity accordingly. When you stop shoving the ball around it should set all the internal airspeeds to zero, which it sometimes fails to do. Hoewer, if you grab the obstacle a second time with your mouse, click the left mouse button without moving then it will correctly set the internal speeds to zero and the streamlines fit. But now I am wrestling with another problem: If I use my NACA-profile instead of the circle then I get a dead water zone behind the wing and the streamlines do not follow the shape of the wing. That is a result of neglecting viscosity, because the air above the wing can easily slide over the air in that bubble, without any frcition dragging the air with it and ultimately enforcing the correct flow pattern. So, I now need to find a way to include viscosity. Matthias had actually dropped a remark that he might do that himself in a future video ... :)
Hi! Have you also looked into eulerian simulation of advection? I used the same approach as you, however I find that semi-Lagrangian advection has a problem of energy loss. The problem arises when velocity vector is so great, that it "skips" a few cells and can end up inside a wall. In such cases, advected velocity becomes 0. I haven't been able to find a better method though.
I really liked this video. Superbly explained. I have one small question though. What would be the neccessary modifications if your grid had a different spacing in each direction? I think the divergence would have to ve corrected by a factor hy for the u components and a factor hx for the v components, but I can't figure out how to correctly calculate the pressure, which also depends on h. Thanks!
As a fluid dynamic engineer, I’m very aware of the complexity of CFD. It’s absolutely stunning not just that you wrote a basic cfd code in 200 lines, but that it even runs on a browser and, most of all, that you could explain it in 10 minutes. Astonishing
It's a nice piece of code, but it's literally CFD 101. Everybody's first fluid sim looks like this.
@@nathan87 Perhaps intended for people like me who are new to the topic?
Lattice Boltzmann is even simpler, a basic C implementation is 100 lines. Yet it's a lot faster and much more accurate :)
@@ProjectPhysX This is super cool stuff for someone just learning about it.
As a functional programmer I see a great deal of redundancy and excess in this code so it could be shortened too. It's rather impressive that they kept it so small.
These videos are such a nice breath of fresh air after reading simulation papers
Hi all, thanks so much for all your positive feedback! A great motivation to do more videos!
Glad to see this channel finally get the attention it deserves :)
PS: Matthias, consider putting the Discord server in the description of these, since we have a bunch of people there willing to help out others and discuss these videos.
These r awesome! Physicist content creator
Incredible!!!
yes please
It would be great if you could use variables names that were slightly more self-describing. Readability is far more important than brevity.
This is exactly what I have wanted to understand for years now. I have long thought it would be so cool to simulate a lava lamp, or the waves on the surface of a swimming pool. Every time I try to read about fluid mechanics, it's page after page of differential equations. You have made this so clear and intuitive. Thank you so much!
I have been looking for this eloquent lecture for the last 15 years.
I was learning about this years ago and came across some papers you wrote/where involved with. So happy you are making videos on this too
THANKYOU! SO many talks about fluid simulations (and fluid/water in general) mistakingly claim (orimply) that water *is* incompressable. this is the first time i've seen someone correctly assert its "functionally incompressable" XD
I know that you have little views, but the content you makes me delightet! It is very hard to find University level tutorials or explanations for fluids and softbodies, so your well made videos are a treasure!
Especially for me as a Games Engineer it is very funny to know the math and algorythms.
absolutely
I am glad you like it. The numbers will go up with more videos. 3K subs for only 17 videos is actually quite good :-)
This is the shortest, clearest explanation I have ever heard of method like this. Do you have any sources I could look into to learn more? Thanks.
A great video for aspiring numerical analysts. Amazing to see how you covered incompressibility to the Gauss-Seidel method within 10 minutes and a code that demonstrates all that 👏
Great video, thanks for posting this. I first wrote a MAC-type simulation for incompressible viscous flow back in the early 1980's. Seeing what you have done in 200 lines of code is amazing - we have come a long way! Your explanations are excellent and are a first rate introduction to a complex topic.
Quite appreciate the way you articulate variables. “Boldface V”, “italic u and v”. Great work
I just can't decide what impresses me most. The conciseness of the code, or that of your explanations.
Fluid pressure in a tank demo
Advection
Pressure distribution
Guass seidel method
Water tunnel
Wind tunnel
Divergence = 0
Pixels
Pixels of television
Depends on the resolution of the television
Great sir thank you
Description of physical behavior of particle is perfect for free interpretation on code by programmers, for me is most important than explaining mathematical. Good video.
Thank you so much for this information! This is such valuable content for people who are interested but don't have the opportunity or time to acquire this knowledge at a university or by reading specialist literature!
So effective! 15 years ago I was doing these simulations with industrial level CFD software and I was writing much more code just to analyze results. [feels nostalgic]
So that is when this would of been groundbreaking?
really appreciate that you go all the way with the instructions, AND put the whole source code out for the public
Ohh my, i never thought i will see a tutorial from THE Matthias Müller. Im such a huuuuuuuuuge fan of your works and papers! You are probably the most cited person in my bachelor and masters thesis - both about fluids. And damn i like your research. So awesome!
Keep up your work! Youre freakn awesome in what youre doing!
Please keep making videos and resources like you have been! You are an absolute gold mine.
I just stumbled on your channel. It is great how much good explanations you pack into a dozen minutes. I will recap all the videos in your series and try out the code.
I've read Bridson's book on Fluid Simulation for Computer Graphics, but you give an excellent and brief, yet detailed explanation. It cleared some things up for me. Thank you! Subscribed.
Its so beautiful. I am just going to cry with joy.
Everything is easy when you are both a programmer and a physicist
Me too..I am a mechanical engineer with a ardent interest and hands-on working knowledge of python,C,C++ to simulate physics
you forgot mathematicians ;-;
@@wallbrick2170 yeah, mostly methematician, because if you know math then you are able understand physics as well
@@this_is_mayhem Well, not really
@@this_is_mayhem meth?
So glad I got this channel recommended to me. The videos along with the PDF overviews are amazing. I'm looking to try them in another language and will be happy to share
Man, thinking about ball hanging motion make my head hurt, but you make simulation of fluid, that is amazing
Something I've noticed in my physics course is that simulations of complex systems can be incredibly simple.
The difficult bit is determining what is the best way to program something, so that it is both accurate and has reasonable computation costs. The programming itself will almost invariably result in a very short program.
From what I can tell the huge thousands-of-lines projects that people spend years developing are tools which have many different methods of doing many different things for many different purposes. Each thing is short, the collation of them all into one widely useable toolkit so that no one ever has to code any of it again is not.
You're doing god's work here. Thank you! Your XPBD research and educational media is enabling me to make a game that I would otherwise not be able to.
This is exceptionally well and clearly explained, many thanks, now to work out how to make the force flow around a 2D planet .....
As a physicist who moved to CS this is a delight!
Love your videos, Matthias! Such a great initiative to create this video series, and to use web-based tech so that it's easy to play around with your interactive demos. Keep up the great work. ~ Eran.
Thanks! I am happy to hear that people like it and will definitely make more videos
finally youtube recommended something good! Thanks for a clear and still concise explanation, the staggered grid approach is new to me also
Awesome! That is the little programm that I always wanted to write myself to simulate the flow around airfoils or sails, but I never managed to get this done. I got a s far as translating the equations to discrete cells, but then I always ended up with very large scarce equation systems, which needed an engine like Matlab to solve. Your choice of the staggered grid and all the other tricks are so elegant and make the solution so lean and efficient. Too bad that you did not post this video years ago, it would have saved me a lot of time. Great job!! Now I am looking forward to your solution of the full Navier-Stokes equations. OK, I'll give you a budget of 300 lines of code for that...😀
You cant find analytic solutions to fluid dynamics unless in some very simple cases like laminar flow through a pipe, which your case definitely isn't. The only solution is discrete CFD simulation and then verify it is close enough to reality
@@miguelguerrero3394 Yes, I know that. Thats why solving the Navier-Stokes equations is on the list of the Millennium Problems, for which the Clay Mathematics Institute offered a US $7 million prize fund ($1 million per problem). CFD is the only option to approach these problems for now...
@@veitheld167 oh ok, nevermind then.
That was very interesting! I’ve been wanting to work towards a fluid simulation for a while, and your explanation really helped!
Thank you so much for the great contents and I have been rewatching the videos many times! ❤ Definitely looking forward to the upcoming tutorials for viscous liquids and other fluid simulation methods.
Thank you so much for this explanation, Matthias! I just found this video : it's fascinating. I've subscribed (of course) and now I'll get a (large) mug of coffee and watch your other videos. Actually, you only need 1000 kgf /cm² to compress water more than 3% , but only an engineer who works in high pressure hydraulics would notice that. Don't worry. 😁
I didn't ask for more. What can I say except a very big thank you. Tank you really.
Elegant as always, thanks for taking the time to share such informative videos.
Brilliant, I could follow along pretty easily. The simple simulation strategy and clear visualisations helped. please prepare more projects simulating closed little systems like this!
Thank you!
Thank you very much. Greetings from Popayan, Colombia.
Hello Matthias, Thank you so much for your video series
Congratulation!!! Greetings from Bolivia.
Wow, it's really good. It's very attractive and the AD is very interesting
Wow that's amazing! I'm really excited about your channel! Thanks for sharing your knowledge
Excellente vidéo et démo ! 👋 Un plaisir de découvrir votre vidéo et maintenant de vous suivre.
3:11 The staggered grid is sometimes called the Arakawa grid, after Akio Arakawa, the scientist who popularized it during the nascent years of fluid simulations.
Nice job Matthias! I developed the same code in c++ based in part on yours, I put a demo on youtube.
Nice work!
Another excellent tutorial. Thank you very much for this!
This is amazing. I'm going to see if I can reimplement this in unity with as much optimization I can shove into it and see what is the largest resolution I can simulate in real time.
So did you? How did it go?
Ah, a staggered grid. I never heard of that little trick! Thanks! :D
Very good vidéo ! Just a little remark, Lagrange was born in Italy but worked in France with "L'Académie des Sciences", lived through the French Revolution and his body is actually in the Pantheon so it should probably be Franco-Italian. (the concept of nationality came with the Revolution so it's a bit fuzzy)
Thank you so very much man, absolutely valuable content, thank you for generously sharing the code too!
I've read paper named "Real-time fluid dynamics for games" before, which follows similar idea
This explanation is a lot more insightful though
Just discovered your channel and tried out the simulator, so fun! Keep up the good work :)☺
looking forward for upcoming tutorials!
Ok, you definitely earned yourself a new subscriber. Keep it up, man, and congrats for your work 👌🏽
@Matthias: Talking about divergence, in theory your video should be five times more informative than the ones on "Two Minute Papers". However, I find this so much more interesting and useful. So, thanks for the additional information inflow. Keep up the great work!
I don't understand why the pressure can be calculated like that. What am I missing?
If it's incompressible d will be 0 "after projection"(@7:03), and if you mean the d before the projection then the liquid is no longer incompressible(it compresses/expands momentarily before propagating the corrected values).
Cool stuff, just finished my aerospace engineering masters. My favorite course was a class in CFD theory. Maybe you could make some videos on the finite volume method as well, or finite elements.
This **was** finite volume (the volume we are talking about is one Cell) - for each volume (cell) you are enforcing applying body forces, the divergence is zero (incompressible fluid and no sources or sinks) and the advection of velocities.
Very impressive make me build an interest in programming
Awesome, very very awesome. Thank you so much.
I would still love to see a video about rigidbodies, since they tend to be the most common type of simulation in games and film :) Maybe a more detailed tutorial (especially in regards to angular velocity) based on your XPBD bodies paper could be possible ?
Sure, eventually I will cover everything I have been doing. However, since people seem to like fluid sim a lot the next one will be about FLIP 🙂
Thanks for the great information. Hope you're doing well.
Amazing! Please teach us how to do other types of simulations. I will try all for sure. Thanks for your time.
Many videos will follow. I am currently working on one about flip water simulation.
What an amazing channel! I'm very interested in physics simulation, and your channel is awesome! Thank you so much.
Excellent video and a really interesting channel. Defo going to check out more of your videos!
Very well done, many thanks!
This is really great! Thank you and well done!
Omg, are you the same Matthias who used to present awesome physics simulation stuff as an Nvidia researcher years and years ago? If yes, I can't believe I found another of your channels after so many years haha :-)
Karman vortex street is one of the possible explanations of the wave-particle duality of light.
These vortices act as particles and waves at the same time.
Imagine that photons are just ether vortices appearing when the ether flows through atoms.
Beautiful video, subscribed
Great video, good explanations and the result is beautiful! Subscribed!
It would be awesome if you could make a playlist on how to write such kind of codes for CFD! Thanks for such great video
I am glad you like it. In my pipeline are videos about flip, sph and more...
@@TenMinutePhysics A video on SPH would be awesome!
Very amazing effect ! Will fluid simulation from Lagrange perspective (e.g. SPH) be covered in the future ?
Instantly subscribed. Thank you.
Great... Great... Great job guy !! Thanks so much for sharing !!! (I wrote such simulator for meteorological applications long time ago, but the code was far from this beauty...)
Amazing explanation!
Do you expect to have any upcoming example of Semi-Lagrangian simulations like the kind used in oceanic+atmospheric models?
i see the code with html 779 line of code .... i just do not know how did you figured out all of those stuff sir, you are incredible...
This may have changed my life.
Your channel is gold! .. new subs, thank you
Really nice explanation! I feel like I can go implement it immediately. A small typo at 4:04, g should be in m/s^2, not m/s
Thanks! Yes I noticed it before. There are other typos which I all fixed in the slides.
@@TenMinutePhysics Ah, I see now that the slides are updated. Thanks again for a great explanation :)
thx for your great intro to this the, it awked the interest to start over with programming simulations.. therefore, my question, how can i start to become more familiar with programming simulations?
I love this and will attempt to recreate this on Python, I only wish we would've gotten an explanation as you were writing the code. I feel sometimes equations and stuff aren't so obvious when implemented into a programming language.
Yeah, the code itself is actually quite poorly-written. I counted at least one variable that was defined, not used, and then redefined in the same scope among many other issues. That's ignoring the random bits of code that are used and never explained in this or a previous tutorial.
I don't write the examples in one go from top to bottom. Getting simulation code right and debugging it is tricky. So I don't spend much time on the beauty of the code. But if you have the time it would be great if you could go over future examples before I publish them. Just let me know (tenminphysics at gmail dot com).
That was so great. Thanks
at 9:44 , the subscript of weights of last 2 terms seems like typo. Its w00w11 and w01w11.
This was an amazing tutorial thou... Most understandable vdo... Thanks for making this.
Hi, good job! I'd like to understand some things to my own implementations, if you will.
1. How do you avoid high order harmonics due to non-linearity?
2. How does the flow evolve into a von Karman vortex street without viscosity? what is causing the separation of the cylinder?
I'm not sure of my answer but finite difference method is diffusive so that using it add numerical diffusion in the resolution
That was insightful.
great tutorial
Fantastic tutorial!
Thanks, I am glad so many viewers like it!
Good day! Cool stuff. Can you tell me where to find a description of this method (an article or a book). I would like to study this in more detail.
Super Content and Nicely Done 👌👌
Qué maravilla de vídeo. ¿Podría hacer alguno de una simulación electromagnética? Por ejemplo, el funcionamiento de una antena tipo dipolo. Thank
Thank you so much for this tutorial, sir. Can you please explain where you took the equation for the pressure on 7:04?
Amazing
This is very informative!!!!! 😃
Congrats for this amazing video. I had never seen this method for forcing the Incompressibility before. Is there any paper in which this method is presented? Could you please share paper or how did you discover it?
Thank you!
This is very impressive! However, there seems to be something wrong with the handling of the velocities within the obstacle or maybe only with the streamlines. When I move the ball around a bit I can change the flow, I can even make streamlines come straight out of the solid obstacle. If I move the ball to the left it appears to be alright, but if I push it to the right a bit then you see the flow coming out of the ball. So I checked the code and deactivated the c.fill() command that fills the ball with the grey color. Now I could see that some sreamlines get started from within the ball with a velocity in the direction of my last push. And when this line then crosses the surface of the obstacle it gets pushed in the direction of the flow around it.
Maybe I can fix that myself. (I am currently trying derive a version of this tool where the ball is replaced with the NACA-profile of a Cessna wing. If I can make that work this should be a great tool to demonstrate all sorts of aerodynamical effects, like e.g. the increased lift in ground effect when flying very low.).
Edit: Meanwhile I found half a fix. It appears that the script registers the movement of the obstacle and sets the internal velocity accordingly. When you stop shoving the ball around it should set all the internal airspeeds to zero, which it sometimes fails to do. Hoewer, if you grab the obstacle a second time with your mouse, click the left mouse button without moving then it will correctly set the internal speeds to zero and the streamlines fit.
But now I am wrestling with another problem: If I use my NACA-profile instead of the circle then I get a dead water zone behind the wing and the streamlines do not follow the shape of the wing. That is a result of neglecting viscosity, because the air above the wing can easily slide over the air in that bubble, without any frcition dragging the air with it and ultimately enforcing the correct flow pattern. So, I now need to find a way to include viscosity. Matthias had actually dropped a remark that he might do that himself in a future video ... :)
Hi! Have you also looked into eulerian simulation of advection? I used the same approach as you, however I find that semi-Lagrangian advection has a problem of energy loss. The problem arises when velocity vector is so great, that it "skips" a few cells and can end up inside a wall. In such cases, advected velocity becomes 0. I haven't been able to find a better method though.
I really liked this video. Superbly explained. I have one small question though. What would be the neccessary modifications if your grid had a different spacing in each direction?
I think the divergence would have to ve corrected by a factor hy for the u components and a factor hx for the v components, but I can't figure out how to correctly calculate the pressure, which also depends on h.
Thanks!