xref: /libCEED/tests/t302-basis-f.f90 (revision c8b9fe725830f9f8c5d03a787223decb42394873)
1!-----------------------------------------------------------------------
2      subroutine polyeval(x,n,p,uq)
3      real*8 x,y
4      integer n,i
5      real*8 p(1)
6      real*8 uq
7
8      y=p(n)
9
10      do i=n-1,1,-1
11        y=y*x+p(i)
12      enddo
13
14      uq=y
15
16      end
17!-----------------------------------------------------------------------
18      program test
19
20      include 'ceedf.h'
21
22      integer ceed,err
23      integer x,xq,u,uq
24      integer bxl,bul,bxg,bug
25      integer i
26      integer q
27      parameter(q=6)
28
29      real*8 p(6)
30      real*8 xx(2)
31      real*8 xxq(q)
32      real*8 uuq(q)
33      real*8 px
34      integer*8 uqoffset,xoffset,offset1,offset2
35
36      character arg*32
37
38      data p/1,2,3,4,5,6/
39      data xx/-1,1/
40
41      call getarg(1,arg)
42      call ceedinit(trim(arg)//char(0),ceed,err)
43
44      call ceedvectorcreate(ceed,2,x,err)
45      xoffset=0
46      call ceedvectorsetarray(x,ceed_mem_host,ceed_use_pointer,xx,xoffset,err)
47      call ceedvectorcreate(ceed,q,xq,err)
48      call ceedvectorsetvalue(xq,0.d0,err)
49      call ceedvectorcreate(ceed,q,u,err)
50      call ceedvectorsetvalue(u,0.d0,err)
51      call ceedvectorcreate(ceed,q,uq,err)
52      call ceedvectorsetvalue(uq,0.d0,err)
53
54      call ceedbasiscreatetensorh1lagrange(ceed,1,1,2,q,ceed_gauss_lobatto,&
55     & bxl,err)
56      call ceedbasiscreatetensorh1lagrange(ceed,1,1,q,q,ceed_gauss_lobatto,&
57     & bul,err)
58
59      call ceedbasisapply(bxl,1,ceed_notranspose,ceed_eval_interp,x,xq,err)
60
61      call ceedvectorgetarrayread(xq,ceed_mem_host,xxq,offset1,err)
62      do i=1,q
63        call polyeval(xxq(i+offset1),6,p,uuq(i))
64      enddo
65      call ceedvectorrestorearrayread(xq,xxq,offset1,err)
66      uqoffset=0
67      call ceedvectorsetarray(uq,ceed_mem_host,ceed_use_pointer,uuq,uqoffset,&
68     & err)
69
70      call ceedbasisapply(bul,1,ceed_transpose,ceed_eval_interp,uq,u,err)
71
72      call ceedbasiscreatetensorh1lagrange(ceed,1,1,2,q,ceed_gauss,bxg,err)
73      call ceedbasiscreatetensorh1lagrange(ceed,1,1,q,q,ceed_gauss,bug,err)
74
75      call ceedbasisapply(bxg,1,ceed_notranspose,ceed_eval_interp,x,xq,err)
76      call ceedbasisapply(bug,1,ceed_notranspose,ceed_eval_interp,u,uq,err)
77
78      call ceedvectorgetarrayread(xq,ceed_mem_host,xxq,offset1,err)
79      call ceedvectorgetarrayread(uq,ceed_mem_host,uuq,offset2,err)
80      do i=1,q
81        call polyeval(xxq(i+offset1),6,p,px)
82        if (abs(uuq(i+offset2)-px) > 1e-14) then
83          write(*,*) uuq(i+offset2),' not eqaul to ',px,'=p(',xxq(i+offset1),')'
84        endif
85      enddo
86      call ceedvectorrestorearrayread(xq,xxq,offset1,err)
87      call ceedvectorrestorearrayread(uq,uuq,offest2,err)
88
89      call ceedvectordestroy(x,err)
90      call ceedvectordestroy(xq,err)
91      call ceedvectordestroy(u,err)
92      call ceedvectordestroy(uq,err)
93      call ceedbasisdestroy(bxl,err)
94      call ceedbasisdestroy(bul,err)
95      call ceedbasisdestroy(bxg,err)
96      call ceedbasisdestroy(bug,err)
97      call ceeddestroy(ceed,err)
98      end
99!-----------------------------------------------------------------------
100