Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solver must be a power of 2, and seems to be o (n2) in complexity #10

Closed
damian-666 opened this issue Aug 29, 2016 · 16 comments
Closed

Comments

@damian-666
Copy link

Sorry if i don't even make any sense or have not read everything you have published, but i have some ideas , questions , or suggestions for the solver..

So, i have tried a few schemes, they are like this. . 64x64 grids. is all i can run in debug. But, when i try see your code, its it the Algebraic MD?, your converges in 2 , not 80 iterations.. that is great. But i cannot fill a sky or half an ocean on a laptop.. with a rough grid. And i think like Molemaker/ Cohen.. it can be fixed with the GPU and IOP .. but .. thats tricky...http://enu.kz/repository/2010/AIAA-2010-523.pdf . This paper mentions FEFLO andLOC - FCT flux corrected transport.. i thought they used IOP and SIMPLE... and Cuda.. anyways.. Cuda is no good for me..since Skylake is a good cpu.

So, i make three grids.. they compiled them. They were all fast.. there was some stuttering , i believe is due to memory being released ..and the GC'd when maybe it shoudnt. I suspect GC as the cause of the stutters, using 3 processing running ( i forgot which , a flow past some circle)

FFT2 pressure solves seems fast even at 1024 x 1024. 1ms... for the fft on cpu.. But I read "periodic boundary conditions.. However, if the window is one period + buffer. to randomize Y. I dont know if periodic boundary conditions means the immerses rockets, creatures, etc.. need to be symmetrical or what?... I think the doing solves.. in a loose coupled way, which may be good enough only for vfx...to solver for pressure, fft back... then move the think and collide with the air, push it away using a the panel method... then fft solves will be super fast,high res...and using stams way.. stable. I would try it on my force if you think its worth a try, even if not for a CFD IB solver.

Also, as i watch my 3 windows,then i wonder.. should i instead try I use Multigrid , Chimera style , overlapping by 2 boxes.. covery all the info form one grid to the next?.. I could use this for a long 2d ocean with wave.. without resorting to mixed methods, or even narrow band flip. For ortho grids , especially ,this seems doable..

agin TLDR....if i don't even make any sense or missed the published plan. I am reading and reading but i haven't make much progress in my coding. Frankly i am overwhelmed with too many schemes and i just want fast /simple /stable/believable, or perhaps, interchangeable. most are edge based..MAC style..

@weymouth
Copy link
Owner

weymouth commented Sep 5, 2016

I'm sorry, what exactly is the issue you are reporting? The only issues I see are in your title.

The first issue in the title is that the solver must be a power of 2, but this is not quite right. The number of point in each direction needs to be proportional to a large power of 2. This is because the multi-grid solver interactively "restricts" the domain by a factor of two in each direction. It will be much more efficient if the solver can do that at least three times, and more is better.

As for the second issue in the title: If n is the total number of points, the the fluid routines in the code are O(n) except for the multi-grid solver which is O(n log n). However, if you double the points in both x and y, then this is increasing n by a factor of 4. In addition, if you double the resolution then running a certain simulation (say two cycles of bluff body shedding) will require (about) twice as many time steps.

Hope that helps.

@damian-666
Copy link
Author

Thanks. I dont think its a bug. I think its an issue of rendering, or
maybe an additional feature like adaptive methods , cells of different
sizes, near the high entropy area, would help. I wrote an enormous
email describing what i would like to use the code for ( breaking waves,
thin paneled boats , and surfer-eating fishes) for an educational and
entertaining simulation game for disabled kids that cant go surfing
outside. I hope you don't mind it.

i am looking all over the internet..
ShadowFax uses a moving grid, and another scheme based on VOF uses a
triangle grid has some advantages over the voronoi one.

On Mon, Sep 5, 2016 at 4:49 PM, Dr Weymouth notifications@github.com
wrote:

I'm sorry, what exactly is the issue you are reporting? The only issues I
see are in your title.

The first issue in the title is that the solver must be a power of 2, but
this is not quite right. The number of point in each direction needs to be
proportional to a large power of 2. This is because the multi-grid solver
interactively "restricts" the domain by a factor of two in each direction.
It will be much more efficient if the solver can do that at least three
times, and more is better.

As for the second issue in the title: If n is the total number of points,
the the fluid routines in the code are O(n) except for the multi-grid
solver which is O(n log n). However, if you double the points in both x and
y, then this is increasing n by a factor of 4. In addition, if you double
the resolution then running a certain simulation (say two cycles of bluff
body shedding) will require (about) twice as many time steps.

Hope that helps.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmTEPVm6vYGR0C38dtqSdNzmVqZdhks5qm9eagaJpZM4JwAR9
.

@damian-666
Copy link
Author

Hello again.. maybe the last email was all over the place but I have some
well defined issues now .

I got the two phase to work but I am not sure if it is working as well as
it could. The main issue is performance. for first pass , I noticed
that the MG solver is reallocating the MG solver instance, and its arrays
every call. There is a lot of that and for every field with the whole
grid...as well. For the solver , i think it could have one instance of
the solver, and a buffer PoissonMatrix A and a buffer B for the fields
passed in.
A hash table or map could associate the field with data if needed... I
am trying a quick use of static.. so that the data is kept in place, not
moved around and reallocated, which , in a loop can be fragmenting memory
and require garbage collecting and compacting. I noticed when i put 3
grids in a row like a chimera that the GC was stuttering.. that was the
first hint of buffer issues.

static class MG{
PoissonMatrix A;
static Field r, x;

SIMD processing :
the arrays could be made to 1d ( not sure if that matters) , but to take
advantage of SIMD some care has to be taken with rows and columns of
arrays should be as laid out in memory. so i think columns on the outer
loop for 2d array.. one or the other. I have seen big boosts with code
that has SIMD friendly loops without branches

t when I move the circle near the surface, it is very slow... Even an
stutter and hang up.. not explode, but stall..

i loaded http://www.lagers.org.uk/jasmine/ but i see no difference..
nothing compelling about it..

If there is parallelization to be done, i think that could be next, but i
am not sure with Algebraic MG?. adaptive methods that use smaller
squares near entopy or the interface, would be best.. some use it in
deep water.

-I noticed the line seg object could not break the bubbles. I think the
circle did pushes them. I like how I could stir the bottom and slosh the
whole thing.

-But for a numerical wave take with some length , it seems it needs plenty
of speed up. I see new ways to get find surface detail from coarse grids.
and for vortons, it would nee to treat rollups with a fine mesh or
perhaps using vorton particles, or blobs of them.

-the bubbles could be compressible, that would be a nice look if resolved.

-I would love to see a sample of a breaking , overturning , air gulping
wave. I can now have the wind blow on way or the other and see the effect
:)

-toward the breaker should make a barrel, in the wave direction (

onshore) , should make a mess.. ( i can see the wind blow on the water).

I could not figure out how to change the density ratio, or any buoyancy
parameters .. 10 might be enough , 100 or 1000 is the reality.. but a
buoyancy factor would be enough.

  • The functions did not have enough comment so i could find how to set the
    gravity direction, or strength, the viscosity, the density ..

-would it be hard to add temperature? I would think that just advects
simply, with the fluid, diffuses, also.. then, adds to the buoyancy if
the air is hotter than the water.

-adaptive features such as grid refinement would give the most reward..
probably..

I am still not sure if this code is the right path for me, I like the idea
of a flapping bird in air and this method is the most complete. I use a
simple drag / flux model, for fish locomotion, and it worked fine. But the
IB is supposed to be the best way to react to the reef contours,
hillsides, and the AMG method one of the fastest. But i am no expert i am
reading papers every day and never feel like I know enough.

I installed Jasmine to processing, didnt notice much of a difference... (
on PC, windows 10 , latest processing,) the ball does move the bubbles,
they do go up. I would like a 100 to 1 density ratio ( is that close to
water /air?)... the air could be compressible... should be.. 10 to 1
would be enough.. But i think i need to added gravity.

is there a less frendly and more performant code I could look at? I
though i saw some code that calculated the breaking bow waves on a vessel
from your team.. at MIT ? should i try the MarineHydro/lessons/?
is it true the code is 1st order accurate, you stated long ago.. but i
saw some notes on RK and I see plenty of vorticity, almost too much.

I now found some new flip code that is adaptive both with the size of the
mesh and the sph particles, using a tetrahedron grid, but it is only one
phase. I can clearly see the wind blowing on the surface here and i think
i don't want to do without that...

If i see a nice breaking wave demo, maybe i can fix some of this stuff...
but i dont konw java, c# in not much different though.

CBatty's variational cut cell method promises a coupling. it is using a
complex conjugate..

I tried compling the java, so i think the main issue is the buffers, and
something else...

i am gong to give a quick try to this: reuse the buffers by making
classes static. A map might need to be implemented but heap churn in the
loop and allocations are expensive so im sure it worth it. If worker
threading, each thread can have its own buffers, mapped by thread id...

static class MG{
PoissonMatrix A;
static Field r, x;

int iter=0;

float tol=1e-5;

MG( PoissonMatrix pA, Field X, Field B ){
A = pA;
x = X;
r = new Field(x.n,x.m,0,tol);
tol = r.inner(r);
r = A.residual(b,x);
}

[image: Inline image 2]

air is to thin, water not dense enoug.....

I am only 5 month into CFL ,[image: Inline image 1]
so i am hoping ot find code that matches since my project focus is an
walking creatures, and walking on boats now..

But runing at 2^ 6 2,^ 5 gives me barely interactive speeds.

for 2d i was hoping to do the full NS... not using some hacks..

i still dont understand "periodic" boundary conditions, if there is only
one period in the window... with buffers on the margins... because the
FFT pressure solve scales the best ..

On Mon, Sep 5, 2016 at 9:33 PM, Damian Hallbauer <damian.hallbauer@gmail.com

wrote:

Thanks. I dont think its a bug. I think its an issue of rendering, or
maybe an additional feature like adaptive methods , cells of different
sizes, near the high entropy area, would help. I wrote an enormous
email describing what i would like to use the code for ( breaking waves,
thin paneled boats , and surfer-eating fishes) for an educational and
entertaining simulation game for disabled kids that cant go surfing
outside. I hope you don't mind it.

i am looking all over the internet..
ShadowFax uses a moving grid, and another scheme based on VOF uses a
triangle grid has some advantages over the voronoi one.

On Mon, Sep 5, 2016 at 4:49 PM, Dr Weymouth notifications@github.com
wrote:

I'm sorry, what exactly is the issue you are reporting? The only issues I
see are in your title.

The first issue in the title is that the solver must be a power of 2, but
this is not quite right. The number of point in each direction needs to be
proportional to a large power of 2. This is because the multi-grid solver
interactively "restricts" the domain by a factor of two in each direction.
It will be much more efficient if the solver can do that at least three
times, and more is better.

As for the second issue in the title: If n is the total number of points,
the the fluid routines in the code are O(n) except for the multi-grid
solver which is O(n log n). However, if you double the points in both x and
y, then this is increasing n by a factor of 4. In addition, if you double
the resolution then running a certain simulation (say two cycles of bluff
body shedding) will require (about) twice as many time steps.

Hope that helps.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmTEPVm6vYGR0C38dtqSdNzmVqZdhks5qm9eagaJpZM4JwAR9
.

@weymouth
Copy link
Owner

weymouth commented Sep 6, 2016

My role in this open source project is to help people use and update lily
pad.

If you have a bug, or usage question, then I'll try to help fix/answer it.
If you can put some time into optimising the memory allocation, that would
be great. I'm not a computer scientist, so I could use help with that. If
you make a change and send a pull request then everyone else will benefit
from your work on it. Same for multi-threading (which I am about to start
working on myself). Same for adaptive mesh refinement.

This is my understanding of how open source works.

So, if you're interested in making lily pad better for everyone, then pick
one item and make it better. That would be great.

On Sep 6, 2016 19:28, "damian-666" notifications@github.com wrote:

Hello again.. maybe the last email was all over the place but I have some
well defined issues now .

I got the two phase to work but I am not sure if it is working as well as
it could. The main issue is performance. for first pass , I noticed
that the MG solver is reallocating the MG solver instance, and its arrays
every call. There is a lot of that and for every field with the whole
grid...as well. For the solver , i think it could have one instance of
the solver, and a buffer PoissonMatrix A and a buffer B for the fields
passed in.
A hash table or map could associate the field with data if needed... I
am trying a quick use of static.. so that the data is kept in place, not
moved around and reallocated, which , in a loop can be fragmenting memory
and require garbage collecting and compacting. I noticed when i put 3
grids in a row like a chimera that the GC was stuttering.. that was the
first hint of buffer issues.

static class MG{
PoissonMatrix A;
static Field r, x;

SIMD processing :
the arrays could be made to 1d ( not sure if that matters) , but to take
advantage of SIMD some care has to be taken with rows and columns of
arrays should be as laid out in memory. so i think columns on the outer
loop for 2d array.. one or the other. I have seen big boosts with code
that has SIMD friendly loops without branches

t when I move the circle near the surface, it is very slow... Even an
stutter and hang up.. not explode, but stall..

i loaded http://www.lagers.org.uk/jasmine/ but i see no difference..
nothing compelling about it..

If there is parallelization to be done, i think that could be next, but i
am not sure with Algebraic MG?. adaptive methods that use smaller
squares near entopy or the interface, would be best.. some use it in
deep water.

-I noticed the line seg object could not break the bubbles. I think the
circle did pushes them. I like how I could stir the bottom and slosh the
whole thing.

-But for a numerical wave take with some length , it seems it needs plenty
of speed up. I see new ways to get find surface detail from coarse grids.
and for vortons, it would nee to treat rollups with a fine mesh or
perhaps using vorton particles, or blobs of them.

-the bubbles could be compressible, that would be a nice look if resolved.

-I would love to see a sample of a breaking , overturning , air gulping
wave. I can now have the wind blow on way or the other and see the effect
:)

-toward the breaker should make a barrel, in the wave direction (
onshore) , should make a mess.. ( i can see the wind blow on the water).

I could not figure out how to change the density ratio, or any buoyancy
parameters .. 10 might be enough , 100 or 1000 is the reality.. but a
buoyancy factor would be enough.

  • The functions did not have enough comment so i could find how to set the
    gravity direction, or strength, the viscosity, the density ..

-would it be hard to add temperature? I would think that just advects
simply, with the fluid, diffuses, also.. then, adds to the buoyancy if
the air is hotter than the water.

-adaptive features such as grid refinement would give the most reward..
probably..

I am still not sure if this code is the right path for me, I like the idea
of a flapping bird in air and this method is the most complete. I use a
simple drag / flux model, for fish locomotion, and it worked fine. But the
IB is supposed to be the best way to react to the reef contours,
hillsides, and the AMG method one of the fastest. But i am no expert i am
reading papers every day and never feel like I know enough.

I installed Jasmine to processing, didnt notice much of a difference... (
on PC, windows 10 , latest processing,) the ball does move the bubbles,
they do go up. I would like a 100 to 1 density ratio ( is that close to
water /air?)... the air could be compressible... should be.. 10 to 1
would be enough.. But i think i need to added gravity.

is there a less frendly and more performant code I could look at? I
though i saw some code that calculated the breaking bow waves on a vessel
from your team.. at MIT ? should i try the MarineHydro/lessons/?
is it true the code is 1st order accurate, you stated long ago.. but i
saw some notes on RK and I see plenty of vorticity, almost too much.

I now found some new flip code that is adaptive both with the size of the
mesh and the sph particles, using a tetrahedron grid, but it is only one
phase. I can clearly see the wind blowing on the surface here and i think
i don't want to do without that...

If i see a nice breaking wave demo, maybe i can fix some of this stuff...
but i dont konw java, c# in not much different though.

CBatty's variational cut cell method promises a coupling. it is using a
complex conjugate..

I tried compling the java, so i think the main issue is the buffers, and
something else...

i am gong to give a quick try to this: reuse the buffers by making
classes static. A map might need to be implemented but heap churn in the
loop and allocations are expensive so im sure it worth it. If worker
threading, each thread can have its own buffers, mapped by thread id...

static class MG{
PoissonMatrix A;
static Field r, x;

int iter=0;

float tol=1e-5;

MG( PoissonMatrix pA, Field X, Field B ){
A = pA;
x = X;
r = new Field(x.n,x.m,0,tol);
tol = r.inner(r);
r = A.residual(b,x);
}

[image: Inline image 2]

air is to thin, water not dense enoug.....

I am only 5 month into CFL ,[image: Inline image 1]
so i am hoping ot find code that matches since my project focus is an
walking creatures, and walking on boats now..

But runing at 2^ 6 2,^ 5 gives me barely interactive speeds.

for 2d i was hoping to do the full NS... not using some hacks..

i still dont understand "periodic" boundary conditions, if there is only
one period in the window... with buffers on the margins... because the
FFT pressure solve scales the best ..

On Mon, Sep 5, 2016 at 9:33 PM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Thanks. I dont think its a bug. I think its an issue of rendering, or
maybe an additional feature like adaptive methods , cells of different
sizes, near the high entropy area, would help. I wrote an enormous
email describing what i would like to use the code for ( breaking waves,
thin paneled boats , and surfer-eating fishes) for an educational and
entertaining simulation game for disabled kids that cant go surfing
outside. I hope you don't mind it.

i am looking all over the internet..
ShadowFax uses a moving grid, and another scheme based on VOF uses a
triangle grid has some advantages over the voronoi one.

On Mon, Sep 5, 2016 at 4:49 PM, Dr Weymouth notifications@github.com
wrote:

I'm sorry, what exactly is the issue you are reporting? The only issues
I
see are in your title.

The first issue in the title is that the solver must be a power of 2,
but
this is not quite right. The number of point in each direction needs to
be
proportional to a large power of 2. This is because the multi-grid
solver
interactively "restricts" the domain by a factor of two in each
direction.
It will be much more efficient if the solver can do that at least three
times, and more is better.

As for the second issue in the title: If n is the total number of
points,
the the fluid routines in the code are O(n) except for the multi-grid
solver which is O(n log n). However, if you double the points in both x
and
y, then this is increasing n by a factor of 4. In addition, if you
double
the resolution then running a certain simulation (say two cycles of
bluff
body shedding) will require (about) twice as many time steps.

Hope that helps.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10 (comment)
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_
LmTEPVm6vYGR0C38dtqSdNzmVqZdhks5qm9eagaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAclJ08PSienC_VMAPiybqmbto02xiXdks5qnU5HgaJpZM4JwAR9
.

@damian-666
Copy link
Author

op, i just pulled up my processing to try another scheme and see that all
the sessions i made were still running. as leaked process, when it didn't
solve, . so the latest processing leaks it, i have to use task manager
to close them. . so now i close them all and i get a decent
performance boost.

out of the box, this code does more and is organized better than the other
ones ive looked at.. Most of which i cannot even get to compile

But reusing those buffers i always have optimized first, pretty sure
that would be worth it.

and thinking about SIMD is something, flattening the buffers to 1d, i
learned from this CFD code research.

i can try to do it but my project is 2 years overdue and it might get
closed down for a while. but do you think this code is right for making
a breaking wave? with winds on it? if there is a test case please let
me know And if there is no sample i can figure out most of it ... i ame
guessing to make a union of stuff to put on the bottom.. and then make a
wave pusher thing to generate the waves....

But if you can point me to how to set

*viscosity , fluid density, gravity direction, ( or general acceleration)
, bouyancy, *( for two phase)... i was adjusting parameters but without
really knowing .. i can figure it all out if it in there somewhere.

Adding heat is not hard... but I had to hack to figure out how to adjust
the density ratio.

Im learning python, processing, fortran90. java, shaders opencl,.. all
for this CFD because it fits so well with my creatures.. Emergent stuff
like weather comes from heat so i want to do alot with the Air Field.

My project is 2 years overdue and I think i have read over 300 papers.
i might just need to ask general stuff sometimes. I can probably figure
it out but I don't understand Algebraic multgrid, nor an easy way to make
it adaptive, but i probably have the paper somewhere.

thanks for makeing this code available., it might be my best water solution
and have several dust schemes that can work..

On Tue, Sep 6, 2016 at 8:58 PM, Dr Weymouth notifications@github.com
wrote:

My role in this open source project is to help people use and update lily
pad.

If you have a bug, or usage question, then I'll try to help fix/answer it.
If you can put some time into optimising the memory allocation, that would
be great. I'm not a computer scientist, so I could use help with that. If
you make a change and send a pull request then everyone else will benefit
from your work on it. Same for multi-threading (which I am about to start
working on myself). Same for adaptive mesh refinement.

This is my understanding of how open source works.

So, if you're interested in making lily pad better for everyone, then pick
one item and make it better. That would be great.

On Sep 6, 2016 19:28, "damian-666" notifications@github.com wrote:

Hello again.. maybe the last email was all over the place but I have some
well defined issues now .

I got the two phase to work but I am not sure if it is working as well as
it could. The main issue is performance. for first pass , I noticed
that the MG solver is reallocating the MG solver instance, and its arrays
every call. There is a lot of that and for every field with the whole
grid...as well. For the solver , i think it could have one instance of
the solver, and a buffer PoissonMatrix A and a buffer B for the fields
passed in.
A hash table or map could associate the field with data if needed... I
am trying a quick use of static.. so that the data is kept in place, not
moved around and reallocated, which , in a loop can be fragmenting memory
and require garbage collecting and compacting. I noticed when i put 3
grids in a row like a chimera that the GC was stuttering.. that was the
first hint of buffer issues.

static class MG{
PoissonMatrix A;
static Field r, x;

SIMD processing :
the arrays could be made to 1d ( not sure if that matters) , but to take
advantage of SIMD some care has to be taken with rows and columns of
arrays should be as laid out in memory. so i think columns on the outer
loop for 2d array.. one or the other. I have seen big boosts with code
that has SIMD friendly loops without branches

t when I move the circle near the surface, it is very slow... Even an
stutter and hang up.. not explode, but stall..

i loaded http://www.lagers.org.uk/jasmine/ but i see no difference..
nothing compelling about it..

If there is parallelization to be done, i think that could be next, but i
am not sure with Algebraic MG?. adaptive methods that use smaller
squares near entopy or the interface, would be best.. some use it in
deep water.

-I noticed the line seg object could not break the bubbles. I think the
circle did pushes them. I like how I could stir the bottom and slosh the
whole thing.

-But for a numerical wave take with some length , it seems it needs
plenty
of speed up. I see new ways to get find surface detail from coarse grids.
and for vortons, it would nee to treat rollups with a fine mesh or
perhaps using vorton particles, or blobs of them.

-the bubbles could be compressible, that would be a nice look if
resolved.

-I would love to see a sample of a breaking , overturning , air gulping
wave. I can now have the wind blow on way or the other and see the effect
:)

-toward the breaker should make a barrel, in the wave direction (
onshore) , should make a mess.. ( i can see the wind blow on the water).

I could not figure out how to change the density ratio, or any buoyancy
parameters .. 10 might be enough , 100 or 1000 is the reality.. but a
buoyancy factor would be enough.

  • The functions did not have enough comment so i could find how to set
    the
    gravity direction, or strength, the viscosity, the density ..

-would it be hard to add temperature? I would think that just advects
simply, with the fluid, diffuses, also.. then, adds to the buoyancy if
the air is hotter than the water.

-adaptive features such as grid refinement would give the most reward..
probably..

I am still not sure if this code is the right path for me, I like the
idea
of a flapping bird in air and this method is the most complete. I use a
simple drag / flux model, for fish locomotion, and it worked fine. But
the
IB is supposed to be the best way to react to the reef contours,
hillsides, and the AMG method one of the fastest. But i am no expert i am
reading papers every day and never feel like I know enough.

I installed Jasmine to processing, didnt notice much of a difference... (
on PC, windows 10 , latest processing,) the ball does move the bubbles,
they do go up. I would like a 100 to 1 density ratio ( is that close to
water /air?)... the air could be compressible... should be.. 10 to 1
would be enough.. But i think i need to added gravity.

is there a less frendly and more performant code I could look at? I
though i saw some code that calculated the breaking bow waves on a vessel
from your team.. at MIT ? should i try the MarineHydro/lessons/?
is it true the code is 1st order accurate, you stated long ago.. but i
saw some notes on RK and I see plenty of vorticity, almost too much.

I now found some new flip code that is adaptive both with the size of the
mesh and the sph particles, using a tetrahedron grid, but it is only one
phase. I can clearly see the wind blowing on the surface here and i think
i don't want to do without that...

If i see a nice breaking wave demo, maybe i can fix some of this stuff...
but i dont konw java, c# in not much different though.

CBatty's variational cut cell method promises a coupling. it is using a
complex conjugate..

I tried compling the java, so i think the main issue is the buffers, and
something else...

i am gong to give a quick try to this: reuse the buffers by making
classes static. A map might need to be implemented but heap churn in the
loop and allocations are expensive so im sure it worth it. If worker
threading, each thread can have its own buffers, mapped by thread id...

static class MG{
PoissonMatrix A;
static Field r, x;

int iter=0;

float tol=1e-5;

MG( PoissonMatrix pA, Field X, Field B ){
A = pA;
x = X;
r = new Field(x.n,x.m,0,tol);
tol = r.inner(r);
r = A.residual(b,x);
}

[image: Inline image 2]

air is to thin, water not dense enoug.....

I am only 5 month into CFL ,[image: Inline image 1]
so i am hoping ot find code that matches since my project focus is an
walking creatures, and walking on boats now..

But runing at 2^ 6 2,^ 5 gives me barely interactive speeds.

for 2d i was hoping to do the full NS... not using some hacks..

i still dont understand "periodic" boundary conditions, if there is only
one period in the window... with buffers on the margins... because the
FFT pressure solve scales the best ..

On Mon, Sep 5, 2016 at 9:33 PM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Thanks. I dont think its a bug. I think its an issue of rendering, or
maybe an additional feature like adaptive methods , cells of different
sizes, near the high entropy area, would help. I wrote an enormous
email describing what i would like to use the code for ( breaking
waves,
thin paneled boats , and surfer-eating fishes) for an educational and
entertaining simulation game for disabled kids that cant go surfing
outside. I hope you don't mind it.

i am looking all over the internet..
ShadowFax uses a moving grid, and another scheme based on VOF uses a
triangle grid has some advantages over the voronoi one.

On Mon, Sep 5, 2016 at 4:49 PM, Dr Weymouth notifications@github.com
wrote:

I'm sorry, what exactly is the issue you are reporting? The only
issues
I
see are in your title.

The first issue in the title is that the solver must be a power of 2,
but
this is not quite right. The number of point in each direction needs
to
be
proportional to a large power of 2. This is because the multi-grid
solver
interactively "restricts" the domain by a factor of two in each
direction.
It will be much more efficient if the solver can do that at least
three
times, and more is better.

As for the second issue in the title: If n is the total number of
points,
the the fluid routines in the code are O(n) except for the multi-grid
solver which is O(n log n). However, if you double the points in both
x
and
y, then this is increasing n by a factor of 4. In addition, if you
double
the resolution then running a certain simulation (say two cycles of
bluff
body shedding) will require (about) twice as many time steps.

Hope that helps.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10 (comment)
-244692953
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_
LmTEPVm6vYGR0C38dtqSdNzmVqZdhks5qm9eagaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
<https://github.com/notifications/unsubscribe-auth/
AAclJ08PSienC_VMAPiybqmbto02xiXdks5qnU5HgaJpZM4JwAR9>

.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmbbeHrfDeVS-aqAyoFAgQIk8OekAks5qnWNfgaJpZM4JwAR9
.

@damian-666
Copy link
Author

Hello again,

i think made a little progress on the two phase "wave tank"....I hope i
didnt miss anything, but i think the two phase sloshing with bubbles works,
but is often unstable and thats the cause of the stalling, slowness, and
leaking processing modules. I tried the simplest two- phase i could
make, set the air to water ratio to 1/10, and got some decent sloshing
with tuning of the MG smoother iterations and other params.

but for my simulations even with 1/10 density and a small immersed
boundary, I can't get a stable solve without a lucky tuning. And three of
teh papers explain that is expected. So they use MG as a preconditioner
for a Conjugate Gradient solve . So i think the two- phase is not stable
enough and that is the main cause of the stalling. The papers all show
nicely deformed bubbles and details.

i hope to try it because it looks good when it works , but . , in the
papers, they examine all the boundaries inside, consider the types.
they reuse the buffers , work in parallel when possible, and this one
claims to handle 800 to 1 density. " A parallel multigrid Poisson solver
for fluids simulation on large grids" -Disney, McAdams.

if I find a robust solver i can port to java and switch in i will try..
but I am running out of time and might not be able to do it ( if you
think it is the right plan). Here is what i dug up..

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.457.5625&rep=rep1&type=pdf

https://wissrech.ins.uni-bonn.de/research/projects/amg/
Project C2: Adaptive and robust multigrid methods for space time
discretizations
http://sfb611.iam.uni-bonn.de/subproject.php?id=25&lang=enDevelopment
of CFD Code NaSt3DGP
http://wissrech.ins.uni-bonn.de/research/projects/NaSt3DGP/index.htmHigh-Performance
Parallel Computing
http://wissrech.ins.uni-bonn.de/research/himalaya/index.html

code licenses are ok....

http://www.prace-ri.eu/IMG/pdf/scalable-tools-for-fem-applications.pdf

BoomerAMG of HYPRE code of the Laurence Livermore National Laboratory
(LLNL), USA
http://computation.llnl.gov/sites/default/files/public/hypre-2.11.1_ref_manual.pdf

I use a c++ to c# converter.. there probably is one for java... i found
one AMR poison solvers in Chombo but it is commented out.. s

also , i find papers that say FFT pressure solves can work with immersed
boundaries if the ends are periodic ( or one can put dampers or boundaries,
unseen in the margins so that stuff doesnt wrap around ..or move the Y ,
or use IB as boundaries) STAM fft 01 autodesk paper , a method like
that.. But solving the poisson in these papers with a MG.+ CG. similar to
what is there, seems better and can be just as fast.

my code was last like this but i feel its unstable more often than
not.... unless i missed a piece..

FloodPlot flood;

Body body;

// flow = new TwoPhase(n,m,2,0.01);
// flow.f.eq(0,m,n+2,0,m+2);
// flow.u = new VectorField(n+2,m+2,0,0);

TwoPhase flow;

void setup() {
int n=(int)pow(2, 6)*2;

int m=(int)pow(2, 5)*1;

// size ( 400, 300);

Window view = new Window(n,n/2);
float L = n/8.;

body = new CircleBody(n/3, m/2, L/2, view); // define geom

flow = new TwoPhase(n,m,2,0.05);
flow.f.eq(0.8,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0.02,0);

// length-scale in grid units
//body = new CircleBody(n/3,n/2,L,view); // define geom

}

/*
TwoPhase( int n, int m, float dt, Body body, float nu, boolean QUICK,
float g, float gamma ){
super( n, m, dt, body, nu, QUICK);
f = new FreeInterface( this.n, this.m, gamma );
f0 = new FreeInterface( this.n, this.m, gamma );
this.g.y = g;
}
TwoPhase( int n, int m, float dt, float g ){
this( n, m, dt, new CircleBody(-10.,-10.,0.,new Window()), 0, false, g,
0.1);
};
*/

void draw() {

body.follow();                             // update the body

flow.update(body);
//flow.update();

flow.update2();
flow.f.display(0.1,1);
body.display();

// flood.display(flow.u.curl());

}

/***
void setup(){
int n=(int)pow(2,7), m=(int)pow(2,6);
flow = new TwoPhase(n,m,2,0.01);
flow.f.eq(0,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0,0);
}

void draw(){
flow.update();
flow.update2();
flow.f.display();
}
******/

void settings()
{
size(600, 150);
}

On Tue, Sep 6, 2016 at 9:58 PM, Damian Hallbauer <damian.hallbauer@gmail.com

wrote:

op, i just pulled up my processing to try another scheme and see that all
the sessions i made were still running. as leaked process, when it didn't
solve, . so the latest processing leaks it, i have to use task manager
to close them. . so now i close them all and i get a decent
performance boost.

out of the box, this code does more and is organized better than the
other ones ive looked at.. Most of which i cannot even get to compile

But reusing those buffers i always have optimized first, pretty sure
that would be worth it.

and thinking about SIMD is something, flattening the buffers to 1d, i
learned from this CFD code research.

i can try to do it but my project is 2 years overdue and it might get
closed down for a while. but do you think this code is right for making
a breaking wave? with winds on it? if there is a test case please let
me know And if there is no sample i can figure out most of it ... i ame
guessing to make a union of stuff to put on the bottom.. and then make a
wave pusher thing to generate the waves....

But if you can point me to how to set

*viscosity , fluid density, gravity direction, ( or general acceleration)
, bouyancy, *( for two phase)... i was adjusting parameters but
without really knowing .. i can figure it all out if it in there
somewhere.

Adding heat is not hard... but I had to hack to figure out how to adjust
the density ratio.

Im learning python, processing, fortran90. java, shaders opencl,.. all
for this CFD because it fits so well with my creatures.. Emergent stuff
like weather comes from heat so i want to do alot with the Air Field.

My project is 2 years overdue and I think i have read over 300 papers.
i might just need to ask general stuff sometimes. I can probably figure
it out but I don't understand Algebraic multgrid, nor an easy way to make
it adaptive, but i probably have the paper somewhere.

thanks for makeing this code available., it might be my best water
solution and have several dust schemes that can work..

On Tue, Sep 6, 2016 at 8:58 PM, Dr Weymouth notifications@github.com
wrote:

My role in this open source project is to help people use and update lily
pad.

If you have a bug, or usage question, then I'll try to help fix/answer it.
If you can put some time into optimising the memory allocation, that would
be great. I'm not a computer scientist, so I could use help with that. If
you make a change and send a pull request then everyone else will benefit
from your work on it. Same for multi-threading (which I am about to start
working on myself). Same for adaptive mesh refinement.

This is my understanding of how open source works.

So, if you're interested in making lily pad better for everyone, then pick
one item and make it better. That would be great.

On Sep 6, 2016 19:28, "damian-666" notifications@github.com wrote:

Hello again.. maybe the last email was all over the place but I have
some
well defined issues now .

I got the two phase to work but I am not sure if it is working as well
as
it could. The main issue is performance. for first pass , I noticed
that the MG solver is reallocating the MG solver instance, and its
arrays
every call. There is a lot of that and for every field with the whole
grid...as well. For the solver , i think it could have one instance of
the solver, and a buffer PoissonMatrix A and a buffer B for the fields
passed in.
A hash table or map could associate the field with data if needed... I
am trying a quick use of static.. so that the data is kept in place, not
moved around and reallocated, which , in a loop can be fragmenting
memory
and require garbage collecting and compacting. I noticed when i put 3
grids in a row like a chimera that the GC was stuttering.. that was the
first hint of buffer issues.

static class MG{
PoissonMatrix A;
static Field r, x;

SIMD processing :
the arrays could be made to 1d ( not sure if that matters) , but to take
advantage of SIMD some care has to be taken with rows and columns of
arrays should be as laid out in memory. so i think columns on the outer
loop for 2d array.. one or the other. I have seen big boosts with code
that has SIMD friendly loops without branches

t when I move the circle near the surface, it is very slow... Even an
stutter and hang up.. not explode, but stall..

i loaded http://www.lagers.org.uk/jasmine/ but i see no difference..
nothing compelling about it..

If there is parallelization to be done, i think that could be next, but
i
am not sure with Algebraic MG?. adaptive methods that use smaller
squares near entopy or the interface, would be best.. some use it in
deep water.

-I noticed the line seg object could not break the bubbles. I think the
circle did pushes them. I like how I could stir the bottom and slosh the
whole thing.

-But for a numerical wave take with some length , it seems it needs
plenty
of speed up. I see new ways to get find surface detail from coarse
grids.
and for vortons, it would nee to treat rollups with a fine mesh or
perhaps using vorton particles, or blobs of them.

-the bubbles could be compressible, that would be a nice look if
resolved.

-I would love to see a sample of a breaking , overturning , air gulping
wave. I can now have the wind blow on way or the other and see the
effect
:)

-toward the breaker should make a barrel, in the wave direction (
onshore) , should make a mess.. ( i can see the wind blow on the water).

I could not figure out how to change the density ratio, or any buoyancy
parameters .. 10 might be enough , 100 or 1000 is the reality.. but a
buoyancy factor would be enough.

  • The functions did not have enough comment so i could find how to set
    the
    gravity direction, or strength, the viscosity, the density ..

-would it be hard to add temperature? I would think that just advects
simply, with the fluid, diffuses, also.. then, adds to the buoyancy if
the air is hotter than the water.

-adaptive features such as grid refinement would give the most reward..
probably..

I am still not sure if this code is the right path for me, I like the
idea
of a flapping bird in air and this method is the most complete. I use a
simple drag / flux model, for fish locomotion, and it worked fine. But
the
IB is supposed to be the best way to react to the reef contours,
hillsides, and the AMG method one of the fastest. But i am no expert i
am
reading papers every day and never feel like I know enough.

I installed Jasmine to processing, didnt notice much of a difference...
(
on PC, windows 10 , latest processing,) the ball does move the bubbles,
they do go up. I would like a 100 to 1 density ratio ( is that close to
water /air?)... the air could be compressible... should be.. 10 to 1
would be enough.. But i think i need to added gravity.

is there a less frendly and more performant code I could look at? I
though i saw some code that calculated the breaking bow waves on a
vessel
from your team.. at MIT ? should i try the MarineHydro/lessons/?
is it true the code is 1st order accurate, you stated long ago.. but i
saw some notes on RK and I see plenty of vorticity, almost too much.

I now found some new flip code that is adaptive both with the size of
the
mesh and the sph particles, using a tetrahedron grid, but it is only one
phase. I can clearly see the wind blowing on the surface here and i
think
i don't want to do without that...

If i see a nice breaking wave demo, maybe i can fix some of this
stuff...
but i dont konw java, c# in not much different though.

CBatty's variational cut cell method promises a coupling. it is using a
complex conjugate..

I tried compling the java, so i think the main issue is the buffers, and
something else...

i am gong to give a quick try to this: reuse the buffers by making
classes static. A map might need to be implemented but heap churn in the
loop and allocations are expensive so im sure it worth it. If worker
threading, each thread can have its own buffers, mapped by thread id...

static class MG{
PoissonMatrix A;
static Field r, x;

int iter=0;

float tol=1e-5;

MG( PoissonMatrix pA, Field X, Field B ){
A = pA;
x = X;
r = new Field(x.n,x.m,0,tol);
tol = r.inner(r);
r = A.residual(b,x);
}

[image: Inline image 2]

air is to thin, water not dense enoug.....

I am only 5 month into CFL ,[image: Inline image 1]
so i am hoping ot find code that matches since my project focus is an
walking creatures, and walking on boats now..

But runing at 2^ 6 2,^ 5 gives me barely interactive speeds.

for 2d i was hoping to do the full NS... not using some hacks..

i still dont understand "periodic" boundary conditions, if there is only
one period in the window... with buffers on the margins... because the
FFT pressure solve scales the best ..

On Mon, Sep 5, 2016 at 9:33 PM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Thanks. I dont think its a bug. I think its an issue of rendering, or
maybe an additional feature like adaptive methods , cells of different
sizes, near the high entropy area, would help. I wrote an enormous
email describing what i would like to use the code for ( breaking
waves,
thin paneled boats , and surfer-eating fishes) for an educational and
entertaining simulation game for disabled kids that cant go surfing
outside. I hope you don't mind it.

i am looking all over the internet..
ShadowFax uses a moving grid, and another scheme based on VOF uses a
triangle grid has some advantages over the voronoi one.

On Mon, Sep 5, 2016 at 4:49 PM, Dr Weymouth <notifications@github.com

wrote:

I'm sorry, what exactly is the issue you are reporting? The only
issues
I
see are in your title.

The first issue in the title is that the solver must be a power of 2,
but
this is not quite right. The number of point in each direction needs
to
be
proportional to a large power of 2. This is because the multi-grid
solver
interactively "restricts" the domain by a factor of two in each
direction.
It will be much more efficient if the solver can do that at least
three
times, and more is better.

As for the second issue in the title: If n is the total number of
points,
the the fluid routines in the code are O(n) except for the multi-grid
solver which is O(n log n). However, if you double the points in
both x
and
y, then this is increasing n by a factor of 4. In addition, if you
double
the resolution then running a certain simulation (say two cycles of
bluff
body shedding) will require (about) twice as many time steps.

Hope that helps.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10 (comment)
-244692953
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_
LmTEPVm6vYGR0C38dtqSdNzmVqZdhks5qm9eagaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#10 (comment)
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAclJ08PS
ienC_VMAPiybqmbto02xiXdks5qnU5HgaJpZM4JwAR9>

.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmbbeHrfDeVS-aqAyoFAgQIk8OekAks5qnWNfgaJpZM4JwAR9
.

@damian-666
Copy link
Author

hello again, sorry to bug you bug im runny out of time, need guidance on
LilyPad.. two phase and free boundary.

I read in your wikik that the iVof and the two phase is still under
development. But is anyone actively doing so?

But my focus is on swimmers and walkers in 2d... I dont know if a
volcano will explode or the flying wing will be driver to the water... take
in water ... sink while emitting bubbles. so i need unconditionally
stable. I don't need compressible or shocks. For an interactive
simulation it must be pretty stable under most conditions.

Incremental fluids" code on github has given me multi density , dust in the
air...stratified... One phase.

But in a port of that ot java, I found a solver for CG in Java... it
is preconditioned by *incomplete Cholesky preconditioner... not AMG .. *

here is a java version of the CG solver but with a different
preconditioner. I dont know if AMG and this would be right or the fastest
way to get the two phase code stable.

https://github.com/noSoulApophis/incremental-fluids-java/blob/master/src/
physics/EulerianFluids/ExplicitFluid3conjugateGradients.java

I dont konw if i am qualified to fix the two phase in Lilypad. i am self
taught in CFD.. just a newbie. My focus for 5 years. has been creature
locomotion and balance.. they walk on boards with thin hulls... I can add
that to air eating overturning two phase model, my demo will be
incredible,.... creatures walking on boats using just muscle and bone
power.

but unless you prescribe me a plan of action or proper test cases. for
waves crashing on a reef. and a body i can slosh around.. .. it, dont
want to risktime to work on this i need to return to America or to German
or Canada, i have 3 citizenships. This island with its waves
and creatures , currents , reefs, and total freedom to research , has
taught me alot but i think i need to go after 5 years.

I might try the Nast2d code, but i dont konw if i can put a fish in
that...

thanks, Damian Hallbauer ,
CEO and Sole Proprietor, Puppet Army Faction.

On Wed, Sep 7, 2016 at 7:47 AM, Damian Hallbauer <damian.hallbauer@gmail.com

wrote:

Hello again,

i think made a little progress on the two phase "wave tank"....I hope i
didnt miss anything, but i think the two phase sloshing with bubbles works,
but is often unstable and thats the cause of the stalling, slowness, and
leaking processing modules. I tried the simplest two- phase i could
make, set the air to water ratio to 1/10, and got some decent sloshing
with tuning of the MG smoother iterations and other params.

but for my simulations even with 1/10 density and a small immersed
boundary, I can't get a stable solve without a lucky tuning. And three of
teh papers explain that is expected. So they use MG as a preconditioner
for a Conjugate Gradient solve . So i think the two- phase is not stable
enough and that is the main cause of the stalling. The papers all show
nicely deformed bubbles and details.

i hope to try it because it looks good when it works , but . , in the
papers, they examine all the boundaries inside, consider the types.
they reuse the buffers , work in parallel when possible, and this one
claims to handle 800 to 1 density. " A parallel multigrid Poisson solver
for fluids simulation on large grids" -Disney, McAdams.

if I find a robust solver i can port to java and switch in i will
try.. but I am running out of time and might not be able to do it ( if
you think it is the right plan). Here is what i dug up..

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.457
.5625&rep=rep1&type=pdf

https://wissrech.ins.uni-bonn.de/research/projects/amg/
Project C2: Adaptive and robust multigrid methods for space time
discretizations
http://sfb611.iam.uni-bonn.de/subproject.php?id=25&lang=enDevelopment
of CFD Code NaSt3DGP
http://wissrech.ins.uni-bonn.de/research/projects/NaSt3DGP/index.htmHigh-Performance
Parallel Computing
http://wissrech.ins.uni-bonn.de/research/himalaya/index.html

code licenses are ok....

http://www.prace-ri.eu/IMG/pdf/scalable-tools-for-fem-applications.pdf

BoomerAMG of HYPRE code of the Laurence Livermore National Laboratory
(LLNL), USA
http://computation.llnl.gov/sites/default/files/public/hypre
-2.11.1_ref_manual.pdf

I use a c++ to c# converter.. there probably is one for java... i found
one AMR poison solvers in Chombo but it is commented out.. s

also , i find papers that say FFT pressure solves can work with immersed
boundaries if the ends are periodic ( or one can put dampers or boundaries,
unseen in the margins so that stuff doesnt wrap around ..or move the Y ,
or use IB as boundaries) STAM fft 01 autodesk paper , a method like
that.. But solving the poisson in these papers with a MG.+ CG. similar to
what is there, seems better and can be just as fast.

my code was last like this but i feel its unstable more often than
not.... unless i missed a piece..

FloodPlot flood;

Body body;

// flow = new TwoPhase(n,m,2,0.01);
// flow.f.eq(0,m,n+2,0,m+2);
// flow.u = new VectorField(n+2,m+2,0,0);

TwoPhase flow;

void setup() {
int n=(int)pow(2, 6)*2;

int m=(int)pow(2, 5)*1;

// size ( 400, 300);

Window view = new Window(n,n/2);
float L = n/8.;

body = new CircleBody(n/3, m/2, L/2, view); // define geom

flow = new TwoPhase(n,m,2,0.05);
flow.f.eq(0.8,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0.02,0);

// length-scale in grid units
//body = new CircleBody(n/3,n/2,L,view); // define geom

}

/*
TwoPhase( int n, int m, float dt, Body body, float nu, boolean QUICK,
float g, float gamma ){
super( n, m, dt, body, nu, QUICK);
f = new FreeInterface( this.n, this.m, gamma );
f0 = new FreeInterface( this.n, this.m, gamma );
this.g.y = g;
}
TwoPhase( int n, int m, float dt, float g ){
this( n, m, dt, new CircleBody(-10.,-10.,0.,new Window()), 0, false, g,
0.1);
};
*/

void draw() {

body.follow();                             // update the body

flow.update(body);
//flow.update();

flow.update2();
flow.f.display(0.1,1);
body.display();

// flood.display(flow.u.curl());

}

/***
void setup(){
int n=(int)pow(2,7), m=(int)pow(2,6);
flow = new TwoPhase(n,m,2,0.01);
flow.f.eq(0,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0,0);
}

void draw(){
flow.update();
flow.update2();
flow.f.display();
}
******/

void settings()
{
size(600, 150);
}

On Tue, Sep 6, 2016 at 9:58 PM, Damian Hallbauer <
damian.hallbauer@gmail.com> wrote:

op, i just pulled up my processing to try another scheme and see that
all the sessions i made were still running. as leaked process, when it
didn't solve, . so the latest processing leaks it, i have to use task
manager to close them. . so now i close them all and i get a decent
performance boost.

out of the box, this code does more and is organized better than the
other ones ive looked at.. Most of which i cannot even get to compile

But reusing those buffers i always have optimized first, pretty sure
that would be worth it.

and thinking about SIMD is something, flattening the buffers to 1d, i
learned from this CFD code research.

i can try to do it but my project is 2 years overdue and it might get
closed down for a while. but do you think this code is right for making
a breaking wave? with winds on it? if there is a test case please let
me know And if there is no sample i can figure out most of it ... i ame
guessing to make a union of stuff to put on the bottom.. and then make a
wave pusher thing to generate the waves....

But if you can point me to how to set

*viscosity , fluid density, gravity direction, ( or general
acceleration) , bouyancy, *( for two phase)... i was adjusting
parameters but without really knowing .. i can figure it all out if it in
there somewhere.

Adding heat is not hard... but I had to hack to figure out how to adjust
the density ratio.

Im learning python, processing, fortran90. java, shaders opencl,.. all
for this CFD because it fits so well with my creatures.. Emergent stuff
like weather comes from heat so i want to do alot with the Air Field.

My project is 2 years overdue and I think i have read over 300 papers.
i might just need to ask general stuff sometimes. I can probably figure
it out but I don't understand Algebraic multgrid, nor an easy way to make
it adaptive, but i probably have the paper somewhere.

thanks for makeing this code available., it might be my best water
solution and have several dust schemes that can work..

On Tue, Sep 6, 2016 at 8:58 PM, Dr Weymouth notifications@github.com
wrote:

My role in this open source project is to help people use and update lily
pad.

If you have a bug, or usage question, then I'll try to help fix/answer
it.
If you can put some time into optimising the memory allocation, that
would
be great. I'm not a computer scientist, so I could use help with that. If
you make a change and send a pull request then everyone else will benefit
from your work on it. Same for multi-threading (which I am about to start
working on myself). Same for adaptive mesh refinement.

This is my understanding of how open source works.

So, if you're interested in making lily pad better for everyone, then
pick
one item and make it better. That would be great.

On Sep 6, 2016 19:28, "damian-666" notifications@github.com wrote:

Hello again.. maybe the last email was all over the place but I have
some
well defined issues now .

I got the two phase to work but I am not sure if it is working as well
as
it could. The main issue is performance. for first pass , I noticed
that the MG solver is reallocating the MG solver instance, and its
arrays
every call. There is a lot of that and for every field with the whole
grid...as well. For the solver , i think it could have one instance of
the solver, and a buffer PoissonMatrix A and a buffer B for the fields
passed in.
A hash table or map could associate the field with data if needed... I
am trying a quick use of static.. so that the data is kept in place,
not
moved around and reallocated, which , in a loop can be fragmenting
memory
and require garbage collecting and compacting. I noticed when i put 3
grids in a row like a chimera that the GC was stuttering.. that was the
first hint of buffer issues.

static class MG{
PoissonMatrix A;
static Field r, x;

SIMD processing :
the arrays could be made to 1d ( not sure if that matters) , but to
take
advantage of SIMD some care has to be taken with rows and columns of
arrays should be as laid out in memory. so i think columns on the outer
loop for 2d array.. one or the other. I have seen big boosts with code
that has SIMD friendly loops without branches

t when I move the circle near the surface, it is very slow... Even an
stutter and hang up.. not explode, but stall..

i loaded http://www.lagers.org.uk/jasmine/ but i see no difference..
nothing compelling about it..

If there is parallelization to be done, i think that could be next,
but i
am not sure with Algebraic MG?. adaptive methods that use smaller
squares near entopy or the interface, would be best.. some use it in
deep water.

-I noticed the line seg object could not break the bubbles. I think the
circle did pushes them. I like how I could stir the bottom and slosh
the
whole thing.

-But for a numerical wave take with some length , it seems it needs
plenty
of speed up. I see new ways to get find surface detail from coarse
grids.
and for vortons, it would nee to treat rollups with a fine mesh or
perhaps using vorton particles, or blobs of them.

-the bubbles could be compressible, that would be a nice look if
resolved.

-I would love to see a sample of a breaking , overturning , air gulping
wave. I can now have the wind blow on way or the other and see the
effect
:)

-toward the breaker should make a barrel, in the wave direction (
onshore) , should make a mess.. ( i can see the wind blow on the
water).

I could not figure out how to change the density ratio, or any buoyancy
parameters .. 10 might be enough , 100 or 1000 is the reality.. but a
buoyancy factor would be enough.

  • The functions did not have enough comment so i could find how to set
    the
    gravity direction, or strength, the viscosity, the density ..

-would it be hard to add temperature? I would think that just advects
simply, with the fluid, diffuses, also.. then, adds to the buoyancy if
the air is hotter than the water.

-adaptive features such as grid refinement would give the most reward..
probably..

I am still not sure if this code is the right path for me, I like the
idea
of a flapping bird in air and this method is the most complete. I use a
simple drag / flux model, for fish locomotion, and it worked fine. But
the
IB is supposed to be the best way to react to the reef contours,
hillsides, and the AMG method one of the fastest. But i am no expert i
am
reading papers every day and never feel like I know enough.

I installed Jasmine to processing, didnt notice much of a
difference... (
on PC, windows 10 , latest processing,) the ball does move the bubbles,
they do go up. I would like a 100 to 1 density ratio ( is that close to
water /air?)... the air could be compressible... should be.. 10 to 1
would be enough.. But i think i need to added gravity.

is there a less frendly and more performant code I could look at? I
though i saw some code that calculated the breaking bow waves on a
vessel
from your team.. at MIT ? should i try the MarineHydro/lessons/?
is it true the code is 1st order accurate, you stated long ago.. but i
saw some notes on RK and I see plenty of vorticity, almost too much.

I now found some new flip code that is adaptive both with the size of
the
mesh and the sph particles, using a tetrahedron grid, but it is only
one
phase. I can clearly see the wind blowing on the surface here and i
think
i don't want to do without that...

If i see a nice breaking wave demo, maybe i can fix some of this
stuff...
but i dont konw java, c# in not much different though.

CBatty's variational cut cell method promises a coupling. it is using a
complex conjugate..

I tried compling the java, so i think the main issue is the buffers,
and
something else...

i am gong to give a quick try to this: reuse the buffers by making
classes static. A map might need to be implemented but heap churn in
the
loop and allocations are expensive so im sure it worth it. If worker
threading, each thread can have its own buffers, mapped by thread id...

static class MG{
PoissonMatrix A;
static Field r, x;

int iter=0;

float tol=1e-5;

MG( PoissonMatrix pA, Field X, Field B ){
A = pA;
x = X;
r = new Field(x.n,x.m,0,tol);
tol = r.inner(r);
r = A.residual(b,x);
}

[image: Inline image 2]

air is to thin, water not dense enoug.....

I am only 5 month into CFL ,[image: Inline image 1]
so i am hoping ot find code that matches since my project focus is an
walking creatures, and walking on boats now..

But runing at 2^ 6 2,^ 5 gives me barely interactive speeds.

for 2d i was hoping to do the full NS... not using some hacks..

i still dont understand "periodic" boundary conditions, if there is
only
one period in the window... with buffers on the margins... because the
FFT pressure solve scales the best ..

On Mon, Sep 5, 2016 at 9:33 PM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Thanks. I dont think its a bug. I think its an issue of rendering, or
maybe an additional feature like adaptive methods , cells of
different
sizes, near the high entropy area, would help. I wrote an enormous
email describing what i would like to use the code for ( breaking
waves,
thin paneled boats , and surfer-eating fishes) for an educational and
entertaining simulation game for disabled kids that cant go surfing
outside. I hope you don't mind it.

i am looking all over the internet..
ShadowFax uses a moving grid, and another scheme based on VOF uses a
triangle grid has some advantages over the voronoi one.

On Mon, Sep 5, 2016 at 4:49 PM, Dr Weymouth <
notifications@github.com>
wrote:

I'm sorry, what exactly is the issue you are reporting? The only
issues
I
see are in your title.

The first issue in the title is that the solver must be a power of
2,
but
this is not quite right. The number of point in each direction
needs to
be
proportional to a large power of 2. This is because the multi-grid
solver
interactively "restricts" the domain by a factor of two in each
direction.
It will be much more efficient if the solver can do that at least
three
times, and more is better.

As for the second issue in the title: If n is the total number of
points,
the the fluid routines in the code are O(n) except for the
multi-grid
solver which is O(n log n). However, if you double the points in
both x
and
y, then this is increasing n by a factor of 4. In addition, if you
double
the resolution then running a certain simulation (say two cycles of
bluff
body shedding) will require (about) twice as many time steps.

Hope that helps.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10 (comment)
-244692953
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_
LmTEPVm6vYGR0C38dtqSdNzmVqZdhks5qm9eagaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#10 (comment)
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAclJ08PS
ienC_VMAPiybqmbto02xiXdks5qnU5HgaJpZM4JwAR9>

.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmbbeHrfDeVS-aqAyoFAgQIk8OekAks5qnWNfgaJpZM4JwAR9
.

@weymouth
Copy link
Owner

weymouth commented Sep 8, 2016

What's the problem with the current two phase implantation? Can you
describe it concretely in two sentences and send me a minimal example that
replicates the problem?

On Sep 8, 2016 19:42, "damian-666" notifications@github.com wrote:

hello again, sorry to bug you bug im runny out of time, need guidance on
LilyPad.. two phase and free boundary.

I read in your wikik that the iVof and the two phase is still under
development. But is anyone actively doing so?

But my focus is on swimmers and walkers in 2d... I dont know if a
volcano will explode or the flying wing will be driver to the water... take
in water ... sink while emitting bubbles. so i need unconditionally
stable. I don't need compressible or shocks. For an interactive
simulation it must be pretty stable under most conditions.

Incremental fluids" code on github has given me multi density , dust in the
air...stratified... One phase.

But in a port of that ot java, I found a solver for CG in Java... it
is preconditioned by *incomplete Cholesky preconditioner... not AMG .. *

here is a java version of the CG solver but with a different
preconditioner. I dont know if AMG and this would be right or the fastest
way to get the two phase code stable.

https://github.com/noSoulApophis/incremental-fluids-java/blob/master/src/
physics/EulerianFluids/ExplicitFluid3conjugateGradients.java

I dont konw if i am qualified to fix the two phase in Lilypad. i am self
taught in CFD.. just a newbie. My focus for 5 years. has been creature
locomotion and balance.. they walk on boards with thin hulls... I can add
that to air eating overturning two phase model, my demo will be
incredible,.... creatures walking on boats using just muscle and bone
power.

but unless you prescribe me a plan of action or proper test cases. for
waves crashing on a reef. and a body i can slosh around.. .. it, dont
want to risktime to work on this i need to return to America or to German
or Canada, i have 3 citizenships. This island with its waves
and creatures , currents , reefs, and total freedom to research , has
taught me alot but i think i need to go after 5 years.

I might try the Nast2d code, but i dont konw if i can put a fish in
that...

thanks, Damian Hallbauer ,
CEO and Sole Proprietor, Puppet Army Faction.

On Wed, Sep 7, 2016 at 7:47 AM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Hello again,

i think made a little progress on the two phase "wave tank"....I hope i
didnt miss anything, but i think the two phase sloshing with bubbles
works,
but is often unstable and thats the cause of the stalling, slowness, and
leaking processing modules. I tried the simplest two- phase i could
make, set the air to water ratio to 1/10, and got some decent sloshing
with tuning of the MG smoother iterations and other params.

but for my simulations even with 1/10 density and a small immersed
boundary, I can't get a stable solve without a lucky tuning. And three of
teh papers explain that is expected. So they use MG as a preconditioner
for a Conjugate Gradient solve . So i think the two- phase is not stable
enough and that is the main cause of the stalling. The papers all show
nicely deformed bubbles and details.

i hope to try it because it looks good when it works , but . , in the
papers, they examine all the boundaries inside, consider the types.
they reuse the buffers , work in parallel when possible, and this one
claims to handle 800 to 1 density. " A parallel multigrid Poisson solver
for fluids simulation on large grids" -Disney, McAdams.

if I find a robust solver i can port to java and switch in i will
try.. but I am running out of time and might not be able to do it ( if
you think it is the right plan). Here is what i dug up..

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.457
.5625&rep=rep1&type=pdf

https://wissrech.ins.uni-bonn.de/research/projects/amg/
Project C2: Adaptive and robust multigrid methods for space time
discretizations
http://sfb611.iam.uni-bonn.de/subproject.php?id=25&lang=enDevelopment
of CFD Code NaSt3DGP
<http://wissrech.ins.uni-bonn.de/research/projects/NaSt3DGP/index.htm
High-Performance
Parallel Computing
http://wissrech.ins.uni-bonn.de/research/himalaya/index.html

code licenses are ok....

http://www.prace-ri.eu/IMG/pdf/scalable-tools-for-fem-applications.pdf

BoomerAMG of HYPRE code of the Laurence Livermore National Laboratory
(LLNL), USA
http://computation.llnl.gov/sites/default/files/public/hypre
-2.11.1_ref_manual.pdf

I use a c++ to c# converter.. there probably is one for java... i found
one AMR poison solvers in Chombo but it is commented out.. s

also , i find papers that say FFT pressure solves can work with immersed
boundaries if the ends are periodic ( or one can put dampers or
boundaries,
unseen in the margins so that stuff doesnt wrap around ..or move the Y ,
or use IB as boundaries) STAM fft 01 autodesk paper , a method like
that.. But solving the poisson in these papers with a MG.+ CG. similar to
what is there, seems better and can be just as fast.

my code was last like this but i feel its unstable more often than
not.... unless i missed a piece..

FloodPlot flood;

Body body;

// flow = new TwoPhase(n,m,2,0.01);
// flow.f.eq(0,m,n+2,0,m+2);
// flow.u = new VectorField(n+2,m+2,0,0);

TwoPhase flow;

void setup() {
int n=(int)pow(2, 6)*2;

int m=(int)pow(2, 5)*1;

// size ( 400, 300);

Window view = new Window(n,n/2);
float L = n/8.;

body = new CircleBody(n/3, m/2, L/2, view); // define geom

flow = new TwoPhase(n,m,2,0.05);
flow.f.eq(0.8,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0.02,0);

// length-scale in grid units
//body = new CircleBody(n/3,n/2,L,view); // define geom

}

/*
TwoPhase( int n, int m, float dt, Body body, float nu, boolean QUICK,
float g, float gamma ){
super( n, m, dt, body, nu, QUICK);
f = new FreeInterface( this.n, this.m, gamma );
f0 = new FreeInterface( this.n, this.m, gamma );
this.g.y = g;
}
TwoPhase( int n, int m, float dt, float g ){
this( n, m, dt, new CircleBody(-10.,-10.,0.,new Window()), 0, false, g,
0.1);
};
*/

void draw() {

body.follow(); // update the body
flow.update(body);
//flow.update();

flow.update2();
flow.f.display(0.1,1);
body.display();

// flood.display(flow.u.curl());

}

/***
void setup(){
int n=(int)pow(2,7), m=(int)pow(2,6);
flow = new TwoPhase(n,m,2,0.01);
flow.f.eq(0,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0,0);
}

void draw(){
flow.update();
flow.update2();
flow.f.display();
}
******/

void settings()
{
size(600, 150);
}

On Tue, Sep 6, 2016 at 9:58 PM, Damian Hallbauer <
damian.hallbauer@gmail.com> wrote:

op, i just pulled up my processing to try another scheme and see that
all the sessions i made were still running. as leaked process, when it
didn't solve, . so the latest processing leaks it, i have to use task
manager to close them. . so now i close them all and i get a decent
performance boost.

out of the box, this code does more and is organized better than the
other ones ive looked at.. Most of which i cannot even get to compile

But reusing those buffers i always have optimized first, pretty sure
that would be worth it.

and thinking about SIMD is something, flattening the buffers to 1d, i
learned from this CFD code research.

i can try to do it but my project is 2 years overdue and it might get
closed down for a while. but do you think this code is right for making
a breaking wave? with winds on it? if there is a test case please let
me know And if there is no sample i can figure out most of it ... i ame
guessing to make a union of stuff to put on the bottom.. and then make a
wave pusher thing to generate the waves....

But if you can point me to how to set

*viscosity , fluid density, gravity direction, ( or general
acceleration) , bouyancy, *( for two phase)... i was adjusting
parameters but without really knowing .. i can figure it all out if it
in
there somewhere.

Adding heat is not hard... but I had to hack to figure out how to adjust
the density ratio.

Im learning python, processing, fortran90. java, shaders opencl,.. all
for this CFD because it fits so well with my creatures.. Emergent stuff
like weather comes from heat so i want to do alot with the Air Field.

My project is 2 years overdue and I think i have read over 300 papers.
i might just need to ask general stuff sometimes. I can probably figure
it out but I don't understand Algebraic multgrid, nor an easy way to
make
it adaptive, but i probably have the paper somewhere.

thanks for makeing this code available., it might be my best water
solution and have several dust schemes that can work..

On Tue, Sep 6, 2016 at 8:58 PM, Dr Weymouth notifications@github.com
wrote:

My role in this open source project is to help people use and update
lily
pad.

If you have a bug, or usage question, then I'll try to help fix/answer
it.
If you can put some time into optimising the memory allocation, that
would
be great. I'm not a computer scientist, so I could use help with that.
If
you make a change and send a pull request then everyone else will
benefit
from your work on it. Same for multi-threading (which I am about to
start
working on myself). Same for adaptive mesh refinement.

This is my understanding of how open source works.

So, if you're interested in making lily pad better for everyone, then
pick
one item and make it better. That would be great.

On Sep 6, 2016 19:28, "damian-666" notifications@github.com wrote:

Hello again.. maybe the last email was all over the place but I have
some
well defined issues now .

I got the two phase to work but I am not sure if it is working as
well
as
it could. The main issue is performance. for first pass , I noticed
that the MG solver is reallocating the MG solver instance, and its
arrays
every call. There is a lot of that and for every field with the whole
grid...as well. For the solver , i think it could have one instance
of
the solver, and a buffer PoissonMatrix A and a buffer B for the
fields
passed in.
A hash table or map could associate the field with data if needed...
I
am trying a quick use of static.. so that the data is kept in place,
not
moved around and reallocated, which , in a loop can be fragmenting
memory
and require garbage collecting and compacting. I noticed when i put 3
grids in a row like a chimera that the GC was stuttering.. that was
the
first hint of buffer issues.

static class MG{
PoissonMatrix A;
static Field r, x;

SIMD processing :
the arrays could be made to 1d ( not sure if that matters) , but to
take
advantage of SIMD some care has to be taken with rows and columns of
arrays should be as laid out in memory. so i think columns on the
outer
loop for 2d array.. one or the other. I have seen big boosts with
code
that has SIMD friendly loops without branches

t when I move the circle near the surface, it is very slow... Even an
stutter and hang up.. not explode, but stall..

i loaded http://www.lagers.org.uk/jasmine/ but i see no difference..
nothing compelling about it..

If there is parallelization to be done, i think that could be next,
but i
am not sure with Algebraic MG?. adaptive methods that use smaller
squares near entopy or the interface, would be best.. some use it in
deep water.

-I noticed the line seg object could not break the bubbles. I think
the
circle did pushes them. I like how I could stir the bottom and slosh
the
whole thing.

-But for a numerical wave take with some length , it seems it needs
plenty
of speed up. I see new ways to get find surface detail from coarse
grids.
and for vortons, it would nee to treat rollups with a fine mesh or
perhaps using vorton particles, or blobs of them.

-the bubbles could be compressible, that would be a nice look if
resolved.

-I would love to see a sample of a breaking , overturning , air
gulping
wave. I can now have the wind blow on way or the other and see the
effect
:)

-toward the breaker should make a barrel, in the wave direction (
onshore) , should make a mess.. ( i can see the wind blow on the
water).

I could not figure out how to change the density ratio, or any
buoyancy
parameters .. 10 might be enough , 100 or 1000 is the reality.. but a
buoyancy factor would be enough.

  • The functions did not have enough comment so i could find how to
    set
    the
    gravity direction, or strength, the viscosity, the density ..

-would it be hard to add temperature? I would think that just advects
simply, with the fluid, diffuses, also.. then, adds to the buoyancy
if
the air is hotter than the water.

-adaptive features such as grid refinement would give the most
reward..
probably..

I am still not sure if this code is the right path for me, I like the
idea
of a flapping bird in air and this method is the most complete. I
use a
simple drag / flux model, for fish locomotion, and it worked fine.
But
the
IB is supposed to be the best way to react to the reef contours,
hillsides, and the AMG method one of the fastest. But i am no expert
i
am
reading papers every day and never feel like I know enough.

I installed Jasmine to processing, didnt notice much of a
difference... (
on PC, windows 10 , latest processing,) the ball does move the
bubbles,
they do go up. I would like a 100 to 1 density ratio ( is that close
to
water /air?)... the air could be compressible... should be.. 10 to 1
would be enough.. But i think i need to added gravity.

is there a less frendly and more performant code I could look at? I
though i saw some code that calculated the breaking bow waves on a
vessel
from your team.. at MIT ? should i try the MarineHydro/lessons/?
is it true the code is 1st order accurate, you stated long ago.. but
i
saw some notes on RK and I see plenty of vorticity, almost too much.

I now found some new flip code that is adaptive both with the size of
the
mesh and the sph particles, using a tetrahedron grid, but it is only
one
phase. I can clearly see the wind blowing on the surface here and i
think
i don't want to do without that...

If i see a nice breaking wave demo, maybe i can fix some of this
stuff...
but i dont konw java, c# in not much different though.

CBatty's variational cut cell method promises a coupling. it is
using a
complex conjugate..

I tried compling the java, so i think the main issue is the buffers,
and
something else...

i am gong to give a quick try to this: reuse the buffers by making
classes static. A map might need to be implemented but heap churn in
the
loop and allocations are expensive so im sure it worth it. If worker
threading, each thread can have its own buffers, mapped by thread
id...

static class MG{
PoissonMatrix A;
static Field r, x;

int iter=0;

float tol=1e-5;

MG( PoissonMatrix pA, Field X, Field B ){
A = pA;
x = X;
r = new Field(x.n,x.m,0,tol);
tol = r.inner(r);
r = A.residual(b,x);
}

[image: Inline image 2]

air is to thin, water not dense enoug.....

I am only 5 month into CFL ,[image: Inline image 1]
so i am hoping ot find code that matches since my project focus is an
walking creatures, and walking on boats now..

But runing at 2^ 6 2,^ 5 gives me barely interactive speeds.

for 2d i was hoping to do the full NS... not using some hacks..

i still dont understand "periodic" boundary conditions, if there is
only
one period in the window... with buffers on the margins... because
the
FFT pressure solve scales the best ..

On Mon, Sep 5, 2016 at 9:33 PM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Thanks. I dont think its a bug. I think its an issue of rendering,
or
maybe an additional feature like adaptive methods , cells of
different
sizes, near the high entropy area, would help. I wrote an enormous
email describing what i would like to use the code for ( breaking
waves,
thin paneled boats , and surfer-eating fishes) for an educational
and
entertaining simulation game for disabled kids that cant go surfing
outside. I hope you don't mind it.

i am looking all over the internet..
ShadowFax uses a moving grid, and another scheme based on VOF uses
a
triangle grid has some advantages over the voronoi one.

On Mon, Sep 5, 2016 at 4:49 PM, Dr Weymouth <
notifications@github.com>
wrote:

I'm sorry, what exactly is the issue you are reporting? The only
issues
I
see are in your title.

The first issue in the title is that the solver must be a power of
2,
but
this is not quite right. The number of point in each direction
needs to
be
proportional to a large power of 2. This is because the multi-grid
solver
interactively "restricts" the domain by a factor of two in each
direction.
It will be much more efficient if the solver can do that at least
three
times, and more is better.

As for the second issue in the title: If n is the total number of
points,
the the fluid routines in the code are O(n) except for the
multi-grid
solver which is O(n log n). However, if you double the points in
both x
and
y, then this is increasing n by a factor of 4. In addition, if you
double
the resolution then running a certain simulation (say two cycles
of
bluff
body shedding) will require (about) twice as many time steps.

Hope that helps.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10 (comment)
-244692953
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_
LmTEPVm6vYGR0C38dtqSdNzmVqZdhks5qm9eagaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#10
issuecomment-244922808
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAclJ08PS
ienC_VMAPiybqmbto02xiXdks5qnU5HgaJpZM4JwAR9>

.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10 (comment)
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_LmbbeHrfDeVS-
aqAyoFAgQIk8OekAks5qnWNfgaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAclJ89TdAt5JdUEAIBpPqi4jlfrgWwSks5qn_SbgaJpZM4JwAR9
.

@damian-666
Copy link
Author

Thanks.. yes. I will do this now. the sample code is there at the
bottom of the email before last, but i will double check it. starting from
scratch. I did get one "wave tank" to work but trying to buld a wave
maker, or using a large circles, using a paddle, was unstable. both
papers reported instability in two- phase with AMG only for a solver. We
can make this state of the art just by integrating this and its from Los
Alamos... no license issues. it is very exiting stuff....

warning: the crashed processing sessions, leak, under Win 10, and
under various names which i will provide ( processing bug) .. cleaning
them is important during test.

On Thu, Sep 8, 2016 at 8:38 PM, Dr Weymouth notifications@github.com
wrote:

What's the problem with the current two phase implantation? Can you
describe it concretely in two sentences and send me a minimal example that
replicates the problem?

On Sep 8, 2016 19:42, "damian-666" notifications@github.com wrote:

hello again, sorry to bug you bug im runny out of time, need guidance on
LilyPad.. two phase and free boundary.

I read in your wikik that the iVof and the two phase is still under
development. But is anyone actively doing so?

But my focus is on swimmers and walkers in 2d... I dont know if a
volcano will explode or the flying wing will be driver to the water...
take
in water ... sink while emitting bubbles. so i need unconditionally
stable. I don't need compressible or shocks. For an interactive
simulation it must be pretty stable under most conditions.

Incremental fluids" code on github has given me multi density , dust in
the
air...stratified... One phase.

But in a port of that ot java, I found a solver for CG in Java... it
is preconditioned by *incomplete Cholesky preconditioner... not AMG .. *

here is a java version of the CG solver but with a different
preconditioner. I dont know if AMG and this would be right or the fastest
way to get the two phase code stable.

https://github.com/noSoulApophis/incremental-
fluids-java/blob/master/src/
physics/EulerianFluids/ExplicitFluid3conjugateGradients.java

I dont konw if i am qualified to fix the two phase in Lilypad. i am self
taught in CFD.. just a newbie. My focus for 5 years. has been creature
locomotion and balance.. they walk on boards with thin hulls... I can add
that to air eating overturning two phase model, my demo will be
incredible,.... creatures walking on boats using just muscle and bone
power.

but unless you prescribe me a plan of action or proper test cases. for
waves crashing on a reef. and a body i can slosh around.. .. it, dont
want to risktime to work on this i need to return to America or to German
or Canada, i have 3 citizenships. This island with its waves
and creatures , currents , reefs, and total freedom to research , has
taught me alot but i think i need to go after 5 years.

I might try the Nast2d code, but i dont konw if i can put a fish in
that...

thanks, Damian Hallbauer ,
CEO and Sole Proprietor, Puppet Army Faction.

On Wed, Sep 7, 2016 at 7:47 AM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Hello again,

i think made a little progress on the two phase "wave tank"....I hope i
didnt miss anything, but i think the two phase sloshing with bubbles
works,
but is often unstable and thats the cause of the stalling, slowness,
and
leaking processing modules. I tried the simplest two- phase i could
make, set the air to water ratio to 1/10, and got some decent sloshing
with tuning of the MG smoother iterations and other params.

but for my simulations even with 1/10 density and a small immersed
boundary, I can't get a stable solve without a lucky tuning. And three
of
teh papers explain that is expected. So they use MG as a preconditioner
for a Conjugate Gradient solve . So i think the two- phase is not
stable
enough and that is the main cause of the stalling. The papers all show
nicely deformed bubbles and details.

i hope to try it because it looks good when it works , but . , in the
papers, they examine all the boundaries inside, consider the types.
they reuse the buffers , work in parallel when possible, and this one
claims to handle 800 to 1 density. " A parallel multigrid Poisson
solver
for fluids simulation on large grids" -Disney, McAdams.

if I find a robust solver i can port to java and switch in i will
try.. but I am running out of time and might not be able to do it ( if
you think it is the right plan). Here is what i dug up..

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.457
.5625&rep=rep1&type=pdf

https://wissrech.ins.uni-bonn.de/research/projects/amg/
Project C2: Adaptive and robust multigrid methods for space time
discretizations
<http://sfb611.iam.uni-bonn.de/subproject.php?id=25&lang=en
Development
of CFD Code NaSt3DGP
<http://wissrech.ins.uni-bonn.de/research/projects/NaSt3DGP/index.htm
High-Performance
Parallel Computing
http://wissrech.ins.uni-bonn.de/research/himalaya/index.html

code licenses are ok....

http://www.prace-ri.eu/IMG/pdf/scalable-tools-for-fem-applications.pdf

BoomerAMG of HYPRE code of the Laurence Livermore National Laboratory
(LLNL), USA
http://computation.llnl.gov/sites/default/files/public/hypre
-2.11.1_ref_manual.pdf

I use a c++ to c# converter.. there probably is one for java... i found
one AMR poison solvers in Chombo but it is commented out.. s

also , i find papers that say FFT pressure solves can work with
immersed
boundaries if the ends are periodic ( or one can put dampers or
boundaries,
unseen in the margins so that stuff doesnt wrap around ..or move the Y
,
or use IB as boundaries) STAM fft 01 autodesk paper , a method like
that.. But solving the poisson in these papers with a MG.+ CG. similar
to
what is there, seems better and can be just as fast.

my code was last like this but i feel its unstable more often than
not.... unless i missed a piece..

FloodPlot flood;

Body body;

// flow = new TwoPhase(n,m,2,0.01);
// flow.f.eq(0,m,n+2,0,m+2);
// flow.u = new VectorField(n+2,m+2,0,0);

TwoPhase flow;

void setup() {
int n=(int)pow(2, 6)*2;

int m=(int)pow(2, 5)*1;

// size ( 400, 300);

Window view = new Window(n,n/2);
float L = n/8.;

body = new CircleBody(n/3, m/2, L/2, view); // define geom

flow = new TwoPhase(n,m,2,0.05);
flow.f.eq(0.8,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0.02,0);

// length-scale in grid units
//body = new CircleBody(n/3,n/2,L,view); // define geom

}

/*
TwoPhase( int n, int m, float dt, Body body, float nu, boolean QUICK,
float g, float gamma ){
super( n, m, dt, body, nu, QUICK);
f = new FreeInterface( this.n, this.m, gamma );
f0 = new FreeInterface( this.n, this.m, gamma );
this.g.y = g;
}
TwoPhase( int n, int m, float dt, float g ){
this( n, m, dt, new CircleBody(-10.,-10.,0.,new Window()), 0, false, g,
0.1);
};
*/

void draw() {

body.follow(); // update the body
flow.update(body);
//flow.update();

flow.update2();
flow.f.display(0.1,1);
body.display();

// flood.display(flow.u.curl());

}

/***
void setup(){
int n=(int)pow(2,7), m=(int)pow(2,6);
flow = new TwoPhase(n,m,2,0.01);
flow.f.eq(0,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0,0);
}

void draw(){
flow.update();
flow.update2();
flow.f.display();
}
******/

void settings()
{
size(600, 150);
}

On Tue, Sep 6, 2016 at 9:58 PM, Damian Hallbauer <
damian.hallbauer@gmail.com> wrote:

op, i just pulled up my processing to try another scheme and see that
all the sessions i made were still running. as leaked process, when it
didn't solve, . so the latest processing leaks it, i have to use task
manager to close them. . so now i close them all and i get a decent
performance boost.

out of the box, this code does more and is organized better than the
other ones ive looked at.. Most of which i cannot even get to compile

But reusing those buffers i always have optimized first, pretty sure
that would be worth it.

and thinking about SIMD is something, flattening the buffers to 1d, i
learned from this CFD code research.

i can try to do it but my project is 2 years overdue and it might get
closed down for a while. but do you think this code is right for
making
a breaking wave? with winds on it? if there is a test case please let
me know And if there is no sample i can figure out most of it ... i
ame
guessing to make a union of stuff to put on the bottom.. and then
make a
wave pusher thing to generate the waves....

But if you can point me to how to set

*viscosity , fluid density, gravity direction, ( or general
acceleration) , bouyancy, *( for two phase)... i was adjusting

parameters but without really knowing .. i can figure it all out if it
in
there somewhere.

Adding heat is not hard... but I had to hack to figure out how to
adjust
the density ratio.

Im learning python, processing, fortran90. java, shaders opencl,.. all
for this CFD because it fits so well with my creatures.. Emergent
stuff
like weather comes from heat so i want to do alot with the Air Field.

My project is 2 years overdue and I think i have read over 300 papers.
i might just need to ask general stuff sometimes. I can probably
figure
it out but I don't understand Algebraic multgrid, nor an easy way to
make
it adaptive, but i probably have the paper somewhere.

thanks for makeing this code available., it might be my best water
solution and have several dust schemes that can work..

On Tue, Sep 6, 2016 at 8:58 PM, Dr Weymouth <notifications@github.com

wrote:

My role in this open source project is to help people use and update
lily
pad.

If you have a bug, or usage question, then I'll try to help
fix/answer
it.
If you can put some time into optimising the memory allocation, that
would
be great. I'm not a computer scientist, so I could use help with
that.
If
you make a change and send a pull request then everyone else will
benefit
from your work on it. Same for multi-threading (which I am about to
start
working on myself). Same for adaptive mesh refinement.

This is my understanding of how open source works.

So, if you're interested in making lily pad better for everyone, then
pick
one item and make it better. That would be great.

On Sep 6, 2016 19:28, "damian-666" notifications@github.com wrote:

Hello again.. maybe the last email was all over the place but I
have
some
well defined issues now .

I got the two phase to work but I am not sure if it is working as
well
as
it could. The main issue is performance. for first pass , I noticed
that the MG solver is reallocating the MG solver instance, and its
arrays
every call. There is a lot of that and for every field with the
whole
grid...as well. For the solver , i think it could have one instance
of
the solver, and a buffer PoissonMatrix A and a buffer B for the
fields
passed in.
A hash table or map could associate the field with data if
needed...
I
am trying a quick use of static.. so that the data is kept in
place,
not
moved around and reallocated, which , in a loop can be fragmenting
memory
and require garbage collecting and compacting. I noticed when i
put 3
grids in a row like a chimera that the GC was stuttering.. that was
the
first hint of buffer issues.

static class MG{
PoissonMatrix A;
static Field r, x;

SIMD processing :
the arrays could be made to 1d ( not sure if that matters) , but to
take
advantage of SIMD some care has to be taken with rows and columns
of
arrays should be as laid out in memory. so i think columns on the
outer
loop for 2d array.. one or the other. I have seen big boosts with
code
that has SIMD friendly loops without branches

t when I move the circle near the surface, it is very slow... Even
an
stutter and hang up.. not explode, but stall..

i loaded http://www.lagers.org.uk/jasmine/ but i see no
difference..
nothing compelling about it..

If there is parallelization to be done, i think that could be next,
but i
am not sure with Algebraic MG?. adaptive methods that use smaller
squares near entopy or the interface, would be best.. some use it
in
deep water.

-I noticed the line seg object could not break the bubbles. I think
the
circle did pushes them. I like how I could stir the bottom and
slosh
the
whole thing.

-But for a numerical wave take with some length , it seems it needs
plenty
of speed up. I see new ways to get find surface detail from coarse
grids.
and for vortons, it would nee to treat rollups with a fine mesh or
perhaps using vorton particles, or blobs of them.

-the bubbles could be compressible, that would be a nice look if
resolved.

-I would love to see a sample of a breaking , overturning , air
gulping
wave. I can now have the wind blow on way or the other and see the
effect
:)

-toward the breaker should make a barrel, in the wave direction (
onshore) , should make a mess.. ( i can see the wind blow on the
water).

I could not figure out how to change the density ratio, or any
buoyancy
parameters .. 10 might be enough , 100 or 1000 is the reality..
but a
buoyancy factor would be enough.

  • The functions did not have enough comment so i could find how to
    set
    the
    gravity direction, or strength, the viscosity, the density ..

-would it be hard to add temperature? I would think that just
advects
simply, with the fluid, diffuses, also.. then, adds to the buoyancy
if
the air is hotter than the water.

-adaptive features such as grid refinement would give the most
reward..
probably..

I am still not sure if this code is the right path for me, I like
the
idea
of a flapping bird in air and this method is the most complete. I
use a
simple drag / flux model, for fish locomotion, and it worked fine.
But
the
IB is supposed to be the best way to react to the reef contours,
hillsides, and the AMG method one of the fastest. But i am no
expert
i
am
reading papers every day and never feel like I know enough.

I installed Jasmine to processing, didnt notice much of a
difference... (
on PC, windows 10 , latest processing,) the ball does move the
bubbles,
they do go up. I would like a 100 to 1 density ratio ( is that
close
to
water /air?)... the air could be compressible... should be.. 10 to
1
would be enough.. But i think i need to added gravity.

is there a less frendly and more performant code I could look at? I
though i saw some code that calculated the breaking bow waves on a
vessel
from your team.. at MIT ? should i try the MarineHydro/lessons/?
is it true the code is 1st order accurate, you stated long ago..
but
i
saw some notes on RK and I see plenty of vorticity, almost too
much.

I now found some new flip code that is adaptive both with the size
of
the
mesh and the sph particles, using a tetrahedron grid, but it is
only
one
phase. I can clearly see the wind blowing on the surface here and i
think
i don't want to do without that...

If i see a nice breaking wave demo, maybe i can fix some of this
stuff...
but i dont konw java, c# in not much different though.

CBatty's variational cut cell method promises a coupling. it is
using a
complex conjugate..

I tried compling the java, so i think the main issue is the
buffers,
and
something else...

i am gong to give a quick try to this: reuse the buffers by making
classes static. A map might need to be implemented but heap churn
in
the
loop and allocations are expensive so im sure it worth it. If
worker
threading, each thread can have its own buffers, mapped by thread
id...

static class MG{
PoissonMatrix A;
static Field r, x;

int iter=0;

float tol=1e-5;

MG( PoissonMatrix pA, Field X, Field B ){
A = pA;
x = X;
r = new Field(x.n,x.m,0,tol);
tol = r.inner(r);
r = A.residual(b,x);
}

[image: Inline image 2]

air is to thin, water not dense enoug.....

I am only 5 month into CFL ,[image: Inline image 1]
so i am hoping ot find code that matches since my project focus is
an
walking creatures, and walking on boats now..

But runing at 2^ 6 2,^ 5 gives me barely interactive speeds.

for 2d i was hoping to do the full NS... not using some hacks..

i still dont understand "periodic" boundary conditions, if there is
only
one period in the window... with buffers on the margins... because
the
FFT pressure solve scales the best ..

On Mon, Sep 5, 2016 at 9:33 PM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Thanks. I dont think its a bug. I think its an issue of
rendering,
or
maybe an additional feature like adaptive methods , cells of
different
sizes, near the high entropy area, would help. I wrote an
enormous
email describing what i would like to use the code for ( breaking
waves,
thin paneled boats , and surfer-eating fishes) for an educational
and
entertaining simulation game for disabled kids that cant go
surfing
outside. I hope you don't mind it.

i am looking all over the internet..
ShadowFax uses a moving grid, and another scheme based on VOF
uses
a
triangle grid has some advantages over the voronoi one.

On Mon, Sep 5, 2016 at 4:49 PM, Dr Weymouth <
notifications@github.com>
wrote:

I'm sorry, what exactly is the issue you are reporting? The only
issues
I
see are in your title.

The first issue in the title is that the solver must be a power
of
2,
but
this is not quite right. The number of point in each direction
needs to
be
proportional to a large power of 2. This is because the
multi-grid
solver
interactively "restricts" the domain by a factor of two in each
direction.
It will be much more efficient if the solver can do that at
least
three
times, and more is better.

As for the second issue in the title: If n is the total number
of
points,
the the fluid routines in the code are O(n) except for the
multi-grid
solver which is O(n log n). However, if you double the points in
both x
and
y, then this is increasing n by a factor of 4. In addition, if
you
double
the resolution then running a certain simulation (say two cycles
of
bluff
body shedding) will require (about) twice as many time steps.

Hope that helps.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10 (comment)
-244692953
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_
LmTEPVm6vYGR0C38dtqSdNzmVqZdhks5qm9eagaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#10
issuecomment-244922808
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAclJ08PS
ienC_VMAPiybqmbto02xiXdks5qnU5HgaJpZM4JwAR9>

.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10
issuecomment-244941714
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_LmbbeHrfDeVS-
aqAyoFAgQIk8OekAks5qnWNfgaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
<https://github.com/notifications/unsubscribe-auth/
AAclJ89TdAt5JdUEAIBpPqi4jlfrgWwSks5qn_SbgaJpZM4JwAR9>

.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmbfOYjDhlt0n7ruG6Xkimjykl4Y_ks5qoAG6gaJpZM4JwAR9
.

@damian-666
Copy link
Author

Hello Dr:

here is the minimum code to show the instability in two phase.. Almost
everything i try is unstable after 20 sec or less... I took code from
Twophase flow and pasted to Main Window . file called LilyPad

changes:
-your sample + the circle so I can make sloshes and waves.

  • no changes anywhere else. 1/100 ratio density.
  • it becomes unstable if i move the circle outside the box, or back and
    forth for 5 sec.. water wont settle.

TOO START FROM SCRATCH .. TAKE THE TWO PHASE CODE , CHANGE THE SETUP
AND DRAW IN LILY PAD.

THEN PUT THE CIRCLE IN TO DO SOME SLOSHING. I MIGHT HAVE DON THIS
WRONG.

TODO : RESHAPE TO GET MORE OF A TANK LIKE LONGER RECTANGLE. SET THE
RATIO TO BE LIKE WATER AN AIR WITH BUBBLES. TRY TO MAKE WAVES. TRY TO PUT
A REEF OR SLOW SO THAT WAVES BREAK. ADD WINDS GOING LEFT AND RIGHT.
INTEGRAT WITH THE FLOOD VIEW..

MY TEST CODE, JUST REPLACE ALL IN LILYPAD FILE.

/*********************************************************

  •              Main Window!*
    

Click the "Run" button to Run the simulation.

Change the geometry, flow conditions, numercial parameters
visualizations and measurments from this window.

This screen has an example. Other examples are found at *
*the top of each tab. Copy/paste them here to run, but you *
*can only have one setup & run at a time.

*********************************************************/
// Circle that can be dragged by the mouse
TwoPhase flow;
Body body;
FloodPlot flood;

//void setup(){
// int n=(int)pow(2,7), m=(int)pow(2,6); size(800,400);
// flow = new TwoPhase(n,m,2,0.01);
// flow.f.eq(0,m,n+2,0,m+2);
// flow.u = new VectorField(n+2,m+2,0,0);
//}

void setup(){

_// int n=(int)pow(2,6)_6 , m=(int)pow(2,6) ; *

  • int n=(int)pow(2,7) , m=(int)pow(2,6);*
  • size(1200,500); // display window size numerical wave tank *
  • float L = n/8.; // length-scale in grid units*
  • Window view = new Window(n,m); *
  • // body = new CircleBody(n/18,n/14,L/2,view); // define geom*
  • body = new CircleBody(n/18,n/14,L,view); //BIGGER circle more
    stalling*
  • flow = new TwoPhase(n,m,2,0.01); // the sample not stable if ratio too
    small, water is two light...moves like snow flakes . *
  • //tried with QUICK*
  • // flow = new TwoPhase( n, m, 0, body, 0.1,true,10, 0.1 ); //not
    stable *
  • flow.f.eq(0,m,n+2,0,m+2); *
  • flow.u = new VectorField(n+2,m+2,0.2,0); *
  • // flow.u = new VectorField(n+2,m+2,0.2,0); //breeze to the right?
    TODO how to do a slight wind in the air phase*

// flood = new FloodPlot(view); // intialize a flood
plot...TODO now sure how to get this working

// flood.setLegend("vorticity",-.5,.5); // and its legend .
I wish this code to be legend when used with my creatures

}

//the sample
/*
void draw(){

  • flow.update();*
  • flow.update2();*
  • flow.f.display();*
    }
  • /
  • //WISH: WOULD LOVE TO HAVE A WITH NUMBERICAL WAVE TANK... A MOVE ABLE
    reef object. *
  • //a sloping beach or a wall.*
  • //a way to controll the wind direction left or right.*
  • //a moveable paddle used to generate waves pulses*
  • void draw(){*
  • body.follow(); // update the body*
  • flow.update(body);*
  • flow.update2(); // 2-step fluid update*
  • // flood.display(flow.u.curl()); // compute and display
    vorticity*
  • flow.f.display();*
  • body.display(); // display the body*
    }
    //

/ for reference*
class TwoPhase extends BDIM{

  • FreeInterface f,f0;*
  • TwoPhase( int n, int m, float dt, Body body, float nu, boolean QUICK,
    float g, float gamma ){*
  • super( n, m, dt, body, nu, QUICK);*
  • f = new FreeInterface( this.n, this.m, gamma );*
  • f0 = new FreeInterface( this.n, this.m, gamma );*
  • this.g.y = g;*
  • }*
  • TwoPhase( int n, int m, float dt, float g ){*
  • this( n, m, dt, new CircleBody(-10.,-10.,0.,new Window()), 0, false,
    g, 0.1);*
  • }*
  • void update(){*
  • f.strang = (f.strang+1)%2; // strang operator splitting*
  • rhoi.eq(f.rho().inv());*
  • f0.eq(f);*
  • f.advect( dt, u0 );*
  • super.update();*
  • }*
  • void update2(){*
  • rhoi.eq(f.rho().inv());*
  • c.eq(del.times(rhoi.times(dt))); // need to recompute*
  • f.eq(f0);*
  • f.advect( dt, u0, u );*
  • super.update2();*
  • }*
    }

*/

void mousePressed(){body.mousePressed();} // user mouse...
void mouseReleased(){body.mouseReleased();} // interaction methods
void mouseWheel(MouseEvent event){body.mouseWheel(event);}

NOTES ON BREAKING WAVES AND BUBBLES

A good sample for numerical wave take would be nice so i can see the
potential of this code. I have no phd, i'm a hacker with the CFD just
starting to understand .. but I have read up to STAR 2016 though and
adaptive meshing is now "IT". The two papers I read say MG is not stable
with two phase. MG as a preconditioner for Conjugate gradient is used,
and along with such an overhaul, an adoption of adaptive grid might come
along free. Code is widely available from multiple c++ sources. I have
done ports using a machine xlate from c++ to c#.

NOTES: on hang up sessions, processes leak.. i use cntl alt delete or a
reboot to start fresh after 20 minuts. but you can see when it gets slow
and bogged

names of the processes.. in Processing , that leak.. if you have lots of
ram , no problem.

java platform SE binary.
vshub
application frame host

On Thu, Sep 8, 2016 at 10:35 PM, Damian Hallbauer <
damian.hallbauer@gmail.com> wrote:

Thanks.. yes. I will do this now. the sample code is there at the
bottom of the email before last, but i will double check it. starting from
scratch. I did get one "wave tank" to work but trying to buld a wave
maker, or using a large circles, using a paddle, was unstable. both
papers reported instability in two- phase with AMG only for a solver. We
can make this state of the art just by integrating this and its from Los
Alamos... no license issues. it is very exiting stuff....

warning: the crashed processing sessions, leak, under Win 10, and
under various names which i will provide ( processing bug) .. cleaning
them is important during test.

On Thu, Sep 8, 2016 at 8:38 PM, Dr Weymouth notifications@github.com
wrote:

What's the problem with the current two phase implantation? Can you
describe it concretely in two sentences and send me a minimal example that
replicates the problem?

On Sep 8, 2016 19:42, "damian-666" notifications@github.com wrote:

hello again, sorry to bug you bug im runny out of time, need guidance on
LilyPad.. two phase and free boundary.

I read in your wikik that the iVof and the two phase is still under
development. But is anyone actively doing so?

But my focus is on swimmers and walkers in 2d... I dont know if a
volcano will explode or the flying wing will be driver to the water...
take
in water ... sink while emitting bubbles. so i need unconditionally
stable. I don't need compressible or shocks. For an interactive
simulation it must be pretty stable under most conditions.

Incremental fluids" code on github has given me multi density , dust in
the
air...stratified... One phase.

But in a port of that ot java, I found a solver for CG in Java... it
is preconditioned by *incomplete Cholesky preconditioner... not AMG .. *

here is a java version of the CG solver but with a different
preconditioner. I dont know if AMG and this would be right or the
fastest
way to get the two phase code stable.

https://github.com/noSoulApophis/incremental-fluids-java/
blob/master/src/
physics/EulerianFluids/ExplicitFluid3conjugateGradients.java

I dont konw if i am qualified to fix the two phase in Lilypad. i am self
taught in CFD.. just a newbie. My focus for 5 years. has been creature
locomotion and balance.. they walk on boards with thin hulls... I can
add
that to air eating overturning two phase model, my demo will be
incredible,.... creatures walking on boats using just muscle and bone
power.

but unless you prescribe me a plan of action or proper test cases. for
waves crashing on a reef. and a body i can slosh around.. .. it, dont
want to risktime to work on this i need to return to America or to
German
or Canada, i have 3 citizenships. This island with its waves
and creatures , currents , reefs, and total freedom to research , has
taught me alot but i think i need to go after 5 years.

I might try the Nast2d code, but i dont konw if i can put a fish in
that...

thanks, Damian Hallbauer ,
CEO and Sole Proprietor, Puppet Army Faction.

On Wed, Sep 7, 2016 at 7:47 AM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Hello again,

i think made a little progress on the two phase "wave tank"....I hope
i
didnt miss anything, but i think the two phase sloshing with bubbles
works,
but is often unstable and thats the cause of the stalling, slowness,
and
leaking processing modules. I tried the simplest two- phase i could
make, set the air to water ratio to 1/10, and got some decent sloshing
with tuning of the MG smoother iterations and other params.

but for my simulations even with 1/10 density and a small immersed
boundary, I can't get a stable solve without a lucky tuning. And
three of
teh papers explain that is expected. So they use MG as a
preconditioner
for a Conjugate Gradient solve . So i think the two- phase is not
stable
enough and that is the main cause of the stalling. The papers all show
nicely deformed bubbles and details.

i hope to try it because it looks good when it works , but . , in the
papers, they examine all the boundaries inside, consider the types.
they reuse the buffers , work in parallel when possible, and this one
claims to handle 800 to 1 density. " A parallel multigrid Poisson
solver
for fluids simulation on large grids" -Disney, McAdams.

if I find a robust solver i can port to java and switch in i will
try.. but I am running out of time and might not be able to do it ( if
you think it is the right plan). Here is what i dug up..

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.457
.5625&rep=rep1&type=pdf

https://wissrech.ins.uni-bonn.de/research/projects/amg/
Project C2: Adaptive and robust multigrid methods for space time
discretizations
http://sfb611.iam.uni-bonn.de/subproject.php?id=25&lang=en
Development
of CFD Code NaSt3DGP
<http://wissrech.ins.uni-bonn.de/research/projects/NaSt3DGP/index.htm
High-Performance
Parallel Computing
http://wissrech.ins.uni-bonn.de/research/himalaya/index.html

code licenses are ok....

http://www.prace-ri.eu/IMG/pdf/scalable-tools-for-fem-applic
ations.pdf

BoomerAMG of HYPRE code of the Laurence Livermore National Laboratory
(LLNL), USA
http://computation.llnl.gov/sites/default/files/public/hypre
-2.11.1_ref_manual.pdf

I use a c++ to c# converter.. there probably is one for java... i
found
one AMR poison solvers in Chombo but it is commented out.. s

also , i find papers that say FFT pressure solves can work with
immersed
boundaries if the ends are periodic ( or one can put dampers or
boundaries,
unseen in the margins so that stuff doesnt wrap around ..or move the
Y ,
or use IB as boundaries) STAM fft 01 autodesk paper , a method like
that.. But solving the poisson in these papers with a MG.+ CG.
similar to
what is there, seems better and can be just as fast.

my code was last like this but i feel its unstable more often than
not.... unless i missed a piece..

FloodPlot flood;

Body body;

// flow = new TwoPhase(n,m,2,0.01);
// flow.f.eq(0,m,n+2,0,m+2);
// flow.u = new VectorField(n+2,m+2,0,0);

TwoPhase flow;

void setup() {
int n=(int)pow(2, 6)*2;

int m=(int)pow(2, 5)*1;

// size ( 400, 300);

Window view = new Window(n,n/2);
float L = n/8.;

body = new CircleBody(n/3, m/2, L/2, view); // define geom

flow = new TwoPhase(n,m,2,0.05);
flow.f.eq(0.8,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0.02,0);

// length-scale in grid units
//body = new CircleBody(n/3,n/2,L,view); // define geom

}

/*
TwoPhase( int n, int m, float dt, Body body, float nu, boolean QUICK,
float g, float gamma ){
super( n, m, dt, body, nu, QUICK);
f = new FreeInterface( this.n, this.m, gamma );
f0 = new FreeInterface( this.n, this.m, gamma );
this.g.y = g;
}
TwoPhase( int n, int m, float dt, float g ){
this( n, m, dt, new CircleBody(-10.,-10.,0.,new Window()), 0, false,
g,
0.1);
};
*/

void draw() {

body.follow(); // update the body
flow.update(body);
//flow.update();

flow.update2();
flow.f.display(0.1,1);
body.display();

// flood.display(flow.u.curl());

}

/***
void setup(){
int n=(int)pow(2,7), m=(int)pow(2,6);
flow = new TwoPhase(n,m,2,0.01);
flow.f.eq(0,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0,0);
}

void draw(){
flow.update();
flow.update2();
flow.f.display();
}
******/

void settings()
{
size(600, 150);
}

On Tue, Sep 6, 2016 at 9:58 PM, Damian Hallbauer <
damian.hallbauer@gmail.com> wrote:

op, i just pulled up my processing to try another scheme and see that
all the sessions i made were still running. as leaked process, when
it
didn't solve, . so the latest processing leaks it, i have to use task
manager to close them. . so now i close them all and i get a decent
performance boost.

out of the box, this code does more and is organized better than the
other ones ive looked at.. Most of which i cannot even get to compile

But reusing those buffers i always have optimized first, pretty sure
that would be worth it.

and thinking about SIMD is something, flattening the buffers to 1d, i
learned from this CFD code research.

i can try to do it but my project is 2 years overdue and it might get
closed down for a while. but do you think this code is right for
making
a breaking wave? with winds on it? if there is a test case please let
me know And if there is no sample i can figure out most of it ... i
ame
guessing to make a union of stuff to put on the bottom.. and then
make a
wave pusher thing to generate the waves....

But if you can point me to how to set

*viscosity , fluid density, gravity direction, ( or general
acceleration) , bouyancy, *( for two phase)... i was adjusting

parameters but without really knowing .. i can figure it all out if
it
in
there somewhere.

Adding heat is not hard... but I had to hack to figure out how to
adjust
the density ratio.

Im learning python, processing, fortran90. java, shaders opencl,..
all
for this CFD because it fits so well with my creatures.. Emergent
stuff
like weather comes from heat so i want to do alot with the Air Field.

My project is 2 years overdue and I think i have read over 300
papers.
i might just need to ask general stuff sometimes. I can probably
figure
it out but I don't understand Algebraic multgrid, nor an easy way to
make
it adaptive, but i probably have the paper somewhere.

thanks for makeing this code available., it might be my best water
solution and have several dust schemes that can work..

On Tue, Sep 6, 2016 at 8:58 PM, Dr Weymouth <
notifications@github.com>
wrote:

My role in this open source project is to help people use and update
lily
pad.

If you have a bug, or usage question, then I'll try to help
fix/answer
it.
If you can put some time into optimising the memory allocation, that
would
be great. I'm not a computer scientist, so I could use help with
that.
If
you make a change and send a pull request then everyone else will
benefit
from your work on it. Same for multi-threading (which I am about to
start
working on myself). Same for adaptive mesh refinement.

This is my understanding of how open source works.

So, if you're interested in making lily pad better for everyone,
then
pick
one item and make it better. That would be great.

On Sep 6, 2016 19:28, "damian-666" notifications@github.com
wrote:

Hello again.. maybe the last email was all over the place but I
have
some
well defined issues now .

I got the two phase to work but I am not sure if it is working as
well
as
it could. The main issue is performance. for first pass , I
noticed
that the MG solver is reallocating the MG solver instance, and its
arrays
every call. There is a lot of that and for every field with the
whole
grid...as well. For the solver , i think it could have one
instance
of
the solver, and a buffer PoissonMatrix A and a buffer B for the
fields
passed in.
A hash table or map could associate the field with data if
needed...
I
am trying a quick use of static.. so that the data is kept in
place,
not
moved around and reallocated, which , in a loop can be fragmenting
memory
and require garbage collecting and compacting. I noticed when i
put 3
grids in a row like a chimera that the GC was stuttering.. that
was
the
first hint of buffer issues.

static class MG{
PoissonMatrix A;
static Field r, x;

SIMD processing :
the arrays could be made to 1d ( not sure if that matters) , but
to
take
advantage of SIMD some care has to be taken with rows and columns
of
arrays should be as laid out in memory. so i think columns on the
outer
loop for 2d array.. one or the other. I have seen big boosts with
code
that has SIMD friendly loops without branches

t when I move the circle near the surface, it is very slow...
Even an
stutter and hang up.. not explode, but stall..

i loaded http://www.lagers.org.uk/jasmine/ but i see no
difference..
nothing compelling about it..

If there is parallelization to be done, i think that could be
next,
but i
am not sure with Algebraic MG?. adaptive methods that use smaller
squares near entopy or the interface, would be best.. some use it
in
deep water.

-I noticed the line seg object could not break the bubbles. I
think
the
circle did pushes them. I like how I could stir the bottom and
slosh
the
whole thing.

-But for a numerical wave take with some length , it seems it
needs
plenty
of speed up. I see new ways to get find surface detail from coarse
grids.
and for vortons, it would nee to treat rollups with a fine mesh or
perhaps using vorton particles, or blobs of them.

-the bubbles could be compressible, that would be a nice look if
resolved.

-I would love to see a sample of a breaking , overturning , air
gulping
wave. I can now have the wind blow on way or the other and see the
effect
:)

-toward the breaker should make a barrel, in the wave direction (
onshore) , should make a mess.. ( i can see the wind blow on the
water).

I could not figure out how to change the density ratio, or any
buoyancy
parameters .. 10 might be enough , 100 or 1000 is the reality..
but a
buoyancy factor would be enough.

  • The functions did not have enough comment so i could find how to
    set
    the
    gravity direction, or strength, the viscosity, the density ..

-would it be hard to add temperature? I would think that just
advects
simply, with the fluid, diffuses, also.. then, adds to the
buoyancy
if
the air is hotter than the water.

-adaptive features such as grid refinement would give the most
reward..
probably..

I am still not sure if this code is the right path for me, I like
the
idea
of a flapping bird in air and this method is the most complete. I
use a
simple drag / flux model, for fish locomotion, and it worked fine.
But
the
IB is supposed to be the best way to react to the reef contours,
hillsides, and the AMG method one of the fastest. But i am no
expert
i
am
reading papers every day and never feel like I know enough.

I installed Jasmine to processing, didnt notice much of a
difference... (
on PC, windows 10 , latest processing,) the ball does move the
bubbles,
they do go up. I would like a 100 to 1 density ratio ( is that
close
to
water /air?)... the air could be compressible... should be.. 10
to 1
would be enough.. But i think i need to added gravity.

is there a less frendly and more performant code I could look at?
I
though i saw some code that calculated the breaking bow waves on a
vessel
from your team.. at MIT ? should i try the MarineHydro/lessons/?
is it true the code is 1st order accurate, you stated long ago..
but
i
saw some notes on RK and I see plenty of vorticity, almost too
much.

I now found some new flip code that is adaptive both with the
size of
the
mesh and the sph particles, using a tetrahedron grid, but it is
only
one
phase. I can clearly see the wind blowing on the surface here and
i
think
i don't want to do without that...

If i see a nice breaking wave demo, maybe i can fix some of this
stuff...
but i dont konw java, c# in not much different though.

CBatty's variational cut cell method promises a coupling. it is
using a
complex conjugate..

I tried compling the java, so i think the main issue is the
buffers,
and
something else...

i am gong to give a quick try to this: reuse the buffers by making
classes static. A map might need to be implemented but heap churn
in
the
loop and allocations are expensive so im sure it worth it. If
worker
threading, each thread can have its own buffers, mapped by thread
id...

static class MG{
PoissonMatrix A;
static Field r, x;

int iter=0;

float tol=1e-5;

MG( PoissonMatrix pA, Field X, Field B ){
A = pA;
x = X;
r = new Field(x.n,x.m,0,tol);
tol = r.inner(r);
r = A.residual(b,x);
}

[image: Inline image 2]

air is to thin, water not dense enoug.....

I am only 5 month into CFL ,[image: Inline image 1]
so i am hoping ot find code that matches since my project focus
is an
walking creatures, and walking on boats now..

But runing at 2^ 6 2,^ 5 gives me barely interactive speeds.

for 2d i was hoping to do the full NS... not using some hacks..

i still dont understand "periodic" boundary conditions, if there
is
only
one period in the window... with buffers on the margins... because
the
FFT pressure solve scales the best ..

On Mon, Sep 5, 2016 at 9:33 PM, Damian Hallbauer <
damian.hallbauer@gmail.com

wrote:

Thanks. I dont think its a bug. I think its an issue of
rendering,
or
maybe an additional feature like adaptive methods , cells of
different
sizes, near the high entropy area, would help. I wrote an
enormous
email describing what i would like to use the code for (
breaking
waves,
thin paneled boats , and surfer-eating fishes) for an
educational
and
entertaining simulation game for disabled kids that cant go
surfing
outside. I hope you don't mind it.

i am looking all over the internet..
ShadowFax uses a moving grid, and another scheme based on VOF
uses
a
triangle grid has some advantages over the voronoi one.

On Mon, Sep 5, 2016 at 4:49 PM, Dr Weymouth <
notifications@github.com>
wrote:

I'm sorry, what exactly is the issue you are reporting? The
only
issues
I
see are in your title.

The first issue in the title is that the solver must be a
power of
2,
but
this is not quite right. The number of point in each direction
needs to
be
proportional to a large power of 2. This is because the
multi-grid
solver
interactively "restricts" the domain by a factor of two in each
direction.
It will be much more efficient if the solver can do that at
least
three
times, and more is better.

As for the second issue in the title: If n is the total number
of
points,
the the fluid routines in the code are O(n) except for the
multi-grid
solver which is O(n log n). However, if you double the points
in
both x
and
y, then this is increasing n by a factor of 4. In addition, if
you
double
the resolution then running a certain simulation (say two
cycles
of
bluff
body shedding) will require (about) twice as many time steps.

Hope that helps.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10 (comment)
-244692953
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_
LmTEPVm6vYGR0C38dtqSdNzmVqZdhks5qm9eagaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#10
issuecomment-244922808
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAclJ08PS
ienC_VMAPiybqmbto02xiXdks5qnU5HgaJpZM4JwAR9>

.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#10 (comment)
-244941714
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AP_LmbbeHrfDeVS-
aqAyoFAgQIk8OekAks5qnWNfgaJpZM4JwAR9>
.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#10 (comment)
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAclJ89Td
At5JdUEAIBpPqi4jlfrgWwSks5qn_SbgaJpZM4JwAR9>

.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmbfOYjDhlt0n7ruG6Xkimjykl4Y_ks5qoAG6gaJpZM4JwAR9
.

@weymouth
Copy link
Owner

weymouth commented Sep 9, 2016

I'm sorry, but that doesn't work because of all the little stars and weird tab stuff you've introduced. Can you please clean that up and put it in as a code block or attach as a single LilyPad.pde file?

@damian-666
Copy link
Author

Thanks, I will find the Pde file and send. meanwhile, this might work
after this line, to copy and replace to the replace everything below
in the File
LilyPad.pde. I am using win 10, using the blessed "Everything" tool as
a start menu. I found java AMG->CG solvers that might work, if you want it
let me know.

// Circle that can be dragged by the mouse
TwoPhase flow;
Body body;
FloodPlot flood;

//void setup(){ // sample test code given
// int n=(int)pow(2,7), m=(int)pow(2,6); size(800,400);
// flow = new TwoPhase(n,m,2,0.01);
// flow.f.eq(0,m,n+2,0,m+2);
// flow.u = new VectorField(n+2,m+2,0,0);
//}

void setup(){

// int n=(int)pow(2,6)*6 , m=(int)pow(2,6) ; //tried this.. not sure if
one phase must be 2x the other, hints welcome
int n=(int)pow(2,7) , m=(int)pow(2,6);

size(1200,500); // display window size , trying for numerical wave
tank

float L = n/8.; // length-scale in grid units
Window view = new Window(n,m);

// body = new CircleBody(n/18,n/14,L/2,view);
body = new CircleBody(n/18,n/14,L,view); //BIGGER circle, more
stalling

flow = new TwoPhase(n,m,2,0.01);
// flow = new TwoPhase( n, m, 0, body, 0.1,true,10, 0.1 ); //not
stable either

flow.f.eq(0,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0.2,0);

// flow.u = new VectorField(n+2,m+2,0.2,0); //breeze to the right at
0.2 vel x? WI how to do a slight wind in the air phase.

// flood = new FloodPlot(view); // intialize a flood
plot...TODO now sure how to get this working
// flood.setLegend("vorticity",-.5,.5); // and its legend .
I wish this code to be legend when used with my creatures
}

// sample test code given
/*
void draw(){
flow.update();
flow.update2();
flow.f.display();
}
*/

void draw(){

body.follow(); // update the body
flow.update(body);
flow.update2(); // 2-step fluid update
// flood.display(flow.u.curl());

flow.f.display();
body.display();
}

void mousePressed(){body.mousePressed();} // user mouse...
void mouseReleased(){body.mouseReleased();} // interaction methods
void mouseWheel(MouseEvent event){body.mouseWheel(event);}

//WISH: WOULD LOVE TO HAVE A WITH NUMERICAL WAVE TANK... A MOVEABLE
reef object.
//a sloping beach or a wall.
//a way to controll the wind direction left or right.
//a moveable paddle used to generate waves pulses

On Fri, Sep 9, 2016 at 10:40 AM, Dr Weymouth notifications@github.com
wrote:

I'm sorry, but that doesn't work because of all the little stars and weird
tab stuff you've introduced. Can you please clean that up and put it in as
a code block or attach as a single LilyPad.pde file?


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmZCdM5LVkcyKdr86wRczNd9i0eH6ks5qoMcLgaJpZM4JwAR9
.

@damian-666
Copy link
Author

Sorry, to drop off the grid...​ ran out of 4g credits just as i was
sending this, had to go to buy some. Here is the file.

Maybe you can tune it properly, see what i did wrong , I am certain i
could have done better setting up a wave or fuel slosh tank, the flood
window, parameters, etc. But those two papers told me two phase using
just AMG was unstable for them. so i hunted for some pretty simple java
AMG/CG code... but the c++ i sent before is top notch ..and looks more like
the solver you have. If you prescribe that it should indeed be changed , i
may be able to find time to porting it this week,., with guidance..

I'm not too concerned about fluid mass conservation for the wave, i can
correct it and attribute changes to tides. For a fuel /slosh tank I
would need it to conserve.., with maybe kind of correction scheme for the
VOF. Maybe i can bring attention to this on the CFG group and recruit
some workers to bring it to its maximum potential. Python is not friendly
or fast, and version-bundled, CFD, is hard enough. So lilypad could be
the most rewarding one for the noobs.. and also potentially applicable to
real projects, Fish races.. boat eating solitons...

Thx..

On Fri, Sep 9, 2016 at 11:35 AM, Damian Hallbauer <
damian.hallbauer@gmail.com> wrote:

Thanks, I will find the Pde file and send. meanwhile, this might work
after this line, to copy and replace to the replace everything below in the File
LilyPad.pde. I am using win 10, using the blessed "Everything" tool as
a start menu. I found java AMG->CG solvers that might work, if you want it
let me know.

// Circle that can be dragged by the mouse
TwoPhase flow;
Body body;
FloodPlot flood;

//void setup(){ // sample test code given
// int n=(int)pow(2,7), m=(int)pow(2,6); size(800,400);
// flow = new TwoPhase(n,m,2,0.01);
// flow.f.eq(0,m,n+2,0,m+2);
// flow.u = new VectorField(n+2,m+2,0,0);
//}

void setup(){

// int n=(int)pow(2,6)*6 , m=(int)pow(2,6) ; //tried this.. not sure
if one phase must be 2x the other, hints welcome
int n=(int)pow(2,7) , m=(int)pow(2,6);

size(1200,500); // display window size , trying for numerical wave
tank

float L = n/8.; // length-scale in grid units
Window view = new Window(n,m);

// body = new CircleBody(n/18,n/14,L/2,view);
body = new CircleBody(n/18,n/14,L,view); //BIGGER circle, more
stalling

flow = new TwoPhase(n,m,2,0.01);
// flow = new TwoPhase( n, m, 0, body, 0.1,true,10, 0.1 ); //not
stable either

flow.f.eq(0,m,n+2,0,m+2);
flow.u = new VectorField(n+2,m+2,0.2,0);

// flow.u = new VectorField(n+2,m+2,0.2,0); //breeze to the right at
0.2 vel x? WI how to do a slight wind in the air phase.

// flood = new FloodPlot(view); // intialize a flood
plot...TODO now sure how to get this working
// flood.setLegend("vorticity",-.5,.5); // and its legend .
I wish this code to be legend when used with my creatures
}

// sample test code given
/*
void draw(){
flow.update();
flow.update2();
flow.f.display();
}
*/

void draw(){

body.follow(); // update the body
flow.update(body);
flow.update2(); // 2-step fluid update
// flood.display(flow.u.curl());

flow.f.display();
body.display();
}

void mousePressed(){body.mousePressed();} // user mouse...
void mouseReleased(){body.mouseReleased();} // interaction methods
void mouseWheel(MouseEvent event){body.mouseWheel(event);}

//WISH: WOULD LOVE TO HAVE A WITH NUMERICAL WAVE TANK... A MOVEABLE
reef object.
//a sloping beach or a wall.
//a way to controll the wind direction left or right.
//a moveable paddle used to generate waves pulses

On Fri, Sep 9, 2016 at 10:40 AM, Dr Weymouth notifications@github.com
wrote:

I'm sorry, but that doesn't work because of all the little stars and
weird tab stuff you've introduced. Can you please clean that up and put it
in as a code block or attach as a single LilyPad.pde file?


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmZCdM5LVkcyKdr86wRczNd9i0eH6ks5qoMcLgaJpZM4JwAR9
.

@weymouth
Copy link
Owner

I've reproduced the issue and migrated to a new issue with a clear title focused just on this topic.

@damian-666
Copy link
Author

sounds good Doctor, thank s for looking at it right away. sorry, but i
cant put this in a tweet .too tired to be concise.. i tried to put in bold
the important points...

i must say, LilyPad is the only tool i found that give an interesting
useful result in 5 seconds. CFD and python and fortran, for a biologist..
is wayyy too much.

Yes, I see that the QUICK is stable, but .. using it at 64 x 32 is
interactive on my modest quad core. I would need to clean the view... i
could try the stream view , vorticity or some particles or isolines... I
would look for ways to add sub grid detail... perhaps anisotropic
turbulence.. or particles or vortons. *But.. i feel evenQUICK is not that
robust... as in... if i put the density ratio at 1/100...and *

flow = new TwoPhase(n, m, 0, body, L/10.0, true, 0.01, 0.001); //QUICK
changed viscosity or gamma to 0.001. from 0.1.. air enters water
stops..... this could be an issue if heat is added... 0.001 for apparent
viscousity is a common starting value ive read....anyways...

and if go back to the stable quick with the moving ball, and i use 1/100
for density ratio. its ok.. but the waster is too thick to be watery...

changing the last two params will stall it...

flow = new TwoPhase(n, m, 0, body, L/10.0, true, 0.01, 0.1); //QUICK...

if I had heat, this would not be predictable.

if it were stable , some parallelisation , trivial.. as described in
A parallel multigrid Poisson solver for fluids simulation on large grids

im still convinced its the pressure solve because of my parameter testing,
and the iterations and smoothing set at 20.. so i put together some
papers.. i cant draw conclusions from them i hope you can . the code is
not too hard to find.

here in this paper looks very promising:

Here is says the approach allows for *800 to 1 density *with bubbles that
change shape since they focus only on areas of interest:

An Adaptive Level Set Approach for Incompressible Two-Phase Flows1
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.457.5625&rep=rep1&type=pdf
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.457.5625&rep=rep1&type=pdf

flow = new TwoPhase(n, m, 0, body, L/10.0, true, 0.01, 0.001); //QUICK
changed viscosity to 0.001... air enters water... this could be an issue
if heat is added...

these researches love AMG for mud flows. and everything. while others say
that AMG is suitable as a preconditioner, for two phase air/ waer.
https://info.ngwa.org/GWOL/pdf/021573551.pdf

i think if it is lagging.. then the code can change to AMG->CG...
many of the optimizations are just trivial parallelizations.

in c# we have Parallel.ForEach loops...

https://www.math.ucla.edu/~jteran/papers/MST10.pdf

A parallel multigrid Poisson solver for fluids simulation on large grids

https://wissrech.ins.uni-bonn.de/research/projects/amg/

Multigrid Methods on Adaptively Refined Grids

my next step is to use MAC cut cell scheme to do multi density soot that i
hope will stratify. But, i will need water and I might skip ahead to 2
phase if I will get all that anyways.. and help with Lilypad... I would
love to see if work with that code i sent before

  • for IB learning,now im interested in a breaking wave.. over a variable
    bottom...I hope we can solv the solvers... maybe changing to *AMGPG *for
    two phase.

- is there buoyancy?.. i search for bubbles and i find no explicit code..
bubbles are not in FLIP..
.. normally.. I have a 2d man and a 2d flying
wing.. if we crashes into the sea.. i hope water leaks in... and it
sinks... maybe even implodes from pressure at depth.... and burpees out
bubbles ...

-should i try convex, air containing shapes , are they supported? seems
they would work.. and float... i am not able to set the ball free to
float or sink...

i might be able to prototype faster with processing ( but the leaks are
annoying) than with my setup. in that case i could maybe improve lilypad
since my code often comes as java ro c++ first. my plan Now my main
priority is to get "tunabrains" adaptive fluids to java port, to c#,
mult-density single phase dust integrated with my c# tool as a plugin...
and see some stratified air i hope, that interacts with temperature
gradients and with my 2d bipedal creatures. If they can roll vortices
from their arms, that would be ideal. ( Im building a 2d dimension
universe simulation). An educational but fun physics game.. But, i will
need waves, and if I can use a fork for this.. sharing back the general
purpose, perhaps this can be my air, water, and solids, as c# and java are
so similar.

Or more. I would port it to c#... apply trivial parallelization.. to
loops i use parallel.foreach...

On Sat, Sep 10, 2016 at 10:00 AM, Dr Weymouth notifications@github.com
wrote:

I've reproduced the issue and migrated to a new issue with a clear title
focused just on this topic.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AP_LmWGYGzZ16Il-K9uHHzt4KHBbtZreks5qog9EgaJpZM4JwAR9
.

@damian-666
Copy link
Author

found some speedups for java.. .net has better tools but MSFT hasnt pushed
it as mush as the community has..

rendering.. using p2d or p3d makes a big difference.

size(1400,700,P2D);

https://blog.jooq.org/2015/02/05/top-10-easy-performance-
optimisations-in-java/

http://stackoverflow.com/questions/5686200/parallelizing-a-for-loop

memory leaks... they go by alot of names... soits hard to clear them... log
out log in...

people even fix the source ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants