Nalu
Nalu: a generalized unstructured massively parallel low Mach flow code designed to support a variety of energy applications of interest (most notably Wind ECP) built on the Sierra Toolkit and Trilinos solver Tpetra/Epetra stack. The open source BSD, clause 3 license model has been chosen for the code base. See LICENSE for more information. http://NaluCFD.org
UnitTestLinearSystem.h
Go to the documentation of this file.
1 /*------------------------------------------------------------------------*/
2 /* Copyright 2014 National Renewable Energy Laboratory. */
3 /* This software is released under the license detailed */
4 /* in the file, LICENSE, which is located in the top-level Nalu */
5 /* directory structure */
6 /*------------------------------------------------------------------------*/
7 
8 #ifndef UNITTESTLINEARSYSTEM_H
9 #define UNITTESTLINEARSYSTEM_H
10 
11 #include "LinearSystem.h"
12 #include "EquationSystem.h"
13 
14 namespace unit_test_utils {
15 
17 {
18 public:
19 
21  : sierra::nalu::LinearSystem(realm, numDof, eqSys, nullptr), numSumIntoCalls_(0)
22  {}
23 
24  virtual ~TestLinearSystem() {}
25 
26  // Graph/Matrix Construction
27  virtual void buildNodeGraph(const stk::mesh::PartVector & parts) {}
28  virtual void buildFaceToNodeGraph(const stk::mesh::PartVector & parts) {}
29  virtual void buildEdgeToNodeGraph(const stk::mesh::PartVector & parts) {}
30  virtual void buildElemToNodeGraph(const stk::mesh::PartVector & parts) {}
31  virtual void buildReducedElemToNodeGraph(const stk::mesh::PartVector & parts) {}
32  virtual void buildFaceElemToNodeGraph(const stk::mesh::PartVector & parts) {}
33  virtual void buildNonConformalNodeGraph(const stk::mesh::PartVector & parts) {}
34  virtual void buildOversetNodeGraph(const stk::mesh::PartVector & parts) {}
35  virtual void finalizeLinearSystem() {}
36 
37  // Matrix Assembly
38  virtual void zeroSystem() {}
39 
40  virtual void sumInto(
41  unsigned numEntities,
42  const stk::mesh::Entity* entities,
45  const sierra::nalu::SharedMemView<int*> & localIds,
46  const sierra::nalu::SharedMemView<int*> & sortPermutation,
47  const char * trace_tag
48  )
49  {
50  if (numSumIntoCalls_ == 0) {
51  rhs_ = Kokkos::View<double*>("rhs_",rhs.dimension(0));
52  for(size_t i=0; i<rhs.dimension(0); ++i) {
53  rhs_(i) = rhs(i);
54  }
55  lhs_ = Kokkos::View<double**>("lhs_",lhs.dimension(0), lhs.dimension(1));
56  for(size_t i=0; i<lhs.dimension(0); ++i) {
57  for(size_t j=0; j<lhs.dimension(1); ++j) {
58  lhs_(i,j) = lhs(i,j);
59  }
60  }
61  }
62  Kokkos::atomic_add(&numSumIntoCalls_, 1u);
63  }
64 
65  virtual void sumInto(
66  const std::vector<stk::mesh::Entity> & sym_meshobj,
67  std::vector<int> &scratchIds,
68  std::vector<double> &scratchVals,
69  const std::vector<double> & rhs,
70  const std::vector<double> & lhs,
71  const char *trace_tag=0
72  )
73  {}
74 
75  virtual void applyDirichletBCs(
76  stk::mesh::FieldBase * solutionField,
77  stk::mesh::FieldBase * bcValuesField,
78  const stk::mesh::PartVector & parts,
79  const unsigned beginPos,
80  const unsigned endPos)
81  {}
82 
83  virtual void prepareConstraints(
84  const unsigned beginPos,
85  const unsigned endPos)
86  {}
87 
88  // Solve
89  virtual int solve(stk::mesh::FieldBase * linearSolutionField) { return -1; }
90  virtual void loadComplete() {}
91 
92  virtual void writeToFile(const char * filename, bool useOwned=true) {}
93  virtual void writeSolutionToFile(const char * filename, bool useOwned=true) {}
94 
95  virtual void resetRows(
96  std::vector<stk::mesh::Entity> nodeList,
97  const unsigned beginPos,
98  const unsigned endPos) {}
99 
101  Kokkos::View<double**> lhs_;
102  Kokkos::View<double*> rhs_;
103 
104 protected:
106  virtual void checkError(
107  const int err_code,
108  const char * msg) {}
109 };
110 
111 }
112 
113 #endif /* UNITTESTLINEARSYSTEM_H */
114 
TestLinearSystem(sierra::nalu::Realm &realm, const unsigned numDof, sierra::nalu::EquationSystem *eqSys)
Definition: UnitTestLinearSystem.h:20
virtual void buildFaceToNodeGraph(const stk::mesh::PartVector &parts)
Definition: UnitTestLinearSystem.h:28
virtual ~TestLinearSystem()
Definition: UnitTestLinearSystem.h:24
std::vector< Part * > PartVector
Definition: Algorithm.h:16
Definition: ABLForcingAlgorithm.C:26
virtual void buildEdgeToNodeGraph(const stk::mesh::PartVector &parts)
Definition: UnitTestLinearSystem.h:29
virtual void writeSolutionToFile(const char *filename, bool useOwned=true)
Definition: UnitTestLinearSystem.h:93
LinearSystem(Realm &realm, const unsigned numDof, EquationSystem *eqSys, LinearSolver *linearSolver)
Definition: LinearSystem.C:45
virtual void sumInto(unsigned numEntities, const stk::mesh::Entity *entities, const sierra::nalu::SharedMemView< const double * > &rhs, const sierra::nalu::SharedMemView< const double ** > &lhs, const sierra::nalu::SharedMemView< int * > &localIds, const sierra::nalu::SharedMemView< int * > &sortPermutation, const char *trace_tag)
Definition: UnitTestLinearSystem.h:40
virtual void prepareConstraints(const unsigned beginPos, const unsigned endPos)
Definition: UnitTestLinearSystem.h:83
virtual void buildOversetNodeGraph(const stk::mesh::PartVector &parts)
Definition: UnitTestLinearSystem.h:34
Kokkos::View< double * > rhs_
Definition: UnitTestLinearSystem.h:102
virtual void beginLinearSystemConstruction()
Definition: UnitTestLinearSystem.h:105
unsigned numDof() const
Definition: LinearSystem.h:117
virtual void checkError(const int err_code, const char *msg)
Definition: UnitTestLinearSystem.h:106
static constexpr double lhs[8][8]
Definition: UnitTestContinuityAdvElem.C:25
virtual void buildFaceElemToNodeGraph(const stk::mesh::PartVector &parts)
Definition: UnitTestLinearSystem.h:32
Definition: UnitTestFieldUtils.C:10
Base class representation of a PDE.
Definition: EquationSystem.h:46
unsigned numSumIntoCalls_
Definition: UnitTestLinearSystem.h:100
virtual void buildNonConformalNodeGraph(const stk::mesh::PartVector &parts)
Definition: UnitTestLinearSystem.h:33
virtual void applyDirichletBCs(stk::mesh::FieldBase *solutionField, stk::mesh::FieldBase *bcValuesField, const stk::mesh::PartVector &parts, const unsigned beginPos, const unsigned endPos)
Definition: UnitTestLinearSystem.h:75
static constexpr double rhs[8]
Definition: UnitTestContinuityAdvElem.C:18
Kokkos::View< double ** > lhs_
Definition: UnitTestLinearSystem.h:101
virtual void finalizeLinearSystem()
Definition: UnitTestLinearSystem.h:35
virtual void sumInto(const std::vector< stk::mesh::Entity > &sym_meshobj, std::vector< int > &scratchIds, std::vector< double > &scratchVals, const std::vector< double > &rhs, const std::vector< double > &lhs, const char *trace_tag=0)
Definition: UnitTestLinearSystem.h:65
virtual void buildNodeGraph(const stk::mesh::PartVector &parts)
Definition: UnitTestLinearSystem.h:27
Kokkos::View< T, Kokkos::LayoutRight, DeviceShmem, Kokkos::MemoryUnmanaged > SharedMemView
Definition: KokkosInterface.h:25
virtual void resetRows(std::vector< stk::mesh::Entity > nodeList, const unsigned beginPos, const unsigned endPos)
Reset LHS and RHS for the given set of nodes to 0.
Definition: UnitTestLinearSystem.h:95
virtual void zeroSystem()
Definition: UnitTestLinearSystem.h:38
virtual int solve(stk::mesh::FieldBase *linearSolutionField)
Definition: UnitTestLinearSystem.h:89
Definition: UnitTestLinearSystem.h:16
Definition: Realm.h:82
virtual void loadComplete()
Definition: UnitTestLinearSystem.h:90
virtual void writeToFile(const char *filename, bool useOwned=true)
Definition: UnitTestLinearSystem.h:92
Definition: LinearSystem.h:40
virtual void buildElemToNodeGraph(const stk::mesh::PartVector &parts)
Definition: UnitTestLinearSystem.h:30
virtual void buildReducedElemToNodeGraph(const stk::mesh::PartVector &parts)
Definition: UnitTestLinearSystem.h:31