CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)

 splif July 5, 2009 13:05

Hello

I new in OpenFoam user and I try to get the bulk temperautre about a area.

the theory: my problem

tbulk = integration(U*T*dA) / integration(U*dA)

the nummerical:

I'm not really sure how to sovle this problem.
Postprocessing or ?
I think that you need a summation about the area,like:
sum = sum + T(n)*U(n)*dy (Fortran 2D)
How can i fixed this problem?
Have somebody a idea?

Thanks
valentin

 henrik July 6, 2009 05:32

Dear Valentin,

There are two issues. How to define the area and how to parallelise.

I would also advise you to use the flux rather than the velocity since it is guaranteed to be conservative.

Neglecting parallelisation issues and assuming that you want to work with patch (iP) the following will the job:

Code:

```heatFlux =     sum(T.boundaryField()[iP]*phi.boundaryField()[iP])/sum(phi.boundaryField()[iP]);```
Henrik

 splif July 6, 2009 13:30

Hi Henrik,

sorry for this Question. But i'm not in used to work with openFoam.
what means [ip] ? It is for direction, like [x].

I'm not sure if i get you wrong:

q=sum(t*flux)/sum(flux)=sum(t*rho*U)/sum((rho*U)) ?
Is there no multiply wirh dy and dx?

Thanks
Valentin

 gschaider July 6, 2009 15:51

Quote:

Originally Posted by splif (Post 221633)
sorry for this Question. But i'm not in used to work with openFoam.
what means [ip] ? It is for direction, like [x].
Quote:
 Originally Posted by splif (Post 221633) No. It is the index of the patch. For an example on how to get the index if you got the name of the patch have a look at the sources of \$FOAM_UTILITIES/postProcessing/patch/patchIntegrate
I'm not sure if i get you wrong:

q=sum(t*flux)/sum(flux)=sum(t*rho*U)/sum((rho*U)) ?
Is there no multiply wirh dy and dx?

No. The is all included in phi (that is the flux Henrik was talking about). For the definition of phi look elsewhere (it's been discussed zillions of times)

Bernhard

 henrik July 7, 2009 09:34

Dear Valentin,

thanks for your private message (in German). I hope you don't mind if I repeat what I understand is what you are trying to do.

Valentin is seeking to evaluate the local Nusselt number and needs the bulk temperature to do so. The local Nusselt number would be per wall face (additional averaging may apply) and the bulk temperature is a function of the axial position in the pipe (x-coordinate in his case).

The problem is now to evaluate the bulk temperature for a given axial position.

Is this correct?

Henrik

 splif July 7, 2009 11:23

Hello Hendriks,

that's right. I search for a summation (lilke (sum(sum( T.yz*U.yz*dy)dz)each Cells) about an area (yz).And every summation should go every cells in x-> direction.
Perhaps somebody has an idea.

Thanks
Valentin

 henrik July 7, 2009 12:22

Dear Valentin,

Okay. I would try the following. Create a lookup table for T_bulk as a function of x. To do so, you need a function that maps x into an index.

Code:

```scalarField vol(nCellsx, 0.0); scalarField Tbulk(nCellsx, 0.0); forAll(T, cellI) {     if ( inBulkRegion(mesh.C()[cellI]) )     {         label index = floor(mesh.C()[cellI].x()/length*nCellsx);         vol[index] += mesh.V()[cellI];         Tbulkl[index] += T[cellI]*mesh.V()[cellI];     } } Tbulk /= vol;```
Then walk over the wall patch to calculate the local Nusselt number and use the same index function to look up Tbulk (but calculated with the face center's x-coordinate).

This is by no means elegant, it will not parallelise easily and there are better ways of doing this. However, this will get you a long way.

Henrik

 splif July 7, 2009 13:19

Hello Hendrik,

thanks a lot.Have a nice evening (in German).

Bye
Valentin

 nimasam August 11, 2011 18:26

hi
could you calculate bulk temperature along pipe axis ? i search for it too

 nimasam August 13, 2011 16:46

bulk Temperature + cell selection

Code:

```    label patchii = mesh.boundaryMesh().findPatchID("fixedWall");     const Foam::fvsPatchField<Foam::Vector<double> > Cpatches = mesh.Cf().boundaryField()[patchii];     scalar nCellsx = Cpatches.size();     labelListList inBulkRegionList (nCellsx);         forAll(Cpatches, cellj)     {       label nSelectedCell = 1;       forAll(mesh.C(), celli)       {         if ( (Cpatches[cellj]).z() == (mesh.C()[celli]).z())           {       inBulkRegionList[cellj].setSize(nSelectedCell,celli);       nSelectedCell ++;           }       }     }```

hi dear foamer
i have a pipe! its axismyetric and it is 40*160! i want to have the cells in each cross section means the cells with the same highth!
so i should have a list, this list has 160 sublist, each sublist contains the cell IDs of in each highth! so it should be 40!
i wrote above code to make a list of list!!! it compiles well but the result is some how strange and it dose not return all cell selections in each height i expected it returns 40 cells in each height but you can see the results.can anybody tell me why?

labelListList:
160
(

19 // it should be 40 cells!
(
2
6
7
9
10
11
13
14
16
18
19
20
21
23
24
27
33
35
37
)

18
(
43
47
50
51
52
53
57
58
59
63
64
66
68
69
70
73
74
79
)

5(84 85 87 117 119)

11
(
123
125
129
130
136
139
140
141
143
149
152
)

20
(
160
161
166
167
169
170
172
173
176
177
178
180
181
182
185
190
195
196
197
199
)

13
(
200
201
205
209
210
217
221
222
224
229
232
235
238
)

8(244 246 247 262 265 266 275 278)
....
)

 All times are GMT -4. The time now is 02:00.