CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM

simpleSwakFunctionObjects

Register Blogs Community New Posts Updated Threads Search

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   January 24, 2013, 18:11
Default simpleSwakFunctionObjects
  #1
Member
 
Tayo
Join Date: Aug 2012
Posts: 94
Rep Power: 13
tayo is on a distinguished road
Hello,

I want to compute the volume and position of a rising bubble using swak4Foam. The iso-surface that computes the surface area works fine but the volume and position keeps giving me issues. Kindly look at the highlighted portion to help correct it. Thanks.

functions
(
createInterface
{
type createSampledSurface;
outputControl timeStep;
outputInterval 1;
surfaceName interface;
surface {
type isoSurface;
isoField alpha1;
isoValue 0.5;
interpolate true;
}

surface
{
type swakExpression;
valueType surface;
surfaceName interface;
verbose true;
expression "area()";
accumulations (sum);

volume
{
type swakExpression;
valueType surface; // ----> (I have doubts here)
surfaceName interface; // ----> (I have doubts here too)
verbose true;
expression "(1-alpha1)*vol()";
accumulations (sum);
}


position
{
type swakExpression;
expression ( "y{internalField} = sum(pos().y*vol()*(1-alpha1)*rho2)/sum(vol()*(1-alpha1)*rho2);" );
accumulations (average);
verbose true;
}



);
tayo is offline   Reply With Quote

Old   January 25, 2013, 06:31
Default
  #2
Assistant Moderator
 
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51
gschaider will become famous soon enoughgschaider will become famous soon enough
Quote:
Originally Posted by tayo View Post
Hello,

I want to compute the volume and position of a rising bubble using swak4Foam. The iso-surface that computes the surface area works fine but the volume and position keeps giving me issues. Kindly look at the highlighted portion to help correct it. Thanks.

functions
(
createInterface
{
type createSampledSurface;
outputControl timeStep;
outputInterval 1;
surfaceName interface;
surface {
type isoSurface;
isoField alpha1;
isoValue 0.5;
interpolate true;
}

surface
{
type swakExpression;
valueType surface;
surfaceName interface;
verbose true;
expression "area()";
accumulations (sum);
Is the closing } missing here on purpose?

Quote:
Originally Posted by tayo View Post
volume
{
type swakExpression;
valueType surface; // ----> (I have doubts here)
surfaceName interface; // ----> (I have doubts here too)
verbose true;
expression "(1-alpha1)*vol()";
accumulations (sum);
}
That doesn't work. A surface doesn't have a volume. You can only calculate on the surface (where because of the definition as an isoSurface alpha is constant 0.5)

Quote:
Originally Posted by tayo View Post
position
{
type swakExpression;
expression ( "y{internalField} = sum(pos().y*vol()*(1-alpha1)*rho2)/sum(vol()*(1-alpha1)*rho2);" );
accumulations (average);
verbose true;
}



);
That doesn't work for various reasons
- general parameters missing
- best use a valueType internalField with an expression "(1-alpha1)*vol()*pos().y/sum((1-alpha1)*vol())" and an accumulation sum (this assumes that there is only one bubble)
- added note to above "average" is a pure arithmetic average of the values. It doesn't take cell sizes into account. Most of the time you won't want that for physical values. Do volume weighted average like above instead
- I'm not sure whether rho1 and rho2 are stored in memory as fields

If you want to use the surface you can calculate the average position of that with "area()*pos().y/sum(area())" (this value will differ for non-spherical bubbles from the above)
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request
gschaider is offline   Reply With Quote

Old   January 25, 2013, 12:06
Default
  #3
Member
 
Tayo
Join Date: Aug 2012
Posts: 94
Rep Power: 13
tayo is on a distinguished road
Thanks Bernard. It worked (without) rho2 just as you said.
tayo is offline   Reply With Quote

Old   March 18, 2013, 11:31
Default Bug with simpleSwakFunctionObjects
  #4
Member
 
Tayo
Join Date: Aug 2012
Posts: 94
Rep Power: 13
tayo is on a distinguished road
Hello Bernard,

I have used simpleSwakFunctionObjects to compute instanteneous position, surface area and volume of single bubble in stagnant liquid without any issue. However, when I have the liquid flowing upward with a certain velocity, I start getting weird numbers. I know these because simpleSwaFunctionObjects gives a negative bubble volume when in essence the bubble has not even collapsed when I view it in paraFoam. I also compared the bubble position values from simpleSwaFunctionObjects to an approximate value from paraFoam and the numbers were way off. I initially thought it was my solver but I get same effect even when I use the default interDyMFoam solver. Note that this only happens when I have bulk liquid velocity/turbulence. Is there was way I could correct this? Kindly find how I compute the values in the controlDict file below. Thank you.

........

libs (
"libOpenFOAM.so" // keeps paraFoam happy
"libincompressibleTransportModels.so"
"libtwoPhaseInterfaceProperties.so"
"libinterfaceProperties.so"
"libsimpleSwakFunctionObjects.so"
"libswakFunctionObjects.so"
);

functions
(
createInterface
{
type createSampledSurface;
outputControl timeStep;
outputInterval 1;
surfaceName interface;
surface {
type isoSurface;
isoField alpha1;
isoValue 0.5;
interpolate true;
}
}
surface
{
type swakExpression;
valueType surface;
surfaceName interface;
verbose true;
expression "area()";
accumulations (sum);
}
volume
{
type swakExpression;
valueType internalField;
verbose true;
expression "(1-alpha1)*vol()";
accumulations (sum);
}
z-position
{
type swakExpression;
valueType internalField;
verbose true;
expression "(1-alpha1)*vol()*pos().z/sum((1-alpha1)*vol())";
accumulations (sum);
}
);
tayo is offline   Reply With Quote

Old   March 18, 2013, 15:07
Default
  #5
Assistant Moderator
 
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51
gschaider will become famous soon enoughgschaider will become famous soon enough
Quote:
Originally Posted by tayo View Post
Hello Bernard,

I have used simpleSwakFunctionObjects to compute instanteneous position, surface area and volume of single bubble in stagnant liquid without any issue. However, when I have the liquid flowing upward with a certain velocity, I start getting weird numbers. I know these because simpleSwaFunctionObjects gives a negative bubble volume when in essence the bubble has not even collapsed when I view it in paraFoam. I also compared the bubble position values from simpleSwaFunctionObjects to an approximate value from paraFoam and the numbers were way off. I initially thought it was my solver but I get same effect even when I use the default interDyMFoam solver. Note that this only happens when I have bulk liquid velocity/turbulence. Is there was way I could correct this? Kindly find how I compute the values in the controlDict file below. Thank you.

........

libs (
"libOpenFOAM.so" // keeps paraFoam happy
"libincompressibleTransportModels.so"
"libtwoPhaseInterfaceProperties.so"
"libinterfaceProperties.so"
"libsimpleSwakFunctionObjects.so"
"libswakFunctionObjects.so"
);

functions
(
createInterface
{
type createSampledSurface;
outputControl timeStep;
outputInterval 1;
surfaceName interface;
surface {
type isoSurface;
isoField alpha1;
isoValue 0.5;
interpolate true;
}
}
surface
{
type swakExpression;
valueType surface;
surfaceName interface;
verbose true;
expression "area()";
accumulations (sum);
}
volume
{
type swakExpression;
valueType internalField;
verbose true;
expression "(1-alpha1)*vol()";
accumulations (sum);
}
z-position
{
type swakExpression;
valueType internalField;
verbose true;
expression "(1-alpha1)*vol()*pos().z/sum((1-alpha1)*vol())";
accumulations (sum);
}
);
The problem is with the expression "(1-alpha1)*vol()", right?

Hm. You mentioned interDyMFoam. My first impulse was "ah. A Moving mesh-problem". But then I thought all problems that would come from that would result in totally obscure numbers and/or crashes. And how can it get negative? vol() is positive by definition and (1-alpha1) should always be above 0 ... if alpha1 stays below 1". Are you sure that alpha1 is below or equal to 1 (that can happen with unfortunate circumstances)? If not please add a swakExpression or volMinMax to check that this is the case.

If alpha1 is OK: HOW is it getting negative: all of a sudden or does the value "drift" into negative territory? (I mean: theoretically the volume should stay constant as this is an incompressible solver, right?)
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request
gschaider is offline   Reply With Quote

Old   March 18, 2013, 18:18
Default
  #6
Member
 
Tayo
Join Date: Aug 2012
Posts: 94
Rep Power: 13
tayo is on a distinguished road
First of all, I think I did not explain clearly. The volume started out as positive at time zero but becomes negative at about 0.04sec and stayed negative thereafter. interDyMFoam does not solve phase change so the volume is meant to remain constant for the incompressible solver. And indeed, it seems constant when I view it from paraFoam except that simpleSwakFunctionObject gives a false value (negative volume and ridiculously high position).

I don't think it's a problem with alpha because like I said, viewing it from paraFoam shows everything looks fine. I tried the adaptive mesh for the case of bubble in stagnant fluid and simpleSwakFunctionObject worked perfectly except when I have a bulk velocity. volMinMax should not affect the overall output that's why I though it might be an issue with simpleSwakFunctionObject when used with bulk velocity. Note that the stagnant liquid problem was tried with adaptive mesh and simpleSwakFunctionObject worked fine too. Thank you.

Last edited by tayo; March 18, 2013 at 19:01.
tayo is offline   Reply With Quote

Old   March 19, 2013, 05:58
Default
  #7
Assistant Moderator
 
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51
gschaider will become famous soon enoughgschaider will become famous soon enough
Quote:
Originally Posted by tayo View Post
First of all, I think I did not explain clearly. The volume started out as positive at time zero but becomes negative at about 0.04sec and stayed negative thereafter.
It became negative all of a sudden or gradually? That is important to know what might be the problem.

Quote:
Originally Posted by tayo View Post
interDyMFoam does not solve phase change so the volume is meant to remain constant for the incompressible solver. And indeed, it seems constant when I view it from paraFoam except that simpleSwakFunctionObject gives a false value (negative volume and ridiculously high position).

I don't think it's a problem with alpha because like I said, viewing it from paraFoam shows everything looks fine. I tried the adaptive mesh for the case of bubble in stagnant fluid and simpleSwakFunctionObject worked perfectly except when I have a bulk velocity. volMinMax should not affect the overall output that's why I though it might be an issue with simpleSwakFunctionObject when used with bulk velocity. Note that the stagnant liquid problem was tried with adaptive mesh and simpleSwakFunctionObject worked fine too. Thank you.
"looking in paraview" is very vague and sometimes slightly missleading. The only thing I trust here are numbers and only those that come from OF (unless you're looking at the cell-values in paraView. Point values are tainted by paraview-interpolation). When evaluating "(1-alpha1)*vol()" swak4Foam only takes the values it is given and puts them together (using standard OF-functionality). There are two possibilities

a) the numbers are wrong
b) swak has a problem with the moving mesh and therefor uses the wrong number of data (because for instance it assumes there are 4000 cells in the mesh while it has grown to 4233 cells)

Before a) can't be ruled out I can't be bothered to look into b). So please add the following to your case:
- a volMinMax-functionObject (or a swakExpression with min/max-accumulations) to check that alpha1 is within [0,1]
- a swakExpression that gets min/max for "vol()" (this is a long shot, but I want to rule that out too because that is the other way how the expression can become negative)

If these numbers are OK then I'll assume that it is a swak-Problem. If you have case that reproduces the problem, that runs in under an hour and which you can make publicly available then I'll have a look at it (private support and larger cases I only do for a special class of people. Here we call them "clients" and send them invoices). Either publish it here or (that is better) open a bug at http://sourceforge.net/apps/mantisbt...l_bug_page.php
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request
gschaider is offline   Reply With Quote

Old   March 19, 2013, 12:30
Question
  #8
Member
 
Tayo
Join Date: Aug 2012
Posts: 94
Rep Power: 13
tayo is on a distinguished road
Thanks your your response Bernard.
The alpha1 values and hence volume gradually increases. Here are some of the numbers for the min and max alpha1 values.

time min max
1.19904e-05 -6.05361e-34 1
0.005 3.45139e-08 1.09748
0.01 3.14859e-08 1.32745
0.015 2.81559e-08 1.72453
0.02 2.67275e-08 2.1412
0.025 2.56677e-08 2.55744
0.03 2.47121e-08 3.03828

The alpha1 values are definitely wrong and these make all other values wrong. In short, the simulation actually blew up on alpha1 with me noticing early enough. I think I got so used to interpolate volFields in paraFoam that made me not notice the false alpha1. Swak4Foam is not the problem at all. Sorry for taking your time. Thanks

Now I have to figure how to fix the alpha1. Could it be choice of numerical scheme?
tayo is offline   Reply With Quote

Old   March 19, 2013, 14:10
Default
  #9
Assistant Moderator
 
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51
gschaider will become famous soon enoughgschaider will become famous soon enough
Quote:
Originally Posted by tayo View Post
Thanks your your response Bernard.
The alpha1 values and hence volume gradually increases. Here are some of the numbers for the min and max alpha1 values.

time min max
1.19904e-05 -6.05361e-34 1
0.005 3.45139e-08 1.09748
0.01 3.14859e-08 1.32745
0.015 2.81559e-08 1.72453
0.02 2.67275e-08 2.1412
0.025 2.56677e-08 2.55744
0.03 2.47121e-08 3.03828

The alpha1 values are definitely wrong and these make all other values wrong. In short, the simulation actually blew up on alpha1 with me noticing early enough. I think I got so used to interpolate volFields in paraFoam that made me not notice the false alpha1. Swak4Foam is not the problem at all. Sorry for taking your time. Thanks

Now I have to figure how to fix the alpha1. Could it be choice of numerical scheme?
Well. At least I have the satisfaction of being right

No idea about what is causing your problem. May I just interest you in two features that might be of interest for you to find what is the problem?

- the panicDump-funtionObject from the simpleFunctionObject automatically stops a run and writes all fields if some field goes outside the "comfort zone" (for instance -0.05 and 1.1 for alpha1). The advantage is that you get a snapshot *before* the values goes haywire and are therefor unusable
- the function maxPosition(alpha1) allows you to track where the maximum is happening
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request
gschaider is offline   Reply With Quote

Reply


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

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



All times are GMT -4. The time now is 05:15.