code: def _read_elem_nodes(self, fid):
          nodes = {}
          nodes_raw = np.empty((self.header['nr_nodes'], 3), dtype=float)
          for nr in range(0, self.header['nr_nodes']):
              node_line = fid.readline().lstrip()
              nodes_raw[nr, :] = np.fromstring(
                  node_line, dtype=float, sep='    ')
          nodes_raw[:, 1:3] = np.round(nodes_raw[:, 1:3], 5)
          if(nodes_raw[:, 0] != list(range(1, nodes_raw.shape[0]))):
              self.header['cutmck'] = True
              print(
                  'This grid was sorted using CutMcK. The nodes were resorted!')
          else:
              self.header['cutmck'] = False
          if(self.header['cutmck']):
              nodes_cutmck = np.empty_like(nodes_raw)
              nodes_cutmck_index = np.zeros(nodes_raw.shape[0], dtype=int)
              for node in range(0, self.header['nr_nodes']):
                  new_index = np.where(nodes_raw[:, 0].astype(int) == (node + 1))
                  nodes_cutmck[new_index[0], 1:3] = nodes_raw[node, 1:3]
                  nodes_cutmck[new_index[0], 0] = new_index[0]
                  nodes_cutmck_index[node] = new_index[0]
              nodes_sorted = nodes_cutmck[nodes_cutmck_index, :]
              nodes['presort'] = nodes_cutmck
              nodes['cutmck_index'] = nodes_cutmck_index
              nodes['rev_cutmck_index'] = np.argsort(nodes_cutmck_index)
          else:
              nodes_sorted = nodes_raw
              nodes['presort'] = nodes_raw
          nodes['raw'] = nodes_raw
          nodes['sorted'] = nodes_sorted
          self.nodes = nodes
          self.nr_of_nodes = nodes['raw'].shape[0]