xref: /libCEED/examples/fluids/qfunctions/utils.h (revision baf96a30fc83f1cce83f61e183e51df19381d4f1)
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 Scale vector of length N by scalar alpha
25 CEED_QFUNCTION_HELPER void ScaleN(CeedScalar *u, const CeedScalar alpha, const CeedInt N) {
26   CeedPragmaSIMD for (CeedInt i = 0; i < N; i++) { u[i] *= alpha; }
27 }
28 
29 // @brief Dot product of 3 element vectors
30 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]; }
31 
32 // @brief Unpack Kelvin-Mandel notation symmetric tensor into full tensor
33 CEED_QFUNCTION_HELPER void KMUnpack(const CeedScalar v[6], CeedScalar A[3][3]) {
34   const CeedScalar weight = 1 / sqrt(2.);
35   A[0][0]                 = v[0];
36   A[1][1]                 = v[1];
37   A[2][2]                 = v[2];
38   A[2][1] = A[1][2] = weight * v[3];
39   A[2][0] = A[0][2] = weight * v[4];
40   A[1][0] = A[0][1] = weight * v[5];
41 }
42 
43 // @brief Linear ramp evaluation
44 CEED_QFUNCTION_HELPER CeedScalar LinearRampCoefficient(CeedScalar amplitude, CeedScalar length, CeedScalar start, CeedScalar x) {
45   if (x < start) {
46     return amplitude;
47   } else if (x < start + length) {
48     return amplitude * ((x - start) * (-1 / length) + 1);
49   } else {
50     return 0;
51   }
52 }
53 
54 #endif  // utils_h
55