CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Community Contributions (https://www.cfd-online.com/Forums/openfoam-community-contributions/)
-   -   [swak4Foam] calculating velocity transformations (https://www.cfd-online.com/Forums/openfoam-community-contributions/103504-calculating-velocity-transformations.html)

santoshgoku June 19, 2012 12:15

calculating velocity transformations
 
Hi,

I am trying to calculate a new transformed velocity field
as a post processing step according to the following expression: dU/dt = c*dUz/dx, where c is a constant. I am trying it using swak4Foam, in which I had a couple of questions,

- how to add the dUz/dx term? I can add the div(U) term, but how to ensure that I get dUz/dx alone?
- for the dU/dt term, is it possible to use an explicit formulation like, U=U-delta(T)*c*<term for dUz/dx>?

I went through the slides on swak4Foam (No C++, please. We’re users!, Bernhard F.W. Gschaider, June 2011), and found multiple ways to obtain such expressions.

- using libswakFunctionObject and expressionField kind formulations (slide number 61/176)

Ustar
{
functionObjectLibs ("libswakFunctionObjects.so");
type expressionField;
outputControl timeStep;
fieldName Ustar;
expression "U = U - c*div(U)*deltaT()";
autowrite true;
}

- using storedValues and patchExpression (slide 131/176)

Which of the above will be apt for this formulation?

Lastly, I was trying to compile swak4Foam for OpenFoam v. 2.0.1, and I get the following errors (related to swakcodedFunctionObject) while compiling:

swakCodedFunctionObject.C:299: error: no matching function for call to ‘Foam::swakCodedFunctionObject::updateLibrary(Foam ::word&)’
/home/OpenFOAM/OpenFOAM-2.0.1/src//postProcessing/functionObjects/utilities/lnInclude/codedFunctionObject.H:111: note: candidates are: void Foam::codedFunctionObject::updateLibrary() const
make: *** [Make/linux64GccDPOpt/swakCodedFunctionObject.o] Error 1

I removed the last parameter to the =codedFunctionObject=-constructor in =swakCodedFunctionObject.C= as mentioned in the README, but still continue to get this error. Due to this, I am unable to use the expressionField kind of formulation as well. Rest of the functions are compiled fine, the problem is only with the codedFunctionObject.

Looking forward to some directions. :)

Thanks,
Santosh


gschaider June 19, 2012 14:58

Quote:

Originally Posted by santoshgoku (Post 367273)
Hi,

I am trying to calculate a new transformed velocity field
as a post processing step according to the following expression: dU/dt = c*dUz/dx, where c is a constant. I am trying it using swak4Foam, in which I had a couple of questions,

- how to add the dUz/dx term? I can add the div(U) term, but how to ensure that I get dUz/dx alone?



What speaks against "grad(U.z).x" ?

Quote:

Originally Posted by santoshgoku (Post 367273)
- for the dU/dt term, is it possible to use an explicit formulation like, U=U-delta(T)*c*<term for dUz/dx>?

No. But some months ago field expressions can also do "ddt(U)" (provided the solver stores the old value of U). You can also access the old time value of U (again: if stored) with "oldTime(U)"

Quote:

Originally Posted by santoshgoku (Post 367273)
I went through the slides on swak4Foam (No C++, please. We’re users!, Bernhard F.W. Gschaider, June 2011), and found multiple ways to obtain such expressions.

- using libswakFunctionObject and expressionField kind formulations (slide number 61/176)

Ustar
{
functionObjectLibs ("libswakFunctionObjects.so");
type expressionField;
outputControl timeStep;
fieldName Ustar;
expression "U = U - c*div(U)*deltaT()";
autowrite true;
}

That would involve equation solving and swak doesn't do that. So: no "=" in expression

Quote:

Originally Posted by santoshgoku (Post 367273)
- using storedValues and patchExpression (slide 131/176)

If the solver doesn't store the old U a sequence like this (yeah. This is weird) in the variables
Code:

"oldU=storedU;"
"oldU=U;"

and stordeU being declared as a stored variable will give you the U of the previous timestep as oldU to use in your expressions

Quote:

Originally Posted by santoshgoku (Post 367273)

Quote:

Originally Posted by santoshgoku (Post 367273)
Which of the above will be apt for this formulation?

Lastly, I was trying to compile swak4Foam for OpenFoam v. 2.0.1, and I get the following errors (related to swakcodedFunctionObject) while compiling:

swakCodedFunctionObject.C:299: error: no matching function for call to ‘Foam::swakCodedFunctionObject::updateLibrary(Foam ::word&)’
/home/OpenFOAM/OpenFOAM-2.0.1/src//postProcessing/functionObjects/utilities/lnInclude/codedFunctionObject.H:111: note: candidates are: void Foam::codedFunctionObject::updateLibrary() const
make: *** [Make/linux64GccDPOpt/swakCodedFunctionObject.o] Error 1

I removed the last parameter to the =codedFunctionObject=-constructor in =swakCodedFunctionObject.C= as mentioned in the README, but still continue to get this error. Due to this, I am unable to use the expressionField kind of formulation as well. Rest of the functions are compiled fine, the problem is only with the codedFunctionObject.


There was a change in that interface some time after 2.0.1 but before 2.1 and I never bothered to support both versions as users with a fairly up-to-date 2.0.x would have the new interface. Sorry

santoshgoku June 19, 2012 16:26

thanks for the reply Bernhard, really appreciated. :)

So, if I understand correct,

1. If U is stored in the previous time step, then I can use the expressionField, with the following expression,

Code:

expression "oldTime(U) - c*grad(U.z).x*deltaT()";
2. In case U is not stored in the previous timestep, I can use stored variables function as follows,

Code:

variables (
"oldU=storedU;"
"oldU=U;"
"storedU =oldU - deltaT()*c*grad(U.z).x;"
)

storedVariables (
{
name storedU;
initialValue "0";
}
)

expression "storedU"

But then, in the example in the slides, the above expression is used only as a patchExpression, with some "accumulation" term. Can it be used as a modified form of expressionField or swakExpression?

I will try upgrading my version of OpenFoam, and hope it works. :)

Thanks again.
Santosh

gschaider June 20, 2012 05:18

Quote:

Originally Posted by santoshgoku (Post 367321)
thanks for the reply Bernhard, really appreciated. :)

So, if I understand correct,

1. If U is stored in the previous time step, then I can use the expressionField, with the following expression,

Code:

expression "oldTime(U) - c*grad(U.z).x*deltaT()";
2. In case U is not stored in the previous timestep, I can use stored variables function as follows,

Code:

variables (
"oldU=storedU;"
"oldU=U;"
"storedU =oldU - deltaT()*c*grad(U.z).x;"
)

storedVariables (
{
name storedU;
initialValue "0";
}
)

expression "storedU"

But then, in the example in the slides, the above expression is used only as a patchExpression, with some "accumulation" term. Can it be used as a modified form of expressionField or swakExpression?

accumulations is only needed if you need "a single number" to print to the screen. For instance if you use a swakExpression-FO to print the maximum and minimum of your field to the screen.

Concerning your variables: I think you'll want to exchange the last two assignments (overwrite oldU AFTER it was used. But I still don't quite understand what exactly you're trying to calculate here

santoshgoku June 20, 2012 05:39

I am trying to calculate a transformation which will lead to a new steady velocity field. The constant "c" in my expression is the velocity of structures I observe in the flow. After this transformation, I will be able to obtain a velocity field which does not change with time.

Mehrez April 19, 2016 12:57

Hi,
I think there is a bug when using swak4Foam "storedVariables" in parallel.
The stored variables are not defined in all the sub-meshes and cause a crash.
Mhrz


All times are GMT -4. The time now is 10:04.