OptFEM3DP1 Toolbox: bench/benchStiffElas3DP1.m Source File

| OptFEM3DP1 Toolbox 20130618_070730 Matlab/Octave Optimized P1-Lagrange Finite Element Method in 3D

- Main Page
- Related Pages
- Files

- File List
- File Members

All Files Functions Variables Pages
benchStiffElas3DP1.m
Go to the documentation of this file.
1 function bench=benchStiffElas3DP1(varargin)
2 % function benchStiffElasP1()
3 % Benchmark function for StiffElasAssembling3DP1 functions.
4 %
5 % Parameters:
6 % Num
7 % - 0 global alternate numbering with local alternate numbering (classical method),
8 % - 1 global block numbering with local alternate numbering,
9 % - 2 global alternate numbering with local block numbering,
10 % - 3 global block numbering with local block numbering.
11 %
12 % See also:
13 % #StiffElasAssembling3DP1base, #StiffElasAssembling3DP1OptV0, #StiffElasAssembling3DP1OptV1, #StiffElasAssembling3DP1OptV2
14 % Copyright:
15 % See \ref license
16
17 p = inputParser;
18
19 if isOctave()
20 p=p.addParamValue('LN', [20:10:60] , @isnumeric );
21 p=p.addParamValue('Num', 0 , @isnumeric );
22 p=p.parse(varargin{:});
23 else % Matlab
24 p.addParamValue('LN', [20:10:60], @isnumeric );
25 p.addParamValue('Num', 0, @isnumeric );
26 p.parse(varargin{:});
27 end
28 Num=p.Results.Num;
29
30 switch Num
31 case 0
32 s=sprintf('Global alternate numbering / local alternate numbering');
33 case 1
34 s=sprintf('Global block numbering / local alternate numbering');
35 case 2
36 s=sprintf('Global alternate numbering / local block numbering');
37 case 3
38 s=sprintf('Global block numbering / local block numbering');
39 otherwise
40 error('invalid Num value')
41 end
42
43 k=1;
44 for N=p.Results.LN
45 Th=CubeMesh(N);
46 fprintf('---------------------------------------------------------\n')
47 fprintf('BENCH (Stiff Elas. Matrix Assembling) %d\n',k)
48 fprintf(' Numbering Choice : %s\n',s);
49 fprintf(' Vertices number : %d - Tetrahedra number : %d\n',Th.nq,Th.nme)
50 Lnq(k)=Th.nq;
51 tic();
52 Mb=StiffElasAssembling3DP1base(Th.nq,Th.nme,Th.q,Th.me,Th.volumes,1,1,Num);
53 T(k,1)=toc();
54 fprintf(' Matrix size : %d\n',length(Mb))
55 fprintf(' CPU times base (ref) : %3.4f (s)\n',T(k,1))
56 Ldof(k)=length(Mb);
57 tic();
58 M=StiffElasAssembling3DP1OptV0(Th.nq,Th.nme,Th.q,Th.me,Th.volumes,1,1,Num);
59 T(k,2)=toc();
60 fprintf(' CPU times OptV0 : %3.4f (s) - Error = %e - Speed Up X%3.3f\n',T(k,2),norm(Mb-M,Inf),T(k,1)/T(k,2))
61 tic();
62 M=StiffElasAssembling3DP1OptV1(Th.nq,Th.nme,Th.q,Th.me,Th.volumes,1,1,Num);
63 T(k,3)=toc();
64 fprintf(' CPU times OptV1 : %3.4f (s) - Error = %e - Speed Up X%3.3f\n',T(k,3),norm(Mb-M,Inf),T(k,1)/T(k,3))
65 tic();
66 M=StiffElasAssembling3DP1OptV2(Th.nq,Th.nme,Th.q,Th.me,Th.volumes,1,1,Num);
67 T(k,4)=toc();
68 fprintf(' CPU times OptV2 : %3.4f (s) - Error = %e - Speed Up X%3.3f\n',T(k,4),norm(Mb-M,Inf),T(k,1)/T(k,4))
69 k=k+1;
70 end
71
72 bench.T=T;
73 bench.Lnq=Lnq;
74 bench.Ldof=Ldof;
75 bench.LN=p.Results.LN;