41 double v1, v2, v3, v4, v5, v6, v7, v8;
42 double w1, w2, w3, w4, w5, w6, w7, w8;
47 v1 = ( values[0][0][0]*weights[0][0][0] + values[1][0][0]*weights[1][0][0] + values[0][1][0]*weights[0][1][0] + values[1][1][0]*weights[1][1][0] +
48 values[0][0][1]*weights[0][0][1] + values[1][0][1]*weights[1][0][1] + values[0][1][1]*weights[0][1][1] + values[1][1][1]*weights[1][1][1] );
49 w1 = ( weights[0][0][0] + weights[1][0][0] + weights[0][1][0] + weights[1][1][0] +
50 weights[0][0][1] + weights[1][0][1] + weights[0][1][1] + weights[1][1][1] );
53 v2 = ( values[1][0][0]*weights[1][0][0] + values[2][0][0]*weights[2][0][0] + values[1][1][0]*weights[1][1][0] + values[2][1][0]*weights[2][1][0] +
54 values[1][0][1]*weights[1][0][1] + values[2][0][1]*weights[2][0][1] + values[1][1][1]*weights[1][1][1] + values[2][1][1]*weights[2][1][1] );
55 w2 = ( weights[1][0][0] + weights[2][0][0] + weights[1][1][0] + weights[2][1][0] +
56 weights[1][0][1] + weights[2][0][1] + weights[1][1][1] + weights[2][1][1] );
59 v3 = ( values[0][1][0]*weights[0][1][0] + values[1][1][0]*weights[1][1][0] + values[0][2][0]*weights[0][2][0] + values[1][2][0]*weights[1][2][0] +
60 values[0][1][1]*weights[0][1][1] + values[1][1][1]*weights[1][1][1] + values[0][2][1]*weights[0][2][1] + values[1][2][1]*weights[1][2][1] );
61 w3 = ( weights[0][1][0] + weights[1][1][0] + weights[0][2][0] + weights[1][2][0] +
62 weights[0][1][1] + weights[1][1][1] + weights[0][2][1] + weights[1][2][1] );
65 v4 = ( values[1][1][0]*weights[1][1][0] + values[2][1][0]*weights[2][1][0] + values[1][2][0]*weights[1][2][0] + values[2][2][0]*weights[2][2][0] +
66 values[1][1][1]*weights[1][1][1] + values[2][1][1]*weights[2][1][1] + values[1][2][1]*weights[1][2][1] + values[2][2][1]*weights[2][2][1] );
67 w4 = ( weights[1][1][0] + weights[2][1][0] + weights[1][2][0] + weights[2][2][0] +
68 weights[1][1][1] + weights[2][1][1] + weights[1][2][1] + weights[2][2][1] );
74 v5 = ( values[0][0][1]*weights[0][0][1] + values[1][0][1]*weights[1][0][1] + values[0][1][1]*weights[0][1][1] + values[1][1][1]*weights[1][1][1] +
75 values[0][0][2]*weights[0][0][2] + values[1][0][2]*weights[1][0][2] + values[0][1][2]*weights[0][1][2] + values[1][1][2]*weights[1][1][2] );
76 w5 = ( weights[0][0][1] + weights[1][0][1] + weights[0][1][1] + weights[1][1][1] +
77 weights[0][0][2] + weights[1][0][2] + weights[0][1][2] + weights[1][1][2] );
80 v6 = ( values[1][0][1]*weights[1][0][1] + values[2][0][1]*weights[2][0][1] + values[1][1][1]*weights[1][1][1] + values[2][1][1]*weights[2][1][1] +
81 values[1][0][2]*weights[1][0][2] + values[2][0][2]*weights[2][0][2] + values[1][1][2]*weights[1][1][2] + values[2][1][2]*weights[2][1][2] );
82 w6 = ( weights[1][0][1] + weights[2][0][1] + weights[1][1][1] + weights[2][1][1] +
83 weights[1][0][2] + weights[2][0][2] + weights[1][1][2] + weights[2][1][2] );
86 v7 = ( values[0][1][1]*weights[0][1][1] + values[1][1][1]*weights[1][1][1] + values[0][2][1]*weights[0][2][1] + values[1][2][1]*weights[1][2][1] +
87 values[0][1][2]*weights[0][1][2] + values[1][1][2]*weights[1][1][2] + values[0][2][2]*weights[0][2][2] + values[1][2][2]*weights[1][2][2] );
88 w7 = ( weights[0][1][1] + weights[1][1][1] + weights[0][2][1] + weights[1][2][1] +
89 weights[0][1][2] + weights[1][1][2] + weights[0][2][2] + weights[1][2][2] );
92 v8 = ( values[1][1][1]*weights[1][1][1] + values[2][1][1]*weights[2][1][1] + values[1][2][1]*weights[1][2][1] + values[2][2][1]*weights[2][2][1] +
93 values[1][1][2]*weights[1][1][2] + values[2][1][2]*weights[2][1][2] + values[1][2][2]*weights[1][2][2] + values[2][2][2]*weights[2][2][2] );
94 w8 = ( weights[1][1][1] + weights[2][1][1] + weights[1][2][1] + weights[2][2][1] +
95 weights[1][1][2] + weights[2][1][2] + weights[1][2][2] + weights[2][2][2] );
98 double total_weighted_value = v1+v2+v3+v4+v5+v6+v7+v8;
99 double total_weight = w1+w2+w3+w4+w5+w6+w7+w8;
103 if (fabs(total_weight) < 1.0e-12) {
107 return total_weighted_value / total_weight;
148 double weights[3][3][3],
SymTensor *filtered)
151 double component[6][3][3][3];
153 PetscFunctionBeginUser;
154 PetscCheck(filtered != NULL, PETSC_COMM_SELF, PETSC_ERR_ARG_NULL,
155 "Filtered tensor destination cannot be NULL.");
157 for (PetscInt r = 0; r < 3; r++)
158 for (PetscInt q = 0; q < 3; q++)
159 for (PetscInt p = 0; p < 3; p++) {
160 component[0][r][q][p] = values[r][q][p].
xx;
161 component[1][r][q][p] = values[r][q][p].
xy;
162 component[2][r][q][p] = values[r][q][p].
xz;
163 component[3][r][q][p] = values[r][q][p].
yy;
164 component[4][r][q][p] = values[r][q][p].
yz;
165 component[5][r][q][p] = values[r][q][p].
zz;
175 PetscFunctionReturn(0);