MueLu  Version of the Day
MueLu_CoarseMapFactory_decl.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // MueLu: A package for multigrid based preconditioning
6 // Copyright 2012 Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact
39 // Jonathan Hu (jhu@sandia.gov)
40 // Andrey Prokopenko (aprokop@sandia.gov)
41 // Ray Tuminaro (rstumin@sandia.gov)
42 //
43 // ***********************************************************************
44 //
45 // @HEADER
46 
47 #ifndef MUELU_COARSEMAPFACTORY_DECL_HPP_
48 #define MUELU_COARSEMAPFACTORY_DECL_HPP_
49 
50 #include "Xpetra_StridedMapFactory_fwd.hpp"
51 
52 #include "MueLu_ConfigDefs.hpp"
55 
56 #include "MueLu_Level_fwd.hpp"
57 #include "MueLu_Aggregates_fwd.hpp"
58 #include "MueLu_Exceptions.hpp"
59 
60 namespace MueLu {
61 
110  template <class Scalar = DefaultScalar,
113  class Node = DefaultNode>
115 #undef MUELU_COARSEMAPFACTORY_SHORT
116 #include "MueLu_UseShortNames.hpp"
117 
118  public:
119 
121 
122 
123  RCP<const ParameterList> GetValidParameterList() const override;
124 
131  void DeclareInput(Level &currentLevel) const override;
132 
134 
136 
137 
139  void Build(Level &currentLevel) const override;
140 
142 
143 
150  virtual size_t getFixedBlockSize() const {
151  // sum up size of all strided blocks (= number of dofs per node)
152  size_t blkSize = 0;
153  std::vector<size_t>::const_iterator it;
154  for(it = stridingInfo_.begin(); it != stridingInfo_.end(); ++it) {
155  blkSize += *it;
156  }
157  return blkSize;
158  }
159 
161 
166  virtual std::vector<size_t> getStridingData() const { return stridingInfo_; }
167 
172  virtual void setStridingData(std::vector<size_t> stridingInfo);
173 
178  virtual LocalOrdinal getStridedBlockId() const {
179  const ParameterList & pL = GetParameterList();
180  return pL.get<LocalOrdinal>("Strided block id");
181  }
182 
187  virtual void setStridedBlockId(LocalOrdinal stridedBlockId) {
188  SetParameter("Strided block id", ParameterEntry(stridedBlockId));
189  }
190 
192 
193  protected:
194 
196  virtual void BuildCoarseMap(Level& currentLevel, const GlobalOrdinal domainGIDOffset) const;
197 
199  virtual GlobalOrdinal GetDomainGIDOffset(Level& currentLevel) const;
200 
201  private:
202 
204  LocalOrdinal stridedBlockId, const size_t nullspaceDimension) const;
205 
207  mutable std::vector<size_t> stridingInfo_;
208 
209  }; //class CoarseMapFactory
210 
211 } //namespace MueLu
212 
213 #define MUELU_COARSEMAPFACTORY_SHORT
214 #endif /* MUELU_COARSEMAPFACTORY_DECL_HPP_ */
MueLu::DefaultLocalOrdinal LocalOrdinal
Factory for generating coarse level map. Used by TentativePFactory.
KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
virtual GlobalOrdinal GetDomainGIDOffset(Level &currentLevel) const
Extract domain GID offset from user data.
virtual std::vector< size_t > getStridingData() const
getStridingData returns vector with size of striding blocks in the domain DOF map (= coarse map)...
virtual void BuildCoarseMap(Level &currentLevel, const GlobalOrdinal domainGIDOffset) const
Build the coarse map using the domain GID offset.
Namespace for MueLu classes and methods.
RCP< const ParameterList > GetValidParameterList() const override
Return a const parameter list of valid parameters that setParameterList() will accept.
MueLu::DefaultNode Node
virtual LocalOrdinal getStridedBlockId() const
getStridedBlockId returns strided block id for the domain DOF map of Ptent (= coarse map) or -1 if fu...
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Class that holds all level-specific information.
Definition: MueLu_Level.hpp:99
virtual const Teuchos::ParameterList & GetParameterList() const
void SetParameter(const std::string &name, const ParameterEntry &entry)
Set a parameter directly as a ParameterEntry.
std::vector< size_t > stridingInfo_
Vector with size of strided blocks (dofs)
void Build(Level &currentLevel) const override
Build an object with this factory.
virtual size_t getFixedBlockSize() const
Get information on the fixed block size.
virtual void setStridingData(std::vector< size_t > stridingInfo)
setStridingData set striding vector for the domain DOF map (= coarse map), e.g. (2,1) for 2 velocity dofs and 1 pressure dof
virtual void CheckForConsistentStridingInformation(LocalOrdinal stridedBlockId, const size_t nullspaceDimension) const
void DeclareInput(Level &currentLevel) const override
Specifies the data that this class needs, and the factories that generate that data.
Base class for factories that use one level (currentLevel).
virtual void setStridedBlockId(LocalOrdinal stridedBlockId)
setStridedBlockId set strided block id for the domain DOF map of Ptent (= coarse map) or -1 if full s...