SlideShare a Scribd company logo
2
Most read
5
Most read
OpenFOAM Programming Tips
Keywords:
• OpenFOAM
• findPatchID
• gSum
• faceCells
• DynamicList
English
Fumiya Nozaki
Last Updated: 6 May 2015
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
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
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
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
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
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
8
6. Logical operators
boolList A(4);
A[0] = true;
A[1] = false;
A[2] = true;
A[3] = false;
Info<< "A: " << A << endl;
boolList B(4);
B[0] = true;
B[1] = true;
B[2] = false;
B[3] = false;
Info<< "B: " << B << endl;
boolList C = A * B;
Info<< "C: " << C << endl;
boolList D = A + B;
Info<< "D: " << D << endl;
A: 4(1 0 1 0)
B: 4(1 1 0 0)
C: 4(1 0 0 0)
D: 4(1 1 1 0)
Logical conjunction
Logical disjunction
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
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
I will continuously update this slide in the future.
Kindly let me know
if you have any ideas about what topics to cover.
12
Thank
You!

More Related Content

PDF
Boundary Conditions in OpenFOAM
PDF
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
PDF
OpenFOAM の境界条件をまとめよう!
PDF
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
PDF
OpenFOAMの壁関数
PDF
Spatial Interpolation Schemes in OpenFOAM
PDF
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
PDF
Limited Gradient Schemes in OpenFOAM
Boundary Conditions in OpenFOAM
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の境界条件をまとめよう!
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAMの壁関数
Spatial Interpolation Schemes in OpenFOAM
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
Limited Gradient Schemes in OpenFOAM

What's hot (20)

PDF
Customization of LES turbulence model in OpenFOAM
PDF
OpenFOAMにおけるDEM計算の力モデルの解読
PDF
OpenFOAM LES乱流モデルカスタマイズ
PDF
OpenFOAM の Function Object 機能について
PDF
OpenFOAMソルバの実行時ベイズ最適化
PPTX
OpenFOAMによる気液2相流解析の基礎と設定例
PDF
ParaView による可視化 Tips
PDF
Basic Boundary Conditions in OpenFOAM v2.4
PDF
OpenFOAMのinterfoamによる誤差
PDF
Tutorial to set up a case for chtMultiRegionFoam in OpenFOAM 2.0.0
PDF
OpenFOAMを用いた計算後の等高面データの取得方法
PDF
Dynamic Mesh in OpenFOAM
PDF
CFD for Rotating Machinery using OpenFOAM
PDF
Turbulence Models in OpenFOAM
PDF
OpenFoamの混相流solver interFoamのパラメータによる解の変化
PDF
interFoamの検証
PDF
OpenFOAMにおける混相流計算
PDF
OpenFOAMのDEM解析のpatchInteractionModelクラスの解読
PDF
OpenFOAMと風洞実験~オープンCAE勉強会@関西の取組み~
PDF
OpenFOAMによる混相流シミュレーション入門
Customization of LES turbulence model in OpenFOAM
OpenFOAMにおけるDEM計算の力モデルの解読
OpenFOAM LES乱流モデルカスタマイズ
OpenFOAM の Function Object 機能について
OpenFOAMソルバの実行時ベイズ最適化
OpenFOAMによる気液2相流解析の基礎と設定例
ParaView による可視化 Tips
Basic Boundary Conditions in OpenFOAM v2.4
OpenFOAMのinterfoamによる誤差
Tutorial to set up a case for chtMultiRegionFoam in OpenFOAM 2.0.0
OpenFOAMを用いた計算後の等高面データの取得方法
Dynamic Mesh in OpenFOAM
CFD for Rotating Machinery using OpenFOAM
Turbulence Models in OpenFOAM
OpenFoamの混相流solver interFoamのパラメータによる解の変化
interFoamの検証
OpenFOAMにおける混相流計算
OpenFOAMのDEM解析のpatchInteractionModelクラスの解読
OpenFOAMと風洞実験~オープンCAE勉強会@関西の取組み~
OpenFOAMによる混相流シミュレーション入門
Ad

Similar to OpenFOAM Programming Tips (20)

PPTX
Image representation
PDF
mooney slides for dynamic topoFvMesh in open foam for mesh motion
PDF
How_to_blockMesh using OpenFOAM good mateiral
PDF
Collision Detection an Overview
PDF
Physics for Game Programmers: Spatial Data Structures
PDF
Mincut_Placement_Final_Report
PPTX
Image Representation & Descriptors
PPTX
3 d active meshes for cell tracking
PDF
Computing the Area of a Polygon
PPTX
Computer graphics
PPTX
representation.pptx
PPT
Polygon filling
PPTX
On the Convex Layers of a Planer Dynamic Set of Points
KEY
openFrameworks 007 - 3D
PDF
High-Performance Physics Solver Design for Next Generation Consoles
PPTX
Hidden surface removal
PPT
PAM.ppt
PPT
Fill area algorithms
PDF
Delaunay triangulation from 2-d delaunay to 3-d delaunay
PDF
Verification of Efficacy of Inside-Outside Judgement in Respect of a 3D-Primi...
Image representation
mooney slides for dynamic topoFvMesh in open foam for mesh motion
How_to_blockMesh using OpenFOAM good mateiral
Collision Detection an Overview
Physics for Game Programmers: Spatial Data Structures
Mincut_Placement_Final_Report
Image Representation & Descriptors
3 d active meshes for cell tracking
Computing the Area of a Polygon
Computer graphics
representation.pptx
Polygon filling
On the Convex Layers of a Planer Dynamic Set of Points
openFrameworks 007 - 3D
High-Performance Physics Solver Design for Next Generation Consoles
Hidden surface removal
PAM.ppt
Fill area algorithms
Delaunay triangulation from 2-d delaunay to 3-d delaunay
Verification of Efficacy of Inside-Outside Judgement in Respect of a 3D-Primi...
Ad

More from Fumiya Nozaki (9)

PDF
blockCoupledSwirlTestチュートリアル
PDF
CAESES Free チュートリアル
PDF
CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
PDF
無償のモデリングソフトウェアCAESESを使ってみた
PDF
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
PDF
Adjoint Shape Optimization using OpenFOAM
PDF
OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』
PDF
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
PDF
OpenFOAM を用いた Adjoint 形状最適化事例1
blockCoupledSwirlTestチュートリアル
CAESES Free チュートリアル
CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
無償のモデリングソフトウェアCAESESを使ってみた
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
Adjoint Shape Optimization using OpenFOAM
OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
OpenFOAM を用いた Adjoint 形状最適化事例1

Recently uploaded (20)

PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
KodekX | Application Modernization Development
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Spectroscopy.pptx food analysis technology
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Building Integrated photovoltaic BIPV_UPV.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Spectral efficient network and resource selection model in 5G networks
Digital-Transformation-Roadmap-for-Companies.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Programs and apps: productivity, graphics, security and other tools
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
“AI and Expert System Decision Support & Business Intelligence Systems”
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
KodekX | Application Modernization Development
Mobile App Security Testing_ A Comprehensive Guide.pdf
Machine learning based COVID-19 study performance prediction
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
MYSQL Presentation for SQL database connectivity
Diabetes mellitus diagnosis method based random forest with bat algorithm
Reach Out and Touch Someone: Haptics and Empathic Computing
Spectroscopy.pptx food analysis technology

OpenFOAM Programming Tips

  • 1. OpenFOAM Programming Tips Keywords: • OpenFOAM • findPatchID • gSum • faceCells • DynamicList English Fumiya Nozaki Last Updated: 6 May 2015
  • 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
  • 8. 8 6. Logical operators boolList A(4); A[0] = true; A[1] = false; A[2] = true; A[3] = false; Info<< "A: " << A << endl; boolList B(4); B[0] = true; B[1] = true; B[2] = false; B[3] = false; Info<< "B: " << B << endl; boolList C = A * B; Info<< "C: " << C << endl; boolList D = A + B; Info<< "D: " << D << endl; A: 4(1 0 1 0) B: 4(1 1 0 0) C: 4(1 0 0 0) D: 4(1 1 1 0) Logical conjunction Logical disjunction
  • 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.