1 // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors. 2 // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 3 // 4 // SPDX-License-Identifier: BSD-2-Clause 5 // 6 // This file is part of CEED: http://github.com/ceed 7 8 #ifndef utils_h 9 #define utils_h 10 11 #include <ceed.h> 12 #include <math.h> 13 14 #ifndef M_PI 15 #define M_PI 3.14159265358979323846 16 #endif 17 18 CEED_QFUNCTION_HELPER CeedScalar Max(CeedScalar a, CeedScalar b) { return a < b ? b : a; } 19 CEED_QFUNCTION_HELPER CeedScalar Min(CeedScalar a, CeedScalar b) { return a < b ? a : b; } 20 21 CEED_QFUNCTION_HELPER CeedScalar Square(CeedScalar x) { return x * x; } 22 CEED_QFUNCTION_HELPER CeedScalar Cube(CeedScalar x) { return x * x * x; } 23 24 // @brief Dot product of 3 element vectors 25 CEED_QFUNCTION_HELPER CeedScalar Dot3(const CeedScalar u[3], const CeedScalar v[3]) { return u[0] * v[0] + u[1] * v[1] + u[2] * v[2]; } 26 27 // @brief Unpack Kelvin-Mandel notation symmetric tensor into full tensor 28 CEED_QFUNCTION_HELPER void KMUnpack(const CeedScalar v[6], CeedScalar A[3][3]) { 29 const CeedScalar weight = 1 / sqrt(2.); 30 A[0][0] = v[0]; 31 A[1][1] = v[1]; 32 A[2][2] = v[2]; 33 A[2][1] = A[1][2] = weight * v[3]; 34 A[2][0] = A[0][2] = weight * v[4]; 35 A[1][0] = A[0][1] = weight * v[5]; 36 } 37 38 #endif // utils_h 39