1 #ifndef _UnitTestUtils_h_ 2 #define _UnitTestUtils_h_ 8 #include <stk_mesh/base/BulkData.hpp> 9 #include <stk_topology/topology.hpp> 10 #include <stk_mesh/base/FieldBLAS.hpp> 11 #include <stk_mesh/base/Field.hpp> 12 #include <stk_mesh/base/CoordinateSystems.hpp> 14 #include <Kokkos_Core.hpp> 20 typedef stk::mesh::Field<double,stk::mesh::Cartesian,stk::mesh::Cartesian>
TensorFieldType;
24 namespace stk {
namespace mesh {
class FieldBase; } }
29 void fill_hex8_mesh(
const std::string& meshSpec, stk::mesh::BulkData& bulk);
35 void dump_mesh(stk::mesh::BulkData& bulk, std::vector<stk::mesh::FieldBase*> fields);
44 double quadratic(
double a,
const double* b,
const double* H,
const double* x);
46 double vector_norm(
const std::vector<double> & vec,
const stk::ParallelMachine& comm = MPI_COMM_WORLD);
48 double global_norm(
const double & norm,
const size_t & N,
const stk::ParallelMachine& comm = MPI_COMM_WORLD);
56 const double tol = 1.e-10;
58 #ifndef KOKKOS_HAVE_CUDA 63 : comm(MPI_COMM_WORLD), spatialDimension(3),
64 meta(spatialDimension), bulk(meta, comm),
65 topo(
stk::topology::HEX_8),
66 elemCentroidField(&meta.declare_field<
VectorFieldType>(
stk::topology::ELEM_RANK,
"elemCentroid")),
67 nodalPressureField(&meta.declare_field<
ScalarFieldType>(
stk::topology::NODE_RANK,
"nodalPressure")),
68 discreteLaplacianOfPressure(&meta.declare_field<
ScalarFieldType>(
stk::topology::NODE_RANK,
"discreteLaplacian")),
70 diffFluxCoeff(&meta.declare_field<
ScalarFieldType>(
stk::topology::NODE_RANK,
"diffFluxCoeff")),
75 stk::mesh::put_field(*elemCentroidField, meta.universal_part(), spatialDimension, (
double*)
nullptr);
78 stk::mesh::put_field(*nodalPressureField, meta.universal_part(), 1, &one);
79 stk::mesh::put_field(*discreteLaplacianOfPressure, meta.universal_part(), 1, 0.0);
80 stk::mesh::put_field(*discreteLaplacianOfPressure, meta.universal_part(), 1, &zero);
81 stk::mesh::put_field(*scalarQ, meta.universal_part(), 1, &zero);
82 stk::mesh::put_field(*diffFluxCoeff, meta.universal_part(), 1, &zero);
87 void fill_mesh(
const std::string& meshSpec =
"generated:20x20x20")
96 partVec = {meta.get_part(
"block_1")};
98 coordField =
static_cast<const VectorFieldType*
>(meta.coordinate_field());
99 EXPECT_TRUE(coordField !=
nullptr);
107 void check_discrete_laplacian(
double exactLaplacian);
129 massFlowRate(&meta.declare_field<
GenericFieldType>(
stk::topology::ELEM_RANK,
"mass_flow_rate_scs")),
131 velocity(&meta.declare_field<
VectorFieldType>(
stk::topology::NODE_RANK,
"velocity", 3)),
133 density(&meta.declare_field<
ScalarFieldType>(
stk::topology::NODE_RANK,
"density", 3)),
134 viscosity(&meta.declare_field<
ScalarFieldType>(
stk::topology::NODE_RANK,
"viscosity")),
139 stk::mesh::put_field(*massFlowRate, meta.universal_part(), hex8SCS.
numIntPoints_, &one);
140 stk::mesh::put_field(*Gju, meta.universal_part(), 3, &one);
141 stk::mesh::put_field(*velocity, meta.universal_part(), 3, &one);
142 stk::mesh::put_field(*dpdx, meta.universal_part(), 3, &one);
143 stk::mesh::put_field(*density, meta.universal_part(), 1, &one);
144 stk::mesh::put_field(*viscosity, meta.universal_part(), 1, &one);
145 stk::mesh::put_field(*pressure, meta.universal_part(), 1, &one);
double quadratic(double a, const double *b, const double *H, const double *x)
Definition: UnitTestUtils.C:456
std::vector< Part * > PartVector
Definition: Algorithm.h:16
Definition: Hex8CVFEM.h:53
void fill_and_promote_hex_mesh(const std::string &meshSpec, stk::mesh::BulkData &bulk, int polyOrder)
Definition: UnitTestUtils.C:90
int numIntPoints_
Definition: MasterElement.h:247
ScalarFieldType * pressure
Definition: UnitTestUtils.h:154
std::ostream & nalu_out()
Definition: UnitTestUtils.C:159
Definition: Algorithm.h:14
ScalarFieldType * nodalPressureField
Definition: UnitTestUtils.h:115
stk::mesh::BulkData bulk
Definition: UnitTestUtils.h:112
void fill_mesh_1_elem_per_proc_hex8(stk::mesh::BulkData &bulk)
Definition: UnitTestUtils.C:32
Hex8MeshWithNSOFields()
Definition: UnitTestUtils.h:127
sierra::nalu::DoubleType DoubleType
Definition: UnitTestUtils.h:22
void perturb_coord_hex_8(stk::mesh::BulkData &bulk, double perturbSize)
Definition: UnitTestUtils.C:39
Definition: UnitTestFieldUtils.C:10
const VectorFieldType * coordField
Definition: UnitTestUtils.h:120
double initialize_quadratic_scalar_field(const stk::mesh::BulkData &bulk, const VectorFieldType &coordField, const ScalarFieldType &qField)
Definition: UnitTestUtils.C:528
void fill_hex8_mesh(const std::string &meshSpec, stk::mesh::BulkData &bulk)
Definition: UnitTestUtils.C:75
VectorFieldType * dpdx
Definition: UnitTestUtils.h:151
double global_norm(const double &norm, const size_t &N, const stk::ParallelMachine &comm)
Definition: UnitTestUtils.C:482
Definition: UnitTestUtils.h:124
VectorFieldType * elemCentroidField
Definition: UnitTestUtils.h:114
ScalarFieldType * density
Definition: UnitTestUtils.h:152
unsigned spatialDimension
Definition: UnitTestUtils.h:110
GenericFieldType * Gju
Definition: UnitTestUtils.h:149
double exactLaplacian
Definition: UnitTestUtils.h:121
void dump_promoted_mesh_file(stk::mesh::BulkData &bulk, int polyOrder)
Definition: UnitTestUtils.C:139
ScalarFieldType * diffFluxCoeff
Definition: UnitTestUtils.h:118
stk::mesh::Field< double, stk::mesh::Cartesian > VectorFieldType
Definition: UnitTestUtils.h:19
stk::mesh::Field< double, stk::mesh::Cartesian, stk::mesh::Cartesian > TensorFieldType
Definition: UnitTestUtils.h:20
void field_fill(const stk::mesh::MetaData &metaData, const stk::mesh::BulkData &bulkData, const double alpha, const stk::mesh::FieldBase &xField, const bool auraIsActive, const stk::topology::rank_t entityRankValue)
Definition: FieldFunctions.C:59
stk::topology topo
Definition: UnitTestUtils.h:113
void dump_mesh(stk::mesh::BulkData &bulk, std::vector< stk::mesh::FieldBase * > fields)
Definition: UnitTestUtils.C:126
void fill_mesh_and_initialize_test_fields(const std::string &meshSpec="generated:20x20x20")
Definition: UnitTestUtils.h:92
void fill_mesh(const std::string &meshSpec="generated:20x20x20")
Definition: UnitTestUtils.h:87
SimdDouble DoubleType
Definition: SimdInterface.h:27
stk::mesh::Entity create_one_reference_element(stk::mesh::BulkData &bulk, stk::topology topo)
Definition: UnitTestUtils.C:295
Hex8Mesh()
Definition: UnitTestUtils.h:62
stk::mesh::Entity create_one_perturbed_element(stk::mesh::BulkData &bulk, stk::topology topo)
Definition: UnitTestUtils.C:330
stk::mesh::MetaData meta
Definition: UnitTestUtils.h:111
VectorFieldType * velocity
Definition: UnitTestUtils.h:150
ScalarFieldType * discreteLaplacianOfPressure
Definition: UnitTestUtils.h:116
ScalarFieldType * viscosity
Definition: UnitTestUtils.h:153
const double tol
Definition: UnitTestUtils.h:56
Definition: UnitTestUtils.h:59
ScalarFieldType * scalarQ
Definition: UnitTestUtils.h:117
~Hex8Mesh()
Definition: UnitTestUtils.h:85
stk::mesh::PartVector partVec
Definition: UnitTestUtils.h:119
stk::mesh::Field< double > ScalarFieldType
Definition: UnitTestUtils.h:18
stk::ParallelMachine comm
Definition: UnitTestUtils.h:109
double vector_norm(const std::vector< double > &vec, const stk::ParallelMachine &comm)
Definition: UnitTestUtils.C:465
stk::mesh::Field< double, stk::mesh::SimpleArrayTag > GenericFieldType
Definition: UnitTestUtils.h:21
GenericFieldType * massFlowRate
Definition: UnitTestUtils.h:148