c*********************** problem name: ob ************************ c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine a1xy(x,y,u,ux,uy,rl,itag,values) c implicit double precision (a-h,o-z) implicit integer (i-n) c double precision + values(*) common /val0/k0,ku,kx,ky,kl,kuu,kux,kuy,kul, + kxu,kxx,kxy,kxl,kyu,kyx,kyy,kyl,klu,klx,kly,kll c return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine a2xy(x,y,u,ux,uy,rl,itag,values) c implicit double precision (a-h,o-z) implicit integer (i-n) c double precision + values(*) common /val0/k0,ku,kx,ky,kl,kuu,kux,kuy,kul, + kxu,kxx,kxy,kxl,kyu,kyx,kyy,kyl,klu,klx,kly,kll c return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine fxy(x,y,u,ux,uy,rl,itag,values) c implicit double precision (a-h,o-z) implicit integer (i-n) c double precision + values(*) common /val0/k0,ku,kx,ky,kl,kuu,kux,kuy,kul, + kxu,kxx,kxy,kxl,kyu,kyx,kyy,kyl,klu,klx,kly,kll c return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine gnxy(x,y,u,rl,itag,values) c implicit double precision (a-h,o-z) implicit integer (i-n) c double precision + values(*) common /val1/k0,ku,kl,kuu,kul,klu,kll c return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine gdxy(x,y,rl,itag,values) c implicit double precision (a-h,o-z) implicit integer (i-n) c double precision + values(*) common /val2/k0,kl,kll,klb,kub,kic,kim,kil c call lbxy(x,y,rl,itag,values(klb)) call ubxy(x,y,rl,itag,values(kub)) values(kic)=(values(klb)+values(kub))/2.0d0 return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine p1xy(x,y,u,ux,uy,rl,itag,values) c implicit double precision (a-h,o-z) implicit integer (i-n) c double precision + values(*) character*80 + su common /val0/k0,ku,kx,ky,kl,kuu,kux,kuy,kul, + kxu,kxx,kxy,kxl,kyu,kyx,kyy,kyl,klu,klx,kly,kll common /atest2/ig,ix,iy,ixl,iyl,ixu,iyu,iu(93), + ax,ay,cu,bdlw,bdup,cflw,cfup,ru(93),su(100) c call uexact(x,y,itag,r,rx,ry,rxx,ryy,rxy) s=-ax*rxx-ay*ryy+cu*r values(k0)=(ax*ux**2+ay*uy**2+cu*u**2)/2.0d0-s*u values(kx)=ax*ux values(ky)=ay*uy values(ku)=cu*u-s values(kxx)=ax values(kyy)=ay values(kuu)=cu return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine p2xy(x,y,dx,dy,u,ux,uy,rl,itag,jtag,values) c implicit double precision (a-h,o-z) implicit integer (i-n) c double precision + values(*) common /val0/k0,ku,kx,ky,kl,kuu,kux,kuy,kul, + kxu,kxx,kxy,kxl,kyu,kyx,kyy,kyl,klu,klx,kly,kll c return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine qxy(x,y,u,ux,uy,rl,itag,values) c implicit double precision (a-h,o-z) implicit integer (i-n) c double precision + values(*) character*80 + su common /atest2/ig,ix,iy,ixl,iyl,ixu,iyu,iu(93), + ax,ay,cu,bdlw,bdup,cflw,cfup,ru(93),su(100) common /val3/kf,kf1,kf2,ksk,kad c if(ig.eq.0) then call lbxy(x,y,rl,itag,values(kf)) else call ubxy(x,y,rl,itag,values(kf)) endif return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine lbxy(x,y,rl,itag,value) c implicit double precision (a-h,o-z) implicit integer (i-n) c character*80 + su common /atest2/ig,ix,iy,ixl,iyl,ixu,iyu,iu(93), + ax,ay,cu,bdlw,bdup,cflw,cfup,ru(93),su(100) c pi=3.141592653589793d0 axl=pi*dfloat(ixl)*x ayl=pi*dfloat(iyl)*y value=bdlw+cflw*dsin(axl)*dsin(ayl) return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine ubxy(x,y,rl,itag,value) c implicit double precision (a-h,o-z) implicit integer (i-n) c character*80 + su common /atest2/ig,ix,iy,ixl,iyl,ixu,iyu,iu(93), + ax,ay,cu,bdlw,bdup,cflw,cfup,ru(93),su(100) c pi=3.141592653589793d0 axu=pi*dfloat(ixu)*x ayu=pi*dfloat(iyu)*y value=bdup+cfup*dsin(axu)*dsin(ayu) return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine uexact(x,y,itag,u,ux,uy,uxx,uyy,uxy) c implicit double precision (a-h,o-z) implicit integer (i-n) character*80 + su common /atest2/ig,ix,iy,ixl,iyl,ixu,iyu,iu(93), + ax,ay,cu,bdlw,bdup,cflw,cfup,ru(93),su(100) c pi=3.141592653589793d0 px=pi*dfloat(ix) py=pi*dfloat(iy) sx=dsin(px*x) sy=dsin(py*y) cx=dcos(px*x) cy=dcos(py*y) u=sx*sy ux=px*cx*sy uy=py*sx*cy uxx=-px**2*u uxy=px*py*cx*cy uyy=-py**2*u return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine usrcmd(vx,vy,xm,ym,itnode,ibndry,ip,rp,sp,iu,ru,su,w) c implicit double precision (a-h,o-z) implicit integer (i-n) integer + itnode(5,*),ibndry(6,*),ip(100),iu(100) double precision + vx(*),vy(*),xm(*),ym(*),rp(100),ru(100),w(*) character*80 + sp(100),su(100),file(30) save len,file c data len/16/ data (file(i),i= 1, 10)/ + 'n i= 1,n=ig, a=ig,t=i', 1 'n i= 2,n=ix, a=ix,t=i', 2 'n i= 3,n=iy, a=iy,t=i', 3 'n i= 4,n=ixl, a=xl,t=i', 4 'n i= 5,n=iyl, a=yl,t=i', 5 'n i= 6,n=ixu, a=xu,t=i', 6 'n i= 7,n=iyu, a=yu,t=i', 7 'n i= 1,n=ax, a=ax,t=r', 8 'n i= 2,n=ay, a=ay,t=r', 9 'n i= 3,n=cu, a=cu,t=r'/ data (file(i),i= 11, 16)/ + 'n i= 4,n=bdlw, a=bl,t=r', 1 'n i= 5,n=bdup, a=bu,t=r', 2 'n i= 6,n=cflw, a=cl,t=r', 3 'n i= 7,n=cfup, a=cu,t=r', 4 's n=ig ,v=0,l="lower bound"', 5 's n=ig ,v=1,l="upper bound"'/ c c enter input mode c call usrset(file,len,iu,ru,su) return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 10.0 - - - september, 2007 c c----------------------------------------------------------------------- subroutine gdata(vx,vy,xm,ym,itnode,ibndry,ip,rp,sp,iu,ru,su,w) c implicit double precision (a-h,o-z) implicit integer (i-n) integer + itnode(5,*),ibndry(6,*),ip(100),iu(100) double precision + vx(*),vy(*),xm(*),ym(*),rp(100),ru(100), 1 w(*),x(9),y(9) character*80 + sp(100),su(100) save x,y,ntf,nvf,ncf,nbf,ispd,iprob,iadapt,irefn c data x/0.d0,0.d0,.5d0,1.d0,1.d0,1.d0,.5d0,0.d0,.5d0/ data y/.5d0,1.d0,1.d0,1.d0,.5d0,0.d0,0.d0,0.d0,.5d0/ data ntf,nvf,ncf,nbf,ispd/8,9,0,8,1/ data iprob,iadapt,irefn/2,4,2/ c c common /atest2/ig,ix,iy,ixl,iyl,ixu,iyu,iu(93), c + ax,ay,cu,bdlw,bdup,cflw,cfup,ru(93),su(100) c if(ip(41).eq.1) then sp(1)='obstacle' sp(2)='obstacle' sp(3)='obstacle' sp(4)='obstacle' sp(6)='ob_mpixxx.rw' sp(7)='ob.jnl' sp(9)='ob_mpixxx.out' c ru(1)=1.0d0 ru(2)=1.0d0 ru(3)=0.0d0 ru(4)=-0.25d0 ru(5)=0.25d0 ru(6)=0.1d0 ru(7)=-0.1d0 iu(1)=0 iu(2)=2 iu(3)=2 iu(4)=1 iu(5)=1 iu(6)=1 iu(7)=1 endif c rp(3)=1.0d-1 ip(20)=iadapt ip(21)=irefn ip(1)=ntf ip(2)=nvf ip(3)=ncf ip(4)=nbf ip(6)=max0(ip(6),ip(26),1) ip(7)=iprob ip(8)=ispd do i=1,ntf itnode(1,i)=9 itnode(2,i)=i itnode(3,i)=i-1 itnode(4,i)=0 itnode(5,i)=i ccc if(i.gt.4) itnode(5,i)=1 ibndry(1,i)=i ibndry(2,i)=i-1 ibndry(3,i)=0 k=(i+1)/2 ibndry(4,i)=2 ibndry(5,i)=0 ibndry(6,i)=(i+1)/2 enddo itnode(3,1)=8 ibndry(2,1)=8 c do i=1,nvf vx(i)=x(i) vy(i)=y(i) enddo c return end