public void GetElementsByType(ElementTypes elementTypes, out long[] elementTags, out long[] nodeTags, int tag = -1, ulong task = 0, ulong numTasks = 1) { IntPtr elementTagsPtr = IntPtr.Zero; IntPtr nodeTagsPtr = IntPtr.Zero; ulong elementTags_n = 0; ulong nodeTags_n = 0; GMshNativeMethods.gmshModelMeshGetElementsByType((int)elementTypes, ref elementTagsPtr, ref elementTags_n, ref nodeTagsPtr, ref nodeTags_n, tag, task, numTasks, ref ierr); if (ierr != 0) { throw new GMshException(ierr); } elementTags = new long[elementTags_n]; nodeTags = new long[nodeTags_n]; if (elementTags_n != 0) { Marshal.Copy(elementTagsPtr, elementTags, 0, elementTags_n.Toint()); } if (nodeTags_n != 0) { Marshal.Copy(nodeTagsPtr, nodeTags, 0, nodeTags_n.Toint()); } elementTagsPtr.GmshFree(); nodeTagsPtr.GmshFree(); }