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