0001 function [uold,lamold,tauold,inegp,resp,dsp,f]=pmnewtonloop(p,p0)
0002
0003 m=p.mst; lamd=p.tau(p.neq*p.np+1);
0004 u0=p.u; lam0=p.lam; ds0=p.ds; tau0=p.tau;
0005 tu=tau0(1:p.neq*p.np); tl=tau0(p.neq*p.np+1);
0006 uold=u0; lamold=lam0; tauold=tau0;
0007 iterp=zeros(1,m); resp=zeros(1,m);
0008 f=[];
0009 inegp=zeros(1,m);
0010 dsp=zeros(1,m); for i=1:m; dsp(i)=i*ds0; end
0011 p.imax=p.pmimax;
0012 parfor i=1:m
0013 ta=1; u11p=u0+dsp(i)*tu; lam1p=lam0+dsp(i)*tl;
0014
0015 res0=100;
0016 while ta==1
0017 if(p.parasw==0 || (p.parasw==1 && abs(lamd)>p.lamdtol))
0018 [u11p,resp(i),iter1p,Gup,Glamp]=nlooppde(p0,u11p,lam1p);meth='nat';
0019 else
0020
0021 [u11p,lam1p,resp(i),iter1p,Gup,Glamp]=nloopext(p,u11p,lam1p,dsp(i)); meth='arc';
0022 end
0023 iterp(i)=iter1p;
0024 if resp(i)>p.tol
0025 if resp(i)<p.resfac*res0; res0=resp(i);
0026 else ta=0; end
0027 end
0028 if resp(i)<p.tol; ta=0;
0029 if(p.spcalcsw>0); inegp(i)=spcalc(Gup,p); end
0030 f(i).Gu=Gup; f(i).Glam=Glamp; f(i).u=u11p; f(i).lam=lam1p;
0031 f(i).iter=iterp(i); f(i).meth=meth;
0032 if(p.errchecksw>0);
0033 auxp=p; auxp.u=u11p; err=errcheck(auxp);f(i).err=err;
0034 end
0035 end
0036 end
0037 end