xref: /libCEED/tests/t208-elemrestriction-f.f90 (revision ec3da8bcb94d9f0073544b37b5081a06981a86f7)
1be9261b7Sjeremylt!-----------------------------------------------------------------------
2be9261b7Sjeremylt      program test
31f9a83abSJed Brown      implicit none
4*ec3da8bcSJed Brown      include 'ceed/fortran.h'
5be9261b7Sjeremylt
6be9261b7Sjeremylt      integer ceed,err
7be9261b7Sjeremylt      integer x,y
81f9a83abSJed Brown      integer i,r
9be9261b7Sjeremylt
10be9261b7Sjeremylt      integer ne
11be9261b7Sjeremylt      parameter(ne=8)
12be9261b7Sjeremylt      integer blksize
13be9261b7Sjeremylt      parameter(blksize=5)
14be9261b7Sjeremylt
15be9261b7Sjeremylt      integer*4 ind(2*ne)
16be9261b7Sjeremylt      real*8 a(ne+1)
17be9261b7Sjeremylt      integer*8 aoffset
18be9261b7Sjeremylt
19be9261b7Sjeremylt      character arg*32
20be9261b7Sjeremylt
21be9261b7Sjeremylt      call getarg(1,arg)
22be9261b7Sjeremylt      call ceedinit(trim(arg)//char(0),ceed,err)
23be9261b7Sjeremylt
24be9261b7Sjeremylt      call ceedvectorcreate(ceed,ne+1,x,err)
25be9261b7Sjeremylt
26be9261b7Sjeremylt      do i=1,ne+1
27be9261b7Sjeremylt        a(i)=10+i-1
28be9261b7Sjeremylt      enddo
29be9261b7Sjeremylt
309fbf56acSjeremylt      aoffset=0
319fbf56acSjeremylt      call ceedvectorsetarray(x,ceed_mem_host,ceed_use_pointer,a,aoffset,err)
32be9261b7Sjeremylt
33be9261b7Sjeremylt      do i=1,ne
34be9261b7Sjeremylt        ind(2*i-1)=i-1
35be9261b7Sjeremylt        ind(2*i  )=i
36be9261b7Sjeremylt      enddo
37be9261b7Sjeremylt
38d979a051Sjeremylt      call ceedelemrestrictioncreateblocked(ceed,ne,2,blksize,1,1,ne+1,&
39be9261b7Sjeremylt     & ceed_mem_host,ceed_use_pointer,ind,r,err)
40be9261b7Sjeremylt
41be9261b7Sjeremylt      call ceedvectorcreate(ceed,blksize*2,y,err);
42be9261b7Sjeremylt      call ceedvectorsetvalue(y,0.d0,err);
43be9261b7Sjeremylt
44be9261b7Sjeremylt!    No Transpose
45a8d32208Sjeremylt      call ceedelemrestrictionapplyblock(r,1,ceed_notranspose,&
46be9261b7Sjeremylt     & x,y,ceed_request_immediate,err)
47be9261b7Sjeremylt      call ceedvectorview(y,err)
48be9261b7Sjeremylt
49be9261b7Sjeremylt!    Transpose
50be9261b7Sjeremylt      call ceedvectorgetarray(x,ceed_mem_host,a,aoffset,err)
51be9261b7Sjeremylt      do i=1,ne+1
52be9261b7Sjeremylt        a(aoffset+i)=0.0
53be9261b7Sjeremylt      enddo
54be9261b7Sjeremylt      call ceedvectorrestorearray(x,a,aoffset,err)
55be9261b7Sjeremylt
56a8d32208Sjeremylt      call ceedelemrestrictionapplyblock(r,1,ceed_transpose,&
57be9261b7Sjeremylt     & y,x,ceed_request_immediate,err)
58be9261b7Sjeremylt
59be9261b7Sjeremylt      call ceedvectorview(x,err)
60be9261b7Sjeremylt
61be9261b7Sjeremylt      call ceedvectordestroy(x,err)
62be9261b7Sjeremylt      call ceedvectordestroy(y,err)
63be9261b7Sjeremylt      call ceedelemrestrictiondestroy(r,err)
64be9261b7Sjeremylt      call ceeddestroy(ceed,err)
65be9261b7Sjeremylt
66be9261b7Sjeremylt      end
67be9261b7Sjeremylt!-----------------------------------------------------------------------
68