//  [python]
def writeMeshXdmf_particles(self,ar,mesh,spaceDim,x,t=0.0,
                                init=False,meshChanged=False,arGrid=None,tCount=0,
                                spaceSuffix = "_particles"):
        """
        write out arbitrary set of points on a mesh
        """
        #spaceSuffix = "_particles"
        #write out basic geometry if not already done?
        mesh.writeMeshXdmf(ar,"Spatial_Domain",t,init,meshChanged,tCount=tCount)
        #now try to write out a mesh that is a collection of points per element

        gridName = self.setGridCollectionAndGridElements(init,ar,arGrid,t,spaceSuffix)
        nPoints = numpy.cumprod(x.shape)[-2]
        if self.arGrid is None or self.arTime.get('Value') != "{0:e}".format(t):
            Xdmf_ElementTopology = "Polyvertex"
            Xdmf_NumberOfElements= nPoints
            Xdmf_NodesPerElement = 1
            Xdmf_NodesGlobal     = nPoints

            self.arGrid = SubElement(self.arGridCollection,"Grid",{"Name":gridName,"GridType":"Uniform"})
            self.arTime = SubElement(self.arGrid,"Time",{"Value":"%e" % (t,),"Name":str(tCount)})
            topology    = SubElement(self.arGrid,"Topology",
                                     {"Type":Xdmf_ElementTopology,
                                      "NumberOfElements":str(Xdmf_NumberOfElements),
                                      "NodesPerElement":str(Xdmf_NodesPerElement)})
            elements    = SubElement(topology,"DataItem",
                                     {"Format":ar.dataItemFormat,
                                      "DataType":"Int",
                                      "Dimensions":"%i %i" % (Xdmf_NumberOfElements,Xdmf_NodesPerElement)})
            geometry    = SubElement(self.arGrid,"Geometry",{"Type":"XYZ"})
            nodes       = SubElement(geometry,"DataItem",
                                     {"Format":ar.dataItemFormat,
                                      "DataType":"Float",
                                      "Precision":"8",
                                      "Dimensions":"%i %i" % (Xdmf_NodesGlobal,3)})
            if ar.hdfFile is not None:
                elements.text = ar.hdfFilename+":/elements"+str(ar.rank)+spaceSuffix+str(tCount)
                nodes.text    = ar.hdfFilename+":/nodes"+str(ar.rank)+spaceSuffix+str(tCount)
                if init or meshChanged:
                    #this will fail if elements_dgp1 already exists
                    #q_l2g = numpy.zeros((Xdmf_NumberOfElements,Xdmf_NodesPerElement),'i')
                    #brute force to start
                    #for eN in range(Xdmf_NumberOfElements):
                    #    for nN in range(Xdmf_NodesPerElement):
                    #        q_l2g[eN,nN] = eN*Xdmf_NodesPerElement + nN
                    #
                    q_l2g = numpy.arange(Xdmf_NumberOfElements*Xdmf_NodesPerElement,dtype='i').reshape((Xdmf_NumberOfElements,Xdmf_NodesPerElement))
                    ar.create_dataset_async('elements'+str(ar.rank)+spaceSuffix+str(tCount), data = q_l2g)
                    ar.create_dataset_async('nodes'+str(ar.rank)+spaceSuffix+str(tCount), data = x.flat[:])
            else:
                SubElement(elements,"xi:include",{"parse":"text","href":"./"+ar.textDataDir+"/elements"+spaceSuffix+str(tCount)+".txt"})
                SubElement(nodes,"xi:include",{"parse":"text","href":"./"+ar.textDataDir+"/nodes"+spaceSuffix+str(tCount)+".txt"})
                if init or meshChanged:
                    #this will fail if elements_dgp1 already exists
                    #q_l2g = numpy.zeros((Xdmf_NumberOfElements,Xdmf_NodesPerElement),'i')
                    #brute force to start
                    #for eN in range(Xdmf_NumberOfElements):
                    #    for nN in range(Xdmf_NodesPerElement):
                    #        q_l2g[eN,nN] = eN*Xdmf_NodesPerElement + nN
                    #
                    q_l2g = numpy.arange(Xdmf_NumberOfElements*Xdmf_NodesPerElement,dtype='i').reshape((Xdmf_NumberOfElements,Xdmf_NodesPerElement))
                    numpy.savetxt(ar.textDataDir+"/elements"+spaceSuffix+str(tCount)+".txt",q_l2g,fmt='%d')
                    numpy.savetxt(ar.textDataDir+"/nodes"+spaceSuffix+str(tCount)+".txt",x.flat[:])

                #
            #hdfile
        #need to write a grid
        return self.arGrid