Parallel run shows partial lid velocity in 3D cavity flow

31 views
Skip to first unread message

春风复苏

unread,
Oct 25, 2025, 4:50:52 AMOct 25
to Nek5000
Hello Nek5000 community,

I'm experiencing an issue with parallel execution of a 3D lid-driven cavity case and would appreciate your insights.

**Problem:**
- Serial run (`nekbmpi ldc 1`): Correct results - full lid moves as expected
- Parallel run (`nekbmpi ldc 4`): Only partial lid velocity observed, rest of domain shows zero velocity or just end caculating just 5 step with zero velocity.
- No error messages in either case

**Setup:**
- Mesh: 984 elements, 216 GLL points/element
- Generated via: CGNS → cgns2nek → genmap → makenek
- SIZE parameters:

parameter (lelg=1100)
parameter (lpmin=1)
parameter (lelt=lelg/lpmin + 3)


**What I've checked:**
- Boundary conditions set correctly in usrdat2 using bc(5,...)
- Single processor works perfectly
- No compilation or runtime errors

The issue seems related to parallel decomposition - boundary conditions aren't being fully applied across all partitions.

Has anyone encountered similar parallel boundary condition issues? Any suggestions for debugging or SIZE parameter adjustments?

Thank you for your help!

春风复苏

unread,
Oct 26, 2025, 5:48:52 AMOct 26
to Nek5000
I initially used id_face = nint(bc(5,iside,ieg,1)) to read boundary IDs (a method I came across at https://github.com/Nek5000/Nek5000/tree/master/tools/cgns2nek but unfortunately didn't fully understand its applicable scope). This approach fails to account for boundary mapping after mesh partitioning. The correct approach should be using id_face = BoundaryID(iside,e). I'd like to particularly emphasize this critical detail for parallel computing to everyone's attention.

YuHsiang Lan

unread,
Oct 26, 2025, 11:24:06 AMOct 26
to Nek5000
Hi,

I'm glad you figured out and have a working version. However, I'm still curious what causes the issue.
Getting boundary ID from bc should also work because that's how Nek5000 initialize the variable "boundaryID".

> id_face = nint(bc(5,iside,ieg,1))
The face that you are using ieg is a bit alarming. If you really go through ieg=1,nelgt, it then indeed only works for single processor.
If you still have your code, we can figure it out. Here is a short table to distinguish those two: 

Thanks,
Yu-Hsiang
--
Reply all
Reply to author
Forward
0 new messages