Add OpenACC SSPRK33/43 explicit time integrators and NSCylinderssprk33/43 test cases#76
Draft
Copilot wants to merge 2 commits into
Draft
Add OpenACC SSPRK33/43 explicit time integrators and NSCylinderssprk33/43 test cases#76Copilot wants to merge 2 commits into
Copilot wants to merge 2 commits into
Conversation
…ases with CI integration
Copilot created this pull request from a session on behalf of
loganoz
June 24, 2026 06:24
View session
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds OpenACC-enabled SSPRK33/SSPRK43 explicit time integrators and introduces corresponding Navier–Stokes cylinder regression test cases, wiring them into CPU-parallel and GPU (serial/parallel) CI workflows.
Changes:
- Updated explicit time stepping to dispatch via
RKStep_key(Euler/RK3/RK5/SSPRK33/SSPRK43/EulerRK3) instead of a hardcoded RK3 call. - Added OpenACC GPU-offload loops for SSPRK33/SSPRK43 (plus an OpenACC rewrite of the stage limiter path).
- Added
Cylinderssprk33/Cylinderssprk43test cases and included them in CI runs for NS CPU-parallel and GPU pipelines.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
Solver/src/libs/timeintegrator/TimeIntegrator.f90 |
Dispatch explicit stepping by RKStep_key (now supports SSPRK33/43). |
Solver/src/libs/timeintegrator/ExplicitMethods.f90 |
OpenACC implementations for SSPRK33/43 loops and updated limiter implementation. |
Solver/test/NavierStokes/Cylinderssprk33/SETUP/ProblemFile.f90 |
New SSPRK33 cylinder regression assertions (residual/probe/forces). |
Solver/test/NavierStokes/Cylinderssprk33/Cylinderssprk33.control |
New cylinder control file selecting SSPRK33 explicit method. |
Solver/test/NavierStokes/Cylinderssprk43/SETUP/ProblemFile.f90 |
New SSPRK43 cylinder regression assertions (residual/probe/forces). |
Solver/test/NavierStokes/Cylinderssprk43/Cylinderssprk43.control |
New cylinder control file selecting SSPRK43 explicit method. |
.github/workflows/CI_parallel_NS.yml |
Adds CPU-parallel build+run steps for the new SSPRK33/43 cylinder cases. |
.github/workflows/CI_parallel_GPU.yml |
Adds SLURM 2-GPU MPI build+run steps for the new SSPRK33/43 cylinder cases. |
.github/workflows/CI_serial_GPU.yml |
Adds SLURM 1-GPU serial build+run steps for the new SSPRK33/43 cylinder cases. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+670
to
+683
| select case (self % RKStep_key) | ||
| case (EULER_KEY) | ||
| CALL TakeExplicitEulerStep(sem % mesh, sem % particles, t, dt, ComputeTimeDerivative) | ||
| case (RK3_KEY) | ||
| CALL TakeRK3Step(sem % mesh, sem % particles, t, dt, ComputeTimeDerivative) | ||
| case (RK5_KEY) | ||
| CALL TakeRK5Step(sem % mesh, sem % particles, t, dt, ComputeTimeDerivative) | ||
| case (SSPRK33_KEY) | ||
| CALL TakeSSPRK33Step(sem % mesh, sem % particles, t, dt, ComputeTimeDerivative) | ||
| case (SSPRK43_KEY) | ||
| CALL TakeSSPRK43Step(sem % mesh, sem % particles, t, dt, ComputeTimeDerivative) | ||
| case (EULER_RK3_KEY) | ||
| CALL TakeEulerRK3Step(sem % mesh, sem % particles, t, dt, ComputeTimeDerivative, iter=k) | ||
| end select |
Comment on lines
+1109
to
+1113
| wJ = NodalStorage(Nx) % w(i) * & | ||
| NodalStorage(Ny) % w(j) * & | ||
| NodalStorage(Nz) % w(k) * & | ||
| e % geom % jacobian(i,j,k) | ||
| q1sum = q1sum + Q(1,i,j,k) * wJ |
| ! Local variables | ||
| ! --------------- | ||
| ! | ||
| CHARACTER(LEN=29) :: testName = "Cylinder ChandrasekarRoe" |
Comment on lines
+591
to
+593
| WRITE(6,*) testName, " ... Passed" | ||
| WRITE(6,*) "This test case has no expected solution yet, only checks the residual after 100 iterations." | ||
| ELSE |
| ! Local variables | ||
| ! --------------- | ||
| ! | ||
| CHARACTER(LEN=29) :: testName = "Cylinder ChandrasekarRoe" |
Comment on lines
+591
to
+593
| WRITE(6,*) testName, " ... Passed" | ||
| WRITE(6,*) "This test case has no expected solution yet, only checks the residual after 100 iterations." | ||
| ELSE |
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.
Cherry-pick of the SSPRK33/SSPRK43 OpenACC work from PR #58, excluding the positivity limiter, solver template, and mesh/discretization changes.
Time integrator changes
ExplicitMethods.f90: Replaces!$omp parallel doloops inTakeSSPRK33StepandTakeSSPRK43Stepwith!$acc parallel loop gang/!$acc loop vector collapse(3)for GPU offloading. Expands array assignments into explicit index loops to be ACC-compatible.TimeIntegrator.f90: Replaces a hardcodedTakeRK3Stepcall with aselect caseonRKStep_key, dispatching to Euler, RK3, RK5, SSPRK33, SSPRK43, and EulerRK3.Test cases
Solver/test/NavierStokes/Cylinderssprk33/— control file +ProblemFile.f90Solver/test/NavierStokes/Cylinderssprk43/— control file +ProblemFile.f90CI
NSCylinderssprk33andNSCylinderssprk43build+run steps added to:CI_parallel_NS.yml(cases 46 & 47)CI_parallel_GPU.yml(SLURM, 2-GPU parallel)CI_serial_GPU.yml(SLURM, 1-GPU serial)