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] Possible to sum across different patches? (https://www.cfd-online.com/Forums/openfoam-community-contributions/123567-possible-sum-across-different-patches.html)

Anne Lincke September 16, 2013 09:35

Possible to sum across different patches?
 
Dear Foamers,

I hope this question doesn't already exist in the forum.
I would like to calculate an average value which should be evaluated over different patches.
Is it possible to do this with swak4foam?

Furthermore I would like to compute the difference on each patch to this (global) average value.

So far I am able to evaluate the expressions seperately, i.e. I am computing the average value on patch1, compute the difference of my variable (temperature) to this value on patch 1, and I am doing the same for the other patches.

It would be great if I could compute an expression like this
HTML Code:

gAv= \sum_{Outlet j} \sum{i \in Outlet_j} T_i A_i /A(Outlet j)
and compute the difference at each patch seperately
HTML Code:

\sum_{i \in Outlet j} (T_i A_i - gAv)
I hope that this is understandable.

Thank you very much in advance for an answer or sharing your experiences.

Kind Regards
Anne

gschaider September 16, 2013 15:41

Quote:

Originally Posted by Anne Lincke (Post 452028)
Dear Foamers,

I hope this question doesn't already exist in the forum.
I would like to calculate an average value which should be evaluated over different patches.
Is it possible to do this with swak4foam?

Furthermore I would like to compute the difference on each patch to this (global) average value.

So far I am able to evaluate the expressions seperately, i.e. I am computing the average value on patch1, compute the difference of my variable (temperature) to this value on patch 1, and I am doing the same for the other patches.

It would be great if I could compute an expression like this
HTML Code:

gAv= \sum_{Outlet j} \sum{i \in Outlet_j} T_i A_i /A(Outlet j)
and compute the difference at each patch seperately
HTML Code:

\sum_{i \in Outlet j} (T_i A_i - gAv)
I hope that this is understandable.

Thank you very much in advance for an answer or sharing your experiences.

Kind Regards
Anne

Yep. It is possible with external variables. Assuming you have tow patches called here and there
Code:

variables (
  "sumHere{here}=sum(T*area());"
  "sumThere{there}=sum(T*area());"
  "areaHere{here}=sum(area());"
  "areaThere{there}=sum(area());"
  "totalAverage=(sumHere+sumThere)/(areaHere+areaThere);"
);

then use the totalAverage in the expression you're actually calculating. If you're only working on patch here you could leave out the {here} but the way it is written above it should work for both patches and you can save yourself some typing with the dictionary-include.

Anne Lincke September 17, 2013 03:27

Dear Bernhard,
thank you very much for the fast reply!
I will try to make this evaluation run with your instructions as soon as possible.

Best Regards
Anne

manuc July 22, 2016 10:41

Dear Bernard

I have two patches (w_l,w_lb --> both of them of different area and mesh distribution) and I want to find combined nusselt No. for them.
When I do the below it crashes:
--------------------------------------------------------------
Test234
{
type patchExpression;
patches (
w_l
w_lb
);
verbose true;
variables (
"Tsat=300;"
"lc2D=0.0786;"
"sumHere{w_l}=sum(snGrad(T)*area()/(T-Tsat);"
/*"dtwl{w_l}=T-Tsat;"
"dtwlb{w_lb}=T-Tsat;"*/
"sumThere{w_lb}=sum(snGrad(T)*area()/(T-Tsat));"
"areaHere{w_l}=sum(area());"
"areaThere{w_lb}=sum(area());"
"totalAverage=(sumHere+sumThere)/(areaHere+areaThere);"*/

);
expression "totalAverage";
accumulations (
max
min
average
sum
);

------------------------------------------------------------------
But when I try to debug and remove the division by (T-Tsat) it runs ,but not what I need..

----------------------------------------------------------------------------
Test234
{
type patchExpression;
patches (
w_l
w_lb
);
verbose true;
variables (
"Tsat=300;"
"lc2D=0.0786;"
"sumHere{w_l}=sum(snGrad(T)*area());"
/*"dtwl{w_l}=T-Tsat;"
"dtwlb{w_lb}=T-Tsat;"*/
"sumThere{w_lb}=sum(snGrad(T)*area());"
"areaHere{w_l}=sum(area());"
"areaThere{w_lb}=sum(area());"
"totalAverage=(sumHere+sumThere)/(areaHere+areaThere);"*/

);
expression "totalAverage";
accumulations (
max
min
average
sum
);

-----------------------------------------------------------------

Also it creates 2 output files w_l and w_lb .Is this expected

Could you please comment on it..

My scenario: A wall cut into two patches so that I could use one of the as inlet for flow if needed.At present both considered as wall. So I want Nusselt number at the whole wall and I need averaging over both patches.

Anne Lincke July 26, 2016 04:39

Hey Manu,

have you tried to just replace Tsat by the constant value, i.e. 300?
Maybe the coder has problems to detect the variable Tsat inside the variable definition part.....

Best,
Anne

manuc July 26, 2016 07:15

Hello Anne

I did try that,but doesnt work.Bye the way when used only for a single patch the same piece of file works.But when I try to find avg. of two patches it fails.

Anne Lincke July 26, 2016 07:19

Quote:

Originally Posted by manuc (Post 611400)
"sumHere{w_l}=sum(snGrad(T)*area()/(T-Tsat);"

In the expression above one bracket is missing. Maybe this is the error?!

manuc July 26, 2016 07:44

Nope:

I tried that the error reported is:

Build : 2.4.0-dcea1e13ff76
Exec : DNSbuoyantBoussinesqPimpleFoam -parallel
Date : Jul 26 2016
Time : 13:43:04
Host : "n11-40"
PID : 24612
Case : /home/manuchakkingal/OpenFOAM/manuchakkingal-2.4.0/run/2d_NC_porous_4_by_4_Ra_10_6
nProcs : 4
Slaves :
3
(
"n11-40.24613"
"n11-40.24614"
"n11-40.24615"
)

Pstream initialized with:
floatTransfer : 0
nProcsSimpleSum : 0
commsType : nonBlocking
polling iterations : 0
sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster
allowSystemOperations : Allowing user-supplied system call operations

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
with errorcode 1.

NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
--------------------------------------------------------------------------

Anne Lincke July 26, 2016 07:46

Looks as if there might be a division by zero....

manuc July 26, 2016 07:47

I will check it "for division by zero"..Thanks


All times are GMT -4. The time now is 20:29.