-
Notifications
You must be signed in to change notification settings - Fork 884
[WIP] fix multigrid agglomeration #2375
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
@@ -45,7 +45,7 @@ class CMultiGridGeometry final : public CGeometry { | |||
* \param[in] config - Definition of the particular problem. | |||
* \return <code>TRUE</code> or <code>FALSE</code> depending if the control volume can be agglomerated. | |||
*/ | |||
bool SetBoundAgglomeration(unsigned long CVPoint, short marker_seed, const CGeometry* fine_grid, | |||
bool SetBoundAgglomeration(unsigned long CVPoint, vector<short> marker_seed, const CGeometry* fine_grid, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to pass information about all markers on the seed node (number of markers and index of marker)
//if ((config->GetMarker_All_KindBC(marker_seed[0]) == SYMMETRY_PLANE) || | ||
// (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL)) { | ||
// if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { | ||
// agglomerate_CV = false; | ||
// } | ||
//} |
Check notice
Code scanning / CodeQL
Commented-out code Note
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 11 days ago
To fix the commented-out code error, remove the problematic commented-out code block entirely (lines 558–567). This will eliminate dead code and reduce confusion for future maintainers. Do not replace it with documentation, as the lines in question are pure C++ code, not explanatory comments. Only remove the commented-out code, leaving all surrounding code unchanged.
No new imports, method definitions, or dependencies are needed. The only required update is to the region in Common/src/geometry/CMultiGridGeometry.cpp
where the commented-out code appears, specifically lines 558–567.
@@ -555,16 +555,7 @@ | ||
|
||
/*--- If there is only one marker, but the marker is the SEND_RECEIVE ---*/ | ||
|
||
//if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { | ||
// agglomerate_CV = true; | ||
//} | ||
|
||
//if ((config->GetMarker_All_KindBC(marker_seed[0]) == SYMMETRY_PLANE) || | ||
// (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL)) { | ||
// if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { | ||
// agglomerate_CV = false; | ||
// } | ||
//} | ||
} | ||
|
||
/*--- If there are two markers in the vertex that is going to be agglomerated ---*/ |
//if ((config->GetMarker_All_KindBC(copy_marker[0]) == EULER_WALL) || | ||
// (config->GetMarker_All_KindBC(copy_marker[1]) == EULER_WALL)) { | ||
agglomerate_seed = true; | ||
//} |
Check notice
Code scanning / CodeQL
Commented-out code Note
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 11 days ago
To fix this issue, all commented-out code (including the //}
on line 137 and other fragments thereof) should either be fully restored if required, or removed entirely for clarity. In this specific case, the disabled logic concerns whether to allow agglomeration when either of two markers correspond to the EULER_WALL
type. The best option is to remove the commented-out code (//if....
, // ...
, //}
), since the current active logic always sets agglomerate_seed = true;
for counter == 2
, and thus the commented code is not contributing any functionality or documentation. This increases code readability and maintainability.
Edits should be limited to the lines 122–137 in Common/src/geometry/CMultiGridGeometry.cpp: all commented-out code lines within that block should be removed. Context lines above and below should be preserved, with no change to the current (active) logic or function.
No imports, methods, or definitions need be added.
@@ -119,22 +119,15 @@ | ||
agglomerate_seed = true; | ||
|
||
/*--- Euler walls can be curved and agglomerating them leads to difficulties ---*/ | ||
//if (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL) | ||
// agglomerate_seed = false; | ||
} | ||
|
||
/*--- If there are two markers, we will agglomerate if any of the | ||
markers is SEND_RECEIVE ---*/ | ||
|
||
if (counter == 2) { | ||
//agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || | ||
// (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE); | ||
|
||
/* --- Euler walls can also not be agglomerated when the point has 2 markers ---*/ | ||
//if ((config->GetMarker_All_KindBC(copy_marker[0]) == EULER_WALL) || | ||
// (config->GetMarker_All_KindBC(copy_marker[1]) == EULER_WALL)) { | ||
agglomerate_seed = true; | ||
//} | ||
} | ||
|
||
/*--- If there are more than 2 markers, the agglomeration will be discarded ---*/ |
//if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { | ||
// agglomerate_CV = true; | ||
//} |
Check notice
Code scanning / CodeQL
Commented-out code Note
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 11 days ago
To fix the problem, we should remove the commented-out code entirely from this region, while retaining any actual commentary provided in regular comments. In this case, lines 558 to 560 are commented-out C++ code (conditional check and assignment) and can be cleanly removed without affecting the functional comments or overall code logic, as the conditions appear to be covered elsewhere. Care should be taken not to remove any comments that describe logic, only remove actual deactivated code. The changes are to be made in file Common/src/geometry/CMultiGridGeometry.cpp
, lines 558–560. No new imports or definitions are needed.
-
Copy modified line R559
@@ -555,10 +555,8 @@ | ||
|
||
/*--- If there is only one marker, but the marker is the SEND_RECEIVE ---*/ | ||
|
||
//if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { | ||
// agglomerate_CV = true; | ||
//} | ||
|
||
|
||
//if ((config->GetMarker_All_KindBC(marker_seed[0]) == SYMMETRY_PLANE) || | ||
// (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL)) { | ||
// if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { |
// agglomerate_CV = true; | ||
// } | ||
// } |
Check notice
Code scanning / CodeQL
Commented-out code Note
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 11 days ago
The best way to fix this problem is to remove the lines that contain commented-out code—specifically, the line // agglomerate_CV = true;
at line 591 and related commented-out code in that block (lines 585–593). Retain any comments that provide meaningful documentation, but extraneous commented-out code should be deleted. Only edit the affected function within the provided range.
@@ -582,15 +582,7 @@ | ||
} | ||
/*--- First we verify that the seed is a physical boundary ---*/ | ||
|
||
// if (config->GetMarker_All_KindBC(marker_seed[0]) != SEND_RECEIVE) { | ||
// /*--- Then we check that one of the markers is equal to the seed marker, and the other is send/receive ---*/ | ||
|
||
// if (((copy_marker[0] == marker_seed[0]) && (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)) || | ||
// ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) && (copy_marker[1] == marker_seed[0]))) { | ||
agglomerate_CV = false; | ||
// agglomerate_CV = true; | ||
// } | ||
// } | ||
} | ||
} | ||
/*--- If the element belongs to the domain, it is never agglomerated. ---*/ |
@@ -307,6 +307,7 @@ | |||
case SUB_SOLVER_TYPE::TURB_SST: | |||
genericSolver = CreateTurbSolver(kindTurbModel, solver, geometry, config, iMGLevel, false); | |||
metaData.integrationType = INTEGRATION_TYPE::SINGLEGRID; | |||
//metaData.integrationType = INTEGRATION_TYPE::MULTIGRID; |
Check notice
Code scanning / CodeQL
Commented-out code Note
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 11 days ago
To fix the issue, remove the commented-out code line entirely. Since commented-out code such as //metaData.integrationType = INTEGRATION_TYPE::MULTIGRID;
does not serve as documentation or provide necessary context and does not affect the current functionality, simply deleting the line is the best fix. This edit should be applied at line 313, leaving the remaining code untouched.
@@ -310,7 +310,6 @@ | ||
case SUB_SOLVER_TYPE::TURB_SST: | ||
genericSolver = CreateTurbSolver(kindTurbModel, solver, geometry, config, iMGLevel, false); | ||
metaData.integrationType = INTEGRATION_TYPE::SINGLEGRID; | ||
//metaData.integrationType = INTEGRATION_TYPE::MULTIGRID; | ||
break; | ||
case SUB_SOLVER_TYPE::TEMPLATE: | ||
genericSolver = new CTemplateSolver(geometry, config); |
In SU2, we overwrite part of the config settings. The nr of pre-smoothing steps for the finest grid is always 1. The nr of post-smoothing steps for the coarsest and finest grid is always 0. I do not know why. |
Thank you. We wish to contribute our knowledge about MG for scalar transport equations; if an exciting group is on this topic, we will be happy to collaborate. |
Nice to hear there is a larger interest in getting the multigrid method to a higher level. If you would like to enable multigrid for species transport, the first thing to do is change the integration type from SINGLEGRID to MULTIGRID for CreateSpeciesSolver in CSolverFactory.cpp. Then in CMultigridIntegration.cpp, there might be some solver specific things that need to be added. |
Thank you for pointing this out. Does the current agglomeration (for the mean-flow equations) consider lines normal to the surface? I think that the Hiroaki paper (MG) considred implicit line? |
Hi, No we currently do not do agglomeration along lines. I suspect this is one reason that we do not have good multigrid performance for a number of viscous testcases. @EvertBunschoten was looking into this as well, but he was not yet able to reproduce the good performance reported by the papers of Diskin, Nishikawa and others. |
Proposed Changes
Implement multigrid agglomeration rules according to Nishikawa et al paper:
https://www.researchgate.net/publication/267557097_Development_and_Application_of_Parallel_Agglomerated_Multigrid_Method_for_Complex_Geometries
These rules were not consistently implemented. Issues:
TO DO: properly agglomerate nodes that are on mpi interfaces (SEND_RECEIVE markers)
PR Checklist
Put an X by all that apply. You can fill this out after submitting the PR. If you have any questions, don't hesitate to ask! We want to help. These are a guide for you to know what the reviewers will be looking for in your contribution.
pre-commit run --all
to format old commits.