Conversation
Updated the CI_parallel_NS.yml workflow to run the Navier-Stokes Channel test with 64 MPI processes instead of 8, likely to improve test coverage or performance.
The Channel test step in the CI workflow is now divided into separate serial and parallel executions, improving clarity and coverage of both execution modes.
Introduced two new CI steps to run the Channel Navier-Stokes test in parallel using 8 and 64 MPI processes. This enhances test coverage for parallel execution scenarios.
Aligns the GPU WallFunctionConnectivity implementation with the CPU version, fixing bugs and improving robustness in MPI parallel executions. Adds and updates serial and parallel channel tests, corrects channel forcing, and improves CI workflows and validation.
…ion-in-multiphase-solver2 Fixed velocity computation. Updated test values.
migrate local runners to nibbler
Update stored variables StatsAveragingModule.f90
Contributor
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
This PR syncs develop into main, introducing support for reusing previously-generated MPI mesh partitioning files and expanding CI/test coverage for additional Navier–Stokes cases.
Changes:
- Add a new control keyword to read mesh partitioning from disk and corresponding infrastructure to write/read partitioning metadata.
- Update wall-function connectivity and several MPI/OpenACC paths to improve parallel behavior.
- Expand documentation and CI to cover new/updated test cases (UniformFlow read-partitions, multiple cylinder cases, Channel64).
Reviewed changes
Copilot reviewed 45 out of 46 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| doc/pages/user_manual/running-a-simulation.md | Documents the new “read partitioning from files” control keyword. |
| doc/UserManual.tex | Adds the new keyword to the LaTeX manual and fixes a few formatting/color/math details. |
| Solver/test/NavierStokes/UniformFlow/UniformFlow_HDF5_read_partitions.control | New test control file exercising partitioning read-from-disk behavior. |
| Solver/test/NavierStokes/CylinderStandardCentral/SETUP/ProblemFile.f90 | Adds a new cylinder test harness with assertions. |
| Solver/test/NavierStokes/CylinderStandardCentral/CylinderStandardCentral.control | Control file for the cylinder “Standard Central” case. |
| Solver/test/NavierStokes/CylinderPirozzoliRoe/SETUP/ProblemFile.f90 | Adds a new cylinder test harness with assertions. |
| Solver/test/NavierStokes/CylinderPirozzoliRoe/CylinderPirozzoliRoe.control | Control file for the cylinder “Pirozzoli Roe” case. |
| Solver/test/NavierStokes/CylinderMorinishiLowDissipationRoe/SETUP/ProblemFile.f90 | Adds a new cylinder test harness with assertions. |
| Solver/test/NavierStokes/CylinderMorinishiLowDissipationRoe/CylinderMorinishiLowDissipationRoe.control | Control file for the cylinder “Morinishi low-dissipation Roe” case. |
| Solver/test/NavierStokes/CylinderKennedyGruberLaxFriedrichs/SETUP/ProblemFile.f90 | Adds a new cylinder test harness with assertions. |
| Solver/test/NavierStokes/CylinderKennedyGruberLaxFriedrichs/CylinderKennedyGruberLaxFriedrichs.control | Control file for the cylinder “Kennedy–Gruber LF” case. |
| Solver/test/NavierStokes/CylinderEntropyConservingCentral/SETUP/ProblemFile.f90 | Adds a new cylinder test harness with assertions. |
| Solver/test/NavierStokes/CylinderEntropyConservingCentral/CylinderEntropyConservingCentral.control | Control file for the cylinder “Entropy conserving Central” case. |
| Solver/test/NavierStokes/CylinderDucrosMatrixDissipation/SETUP/ProblemFile.f90 | Adds a new cylinder test harness with assertions. |
| Solver/test/NavierStokes/CylinderDucrosMatrixDissipation/CylinderDucrosMatrixDissipation.control | Control file for the cylinder “Ducros + Matrix dissipation” case. |
| Solver/test/NavierStokes/Channel64/SETUP/ProblemFile.f90 | Adds/adjusts channel test setup code. |
| Solver/test/NavierStokes/Channel64/Channel.control | Adds a 64-rank channel control file. |
| Solver/test/NavierStokes/Channel/SETUP/ProblemFile.f90 | Removes OscarChannel and updates channel logic to reflect new forcing approach. |
| Solver/test/Multiphase/RisingBubbleVreman/SETUP/ProblemFile.f90 | Updates golden values in multiphase test assertions. |
| Solver/test/Components/outdated/Gradients/make.deps | Updates outdated dependency list for MeshPartitioning. |
| Solver/src/libs/sources/ChannelForcing.f90 | Refactors channel forcing; adds global rho extrema handling and MPI reductions. |
| Solver/src/libs/physics/multiphase/VariableConversion_MU.f90 | Adjusts velocity gradient conversion formula for multiphase. |
| Solver/src/libs/physics/common/bcs/WallFunctionConnectivity.f90 | Reworks wall-function neighbor connectivity to use face storage and adds ghost-handling warning. |
| Solver/src/libs/physics/common/bcs/InflowBC.f90 | Fixes preprocessor branch to describe multiphase inflow correctly. |
| Solver/src/libs/mpiutils/partitioned_mesh.f90 | Adds flag for “read partitioning from file” and changes MPI_Partitioning visibility. |
| Solver/src/libs/mpiutils/MPI_Face.f90 | Uses MPI_DOUBLE_PRECISION for Q send/recv. |
| Solver/src/libs/mesh/MeshPartitioning.f90 | Writes partitioning metadata files and adds parallel read routine. |
| Solver/src/libs/mesh/Makefile | Reorders mesh library objects to satisfy build dependencies. |
| Solver/src/libs/mesh/IBMClass.f90 | Adds OpenACC host updates before MPI usage in IBM band-point computation. |
| Solver/src/libs/mesh/HexMesh.f90 | Adds read-from-file partition info in diagnostics and extends host updates for Cahn–Hilliard fields. |
| Solver/src/libs/mesh/HexElementClass.f90 | Fixes OpenACC private variables list to include inv_jac. |
| Solver/src/libs/mesh/FaceClass.f90 | Adjusts OpenACC loop structure when projecting flux to element storage. |
| Solver/src/libs/foundation/Setup.f90 | Adds a main keyword constant for reading partitioning from files. |
| Solver/src/libs/discretization/EllipticBR1.f90 | Avoids integer arithmetic in penalty scaling under MULTIPHASE. |
| Solver/src/libs/discretization/DGSEMClass.f90 | Adds control flow to read partitioning from files instead of partitioning on root. |
| Solver/src/addons/mergeStatistics/StatsAveragingModule.f90 | Fixes stats variable count when gradients are present. |
| Solver/src/NavierStokesSolverRANS/main.f90 | Ensures read partitioning from files has a default value. |
| Solver/src/NavierStokesSolver/main.f90 | Ensures read partitioning from files has a default value. |
| Solver/src/MultiphaseSolver/main.f90 | Ensures read partitioning from files has a default value. |
| Solver/src/MultiphaseSolver/SpatialDiscretization.f90 | Reorders MPI face updates and refactors MPI-face flux paths for multiphase/OpenACC. |
| Solver/configure | Registers new test cases (cylinders + Channel64). |
| README.md | Adds an acknowledgments section. |
| .github/workflows/CI_parallel_NS.yml | Adds CI steps for read-partition test and additional Navier–Stokes and channel test cases. |
Comments suppressed due to low confidence (1)
doc/pages/user_manual/running-a-simulation.md:1
- Missing space in the parenthetical: '
NUMRANKSis' should be 'NUMRANKSis'.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -7,7 +7,7 @@ module MeshPartitioning | |||
| use FileReadingUtilities , only: RemovePath, getFileName | |||
|
|
|||
Comment on lines
+442
to
+444
| ! Create partitioning folder if not present | ||
| write(path,'(A,I0,A)') "./MESH/partitioning_", no_of_domains, "_ranks/" | ||
| call system("mkdir -p " // trim(path)) |
| real(kind=RP) :: fluxL(1:NCONS,0:f % Nf(1),0:f % Nf(2)) | ||
| real(kind=RP) :: fluxR(1:NCONS,0:f % Nf(1),0:f % Nf(2)) | ||
| real(kind=RP) :: flux(1:NCONS,0:f % Nf(1),0:f % Nf(2),2) | ||
| integer :: i, j, eq |
Comment on lines
+1204
to
+1208
| do k = 1, NGRAD | ||
| UxL(k) = f % storage(1) %U_x(k,i,j) * scaleMu(k) | ||
| UyL(k) = f % storage(1) %U_y(k,i,j) * scaleMu(k) | ||
| UzL(k) = f % storage(1) %U_z(k,i,j) * scaleMu(k) | ||
| end do |
Comment on lines
+206
to
+212
| #ifdef _HAS_MPI_ | ||
| if (MPI_Process % doMPIAction) then | ||
| call mpi_allreduce(ghostCountLocal, ghostCountGlobal, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD, ierr) | ||
| else | ||
| ghostCountGlobal = ghostCountLocal | ||
| end if | ||
| #else |
| type(PartitionedMesh_t), allocatable, public :: mpi_allPartitions(:) | ||
|
|
||
| integer, protected, public :: MPI_Partitioning | ||
| integer, public :: MPI_Partitioning |
Comment on lines
+1148
to
+1151
| run: | | ||
| source /opt/intel/oneapi/setvars.sh || true | ||
| mpiexec --oversubscribe -n 64 ./horses3d.ns Channel.control | ||
| if: '!cancelled()' |
fix mpi run as root
Add code coverage checks to workflows using codecov
…work Update repository location to github.com/horses-framework
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I open this PR (as a draft) to keep track of the changes in develop.