📄 mglab.m
字号:
%MGLab V0.00beta Interactive Multigrid Package
% James Bordner and Faisal Saied
% Department of Computer Science
% University of Illinois at Urbana-Champaign
% 10 April 1995
% Modified for Matlab Version 6 Compatability
% Ryan McKenzie
% University of Kentucky Center for Computational Sciences
% April 2004
%
% Flop count removed as a stopping criteria and as a plotting option.
include_flags
include_globals
include_figs
demo_globals
% Initialize parameter defaults
set_defaults;
% == MAIN MENU =================================================
bgc = [0.9 0.9 1.0];
main_fig = figure('Position', main_position,...
'Name', 'MGLab',...
'NumberTitle', 'off', ...
'Color','black');
% == MGLab Menu Item ===========================================
f_mglab=menu_header(main_fig,'MGLab','on','on','w');
menu_item(f_mglab,'Run', 'off','on',bgc,'[sol1,resids1,its1]=run;');
menu_item(f_mglab,'Show Params','off','on',bgc,'show_params;');
menu_item(f_mglab,'Version Info','off','on',bgc,'version_info;');
menu_item(f_mglab,'Reset','off','on',bgc,'set_defaults;');
menu_item(f_mglab,'Restart','off','on',bgc,'close(main_fig); close; MGLab');
menu_item(f_mglab,'Quit','off','on',bgc,'close(main_fig); close');
% == Problem Menu Item ============================================
f_problem=menu_header(main_fig,'Problem','on','on','w');
menu_item(f_problem,'Poisson','on','on',bgc,...
'problem_flag = POISSON;generate_matrix=1;');
f_problem_1 = menu_item(f_problem,'Helmholtz', 'off','on',bgc,...
'problem_flag = HELMHOLTZ;generate_matrix=1;prob_args(1) = -10;');
f_problem_11=menu_header(f_problem_1,'k = ','on','on','w');
menu_item(f_problem_11,'-10','off','on',bgc,...
'prob_args(1)=-10;');
menu_item(f_problem_11,'-5','off','on',bgc,...
'prob_args(1)=-5;');
menu_item(f_problem_11,'-1','off','on',bgc,...
'prob_args(1)=-1;');
menu_item(f_problem_11,'0','off','on',bgc,...
'prob_args(1)=0;');
menu_item(f_problem_11,'1','off','on',bgc,...
'prob_args(1)=1;');
menu_item(f_problem_11,'5','off','on',bgc,...
'prob_args(1)=5;');
menu_item(f_problem_11,'10','off','on',bgc,...
'prob_args(1)=10;');
menu_item(f_problem_11,'10+ i','off','on',bgc,...
'prob_args(1)=10+sqrt(-1);');
f_problem_2 = menu_item(f_problem,'Convection-Diffusion', 'off','on',bgc,...
'problem_flag=CONVECT_DIFFUSE;generate_matrix=1;');
f_problem_21=menu_header(f_problem_2,'Lambda = ','on','on','w');
menu_item(f_problem_21,'0','off','on',bgc,...
'prob_args(1)=0;');
menu_item(f_problem_21,'10','off','on',bgc,...
'prob_args(1)=10;');
menu_item(f_problem_21,'100','off','on',bgc,...
'prob_args(1)=100;');
menu_item(f_problem_21,'1000','off','on',bgc,...
'prob_args(1)=1000;');
f_problem_22=menu_header(f_problem_2,'Sigma = ','on','on','w');
menu_item(f_problem_22,'0','on','on',bgc,...
'prob_args(2)=0;');
menu_item(f_problem_22,'5','off','on',bgc,...
'prob_args(2)=5;');
menu_item(f_problem_22,'10','off','on',bgc,...
'prob_args(2)=10;');
menu_item(f_problem_22,'20','off','on',bgc,...
'prob_args(2)=20;');
menu_item(f_problem_22,'50','off','on',bgc,...
'prob_args(2)=50;');
menu_item(f_problem_22,'100','off','on',bgc,...
'prob_args(2)=100;');
menu_item(f_problem_22,'-50','off','on',bgc,...
'prob_args(2)=-50;');
menu_item(f_problem_22,'-100','off','on',bgc,...
'prob_args(2)=-100;');
f_problem_3=menu_item(f_problem,'Cut Square', 'off','on',bgc,...
'problem_flag = CUT_SQUARE;generate_matrix=1;prob_args(1) = 10;');
f_problem_31=menu_header(f_problem_3,'Alpha = ','on','on','w');
menu_item(f_problem_31,'0.001','off','on',bgc,...
'prob_args(1)=0.001;');
menu_item(f_problem_31,'0.01','off','on',bgc,...
'prob_args(1)=0.01;');
menu_item(f_problem_31,'0.1','off','on',bgc,...
'prob_args(1)=0.1;');
menu_item(f_problem_31,'1','off','on',bgc,...
'prob_args(1)=1;');
menu_item(f_problem_31,'10','off','on',bgc,...
'prob_args(1)=10;');
menu_item(f_problem_31,'100','off','on',bgc,...
'prob_args(1)=100;');
menu_item(f_problem_31,'1000','off','on',bgc,...
'prob_args(1)=1000;');
menu_item(f_problem,'Poisson-Boltzmann', 'off','off',bgc,...
'problem_flag=POISSON_BOLTZMAN;generate_matrix=1;');
f_problem_4=menu_header(f_problem,'Problem Size','off','on','w');
menu_item(f_problem_4,' 7 ','off','on',bgc,...
[['nx1=7;ny1=7;generate_matrix=1;generate_rhs=1;']';...
['coarse_level=min([coarse_level max_level(nx1)]);']']');
menu_item(f_problem_4,' 15 ','off','on',bgc,...
[['nx1=15;ny1=15;generate_matrix=1;generate_rhs=1;']';...
['coarse_level=min([coarse_level max_level(nx1)]);']']');
menu_item(f_problem_4,' 31 ','off','on',bgc,...
[['nx1=31;ny1=31;generate_matrix=1;generate_rhs=1;']';...
['coarse_level=min([coarse_level max_level(nx1)]);']']');
menu_item(f_problem_4,' 63 ','off','on',bgc,...
[['nx1=63;ny1=63;generate_matrix=1;generate_rhs=1;']';...
['coarse_level=min([coarse_level max_level(nx1)]);']']');
menu_item(f_problem_4,'127 ','off','on',bgc,...
[['nx1=127;ny1=127;generate_matrix=1;generate_rhs=1;']';...
['coarse_level=min([coarse_level max_level(nx1)]);']']');
menu_item(f_problem_4,'255 ','off','on',bgc,...
[['nx1=255;ny1=255;generate_matrix=1;generate_rhs=1;']';...
['coarse_level=min([coarse_level max_level(nx1)]);']']');
% == Solver Menu Item ==============================================
f_solver=menu_header(main_fig,'Solver','on','on','w');
menu_item(f_solver,'V-Cycle','off','on',bgc,...
'solver_flag = VMG_SOLVE;');
menu_item(f_solver,'PCG','off','on',bgc,...
'solver_flag = PCG_SOLVE;');
menu_item(f_solver,'BiCG-STAB','off','on',bgc,...
'solver_flag = BICG_STAB_SOLVE;');
menu_item(f_solver,'CGS','off','on',bgc,...
'solver_flag = CGS_SOLVE;');
menu_item(f_solver,'TFQMR','off','off',bgc,...
'solver_flag = TFQMR_SOLVE;');
f_solver_1=menu_item(f_solver,'GMRES(k)','off','on',bgc,...
'solver_flag = GMRES_SOLVE;');
f_solver_11=menu_header(f_solver_1,'k = ','on','on','w');
menu_item(f_solver_11,'1','off','on',bgc,'restart=1;');
menu_item(f_solver_11,'5','off','on',bgc,'restart=5;');
menu_item(f_solver_11,'10','off','on',bgc,'restart=10;');
menu_item(f_solver_11,'15','off','on',bgc,'restart=15;');
menu_item(f_solver_11,'20','off','on',bgc,'restart=20;');
f_solver_2 = menu_item(f_solver,'SOR','off','on',bgc,...
'solver_flag = SOR_SOLVE;');
f_solver_21=menu_header(f_solver_2,'omega = ','on','on','w');
menu_item(f_solver_21,'1','off','on',bgc,'SOR_omega=1;');
menu_item(f_solver_21,'1.1','off','on',bgc,'SOR_omega=1.1;');
menu_item(f_solver_21,'1.2','off','on',bgc,'SOR_omega=1.2;');
menu_item(f_solver_21,'1.3','off','on',bgc,'SOR_omega=1.3;');
menu_item(f_solver_21,'1.4','off','on',bgc,'SOR_omega=1.4;');
menu_item(f_solver_21,'1.5','off','on',bgc,'SOR_omega=1.5;');
menu_item(f_solver_21,'1.6','off','on',bgc,'SOR_omega=1.6;');
menu_item(f_solver_21,'1.7','off','on',bgc,'SOR_omega=1.7;');
menu_item(f_solver_21,'1.8','off','on',bgc,'SOR_omega=1.8;');
menu_item(f_solver_21,'1.9','off','on',bgc,'SOR_omega=1.9;');
menu_item(f_solver,'Full-Multigrid','on','on',bgc,...
'solver_flag = FMG_SOLVE;');
f_solver_precon=menu_header(f_solver,'Preconditioner','on','on','w');
menu_item(f_solver_precon,'V-Cycle','off','on',bgc,...
'precon_flag = MG_CYCLE;');
menu_item(f_solver_precon,'Jacobi','off','on',bgc,...
'precon_flag = JACOBI;');
menu_item(f_solver_precon,'Block-Jacobi','off','off',bgc,...
'precon_flag = BLOCK_JACOBI;');
menu_item(f_solver_precon,'Gauss-Seidel','off','on',bgc,...
'precon_flag = GAUSS_SEIDEL;');
menu_item(f_solver_precon,'ILU','off','off',bgc,...
'precon_flag = ILU');
menu_item(f_solver_precon,'SSOR','off','off',bgc,...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -