CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)
-   -   swak4Foam for calculating velocity transformations (http://www.cfd-online.com/Forums/openfoam/103504-swak4foam-calculating-velocity-transformations.html)

 santoshgoku June 19, 2012 12:15

swak4Foam for 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?

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*?
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 20:05.