20 function SP = models.muscle.Constraint.computeSparsityPattern() {
22 mc = sys.Model.Config;
24 geo = fe_pos.Geometry;
25 fe_press = mc.PressureFEM;
26 pgeo = fe_press.Geometry;
28 num_elements = geo.NumElements;
29 num_gausspoints = fe_pos.GaussPointsPerElem;
30 dofsperelem_displ = geo.DofsPerElement;
31 dofsperelem_press = pgeo.DofsPerElement;
34 itotal = num_elements*num_gausspoints...
35 *(dofsperelem_press*(3*dofsperelem_displ)) ;
36 i = zeros(itotal,1,
" int32 ");
37 j = zeros(itotal,1,
" int32 ");
40 pones = ones(dofsperelem_press,1,
" int32 ");
41 for m = 1:num_elements
42 elemidx_u = sys.idx_u_elems_local(:,:,m);
43 elemidx_p = sys.idx_p_elems_local(:,m);
44 for gp = 1:num_gausspoints
45 for k = 1:dofsperelem_displ
47 step = 3*dofsperelem_press;
49 i(curoff + (1:step)) = [elemidx_p(:)
52 j(curoff + (1:step)) = [pones*elemidx_u(1,k)
54 pones*elemidx_u(3,k)];
55 curoff = curoff + step;
61 SP = sparse(
double(i),
double(j),ones(size(i)),M,6*geo.NumNodes+M);
63 SP(:,sys.idx_uv_bc_glob) = [];