c*********************** problem name: ob ************************ c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine a1xy(x,y,u,ux,uy,rl,itag,values) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) real(kind=rknd), dimension(*) :: values common /val0/k0,ku,kx,ky,kl,kuu,kux,kuy,kul, + kxu,kxx,kxy,kxl,kyu,kyx,kyy,kyl,klu,klx,kly,kll cy return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine a2xy(x,y,u,ux,uy,rl,itag,values) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) real(kind=rknd), dimension(*) :: values common /val0/k0,ku,kx,ky,kl,kuu,kux,kuy,kul, + kxu,kxx,kxy,kxl,kyu,kyx,kyy,kyl,klu,klx,kly,kll cy return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine fxy(x,y,u,ux,uy,rl,itag,values) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) real(kind=rknd), dimension(*) :: values common /val0/k0,ku,kx,ky,kl,kuu,kux,kuy,kul, + kxu,kxx,kxy,kxl,kyu,kyx,kyy,kyl,klu,klx,kly,kll cy return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine gnxy(x,y,u,rl,itag,values) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) real(kind=rknd), dimension(*) :: values common /val1/k0,ku,kl,kuu,kul,klu,kll cy return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine gdxy(x,y,rl,itag,values) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) real(kind=rknd), dimension(*) :: values common /val2/k0,kl,kll,klb,kub,kic,kim,kil cy call lbxy(x,y,rl,itag,values(klb)) call ubxy(x,y,rl,itag,values(kub)) values(kic)=(values(klb)+values(kub))/2.0e0_rknd return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine p1xy(x,y,u,ux,uy,rl,itag,values) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) real(kind=rknd), dimension(*) :: values character(len=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) cy 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.0e0_rknd-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 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine p2xy(x,y,dx,dy,u,ux,uy,rl,itag,jtag,values) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) real(kind=rknd), dimension(*) :: values common /val0/k0,ku,kx,ky,kl,kuu,kux,kuy,kul, + kxu,kxx,kxy,kxl,kyu,kyx,kyy,kyl,klu,klx,kly,kll cy return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine qxy(x,y,u,ux,uy,rl,itag,values) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) real(kind=rknd), dimension(*) :: values character(len=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,kad cy if(ig==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 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine sxy(rl,s,itag,values) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) real(kind=rknd), dimension(*) :: values common /val4/jx,jy,jxs,jys,jxl,jyl,jxss,jyss,jxll,jyll, + jxsl,jysl,jxls,jyls cy return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine lbxy(x,y,rl,itag,value) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) character(len=80) :: su common /atest2/ig,ix,iy,ixl,iyl,ixu,iyu,iu(93), + ax,ay,cu,bdlw,bdup,cflw,cfup,ru(93),su(100) cy pi=3.141592653589793e0_rknd axl=pi*real(ixl,rknd)*x ayl=pi*real(iyl,rknd)*y value=bdlw+cflw*sin(axl)*sin(ayl) return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine ubxy(x,y,rl,itag,value) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) character(len=80) :: su common /atest2/ig,ix,iy,ixl,iyl,ixu,iyu,iu(93), + ax,ay,cu,bdlw,bdup,cflw,cfup,ru(93),su(100) cy pi=3.141592653589793e0_rknd axu=pi*real(ixu,rknd)*x ayu=pi*real(iyu,rknd)*y value=bdup+cfup*sin(axu)*sin(ayu) return end c----------------------------------------------------------------------- c c piecewise lagrange triangle multi grid package c c edition 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine uexact(x,y,itag,u,ux,uy,uxx,uyy,uxy) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) character(len=80) :: su common /atest2/ig,ix,iy,ixl,iyl,ixu,iyu,iu(93), + ax,ay,cu,bdlw,bdup,cflw,cfup,ru(93),su(100) cy pi=3.141592653589793e0_rknd px=pi*real(ix,rknd) py=pi*real(iy,rknd) sx=sin(px*x) sy=sin(py*y) cx=cos(px*x) cy=cos(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 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine usrcmd(vx,vy,sf,itnode,ibndry,ip,rp,sp,iu,ru,su) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) integer(kind=iknd), dimension(5,*) :: itnode integer(kind=iknd), dimension(7,*) :: ibndry integer(kind=iknd), dimension(100) :: ip,iu integer(kind=iknd), save :: len real(kind=rknd), dimension(*) :: vx,vy real(kind=rknd), dimension(2,*) :: sf real(kind=rknd), dimension(100) :: rp,ru character(len=80), dimension(100) :: sp,su character(len=80), save, dimension(30) :: file cy 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 11.0 - - - june, 2012 c c----------------------------------------------------------------------- subroutine gdata(vx,vy,sf,itnode,ibndry,ip,rp,sp,iu,ru,su,sxy) cx use mthdef implicit real(kind=rknd) (a-h,o-z) implicit integer(kind=iknd) (i-n) integer(kind=iknd), dimension(5,*) :: itnode integer(kind=iknd), dimension(7,*) :: ibndry integer(kind=iknd), dimension(100) :: ip,iu integer(kind=iknd), save, dimension(9) :: ix,iy integer(kind=iknd), save :: ntf,nvf,nbf,ispd,iprob integer(kind=iknd), save :: iadapt,irefn,ifirst real(kind=rknd), dimension(*) :: vx,vy real(kind=rknd), dimension(2,*) :: sf real(kind=rknd), dimension(100) :: rp,ru character(len=80), dimension(100) :: sp,su cy external sxy data ix/0,0,1,2,2,2,1,0,1/ data iy/1,2,2,2,1,0,0,0,1/ data ntf,nvf,nbf,ispd/8,9,8,1/ data iprob,iadapt,irefn,ifirst/2,4,2,1/ 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)==1) then sp(1)='obstacle' sp(2)='obstacle' sp(3)='obstacle' sp(6)='ob_mpixxx.rw' sp(7)='ob.jnl' sp(9)='ob_mpixxx.out' c ru(1)=1.0e0_rknd ru(2)=1.0e0_rknd ru(3)=0.0e0_rknd ru(4)=-0.25e0_rknd ru(5)=0.25e0_rknd ru(6)=0.1e0_rknd ru(7)=-0.1e0_rknd iu(1)=0 iu(2)=3 iu(3)=3 iu(4)=1 iu(5)=1 iu(6)=1 iu(7)=1 endif c rp(3)=1.0e-1_rknd ip(20)=iadapt ip(21)=irefn ip(1)=ntf ip(2)=nvf ip(3)=nbf ip(5)=max(ip(5),ifirst) ip(6)=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>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)=0 ibndry(7,i)=(i+1)/2 sf(1,i)=0.0e0_rknd sf(2,i)=0.0e0_rknd enddo itnode(3,1)=8 ibndry(2,1)=8 c do i=1,nvf vx(i)=real(ix(i),rknd)/2.0e0_rknd vy(i)=real(iy(i),rknd)/2.0e0_rknd enddo c return end .