xref: /libCEED/tests/t524-operator-f.f90 (revision 7509a596beda7c1d002d2274a17375b09541fdb6)
1250756a7Sjeremylt!-----------------------------------------------------------------------
2250756a7Sjeremylt!
3250756a7Sjeremylt! Header with common subroutine
4250756a7Sjeremylt!
5250756a7Sjeremylt      include 't320-basis-f.h'
6250756a7Sjeremylt!-----------------------------------------------------------------------
7250756a7Sjeremylt      subroutine setup(ctx,q,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,&
8250756a7Sjeremylt&           u15,u16,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,ierr)
9250756a7Sjeremylt      real*8 ctx
10250756a7Sjeremylt      real*8 u1(1)
11250756a7Sjeremylt      real*8 u2(1)
12250756a7Sjeremylt      real*8 v1(1)
13250756a7Sjeremylt      integer q,ierr
14250756a7Sjeremylt
15250756a7Sjeremylt      do i=1,q
16250756a7Sjeremylt        v1(i)=u1(i)*(u2(i+q*0)*u2(i+q*3)-u2(i+q*1)*u2(i+q*2))
17250756a7Sjeremylt      enddo
18250756a7Sjeremylt
19250756a7Sjeremylt      ierr=0
20250756a7Sjeremylt      end
21250756a7Sjeremylt!-----------------------------------------------------------------------
22250756a7Sjeremylt      subroutine mass(ctx,q,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,&
23250756a7Sjeremylt&           u15,u16,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,ierr)
24250756a7Sjeremylt      real*8 ctx
25250756a7Sjeremylt      real*8 u1(1)
26250756a7Sjeremylt      real*8 u2(1)
27250756a7Sjeremylt      real*8 v1(1)
28250756a7Sjeremylt      integer q,ierr
29250756a7Sjeremylt
30250756a7Sjeremylt      do i=1,q
31250756a7Sjeremylt        v1(i)=u2(i)*u1(i)
32250756a7Sjeremylt      enddo
33250756a7Sjeremylt
34250756a7Sjeremylt      ierr=0
35250756a7Sjeremylt      end
36250756a7Sjeremylt!-----------------------------------------------------------------------
37250756a7Sjeremylt      program test
38250756a7Sjeremylt
39250756a7Sjeremylt      include 'ceedf.h'
40250756a7Sjeremylt
41250756a7Sjeremylt      integer ceed,err,i,j,k
4261dbc9d2Sjeremylt      integer imode
4361dbc9d2Sjeremylt      parameter(imode=ceed_noninterlaced)
44*7509a596Sjeremylt      integer stridesxtet(3),stridesutet(3),stridesxhex(3),stridesuhex(3)
45250756a7Sjeremylt      integer erestrictxtet,erestrictutet,erestrictxitet,erestrictuitet,&
46250756a7Sjeremylt&             erestrictxhex,erestrictuhex,erestrictxihex,erestrictuihex
47250756a7Sjeremylt      integer bxtet,butet,bxhex,buhex
48250756a7Sjeremylt      integer qf_setuptet,qf_masstet,qf_setuphex,qf_masshex
49250756a7Sjeremylt      integer op_setuptet,op_masstet,op_setuphex,op_masshex,op_setup,op_mass
50250756a7Sjeremylt      integer qdatatet,qdatahex,x,u,v
51250756a7Sjeremylt      integer nelemtet,nelemhex,ptet,phex,qtet,qhex,d
52250756a7Sjeremylt      integer row,col,offset
53250756a7Sjeremylt      parameter(nelemtet=6)
54250756a7Sjeremylt      parameter(ptet=6)
55250756a7Sjeremylt      parameter(qtet=4)
56250756a7Sjeremylt      parameter(nelemhex=6)
57250756a7Sjeremylt      parameter(phex=3)
58250756a7Sjeremylt      parameter(qhex=4)
59250756a7Sjeremylt      parameter(d=2)
60250756a7Sjeremylt      integer ndofs,nqptstet,nqptshex,nqpts,nx,ny,nxtet,nytet,nxhex
61250756a7Sjeremylt      parameter(nx=3)
62250756a7Sjeremylt      parameter(ny=3)
63250756a7Sjeremylt      parameter(nxtet=3)
64250756a7Sjeremylt      parameter(nytet=1)
65250756a7Sjeremylt      parameter(nxhex=3)
66250756a7Sjeremylt      parameter(ndofs=(nx*2+1)*(ny*2+1))
67250756a7Sjeremylt      parameter(nqptstet=nelemtet*qtet)
68250756a7Sjeremylt      parameter(nqptshex=nelemhex*qhex*qhex)
69250756a7Sjeremylt      parameter(nqpts=nqptstet+nqptshex)
70250756a7Sjeremylt      integer indxtet(nelemtet*ptet),indxhex(nelemhex*phex*phex)
71250756a7Sjeremylt      real*8 arrx(d*ndofs)
72250756a7Sjeremylt      integer*8 voffset,xoffset
73250756a7Sjeremylt
74250756a7Sjeremylt      real*8 qref(d*qtet)
75250756a7Sjeremylt      real*8 qweight(qtet)
76250756a7Sjeremylt      real*8 interp(ptet*qtet)
77250756a7Sjeremylt      real*8 grad(d*ptet*qtet)
78250756a7Sjeremylt
79250756a7Sjeremylt      real*8 hv(ndofs)
80250756a7Sjeremylt      real*8 total
81250756a7Sjeremylt
82250756a7Sjeremylt      character arg*32
83250756a7Sjeremylt
84250756a7Sjeremylt      external setup,mass
85250756a7Sjeremylt
86250756a7Sjeremylt      call getarg(1,arg)
87250756a7Sjeremylt
88250756a7Sjeremylt      call ceedinit(trim(arg)//char(0),ceed,err)
89250756a7Sjeremylt
90250756a7Sjeremylt! DoF Coordinates
91250756a7Sjeremylt      do i=0,ny*2
92250756a7Sjeremylt        do j=0,nx*2
93250756a7Sjeremylt          arrx(i+j*(ny*2+1)+0*ndofs+1)=1.d0*i/(2*ny)
94250756a7Sjeremylt          arrx(i+j*(ny*2+1)+1*ndofs+1)=1.d0*j/(2*nx)
95250756a7Sjeremylt        enddo
96250756a7Sjeremylt      enddo
97250756a7Sjeremylt
98250756a7Sjeremylt      call ceedvectorcreate(ceed,d*ndofs,x,err)
99250756a7Sjeremylt      xoffset=0
100250756a7Sjeremylt      call ceedvectorsetarray(x,ceed_mem_host,ceed_use_pointer,arrx,xoffset,err)
101250756a7Sjeremylt
102250756a7Sjeremylt! Qdata Vectors
103250756a7Sjeremylt      call ceedvectorcreate(ceed,nqptstet,qdatatet,err)
104250756a7Sjeremylt      call ceedvectorcreate(ceed,nqptshex,qdatahex,err)
105250756a7Sjeremylt
106250756a7Sjeremylt! Tet Elements
107250756a7Sjeremylt      do i=0,2
108250756a7Sjeremylt        col=mod(i,nx)
109250756a7Sjeremylt        row=i/nx
110250756a7Sjeremylt        offset=col*2+row*(nx*2+1)*2
111250756a7Sjeremylt
112250756a7Sjeremylt        indxtet(i*2*ptet+1)=2+offset
113250756a7Sjeremylt        indxtet(i*2*ptet+2)=9+offset
114250756a7Sjeremylt        indxtet(i*2*ptet+3)=16+offset
115250756a7Sjeremylt        indxtet(i*2*ptet+4)=1+offset
116250756a7Sjeremylt        indxtet(i*2*ptet+5)=8+offset
117250756a7Sjeremylt        indxtet(i*2*ptet+6)=0+offset
118250756a7Sjeremylt
119250756a7Sjeremylt        indxtet(i*2*ptet+7)=14+offset
120250756a7Sjeremylt        indxtet(i*2*ptet+8)=7+offset
121250756a7Sjeremylt        indxtet(i*2*ptet+9)=0+offset
122250756a7Sjeremylt        indxtet(i*2*ptet+10)=15+offset
123250756a7Sjeremylt        indxtet(i*2*ptet+11)=8+offset
124250756a7Sjeremylt        indxtet(i*2*ptet+12)=16+offset
125250756a7Sjeremylt      enddo
126250756a7Sjeremylt
127250756a7Sjeremylt! -- Restrictions
12861dbc9d2Sjeremylt      call ceedelemrestrictioncreate(ceed,imode,nelemtet,ptet,ndofs,d,&
129a8d32208Sjeremylt     & ceed_mem_host,ceed_use_pointer,indxtet,erestrictxtet,err)
130*7509a596Sjeremylt      stridesxtet=[1,ptet,ptet*d]
131*7509a596Sjeremylt      call ceedelemrestrictioncreatestrided(ceed,nelemtet,ptet,&
132*7509a596Sjeremylt     & nelemtet*ptet,d,stridesxtet,erestrictxitet,err)
133250756a7Sjeremylt
13461dbc9d2Sjeremylt      call ceedelemrestrictioncreate(ceed,imode,nelemtet,ptet,ndofs,1,&
135a8d32208Sjeremylt     & ceed_mem_host,ceed_use_pointer,indxtet,erestrictutet,err)
136*7509a596Sjeremylt      stridesutet=[1,qtet,qtet]
137*7509a596Sjeremylt      call ceedelemrestrictioncreatestrided(ceed,nelemtet,qtet,nqptstet,&
138*7509a596Sjeremylt     & 1,stridesutet,erestrictuitet,err)
139250756a7Sjeremylt
140250756a7Sjeremylt! -- Bases
141250756a7Sjeremylt      call buildmats(qref,qweight,interp,grad)
142250756a7Sjeremylt      call ceedbasiscreateh1(ceed,ceed_triangle,d,ptet,qtet,interp,grad,qref,&
143250756a7Sjeremylt     & qweight,bxtet,err)
144250756a7Sjeremylt      call buildmats(qref,qweight,interp,grad)
145250756a7Sjeremylt      call ceedbasiscreateh1(ceed,ceed_triangle,1,ptet,qtet,interp,grad,qref,&
146250756a7Sjeremylt     & qweight,butet,err)
147250756a7Sjeremylt
148250756a7Sjeremylt! -- QFunctions
149250756a7Sjeremylt      call ceedqfunctioncreateinterior(ceed,1,setup,&
150250756a7Sjeremylt     &SOURCE_DIR&
151250756a7Sjeremylt     &//'t510-operator.h:setup'//char(0),qf_setuptet,err)
152250756a7Sjeremylt      call ceedqfunctionaddinput(qf_setuptet,'_weight',1,ceed_eval_weight,err)
153250756a7Sjeremylt      call ceedqfunctionaddinput(qf_setuptet,'dx',d*d,ceed_eval_grad,err)
154250756a7Sjeremylt      call ceedqfunctionaddoutput(qf_setuptet,'rho',1,ceed_eval_none,err)
155250756a7Sjeremylt
156250756a7Sjeremylt      call ceedqfunctioncreateinterior(ceed,1,mass,&
157250756a7Sjeremylt     &SOURCE_DIR&
158250756a7Sjeremylt     &//'t510-operator.h:mass'//char(0),qf_masstet,err)
159250756a7Sjeremylt      call ceedqfunctionaddinput(qf_masstet,'rho',1,ceed_eval_none,err)
160250756a7Sjeremylt      call ceedqfunctionaddinput(qf_masstet,'u',1,ceed_eval_interp,err)
161250756a7Sjeremylt      call ceedqfunctionaddoutput(qf_masstet,'v',1,ceed_eval_interp,err)
162250756a7Sjeremylt
163250756a7Sjeremylt! -- Operators
164250756a7Sjeremylt! ---- Setup Tet
165250756a7Sjeremylt      call ceedoperatorcreate(ceed,qf_setuptet,ceed_qfunction_none,&
166250756a7Sjeremylt     & ceed_qfunction_none,op_setuptet,err)
167250756a7Sjeremylt      call ceedoperatorsetfield(op_setuptet,'_weight',erestrictxitet,&
168a8d32208Sjeremylt     & bxtet,ceed_vector_none,err)
169250756a7Sjeremylt      call ceedoperatorsetfield(op_setuptet,'dx',erestrictxtet,&
170a8d32208Sjeremylt     & bxtet,ceed_vector_active,err)
171250756a7Sjeremylt      call ceedoperatorsetfield(op_setuptet,'rho',erestrictuitet,&
172a8d32208Sjeremylt     & ceed_basis_collocated,qdatatet,err)
173250756a7Sjeremylt! ---- Mass Tet
174250756a7Sjeremylt      call ceedoperatorcreate(ceed,qf_masstet,ceed_qfunction_none,&
175250756a7Sjeremylt     & ceed_qfunction_none,op_masstet,err)
176250756a7Sjeremylt      call ceedoperatorsetfield(op_masstet,'rho',erestrictuitet,&
177a8d32208Sjeremylt     & ceed_basis_collocated,qdatatet,err)
178250756a7Sjeremylt      call ceedoperatorsetfield(op_masstet,'u',erestrictutet,&
179a8d32208Sjeremylt     & butet,ceed_vector_active,err)
180250756a7Sjeremylt      call ceedoperatorsetfield(op_masstet,'v',erestrictutet,&
181a8d32208Sjeremylt     & butet,ceed_vector_active,err)
182250756a7Sjeremylt
183250756a7Sjeremylt! Hex Elements
184250756a7Sjeremylt      do i=0,nelemhex-1
185250756a7Sjeremylt        col=mod(i,nx)
186250756a7Sjeremylt        row=i/nx
187250756a7Sjeremylt        offset=(nxtet*2+1)*(nytet*2)*(1+row)+col*2
188250756a7Sjeremylt        do j=0,phex-1
189250756a7Sjeremylt          do k=0,phex-1
190250756a7Sjeremylt            indxhex(phex*(phex*i+k)+j+1)=offset+k*(nxhex*2+1)+j
191250756a7Sjeremylt          enddo
192250756a7Sjeremylt        enddo
193250756a7Sjeremylt      enddo
194250756a7Sjeremylt
195250756a7Sjeremylt! -- Restrictions
19661dbc9d2Sjeremylt      call ceedelemrestrictioncreate(ceed,imode,nelemhex,phex*phex,ndofs,d,&
197250756a7Sjeremylt     & ceed_mem_host,ceed_use_pointer,indxhex,erestrictxhex,err)
198*7509a596Sjeremylt      stridesxhex=[1,phex*phex,phex*phex*d]
199*7509a596Sjeremylt      call ceedelemrestrictioncreatestrided(ceed,nelemhex,phex*phex,&
200*7509a596Sjeremylt     & nelemhex*phex*phex,d,stridesxhex,erestrictxihex,err)
201250756a7Sjeremylt
20261dbc9d2Sjeremylt      call ceedelemrestrictioncreate(ceed,imode,nelemhex,phex*phex,ndofs,1,&
203250756a7Sjeremylt     & ceed_mem_host,ceed_use_pointer,indxhex,erestrictuhex,err)
204*7509a596Sjeremylt      stridesuhex=[1,qhex*qhex,qhex*qhex]
205*7509a596Sjeremylt      call ceedelemrestrictioncreatestrided(ceed,nelemhex,qhex*qhex,&
206*7509a596Sjeremylt     & nqptshex,1,stridesuhex,erestrictuihex,err)
207250756a7Sjeremylt
208250756a7Sjeremylt! -- Bases
209250756a7Sjeremylt      call ceedbasiscreatetensorh1lagrange(ceed,d,d,phex,qhex,ceed_gauss,&
210250756a7Sjeremylt     & bxhex,err)
211250756a7Sjeremylt      call ceedbasiscreatetensorh1lagrange(ceed,d,1,phex,qhex,ceed_gauss,&
212250756a7Sjeremylt     & buhex,err)
213250756a7Sjeremylt
214250756a7Sjeremylt! -- QFunctions
215250756a7Sjeremylt      call ceedqfunctioncreateinterior(ceed,1,setup,&
216250756a7Sjeremylt     &SOURCE_DIR&
217872c4ebbSjeremylt     &//'t510-operator.h:setup'//char(0),qf_setuphex,err)
218250756a7Sjeremylt      call ceedqfunctionaddinput(qf_setuphex,'_weight',1,ceed_eval_weight,err)
219250756a7Sjeremylt      call ceedqfunctionaddinput(qf_setuphex,'dx',d*d,ceed_eval_grad,err)
220250756a7Sjeremylt      call ceedqfunctionaddoutput(qf_setuphex,'rho',1,ceed_eval_none,err)
221250756a7Sjeremylt
222250756a7Sjeremylt      call ceedqfunctioncreateinterior(ceed,1,mass,&
223250756a7Sjeremylt     &SOURCE_DIR&
224872c4ebbSjeremylt     &//'t510-operator.h:mass'//char(0),qf_masshex,err)
225250756a7Sjeremylt      call ceedqfunctionaddinput(qf_masshex,'rho',1,ceed_eval_none,err)
226250756a7Sjeremylt      call ceedqfunctionaddinput(qf_masshex,'u',1,ceed_eval_interp,err)
227250756a7Sjeremylt      call ceedqfunctionaddoutput(qf_masshex,'v',1,ceed_eval_interp,err)
228250756a7Sjeremylt
229250756a7Sjeremylt! -- Operators
230250756a7Sjeremylt! ---- Setup Hex
231250756a7Sjeremylt      call ceedoperatorcreate(ceed,qf_setuphex,ceed_qfunction_none,&
232250756a7Sjeremylt     & ceed_qfunction_none,op_setuphex,&
233250756a7Sjeremylt     & err)
234250756a7Sjeremylt      call ceedoperatorsetfield(op_setuphex,'_weight',erestrictxihex,&
235a8d32208Sjeremylt     & bxhex,ceed_vector_none,err)
236250756a7Sjeremylt      call ceedoperatorsetfield(op_setuphex,'dx',erestrictxhex,&
237a8d32208Sjeremylt     & bxhex,ceed_vector_active,err)
238250756a7Sjeremylt      call ceedoperatorsetfield(op_setuphex,'rho',erestrictuihex,&
239a8d32208Sjeremylt     & ceed_basis_collocated,qdatahex,err)
240250756a7Sjeremylt! ---- Mass Hex
241250756a7Sjeremylt      call ceedoperatorcreate(ceed,qf_masshex,ceed_qfunction_none,&
242250756a7Sjeremylt     & ceed_qfunction_none,op_masshex,&
243250756a7Sjeremylt     & err)
244250756a7Sjeremylt      call ceedoperatorsetfield(op_masshex,'rho',erestrictuihex,&
245a8d32208Sjeremylt     & ceed_basis_collocated,qdatahex,err)
246250756a7Sjeremylt      call ceedoperatorsetfield(op_masshex,'u',erestrictuhex,&
247a8d32208Sjeremylt     & buhex,ceed_vector_active,err)
248250756a7Sjeremylt      call ceedoperatorsetfield(op_masshex,'v',erestrictuhex,&
249a8d32208Sjeremylt     & buhex,ceed_vector_active,err)
250250756a7Sjeremylt
251250756a7Sjeremylt! Composite Operators
252250756a7Sjeremylt      call ceedcompositeoperatorcreate(ceed,op_setup,err)
253250756a7Sjeremylt      call ceedcompositeoperatoraddsub(op_setup,op_setuptet,err)
254250756a7Sjeremylt      call ceedcompositeoperatoraddsub(op_setup,op_setuphex,err)
255250756a7Sjeremylt
256250756a7Sjeremylt      call ceedcompositeoperatorcreate(ceed,op_mass,err)
257250756a7Sjeremylt      call ceedcompositeoperatoraddsub(op_mass,op_masstet,err)
258250756a7Sjeremylt      call ceedcompositeoperatoraddsub(op_mass,op_masshex,err)
259250756a7Sjeremylt
260250756a7Sjeremylt! Apply Setup Operator
261250756a7Sjeremylt      call ceedoperatorapply(op_setup,x,ceed_vector_none,&
262250756a7Sjeremylt     & ceed_request_immediate,err)
263250756a7Sjeremylt
264250756a7Sjeremylt! Apply Mass Operator
265250756a7Sjeremylt      call ceedvectorcreate(ceed,ndofs,u,err)
266250756a7Sjeremylt      call ceedvectorsetvalue(u,1.d0,err)
267250756a7Sjeremylt      call ceedvectorcreate(ceed,ndofs,v,err)
268250756a7Sjeremylt      call ceedvectorsetvalue(v,0.d0,err)
269250756a7Sjeremylt
270250756a7Sjeremylt      call ceedoperatorapplyadd(op_mass,u,v,ceed_request_immediate,err)
271250756a7Sjeremylt
272250756a7Sjeremylt! Check Output
273250756a7Sjeremylt      call ceedvectorgetarrayread(v,ceed_mem_host,hv,voffset,err)
274250756a7Sjeremylt      total=0.
275250756a7Sjeremylt      do i=1,ndofs
276250756a7Sjeremylt        total=total+hv(voffset+i)
277250756a7Sjeremylt      enddo
278250756a7Sjeremylt      if (abs(total-1.)>1.0d-10) then
279250756a7Sjeremylt! LCOV_EXCL_START
280250756a7Sjeremylt        write(*,*) 'Computed Area: ',total,' != True Area: 1.0'
281250756a7Sjeremylt! LCOV_EXCL_STOP
282250756a7Sjeremylt      endif
283250756a7Sjeremylt      call ceedvectorrestorearrayread(v,hv,voffset,err)
284250756a7Sjeremylt
285250756a7Sjeremylt      call ceedvectorsetvalue(v,1.d0,err)
286250756a7Sjeremylt      call ceedoperatorapplyadd(op_mass,u,v,ceed_request_immediate,err)
287250756a7Sjeremylt
288250756a7Sjeremylt! Check Output
289250756a7Sjeremylt      call ceedvectorgetarrayread(v,ceed_mem_host,hv,voffset,err)
290250756a7Sjeremylt      total=-ndofs
291250756a7Sjeremylt      do i=1,ndofs
292250756a7Sjeremylt        total=total+hv(voffset+i)
293250756a7Sjeremylt      enddo
294250756a7Sjeremylt      if (abs(total-1.)>1.0d-10) then
295250756a7Sjeremylt! LCOV_EXCL_START
296250756a7Sjeremylt        write(*,*) 'Computed Area: ',total,' != True Area: 1.0'
297250756a7Sjeremylt! LCOV_EXCL_STOP
298250756a7Sjeremylt      endif
299250756a7Sjeremylt      call ceedvectorrestorearrayread(v,hv,voffset,err)
300250756a7Sjeremylt
301250756a7Sjeremylt! Cleanup
302250756a7Sjeremylt      call ceedqfunctiondestroy(qf_setuptet,err)
303250756a7Sjeremylt      call ceedqfunctiondestroy(qf_masstet,err)
304250756a7Sjeremylt      call ceedoperatordestroy(op_setuptet,err)
305250756a7Sjeremylt      call ceedoperatordestroy(op_masstet,err)
306250756a7Sjeremylt      call ceedqfunctiondestroy(qf_setuphex,err)
307250756a7Sjeremylt      call ceedqfunctiondestroy(qf_masshex,err)
308250756a7Sjeremylt      call ceedoperatordestroy(op_setuphex,err)
309250756a7Sjeremylt      call ceedoperatordestroy(op_masshex,err)
310250756a7Sjeremylt      call ceedoperatordestroy(op_setup,err)
311250756a7Sjeremylt      call ceedoperatordestroy(op_mass,err)
312250756a7Sjeremylt      call ceedelemrestrictiondestroy(erestrictutet,err)
313250756a7Sjeremylt      call ceedelemrestrictiondestroy(erestrictxtet,err)
314250756a7Sjeremylt      call ceedelemrestrictiondestroy(erestrictuitet,err)
315250756a7Sjeremylt      call ceedelemrestrictiondestroy(erestrictxitet,err)
316250756a7Sjeremylt      call ceedelemrestrictiondestroy(erestrictuhex,err)
317250756a7Sjeremylt      call ceedelemrestrictiondestroy(erestrictxhex,err)
318250756a7Sjeremylt      call ceedelemrestrictiondestroy(erestrictuihex,err)
319250756a7Sjeremylt      call ceedelemrestrictiondestroy(erestrictxihex,err)
320250756a7Sjeremylt      call ceedbasisdestroy(butet,err)
321250756a7Sjeremylt      call ceedbasisdestroy(bxtet,err)
322250756a7Sjeremylt      call ceedbasisdestroy(buhex,err)
323250756a7Sjeremylt      call ceedbasisdestroy(bxhex,err)
324250756a7Sjeremylt      call ceedvectordestroy(x,err)
325250756a7Sjeremylt      call ceedvectordestroy(u,err)
326250756a7Sjeremylt      call ceedvectordestroy(v,err)
327250756a7Sjeremylt      call ceedvectordestroy(qdatatet,err)
328250756a7Sjeremylt      call ceedvectordestroy(qdatahex,err)
329250756a7Sjeremylt      call ceeddestroy(ceed,err)
330250756a7Sjeremylt      end
331250756a7Sjeremylt!-----------------------------------------------------------------------
332