19 REAL P (LX2,LY2,LZ2,LELV)
20 REAL H1 (LX1,LY1,LZ1,LELV)
21 REAL H2 (LX1,LY1,LZ1,LELV)
22 REAL H2INV(LX1,LY1,LZ1,LELV)
28 parameter(ltot2=lx2*ly2*lz2*lelv)
29 COMMON /orthov/ rhs(ltot2,mxprev)
30 COMMON /orthox/ pbar(ltot2),pnew(ltot2)
31 COMMON /orthos/ alpha(mxprev), work(mxprev), alphan, dtlast
32 COMMON /orthoi/ nprev,mprev
45 mprev=min(mprev,mxprev)
50 ntot2 = lx2*ly2*lz2*nelv
51 alpha1 =
glsc3(p,p,bm2inv,ntot2)
52 if (alpha1.gt.0) alpha1 = sqrt(alpha1/volvm2)
56 CALL updrhse(p,h1,h2,h2inv,ierr)
57 if (ierr.eq.1) nprev=0
62 alpha(i) =
vlsc2(p,rhs(1,i),ntot2)
65 IF (nprev.GT.0)
CALL gop(alpha,work,
'+ ',nprev)
67 CALL rzero(pbar,ntot2)
70 CALL add2s2(pbar,rhs(1,i),alphas,ntot2)
75 CALL cdabdtp(pnew,pbar,h1,h2,h2inv,intetype)
76 CALL sub2 (p,pnew,ntot2)
79 alpha2 =
glsc3(p,p,bm2inv,ntot2)
80 if (alpha2.gt.0) alpha2 = sqrt(alpha2/volvm2)
85 11
FORMAT(2i5,
' alpha:',1p10e12.4)
86 12
FORMAT(i6,i4,1p3e12.4,
' alph12')
117 parameter(ltot2=lx2*ly2*lz2*lelv)
118 COMMON /orthov/ rhs(ltot2,mxprev)
119 COMMON /orthox/ pbar(ltot2),pnew(ltot2)
120 COMMON /orthos/ alpha(mxprev), work(mxprev), alphan, dtlast
121 COMMON /orthoi/ nprev,mprev
124 REAL P (LX2,LY2,LZ2,LELV)
125 REAL H1 (LX1,LY1,LZ1,LELV)
126 REAL H2 (LX1,LY1,LZ1,LELV)
127 REAL H2INV(LX1,LY1,LZ1,LELV)
129 ntot2=lx2*ly2*lz2*nelv
133 CALL copy (pnew,p,ntot2)
137 CALL add2(p,pbar,ntot2)
141 CALL updtset(p,h1,h2,h2inv,ierr)
142 if (ierr.eq.1) nprev = 0
163 parameter(ltot2=lx2*ly2*lz2*lelv)
164 COMMON /orthov/ rhs(ltot2,mxprev)
165 COMMON /orthox/ pbar(ltot2),pnew(ltot2)
166 COMMON /orthos/ alpha(mxprev), work(mxprev), alphan, dtlast
167 COMMON /orthoi/ nprev,mprev
171 REAL P (LX2,LY2,LZ2,LELV)
172 REAL H1 (LX1,LY1,LZ1,LELV)
173 REAL H2 (LX1,LY1,LZ1,LELV)
174 REAL H2INV(LX1,LY1,LZ1,LELV)
176 ntot2=lx2*ly2*lz2*nelv
178 IF (nprev.EQ.mprev)
THEN
179 CALL copy(pnew,p,ntot2)
186 CALL copy (rhs(1,nprev),pnew,ntot2)
190 write(6,*) istep,nprev,
' call econj2'
191 call econj (nprev,h1,h2,h2inv,ierr)
195 CALL copy(pnew,p,ntot2)
200 subroutine econj(kprev,h1,h2,h2inv,ierr)
211 REAL H1 (LX1,LY1,LZ1,LELV)
212 REAL H2 (LX1,LY1,LZ1,LELV)
213 REAL H2INV(LX1,LY1,LZ1,LELV)
215 parameter(ltot2=lx2*ly2*lz2*lelv)
216 COMMON /orthov/ rhs(ltot2,mxprev)
217 COMMON /orthox/ pbar(ltot2),pnew(ltot2),pbrr(ltot2)
218 COMMON /orthos/ alpha(mxprev), work(mxprev), alphan, dtlast
219 COMMON /orthoi/ nprev,mprev
225 ntot2 = lx2*ly2*lz2*nelv
231 if (abs(param(105)).eq.2) npass=2
234 CALL cdabdtp(pbrr,rhs(1,kprev),h1,h2,h2inv,intetype)
237 alphad =
glsc2(rhs(1,kprev),pbrr,ntot2)
242 alpha(i) =
vlsc2(pbrr,rhs(1,i),ntot2)
244 IF (kprev1.GT.0)
CALL gop(alpha,work,
'+ ',kprev1)
248 CALL add2s2(rhs(1,kprev),rhs(1,i),alpham,ntot2)
249 alphad = alphad - alpha(i)**2
255 if (alphad.le.0.0)
then
257 $
write(6,*) .le.
'ERROR: alphad 0 in econj',alphad,kprev
261 alphad = 1.0/sqrt(alphad)
263 CALL cmult(rhs(1,kprev),alphan,ntot2)
283 COMMON /ctolpr/ divex
284 COMMON /cprint/ ifprint
287 COMMON /scruz/ divv(lx2,ly2,lz2,lelv)
288 $ , bdivv(lx2,ly2,lz2,lelv)
291 IF (param(102).eq.0.and.(tolpdf.NE.0. .OR. istep.LE.5))
return
293 if (param(102).ne.0.0) five=param(102)
295 ntot2 = lx2*ly2*lz2*nelv
296 if (ifield.eq.1)
then
297 CALL opdiv (bdivv,vx,vy,vz)
299 CALL opdiv (bdivv,bx,by,bz)
301 CALL col3 (divv,bdivv,bm2inv,ntot2)
302 dnorm = sqrt(
glsc2(divv,bdivv,ntot2)/volvm2)
304 if (nio.eq.0)
WRITE (6,*) istep,
' DNORM, DIVEX',dnorm,divex
317 IF (istep.gt.5.and.tolpdf.eq.0.0.and.
318 $ dnorm.GT.(1.2*divex).AND.divex.GT.0.)
319 $ tolpdf = five*dnorm
327 dimension x(1),y(1),b(1)
334 if (isclld.eq.0)
then
338 rname(myrout) =
'VLSC3 '
341 dct(myrout) = dct(myrout) + dfloat(isbcnt)
342 ncall(myrout) = ncall(myrout) + 1
343 dcount = dcount + dfloat(isbcnt)
366 parameter(ltot2=lx2*ly2*lz2*lelv)
367 COMMON /orthov/ rhs(ltot2,mxprev)
368 COMMON /orthox/ pbar(ltot2),pnew(ltot2)
369 COMMON /orthos/ alpha(mxprev), work(mxprev), alphan, dtlast
370 COMMON /orthoi/ nprev,mprev
371 COMMON /orthol/ ifnewe
376 REAL P (LX2,LY2,LZ2,LELV)
377 REAL H1 (LX1,LY1,LZ1,LELV)
378 REAL H2 (LX1,LY1,LZ1,LELV)
379 REAL H2INV(LX1,LY1,LZ1,LELV)
385 ntot2=lx2*ly2*lz2*nelv
391 if (icalld.eq.0)
then
401 if (dtlast.ne.dt)
then
418 DO 100 iprev=1,nprevt
420 call econj (iprev,h1,h2,h2inv,ierr)
422 if (nio.eq.0)
write(6,*) istep,ierr,
' econj error'
433 subroutine hconj(approx,k,h1,h2,vml,vmk,ws,name4,ierr)
444 parameter(lt=lx1*ly1*lz1*lelt)
445 real approx(lt,0:1),h1(1),h2(1),vml(1),vmk(1),ws(1)
449 ntot=lx1*ly1*lz1*nelfld(ifield)
451 call axhelm (approx(1,0),approx(1,k),h1,h2,1,1)
452 call col2 (approx(1,0),vmk,ntot)
456 alpha =
glsc2(approx(1,0),approx(1,k),ntot)
463 ws(i) =
vlsc2(approx(1,0),approx(1,i),ntot)
465 if (km1.gt.0)
call gop(ws,ws(k),
'+ ',km1)
469 call add2s2(approx(1,k),approx(1,i),alpham,ntot)
470 alpha = alpha - ws(i)**2
476 if (wdsize.eq.8) eps = 1.e-15
481 if (nio.eq.0)
write(6,12) istep,name4,k,alpha,alph1
482 12
format(i6,1x,a4,
' alpha b4 sqrt:',i4,1p2e12.4)
483 elseif (ratio.le.eps)
then
485 if (nio.eq.0)
write(6,12) istep,name4,k,alpha,alph1
488 alpha = 1.0/sqrt(alpha)
489 call cmult(approx(1,k),alpha,ntot)
493 call axhelm (approx(1,0),approx(1,k),h1,h2,1,1)
494 call col2 (approx(1,0),vmk,ntot)
498 alpha =
glsc2(approx(1,0),approx(1,k),ntot)
499 if (nio.eq.0)
write(6,12) istep,name4,k,alpha,alph1
502 if (nio.eq.0)
write(6,12) istep,name4,k,alpha,alph1
505 alpha = 1.0/sqrt(alpha)
506 call cmult(approx(1,k),alpha,ntot)
513 subroutine hmhzpf(name,u,r,h1,h2,mask,mult,imesh,tli,maxit,isd,bi)
521 REAL U (LX1,LY1,LZ1,1)
522 REAL R (LX1,LY1,LZ1,1)
523 REAL H1 (LX1,LY1,LZ1,1)
524 REAL H2 (LX1,LY1,LZ1,1)
525 REAL MASK (LX1,LY1,LZ1,1)
526 REAL MULT (LX1,LY1,LZ1,1)
527 REAL bi (LX1,LY1,LZ1,1)
528 COMMON /ctmp0/ w1(lx1,ly1,lz1,lelt)
529 $ , w2(lx1,ly1,lz1,lelt)
533 IF (imesh.EQ.1) ntot = lx1*ly1*lz1*nelv
534 IF (imesh.EQ.2) ntot = lx1*ly1*lz1*nelt
537 if (param(22).ne.0) tol = abs(param(22))
538 CALL chktcg1 (tol,r,h1,h2,mask,mult,imesh,isd)
548 if (name.eq.
'PRES') kfldfdm = ldim+1
551 call cggo_dg (u,r,h1,h2,bi,mask,name,tol,maxit)
554 $ (u,r,h1,h2,mask,mult,imesh,tol,maxit,isd,bi,name)
562 subroutine hsolve(name,u,r,h1,h2,vmk,vml,imsh,tol,maxit,isd
563 $ ,approx,napprox,bi)
572 REAL U (LX1,LY1,LZ1,1)
573 REAL R (LX1,LY1,LZ1,1)
574 REAL H1 (LX1,LY1,LZ1,1)
575 REAL H2 (LX1,LY1,LZ1,1)
576 REAL vmk (LX1,LY1,LZ1,1)
577 REAL vml (LX1,LY1,LZ1,1)
578 REAL bi (LX1,LY1,LZ1,1)
581 common /ctmp2/ w1(lx1,ly1,lz1,lelt)
582 common /ctmp3/ w2(2+2*mxprev)
594 if (ifprojfld(ifield))
then
599 if (cname.eq.
'PRES')
then
604 if (ifield.gt.ldimt_proj+1) ifstdh = .true.
605 if (param(93).eq.0) ifstdh = .true.
606 if (p945.eq.0) ifstdh = .true.
607 if (istep.lt.p945) ifstdh = .true.
610 call hmholtz(name,u,r,h1,h2,vmk,vml,imsh,tol,maxit,isd)
613 n = lx1*ly1*lz1*nelfld(ifield)
616 call dssum (r,lx1,ly1,lz1)
624 $ (r,n,approx,napprox,h1,h2,vmk,vml,ifwt,ifvec,name6)
626 call hmhzpf (name,u,r,h1,h2,vmk,vml,imsh,tol,maxit,isd,bi)
629 $ (u,n,approx,napprox,h1,h2,vmk,vml,ifwt,ifvec,name6)
636 subroutine project1(b,n,rvar,ivar,h1,h2,msk,w,ifwt,ifvec,name6)
676 real b(n),rvar(n,1),h1(n),h2(n),w(n),msk(n)
684 if (ifvec) nn = n*ldim
687 $ (m,mmx,ixb,ibb,ix,ib,ih1,ih2,ivar,n,ifvec,name6)
691 ireset=
iproj_chk(rvar(ih1,1),rvar(ih2,1),h1,h2,n)
699 if (ireset.eq.1)
then
704 call proj_matvec (rvar(jb,1),rvar(jx,1),n,h1,h2,msk,name6)
707 if (nio.eq.0 .and. loglevel.gt.2)
708 $
write(6,
'(13x,A)')
'Reorthogonalize Basis'
711 $ (rvar(ix,1),rvar(ib,1),n,m,w,ifwt,ifvec,name6)
719 call project1_a(rvar(ixb,1),rvar(ibb,1),b,rvar(ix,1),rvar(ib,1)
728 if (nio.eq.0)
write(6,1) istep,
' Project ' // name6,
729 & baf,bb4,ratio,m,mmx
730 1
format(i11,a,6x,1p3e13.4,i4,i4)
744 parameter(lt=lx1*ly1*lz1*lelv)
745 real xbar(n),bbar(n),b(n),xx(n,m),bb(n,m),w(n)
748 parameter(lxyz=lx1*ly1*lz1)
751 real work(mxprev),alpha(mxprev)
758 alpha(k) =
vlsc3(xx(1,k),w,b,n)
760 alpha(k) =
vlsc2(xx(1,k),b,n)
764 call gop(alpha,work,
'+ ',m)
765 call cmult2(xbar,xx(1,1),alpha(1),n)
766 call cmult2(bbar,bb(1,1),alpha(1),n)
767 call add2s2(b,bb(1,1),-alpha(1),n)
769 call add2s2(xbar,xx(1,k),alpha(k),n)
770 call add2s2(bbar,bb(1,k),alpha(k),n)
771 call add2s2(b,bb(1,k),-alpha(k),n)
776 alpha(k) =
vlsc3(xx(1,k),w,b,n)
778 alpha(k) =
vlsc2(xx(1,k),b,n)
781 call gop(alpha,work,
'+ ',m)
783 call add2s2(xbar,xx(1,k),alpha(k),n)
784 call add2s2(bbar,bb(1,k),alpha(k),n)
785 call add2s2(b,bb(1,k),-alpha(k),n)
797 real h1(n),h2(n),h1old(n),h2old(n)
809 dh1 = max(dh1,abs(h1(i)-h1old(i)))
810 dh2 = max(dh2,abs(h2(i)-h2old(i)))
817 call copy(h1old,h1,n)
818 call copy(h2old,h2,n)
830 real b(n),x(n),h1(n),h2(n),msk(n)
841 if (iftmsh(ifield)) imsh=2
843 call axhelm (b,x,h1,h2,imsh,isd)
844 call dssum (b,lx1,ly1,lz1)
858 real xx(n,1), bb(n,1), w(n)
861 real tol, nrm, scl1, scl2, c, s
862 real work(mxprev), alpha(mxprev), beta(mxprev)
872 alpha(k) = 0.5*(
vlsc3(xx(1,k),w,bb(1,m),n)
873 $ +
vlsc3(bb(1,k),w,xx(1,m),n))
875 alpha(k) = 0.5*(
vlsc2(xx(1,k),bb(1,m),n)
876 $ +
vlsc2(bb(1,k),xx(1,m),n))
879 call gop(alpha,work,
'+ ',m)
882 call add2s2(xx(1,m),xx(1,k),-alpha(k),n)
883 call add2s2(bb(1,m),bb(1,k),-alpha(k),n)
888 beta(k) = 0.5*(
vlsc3(xx(1,k),w,bb(1,m),n)
889 $ +
vlsc3(bb(1,k),w,xx(1,m),n))
891 beta(k) = 0.5*(
vlsc2(xx(1,k),bb(1,m),n)
892 $ +
vlsc2(bb(1,k),xx(1,m),n))
895 call gop(beta,work,
'+ ',m-1)
897 call add2s2(xx(1,m),xx(1,k),-beta(k),n)
898 call add2s2(bb(1,m),bb(1,k),-beta(k),n)
901 alpha(k) = alpha(k) + beta(k)
906 alpha(m) =
glsc3(xx(1,m), w, bb(1,m), n)
908 alpha(m) =
glsc2(xx(1,m), bb(1,m), n)
910 alpha(m) = sqrt(alpha(m))
915 if (wdsize.eq.4) tol=1.e-3
918 if(alpha(m).gt.tol*nrm)
then
922 call cmult(xx(1,m), scl1, n)
923 call cmult(bb(1,m), scl1, n)
934 scl1 = c*xx(i,h) + s*xx(i,k)
935 xx(i,k) = -s*xx(i,h) + c*xx(i,k)
937 scl2 = c*bb(i,h) + s*bb(i,k)
938 bb(i,k) = -s*bb(i,h) + c*bb(i,k)
946 if (nio.eq.0 .and. loglevel.gt.2)
947 $
write(6,1) istep,k,m,name6,alpha(m),tol
949 1
format(i9,
'proj_ortho: ',2i4,1x,a6,
950 $
' Detect rank deficiency:',1p2e12.4)
963 real xx(n,1),bb(n,1),w(n)
981 real xx(n,1),bb(n,1),w(n)
985 real normk,normp,alpha
989 if ( ifwt) alpha =
glsc3(xx(1,m),w,bb(1,m),n)
990 if (.not. ifwt) alpha =
glsc2(xx(1,m),bb(1,m),n)
991 if (alpha.eq.0)
return
993 scale = 1./sqrt(alpha)
1000 if ( ifwt) normk =
glsc3(xx(1,k),w,bb(1,k),n)
1001 if (.not. ifwt) normk =
glsc2(xx(1,k),bb(1,k),n)
1005 if(flag(j).eq.1)
then
1008 alpha = alpha + .5*(
vlsc3(xx(1,j),w,bb(1,k),n)
1009 $ +
vlsc3(bb(1,j),w,xx(1,k),n))
1011 alpha = alpha + .5*(
vlsc2(xx(1,j),bb(1,k),n)
1012 $ +
vlsc2(bb(1,j),xx(1,k),n))
1019 if ( ifwt) normp =
glsc3(xx(1,k),w,bb(1,k),n)
1020 if (.not. ifwt) normp =
glsc2(xx(1,k),bb(1,k),n)
1021 if (normp.gt.0.0) normp=sqrt(normp)
1024 if (wdsize.eq.4) tol=1.e-3
1026 if (normp.gt.tol*normk)
then
1045 if (flag(j).eq.1)
then
1048 call copy(xx(1,k),xx(1,j),n)
1049 call copy(bb(1,k),bb(1,j),n)
1066 real xx(n,1),bb(n,1),w(n)
1069 integer flag(mxprev)
1070 real normk,normp,alpha(mxprev),work(mxprev),scl1,tol
1075 if (wdsize.eq.4) tol=1.e-3
1083 alpha(j) = .5*(
vlsc3(xx(1,j),w,bb(1,k),n)
1084 $ +
vlsc3(bb(1,j),w,xx(1,k),n))
1086 alpha(j) = .5*(
vlsc2(xx(1,j),bb(1,k),n)
1087 $ +
vlsc2(bb(1,j),xx(1,k),n))
1090 call gop(alpha(k), work,
'+ ',(m - k) + 1)
1092 call add2s2(xx(1,k),xx(1,j),-alpha(j),n)
1093 call add2s2(bb(1,k),bb(1,j),-alpha(j),n)
1095 normp = sqrt(alpha(k))
1097 normk =
glsc3(xx(1,k),w,bb(1,k),n)
1099 normk =
glsc2(xx(1,k),bb(1,k),n)
1102 if(normk.gt.tol*normp)
then
1104 call cmult(xx(1,k), scl1, n)
1105 call cmult(bb(1,k), scl1, n)
1116 if (flag(j).eq.1)
then
1119 call copy(xx(1,k),xx(1,j),n)
1120 call copy(bb(1,k),bb(1,j),n)
1129 subroutine project2(x,n,rvar,ivar,h1,h2,msk,w,ifwt,ifvec,name6)
1133 real x(n),b(n),rvar(n,1),h1(n),h2(n),w(n),msk(n)
1141 $ ivar,n,ifvec,name6)
1146 call project2_a(x,rvar(ixb,1),rvar(ix,1),rvar(ib,1)
1147 $ ,n,m,mmx,h1,h2,msk,w,ifwt,ifvec,name6)
1156 subroutine project2_a(x,xbar,xx,bb,n,m,mmx,h1,h2,msk,w,ifwt,ifvec,
1161 real x(n),xbar(n),xx(n,1),bb(n,1),h1(n),h2(n),w(n),msk(n)
1166 if (ifvec) nn=ldim*n
1168 if (m.gt.0)
call add2(x,xbar,n)
1180 call copy (xx(1,m),x,nn)
1181 call proj_matvec (bb(1,m),xx(1,m),n,h1,h2,msk,name6)
1182 call proj_ortho (xx,bb,n,m,w,ifwt,ifvec,name6)
1190 $ (m,mmx,ixb,ibb,ix,ib,ih1,ih2,ivar,n,ifvec,name6)
1209 if (ifvec) nn = n*ldim
1222 subroutine laplacep(name,u,mask,mult,ifld,tol,maxi,approx,napprox)
1252 real u(1),mask(1),mult(1),approx (1)
1255 parameter(lt=lx1*ly1*lz1*lelt)
1256 common /scrvh/ h1(lt),h2(lt)
1257 common /scruz/ r(lt),ub(lt)
1265 call chcopy(cname,name,4)
1266 call capit (cname,4)
1268 call blank (name6,6)
1269 call chcopy(name6,name,4)
1283 call axhelm (r,ub,h1,h2,1,1)
1289 call dssum (r,lx1,ly1,lz1)
1292 $ (r,n,approx,napprox,h1,h2,mask,mult,ifwt,ifvec,name6)
1294 if (nel.eq.nelv)
then
1295 call hmhzpf (name,u,r,h1,h2,mask,mult,imsh,tol,maxi,isd,binvm1)
1297 call hmhzpf (name,u,r,h1,h2,mask,mult,imsh,tol,maxi,isd,bintm1)
1301 $ (u,n,approx,napprox,h1,h2,mask,mult,ifwt,ifvec,name6)
1310 real a, b, c, s, r, h, d
1332 real a, b, t, x, c, d, ix
1341 hypot = x*sqrt(1.0+t*t)
subroutine gop(x, w, op, n)
real *8 function dnekclock()
subroutine scale(xyzl, nl)
subroutine dssum(u, nx, ny, nz)
subroutine chktcg1(tol, res, h1, h2, mask, mult, imesh, isd)
subroutine hmholtz(name, u, rhs, h1, h2, mask, mult, imsh, tli, maxit, isd)
subroutine cggo(x, f, h1, h2, mask, mult, imsh, tin, maxit, isd, binv, name)
subroutine axhelm(au, u, helm1, helm2, imesh, isd)
subroutine cggo_dg(x, f, h1, h2, binv, mask, name, tin, maxit)
subroutine capit(lettrs, n)
subroutine col3(a, b, c, n)
subroutine invers2(a, b, n)
function glsc3(a, b, mult, n)
subroutine add2s2(a, b, c1, n)
real function vlsc2(x, y, n)
subroutine cmult(a, const, n)
subroutine chcopy(a, b, n)
subroutine opdiv(outfld, inpx, inpy, inpz)
subroutine cdabdtp(ap, wp, h1, h2, h2inv, intype)
subroutine econj(kprev, h1, h2, h2inv, ierr)
subroutine proj_get_ivar(m, mmx, ixb, ibb, ix, ib, ih1, ih2, ivar, n, ifvec, name6)
subroutine project1(b, n, rvar, ivar, h1, h2, msk, w, ifwt, ifvec, name6)
subroutine givens_rotation(a, b, c, s, r)
subroutine project1_a(xbar, bbar, b, xx, bb, n, m, w, ifwt, ifvec)
subroutine hsolve(name, u, r, h1, h2, vmk, vml, imsh, tol, maxit, isd, approx, napprox, bi)
subroutine laplacep(name, u, mask, mult, ifld, tol, maxi, approx, napprox)
subroutine updtset(p, h1, h2, h2inv, IERR)
real function hypot(a, b)
subroutine proj_ortho(xx, bb, n, m, w, ifwt, ifvec, name6)
function vlsc3(X, Y, B, N)
subroutine proj_ortho_full_cgs2(xx, bb, n, m, w, ifwt, ifvec, name6)
subroutine hconj(approx, k, h1, h2, vml, vmk, ws, name4, ierr)
function iproj_chk(h1old, h2old, h1, h2, n)
subroutine proj_ortho_full_mgs(xx, bb, n, m, w, ifwt, ifvec, name6)
subroutine project2_a(x, xbar, xx, bb, n, m, mmx, h1, h2, msk, w, ifwt, ifvec, name6)
subroutine setrhs(p, h1, h2, h2inv)
subroutine proj_ortho_full(xx, bb, n, m, w, ifwt, ifvec, name6)
subroutine hmhzpf(name, u, r, h1, h2, mask, mult, imesh, tli, maxit, isd, bi)
subroutine project2(x, n, rvar, ivar, h1, h2, msk, w, ifwt, ifvec, name6)
subroutine gensoln(p, h1, h2, h2inv)
subroutine updrhse(p, h1, h2, h2inv, ierr)
subroutine proj_matvec(b, x, n, h1, h2, msk, name6)
subroutine cmult2(A, B, CONST, N)