mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: parProfiling: profile linear solver only
This commit is contained in:
committed by
Mark OLESEN
parent
0ae31d4c00
commit
b0b3ec0d8e
@ -15,6 +15,7 @@ multiRegion/multiRegion.C
|
||||
removeRegisteredObject/removeRegisteredObject.C
|
||||
|
||||
parProfiling/parProfiling.C
|
||||
parProfiling/parProfilingSolver.C
|
||||
|
||||
solverInfo/solverInfo.C
|
||||
timeInfo/timeInfo.C
|
||||
|
||||
127
src/functionObjects/utilities/parProfiling/parProfilingSolver.C
Normal file
127
src/functionObjects/utilities/parProfiling/parProfilingSolver.C
Normal file
@ -0,0 +1,127 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2023 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "lduMatrix.H"
|
||||
#include "parProfilingSolver.H"
|
||||
#include "profilingPstream.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
defineTypeNameAndDebug(parProfilingSolver, 0);
|
||||
|
||||
typedef lduMatrix::solver baseType;
|
||||
|
||||
addNamedToRunTimeSelectionTable
|
||||
(
|
||||
baseType,
|
||||
parProfilingSolver,
|
||||
symMatrix,
|
||||
parProfiling
|
||||
);
|
||||
|
||||
addNamedToRunTimeSelectionTable
|
||||
(
|
||||
baseType,
|
||||
parProfilingSolver,
|
||||
asymMatrix,
|
||||
parProfiling
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Has been initialised
|
||||
static bool initialised_(false);
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::parProfilingSolver::parProfilingSolver
|
||||
(
|
||||
const word& fieldName,
|
||||
const lduMatrix& matrix,
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
lduMatrix::solver
|
||||
(
|
||||
fieldName,
|
||||
matrix,
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverControls
|
||||
)
|
||||
{
|
||||
if (!initialised_)
|
||||
{
|
||||
initialised_ = true;
|
||||
profilingPstream::reset();
|
||||
profilingPstream::suspend();
|
||||
}
|
||||
|
||||
const word baseSolver(solverControls.get<word>("baseSolver"));
|
||||
|
||||
solvePtr_.reset
|
||||
(
|
||||
lduMatrix::solver::New
|
||||
(
|
||||
baseSolver,
|
||||
fieldName,
|
||||
matrix,
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverControls
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
Foam::solverPerformance Foam::parProfilingSolver::solve
|
||||
(
|
||||
scalarField& psi_s,
|
||||
const scalarField& source,
|
||||
const direction cmpt
|
||||
) const
|
||||
{
|
||||
profilingPstream::enable();
|
||||
Foam::solverPerformance perf(solvePtr_->solve(psi_s, source, cmpt));
|
||||
profilingPstream::suspend();
|
||||
|
||||
return perf;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
132
src/functionObjects/utilities/parProfiling/parProfilingSolver.H
Normal file
132
src/functionObjects/utilities/parProfiling/parProfilingSolver.H
Normal file
@ -0,0 +1,132 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2023 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::parProfilingSolver
|
||||
|
||||
Description
|
||||
Wrapper to switch on parProfiling around a linear solver.
|
||||
|
||||
Used in combination with parProfiling functionObject.
|
||||
|
||||
Usage
|
||||
Example of linear solver specification in fvSolution:
|
||||
\verbatim
|
||||
solvers
|
||||
{
|
||||
p
|
||||
{
|
||||
solver parProfiling;
|
||||
// Actual solver to use
|
||||
baseSolver PCG;
|
||||
preconditioner DIC;
|
||||
..
|
||||
}
|
||||
}
|
||||
\endverbatim
|
||||
|
||||
SourceFiles
|
||||
parProfiling.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef Foam_parProfilingSolver_H
|
||||
#define Foam_parProfilingSolver_H
|
||||
|
||||
#include "lduMatrix.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class parProfilingSolver Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class parProfilingSolver
|
||||
:
|
||||
public lduMatrix::solver
|
||||
{
|
||||
// Private Data
|
||||
|
||||
//- Underlying solver
|
||||
autoPtr<lduMatrix::solver> solvePtr_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- No copy construct
|
||||
parProfilingSolver(const parProfilingSolver&) = delete;
|
||||
|
||||
//- No copy assignment
|
||||
void operator=(const parProfilingSolver&) = delete;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("parProfilingSolver");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and solver controls
|
||||
parProfilingSolver
|
||||
(
|
||||
const word& fieldName,
|
||||
const lduMatrix& matrix,
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~parProfilingSolver() = default;
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Solve the matrix with forwarding to the base solver
|
||||
virtual solverPerformance solve
|
||||
(
|
||||
scalarField& psi,
|
||||
const scalarField& source,
|
||||
const direction cmpt=0
|
||||
) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user