function up=pchybsw(au) % PCHYBSW Hybrid II Schwarz as a precondtioner on an m x m mesh % % function up=pchybsw(au) % global ph pv overlap ac zm [m1,m2]=size(au); m=sqrt(m1); au2=zeros(m,m); au2(:)=au; %ph=2; pv=2; overlap=max(3,floor(m/5)); up2=addswp(m,au2,overlap,ph,pv,ac,zm); up=up2(:); % % Divide the domain into ph * pv % subdomains, ph splits in horozontal and pv splits in vertical % function u2d=addswp(m,rhs2d,overlap,ph,pv,ac,zm) [l,r]=partition(m,2,overlap); [lv,rv]=partition(m,pv,overlap); [lh,rh]=partition(m,ph,overlap); h=1/(m+1); u2d=zeros(m,m); caph=1/pv; rc=zeros(ph,pv); % % This is the one-level additive part. % mr=rv(1); lr=rv(1)-lv(1)+1; for ih=1:ph for iv=1:pv lbh=lh(ih); ubh=rh(ih); lbv=lv(iv); ubv=rv(iv); vd=ubv-lbv+1; hd=ubh-lbh+1; rsub=rhs2d(lbh:ubh,lbv:ubv); ux=subdomain(rsub,hd,vd,h); u2d(lbh:ubh,lbv:ubv)=u2d(lbh:ubh,lbv:ubv)+ux; end end rhsc=hybrid(m,rhs2d,u2d); u2d=u2d+cmsolv(m,ph/2,rhsc); % function rhsc=hybrid(m,rhs2d,u2d); w=zeros(m*m,1); r1d=w; rhsc=zeros(m,m); r1d=rhs2d(:); w=u2d(:); w=r1d-lapmf(w); rhsc(:)=w;