DFT-EFE
 
Loading...
Searching...
No Matches
CFEConstraintsLocalDealii.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 Vishal Subramanian, Avirup Sircar,
24 */
25
26#ifndef dftefeCFEConstraintsLocalDealii_h
27#define dftefeCFEConstraintsLocalDealii_h
28
30#include <utils/TypeConfig.h>
31#include <deal.II/lac/affine_constraints.h>
32#include <utils/MemoryStorage.h>
34#include <unordered_map>
35#include <unordered_set>
36
38namespace dftefe
39{
40 namespace basis
41 {
42 template <typename ValueTypeBasisCoeff,
43 utils::MemorySpace memorySpace,
44 size_type dim>
46 : public ConstraintsLocal<ValueTypeBasisCoeff, memorySpace>
47 {
48 public:
52
53 CFEConstraintsLocalDealii(const dealii::IndexSet &locally_owned_dofs,
54 const dealii::IndexSet &locally_relevant_dofs);
55
57 dealii::AffineConstraints<ValueTypeBasisCoeff>
58 &dealiiAffineConstraintMatrix,
59 std::vector<std::pair<global_size_type, global_size_type>>
60 & locallyOwnedRanges,
61 std::vector<global_size_type> &ghostIndices,
62 std::unordered_map<global_size_type, size_type>
63 &globalToLocalMapLocalDofs);
64
66
67 //
68 // Copy function - note one has to call close after calling copyFrom
69 //
70 void
72 &constraintsLocalIn) override;
73
74 void
75 clear() override;
76 bool
77 isConstrained(global_size_type basisId) const override;
78 void
79 close() override;
80 bool
81 isClosed() const override;
82
83 void
85 ValueTypeBasisCoeff constraintValue) override;
86
87 const std::vector<std::pair<global_size_type, ValueTypeBasisCoeff>> *
88 getConstraintEntries(const global_size_type lineDof) const override;
89
90 bool
91 isInhomogeneouslyConstrained(const global_size_type index) const override;
92
93 ValueTypeBasisCoeff
94 getInhomogeneity(const global_size_type lineDof) const override;
95
96 void
99 & vectorData,
100 size_type blockSize) const override;
101 void
104 & vectorData,
105 size_type blockSize) const override;
106
107 void
110 & vectorData,
111 size_type blockSize) const override;
112
113 void
115 memorySpace> &vectorData,
116 size_type blockSize,
117 ValueTypeBasisCoeff alpha) const override;
118
119 //
120 // dealii function
121 //
122 const dealii::AffineConstraints<ValueTypeBasisCoeff> &
123 getAffineConstraints() const;
124
125 //
126 // private functions
127 //
128 private:
129 void
131 const global_size_type constrainedDofIndex,
132 const std::vector<std::pair<global_size_type, ValueTypeBasisCoeff>>
133 &colWeightPairs);
134
135 void
138 &constraintsDataIn);
139
140 void
142
143 void
144 addLine(const global_size_type lineDof);
145
146 bool
147 isGhostEntry(const global_size_type globalId) const;
148
149 bool
150 inLocallyOwnedRanges(const global_size_type globalId) const;
151
153 globalToLocal(const global_size_type globalId) const;
154
155
156 dealii::AffineConstraints<ValueTypeBasisCoeff>
160
166
170
172
173 std::vector<std::pair<global_size_type, global_size_type>>
175 std::vector<global_size_type> d_ghostIndices;
176 std::unordered_set<global_size_type> d_ghostIndicesSet;
177 std::unordered_map<global_size_type, size_type> d_globalToLocalMap;
178 };
179
180 } // namespace basis
181} // namespace dftefe
183#endif // dftefeCFEConstraintsLocalDealii_h
Definition: CFEConstraintsLocalDealii.h:47
SizeTypeVector d_rowConstraintsSizes
Definition: CFEConstraintsLocalDealii.h:171
bool d_isClosed
Definition: CFEConstraintsLocalDealii.h:159
void close() override
Definition: CFEConstraintsLocalDealii.t.cpp:101
dealii::AffineConstraints< ValueTypeBasisCoeff > d_dealiiAffineConstraintMatrix
Definition: CFEConstraintsLocalDealii.h:157
void copyConstraintsDataFromDealiiToDealii(const CFEConstraintsLocalDealii< ValueTypeBasisCoeff, memorySpace, dim > &constraintsDataIn)
Definition: CFEConstraintsLocalDealii.t.cpp:195
void addEntries(const global_size_type constrainedDofIndex, const std::vector< std::pair< global_size_type, ValueTypeBasisCoeff > > &colWeightPairs)
Definition: CFEConstraintsLocalDealii.t.cpp:470
bool isConstrained(global_size_type basisId) const override
Definition: CFEConstraintsLocalDealii.t.cpp:143
std::unordered_set< global_size_type > d_ghostIndicesSet
Definition: CFEConstraintsLocalDealii.h:176
GlobalSizeTypeVector d_columnConstraintsIdsGlobal
Definition: CFEConstraintsLocalDealii.h:165
std::vector< global_size_type > d_ghostIndices
Definition: CFEConstraintsLocalDealii.h:175
void setConstrainedNodesToZero(linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &vectorData, size_type blockSize) const override
Definition: CFEConstraintsLocalDealii.t.cpp:537
void distributeParentToChild(linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &vectorData, size_type blockSize) const override
Definition: CFEConstraintsLocalDealii.t.cpp:494
utils::MemoryStorage< double, memorySpace > d_columnConstraintsValues
Definition: CFEConstraintsLocalDealii.h:167
bool isClosed() const override
Definition: CFEConstraintsLocalDealii.t.cpp:132
void setInhomogeneity(global_size_type basisId, ValueTypeBasisCoeff constraintValue) override
Definition: CFEConstraintsLocalDealii.t.cpp:114
bool isInhomogeneouslyConstrained(const global_size_type index) const override
Definition: CFEConstraintsLocalDealii.t.cpp:173
GlobalSizeTypeVector d_rowConstraintsIdsGlobal
Definition: CFEConstraintsLocalDealii.h:161
SizeTypeVector d_columnConstraintsIdsLocal
Definition: CFEConstraintsLocalDealii.h:163
SizeTypeVector d_constraintRowSizesAccumulated
Definition: CFEConstraintsLocalDealii.h:164
const dealii::AffineConstraints< ValueTypeBasisCoeff > & getAffineConstraints() const
Definition: CFEConstraintsLocalDealii.t.cpp:153
bool isGhostEntry(const global_size_type globalId) const
Definition: CFEConstraintsLocalDealii.t.cpp:570
bool inLocallyOwnedRanges(const global_size_type globalId) const
Definition: CFEConstraintsLocalDealii.t.cpp:580
const std::vector< std::pair< global_size_type, ValueTypeBasisCoeff > > * getConstraintEntries(const global_size_type lineDof) const override
Definition: CFEConstraintsLocalDealii.t.cpp:163
SizeTypeVector d_rowConstraintsIdsLocal
Definition: CFEConstraintsLocalDealii.h:162
void distributeChildToParent(linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &vectorData, size_type blockSize) const override
Definition: CFEConstraintsLocalDealii.t.cpp:516
bool d_isCleared
Definition: CFEConstraintsLocalDealii.h:158
void addLine(const global_size_type lineDof)
Definition: CFEConstraintsLocalDealii.t.cpp:483
void copyFrom(const ConstraintsLocal< ValueTypeBasisCoeff, memorySpace > &constraintsLocalIn) override
Definition: CFEConstraintsLocalDealii.t.cpp:64
size_type globalToLocal(const global_size_type globalId) const
Definition: CFEConstraintsLocalDealii.t.cpp:595
std::vector< std::pair< global_size_type, global_size_type > > d_locallyOwnedRanges
Definition: CFEConstraintsLocalDealii.h:174
void setConstrainedNodes(linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &vectorData, size_type blockSize, ValueTypeBasisCoeff alpha) const override
Definition: CFEConstraintsLocalDealii.t.cpp:553
utils::MemoryStorage< ValueTypeBasisCoeff, memorySpace > d_constraintsInhomogenities
Definition: CFEConstraintsLocalDealii.h:169
ValueTypeBasisCoeff getInhomogeneity(const global_size_type lineDof) const override
Definition: CFEConstraintsLocalDealii.t.cpp:184
void copyConstraintsDataFromDealiiToDftefe()
Definition: CFEConstraintsLocalDealii.t.cpp:293
std::unordered_map< global_size_type, size_type > d_globalToLocalMap
Definition: CFEConstraintsLocalDealii.h:177
void clear() override
Definition: CFEConstraintsLocalDealii.t.cpp:90
Definition: ConstraintsLocal.h:43
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition: MultiVector.h:134
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9
std::uint64_t global_size_type
Definition: TypeConfig.h:10