|
| 1 | +// Copyright (c) 2017-2024, 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 | +#include <ceed.h> |
| 9 | + |
| 10 | +// Interpolation matrices for cell-to-face of Q1 hexahedral element onto it's "5" face (in PETSc) |
| 11 | +// Nodes are at Gauss-Lobatto points and quadrature points are Gauss, all over [-1,1] domain range |
| 12 | +const CeedScalar Q1_interp_gauss[4][8] = { |
| 13 | + {0.62200846792814612, 0, 0.16666666666666669, 0, 0.16666666666666669, 0, 0.044658198738520463, 0}, |
| 14 | + {0.16666666666666669, 0, 0.62200846792814612, 0, 0.044658198738520463, 0, 0.16666666666666669, 0}, |
| 15 | + {0.16666666666666669, 0, 0.044658198738520463, 0, 0.62200846792814612, 0, 0.16666666666666669, 0}, |
| 16 | + {0.044658198738520463, 0, 0.16666666666666669, 0, 0.16666666666666669, 0, 0.62200846792814612, 0} |
| 17 | +}; |
| 18 | +const CeedScalar Q1_grad_gauss[3][4][8] = { |
| 19 | + {{-0.31100423396407312, 0.31100423396407312, -0.083333333333333343, 0.083333333333333343, -0.083333333333333343, 0.083333333333333343, |
| 20 | + -0.022329099369260232, 0.022329099369260232}, |
| 21 | + {-0.083333333333333343, 0.083333333333333343, -0.31100423396407312, 0.31100423396407312, -0.022329099369260232, 0.022329099369260232, |
| 22 | + -0.083333333333333343, 0.083333333333333343}, |
| 23 | + {-0.083333333333333343, 0.083333333333333343, -0.022329099369260232, 0.022329099369260232, -0.31100423396407312, 0.31100423396407312, |
| 24 | + -0.083333333333333343, 0.083333333333333343}, |
| 25 | + {-0.022329099369260232, 0.022329099369260232, -0.083333333333333343, 0.083333333333333343, -0.083333333333333343, 0.083333333333333343, |
| 26 | + -0.31100423396407312, 0.31100423396407312} }, |
| 27 | + {{-0.39433756729740643, 0, 0.39433756729740643, 0, -0.10566243270259357, 0, 0.10566243270259357, 0}, |
| 28 | + {-0.39433756729740643, 0, 0.39433756729740643, 0, -0.10566243270259357, 0, 0.10566243270259357, 0}, |
| 29 | + {-0.10566243270259357, 0, 0.10566243270259357, 0, -0.39433756729740643, 0, 0.39433756729740643, 0}, |
| 30 | + {-0.10566243270259357, 0, 0.10566243270259357, 0, -0.39433756729740643, 0, 0.39433756729740643, 0}}, |
| 31 | + {{-0.39433756729740643, 0, -0.10566243270259357, 0, 0.39433756729740643, 0, 0.10566243270259357, 0}, |
| 32 | + {-0.10566243270259357, 0, -0.39433756729740643, 0, 0.10566243270259357, 0, 0.39433756729740643, 0}, |
| 33 | + {-0.39433756729740643, 0, -0.10566243270259357, 0, 0.39433756729740643, 0, 0.10566243270259357, 0}, |
| 34 | + {-0.10566243270259357, 0, -0.39433756729740643, 0, 0.10566243270259357, 0, 0.39433756729740643, 0}} |
| 35 | +}; |
| 36 | + |
| 37 | +const CeedScalar Q1_interp_gauss_lobatto[4][8] = { |
| 38 | + {1, 0, 0, 0, 0, 0, 0, 0}, |
| 39 | + {0, 0, 1, 0, 0, 0, 0, 0}, |
| 40 | + {0, 0, 0, 0, 1, 0, 0, 0}, |
| 41 | + {0, 0, 0, 0, 0, 0, 1, 0} |
| 42 | +}; |
| 43 | +/* clang-format off */ |
| 44 | +const CeedScalar Q1_grad_gauss_lobatto[3][4][8] = { |
| 45 | + {{-0.5, 0.5, 0, 0, 0, 0, 0, 0}, |
| 46 | + {0, 0, -0.5, 0.5, 0, 0, 0, 0}, |
| 47 | + {0, 0, 0, 0, -0.5, 0.5, 0, 0}, |
| 48 | + {0, 0, 0, 0, 0, 0, -0.5, 0.5}}, |
| 49 | + {{-0.5, 0, 0.5, 0, 0, 0, 0, 0}, |
| 50 | + {-0.5, 0, 0.5, 0, 0, 0, 0, 0}, |
| 51 | + {0, 0, 0, 0, -0.5, 0, 0.5, 0}, |
| 52 | + {0, 0, 0, 0, -0.5, 0, 0.5, 0}}, |
| 53 | + {{-0.5, 0, 0, 0, 0.5, 0, 0, 0}, |
| 54 | + {0, 0, -0.5, 0, 0, 0, 0.5, 0}, |
| 55 | + {-0.5, 0, 0, 0, 0.5, 0, 0, 0}, |
| 56 | + {0, 0, -0.5, 0, 0, 0, 0.5, 0}} |
| 57 | +}; |
| 58 | +/* clang-format on */ |
| 59 | + |
| 60 | +static void GetCellToFaceTabulation(CeedQuadMode quad_mode, CeedInt *P, CeedInt *Q, const CeedScalar **interp, const CeedScalar **grad) { |
| 61 | + if (P) *P = 8; |
| 62 | + if (Q) *Q = 4; |
| 63 | + |
| 64 | + if (quad_mode == CEED_GAUSS) { |
| 65 | + *interp = (const CeedScalar *)Q1_interp_gauss; |
| 66 | + *grad = (const CeedScalar *)Q1_grad_gauss; |
| 67 | + } |
| 68 | + if (quad_mode == CEED_GAUSS_LOBATTO) { |
| 69 | + *interp = (const CeedScalar *)Q1_interp_gauss_lobatto; |
| 70 | + *grad = (const CeedScalar *)Q1_grad_gauss_lobatto; |
| 71 | + } |
| 72 | +} |
0 commit comments