xref: /libCEED/tests/t200-elemrestriction-f.f90 (revision 874019bc89a44b0eae6b48d78442abcb0851055b)
18980d4a7Sjeremylt!-----------------------------------------------------------------------
28980d4a7Sjeremylt      program test
31f9a83abSJed Brown      implicit none
4*ec3da8bcSJed Brown      include 'ceed/fortran.h'
58980d4a7Sjeremylt
68980d4a7Sjeremylt      integer ceed,err
78980d4a7Sjeremylt      integer x,y
88980d4a7Sjeremylt      integer r
98980d4a7Sjeremylt      integer i
10c8b9fe72Sjeremylt      integer*8 aoffset,yoffset
118980d4a7Sjeremylt
128980d4a7Sjeremylt      integer ne
138980d4a7Sjeremylt      parameter(ne=3)
148980d4a7Sjeremylt
158980d4a7Sjeremylt      integer*4 ind(2*ne)
168980d4a7Sjeremylt      real*8 a(ne+1)
178980d4a7Sjeremylt      real*8 yy(2*ne)
188980d4a7Sjeremylt      real*8 diff
198980d4a7Sjeremylt
208980d4a7Sjeremylt      character arg*32
218980d4a7Sjeremylt
228980d4a7Sjeremylt      call getarg(1,arg)
238980d4a7Sjeremylt      call ceedinit(trim(arg)//char(0),ceed,err)
248980d4a7Sjeremylt
258980d4a7Sjeremylt      call ceedvectorcreate(ceed,ne+1,x,err)
268980d4a7Sjeremylt
278980d4a7Sjeremylt      do i=1,ne+1
288980d4a7Sjeremylt        a(i)=10+i-1
298980d4a7Sjeremylt      enddo
308980d4a7Sjeremylt
31c8b9fe72Sjeremylt      aoffset=0
32c8b9fe72Sjeremylt      call ceedvectorsetarray(x,ceed_mem_host,ceed_use_pointer,a,aoffset,err)
338980d4a7Sjeremylt
348980d4a7Sjeremylt      do i=1,ne
358980d4a7Sjeremylt        ind(2*i-1)=i-1
368980d4a7Sjeremylt        ind(2*i  )=i
378980d4a7Sjeremylt      enddo
388980d4a7Sjeremylt
39d979a051Sjeremylt      call ceedelemrestrictioncreate(ceed,ne,2,1,1,ne+1,ceed_mem_host,&
408980d4a7Sjeremylt     & ceed_use_pointer,ind,r,err)
418980d4a7Sjeremylt
428980d4a7Sjeremylt      call ceedvectorcreate(ceed,2*ne,y,err);
438980d4a7Sjeremylt      call ceedvectorsetvalue(y,0.d0,err);
44a8d32208Sjeremylt      call ceedelemrestrictionapply(r,ceed_notranspose,x,y,&
458980d4a7Sjeremylt     & ceed_request_immediate,err)
468980d4a7Sjeremylt
47c8b9fe72Sjeremylt      call ceedvectorgetarrayread(y,ceed_mem_host,yy,yoffset,err)
488980d4a7Sjeremylt      do i=1,ne*2
49c8b9fe72Sjeremylt        diff=10+i/2-yy(i+yoffset)
508980d4a7Sjeremylt        if (abs(diff) > 1.0D-15) then
51a2546046Sjeremylt! LCOV_EXCL_START
52c8b9fe72Sjeremylt          write(*,*) 'Error in restricted array y(',i,')=',yy(i+yoffset)
53de996c55Sjeremylt! LCOV_EXCL_STOP
548980d4a7Sjeremylt        endif
558980d4a7Sjeremylt      enddo
56c8b9fe72Sjeremylt      call ceedvectorrestorearrayread(y,yy,yoffset,err)
578980d4a7Sjeremylt
588980d4a7Sjeremylt      call ceedvectordestroy(x,err)
598980d4a7Sjeremylt      call ceedvectordestroy(y,err)
608980d4a7Sjeremylt      call ceedelemrestrictiondestroy(r,err)
618980d4a7Sjeremylt      call ceeddestroy(ceed,err)
628980d4a7Sjeremylt
638980d4a7Sjeremylt      end
648980d4a7Sjeremylt!-----------------------------------------------------------------------
65