31 geo = fem.geometry.Cube27Node;
33 this =
this@fem.BaseFEM(geo);
38 Nx = [((x(1,:)-1).*x(1,:) .* (x(2,:)-1).*x(2,:) .* (x(3,:)-1).*x(3,:))/8; ...
40 ((1-x(1,:).^2) .* (x(2,:)-1).*x(2,:) .* (x(3,:)-1).*x(3,:))/4; ...
42 ((1+x(1,:)).*x(1,:) .* (x(2,:)-1).*x(2,:) .* (x(3,:)-1).*x(3,:))/8; ...
44 ((x(1,:)-1).*x(1,:) .* (1-x(2,:).^2) .* (x(3,:)-1).*x(3,:))/4; ...
46 ((1-x(1,:).^2) .* (1-x(2,:).^2) .* (x(3,:)-1).*x(3,:))/2; ...
48 ((1+x(1,:)).*x(1,:) .* (1-x(2,:).^2) .* (x(3,:)-1).*x(3,:))/4; ...
50 ((x(1,:)-1).*x(1,:) .* (1+x(2,:)).*x(2,:) .* (x(3,:)-1).*x(3,:))/8; ...
52 ((1-x(1,:).^2) .* (1+x(2,:)).*x(2,:) .* (x(3,:)-1).*x(3,:))/4; ...
54 ((1+x(1,:)).*x(1,:) .* (1+x(2,:)).*x(2,:) .* (x(3,:)-1).*x(3,:))/8; ...
56 ((x(1,:)-1).*x(1,:) .* (x(2,:)-1).*x(2,:) .* (1-x(3,:).^2))/4; ...
58 ((1-x(1,:).^2) .* (x(2,:)-1).*x(2,:) .* (1-x(3,:).^2))/2; ...
60 ((1+x(1,:)).*x(1,:) .* (x(2,:)-1).*x(2,:) .* (1-x(3,:).^2))/4; ...
62 ((x(1,:)-1).*x(1,:) .* (1-x(2,:).^2) .* (1-x(3,:).^2))/2; ...
64 ((1-x(1,:).^2) .* (1-x(2,:).^2) .* (1-x(3,:).^2))/1; ...
66 ((1+x(1,:)).*x(1,:) .* (1-x(2,:).^2) .* (1-x(3,:).^2))/2; ...
68 ((x(1,:)-1).*x(1,:) .* (1+x(2,:)).*x(2,:) .* (1-x(3,:).^2))/4; ...
70 ((1-x(1,:).^2) .* (1+x(2,:)).*x(2,:) .* (1-x(3,:).^2))/2; ...
72 ((1+x(1,:)).*x(1,:) .* (1+x(2,:)).*x(2,:) .* (1-x(3,:).^2))/4; ...
74 ((x(1,:)-1).*x(1,:) .* (x(2,:)-1).*x(2,:) .* (1+x(3,:)).*x(3,:))/8; ...
76 ((1-x(1,:).^2) .* (x(2,:)-1).*x(2,:) .* (1+x(3,:)).*x(3,:))/4; ...
78 ((1+x(1,:)).*x(1,:) .* (x(2,:)-1).*x(2,:) .* (1+x(3,:)).*x(3,:))/8; ...
80 ((x(1,:)-1).*x(1,:) .* (1-x(2,:).^2) .* (1+x(3,:)).*x(3,:))/4; ...
82 ((1-x(1,:).^2) .* (1-x(2,:).^2) .* (1+x(3,:)).*x(3,:))/2; ...
84 ((1+x(1,:)).*x(1,:) .* (1-x(2,:).^2) .* (1+x(3,:)).*x(3,:))/4; ...
86 ((x(1,:)-1).*x(1,:) .* (1+x(2,:)).*x(2,:) .* (1+x(3,:)).*x(3,:))/8; ...
88 ((1-x(1,:).^2) .* (1+x(2,:)).*x(2,:) .* (1+x(3,:)).*x(3,:))/4; ...
90 ((1+x(1,:)).*x(1,:) .* (1+x(2,:)).*x(2,:) .* (1+x(3,:)).*x(3,:))/8];
103 dNx = [[((2*x(1,:)-1).*(x(2,:)-1).*x(2,:).*(x(3,:)-1).*x(3,:)) ((x(1,:)-1).*x(1,:).*(2*x(2,:)-1).*(x(3,:)-1).*x(3,:)) ((x(1,:)-1).*x(1,:).*(x(2,:)-1).*x(2,:).*(2*x(3,:)-1))]/8; ...
104 [((-2*x(1,:)).*(x(2,:)-1).*x(2,:).*(x(3,:)-1).*x(3,:)) ((1-x(1,:).^2).*(2*x(2,:)-1).*(x(3,:)-1).*x(3,:)) ((1-x(1,:).^2).*(x(2,:)-1).*x(2,:).*(2*x(3,:)-1))]/4; ...
105 [((1+2*x(1,:)).*(x(2,:)-1).*x(2,:).*(x(3,:)-1).*x(3,:)) ((1+x(1,:)).*x(1,:).*(2*x(2,:)-1).*(x(3,:)-1).*x(3,:)) ((1+x(1,:)).*x(1,:).*(x(2,:)-1).*x(2,:).*(2*x(3,:)-1))]/8; ...
106 [((2*x(1,:)-1).*(1-x(2,:).^2).*(x(3,:)-1).*x(3,:)) ((x(1,:)-1).*x(1,:).*(-2*x(2,:)).*(x(3,:)-1).*x(3,:)) ((x(1,:)-1).*x(1,:).*(1-x(2,:).^2).*(2*x(3,:)-1))]/4; ...
107 [((-2*x(1,:)).*(1-x(2,:).^2).*(x(3,:)-1).*x(3,:)) ((1-x(1,:).^2).*(-2*x(2,:)).*(x(3,:)-1).*x(3,:)) ((1-x(1,:).^2).*(1-x(2,:).^2).*(2*x(3,:)-1))]/2; ...
108 [((1+2*x(1,:)).*(1-x(2,:).^2).*(x(3,:)-1).*x(3,:)) ((1+x(1,:)).*x(1,:).*(-2*x(2,:)).*(x(3,:)-1).*x(3,:)) ((1+x(1,:)).*x(1,:).*(1-x(2,:).^2).*(2*x(3,:)-1))]/4; ...
109 [((2*x(1,:)-1).*(1+x(2,:)).*x(2,:).*(x(3,:)-1).*x(3,:)) ((x(1,:)-1).*x(1,:).*(1+2*x(2,:)).*(x(3,:)-1).*x(3,:)) ((x(1,:)-1).*x(1,:).*(1+x(2,:)).*x(2,:).*(2*x(3,:)-1))]/8; ...
110 [((-2*x(1,:)).*(1+x(2,:)).*x(2,:).*(x(3,:)-1).*x(3,:)) ((1-x(1,:).^2).*(1+2*x(2,:)).*(x(3,:)-1).*x(3,:)) ((1-x(1,:).^2).*(1+x(2,:)).*x(2,:).*(2*x(3,:)-1))]/4; ...
111 [((1+2*x(1,:)).*(1+x(2,:)).*x(2,:).*(x(3,:)-1).*x(3,:)) ((1+x(1,:)).*x(1,:).*(1+2*x(2,:)).*(x(3,:)-1).*x(3,:)) ((1+x(1,:)).*x(1,:).*(1+x(2,:)).*x(2,:).*(2*x(3,:)-1))]/8; ...
112 [((2*x(1,:)-1).*(x(2,:)-1).*x(2,:).*(1-x(3,:).^2)) ((x(1,:)-1).*x(1,:).*(2*x(2,:)-1).*(1-x(3,:).^2)) ((x(1,:)-1).*x(1,:).*(x(2,:)-1).*x(2,:).*(-2*x(3,:)))]/4; ...
113 [((-2*x(1,:)).*(x(2,:)-1).*x(2,:).*(1-x(3,:).^2)) ((1-x(1,:).^2).*(2*x(2,:)-1).*(1-x(3,:).^2)) ((1-x(1,:).^2).*(x(2,:)-1).*x(2,:).*(-2*x(3,:)))]/2; ...
114 [((1+2*x(1,:)).*(x(2,:)-1).*x(2,:).*(1-x(3,:).^2)) ((1+x(1,:)).*x(1,:).*(2*x(2,:)-1).*(1-x(3,:).^2)) ((1+x(1,:)).*x(1,:).*(x(2,:)-1).*x(2,:).*(-2*x(3,:)))]/4; ...
115 [((2*x(1,:)-1).*(1-x(2,:).^2).*(1-x(3,:).^2)) ((x(1,:)-1).*x(1,:).*(-2*x(2,:)).*(1-x(3,:).^2)) ((x(1,:)-1).*x(1,:).*(1-x(2,:).^2).*(-2*x(3,:)))]/2; ...
116 [((-2*x(1,:)).*(1-x(2,:).^2).*(1-x(3,:).^2)) ((1-x(1,:).^2).*(-2*x(2,:)).*(1-x(3,:).^2)) ((1-x(1,:).^2).*(1-x(2,:).^2).*(-2*x(3,:)))]/1; ...
117 [((1+2*x(1,:)).*(1-x(2,:).^2).*(1-x(3,:).^2)) ((1+x(1,:)).*x(1,:).*(-2*x(2,:)).*(1-x(3,:).^2)) ((1+x(1,:)).*x(1,:).*(1-x(2,:).^2).*(-2*x(3,:)))]/2; ...
118 [((2*x(1,:)-1).*(1+x(2,:)).*x(2,:).*(1-x(3,:).^2)) ((x(1,:)-1).*x(1,:).*(1+2*x(2,:)).*(1-x(3,:).^2)) ((x(1,:)-1).*x(1,:).*(1+x(2,:)).*x(2,:).*(-2*x(3,:)))]/4; ...
119 [((-2*x(1,:)).*(1+x(2,:)).*x(2,:).*(1-x(3,:).^2)) ((1-x(1,:).^2).*(1+2*x(2,:)).*(1-x(3,:).^2)) ((1-x(1,:).^2).*(1+x(2,:)).*x(2,:).*(-2*x(3,:)))]/2; ...
120 [((1+2*x(1,:)).*(1+x(2,:)).*x(2,:).*(1-x(3,:).^2)) ((1+x(1,:)).*x(1,:).*(1+2*x(2,:)).*(1-x(3,:).^2)) ((1+x(1,:)).*x(1,:).*(1+x(2,:)).*x(2,:).*(-2*x(3,:)))]/4; ...
121 [((2*x(1,:)-1).*(x(2,:)-1).*x(2,:).*(1+x(3,:)).*x(3,:)) ((x(1,:)-1).*x(1,:).*(2*x(2,:)-1).*(1+x(3,:)).*x(3,:)) ((x(1,:)-1).*x(1,:).*(x(2,:)-1).*x(2,:).*(1+2*x(3,:)))]/8; ...
122 [((-2*x(1,:)).*(x(2,:)-1).*x(2,:).*(1+x(3,:)).*x(3,:)) ((1-x(1,:).^2).*(2*x(2,:)-1).*(1+x(3,:)).*x(3,:)) ((1-x(1,:).^2).*(x(2,:)-1).*x(2,:).*(1+2*x(3,:)))]/4; ...
123 [((1+2*x(1,:)).*(x(2,:)-1).*x(2,:).*(1+x(3,:)).*x(3,:)) ((1+x(1,:)).*x(1,:).*(2*x(2,:)-1).*(1+x(3,:)).*x(3,:)) ((1+x(1,:)).*x(1,:).*(x(2,:)-1).*x(2,:).*(1+2*x(3,:)))]/8; ...
124 [((2*x(1,:)-1).*(1-x(2,:).^2).*(1+x(3,:)).*x(3,:)) ((x(1,:)-1).*x(1,:).*(-2*x(2,:)).*(1+x(3,:)).*x(3,:)) ((x(1,:)-1).*x(1,:).*(1-x(2,:).^2).*(1+2*x(3,:)))]/4; ...
125 [((-2*x(1,:)).*(1-x(2,:).^2).*(1+x(3,:)).*x(3,:)) ((1-x(1,:).^2).*(-2*x(2,:)).*(1+x(3,:)).*x(3,:)) ((1-x(1,:).^2).*(1-x(2,:).^2).*(1+2*x(3,:)))]/2; ...
126 [((1+2*x(1,:)).*(1-x(2,:).^2).*(1+x(3,:)).*x(3,:)) ((1+x(1,:)).*x(1,:).*(-2*x(2,:)).*(1+x(3,:)).*x(3,:)) ((1+x(1,:)).*x(1,:).*(1-x(2,:).^2).*(1+2*x(3,:)))]/4; ...
127 [((2*x(1,:)-1).*(1+x(2,:)).*x(2,:).*(1+x(3,:)).*x(3,:)) ((x(1,:)-1).*x(1,:).*(1+2*x(2,:)).*(1+x(3,:)).*x(3,:)) ((x(1,:)-1).*x(1,:).*(1+x(2,:)).*x(2,:).*(1+2*x(3,:)))]/8; ...
128 [((-2*x(1,:)).*(1+x(2,:)).*x(2,:).*(1+x(3,:)).*x(3,:)) ((1-x(1,:).^2).*(1+2*x(2,:)).*(1+x(3,:)).*x(3,:)) ((1-x(1,:).^2).*(1+x(2,:)).*x(2,:).*(1+2*x(3,:)))]/4; ...
129 [((1+2*x(1,:)).*(1+x(2,:)).*x(2,:).*(1+x(3,:)).*x(3,:)) ((1+x(1,:)).*x(1,:).*(1+2*x(2,:)).*(1+x(3,:)).*x(3,:)) ((1+x(1,:)).*x(1,:).*(1+x(2,:)).*x(2,:).*(1+2*x(3,:)))]/8];
136 q = fem.HexahedronTriquadratic;
137 res = fem.BaseFEM.test_BasisFun(q);
140 [
X,
Y,Z] = ndgrid(-1:1:1,-1:1:1,-1:1:1);
141 p = [
X(:)
Y(:) Z(:)]^
t;
142 res = res && isequal(q.N(p),eye(27));
147 N = [
" (x(1,:)-1).*x(1,:) ",
" (1-x(1,:).^2) ",
" (1+x(1,:)).*x(1,:) "
148 " (x(2,:)-1).*x(2,:) ",
" (1-x(2,:).^2) ",
" (1+x(2,:)).*x(2,:) "
149 " (x(3,:)-1).*x(3,:) ",
" (1-x(3,:).^2) ",
" (1+x(3,:)).*x(3,:) "];
151 dN = [
" (2*x(1,:)-1) ",
" (-2*x(1,:)) ",
" (1+2*x(1,:)) "
152 " (2*x(2,:)-1) ",
" (-2*x(2,:)) ",
" (1+2*x(2,:)) "
153 " (2*x(3,:)-1) ",
" (-2*x(3,:)) ",
" (1+2*x(3,:)) "];
155 [x,y,z] = ndgrid(1:3);
156 idx = [x(:) y(:) z(:)]^
t;
157 fac = 2.^sum(idx ~= 2);
161 s = [s sprintf(
" (%s .* %s .* %s)/%d; ... %%%d\n ",
N[1,idx(1,
k)],
N[2,idx(2,
k)],
N[3,idx(3,
k)],fac(
k),
k)];
163 dn1 = sprintf(
" (%s.*%s.*%s) ",dN[1,idx(1,
k)],
N[2,idx(2,
k)],
N[3,idx(3,
k)]);
164 dn2 = sprintf(
" (%s.*%s.*%s) ",
N[1,idx(1,
k)],dN[2,idx(2,
k)],
N[3,idx(3,
k)]);
165 dn3 = sprintf(
" (%s.*%s.*%s) ",
N[1,idx(1,
k)],
N[2,idx(2,
k)],dN[3,idx(3,
k)]);
166 ds = [ds sprintf(
" [%s %s %s]/%d; ...\n ",dn1,dn2,dn3,fac(
k))];
171 N = eval(sprintf(
" @(x)[%s]; ",s(1:end-9)));
172 gradN = eval(sprintf(
" @(x)[%s]; ",ds(1:end-6)));
173 [x,y,z] = ndgrid(-1:1);
174 pos = [x(:) y(:) z(:)]^
t;
FEMBASE Summary of this class goes here Detailed explanation goes here.
Triquatratic: Quadratic ansatz functions on cube with 20 nodes per cube.
static function generateN_dN()
Little hack to generate the appropriate basis function expressions.
static function res = test_QuadraticBasisFun()
disp
Handle object disp method which is called by the display method. See the MATLAB disp function...
HexahedronTriquadratic(geo)
function dNx = gradN(colvec< double > x)
function Nx = N(colvec< double > x)
Triquadratic basis functions.