1*3bd813ffSjeremylt // Copyright (c) 2017-2018, Lawrence Livermore National Security, LLC. 2*3bd813ffSjeremylt // Produced at the Lawrence Livermore National Laboratory. LLNL-CODE-734707. 3*3bd813ffSjeremylt // All Rights reserved. See files LICENSE and NOTICE for details. 4*3bd813ffSjeremylt // 5*3bd813ffSjeremylt // This file is part of CEED, a collection of benchmarks, miniapps, software 6*3bd813ffSjeremylt // libraries and APIs for efficient high-order finite element and spectral 7*3bd813ffSjeremylt // element discretizations for exascale applications. For more information and 8*3bd813ffSjeremylt // source code availability see http://github.com/ceed. 9*3bd813ffSjeremylt // 10*3bd813ffSjeremylt // The CEED research is supported by the Exascale Computing Project 17-SC-20-SC, 11*3bd813ffSjeremylt // a collaborative effort of two U.S. Department of Energy organizations (Office 12*3bd813ffSjeremylt // of Science and the National Nuclear Security Administration) responsible for 13*3bd813ffSjeremylt // the planning and preparation of a capable exascale ecosystem, including 14*3bd813ffSjeremylt // software, applications, hardware, advanced system engineering and early 15*3bd813ffSjeremylt // testbed platforms, in support of the nation's exascale computing imperative. 16*3bd813ffSjeremylt 17*3bd813ffSjeremylt CEED_QFUNCTION(setup_mass)(void *ctx, const CeedInt Q, 18*3bd813ffSjeremylt const CeedScalar *const *in, 19*3bd813ffSjeremylt CeedScalar *const *out) { 20*3bd813ffSjeremylt const CeedScalar *J = in[0], *weight = in[1]; 21*3bd813ffSjeremylt CeedScalar *rho = out[0]; 22*3bd813ffSjeremylt for (CeedInt i=0; i<Q; i++) { 23*3bd813ffSjeremylt rho[i] = weight[i] * (J[i+Q*0]*J[i+Q*3] - J[i+Q*1]*J[i+Q*2]); 24*3bd813ffSjeremylt } 25*3bd813ffSjeremylt return 0; 26*3bd813ffSjeremylt } 27*3bd813ffSjeremylt 28*3bd813ffSjeremylt CEED_QFUNCTION(apply)(void *ctx, const CeedInt Q, const CeedScalar *const *in, 29*3bd813ffSjeremylt CeedScalar *const *out) { 30*3bd813ffSjeremylt // in[0] is u, size (Q) 31*3bd813ffSjeremylt // in[1] is mass quadrature data, size (Q) 32*3bd813ffSjeremylt const CeedScalar *u = in[0], *qd_mass = in[1]; 33*3bd813ffSjeremylt 34*3bd813ffSjeremylt // out[0] is output to multiply against v, size (Q) 35*3bd813ffSjeremylt CeedScalar *v = out[0]; 36*3bd813ffSjeremylt 37*3bd813ffSjeremylt // Quadrature point loop 38*3bd813ffSjeremylt for (CeedInt i=0; i<Q; i++) { 39*3bd813ffSjeremylt // Mass 40*3bd813ffSjeremylt v[i] = qd_mass[i]*u[i]; 41*3bd813ffSjeremylt } 42*3bd813ffSjeremylt 43*3bd813ffSjeremylt return 0; 44*3bd813ffSjeremylt } 45