#ifndef CEED_POISSON2DBUILD_H
#define CEED_POISSON2DBUILD_H
#include <ceed.h>
CEED_QFUNCTION(Poisson2DBuild)(void *ctx, const CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out) {
const CeedScalar(*J)[2][CEED_Q_VLA] = (const CeedScalar(*)[2][CEED_Q_VLA])in[0], *w = in[1];
CeedScalar(*q_data)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
CeedPragmaSIMD for (CeedInt i = 0; i < Q; i++) {
const CeedScalar J00 = J[0][0][i];
const CeedScalar J10 = J[0][1][i];
const CeedScalar J01 = J[1][0][i];
const CeedScalar J11 = J[1][1][i];
const CeedScalar qw = w[i] / (J00 * J11 - J10 * J01);
q_data[0][i] = qw * (J01 * J01 + J11 * J11);
q_data[1][i] = qw * (J00 * J00 + J10 * J10);
q_data[2][i] = -qw * (J00 * J01 + J10 * J11);
}
return CEED_ERROR_SUCCESS;
}
#endif