xref: /libCEED/tests/t201-elemrestriction-f.f90 (revision 8980d4a7648603668b9339ee3acd92e57e17b98b)
1*8980d4a7Sjeremylt!-----------------------------------------------------------------------
2*8980d4a7Sjeremylt      program test
3*8980d4a7Sjeremylt
4*8980d4a7Sjeremylt      include 'ceedf.h'
5*8980d4a7Sjeremylt
6*8980d4a7Sjeremylt      integer ceed,err
7*8980d4a7Sjeremylt      integer x,y
8*8980d4a7Sjeremylt      integer r
9*8980d4a7Sjeremylt
10*8980d4a7Sjeremylt      integer ne
11*8980d4a7Sjeremylt      parameter(ne=3)
12*8980d4a7Sjeremylt
13*8980d4a7Sjeremylt      real*8 a(2*ne)
14*8980d4a7Sjeremylt      real*8 yy(2*ne)
15*8980d4a7Sjeremylt      real*8 diff
16*8980d4a7Sjeremylt      integer*8 yoffset
17*8980d4a7Sjeremylt
18*8980d4a7Sjeremylt      character arg*32
19*8980d4a7Sjeremylt
20*8980d4a7Sjeremylt      call getarg(1,arg)
21*8980d4a7Sjeremylt      call ceedinit(trim(arg)//char(0),ceed,err)
22*8980d4a7Sjeremylt
23*8980d4a7Sjeremylt      call ceedvectorcreate(ceed,2*ne,x,err)
24*8980d4a7Sjeremylt
25*8980d4a7Sjeremylt      do i=1,2*ne
26*8980d4a7Sjeremylt        a(i)=10+i-1
27*8980d4a7Sjeremylt      enddo
28*8980d4a7Sjeremylt
29*8980d4a7Sjeremylt      call ceedvectorsetarray(x,ceed_mem_host,ceed_use_pointer,a,err)
30*8980d4a7Sjeremylt
31*8980d4a7Sjeremylt      call ceedelemrestrictioncreateidentity(ceed,ne,2,2*ne,1,r,err)
32*8980d4a7Sjeremylt
33*8980d4a7Sjeremylt      call ceedvectorcreate(ceed,2*ne,y,err);
34*8980d4a7Sjeremylt      call ceedvectorsetvalue(y,0.d0,err);
35*8980d4a7Sjeremylt      call ceedelemrestrictionapply(r,ceed_notranspose,ceed_notranspose,x,y,&
36*8980d4a7Sjeremylt     & ceed_request_immediate,err)
37*8980d4a7Sjeremylt
38*8980d4a7Sjeremylt      call ceedvectorgetarrayread(y,ceed_mem_host,yy,yoffset,err)
39*8980d4a7Sjeremylt      do i=1,ne*2
40*8980d4a7Sjeremylt        diff=10+i-1-yy(yoffset+i)
41*8980d4a7Sjeremylt        if (abs(diff) > 1.0D-15) then
42*8980d4a7Sjeremylt          write(*,*) 'Error in restricted array y(',i,')=',yy(yoffset+i)
43*8980d4a7Sjeremylt        endif
44*8980d4a7Sjeremylt      enddo
45*8980d4a7Sjeremylt      call ceedvectorrestorearrayread(y,yy,yoffset,err)
46*8980d4a7Sjeremylt
47*8980d4a7Sjeremylt      call ceedvectordestroy(x,err)
48*8980d4a7Sjeremylt      call ceedvectordestroy(y,err)
49*8980d4a7Sjeremylt      call ceedelemrestrictiondestroy(r,err)
50*8980d4a7Sjeremylt      call ceeddestroy(ceed,err)
51*8980d4a7Sjeremylt
52*8980d4a7Sjeremylt      end
53*8980d4a7Sjeremylt!-----------------------------------------------------------------------
54