From 6a66a15b8ff4b8621190dadea6ac99fb9532fc4d Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 21 Feb 2023 17:30:23 +0000 Subject: [PATCH 1/2] ENH: generalise masterCoarsest restart (GAMG) --- .../GAMGAgglomeration/GAMGAgglomeration.C | 287 ++++++++++-------- .../GAMGAgglomeration/GAMGAgglomeration.H | 53 +++- .../algebraicPairGAMGAgglomeration.C | 14 +- .../dummyAgglomeration/dummyAgglomeration.C | 2 +- .../dummyAgglomeration/dummyAgglomeration.H | 20 +- .../pairGAMGAgglomerate.C | 96 +++--- .../pairGAMGAgglomeration.H | 19 +- .../GAMGProcAgglomeration.C | 3 +- .../masterCoarsestGAMGProcAgglomeration.C | 31 ++ .../masterCoarsestGAMGProcAgglomeration.H | 24 ++ .../GAMG/GAMGSolverAgglomerateMatrix.C | 3 +- .../faceAreaPairGAMGAgglomeration.C | 13 +- .../assemblyFaceAreaPairGAMGAgglomeration.C | 20 +- .../MGridGenGAMGAgglomeration.C | 15 +- .../rhoSimpleFoam/squareBendLiq/Allrun | 6 +- 15 files changed, 391 insertions(+), 215 deletions(-) diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomeration.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomeration.C index 4a5ffe33fe..1bcb5d600a 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomeration.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomeration.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2019-2021 OpenCFD Ltd. + Copyright (C) 2019-2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -48,11 +48,15 @@ namespace Foam // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -void Foam::GAMGAgglomeration::compactLevels(const label nCreatedLevels) +void Foam::GAMGAgglomeration::compactLevels +( + const label nCreatedLevels, + const bool doProcessorAgglomerate +) { - nCells_.setSize(nCreatedLevels); + nCells_.setSize(nCreatedLevels, 0); restrictAddressing_.setSize(nCreatedLevels); - nFaces_.setSize(nCreatedLevels); + nFaces_.setSize(nCreatedLevels, 0); faceRestrictAddressing_.setSize(nCreatedLevels); faceFlipMap_.setSize(nCreatedLevels); nPatchFaces_.setSize(nCreatedLevels); @@ -60,8 +64,8 @@ void Foam::GAMGAgglomeration::compactLevels(const label nCreatedLevels) meshLevels_.setSize(nCreatedLevels); // Have procCommunicator_ always, even if not procAgglomerating - procCommunicator_.setSize(nCreatedLevels + 1); - if (processorAgglomerate()) + procCommunicator_.setSize(nCreatedLevels + 1, -1); + if (doProcessorAgglomerate && processorAgglomerate()) { procAgglomMap_.setSize(nCreatedLevels); agglomProcIDs_.setSize(nCreatedLevels); @@ -71,156 +75,160 @@ void Foam::GAMGAgglomeration::compactLevels(const label nCreatedLevels) procBoundaryFaceMap_.setSize(nCreatedLevels); procAgglomeratorPtr_().agglomerate(); + } +} +void Foam::GAMGAgglomeration::printLevels() const +{ + Info<< "GAMGAgglomeration:" << nl + << " local agglomerator : " << type() << nl; + if (processorAgglomerate()) + { + Info<< " processor agglomerator : " + << procAgglomeratorPtr_().type() << nl + << nl; } - // Print a bit - if (debug) + Info<< setw(36) << "nCells" + << setw(20) << "nFaces/nCells" + << setw(20) << "nInterfaces" + << setw(20) << "nIntFaces/nCells" + << setw(12) << "profile" + << nl + << setw(8) << "Level" + << setw(8) << "nProcs" + << " " + << setw(8) << "avg" + << setw(8) << "max" + << " " + << setw(8) << "avg" + << setw(8) << "max" + << " " + << setw(8) << "avg" + << setw(8) << "max" + << " " + << setw(8) << "avg" + << setw(8) << "max" + //<< " " + << setw(12) << "avg" + << nl + << setw(8) << "-----" + << setw(8) << "------" + << " " + << setw(8) << "---" + << setw(8) << "---" + << " " + << setw(8) << "---" + << setw(8) << "---" + << " " + << setw(8) << "---" + << setw(8) << "---" + << " " + << setw(8) << "---" + << setw(8) << "---" + //<< " " + << setw(12) << "---" + //<< " " + << nl; + + const label maxSize = returnReduce(size(), maxOp