You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

53 lines
1.4 KiB

%--------------------------
% @Author: Jingqiao Hu
% @Date: 2021-12-28 21:34:40
% @LastEditTime: 2022-05-09 21:09:42
% the mesh and MMCs are independent,
% which means the MMCs is moving and the mesh remains unchanged
% c_interPolySeed: the intersected polytope for each seed
%--------------------------
function [c_rho, c_phi] = projection_independent_hex(c_nodes, c_tets, ...
MMCs, epsilon, c_nnbEdgeIDX, c_interPolySeed)
ncvt = size(c_nodes, 1);
npnts = size(c_interPolySeed, 1);
c_phi = init_phi(ncvt, c_nodes);
c_rho = cell(ncvt, 1);
for i = 1 : npnts
pid = c_interPolySeed{i};
mid = c_nnbEdgeIDX{i};
for j = 1 : length(mid)
mmc = MMCs(mid(j), :);
t = mmc(1);
sp = mmc(2:4);
ep = mmc(5:7);
for k = 1 : length(pid)
ele = pid(k);
nodes = c_nodes{ele};
phi = signed_distance(nodes, sp, ep, t);
c_phi{ele} = max(phi, c_phi{ele});
end
end
end
% Heaviside
parfor ele = 1 : ncvt
H = Heaviside_simply(c_phi{ele}, epsilon);
faces = c_tets{ele};
c_rho{ele} = sum(H(faces), 2) / length(faces);
end
end
function phi_cell = init_phi(ncvt, c_nodes)
phi_cell = cell(ncvt, 1);
parfor ele = 1:ncvt
phi_cell{ele} = repmat(-1e5, size(c_nodes{ele}, 1), 1);
end
end