DFT-EFE
 
Loading...
Searching...
No Matches
PoissonSolverDealiiMatrixFreeFE.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (c) 2021. *
3 * The Regents of the University of Michigan and DFT-EFE developers. *
4 * *
5 * This file is part of the DFT-EFE code. *
6 * *
7 * DFT-EFE is free software: you can redistribute it and/or modify *
8 * it under the terms of the Lesser GNU General Public License as *
9 * published by the Free Software Foundation, either version 3 of *
10 * the License, or (at your option) any later version. *
11 * *
12 * DFT-EFE is distributed in the hope that it will be useful, but *
13 * WITHOUT ANY WARRANTY; without even the implied warranty *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
15 * See the Lesser GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU Lesser General Public *
18 * License at the top level of DFT-EFE distribution. If not, see *
19 * <https://www.gnu.org/licenses/>. *
20 ******************************************************************************/
21
22/*
23 * @author Avirup Sircar
24 */
25
26#ifndef dftefePoissonSolverDealiiMatrixFreeFE_h
27#define dftefePoissonSolverDealiiMatrixFreeFE_h
28
29#include <utils/TypeConfig.h>
39#include <vector>
40#include <memory>
41#include <utils/Profiler.h>
42
43namespace dftefe
44{
45 namespace electrostatics
46 {
68 template <typename ValueTypeOperator,
69 typename ValueTypeOperand,
70 utils::MemorySpace memorySpace,
71 size_type dim>
73 {
74 public:
82 template <typename T>
85
86 using ValueType =
88 ValueTypeOperand>;
89
90 public:
95 std::shared_ptr<const basis::FEBasisManager<ValueTypeOperand,
96 ValueTypeOperator,
97 memorySpace,
98 dim>> feBasisManagerField,
99 std::shared_ptr<
101 feBasisDataStorageStiffnessMatrix,
102 const std::map<
103 std::string,
104 std::shared_ptr<
106 &feBasisDataStorageRhs,
107 const std::map<
108 std::string,
110 & inpRhs,
113 linAlgOpContext);
114
119 std::shared_ptr<const basis::FEBasisManager<ValueTypeOperand,
120 ValueTypeOperator,
121 memorySpace,
122 dim>> feBasisManagerField,
123 std::shared_ptr<
125 feBasisDataStorageStiffnessMatrix,
126 std::shared_ptr<
128 feBasisDataStorageRhs,
130 & inpRhs,
133 linAlgOpContext);
134
135 void
136 reinit(
137 std::shared_ptr<const basis::FEBasisManager<ValueTypeOperand,
138 ValueTypeOperator,
139 memorySpace,
140 dim>> feBasisManagerField,
141 const std::map<
142 std::string,
144 &inpRhs);
145
146 void
148 std::shared_ptr<const basis::FEBasisManager<ValueTypeOperand,
149 ValueTypeOperator,
150 memorySpace,
151 dim>> feBasisManagerField,
153 &inpRhs);
154
156
157 void
158 solve(const double absTolerance, const unsigned int maxNumberIterations);
159
160 void
162
163 const utils::mpi::MPIComm &
164 getMPIComm() const;
165
166 private:
168 getRhs() const;
169
171 getInitialGuess() const;
172
173 void
175
176 void
178 const std::map<
179 std::string,
182 ValueTypeOperand>,
183 memorySpace> &> &inpRhs);
184
185 void
187
188 void
190 const distributedCPUVec<double> &src) const;
191
192 void
194
195 void
196 AX(const dealii::MatrixFree<dim, double> & matrixFreeData,
198 const distributedCPUVec<double> & src,
199 const std::pair<unsigned int, unsigned int> &cell_range) const;
200
201 void
202 CGsolve(const double absTolerance,
203 const unsigned int maxNumberIterations,
204 bool distributeFlag);
205
207 std::shared_ptr<
208 const basis::
209 FEBasisManager<ValueTypeOperand, ValueTypeOperator, memorySpace, dim>>
213
214
215 std::shared_ptr<
216 basis::
217 FEBasisManager<ValueTypeOperand, ValueTypeOperator, memorySpace, dim>>
219
221 std::shared_ptr<dealii::MatrixFree<dim, ValueTypeOperator>>
223 std::shared_ptr<const dealii::DoFHandler<dim>> d_dealiiDofHandler;
224 const dealii::AffineConstraints<ValueTypeOperand>
226 const dealii::AffineConstraints<ValueTypeOperand> *d_constraintsInfo;
228 std::map<std::string, unsigned int> d_num1DQuadPointsRhs;
230 unsigned int d_dofHandlerIndex;
231
232 std::map<
233 std::string,
234 std::shared_ptr<
237
238 std::vector<distributedCPUVec<ValueType>> d_nonTensorSructuredQuadeRhs;
239
241 std::map<dealii::CellId, unsigned int> d_cellIdToCellIndexMap;
242
243 std::vector<dealii::Quadrature<dim>> d_dealiiQuadratureRuleVec;
244 dealii::MappingQ1<dim, dim> d_mappingDealii;
245 // dealii::IndexSet d_ghostIndexSet, d_locallyOwnedIndexSet;
247
250 ValueTypeOperand>,
251 memorySpace>
253
254 }; // end of class PoissonSolverDealiiMatrixFreeFE
255 } // namespace electrostatics
256} // end of namespace dftefe
258#endif // dftefePoissonSolverDealiiMatrixFreeFE_h
An abstract class to store and access data for a given basis, such as the basis function values on a ...
Definition: FEBasisDataStorage.h:54
An abstract class to encapsulate the partitioning of a finite element basis across multiple processor...
Definition: FEBasisManager.h:44
dealii::LinearAlgebra::distributed::Vector< T, dealii::MemorySpace::Host > distributedCPUVec
Definition: DealiiFEEvaluationWrapper.h:46
A derived class of linearAlgebra::LinearSolverFunction to encapsulate the Poisson partial differentia...
Definition: PoissonSolverDealiiMatrixFreeFE.h:73
PoissonSolverDealiiMatrixFreeFE(std::shared_ptr< const basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > > feBasisManagerField, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeOperator, memorySpace > > feBasisDataStorageStiffnessMatrix, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeOperator, memorySpace > > feBasisDataStorageRhs, const quadrature::QuadratureValuesContainer< ValueType, memorySpace > &inpRhs, const linearAlgebra::PreconditionerType pcType, std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > linAlgOpContext)
This constructor creates an instance of a base LinearSolverFunction called PoissonSolverDealiiMatrixF...
const distributedCPUVec< ValueTypeOperand > & getRhs() const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:509
void solve(const double absTolerance, const unsigned int maxNumberIterations)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:537
linearAlgebra::PreconditionerType d_pcType
Definition: PoissonSolverDealiiMatrixFreeFE.h:211
std::map< std::string, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeOperator, memorySpace > > > d_feBasisDataStorageRhs
Definition: PoissonSolverDealiiMatrixFreeFE.h:236
void getSolution(linearAlgebra::MultiVector< ValueType, memorySpace > &solution)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:479
void reinit(std::shared_ptr< const basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > > feBasisManagerField, const quadrature::QuadratureValuesContainer< ValueType, memorySpace > &inpRhs)
std::vector< dealii::Quadrature< dim > > d_dealiiQuadratureRuleVec
Definition: PoissonSolverDealiiMatrixFreeFE.h:243
linearAlgebra::MultiVector< linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpace > d_scratchMultiVec
Definition: PoissonSolverDealiiMatrixFreeFE.h:252
void vmult(distributedCPUVec< double > &Ax, distributedCPUVec< double > &x)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:691
size_type d_feOrder
Definition: PoissonSolverDealiiMatrixFreeFE.h:229
std::shared_ptr< basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > > d_feBasisManagerHomo
Definition: PoissonSolverDealiiMatrixFreeFE.h:218
const dealii::AffineConstraints< ValueTypeOperand > * d_dealiiAffineConstraintMatrix
Definition: PoissonSolverDealiiMatrixFreeFE.h:225
utils::ConditionalOStream pcout
Definition: PoissonSolverDealiiMatrixFreeFE.h:246
const distributedCPUVec< ValueType > & getInitialGuess() const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:524
void computeRhs(distributedCPUVec< double > &rhs, const std::map< std::string, const quadrature::QuadratureValuesContainer< linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpace > & > &inpRhs)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:713
std::shared_ptr< dealii::MatrixFree< dim, ValueTypeOperator > > d_dealiiMatrixFree
Definition: PoissonSolverDealiiMatrixFreeFE.h:222
std::map< std::string, unsigned int > d_num1DQuadPointsRhs
Definition: PoissonSolverDealiiMatrixFreeFE.h:228
void computeDiagonalA()
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:605
std::shared_ptr< const basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > > d_feBasisManagerField
Definition: PoissonSolverDealiiMatrixFreeFE.h:210
void CGsolve(const double absTolerance, const unsigned int maxNumberIterations, bool distributeFlag)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:939
distributedCPUVec< ValueTypeOperator > d_diagonalA
Definition: PoissonSolverDealiiMatrixFreeFE.h:220
distributedCPUVec< ValueTypeOperator > d_initial
Definition: PoissonSolverDealiiMatrixFreeFE.h:220
std::vector< distributedCPUVec< ValueType > > d_nonTensorSructuredQuadeRhs
Definition: PoissonSolverDealiiMatrixFreeFE.h:238
void reinit(std::shared_ptr< const basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > > feBasisManagerField, const std::map< std::string, const quadrature::QuadratureValuesContainer< ValueType, memorySpace > & > &inpRhs)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:355
unsigned int d_num1DQuadPointsStiffnessMatrix
Definition: PoissonSolverDealiiMatrixFreeFE.h:227
const dealii::AffineConstraints< ValueTypeOperand > * d_constraintsInfo
Definition: PoissonSolverDealiiMatrixFreeFE.h:226
void precondition_Jacobi(distributedCPUVec< double > &dst, const distributedCPUVec< double > &src) const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:671
utils::Profiler d_p
Definition: PoissonSolverDealiiMatrixFreeFE.h:212
const utils::mpi::MPIComm & getMPIComm() const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:924
distributedCPUVec< ValueTypeOperator > d_x
Definition: PoissonSolverDealiiMatrixFreeFE.h:220
void AX(const dealii::MatrixFree< dim, double > &matrixFreeData, distributedCPUVec< double > &dst, const distributedCPUVec< double > &src, const std::pair< unsigned int, unsigned int > &cell_range) const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:555
dealii::MappingQ1< dim, dim > d_mappingDealii
Definition: PoissonSolverDealiiMatrixFreeFE.h:244
basis::FEEvaluationWrapperBase::distributedCPUVec< T > distributedCPUVec
define ValueType as the superior (bigger set) of the ValueTypeOperator and ValueTypeOperand (e....
Definition: PoissonSolverDealiiMatrixFreeFE.h:84
std::map< dealii::CellId, unsigned int > d_cellIdToCellIndexMap
Definition: PoissonSolverDealiiMatrixFreeFE.h:241
distributedCPUVec< ValueTypeOperator > d_rhs
Definition: PoissonSolverDealiiMatrixFreeFE.h:220
unsigned int d_matrixFreeQuadCompStiffnessMatrix
Definition: PoissonSolverDealiiMatrixFreeFE.h:240
std::shared_ptr< const dealii::DoFHandler< dim > > d_dealiiDofHandler
Definition: PoissonSolverDealiiMatrixFreeFE.h:223
unsigned int d_dofHandlerIndex
Definition: PoissonSolverDealiiMatrixFreeFE.h:230
linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand > ValueType
Definition: PoissonSolverDealiiMatrixFreeFE.h:88
size_type d_numComponents
Definition: PoissonSolverDealiiMatrixFreeFE.h:206
void setSolution(const distributedCPUVec< ValueType > &x)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:465
Definition: LinAlgOpContext.h:38
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition: MultiVector.h:134
Definition: QuadratureValuesContainer.h:39
Provides an interface to print based on whether a certain condition is met or not....
Definition: ConditionalOStream.h:47
Definition: Profiler.h:44
typeInternal::scalar_type< ValueType1, ValueType2 > scalar_type
Definition: BlasLapackTypedef.h:183
PreconditionerType
Definition: LinearAlgebraTypes.h:41
int MPIComm
Definition: MPITypes.h:84
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
unsigned int size_type
Definition: TypeConfig.h:8