3 #include "library/quad_1_gauss_field.hpp"
6 #include "library/helmholtz_3d.hpp"
9 typedef Eigen::Matrix<unsigned, Eigen::Dynamic, Eigen::Dynamic> uMatrix;
12 void mexFunction(
int nlhs, mxArray *lhs[],
int nrhs, mxArray
const *rhs[])
16 mexErrMsgTxt(
"Usage: mex(surf_nodes, surf_elem, field_nodes, field_elem, k)");
18 surf_nodes(rhs[0]), surf_elem(rhs[1]),
19 field_nodes(rhs[2]), field_elem(rhs[3]);
20 double k = *mxGetPr(rhs[4]);
23 size_t nElements = surf_elem.rows();
24 uMatrix fields(nElements, 1+4+4);
25 for (
size_t e = 0; e < nElements; ++e)
27 fields(e,0) = NiHu::quad_1_gauss_field::id;
28 for (
size_t c = 0; c < 4; ++c)
29 fields(e,c+1) = surf_elem(e,c+1);
30 for (
size_t c = 0; c < 4; ++c)
31 fields(e,c+1+4) = unsigned(4*e+c);
40 auto const &field_sp =
NiHu::dirac(NiHu::constant_view(field_mesh));
42 size_t n = surf_sp.get_num_dofs();
43 size_t m = field_sp.get_num_dofs();
45 L_surf(n, n, lhs[0]), M_surf(n, n, lhs[1]),
46 Mt_surf(n, n, lhs[2]), D_surf(n, n, lhs[3]),
47 L_field(m, n, lhs[4]), M_field(m, n, lhs[5]);
75 L_field << field_sp * L[surf_sp];
79 M_field << field_sp * M[surf_sp];