function pdemodel(a)
if nargin==0,
  a=0.5;
end
pdeinit;
pde_fig=gcf;
ax=gca;
pdetool('appl_cb',1);
setuprop(pde_fig,'currparam',str2mat('1.0','0.0','0','1.0'));
pdetool('snapon');
set(ax,'AspectRatio',[1.5 1]);
set(ax,'XLim',[-1.5 1.5]);
set(ax,'YLim',[-1 1]);
set(ax,'XTickMode','auto');
set(ax,'YTickMode','auto');

% Geometry description:
pdepoly([ -1,...
 1,...
 1,...
 0,...
 0,...
 -1,...
],...
[ -1,...
 -1,...
 1,...
 1,...
 0,...
 0,...
],...
 'P1');
pdecirc(-a,a,a,'C1');
pderect([-a 0 a 0],'SQ1');
set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String','P1+SQ1-C1')

% Boundary conditions:
pdetool('changemode',0)
pdetool('removeb',[5 8 ]);
pdesetbd(7,...
'dir',...
1,...
'1',...
'0')
pdesetbd(6,...
'dir',...
1,...
'1',...
'0')
pdesetbd(5,...
'dir',...
1,...
'1',...
'0')
pdesetbd(4,...
'dir',...
1,...
'1',...
'0')
pdesetbd(3,...
'dir',...
1,...
'1',...
'0')
pdesetbd(2,...
'dir',...
1,...
'1',...
'0')
pdesetbd(1,...
'dir',...
1,...
'1',...
'0')

% Mesh generation:
setuprop(pde_fig,'Hgrad',1.3);
setuprop(pde_fig,'refinemethod','regular');
pdetool('initmesh')
pdetool('refine')
pdetool('jiggle')

% PDE coefficients:
pdeseteq(4,...
'1.0',...
'0.0',...
'0',...
'1.0',...
'linspace(0,5,101)',...
'atan(cos(pi/2*x))',...
'3*sin(pi*x).*exp(sin(pi/2*y))',...
'[0 100]')
setuprop(pde_fig,'currparam',...
['1.0';...
'0.0';...
'0  ';...
'1.0'])

% Solve parameters:
setuprop(pde_fig,'solveparam',...
str2mat('0','1608','10','pdeadworst',...
'0.5','longest','0','1E-4','','fixed','Inf'))

% Plotflags:
setuprop(pde_fig,'plotflags',[1 1 1 1 1 1 1 1 0 0 0 1 0 1 0 0 0 1]);
setuprop(pde_fig,'colstring','');
setuprop(pde_fig,'arrowstring','');
setuprop(pde_fig,'deformstring','');
setuprop(pde_fig,'heightstring','');

% Solve PDE:
pdetool('solve')
