Formatting
[foam-extend-3.2.git] / src / cudaSolvers / cudaSolver / cudaSolver.H
blob78106700d38aeb43af93db52b707310dcaa095c8
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::cudaSolver
27 Description
28     Base class for GPU based solvers
30 SourceFiles
31     cudaSolver.C
33 Author
34     Dominik Christ, Wikki Ltd.
35     Based on Cufflink library by Daniel P. Combest
37 \*---------------------------------------------------------------------------*/
39 #ifndef cudaSolver_H
40 #define cudaSolver_H
42 #include "cudaTypes.H"
43 #include "lduMatrix.H"
44 #include "autoPtr.H"
45 #include "runTimeSelectionTables.H"
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 namespace Foam
53 /*---------------------------------------------------------------------------*\
54                            Class cudaSolver Declaration
55 \*---------------------------------------------------------------------------*/
57 class cudaSolver
59     public lduSolver
62     // Private Member Functions
64         //- Disallow default bitwise copy construct
65         cudaSolver(const cudaSolver&);
67         //- Disallow default bitwise assignment
68         void operator=(const cudaSolver&);
71 public:
73     //- Runtime type information
74     TypeName("cudaSolver");
77     // Constructors
79         //- Construct from components
80         cudaSolver
81         (
82             const word& fieldName,
83             const lduMatrix& matrix,
84             const FieldField<Field, scalar>& coupleBouCoeffs,
85             const FieldField<Field, scalar>& coupleIntCoeffs,
86             const lduInterfaceFieldPtrsList& interfaces,
87             const dictionary& dict
88         );
91     // Destructor
93         virtual ~cudaSolver()
94         {}
97     // Member Functions
98         //- Solve the matrix with this solver
99         virtual lduSolverPerformance solve
100         (
101             scalarField& x,
102             const scalarField& b,
103             const direction cmpt = 0
104         ) const = 0;
106         //- Create COO matrix from symmetric lduMatrix
107         cuspEquationSystem createSymCuspMatrix
108         (
109             const lduMatrix& matrix,
110             const scalarField& x,
111             const scalarField& b
112         ) const;
114         //- Create COO matrix from asymmetric lduMatrix
115         cuspEquationSystem createAsymCuspMatrix
116         (
117             const lduMatrix& matrix,
118             const scalarField& x,
119             const scalarField& b
120         ) const;
122         cudaSolverPerformance cudaSolverPerformanceDefault() const;
127 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
129 } // End namespace Foam
131 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
133 #endif
135 // ************************************************************************* //