Source code for pyleecan.Methods.Mesh.MeshMat.renum

# -*- coding: utf-8 -*-
import copy

import numpy as np

from pyleecan.Classes.CellMat import CellMat
from pyleecan.Classes.NodeMat import NodeMat


def renum(self):
    """Restart point indices from 0, and update connectivity. Indices of cells stay the same.

    Parameters
    ----------
    self : MeshMat
        an Mesh object

    Returns
    -------

    """

    if self._is_renum:
        coord_init = self.get_node()
        node_indice = self.get_node_indice()
        connect_dict, nb_cell, indices = self.get_cell()

        nb_node_new = len(node_indice)
        node_indice_new = np.linspace(0, nb_node_new - 1, nb_node_new, dtype=int)
        connect_dict_new = copy.deepcopy(connect_dict)
        for inode in range(nb_node_new):
            for key in connect_dict:
                connect_dict_new[key][
                    connect_dict[key] == node_indice[inode]
                ] = node_indice_new[inode]

        self.node.indice = node_indice_new

        for key in connect_dict:
            self.cell[key] = CellMat(
                connectivity=connect_dict_new[key],
                nb_cell=len(connect_dict_new[key]),
                nb_node_per_cell=self.cell[key].nb_node_per_cell,
                indice=self.cell[key].indice,
                interpolation=self.cell[key].interpolation,
            )

        self._is_renum = False