%% 获取网格连接信息
% edgeLength：nedge*1，棱边长度
% edgeCen：nedge*3，棱边中点坐标x，y，z
% edgeUnit：nedge*1，棱边切向单位矢量
% elemEdgeLength：nelem*6，四面体中6条棱边的长度
% elemCen：nelem*3，棱边中点坐标x，y，z

function [mesh] = get_mesh_Connect(mesh)

% get_edges函数获取节点与棱边、棱边与单元的关系
% elem2edge：nelem*6，1个四面体单元-6个条边
% edge2node：nedge*2，1条棱边-2个节点

[mesh.elem2edge,mesh.edge2node]        = get_edges(mesh.elem2node);
mesh.nelem     = size(mesh.elem2edge,1);
mesh.nedge     = size(mesh.edge2node,1);  

% 单元中心坐标

mesh.elemCen = (mesh.node2coord(mesh.elem2node(:,1),:)  + mesh.node2coord(mesh.elem2node(:,2),:)...
    +mesh.node2coord(mesh.elem2node(:,3),:)  + mesh.node2coord(mesh.elem2node(:,4),:))./4;

% 棱边长度

mesh.edgeLength = sqrt( (mesh.node2coord(mesh.edge2node(:,1),1) - mesh.node2coord(mesh.edge2node(:,2),1)).^2 ...
    +(mesh.node2coord(mesh.edge2node(:,1),2) - mesh.node2coord(mesh.edge2node(:,2),2)).^2 ...
    +(mesh.node2coord(mesh.edge2node(:,1),3) - mesh.node2coord(mesh.edge2node(:,2),3)).^2  ) ;

% 棱边中点坐标

mesh.edgeCen  = (mesh.node2coord(mesh.edge2node(:,1),:) + mesh.node2coord(mesh.edge2node(:,2),:))./2 ;

% 棱边切向单位矢量，棱边方向为，小节点号指向大节点号

mesh.edgeUnit = (mesh.node2coord(mesh.edge2node(:,1),:) - mesh.node2coord(mesh.edge2node(:,2),:))./mesh.edgeLength ;

% 四面体单元6条棱边的长度

mesh.elemEdgeLength = zeros(size(mesh.elem2edge));
for ie = 1:6
    mesh.elemEdgeLength(:,ie) = mesh.edgeLength(mesh.elem2edge(:,ie));
end

% signs_edges函数获取局部单元棱边的方向信息，定义棱边的全局方向为小号节点指向大号节点
% sign，nelem*6，四面体单元的6个条边的指向，包含1和-1，1表示单元棱边方向与全局棱边方向相同

mesh.sign    = signs_edges(mesh.elem2node);
end