5 disp(
'*******************************************')
6 disp('* MassVF 3D Assembling P1 validations *')
7 disp('*******************************************')
10 s=sprintf('Global alternate numbering / local alternate numbering');
12 s=sprintf('Global block numbering / local alternate numbering');
14 s=sprintf('Global alternate numbering / local block numbering');
16 s=sprintf('Global block numbering / local block numbering');
18 error('invalid Num value')
20 fprintf(' Numbering Choice : %s\n',s);
27 disp('----------------------------------StiffElasAssemblingP1OptV2-------')
28 disp(' Test 1: Matrices errors and CPU times ')
29 fprintf(' Matrix size : %d\n',3*Th.nq);
30 disp('-----------------------------------------')
37 Test1.error(1)=norm(Mbase-MOptV0,Inf);
38 Test1.name{1}=
'MassVFAssembling3DP1OptV0';
39 fprintf(
' Error P1base vs OptV0 : %e\n',Test1.error(1))
43 Test1.error(2)=norm(Mbase-MOptV1,Inf);
44 Test1.name{2}=
'MassVFAssembling3DP1OptV1';
45 fprintf(
' Error P1base vs OptV1 : %e\n',Test1.error(2))
49 Test1.error(3)=norm(Mbase-MOptV2,Inf);
50 Test1.name{3}=
'MassVFAssembling3DP1OptV2';
51 fprintf(
' Error P1base vs OptV2 : %e\n',Test1.error(3))
54 Test1.error(4)=norm(Mbase-MOptV3,Inf);
55 Test1.name{4}=
'MassVFAssembling3DP1OptV3';
56 fprintf(
' Error P1base vs OptV3 : %e\n',Test1.error(4))
58 fprintf(
' CPU times base (ref) : %3.4f (s)\n',
T(1))
59 fprintf(
' CPU times OptV0 : %3.4f (s) - Speed Up X%3.3f\n',
T(2),
T(1)/
T(2))
60 fprintf(
' CPU times OptV1 : %3.4f (s) - Speed Up X%3.3f\n',
T(3),
T(1)/
T(3))
61 fprintf(
' CPU times OptV2 : %3.4f (s) - Speed Up X%3.3f\n',
T(4),
T(1)/
T(4))
62 fprintf(
' CPU times OptV3 : %3.4f (s) - Speed Up X%3.3f\n',
T(5),
T(1)/
T(5))
69 disp(
'-----------------------------------------------------------')
70 disp(' Test 2: Validations by integration on [0,1]x[0,1]x[0,1] ')
71 disp('-----------------------------------------------------------')
80 U=[u{1}(qf(1,:),qf(2,:),qf(3,:));u{2}(qf(1,:),qf(2,:),qf(3,:));u{3}(qf(1,:),qf(2,:),qf(3,:))];
82 V=[v{1}(qf(1,:),qf(2,:),qf(3,:));v{2}(qf(1,:),qf(2,:),qf(3,:));v{3}(qf(1,:),qf(2,:),qf(3,:))];
85 U=[u{1}(qf(1,:),qf(2,:),qf(3,:)) u{2}(qf(1,:),qf(2,:)) u{3}(qf(1,:),qf(2,:),qf(3,:))]
';
86 V=[v{1}(qf(1,:),qf(2,:),qf(3,:)) v{2}(qf(1,:),qf(2,:),qf(3,:)) v{3}(qf(1,:),qf(2,:),qf(3,:))]';
89 Test(kk).error=abs(Test(kk).Mass-U
'*KK*V);
90 fprintf(' functions %d : u(x,y,z)=(%s,%s,%s), v(x,y,z)=(%s,%s,%s),\n -> MassVF error=%e\n
', ...
91 kk,Test(kk).cu{1},Test(kk).cu{2},Test(kk).cu{3},Test(kk).cv{1},Test(kk).cv{2},Test(kk).cv{3},Test(kk).error);
96 disp('--------------------------------
')
97 disp(' Test 3: Validations by order
')
98 disp('--------------------------------
')
103 fprintf(' functions %d : u(x,y,z)=(%s,%s,%s), v(x,y,z)=(%s,%s,%s),\n
',n, ...
104 Test(n).cu{1},Test(n).cu{2},Test(n).cu{3}, ...
105 Test(n).cv{1},Test(n).cv{2},Test(n).cv{3});
106 fprintf(' Integral of dot(u(x,y,z),v(x,y,z)) over unit cube : %.16f\n
',ExSol);
111 fprintf('(%d/%d) Matrix size : %d\n
',k,N,Th.nq);
112 h(k)=GetMaxLengthEdges(Th.q,Th.me);
114 M=MassVFAssembling3DP1OptV2(Th.nq,Th.nme,Th.me,Th.volumes,Num);
118 U=[u{1}(qf(1,:),qf(2,:),qf(3,:));u{2}(qf(1,:),qf(2,:),qf(3,:));u{3}(qf(1,:),qf(2,:),qf(3,:))];
120 V=[v{1}(qf(1,:),qf(2,:),qf(3,:));v{2}(qf(1,:),qf(2,:),qf(3,:));v{3}(qf(1,:),qf(2,:),qf(3,:))];
123 U=[u{1}(qf(1,:),qf(2,:),qf(3,:)) u{2}(qf(1,:),qf(2,:)) u{3}(qf(1,:),qf(2,:),qf(3,:))]';
124 V=[v{1}(qf(1,:),qf(2,:),qf(3,:)) v{2}(qf(1,:),qf(2,:),qf(3,:)) v{3}(qf(1,:),qf(2,:),qf(3,:))]
';
126 Error(k)=abs(ExSol-U'*
M*V);
127 fprintf(
' MassVFAssembling3DP1OptV2 CPU times : %3.3f(s)\n',TT(
k));
131 loglog(h,Error,
'+-r',h,h*1.1*Error(1)/h(1),
'-sm',h,1.1*Error(1)*(h/h(1)).^2,
'-db')
132 legend('Error','O(h)','O(h^2)')
134 title(sprintf('Test 3 : 3D MassVF Matrix (Num=%d)',Num))
139 %title(sprintf('Matrix sparsity for %s numbering',s))
142 function checkTest1(Test)
143 I=find(Test.error>1e-14);
145 disp('------------------------')
146 disp(' Test 1 (results): OK')
147 disp('------------------------')
149 disp('----------------------------')
150 disp(' Test 1 (results): FAILED')
151 disp('----------------------------')
155 function checkTest2(Test)
159 if (ismember(Test(
k).degree,[0 1]))
160 if (Test(
k).error>1e-12)
166 disp('------------------------')
167 disp(' Test 2 (results): OK')
168 disp('------------------------')
170 disp('----------------------------')
171 disp(' Test 2 (results): FAILED')
172 disp('----------------------------')
176 function checkTest3(h,error)
178 P=polyfit(log(h),log(error),1);
180 disp('------------------------')
181 disp(' Test 3 (results): OK')
182 fprintf(' -> found numerical order %f. Must be 2\n',P(1))
183 disp('------------------------')
185 disp('----------------------------')
186 disp(' Test 3 (results): FAILED')
187 fprintf(' -> found numerical order %f. Must be 2\n',P(1))
188 disp('----------------------------')