#ifndef CEED_OCCA_SIMPLEXBASIS_HEADER
#define CEED_OCCA_SIMPLEXBASIS_HEADER
#include "ceed-occa-basis.hpp"
namespace ceed {
namespace occa {
class SimplexBasis : public Basis {
public:
::occa::memory interp;
::occa::memory grad;
::occa::memory qWeight;
::occa::json kernelProperties;
::occa::kernel interpKernel;
::occa::kernel interpTKernel;
::occa::kernel gradKernel;
::occa::kernel gradTKernel;
::occa::kernel weightKernel;
SimplexBasis(CeedBasis basis, CeedInt dim, CeedInt P_, CeedInt Q_, const CeedScalar *interp_, const CeedScalar *grad_, const CeedScalar *qWeight_);
~SimplexBasis();
bool isTensorBasis() const;
const char *getFunctionSource() const;
void setKernelProperties();
std::string getKernelSource() const;
::occa::kernel buildKernel(const std::string &kernelName);
int applyInterp(const CeedInt elementCount, const bool transpose, Vector &U, Vector &V);
int applyGrad(const CeedInt elementCount, const bool transpose, Vector &U, Vector &V);
int applyWeight(const CeedInt elementCount, Vector &W);
int apply(const CeedInt elementCount, CeedTransposeMode tmode, CeedEvalMode emode, Vector *u, Vector *v);
static int ceedCreate(CeedElemTopology topology, CeedInt dim, CeedInt ndof, CeedInt nquad, const CeedScalar *interp, const CeedScalar *grad,
const CeedScalar *qref, const CeedScalar *qWeight, CeedBasis basis);
};
} }
#endif