%-------------------------- % @Author: Jingqiao Hu % @Date: 2021-12-29 10:34:40 % @LastEditTime: 2022-01-29 20:38:20 % only update the projection of the neighbor cell of curr_idx, for efficiency %-------------------------- function [c_rho1, interEles] = update_projection(c_nodes, c_tets, MMCs, ... epsilon, c_rho, c_phi, c_nnbEdgeIDX, c_interPolySeed, local_idx) npnts = length(local_idx); [c_phi, interEles] = init_phi(local_idx, c_interPolySeed, c_phi); % important for i = 1 : npnts sid = local_idx(i); % seed-id pid = c_interPolySeed{sid}; % pgon-id intersected with this seed mid = c_nnbEdgeIDX{i}; % MMCs-id corresponding this seed 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 c_rho1 = c_rho; % Heaviside for i = 1 : length(interEles) ele = interEles(i); H = Heaviside_simply(c_phi{ele}, epsilon); faces = c_tets{ele}; c_rho1{ele} = sum(H(faces), 2) / 4; end end function [phi_cell, interEles] = init_phi(local_idx, c_interPolySeed, phi_cell) interEles = []; for i = 1:length(local_idx) sid = local_idx(i); pid = c_interPolySeed{sid}; % pgon-id intersected with this seed for j = 1 : length(pid) ele = pid(j); phi_cell{ele}(:) = -1e5; end interEles = [interEles; pid]; end interEles = unique(interEles); end