xref: /libCEED/tests/t201-elemrestriction-f.f90 (revision c8b9fe725830f9f8c5d03a787223decb42394873)
18980d4a7Sjeremylt!-----------------------------------------------------------------------
28980d4a7Sjeremylt      program test
38980d4a7Sjeremylt
48980d4a7Sjeremylt      include 'ceedf.h'
58980d4a7Sjeremylt
68980d4a7Sjeremylt      integer ceed,err
78980d4a7Sjeremylt      integer x,y
88980d4a7Sjeremylt      integer r
98980d4a7Sjeremylt
108980d4a7Sjeremylt      integer ne
118980d4a7Sjeremylt      parameter(ne=3)
128980d4a7Sjeremylt
138980d4a7Sjeremylt      real*8 a(2*ne)
148980d4a7Sjeremylt      real*8 yy(2*ne)
158980d4a7Sjeremylt      real*8 diff
16*c8b9fe72Sjeremylt      integer*8 aoffset,yoffset
178980d4a7Sjeremylt
188980d4a7Sjeremylt      character arg*32
198980d4a7Sjeremylt
208980d4a7Sjeremylt      call getarg(1,arg)
218980d4a7Sjeremylt      call ceedinit(trim(arg)//char(0),ceed,err)
228980d4a7Sjeremylt
238980d4a7Sjeremylt      call ceedvectorcreate(ceed,2*ne,x,err)
248980d4a7Sjeremylt
258980d4a7Sjeremylt      do i=1,2*ne
268980d4a7Sjeremylt        a(i)=10+i-1
278980d4a7Sjeremylt      enddo
288980d4a7Sjeremylt
29*c8b9fe72Sjeremylt      aoffset=0
30*c8b9fe72Sjeremylt      call ceedvectorsetarray(x,ceed_mem_host,ceed_use_pointer,a,aoffset,err)
318980d4a7Sjeremylt
328980d4a7Sjeremylt      call ceedelemrestrictioncreateidentity(ceed,ne,2,2*ne,1,r,err)
338980d4a7Sjeremylt
348980d4a7Sjeremylt      call ceedvectorcreate(ceed,2*ne,y,err);
358980d4a7Sjeremylt      call ceedvectorsetvalue(y,0.d0,err);
368980d4a7Sjeremylt      call ceedelemrestrictionapply(r,ceed_notranspose,ceed_notranspose,x,y,&
378980d4a7Sjeremylt     & ceed_request_immediate,err)
388980d4a7Sjeremylt
398980d4a7Sjeremylt      call ceedvectorgetarrayread(y,ceed_mem_host,yy,yoffset,err)
408980d4a7Sjeremylt      do i=1,ne*2
418980d4a7Sjeremylt        diff=10+i-1-yy(yoffset+i)
428980d4a7Sjeremylt        if (abs(diff) > 1.0D-15) then
438980d4a7Sjeremylt          write(*,*) 'Error in restricted array y(',i,')=',yy(yoffset+i)
448980d4a7Sjeremylt        endif
458980d4a7Sjeremylt      enddo
468980d4a7Sjeremylt      call ceedvectorrestorearrayread(y,yy,yoffset,err)
478980d4a7Sjeremylt
488980d4a7Sjeremylt      call ceedvectordestroy(x,err)
498980d4a7Sjeremylt      call ceedvectordestroy(y,err)
508980d4a7Sjeremylt      call ceedelemrestrictiondestroy(r,err)
518980d4a7Sjeremylt      call ceeddestroy(ceed,err)
528980d4a7Sjeremylt
538980d4a7Sjeremylt      end
548980d4a7Sjeremylt!-----------------------------------------------------------------------
55