xref: /libCEED/tests/t201-elemrestriction-f.f90 (revision e508ec0b3d519a4b165a0015a5ee248d90be1508)
1!-----------------------------------------------------------------------
2      program test
3      implicit none
4      include 'ceed/fortran.h'
5
6      integer ceed,err
7      integer x,y
8      integer r
9      integer i,j,k
10
11      integer ne
12      parameter(ne=3)
13      integer strides(3)
14      integer layout(3)
15
16      real*8 a(2*ne)
17      real*8 yy(2*ne)
18      real*8 diff
19      integer*8 aoffset,yoffset
20
21      character arg*32
22
23      call getarg(1,arg)
24      call ceedinit(trim(arg)//char(0),ceed,err)
25
26      call ceedvectorcreate(ceed,2*ne,x,err)
27
28      do i=1,2*ne
29        a(i)=10+i-1
30      enddo
31
32      aoffset=0
33      call ceedvectorsetarray(x,ceed_mem_host,ceed_use_pointer,a,aoffset,err)
34
35      strides=[1,2,2]
36      call ceedelemrestrictioncreatestrided(ceed,ne,2,1,2*ne,strides,r,err)
37
38      call ceedvectorcreate(ceed,2*ne,y,err)
39      call ceedvectorsetvalue(y,0.d0,err)
40      call ceedelemrestrictionapply(r,ceed_notranspose,x,y,&
41     & ceed_request_immediate,err)
42
43      call ceedvectorgetarrayread(y,ceed_mem_host,yy,yoffset,err)
44      call ceedelemrestrictiongetelayout(r,layout,err)
45      do i=0,1
46        do j=0,0
47          do k=0,ne-1
48            diff=yy(yoffset+i*layout(1)+j*layout(2)+k*layout(3)+1)
49            diff=diff-a(i*strides(1)+j*strides(2)+k*strides(3)+1)
50            if (abs(diff) > 1.0D-15) then
51! LCOV_EXCL_START
52             write(*,*) 'Error in restricted array y(',i,')(',j,')(',k,')=',&
53     &         yy(yoffset+i*layout(1)+j*layout(2)+k*layout(3)+1)
54! LCOV_EXCL_STOP
55            endif
56          enddo
57        enddo
58      enddo
59      call ceedvectorrestorearrayread(y,yy,yoffset,err)
60
61      call ceedvectordestroy(x,err)
62      call ceedvectordestroy(y,err)
63      call ceedelemrestrictiondestroy(r,err)
64      call ceeddestroy(ceed,err)
65
66      end
67!-----------------------------------------------------------------------
68