Code covered by the BSD License  

Highlights from
3D Crouzeix-Raviart mortar finite element method

image thumbnail
from 3D Crouzeix-Raviart mortar finite element method by Jan Valdman
Implementation of 3D Crouzeix-Raviart mortar finite element

[elements4,T1_Plane_index]=rotate_intersection_elements(elements4,coordinates)
function [elements4,T1_Plane_index]=rotate_intersection_elements(elements4,coordinates)      
elements4_Zcoord=sparse([...
               coordinates(elements4(:,1),3) ...
               coordinates(elements4(:,2),3) ...
               coordinates(elements4(:,3),3) ...
               coordinates(elements4(:,4),3)]);  
T1_OffPlane_vertices=full(sum(spones(elements4_Zcoord),2));
T1_Plane_index=find(T1_OffPlane_vertices==1);
for i=1:size(T1_Plane_index,1)
    vertices=elements4(T1_Plane_index(i),:);
    Zcoords=coordinates(vertices,3);
    nonzero_index=find(Zcoords);
    switch nonzero_index
        case 1
            vertices_rotated=vertices([2 3 4 1]);
        case 2 
            vertices_rotated=vertices([3 4 1 2]);
        case 3 
            vertices_rotated=vertices([4 1 2 3]);
        case 4
            vertices_rotated=vertices;
    end
    elements4(T1_Plane_index(i),:)=vertices_rotated;      
end
%elements4_OnIntersection=elements4(T1_Plane_index,:);
    
    

Contact us at files@mathworks.com