2. 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
3. 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()
4. 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]
5. 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
6. 6
5. How to read cellZones
FoamFile
{
version 2.0;
format ascii;
class regIOobject;
location "constant/polyMesh";
object cellZones;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
2
(
rotor
{
type cellZone;
cellLabels List<label>
5
(
3
4
5
10
11
)
;
}
Format of the cellZones file
stator
{
type cellZone;
cellLabels List<label>
4
(
15
17
20
21
)
;
}
)
For want of space
The number of cellzones Name of cellzones
The number of cells
that belong to the cellZone
List of cell labels
7. 7
5. How to read cellZones
label cellZoneID = mesh.cellZones().findZoneID("stator");
const labelList& cellLabels = mesh.cellZones()[cellZoneID];
Info<< "cellZoneID: " << cellZoneID << endl;
Info<< "cellLabels: " << cellLabels << endl;
Continued from the previous page.
cellZoneID: 1
cellLabels: 4(15 17 20 21)
MRFZone.C
Example of use
9. 9
7. How to use DynamicList
DynamicList<label> partA(0);
partA.append(3);
partA.append(1);
partA.append(4);
partA.append(1);
partA.append(5);
partA.append(9);
partA.append(2);
Info<< partA << endl;
DynamicList<label> partB(0);
partB.append(6);
partB.append(5);
partB.append(3);
partB.append(5);
partA.append(partB);
Info<< partA << endl;
Append an element at the end of the list
Initialization
7(3 1 4 1 5 9 2)
11(3 1 4 1 5 9 2 6 5 3 5)
Append a List(partB) at the end of partA
10. 10
7. How to use DynamicList
labelList uniqueIndex;
uniqueOrder(partA, uniqueIndex);
Info<< uniqueIndex << endl;
DynamicList<label> uniqueList(0);
forAll(uniqueIndex, i)
{
uniqueList.append(partA[uniqueIndex[i]]);
}
partA.transfer(uniqueList);
Info<< partA << endl;
7(3 6 9 2 10 7 5)
Continued from the previous page.
Generate (sorted) indices
corresponding to unique list values
7(1 2 3 4 5 6 9)
11(3 1 4 1 5 9 2 6 5 3 5)
0 1 2 3 4 5 6 7 8 9 10
Index
Create a list of unique values
(remove duplicate values)
PartA
11. 11
I will continuously update this slide in the future.
Kindly let me know
if you have any ideas about what topics to cover.