| 69 | return q_pts; |
| 70 | |
| 71 | def interpolate_at_quadrature_pts(mesh, sol_values, sol_grads): |
| 72 | tets = mesh.voxels; |
| 73 | b = 0.1381966011250105; |
| 74 | a = 1.0 - 3 * b; |
| 75 | |
| 76 | values = np.ndarray(mesh.num_voxels * 4); |
| 77 | values[0:mesh.num_voxels*4:4] = \ |
| 78 | a*sol_values[tets[:,0]] + \ |
| 79 | b*sol_values[tets[:,1]] + \ |
| 80 | b*sol_values[tets[:,2]] + \ |
| 81 | b*sol_values[tets[:,3]]; |
| 82 | values[1:mesh.num_voxels*4:4] = \ |
| 83 | b*sol_values[tets[:,0]] + \ |
| 84 | a*sol_values[tets[:,1]] + \ |
| 85 | b*sol_values[tets[:,2]] + \ |
| 86 | b*sol_values[tets[:,3]]; |
| 87 | values[2:mesh.num_voxels*4:4] = \ |
| 88 | b*sol_values[tets[:,0]] + \ |
| 89 | b*sol_values[tets[:,1]] + \ |
| 90 | a*sol_values[tets[:,2]] + \ |
| 91 | b*sol_values[tets[:,3]]; |
| 92 | values[3:mesh.num_voxels*4:4] = \ |
| 93 | b*sol_values[tets[:,0]] + \ |
| 94 | b*sol_values[tets[:,1]] + \ |
| 95 | b*sol_values[tets[:,2]] + \ |
| 96 | a*sol_values[tets[:,3]]; |
| 97 | # Grad is elementwise const. |
| 98 | grads = np.repeat(sol_grads, 4, axis=0); |
| 99 | |
| 100 | return values, grads; |
| 101 | |
| 102 | def interpolate_at_centroids(mesh, sol_values, sol_grads): |
| 103 | tets = mesh.voxels; |