% Tests of speed of varied numbers of threads, comsol-3.4. % ~2007-12-04. % Using a script from comsol to run several example models. % Results from diagsim, then from gnu are given, in matlab % form. The script is copied at the end. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % `diagsim': 8-core (2*quad), 8GB RAM. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % cputime and realtime in seconds, for whole assembly and % two consecutive solutions % % Command for extracting the following matrices from the raw % data (using $6 for real, $3 for CPU time, in the awk part): % l=0; for r in 0 1 2 ; do for t in `seq 1 8`; do for i in `seq 1 8`; do l=$((l+1)); % T=`grep ^WHOLE diagsim_cstst.log | head -n $l | tail -n 1 | awk '{ print $6 }'`; % printf "%7.1f, " $T ; done ; echo " " ; done ; done % % Command for running the original simulations: % for r in 0 1 2 ; do for n in `seq 1 8` ; do echo -e "\n-----\n$n threads, $r refinements\n" ; % echo "maxNumCompThreads($n); modeltest($r,2), exit" | comsol-3.4 -np $n matlab -ml -nodesktop ; % done ; done 2>&1 | tee `hostname`_cstst.log % cput = [ ... 139.2, 117.8, 301.2, 429.1, 297.9, 216.8, 143.3, 416.7, 222.4, 142.4, 417.8, 527.3, 431.8, 382.9, 227.8, 479.6, 313.9, 180.9, 536.5, 679.2, 595.8, 532.9, 297.8, 533.3, 377.1, 208.5, 630.9, 878.1, 764.7, 651.0, 376.9, 610.7, 451.1, 257.6, 770.2, 1131.9, 911.6, 793.3, 479.3, 718.5, 538.5, 301.4, 913.0, 1173.5, 1259.1, 930.7, 563.1, 828.4, 613.0, 359.1, 1133.0, 1621.5, 1437.8, 1070.4, 664.7, 907.3, 697.7, 423.3, 1433.8, 1552.8, 1686.6, 1205.9, 752.2, 1072.1, 138.5, 366.3, 297.9, 1857.8, 417.3, 217.1, 611.4, 414.0, 219.2, 438.5, 417.9, 2259.6, 600.3, 380.0, 887.4, 480.9, 312.4, 548.7, 522.3, 2689.1, 770.9, 531.0, 1057.6, 530.7, 374.9, 644.4, 635.3, 3708.2, 1006.0, 649.4, 1169.1, 611.0, 446.5, 791.1, 847.8, 4697.4, 1133.1, 780.3, 1664.5, 715.8, 547.3, 928.8, 1005.3, 5048.3, 1469.8, 935.2, 1945.0, 828.6, 669.4, 1137.7, 1034.5, 5956.1, 1658.5, 1067.5, 2236.5, 906.7, 718.4, 1298.7, 1197.0, 6747.6, 1778.6, 1204.1, 2275.2, 1068.3, 985.7, 1211.1, 1067.5, 6944.8, 1066.8, 1290.4, 1816.2, 2346.1, 1453.8, 1449.3, 1409.0, 7956.1, 1472.1, 2145.3, 2306.8, 2586.1, 2143.2, 1851.8, 1907.3, 10166.1, 1906.2, 2838.5, 3031.7, 2787.5, 2456.8, 2309.2, 2128.0, 11091.7, 2306.6, 3196.1, 3138.6, 3169.5, 2994.3, 2864.1, 2589.2, 16847.3, 2877.2, 3874.6, 4138.5, 3549.5, 3421.8, 3398.8, 3295.0, 16190.2, 3263.5, 4575.0, 4781.3, 3986.5, 4041.9, 4496.6, 3485.0, 21521.3, 3837.6, 5215.8, 6404.6, 4510.3, 5034.6, 5312.8, 4009.5, 25058.2, 3902.1, 6019.9, 6443.7, 5330.2 ] realt = [ ... 137.4, 117.6, 290.4, 427.8, 296.6, 215.2, 142.5, 416.0, 120.5, 78.7, 211.8, 268.8, 230.8, 200.6, 115.4, 255.4, 117.7, 70.2, 186.8, 235.0, 218.5, 194.3, 105.9, 198.6, 109.4, 63.7, 167.9, 231.5, 213.4, 183.9, 104.2, 177.7, 106.2, 65.0, 166.8, 241.1, 207.3, 182.6, 107.9, 169.4, 106.2, 63.6, 165.9, 206.9, 238.6, 180.1, 107.2, 165.8, 105.1, 64.9, 182.6, 257.6, 233.4, 180.2, 109.7, 159.1, 105.1, 69.8, 207.5, 211.7, 237.6, 374.9, 109.1, 165.2, 137.2, 366.1, 290.8, 1855.4, 416.3, 216.0, 609.8, 413.3, 118.8, 246.6, 213.1, 1153.8, 338.3, 199.4, 448.2, 255.9, 117.1, 219.4, 181.5, 931.0, 307.4, 194.0, 363.7, 197.9, 108.6, 202.1, 168.4, 970.9, 311.5, 182.9, 301.8, 176.6, 105.3, 206.8, 185.9, 990.4, 288.5, 179.7, 352.7, 169.0, 108.1, 204.3, 182.9, 887.4, 313.5, 180.4, 357.2, 165.9, 113.0, 213.5, 165.2, 898.9, 304.8, 179.1, 360.0, 158.9, 107.6, 213.0, 169.6, 891.2, 290.7, 178.7, 329.3, 164.9, 983.8, 1322.8, 1104.8, 6943.9, 1061.1, 1289.5, 1814.6, 2346.8, 764.0, 822.0, 739.8, 4083.9, 854.8, 1138.2, 1179.4, 1366.3, 761.8, 761.8, 704.8, 3630.6, 796.3, 1041.8, 1043.2, 1027.1, 669.2, 757.9, 618.7, 2971.3, 762.7, 898.0, 828.2, 906.0, 659.0, 800.8, 636.6, 3699.2, 778.0, 888.7, 872.2, 832.1, 632.6, 840.4, 664.3, 2943.6, 751.5, 891.8, 851.7, 807.3, 642.8, 1038.1, 621.3, 3341.1, 762.9, 884.7, 980.6, 781.3, 694.7, 1038.2, 621.2, 3393.6, 702.9, 899.6, 876.9, 805.1 ] % descriptions of columns in the time data linsolvers = ... { '3D_Poisson_pardiso', '3D_Poisson_cg', 'Static_Turb_Res_3D_pardiso', 'Static_Turb_Res_3D_gmres', ... 'Rising_Bubble_pardiso_&_umfpack', 'Piston_3D_pardiso', 'Piston_3D_gmres', 'Power_Inductor_gmres' } % descriptions of rows in the time data parameters = { ... 'threads:1; meshrefine:0' 'threads:2; meshrefine:0' 'threads:3; meshrefine:0' 'threads:4; meshrefine:0' 'threads:5; meshrefine:0' 'threads:6; meshrefine:0' 'threads:7; meshrefine:0' 'threads:8; meshrefine:0' 'threads:1; meshrefine:1' 'threads:2; meshrefine:1' 'threads:3; meshrefine:1' 'threads:4; meshrefine:1' 'threads:5; meshrefine:1' 'threads:6; meshrefine:1' 'threads:7; meshrefine:1' 'threads:8; meshrefine:1' 'threads:1; meshrefine:2' 'threads:2; meshrefine:2' 'threads:3; meshrefine:2' 'threads:4; meshrefine:2' 'threads:5; meshrefine:2' 'threads:6; meshrefine:2' 'threads:7; meshrefine:2' 'threads:8; meshrefine:2' } % plot separately for each refinement level: else too many points to see well for r=0:2, figure plot( (realt((1:8)+8*r,:))/60, '-o' ); set( legend(linsolvers), 'Interpreter', 'none' ) hold on plot( ( cput((1:8)+8*r,:))/60, ':x' ); hold off title( [ 'diagsim: real [-o] and cpu [..x] times [minutes] or setup and 2 solns: mesh refinement = ', num2str(r) ] ); xlabel('number of threads (on an 8core system)'); ylabel('time [minutes] for setup and 2 solns'); fprintf('diagsim: mesh refinements: %d; realtime for 8core / realtime for 1core\n', r); fprintf('%1.2f ', realt(8+8*r,:)./realt(1+8*r,:)); fprintf('\n'); end return %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Results: gnu: AMD64-X2 3.00GHz, 2GB RAM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % cputime and realtime in seconds, for whole assembly and % two consecutive solutions cput = [ ... 228.6 136.1 373.1 555.4 351.0 344.0 166.4 746.3 294.7 169.7 456.2 662.6 412.0 498.7 240.9 757.3 252.3 437.9 358.3 2781.0 450.4 312.5 586.0 700.1 298.5 597.2 486.4 3273.0 574.5 466.0 755.8 766.7 ] realt = [ ... 230.0 136.2 361.4 555.3 350.5 343.5 165.9 748.7 167.6 93.9 238.3 339.5 241.7 283.8 133.7 397.4 252.4 530.7 359.1 2783.6 450.3 312.0 585.5 700.3 174.0 496.0 297.1 1736.1 364.0 245.2 384.5 405.4 ] % descriptions of columns in the time data linsolvers = ... { '3D_Poisson_pardiso', '3D_Poisson_cg', 'Static_Turb_Res_3D_pardiso', 'Static_Turb_Res_3D_gmres', ... 'Rising_Bubble_pardiso_&_umfpack', 'Piston_3D_pardiso', 'Piston_3D_gmres', 'Power_Inductor_gmres' } % descriptions of rows in the time data parameters = { ... 'threads: 1; meshrefine: 0' 'threads: 2; meshrefine: 0' 'threads: 1; meshrefine: 1' 'threads: 2; meshrefine: 1' } % choose just the meshrefine=0 cases, as the others seem % to have lost time to swapping figdata = [ realt(1:2,:); cput(1:2,:) ]; figparams = { 'real, 1 thr, mesh0' 'real, 2 thr, mesh0' 'cpu, 1 thr, mesh0' 'cpu, 2 thr, mesh0' } figure bar(figdata) h = legend(linsolvers); set(h,'Interpreter','none') set(gca,'XTick', [1,2,3,4], 'XTickLabel', figparams) % state speedup from using two cpus: speedratios = [ realt(1,:)./realt(2,:); realt(3,:)./realt(4,:); (cput(1,:)./cput(2,:))./(realt(1,:)./realt(2,:)) ]; disp('meshref0:2CPUspeedup, meshref1:2CPUspeedup, meshref0:2CPUefficiency') fprintf(' %3.1f %3.1f %3.1f \n', speedratios.'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Comsol's modified script for running the tests %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function temp = modeltest(refines,repeats) %function temp = modeltest() %refines=0; %repeats=1; cputstartT=cputime; tic; fs = filesep; modelrootdir=[com.femlab.util.FlUtil.getFLRoot.toCharArray' ... fs 'models' fs]; flclear fem myrefines = floor(refines/2); disp(' '); disp('Test: 3-D poisson with PARDISO.') % Geometry g1=block3('1','1','1','base','corner','pos',{'0','0','0'},'axis',{'0','0','1'},'rot','0'); % Analyzed geometry clear s s.objs={g1}; s.name={'BLK1'}; s.tags={'g1'}; fem.draw=struct('s',s); fem.geom=geomcsg(fem); % Initialize mesh fem.mesh=meshinit(fem, ... 'hauto',5); % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); for k=1:myrefines % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); end % (Default values are not included) % Application mode 1 clear appl appl.mode.class = 'FlPDEC'; appl.assignsuffix = '_c'; clear bnd bnd.type = 'dir'; bnd.ind = [1,1,1,1,1,1]; appl.bnd = bnd; fem.appl{1} = appl; fem.frame = {'ref'}; fem.border = 1; clear units; units.basesystem = 'SI'; fem.units = units; % Multiphysics fem=multiphysics(fem); % Extend mesh fem.xmesh=meshextend(fem); % Solve problem for k=1:repeats cputstart=cputime; fem.sol=femstatic(fem, ... 'solcomp',{'u'}, ... 'outcomp',{'u'}, ... 'linsolver','pardiso', ... 'errorchk','off' ... ); cputook=cputime-cputstart; disp( sprintf('loop: cpu: %4.2f s, ', cputook) ); end cputookT=cputime-cputstartT; realtook=toc; disp( sprintf('WHOLE: cpu: %4.2f s, real: %4.2f s', cputookT, realtook) ); cputstartT=cputime; tic; fs = filesep; modelrootdir=[com.femlab.util.FlUtil.getFLRoot.toCharArray' ... fs 'models' fs]; flclear fem disp(' '); disp('Test: 3-D poisson with GMG.') % Geometry g1=block3('1','1','1','base','corner','pos',{'0','0','0'},'axis',{'0','0','1'},'rot','0'); % Analyzed geometry clear s s.objs={g1}; s.name={'BLK1'}; s.tags={'g1'}; fem.draw=struct('s',s); fem.geom=geomcsg(fem); % Initialize mesh fem.mesh=meshinit(fem, ... 'hauto',5); % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); for k=1:refines % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); end % (Default values are not included) % Application mode 1 clear appl appl.mode.class = 'FlPDEC'; appl.assignsuffix = '_c'; clear bnd bnd.type = 'dir'; bnd.ind = [1,1,1,1,1,1]; appl.bnd = bnd; fem.appl{1} = appl; fem.frame = {'ref'}; fem.border = 1; clear units; units.basesystem = 'SI'; fem.units = units; % Multiphysics fem=multiphysics(fem); % Generate GMG mesh cases fem=meshcaseadd(fem,'mgauto','shape','nmcases',2+refines); % Extend mesh fem.xmesh=meshextend(fem); % Solve problem for k=1:repeats cputstart=cputime; fem.sol=femstatic(fem, ... 'solcomp',{'u'}, ... 'outcomp',{'u'}, ... 'linsolver','cg', ... 'prefun','gmg', ... 'prepar',{'presmoothpar',{'sorblocked','on'},'postsmoothpar',{'sorblocked','on'},'csolver','pardiso','csolverpar',{'errorchk','off'}}, ... 'mcase',0:(2+refines)); cputook=cputime-cputstart; disp( sprintf('loop: cpu: %4.2f s, ', cputook) ); end cputookT=cputime-cputstartT; realtook=toc; disp( sprintf('WHOLE: cpu: %4.2f s, real: %4.2f s', cputookT, realtook) ); cputstartT=cputime; tic; fs = filesep; modelrootdir=[com.femlab.util.FlUtil.getFLRoot.toCharArray' ... fs 'models' fs]; flclear fem myrefines = floor(refines/2); disp(' '); disp('Test: Static Turbulence residence 3D with PARDISO.') model = [modelrootdir ... 'Chemical_Engineering_Module' fs 'Mixers_and_Stirred_Vessels' fs 'turbulent_residence_time_3d.mph']; flload(model); % Change analysis fem.fem{1}.appl{1}.prop.analysis = 'static'; for k=1:myrefines % Refine mesh fem.fem{1}.mesh=meshrefine(fem.fem{1},'rmethod','longest'); end fem=meshcasedel(fem,[1]); % Multiphysics fem=multiphysics(fem); % Extend mesh fem.xmesh=meshextend(fem, ... 'geoms',[1]); % High tolerance in nonlinstep to save time for k=1:repeats cputstart=cputime; fem.sol=femstatic(fem, ... 'method','eliminate', ... 'nullfun','auto', ... 'blocksize',1000, ... 'complexfun','off', ... 'matherr','on', ... 'solfile','off', ... 'conjugate','off', ... 'symmetric','auto', ... 'solcomp',{'w','v','u','p','logd','logk'}, ... 'outcomp',{'w','v','u','c','p','logd','logk'}, ... 'rowscale','on', ... 'maxsegiter',10, ... 'nonlin','auto', ... 'seggrps',{{'segcomp',{'w','v','u','p'},'ntol',1e1,'linsolver','pardiso'},{'segcomp',{'logd','logk'},'ntol',1e1,'linsolver','pardiso'}}, ... 'segorder',[1 2], ... 'segdamp',[0.5 0.5], ... 'subiter',[1 3], ... 'llimitdof',{}, ... 'llimitval',[], ... 'uscale','none' ... ); cputook=cputime-cputstart; disp( sprintf('loop: cpu: %4.2f s, ', cputook) ); end cputookT=cputime-cputstartT; realtook=toc; disp( sprintf('WHOLE: cpu: %4.2f s, real: %4.2f s', cputookT, realtook) ); cputstartT=cputime; tic; fs = filesep; modelrootdir=[com.femlab.util.FlUtil.getFLRoot.toCharArray' ... fs 'models' fs]; flclear fem disp(' '); disp('Test: Static Turbulence residence 3D.') model = [modelrootdir ... 'Chemical_Engineering_Module' fs 'Mixers_and_Stirred_Vessels' fs 'turbulent_residence_time_3d.mph']; flload(model); % Change analysis fem.fem{1}.appl{1}.prop.analysis = 'static'; for k=1:refines % Refine mesh fem.fem{1}.mesh=meshrefine(fem.fem{1},'rmethod','longest'); end fem=meshcasedel(fem,[1]); % Generate GMG mesh cases fem=meshcaseadd(fem,'mgauto','anyshape','nmcases',1+refines); % Multiphysics fem=multiphysics(fem); % Extend mesh fem.xmesh=meshextend(fem, ... 'geoms',[1]); % High tolerance in nonlinstep to save time for k=1:repeats cputstart=cputime; fem.sol=femstatic(fem, ... 'method','eliminate', ... 'nullfun','auto', ... 'blocksize',1000, ... 'complexfun','off', ... 'matherr','on', ... 'solfile','off', ... 'conjugate','off', ... 'symmetric','auto', ... 'solcomp',{'w','v','u','p','logd','logk'}, ... 'outcomp',{'w','v','u','c','p','logd','logk'}, ... 'rowscale','on', ... 'maxsegiter',10, ... 'nonlin','auto', ... 'seggrps',{{'segcomp',{'w','v','u','p'},'ntol',1e1,'linsolver','gmres','itol',1.0E-1,'rhob',20.0,'maxlinit',10000,'itrestart',100,'prefuntype','right','prefun','gmg','prepar',{'iter',2,'mgcycle','v','mgassem',[1 1],'presmooth','vanka','presmoothpar',{'iter',1,'vankablocked','on','vankasolv','direct','vankarelax',0.8,'seconditer',1,'relax',1.0,'vankavars',{'p'}},'postsmooth','vanka','postsmoothpar',{'iter',1,'vankablocked','on','vankasolv','direct','vankarelax',0.8,'seconditer',1,'relax',1.0,'vankavars',{'p'}},'csolver','pardiso','csolverpar',{'pardreorder','nd','pardrreorder','on','pivotperturb','1.0E-8','itol',0.1,'rhob',1,'errorchk','off'}}},{'segcomp',{'logd','logk'},'ntol',1e1,'linsolver','gmres','itol',1.0E-1,'rhob',20.0,'maxlinit',10000,'itrestart',100,'prefuntype','right','prefun','gmg','prepar',{'iter',2,'mgcycle','v','mgassem',[1 1],'presmooth','ssor','presmoothpar',{'iter',3,'relax',0.8,'sorblocked','on'},'postsmooth','ssor','postsmoothpar',{'iter',3,'relax',0.8,'sorblocked','on'},'csolver','pardiso','csolverpar',{'pardreorder','nd','pardrreorder','on','pivotperturb','1.0E-8','itol',0.1,'rhob',1,'errorchk','off'}}}}, ... 'segorder',[1 2], ... 'segdamp',[0.5 0.5], ... 'subiter',[1 3], ... 'llimitdof',{}, ... 'llimitval',[], ... 'uscale','none', ... 'mcase',0:(1+refines)); cputook=cputime-cputstart; disp( sprintf('loop: cpu: %4.2f s, ', cputook) ); end cputookT=cputime-cputstartT; realtook=toc; disp( sprintf('WHOLE: cpu: %4.2f s, real: %4.2f s', cputookT, realtook) ); cputstartT=cputime; tic; fs = filesep; modelrootdir=[com.femlab.util.FlUtil.getFLRoot.toCharArray' ... fs 'models' fs]; flclear fem disp(' '); disp('Test: Rising bubble.') model = [modelrootdir ... 'Chemical_Engineering_Module' fs 'Multiphase_Flow' fs 'rising_bubble.mph']; flload(model); for k=1:refines % Refine mesh fem.fem{1}.mesh=meshrefine(fem.fem{1}, ... 'rmethod','longest'); end % Multiphysics fem=multiphysics(fem); % Extend mesh fem.xmesh=meshextend(fem); % Only timestepped to 0.02 to save time disp(' '); disp('Test: Rising bubble with PARDISO.') for k=1:repeats cputstart=cputime; fem.sol=femtime(fem, ... 'blocksize',1000, ... 'solcomp',{'v','u','p','phi'}, ... 'outcomp',{'v','u','p','phi'}, ... 'tlist',[0:1e-2:0.02], ... 'atol',{'0.010'}, ... 'rtol',0.1, ... 'estrat',1, ... 'tout','tlist', ... 'linsolver','pardiso', ... 'errorchk','off', ... 'uscale','none'); cputook=cputime-cputstart; disp( sprintf('loop: cpu: %4.2f s, ', cputook) ); end disp(' '); disp('Test: Rising bubble with UMFPACK.') for k=1:repeats cputstart=cputime; fem.sol=femtime(fem, ... 'blocksize',1000, ... 'solcomp',{'v','u','p','phi'}, ... 'outcomp',{'v','u','p','phi'}, ... 'tlist',[0:1e-2:0.02], ... 'atol',{'0.010'}, ... 'rtol',0.1, ... 'estrat',1, ... 'tout','tlist', ... 'linsolver','umfpack', ... 'uscale','none'); cputook=cputime-cputstart; disp( sprintf('loop: cpu: %4.2f s, ', cputook) ); end; cputookT=cputime-cputstartT; realtook=toc; disp( sprintf('WHOLE: cpu: %4.2f s, real: %4.2f s', cputookT, realtook) ); cputstartT=cputime; tic; fs = filesep; modelrootdir=[com.femlab.util.FlUtil.getFLRoot.toCharArray' ... fs 'models' fs]; flclear fem myrefines = floor(refines/2); disp(' '); disp('Test: Piston 3D with PARDISO.') model = [modelrootdir ... 'Structural_Mechanics_Module' fs 'Automotive_Applications' fs 'piston_3d.mph']; flload(model); % Refine mesh for k=1:myrefines % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); end fem=meshcasedel(fem); % Multiphysics fem=multiphysics(fem); % Extend mesh fem.xmesh=meshextend(fem); for k=1:repeats cputstart=cputime; fem.sol=femstatic(fem, ... 'solcomp',{'w','v','T','u'}, ... 'outcomp',{'w','v','T','u'}, ... 'hnlin','on', ... 'linsolver','pardiso' ... ); cputook=cputime-cputstart; disp( sprintf('loop: cpu: %4.2f s, ', cputook) ); end; cputookT=cputime-cputstartT; realtook=toc; disp( sprintf('WHOLE: cpu: %4.2f s, real: %4.2f s', cputookT, realtook) ); cputstartT=cputime; tic; fs = filesep; modelrootdir=[com.femlab.util.FlUtil.getFLRoot.toCharArray' ... fs 'models' fs]; flclear fem disp(' '); disp('Test: Piston 3D.') model = [modelrootdir ... 'Structural_Mechanics_Module' fs 'Automotive_Applications' fs 'piston_3d.mph']; flload(model); % Refine mesh for k=1:refines % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); end fem=meshcasedel(fem); % Generate GMG mesh cases fem=meshcaseadd(fem,'mgauto','anyshape','nmcases',1+refines); % Multiphysics fem=multiphysics(fem); % Extend mesh fem.xmesh=meshextend(fem); for k=1:repeats cputstart=cputime; fem.sol=femstatic(fem, ... 'solcomp',{'w','v','T','u'}, ... 'outcomp',{'w','v','T','u'}, ... 'hnlin','on', ... 'linsolver','gmres', ... 'prefun','gmg', ... 'prepar',{'presmoothpar',{'sorblocked','on'},'postsmoothpar',{'sorblocked','on'},'csolver','pardiso','csolverpar',{'errorchk','off'}}, ... 'mcase',0:(1+refines)); cputook=cputime-cputstart; disp( sprintf('loop: cpu: %4.2f s, ', cputook) ); end; cputookT=cputime-cputstartT; realtook=toc; disp( sprintf('WHOLE: cpu: %4.2f s, real: %4.2f s', cputookT, realtook) ); cputstartT=cputime; tic; fs = filesep; modelrootdir=[com.femlab.util.FlUtil.getFLRoot.toCharArray' ... fs 'models' fs]; flclear fem myrefines = floor(refines/2); disp(' '); disp('Test: Power Inductor.') model = [modelrootdir ... 'ACDC_Module' fs 'Electrical_Components' fs 'power_inductor.mph']; flload(model); % Refine mesh for k=1:myrefines % Refine mesh fem.mesh=meshrefine(fem, ... 'rmethod','longest'); end fem=meshcasedel(fem); % Generate GMG mesh cases fem=meshcaseadd(fem,'mgauto','anyshape','nmcases',1); % Multiphysics fem=multiphysics(fem); % Extend mesh fem.xmesh=meshextend(fem); % itol = 1.0e-2 to save time for k=1:repeats cputstart=cputime; fem.sol=femstatic(fem, ... 'solcomp',{'V','tAxAyAz20','tAxAyAz21','psi','tAxAyAz10'}, ... 'outcomp',{'V','tAxAyAz20','tAxAyAz21','psi','tAxAyAz10'}, ... 'linsolver','gmres', ... 'itol',1.0E-2, ... 'rhob',5, ... 'prefuntype','right', ... 'prefun','gmg', ... 'prepar',{'mgcycle','f','presmooth','vanka','presmoothpar',{'vankablocked','on','vankasolv','direct','vankarelax',0.9,'seconditer',2,'vankavars',{'psi','V'}},'postsmooth','vanka','postsmoothpar',{'vankablocked','on','vankasolv','direct','vankarelax',0.9,'seconditer',2,'vankavars',{'psi','V'}},'csolver','pardiso','csolverpar',{'errorchk','off'}}, ... 'mcase',[0 1]); cputook=cputime-cputstart; disp( sprintf('loop: cpu: %4.2f s, ', cputook) ); end; cputookT=cputime-cputstartT; realtook=toc; disp( sprintf('WHOLE: cpu: %4.2f s, real: %4.2f s', cputookT, realtook) ); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%