1b6faaefaSjeremylt!----------------------------------------------------------------------- 2b6faaefaSjeremylt! 3b6faaefaSjeremylt! Header with common subroutine 4b6faaefaSjeremylt! 5b6faaefaSjeremylt include 't320-basis-f.h' 6b6faaefaSjeremylt!----------------------------------------------------------------------- 7b6faaefaSjeremylt subroutine setup(ctx,q,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,& 8b6faaefaSjeremylt& u15,u16,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,ierr) 9b6faaefaSjeremylt real*8 ctx 10b6faaefaSjeremylt real*8 u1(1) 11b6faaefaSjeremylt real*8 u2(1) 12b6faaefaSjeremylt real*8 v1(1) 13b6faaefaSjeremylt real*8 w 14b6faaefaSjeremylt integer q,ierr 15b6faaefaSjeremylt 16b6faaefaSjeremylt do i=1,q 17b6faaefaSjeremylt w = u1(i)/(u2(i+0*q)*u2(i+3*q)-u2(i+1*q)*u2(i+2*q)) 18b6faaefaSjeremylt v1(i+0*q)=w*(u2(i+2*q)*u2(i+2*q)+u2(i+3*q)*u2(i+3*q)) 19b6faaefaSjeremylt v1(i+1*q)=w*(u2(i+0*q)*u2(i+0*q)+u2(i+1*q)*u2(i+1*q)) 20b6faaefaSjeremylt v1(i+2*q)=w*(u2(i+0*q)*u2(i+2*q)+u2(i+1*q)*u2(i+3*q)) 21b6faaefaSjeremylt enddo 22b6faaefaSjeremylt 23b6faaefaSjeremylt ierr=0 24b6faaefaSjeremylt end 25b6faaefaSjeremylt!----------------------------------------------------------------------- 26b6faaefaSjeremylt subroutine diff(ctx,q,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,& 27b6faaefaSjeremylt& u15,u16,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,ierr) 28b6faaefaSjeremylt real*8 ctx 29b6faaefaSjeremylt real*8 u1(1) 30b6faaefaSjeremylt real*8 u2(1) 31b6faaefaSjeremylt real*8 v1(1) 32b6faaefaSjeremylt integer q,ierr 33b6faaefaSjeremylt 34b6faaefaSjeremylt do i=1,q 35b6faaefaSjeremylt v1(i+0*q)=u1(i+0*q)*u2(i+0*q)+u1(i+2*q)*u2(i+1*q) 36b6faaefaSjeremylt v1(i+1*q)=u1(i+2*q)*u2(i+0*q)+u1(i+1*q)*u2(i+1*q) 37b6faaefaSjeremylt enddo 38b6faaefaSjeremylt 39b6faaefaSjeremylt ierr=0 40b6faaefaSjeremylt end 41b6faaefaSjeremylt!----------------------------------------------------------------------- 42b6faaefaSjeremylt program test 43b6faaefaSjeremylt 44b6faaefaSjeremylt include 'ceedf.h' 45b6faaefaSjeremylt 46b6faaefaSjeremylt integer ceed,err,i,j,k 4761dbc9d2Sjeremylt integer imode 4861dbc9d2Sjeremylt parameter(imode=ceed_noninterlaced) 49*7509a596Sjeremylt integer stridesxtet(3),stridesqdtet(3),stridesxhex(3),stridesqdhex(3) 50b6faaefaSjeremylt integer erestrictxtet,erestrictutet,erestrictxitet,erestrictqditet,& 51b6faaefaSjeremylt& erestrictxhex,erestrictuhex,erestrictxihex,erestrictqdihex 52b6faaefaSjeremylt integer bxtet,butet,bxhex,buhex 53b6faaefaSjeremylt integer qf_setuptet,qf_difftet,qf_setuphex,qf_diffhex 54b6faaefaSjeremylt integer op_setuptet,op_difftet,op_setuphex,op_diffhex,op_setup,op_diff 55b6faaefaSjeremylt integer qdatatet,qdatahex,x,u,v 56b6faaefaSjeremylt integer nelemtet,nelemhex,ptet,phex,qtet,qhex,d 57b6faaefaSjeremylt integer row,col,offset 58b6faaefaSjeremylt parameter(nelemtet=6) 59b6faaefaSjeremylt parameter(ptet=6) 60b6faaefaSjeremylt parameter(qtet=4) 61b6faaefaSjeremylt parameter(nelemhex=6) 62b6faaefaSjeremylt parameter(phex=3) 63b6faaefaSjeremylt parameter(qhex=4) 64b6faaefaSjeremylt parameter(d=2) 65b6faaefaSjeremylt integer ndofs,nqptstet,nqptshex,nqpts,nx,ny,nxtet,nytet,nxhex 66b6faaefaSjeremylt parameter(nx=3) 67b6faaefaSjeremylt parameter(ny=3) 68b6faaefaSjeremylt parameter(nxtet=3) 69b6faaefaSjeremylt parameter(nytet=1) 70b6faaefaSjeremylt parameter(nxhex=3) 71b6faaefaSjeremylt parameter(ndofs=(nx*2+1)*(ny*2+1)) 72b6faaefaSjeremylt parameter(nqptstet=nelemtet*qtet) 73b6faaefaSjeremylt parameter(nqptshex=nelemhex*qhex*qhex) 74b6faaefaSjeremylt parameter(nqpts=nqptstet+nqptshex) 75b6faaefaSjeremylt integer indxtet(nelemtet*ptet),indxhex(nelemhex*phex*phex) 76b6faaefaSjeremylt real*8 arrx(d*ndofs) 77b6faaefaSjeremylt integer*8 voffset,xoffset 78b6faaefaSjeremylt 79b6faaefaSjeremylt real*8 qref(d*qtet) 80b6faaefaSjeremylt real*8 qweight(qtet) 81b6faaefaSjeremylt real*8 interp(ptet*qtet) 82b6faaefaSjeremylt real*8 grad(d*ptet*qtet) 83b6faaefaSjeremylt 84b6faaefaSjeremylt real*8 hv(ndofs) 85b6faaefaSjeremylt real*8 total 86b6faaefaSjeremylt 87b6faaefaSjeremylt character arg*32 88b6faaefaSjeremylt 89b6faaefaSjeremylt external setup,diff 90b6faaefaSjeremylt 91b6faaefaSjeremylt call getarg(1,arg) 92b6faaefaSjeremylt 93b6faaefaSjeremylt call ceedinit(trim(arg)//char(0),ceed,err) 94b6faaefaSjeremylt 95b6faaefaSjeremylt! DoF Coordinates 96b6faaefaSjeremylt do i=0,ny*2 97b6faaefaSjeremylt do j=0,nx*2 98b6faaefaSjeremylt arrx(i+j*(ny*2+1)+0*ndofs+1)=1.d0*i/(2*ny) 99b6faaefaSjeremylt arrx(i+j*(ny*2+1)+1*ndofs+1)=1.d0*j/(2*nx) 100b6faaefaSjeremylt enddo 101b6faaefaSjeremylt enddo 102b6faaefaSjeremylt 103b6faaefaSjeremylt call ceedvectorcreate(ceed,d*ndofs,x,err) 104b6faaefaSjeremylt xoffset=0 105b6faaefaSjeremylt call ceedvectorsetarray(x,ceed_mem_host,ceed_use_pointer,arrx,xoffset,err) 106b6faaefaSjeremylt 107b6faaefaSjeremylt! Qdata Vectors 108b6faaefaSjeremylt call ceedvectorcreate(ceed,nqptstet*d*(d+1)/2,qdatatet,err) 109b6faaefaSjeremylt call ceedvectorcreate(ceed,nqptshex*d*(d+1)/2,qdatahex,err) 110b6faaefaSjeremylt 111b6faaefaSjeremylt! Tet Elements 112b6faaefaSjeremylt do i=0,2 113b6faaefaSjeremylt col=mod(i,nx) 114b6faaefaSjeremylt row=i/nx 115b6faaefaSjeremylt offset=col*2+row*(nx*2+1)*2 116b6faaefaSjeremylt 117b6faaefaSjeremylt indxtet(i*2*ptet+1)=2+offset 118b6faaefaSjeremylt indxtet(i*2*ptet+2)=9+offset 119b6faaefaSjeremylt indxtet(i*2*ptet+3)=16+offset 120b6faaefaSjeremylt indxtet(i*2*ptet+4)=1+offset 121b6faaefaSjeremylt indxtet(i*2*ptet+5)=8+offset 122b6faaefaSjeremylt indxtet(i*2*ptet+6)=0+offset 123b6faaefaSjeremylt 124b6faaefaSjeremylt indxtet(i*2*ptet+7)=14+offset 125b6faaefaSjeremylt indxtet(i*2*ptet+8)=7+offset 126b6faaefaSjeremylt indxtet(i*2*ptet+9)=0+offset 127b6faaefaSjeremylt indxtet(i*2*ptet+10)=15+offset 128b6faaefaSjeremylt indxtet(i*2*ptet+11)=8+offset 129b6faaefaSjeremylt indxtet(i*2*ptet+12)=16+offset 130b6faaefaSjeremylt enddo 131b6faaefaSjeremylt 132b6faaefaSjeremylt! -- Restrictions 13361dbc9d2Sjeremylt call ceedelemrestrictioncreate(ceed,imode,nelemtet,ptet,ndofs,d,& 134a8d32208Sjeremylt & ceed_mem_host,ceed_use_pointer,indxtet,erestrictxtet,err) 135*7509a596Sjeremylt stridesxtet=[1,ptet,d*ptet] 136*7509a596Sjeremylt call ceedelemrestrictioncreatestrided(ceed,nelemtet,ptet,& 137*7509a596Sjeremylt & nelemtet*ptet,d,stridesxtet,erestrictxitet,err) 138b6faaefaSjeremylt 13961dbc9d2Sjeremylt call ceedelemrestrictioncreate(ceed,imode,nelemtet,ptet,ndofs,1,& 140a8d32208Sjeremylt & ceed_mem_host,ceed_use_pointer,indxtet,erestrictutet,err) 141*7509a596Sjeremylt stridesqdtet=[1,qtet,qtet*d*(d+1)/2] 142*7509a596Sjeremylt call ceedelemrestrictioncreatestrided(ceed,nelemtet,qtet,nqptstet,& 143*7509a596Sjeremylt & d*(d+1)/2,stridesqdtet,erestrictqditet,err) 144b6faaefaSjeremylt 145b6faaefaSjeremylt! -- Bases 146b6faaefaSjeremylt call buildmats(qref,qweight,interp,grad) 147b6faaefaSjeremylt call ceedbasiscreateh1(ceed,ceed_triangle,d,ptet,qtet,interp,grad,qref,& 148b6faaefaSjeremylt & qweight,bxtet,err) 149b6faaefaSjeremylt call buildmats(qref,qweight,interp,grad) 150b6faaefaSjeremylt call ceedbasiscreateh1(ceed,ceed_triangle,1,ptet,qtet,interp,grad,qref,& 151b6faaefaSjeremylt & qweight,butet,err) 152b6faaefaSjeremylt 153b6faaefaSjeremylt! -- QFunctions 154b6faaefaSjeremylt call ceedqfunctioncreateinterior(ceed,1,setup,& 155b6faaefaSjeremylt &SOURCE_DIR& 156a05f9790Sjeremylt &//'t522-operator.h:setup'//char(0),qf_setuptet,err) 157b6faaefaSjeremylt call ceedqfunctionaddinput(qf_setuptet,'_weight',1,ceed_eval_weight,err) 158b6faaefaSjeremylt call ceedqfunctionaddinput(qf_setuptet,'dx',d*d,ceed_eval_grad,err) 159b6faaefaSjeremylt call ceedqfunctionaddoutput(qf_setuptet,'rho',d*(d+1)/2,ceed_eval_none,& 160b6faaefaSjeremylt & err) 161b6faaefaSjeremylt 162b6faaefaSjeremylt call ceedqfunctioncreateinterior(ceed,1,diff,& 163b6faaefaSjeremylt &SOURCE_DIR& 164a05f9790Sjeremylt &//'t522-operator.h:diff'//char(0),qf_difftet,err) 165b6faaefaSjeremylt call ceedqfunctionaddinput(qf_difftet,'rho',d*(d+1)/2,ceed_eval_none,err) 166b6faaefaSjeremylt call ceedqfunctionaddinput(qf_difftet,'u',d,ceed_eval_grad,err) 167b6faaefaSjeremylt call ceedqfunctionaddoutput(qf_difftet,'v',d,ceed_eval_grad,err) 168b6faaefaSjeremylt 169b6faaefaSjeremylt! -- Operators 170b6faaefaSjeremylt! ---- Setup Tet 171442e7f0bSjeremylt call ceedoperatorcreate(ceed,qf_setuptet,ceed_qfunction_none,& 172442e7f0bSjeremylt & ceed_qfunction_none,op_setuptet,err) 173b6faaefaSjeremylt call ceedoperatorsetfield(op_setuptet,'_weight',erestrictxitet,& 174a8d32208Sjeremylt & bxtet,ceed_vector_none,err) 175b6faaefaSjeremylt call ceedoperatorsetfield(op_setuptet,'dx',erestrictxtet,& 176a8d32208Sjeremylt & bxtet,ceed_vector_active,err) 177b6faaefaSjeremylt call ceedoperatorsetfield(op_setuptet,'rho',erestrictqditet,& 178a8d32208Sjeremylt & ceed_basis_collocated,qdatatet,err) 179b6faaefaSjeremylt! ---- diff Tet 180442e7f0bSjeremylt call ceedoperatorcreate(ceed,qf_difftet,ceed_qfunction_none,& 181442e7f0bSjeremylt & ceed_qfunction_none,op_difftet,err) 182b6faaefaSjeremylt call ceedoperatorsetfield(op_difftet,'rho',erestrictqditet,& 183a8d32208Sjeremylt & ceed_basis_collocated,qdatatet,err) 184b6faaefaSjeremylt call ceedoperatorsetfield(op_difftet,'u',erestrictutet,& 185a8d32208Sjeremylt & butet,ceed_vector_active,err) 186b6faaefaSjeremylt call ceedoperatorsetfield(op_difftet,'v',erestrictutet,& 187a8d32208Sjeremylt & butet,ceed_vector_active,err) 188b6faaefaSjeremylt 189b6faaefaSjeremylt! Hex Elements 190b6faaefaSjeremylt do i=0,nelemhex-1 191b6faaefaSjeremylt col=mod(i,nx) 192b6faaefaSjeremylt row=i/nx 193b6faaefaSjeremylt offset=(nxtet*2+1)*(nytet*2)*(1+row)+col*2 194b6faaefaSjeremylt do j=0,phex-1 195b6faaefaSjeremylt do k=0,phex-1 196b6faaefaSjeremylt indxhex(phex*(phex*i+k)+j+1)=offset+k*(nxhex*2+1)+j 197b6faaefaSjeremylt enddo 198b6faaefaSjeremylt enddo 199b6faaefaSjeremylt enddo 200b6faaefaSjeremylt 201b6faaefaSjeremylt! -- Restrictions 20261dbc9d2Sjeremylt call ceedelemrestrictioncreate(ceed,imode,nelemhex,phex*phex,ndofs,d,& 203b6faaefaSjeremylt & ceed_mem_host,ceed_use_pointer,indxhex,erestrictxhex,err) 204*7509a596Sjeremylt stridesxhex=[1,phex*phex,phex*phex*d] 205*7509a596Sjeremylt call ceedelemrestrictioncreatestrided(ceed,nelemhex,phex*phex,& 206*7509a596Sjeremylt & nelemhex*phex*phex,d,stridesxhex,erestrictxihex,err) 207b6faaefaSjeremylt 20861dbc9d2Sjeremylt call ceedelemrestrictioncreate(ceed,imode,nelemhex,phex*phex,ndofs,1,& 209b6faaefaSjeremylt & ceed_mem_host,ceed_use_pointer,indxhex,erestrictuhex,err) 210*7509a596Sjeremylt stridesqdhex=[1,qhex*qhex,qhex*qhex*d*(d+1)/2] 211*7509a596Sjeremylt call ceedelemrestrictioncreatestrided(ceed,nelemhex,qhex*qhex,& 212*7509a596Sjeremylt & nqptshex,d*(d+1)/2,stridesqdhex,erestrictqdihex,err) 213b6faaefaSjeremylt 214b6faaefaSjeremylt! -- Bases 215b6faaefaSjeremylt call ceedbasiscreatetensorh1lagrange(ceed,d,d,phex,qhex,ceed_gauss,& 216b6faaefaSjeremylt & bxhex,err) 217b6faaefaSjeremylt call ceedbasiscreatetensorh1lagrange(ceed,d,1,phex,qhex,ceed_gauss,& 218b6faaefaSjeremylt & buhex,err) 219b6faaefaSjeremylt 220b6faaefaSjeremylt! -- QFunctions 221b6faaefaSjeremylt call ceedqfunctioncreateinterior(ceed,1,setup,& 222b6faaefaSjeremylt &SOURCE_DIR& 223872c4ebbSjeremylt &//'t522-operator.h:setup'//char(0),qf_setuphex,err) 224b6faaefaSjeremylt call ceedqfunctionaddinput(qf_setuphex,'_weight',1,ceed_eval_weight,err) 225b6faaefaSjeremylt call ceedqfunctionaddinput(qf_setuphex,'dx',d*d,ceed_eval_grad,err) 226b6faaefaSjeremylt call ceedqfunctionaddoutput(qf_setuphex,'rho',d*(d+1)/2,ceed_eval_none,& 227b6faaefaSjeremylt & err) 228b6faaefaSjeremylt 229b6faaefaSjeremylt call ceedqfunctioncreateinterior(ceed,1,diff,& 230b6faaefaSjeremylt &SOURCE_DIR& 231872c4ebbSjeremylt &//'t522-operator.h:diff'//char(0),qf_diffhex,err) 232b6faaefaSjeremylt call ceedqfunctionaddinput(qf_diffhex,'rho',d*(d+1)/2,ceed_eval_none,err) 233b6faaefaSjeremylt call ceedqfunctionaddinput(qf_diffhex,'u',d,ceed_eval_grad,err) 234b6faaefaSjeremylt call ceedqfunctionaddoutput(qf_diffhex,'v',d,ceed_eval_grad,err) 235b6faaefaSjeremylt 236b6faaefaSjeremylt! -- Operators 237b6faaefaSjeremylt! ---- Setup Hex 238442e7f0bSjeremylt call ceedoperatorcreate(ceed,qf_setuphex,ceed_qfunction_none,& 239442e7f0bSjeremylt & ceed_qfunction_none,op_setuphex,err) 240b6faaefaSjeremylt call ceedoperatorsetfield(op_setuphex,'_weight',erestrictxihex,& 241a8d32208Sjeremylt & bxhex,ceed_vector_none,err) 242b6faaefaSjeremylt call ceedoperatorsetfield(op_setuphex,'dx',erestrictxhex,& 243a8d32208Sjeremylt & bxhex,ceed_vector_active,err) 244b6faaefaSjeremylt call ceedoperatorsetfield(op_setuphex,'rho',erestrictqdihex,& 245a8d32208Sjeremylt & ceed_basis_collocated,qdatahex,err) 246b6faaefaSjeremylt! ---- diff Hex 247442e7f0bSjeremylt call ceedoperatorcreate(ceed,qf_diffhex,ceed_qfunction_none,& 248442e7f0bSjeremylt & ceed_qfunction_none,op_diffhex,err) 249b6faaefaSjeremylt call ceedoperatorsetfield(op_diffhex,'rho',erestrictqdihex,& 250a8d32208Sjeremylt & ceed_basis_collocated,qdatahex,err) 251b6faaefaSjeremylt call ceedoperatorsetfield(op_diffhex,'u',erestrictuhex,& 252a8d32208Sjeremylt & buhex,ceed_vector_active,err) 253b6faaefaSjeremylt call ceedoperatorsetfield(op_diffhex,'v',erestrictuhex,& 254a8d32208Sjeremylt & buhex,ceed_vector_active,err) 255b6faaefaSjeremylt 256b6faaefaSjeremylt! Composite Operators 257b6faaefaSjeremylt call ceedcompositeoperatorcreate(ceed,op_setup,err) 258b6faaefaSjeremylt call ceedcompositeoperatoraddsub(op_setup,op_setuptet,err) 259b6faaefaSjeremylt call ceedcompositeoperatoraddsub(op_setup,op_setuphex,err) 260b6faaefaSjeremylt 261b6faaefaSjeremylt call ceedcompositeoperatorcreate(ceed,op_diff,err) 262b6faaefaSjeremylt call ceedcompositeoperatoraddsub(op_diff,op_difftet,err) 263b6faaefaSjeremylt call ceedcompositeoperatoraddsub(op_diff,op_diffhex,err) 264b6faaefaSjeremylt 265b6faaefaSjeremylt! Apply Setup Operator 266e97ff134Sjeremylt call ceedoperatorapply(op_setup,x,ceed_vector_none,& 267e97ff134Sjeremylt & ceed_request_immediate,err) 268b6faaefaSjeremylt 269b6faaefaSjeremylt! Apply diff Operator 270b6faaefaSjeremylt call ceedvectorcreate(ceed,ndofs,u,err) 271b6faaefaSjeremylt call ceedvectorsetvalue(u,1.d0,err) 272b6faaefaSjeremylt call ceedvectorcreate(ceed,ndofs,v,err) 273b6faaefaSjeremylt 274b6faaefaSjeremylt call ceedoperatorapply(op_diff,u,v,ceed_request_immediate,err) 275b6faaefaSjeremylt 276b6faaefaSjeremylt! Check Output 277b6faaefaSjeremylt call ceedvectorgetarrayread(v,ceed_mem_host,hv,voffset,err) 278b6faaefaSjeremylt do i=1,ndofs 279b6faaefaSjeremylt if (abs(hv(voffset+i))>1.0d-14) then 280b6faaefaSjeremylt! LCOV_EXCL_START 281b6faaefaSjeremylt write(*,*) 'Computed: ',total,' != True: 0.0' 282b6faaefaSjeremylt! LCOV_EXCL_STOP 283b6faaefaSjeremylt endif 284b6faaefaSjeremylt enddo 285b6faaefaSjeremylt call ceedvectorrestorearrayread(v,hv,voffset,err) 286b6faaefaSjeremylt 287b6faaefaSjeremylt! Cleanup 288b6faaefaSjeremylt call ceedqfunctiondestroy(qf_setuptet,err) 289b6faaefaSjeremylt call ceedqfunctiondestroy(qf_difftet,err) 290b6faaefaSjeremylt call ceedoperatordestroy(op_setuptet,err) 291b6faaefaSjeremylt call ceedoperatordestroy(op_difftet,err) 292b6faaefaSjeremylt call ceedqfunctiondestroy(qf_setuphex,err) 293b6faaefaSjeremylt call ceedqfunctiondestroy(qf_diffhex,err) 294b6faaefaSjeremylt call ceedoperatordestroy(op_setuphex,err) 295b6faaefaSjeremylt call ceedoperatordestroy(op_diffhex,err) 296b6faaefaSjeremylt call ceedoperatordestroy(op_setup,err) 297b6faaefaSjeremylt call ceedoperatordestroy(op_diff,err) 298b6faaefaSjeremylt call ceedelemrestrictiondestroy(erestrictutet,err) 299b6faaefaSjeremylt call ceedelemrestrictiondestroy(erestrictxtet,err) 300b6faaefaSjeremylt call ceedelemrestrictiondestroy(erestrictqditet,err) 301b6faaefaSjeremylt call ceedelemrestrictiondestroy(erestrictxitet,err) 302b6faaefaSjeremylt call ceedelemrestrictiondestroy(erestrictuhex,err) 303b6faaefaSjeremylt call ceedelemrestrictiondestroy(erestrictxhex,err) 304b6faaefaSjeremylt call ceedelemrestrictiondestroy(erestrictqdihex,err) 305b6faaefaSjeremylt call ceedelemrestrictiondestroy(erestrictxihex,err) 306b6faaefaSjeremylt call ceedbasisdestroy(butet,err) 307b6faaefaSjeremylt call ceedbasisdestroy(bxtet,err) 308b6faaefaSjeremylt call ceedbasisdestroy(buhex,err) 309b6faaefaSjeremylt call ceedbasisdestroy(bxhex,err) 310b6faaefaSjeremylt call ceedvectordestroy(x,err) 311b6faaefaSjeremylt call ceedvectordestroy(u,err) 312b6faaefaSjeremylt call ceedvectordestroy(v,err) 313b6faaefaSjeremylt call ceedvectordestroy(qdatatet,err) 314b6faaefaSjeremylt call ceedvectordestroy(qdatahex,err) 315b6faaefaSjeremylt call ceeddestroy(ceed,err) 316b6faaefaSjeremylt end 317b6faaefaSjeremylt!----------------------------------------------------------------------- 318