openfoam programming tips

7
OpenFOAM Programming Tips Keywords: OpenFOAM findPatchID gSum faceCells English Fumiya Nozaki Last Updated: 1 June 2014

Upload: fumiya-nozaki

Post on 22-Nov-2014

1.298 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: OpenFOAM Programming Tips

OpenFOAM Programming Tips

Keywords: • OpenFOAM • findPatchID • gSum • faceCells

English

Fumiya Nozaki

Last Updated: 1 June 2014

Page 2: OpenFOAM Programming Tips

2

1. How to get patch’s label from patch’s name

label patchID = mesh.boundaryMesh().findPatchID("NAME_OF_PATCH");

Info << "patchID = " << patchID << endl;

Example

5

(

inlet

{

type patch;

nFaces 30;

startFace 24170;

}

outlet

{

type patch;

nFaces 57;

startFace 24200;

}

upperWall

{

type wall;

inGroups 1(wall);

nFaces 223;

startFace 24257;

}

lowerWall

{

type wall;

inGroups 1(wall);

nFaces 250;

startFace 24480;

}

)

label patchID = mesh.boundaryMesh().findPatchID(“upperWall");

Info << "patchID = " << patchID << endl;

⇒ patchID = 2

0

1

2

3

Page 3: OpenFOAM Programming Tips

3

2. How to calculate the sum over the specified patch

label outletPatchID = mesh.boundaryMesh().findPatchID(“outlet");

scalar outFlux = gSum(phi.boundaryField()[outletPatchID]);

Info << “Volumetric flux = " << outFlux << “ [m^3/s]” << endl;

We can calculate the total outlet flux by summing the field phi over the patch named outlet:

gSum() sums over all the processors in a parallel run

If you calculate the total “inlet” flux using the above code, it takes the negative value because the face normal vectors point in the opposite direction from the inlet velocities.

inlet outlet

U

mesh.Sf()

Page 4: OpenFOAM Programming Tips

4

3. How to get a boundary value of a variable

label patchID = mesh.boundaryMesh().findPatchID(“outlet");

forAll(mesh.boundary()[patchID], faceI)

{

Info<< U.boundaryField()[patchID][faceI] << endl;

}

We can get the velocity on the outlet patch using the following code:

faceI=0

faceI=1

faceI=2

U.boundaryField()[patchID][1]

outlet

U.boundaryField()[patchID][2]

U.boundaryField()[patchID][0]

Page 5: OpenFOAM Programming Tips

5

4. How to get variable values in the cells adjacent to a patch

We can get the label list of cells adjacent to patch using faceCells():

label patchID = mesh.boundaryMesh().findPatchID(“outlet");

forAll(mesh.boundary()[patchID], faceI)

{

Info<< U[mesh.boundary()[patchID].faceCells()[faceI]] << endl;

}

faceI=0

faceI=1

faceI=2

U[mesh.boundary()[patchID].faceCells()[1]]

outlet

Page 6: OpenFOAM Programming Tips

6

I will continuously update this slide in the future. Kindly let me know if you have any ideas about what topics to cover.

Page 7: OpenFOAM Programming Tips

7

Thank You!