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
UnitTestAlgorithmUtils.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 UNITTESTALGORITHMUTILS_H
9 #define UNITTESTALGORITHMUTILS_H
10 
11 #include <gtest/gtest.h>
12 #include "UnitTestUtils.h"
13 
14 #include "Algorithm.h"
15 #include "SupplementalAlgorithm.h"
16 
18 
27 {
28 public:
30  const stk::mesh::BulkData& bulk)
31  : bulk_(bulk)
32  {}
33 
35  {
36  const stk::mesh::MetaData& meta = bulk_.mesh_meta_data();
37 
38  const stk::mesh::Selector selector = meta.locally_owned_part();
39 
40  const auto& buckets = bulk_.get_buckets(stk::topology::NODE_RANK,
41  selector);
42 
43  lhs_norm_ = 0.0;
44  rhs_norm_ = 0.0;
45  N_ = 0;
46 
47  kokkos_thread_team_bucket_loop(buckets, [&](stk::mesh::Entity node) {
48  for (size_t i=0; i < activeSuppAlgs_.size(); ++i){
49  double lhs_value = 0.0;
50  double rhs_value = 0.0;
51 
52  activeSuppAlgs_[i]->node_execute(&lhs_value, &rhs_value, node);
53 
54  Kokkos::atomic_add(&lhs_norm_, (lhs_value * lhs_value));
55  Kokkos::atomic_add(&rhs_norm_, (rhs_value * rhs_value));
56  }
57 
58  Kokkos::atomic_add(&N_, (size_t)1);
59  });
60  }
61 
62  inline double get_lhs_norm() {return unit_test_utils::global_norm(lhs_norm_, N_, bulk_.parallel());}
63  inline double get_rhs_norm() {return unit_test_utils::global_norm(rhs_norm_, N_, bulk_.parallel());}
64 
65  std::vector<sierra::nalu::SupplementalAlgorithm*> activeSuppAlgs_;
66 
67 private:
68  const stk::mesh::BulkData& bulk_;
69  double lhs_norm_;
70  double rhs_norm_;
71  size_t N_;
72 };
73 
74 }
75 
76 #endif /* UNITTESTALGORITHMUTILS_H */
TestSupplementalAlgorithmDriver(const stk::mesh::BulkData &bulk)
Definition: UnitTestAlgorithmUtils.h:29
void kokkos_thread_team_bucket_loop(const stk::mesh::BucketVector &buckets, LOOP_BODY inner_loop_body)
Definition: UnitTestKokkosUtils.h:44
double get_lhs_norm()
Definition: UnitTestAlgorithmUtils.h:62
void nodal_execute()
Definition: UnitTestAlgorithmUtils.h:34
const stk::mesh::BulkData & bulk_
Definition: UnitTestAlgorithmUtils.h:68
size_t N_
Definition: UnitTestAlgorithmUtils.h:71
double global_norm(const double &norm, const size_t &N, const stk::ParallelMachine &comm)
Definition: UnitTestUtils.C:482
double get_rhs_norm()
Definition: UnitTestAlgorithmUtils.h:63
double rhs_norm_
Definition: UnitTestAlgorithmUtils.h:70
double lhs_norm_
Definition: UnitTestAlgorithmUtils.h:69
std::vector< sierra::nalu::SupplementalAlgorithm * > activeSuppAlgs_
Definition: UnitTestAlgorithmUtils.h:65
Definition: UnitTestAlgorithmUtils.h:17
Driver class that mimics Assemble*SolverAlgorithm.
Definition: UnitTestAlgorithmUtils.h:26