| test-qfunctions.h (ce18bed930e8f3bfebcf709a18844aba97fe4630) | test-qfunctions.h (2b730f8b5a9c809740a0b3b302db43a719c636b1) |
|---|---|
| 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//------------------------------------------------------------------------------ 9// Setup 1D mass matrix 10//------------------------------------------------------------------------------ | 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//------------------------------------------------------------------------------ 9// Setup 1D mass matrix 10//------------------------------------------------------------------------------ |
| 11CEED_QFUNCTION(setup_mass)(void *ctx, const CeedInt Q, 12 const CeedScalar *const *in, 13 CeedScalar *const *out) { | 11CEED_QFUNCTION(setup_mass)(void *ctx, const CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out) { |
| 14 // in[0] is quadrature weights, size (Q) 15 // in[1] is Jacobians, size (Q) 16 const CeedScalar *w = in[0], *J = in[1]; 17 18 // out[0] is quadrature data, size (Q) 19 CeedScalar *qdata = out[0]; 20 21 // Quadrature point loop | 12 // in[0] is quadrature weights, size (Q) 13 // in[1] is Jacobians, size (Q) 14 const CeedScalar *w = in[0], *J = in[1]; 15 16 // out[0] is quadrature data, size (Q) 17 CeedScalar *qdata = out[0]; 18 19 // Quadrature point loop |
| 22 CeedPragmaSIMD 23 for (CeedInt i=0; i<Q; i++) { 24 qdata[i] = J[i] * w[i]; 25 } | 20 CeedPragmaSIMD for (CeedInt i = 0; i < Q; i++) { qdata[i] = J[i] * w[i]; } |
| 26 27 return 0; 28} 29 30//------------------------------------------------------------------------------ 31// Setup 2D mass matrix 32//------------------------------------------------------------------------------ | 21 22 return 0; 23} 24 25//------------------------------------------------------------------------------ 26// Setup 2D mass matrix 27//------------------------------------------------------------------------------ |
| 33CEED_QFUNCTION(setup_mass_2d)(void *ctx, const CeedInt Q, 34 const CeedScalar *const *in, 35 CeedScalar *const *out) { | 28CEED_QFUNCTION(setup_mass_2d)(void *ctx, const CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out) { |
| 36 // in[0] is quadrature weights, size (Q) 37 // in[1] is Jacobians with shape [2, nc=2, Q] 38 const CeedScalar *w = in[0], *J = in[1]; 39 40 // out[0] is quadrature data, size (Q) 41 CeedScalar *qdata = out[0]; 42 43 // Quadrature point loop | 29 // in[0] is quadrature weights, size (Q) 30 // in[1] is Jacobians with shape [2, nc=2, Q] 31 const CeedScalar *w = in[0], *J = in[1]; 32 33 // out[0] is quadrature data, size (Q) 34 CeedScalar *qdata = out[0]; 35 36 // Quadrature point loop |
| 44 CeedPragmaSIMD 45 for (CeedInt i=0; i<Q; i++) { 46 qdata[i] = w[i] * (J[i+Q*0]*J[i+Q*3] - J[i+Q*1]*J[i+Q*2]); 47 } | 37 CeedPragmaSIMD for (CeedInt i = 0; i < Q; i++) { qdata[i] = w[i] * (J[i + Q * 0] * J[i + Q * 3] - J[i + Q * 1] * J[i + Q * 2]); } |
| 48 49 return 0; 50} 51 52//------------------------------------------------------------------------------ 53// Apply mass matrix 54//------------------------------------------------------------------------------ | 38 39 return 0; 40} 41 42//------------------------------------------------------------------------------ 43// Apply mass matrix 44//------------------------------------------------------------------------------ |
| 55CEED_QFUNCTION(apply_mass)(void *ctx, const CeedInt Q, 56 const CeedScalar *const *in, 57 CeedScalar *const *out) { | 45CEED_QFUNCTION(apply_mass)(void *ctx, const CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out) { |
| 58 // Get scaling factor, if set 59 const CeedScalar *scale_array = ctx ? (CeedScalar *)ctx : NULL; | 46 // Get scaling factor, if set 47 const CeedScalar *scale_array = ctx ? (CeedScalar *)ctx : NULL; |
| 60 const CeedScalar scale = ctx ? scale_array[4] : 1.; | 48 const CeedScalar scale = ctx ? scale_array[4] : 1.; |
| 61 62 // in[0] is quadrature data, size (Q) 63 // in[1] is u, size (Q) 64 const CeedScalar *qdata = in[0], *u = in[1]; 65 66 // out[0] is v, size (Q) 67 CeedScalar *v = out[0]; 68 69 // Quadrature point loop | 49 50 // in[0] is quadrature data, size (Q) 51 // in[1] is u, size (Q) 52 const CeedScalar *qdata = in[0], *u = in[1]; 53 54 // out[0] is v, size (Q) 55 CeedScalar *v = out[0]; 56 57 // Quadrature point loop |
| 70 CeedPragmaSIMD 71 for (CeedInt i=0; i<Q; i++) { 72 v[i] = scale * qdata[i] * u[i]; 73 } | 58 CeedPragmaSIMD for (CeedInt i = 0; i < Q; i++) { v[i] = scale * qdata[i] * u[i]; } |
| 74 75 return 0; 76} 77 78//------------------------------------------------------------------------------ 79// Apply mass matrix to two components 80//------------------------------------------------------------------------------ | 59 60 return 0; 61} 62 63//------------------------------------------------------------------------------ 64// Apply mass matrix to two components 65//------------------------------------------------------------------------------ |
| 81CEED_QFUNCTION(apply_mass_two)(void *ctx, const CeedInt Q, 82 const CeedScalar *const *in, 83 CeedScalar *const *out) { | 66CEED_QFUNCTION(apply_mass_two)(void *ctx, const CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out) { |
| 84 // in[0] is quadrature data, size (Q) 85 // in[1] is u, size (2*Q) 86 const CeedScalar *qdata = in[0], *u = in[1]; 87 88 // out[0] is v, size (2*Q) 89 CeedScalar *v = out[0]; 90 91 // Quadrature point loop | 67 // in[0] is quadrature data, size (Q) 68 // in[1] is u, size (2*Q) 69 const CeedScalar *qdata = in[0], *u = in[1]; 70 71 // out[0] is v, size (2*Q) 72 CeedScalar *v = out[0]; 73 74 // Quadrature point loop |
| 92 CeedPragmaSIMD 93 for (CeedInt i=0; i<Q; i++) { 94 v[i] = qdata[i] * u[i]; 95 v[Q+i] = qdata[i] * u[Q+i]; | 75 CeedPragmaSIMD for (CeedInt i = 0; i < Q; i++) { 76 v[i] = qdata[i] * u[i]; 77 v[Q + i] = qdata[i] * u[Q + i]; |
| 96 } 97 98 return 0; 99} 100 101//------------------------------------------------------------------------------ | 78 } 79 80 return 0; 81} 82 83//------------------------------------------------------------------------------ |