I'm working with tetrahedral finite elements. I can happily set up a mesh and work with said mesh. A really simple example code then gives the following with 72 elements:

clear,close all; clc; dbstop if error;

Nx = 4; Ny =3; Nz = 3;

a = 1; b = 1; c = 2;

X = linspace(0,a,Nx); Y = linspace(0,c,Ny); Z = linspace(0,a,Nz);

[X,Y,Z] = meshgrid(X,Y,Z); X = X(:); Y = Y(:); Z=Z(:);

TRI = delaunay(X,Y,Z);

N = [X,Y,Z];

figure; tetramesh(TRI,[X(:),Y(:),Z(:)]), xlabel('x'),ylabel('y'),zlabel('z');

As a part of my model, each individual element is assumed to be homogoenous and as such has a material property associated with it which for the example here is given by:

NE = size(TRI,1);

Elements = 1:NE;

Rho_e = zeros(NE,1);

Rho_e(Elements(sum(Y(TRI) <= b,2)==3)) = rho;

When I'm working with triangles in 2D. I can make use of trisurf and create a plot of the material properties:

Nx = 13; Ny =13;

a = 1; b = 1; c = 2;

X = linspace(0,a,Nx); Y = linspace(0,c,Ny);

[X,Y] = meshgrid(X,Y); X = X(:); Y = Y(:);

TRI = delaunay(X,Y);

figure;

trisurf(TRI,X,Y,0*X,Rho_e,'edgecolor','k','facecolor','interp');

I'm currently trying then to create this plot for a 3D mesh of delauney tetrahedra as set up in the previous code. My current attempt looks like:

tetramesh(TRI,[X,Y,Z],Rho_e,'facecolor','interp');

view(2);

axis equal; colorbar; xlim([0,a]); ylim([0,c]); zlim([0,a]);

Which results in the following error message:

Warning: Error creating or updating Patch

Error in value of property FaceVertexCData

Number of colors must equal number of vertices

> In defaulterrorcallback (line 12)

In Oct8_3DFEM (line 56)

My guess is that I somehow need to manipulate my Rho vector from reprsenting individual elements to individual vertices. However for physical purposes it is important I find Rho_e first. The final image I'm searching for will essentially be a 3D projection of the 2D one attached above. Any thoughts, advice or other suggestions would be greatly appreciated