
[Sponsors] 
February 10, 2014, 13:05 
Swak4Foam/GroovyBC for total pressure in simpleFoam

#1 
Senior Member
Phoevos
Join Date: Mar 2009
Posts: 103
Rep Power: 8 
Hi to everyone,
I am trying to set up a case where I define the total pressure at the inlet and the static pressure at the outlet of the computational domain. I am working with the simpleFoam solver and since it does not support total pressure BCs I am trying to implement the condition using Groovy BC. So, since simpleFoam works using kinematic pressure (p/rho) instead of the actual pressure, the formula for the kinematic total pressure is: ptot = p + 1/2 * u^2 (all p refer to kinematic pressures) thus I have to set on the boundary the value of p = ptot  1/2* u^2. I tried to do so in the following way, but it does not work: (the following is the relevant entry in the p file of the '0' folder for simpleFoam) Code:
inlet { type groovyBC; variables ( "ptotal=3444476.5;" "umag=average(mag(U()));" "pstatic=max(0,ptotal0.5*pow(umag,2));" ) valueExpression "pstatic"; value uniform 3444476.5; } Code:
> FOAM FATAL ERROR: Parser Error for driver PatchValueExpressionDriver at "1.14" :"syntax error, unexpected '('" "average(mag(U()))" ^  How should I define the velocity vector, in order to get the average velocity magnitude on the face, so that I can use it for the calculation? Thanks in advance. 

February 11, 2014, 07:10 

#2 
Senior Member
Phoevos
Join Date: Mar 2009
Posts: 103
Rep Power: 8 
It seems that the problem I have is more complicated...
I tried to replace the condition at inlet with something much simpler, but it does not work either. The new boundary condition I use is (as before this is from the p entry in the 0 folder): inlet { type groovyBC; variables "pressure=6722.237;" valueExpression "pressure"; value uniform 6722.237; } This condition of course is the trivial fixed value. However, upon execution, after the first iteration, the value of pressure at the boundary is 0, which obviously is not what is defined in the groovyBC... Regarding the compilation of the swak4Foam package, I did not get any errors (apart from the issue with the python configuration, but I am not interested in python integration right now) and I have all the relevant libraries generated. Of course I have the required libraries included in the controlDict file: libs ( "libOpenFOAM.so" "libsimpleSwakFunctionObjects.so" "libswakFunctionObjects.so" "libgroovyBC.so" ); A final note: I am using OpenFoam 2.2.x and for swak4Foam I use the version from Bruno (post#8  Swak4FOAM 0.2.3 / OF2.2.x installation error, as suggested by the relevant page in the wiki http://openfoamwiki.net/index.php/Contrib/swak4Foam). Any ideas on that? 

February 13, 2014, 06:57 

#3 
Senior Member
Phoevos
Join Date: Mar 2009
Posts: 103
Rep Power: 8 
Ok, after some searching I have found the solution of the problems. First of all when closing the variables section there should be a semicolon.
For the pressure/total pressure boundary conditions it seems that it is more stable to dynamically alter the velocity on the boundary according to the local pressure, instead of pressure itself; the reason is that when fixing pressure at the inlet, there might be development of unphysical recirculation which destabilize the solution. By altering the velocity (and keeping zero gradient for pressure) at inlet the solution is much stabler. For fixing pressure, by dynamically altering the velocity the condition is: Code:
inlet { type groovyBC; value uniform (0.65 0 0); variables ( "ptarget=344447.65;" "umag{inlet}=sum(mag(U)*mag(Sf()))/sum(mag(Sf()));" "pstat{inlet}=sum(p*mag(Sf()))/sum(mag(Sf()));" "pdiff=(ptargetpstat)/ptarget;" "relax=0.1;" "uvel=(umag+pdiff*relax);" ); valueExpression "vector(uvel,0,0)"; } Code:
inlet { type groovyBC; value uniform (0.5 0 0); variables ( "ptot_target=344447.65;" "umag{inlet}=sum(mag(U)*mag(Sf()))/sum(mag(Sf()));" "pstat{inlet}=sum(p*mag(Sf()))/sum(mag(Sf()));" "ptot=pstat+0.5*umag*umag;" "pdiff=(ptot_targetptot)/ptot_target;" "relax=0.1;" "uvel=(umag+pdiff*relax);" ); valueExpression "vector(uvel,0,0)"; } Hope it will be useful for others... 

February 13, 2014, 20:12 

#4  
Assistant Moderator
Bernhard Gschaider
Join Date: Mar 2009
Posts: 3,915
Rep Power: 40 
Quote:
__________________
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 

February 14, 2014, 08:44 

#5 
Senior Member
Phoevos
Join Date: Mar 2009
Posts: 103
Rep Power: 8 
Hi Bernhard,
The idea to average on the face was to enhance stability. I could (or anyone else interested) try the per face calculation, instead of the per patch averaging and see what I get, but the results I got were really satisfactory. I will keep it in mind for any future calculations. So thank you for your comment and also I would like to particularly thank you for your contribution as a whole (I refer to swak4Foam). 

February 14, 2014, 12:51 

#6  
Assistant Moderator
Bernhard Gschaider
Join Date: Mar 2009
Posts: 3,915
Rep Power: 40 
Quote:
For usage of storedVariables see the incomplete reference guide and examples
__________________
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 

Thread Tools  
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
Calculation of the Governing Equations  Mihail  CFX  7  September 7, 2014 06:27 
High pressure residual simpleFoam  CiccioPasticcio  OpenFOAM Running, Solving & CFD  6  March 5, 2013 22:20 
Pressure BC for combustion chamber  Giuki  FLUENT  1  July 19, 2011 11:35 
pressure in simpleFoam  mediode  OpenFOAM Running, Solving & CFD  2  March 6, 2011 15:33 
mapping of pressure field (simplefoam to cavitatingFoam)  siddharameshwara  OpenFOAM Running, Solving & CFD  14  February 15, 2011 09:59 