

def _build_coefficient_matrix(self, modified_diag_pores=None, diag_added_data=None, mode='overwrite'):
    '\n        This builds the sparse coefficient matrix for the linear solver.\n        '
    if (mode == 'overwrite'):
        tpore1 = self._net['throat.conns'][:, 0]
        tpore2 = self._net['throat.conns'][:, 1]
        try:
            temp = self.pores('Dirichlet', mode='difference')
        except KeyError:
            temp = self.Ps
            logger.warning((((('No direct Dirichlet boundary condition has ' + 'been applied to the phase ') + self._phase.name) + ' in the algorithm ') + self.name))
        loc1 = sp.in1d(tpore1, temp)
        loc2 = sp.in1d(tpore2, temp)
        modified_tpore1 = tpore1[loc1]
        modified_tpore2 = tpore2[loc1]
        row = modified_tpore1
        col = modified_tpore2
        g = self['throat.conductance']
        if (sp.size(g) == 1):
            g = (g * sp.ones(self.Nt))
        data_main = g
        data = data_main[loc1]
        modified_tpore2 = tpore2[loc2]
        modified_tpore1 = tpore1[loc2]
        row = sp.append(row, modified_tpore2)
        col = sp.append(col, modified_tpore1)
        data = sp.append(data, data_main[loc2])
        A_dim = self.Np
        if ('pore.Neumann_group' in self.labels()):
            self._extra_Neumann_size = len(getattr(self, (('_pore' + '_Neumann_group_') + 'location')))
            self._group_Neumann_vals = sp.zeros(self._extra_Neumann_size)
            l_g_super = len(self.super_pore_conductance)
            if (l_g_super not in [0, 1, self._extra_Neumann_size]):
                raise Exception('length of the list of super_pore_conductance and the number of different Neumann_group BCs do not match.')
            if (l_g_super == 1):
                t = [sp.array(self.super_pore_conductance)]
                self.super_pore_conductance = (t * self._extra_Neumann_size)
            for N in sp.arange(0, self._extra_Neumann_size):
                neu_tpore2 = getattr(self, ('_pore_' + 'Neumann_group_location'))[N]
                Nval = self['pore.bcval_Neumann_group']
                self._group_Neumann_vals[N] = sp.unique(Nval[neu_tpore2])
                nt = self._net.find_neighbor_throats(pores=neu_tpore2)
                try:
                    g_super = self.super_pore_conductance[N]
                except IndexError:
                    g_super = (0.001 * min(data_main[nt]))
                    self.super_pore_conductance.append(g_super)
                if (sp.size(g_super) == 1):
                    g_super = (len(temp_data) * [g_super])
                row = sp.append(row, neu_tpore2)
                col = sp.append(col, (len(neu_tpore2) * [(A_dim + N)]))
                data = sp.append(data, g_super)
                row = sp.append(row, (len(neu_tpore2) * [(A_dim + N)]))
                col = sp.append(col, neu_tpore2)
                data = sp.append(data, g_super)
            A_dim = (A_dim + self._extra_Neumann_size)
        diag = sp.arange(0, A_dim)
        try:
            pores = self.pores('Dirichlet')
            row = sp.append(row, diag[pores])
            col = sp.append(col, diag[pores])
            data = sp.append(data, sp.ones_like(diag[pores]))
            temp_data = sp.copy(data)
            temp_data[sp.in1d(row, diag[pores])] = 0
            non_Dir_diag = diag[(~ sp.in1d(diag, diag[pores]))]
        except KeyError:
            temp_data = sp.copy(data)
            non_Dir_diag = diag
        S_temp = sp.zeros(A_dim)
        for i in sp.arange(0, len(row)):
            S_temp[row[i]] = (S_temp[row[i]] - temp_data[i])
        self._non_source_row = row
        self._non_source_col = col
        self._non_source_data = data
        self._non_Dir_diag = non_Dir_diag
        self._diagonal_vals = S_temp
        self._coeff_dimension = A_dim
    if (mode in ['overwrite', 'modify_diagonal']):
        diagonal_vals = sp.copy(self._diagonal_vals)
        if ((modified_diag_pores is not None) and (diag_added_data is not None)):
            if (sp.size(modified_diag_pores) == sp.size(diag_added_data)):
                sec1 = self._diagonal_vals[modified_diag_pores]
                sec2 = diag_added_data
                diagonal_vals[modified_diag_pores] = (sec1 + sec2)
            else:
                raise Exception(('Provided data and pores for modifying coefficient matrix should have the same' + ' size!'))
            if (mode == 'overwrite'):
                self._diagonal_vals = diagonal_vals
        data = sp.append(self._non_source_data, diagonal_vals[self._non_Dir_diag])
        row = sp.append(self._non_source_row, self._non_Dir_diag)
        col = sp.append(self._non_source_col, self._non_Dir_diag)
        a = sprs.coo.coo_matrix((data, (row, col)), (self._coeff_dimension, self._coeff_dimension))
        A = a.tocsr()
        A.eliminate_zeros()
        return A

dataset/ETHPy150Open PMEAL/OpenPNM/OpenPNM/Algorithms/__GenericLinearTransport__.py GenericLinearTransport._build_coefficient_matrix/VarMisuse@516/898 `neu_tpore2`->`temp_data`