%%%%%%%%%% 3D FEM with brick element %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [U]=FEM_Beam(nx,ny,nz,ke_all) N = 3*(nx+1)*(ny+1)*(nz+1); % K = sparse(N, N); nele=nx*ny*nz; si=zeros(1,nele*24^2); sj=zeros(1,nele*24^2); sv=zeros(1,nele*24^2); for elx = 1:nx for ely = 1:ny for elz = 1:nz % n1 = (nz+1)*(ny+1)*elx + (nz+1)*(ely-1) + elz; % n2 = n1 - (nz+1)*(ny+1); n2 = (nz+1)*(ny+1)*elx + (nz+1)*(ely-1) + elz; n1 = n2-(nz+1)*(ny+1); n3 = n1 + (nz+1); n4 = n2 + (nz+1); n5 = n1 + 1; n6 = n2 + 1; n7 = n3 + 1; n8 = n4 + 1; edof = [3*n1-2; 3*n1-1; 3*n1; 3*n2-2; 3*n2-1; 3*n2; 3*n3-2; 3*n3-1; 3*n3; 3*n4-2; 3*n4-1; 3*n4; 3*n5-2; 3*n5-1; 3*n5; 3*n6-2; 3*n6-1; 3*n6; 3*n7-2; 3*n7-1; 3*n7; 3*n8-2; 3*n8-1; 3*n8]; ne=(elx-1)*ny*nz+(ely-1)*nz+elz; si((ne-1)*24^2+1:ne*24^2)=kron(ones(1,24),edof.'); sj((ne-1)*24^2+1:ne*24^2)=kron(edof.',ones(1,24)); ke=ke_all(:,:,elz,ely,elx); sv((ne-1)*24^2+1:ne*24^2)=ke(:); % K(edof,edof) = K(edof,edof) + ke_all(:,:,elz,ely,elx); end end end K = sparse(si,sj,sv,N,N); loadnodes=nx*(ny+1)*(nz+1)+1:nz+1:(nx+1)*(ny+1)*(nz+1)-nz; loaddofs = loadnodes(:).*3; F = zeros(N,1); F(loaddofs) = -1; fixeddofs = [1:3*(ny+1)*(nz+1)]; alldofs = [1:N]; freedofs = setdiff(alldofs,fixeddofs); U = zeros(N,1); U(freedofs,:) = K(freedofs,freedofs) \ F(freedofs,:); end