xref: /libCEED/tests/t410-qfunction-f.f90 (revision 3446d1b5ce8d1a4e72ebab9baee4f1efd0361227)
1!-----------------------------------------------------------------------
2      program test
3      implicit none
4      include 'ceedf.h'
5
6      integer ceed,err
7      integer qdata,j,w,u,v
8      integer qf_setup,qf_mass
9      integer q,i
10      parameter(q=8)
11      real*8 jj(q)
12      real*8 ww(q)
13      real*8 uu(q)
14      real*8 vv(q)
15      real*8 vvv(q)
16      real*8 x
17      character arg*32
18      integer*8 joffset,uoffset,voffset,woffset
19
20      call getarg(1,arg)
21      call ceedinit(trim(arg)//char(0),ceed,err)
22
23      call ceedqfunctioncreateinteriorbyname(ceed,'Mass1DBuild',qf_setup,err)
24      call ceedqfunctioncreateinteriorbyname(ceed,'MassApply',qf_mass,err)
25
26      do i=0,q-1
27        jj(i+1)=1
28        x=2.0*i/(q-1)-1
29        ww(i+1)=1-x*x
30        uu(i+1)=2+3*x+5*x*x
31        vvv(i+1)=ww(i+1)*uu(i+1)
32      enddo
33
34      call ceedvectorcreate(ceed,q,j,err)
35      joffset=0
36      call ceedvectorsetarray(j,ceed_mem_host,ceed_use_pointer,jj,joffset,err)
37      call ceedvectorcreate(ceed,q,w,err)
38      woffset=0
39      call ceedvectorsetarray(w,ceed_mem_host,ceed_use_pointer,ww,woffset,err)
40      call ceedvectorcreate(ceed,q,u,err)
41      uoffset=0
42      call ceedvectorsetarray(u,ceed_mem_host,ceed_use_pointer,uu,uoffset,err)
43      call ceedvectorcreate(ceed,q,v,err)
44      call ceedvectorsetvalue(v,0.d0,err)
45      call ceedvectorcreate(ceed,q,qdata,err)
46      call ceedvectorsetvalue(qdata,0.d0,err)
47
48      call ceedqfunctionapply(qf_setup,q,j,w,ceed_null,ceed_null,&
49             &ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,&
50             &ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,&
51             &qdata,ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,&
52             &ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,&
53             &ceed_null,ceed_null,ceed_null,ceed_null,err)
54
55      call ceedqfunctionapply(qf_mass,q,u,qdata,ceed_null,ceed_null,&
56             &ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,&
57             &ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,&
58             &v,ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,&
59             &ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,ceed_null,&
60             &ceed_null,ceed_null,ceed_null,ceed_null,err)
61
62      call ceedvectorgetarrayread(v,ceed_mem_host,vv,voffset,err)
63      do i=1,q
64        if (abs(vv(i+voffset)-vvv(i)) > 1.0D-14) then
65! LCOV_EXCL_START
66          write(*,*) 'v(i)=',vv(i+voffset),', vv(i)=',vvv(i)
67! LCOV_EXCL_STOP
68        endif
69      enddo
70      call ceedvectorrestorearrayread(v,vv,voffset,err)
71
72      call ceedvectordestroy(u,err)
73      call ceedvectordestroy(v,err)
74      call ceedvectordestroy(w,err)
75      call ceedvectordestroy(qdata,err)
76      call ceedqfunctiondestroy(qf_setup,err)
77      call ceedqfunctiondestroy(qf_mass,err)
78      call ceeddestroy(ceed,err)
79      end
80!-----------------------------------------------------------------------
81