xref: /libCEED/tests/t320-basis.h (revision e5261ca07ee4f094ed332180400b18969f5abc8b)
1 static void buildmats(CeedScalar *qref, CeedScalar *qweight, CeedScalar *interp,
2                       CeedScalar *grad) {
3   CeedInt P = 6, Q = 4;
4 
5   qref[0] = 0.2;
6   qref[1] = 0.6;
7   qref[2] = 1./3.;
8   qref[3] = 0.2;
9   qref[4] = 0.2;
10   qref[5] = 0.2;
11   qref[6] = 1./3.;
12   qref[7] = 0.6;
13   qweight[0] = 25./96.;
14   qweight[1] = 25./96.;
15   qweight[2] = -27./96.;
16   qweight[3] = 25./96.;
17 
18   // Loop over quadrature points
19   for (int i=0; i<Q; i++) {
20     CeedScalar x1 = qref[0*Q+i], x2 = qref[1*Q+i];
21     // Interp
22     interp[i*P+0] =  2.*(x1+x2-1.)*(x1+x2-1./2.);
23     interp[i*P+1] = -4.*x1*(x1+x2-1.);
24     interp[i*P+2] =  2.*x1*(x1-1./2.);
25     interp[i*P+3] = -4.*x2*(x1+x2-1.);
26     interp[i*P+4] =  4.*x1*x2;
27     interp[i*P+5] =  2.*x2*(x2-1./2.);
28     // Grad
29     grad[(i+0)*P+0] =  2.*(1.*(x1+x2-1./2.)+(x1+x2-1.)*1.);
30     grad[(i+Q)*P+0] =  2.*(1.*(x1+x2-1./2.)+(x1+x2-1.)*1.);
31     grad[(i+0)*P+1] = -4.*(1.*(x1+x2-1.)+x1*1.);
32     grad[(i+Q)*P+1] = -4.*(x1*1.);
33     grad[(i+0)*P+2] =  2.*(1.*(x1-1./2.)+x1*1.);
34     grad[(i+Q)*P+2] =  2.*0.;
35     grad[(i+0)*P+3] = -4.*(x2*1.);
36     grad[(i+Q)*P+3] = -4.*(1.*(x1+x2-1.)+x2*1.);
37     grad[(i+0)*P+4] =  4.*(1.*x2);
38     grad[(i+Q)*P+4] =  4.*(x1*1.);
39     grad[(i+0)*P+5] =  2.*0.;
40     grad[(i+Q)*P+5] =  2.*(1.*(x2-1./2.)+x2*1.);
41   }
42 }
43