Пример #1
0
 def __init__(self, cell: Cell, cell_basis_l: Basis, cell_basis_k: Basis, cell_basis_k1: Basis, unknown: Unknown):
     """
     ================================================================================================================
     Class :
     ================================================================================================================
     
     ================================================================================================================
     Parameters :
     ================================================================================================================
     
     ================================================================================================================
     Attributes :
     ================================================================================================================
     
     """
     # --------------------------------------------------------------------------------------------------------------
     # Building the cell
     # --------------------------------------------------------------------------------------------------------------
     centroid = cell.centroid
     volume = cell.volume
     quadrature_points = cell.quadrature_points
     quadrature_weights = cell.quadrature_weights
     # --------------------------------------------------------------------------------------------------------------
     super().__init__(centroid, volume, diameter, quadrature_points, quadrature_weights)
     m_phi_k_phi_k = Integration.get_cell_mass_matrix_in_cell(cell, cell_basis_k, cell_basis_k)
     m_phi_k_phi_k_inv = np.linalg.inv(m_phi_k_phi_k)
     m_grad_phi_k1_grad_phi_k1_list = []
     m_phi_k_grad_phi_l_list = []
     m_grad_phi_k1_phi_l_list = []
     for j in range(unknown.problem_dimension):
         # ----------------------------------------------------------------------------------------------------------
         m_grad_phi_k1_grad_phi_k1_j = Integration.get_cell_stiffness_matrix_in_cell(
             cell, cell_basis_k1, cell_basis_k1, j
         )
         m_grad_phi_k1_grad_phi_k1_list.append(m_grad_phi_k1_grad_phi_k1_j)
         # ----------------------------------------------------------------------------------------------------------
         m_phi_k_grad_phi_l_j = Integration.get_cell_advection_matrix_in_cell(cell, cell_basis_k, cell_basis_l, j)
         m_phi_k_grad_phi_l_list.append(m_phi_k_grad_phi_l_j)
         # ----------------------------------------------------------------------------------------------------------
         m_phi_l_grad_phi_k1_j = Integration.get_cell_advection_matrix_in_cell(cell, cell_basis_l, cell_basis_k1, j)
         m_grad_phi_k1_phi_l_j = m_phi_l_grad_phi_k1_j.T
         m_grad_phi_k1_phi_l_list.append(m_grad_phi_k1_phi_l_j)
Пример #2
0
 def compute_cell_matrices(self, cell: Cell, cell_basis_l: Basis,
                           cell_basis_k: Basis, cell_basis_k1: Basis,
                           unknown: Unknown):
     """
     ================================================================================================================
     Method :
     ================================================================================================================
     
     ================================================================================================================
     Parameters :
     ================================================================================================================
     - 
     ================================================================================================================
     Returns :
     ================================================================================================================
     - 
     """
     # ==============================================================================================================
     # GRADIENT OPERATOR
     # ==============================================================================================================
     # left-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_phi_k_phi_k = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_k, cell_basis_k)
     mat_T_phi_k_phi_k_inv = np.linalg.inv(mat_T_phi_k_phi_k)
     # --------------------------------------------------------------------------------------------------------------
     # right-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_phi_k_grad_phi_l_list = []
     for j in range(unknown.problem_dimension):
         mat_T_phi_k_grad_phi_l = Integration.get_cell_advection_matrix_in_cell(
             cell, cell_basis_k, cell_basis_l, j)
         mat_T_phi_k_grad_phi_l_list.append(mat_T_phi_k_grad_phi_l)
     # ==============================================================================================================
     # RECONSTRUCTION OPERATOR
     # ==============================================================================================================
     # left-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_grad_phi_k1_grad_phi_k1_inv_list = []
     for j in range(unknown.problem_dimension):
         mat_T_grad_phi_k1_grad_phi_k1_j = Integration.get_cell_stiffness_matrix_in_cell(
             cell, cell_basis_k1, cell_basis_k1, j)
         mat_T_grad_phi_k1_grad_phi_k1_inv_list.append(
             mat_T_grad_phi_k1_grad_phi_k1_j)
     # --------------------------------------------------------------------------------------------------------------
     # right-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_grad_phi_k1_phi_l_list = []
     for j in range(unknown.problem_dimension):
         mat_T_phi_l_grad_phi_k1_j = Integration.get_cell_advection_matrix_in_cell(
             cell, cell_basis_l, cell_basis_k1, j)
         mat_T_grad_phi_k1_phi_l_j = mat_T_phi_l_grad_phi_k1_j.T
         mat_T_grad_phi_k1_phi_l_list.append(mat_T_grad_phi_k1_phi_l_j)
     # ==============================================================================================================
     # STABILIZATION OPERATOR
     # ==============================================================================================================
     mat_T_phi_k_phi_k1 = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_k, cell_basis_k1)
     proj_T_T_k1_k = mat_T_phi_k_phi_k_inv @ mat_T_phi_k_phi_k1
     # ==============================================================================================================
     # PROJECTION OPERATOR
     # ==============================================================================================================
     mat_T_phi_l_phi_l = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_l, cell_basis_l)
     mat_T_phi_l_phi_l_inv = np.linalg.inv(mat_T_phi_l_phi_l)
     return (
         mat_T_phi_k_phi_k_inv,
         mat_T_phi_k_grad_phi_l_list,
         mat_T_grad_phi_k1_grad_phi_k1_inv_list,
         mat_T_grad_phi_k1_phi_l_list,
         proj_T_T_k1_k,
     )
Пример #3
0
 def __init__(
     self,
     cell_vertices_connectivity_matrix: Mat,
     cell: Cell,
     cell_basis_l: Basis,
     cell_basis_k: Basis,
     cell_basis_k1: Basis,
 ):
     """
     ================================================================================================================
     Class :
     ================================================================================================================
     The Mcell class 
     ================================================================================================================
     Parameters :
     ================================================================================================================
     - 
     ================================================================================================================
     Attributes :
     ================================================================================================================
     - 
     """
     # ==============================================================================================================
     # GRADIENT OPERATOR
     # ==============================================================================================================
     # left-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_phi_k_phi_k = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_k, cell_basis_k)
     mat_T_phi_k_phi_k_inv = np.linalg.inv(mat_T_phi_k_phi_k)
     # --------------------------------------------------------------------------------------------------------------
     # right-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_phi_k_grad_phi_l_x = Integration.get_cell_advection_matrix_in_cell(
         cell, cell_basis_k, cell_basis_l, 0)
     mat_T_phi_k_grad_phi_l_y = Integration.get_cell_advection_matrix_in_cell(
         cell, cell_basis_k, cell_basis_l, 1)
     mat_T_phi_k_grad_phi_l_list = [
         mat_T_phi_k_grad_phi_l_x, mat_T_phi_k_grad_phi_l_y
     ]
     # ==============================================================================================================
     # RECONSTRUCTION OPERATOR
     # ==============================================================================================================
     # left-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_grad_phi_k1_grad_phi_k1_x = Integration.get_cell_stiffness_matrix_in_cell(
         cell, cell_basis_k1, cell_basis_k1, 0)
     mat_T_grad_phi_k1_grad_phi_k1_y = Integration.get_cell_stiffness_matrix_in_cell(
         cell, cell_basis_k1, cell_basis_k1, 1)
     mat_T_grad_phi_k1_grad_phi_k1_inv_list = [
         mat_T_grad_phi_k1_grad_phi_k1_x, mat_T_grad_phi_k1_grad_phi_k1_y
     ]
     # --------------------------------------------------------------------------------------------------------------
     # right-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_phi_l_grad_phi_k1_x = Integration.get_cell_advection_matrix_in_cell(
         cell, cell_basis_l, cell_basis_k1, 0)
     mat_T_phi_l_grad_phi_k1_y = Integration.get_cell_advection_matrix_in_cell(
         cell, cell_basis_l, cell_basis_k1, 1)
     mat_T_grad_phi_k1_phi_l_list = [
         mat_T_phi_l_grad_phi_k1_x, mat_T_phi_l_grad_phi_k1_y
     ]
     # ==============================================================================================================
     # STABILIZATION OPERATOR
     # ==============================================================================================================
     mat_T_phi_k_phi_k1 = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_k, cell_basis_k1)
     proj_T_T_k1_k = mat_T_phi_k_phi_k_inv @ mat_T_phi_k_phi_k1
     # ==============================================================================================================
     # PROJECTION OPERATOR
     # ==============================================================================================================
     mat_T_phi_l_phi_l = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_l, cell_basis_l)
     mat_T_phi_l_phi_l_inv = np.linalg.inv(mat_T_phi_l_phi_l)
Пример #4
0
    def get_local_reconstruction_operator(
        self,
        cell: Cell,
        faces: List[Face],
        cell_basis_l: Basis,
        cell_basis_k: Basis,
        cell_basis_k1: Basis,
        face_basis_k: Basis,
        unknown: Unknown,
    ) -> Mat:
        """
        ================================================================================================================
        Method :
        ================================================================================================================
        
        ================================================================================================================
        Parameters :
        ================================================================================================================
        - 
        ================================================================================================================
        Returns :
        ================================================================================================================
        - 
        """
        # --------------------------------------------------------------------------------------------------------------
        # Getting the local problem size depending on the problem dimension and the field dimension
        # --------------------------------------------------------------------------------------------------------------
        local_problem_size = self.get_local_problem_size(
            faces, cell_basis_l, face_basis_k, unknown)
        # --------------------------------------------------------------------------------------------------------------
        # Initializing the local gradient operator matrix
        # --------------------------------------------------------------------------------------------------------------
        local_reconstruction_operator = np.zeros(
            ((unknown.field_dimension) * cell_basis_k1.basis_dimension,
             local_problem_size))
        # --------------------------------------------------------------------------------------------------------------
        derivative_directions = range(unknown.problem_dimension)
        directions = range(unknown.field_dimension)
        m_cell_grad_phi_k1_grad_phi_k1_sum = np.zeros(
            (cell_basis_k1.basis_dimension, cell_basis_k1.basis_dimension))
        m_cell_grad_phi_k1_grad_phi_l_sum = np.zeros(
            (cell_basis_k1.basis_dimension, cell_basis_l.basis_dimension))
        for j in derivative_directions:
            m_cell_grad_phi_k1_grad_phi_k1 = Integration.get_cell_stiffness_matrix_in_cell(
                cell, cell_basis_k1, cell_basis_k1, j)
            m_cell_grad_phi_k1_grad_phi_k1_sum += m_cell_grad_phi_k1_grad_phi_k1
            m_cell_grad_phi_k1_grad_phi_l = Integration.get_cell_stiffness_matrix_in_cell(
                cell, cell_basis_k1, cell_basis_l, j)
            m_cell_grad_phi_k1_grad_phi_l_sum += m_cell_grad_phi_k1_grad_phi_l
        for f, face in enumerate(faces):
            passmat = Operator.get_face_passmat(cell, face)
            normal_vector_component = passmat[-1, j]
            m_face_grad_phi_k1_phi_l_sum = np.zeros(
                (cell_basis_k1.basis_dimension, cell_basis_l.basis_dimension))
            m_face_grad_phi_k1_psi_k_sum = np.zeros(
                (cell_basis_k1.basis_dimension, face_basis_k.basis_dimension))
            for j in derivative_directions:
                m_face_grad_phi_k1_psi_k = Integration.get_hybrid_advection_matrix_in_face(
                    cell, face, cell_basis_k1, face_basis_k, passmat, j)
                m_face_grad_phi_k1_psi_k_sum += m_face_grad_phi_k1_psi_k
                m_face_phi_l_grad_phi_k1 = Integration.get_cell_advection_matrix_in_face(
                    cell, face, cell_basis_l, cell_basis_k1, j)
                m_face_grad_phi_k1_phi_l = m_face_phi_l_grad_phi_k1.T
                m_face_grad_phi_k1_phi_l_sum += m_face_grad_phi_k1_phi_l
            for i in directions:
                # --------------------------------------------------------------------------------------------------
                # bkbjkj
                # --------------------------------------------------------------------------------------------------
                r0 = i * cell_basis_k1.basis_dimension
                r1 = (i + 1) * cell_basis_k1.basis_dimension
                # --------------------------------------------------------------------------------------------------
                # Getting the indices corresponding to the face_index-th face for the field on the ith axis
                # --------------------------------------------------------------------------------------------------
                c0_F = (
                    unknown.field_dimension * cell_basis_l.basis_dimension +
                    f * unknown.field_dimension * face_basis_k.basis_dimension
                    + i * face_basis_k.basis_dimension)
                c1_F = (
                    unknown.field_dimension * cell_basis_l.basis_dimension +
                    f * unknown.field_dimension * face_basis_k.basis_dimension
                    + (i + 1) * face_basis_k.basis_dimension)
                c0_T = i * cell_basis_l.basis_dimension
                c1_T = (i + 1) * cell_basis_l.basis_dimension
                # --------------------------------------------------------------------------------------------------
                # rec
                # --------------------------------------------------------------------------------------------------
                local_reconstruction_operator[r0:r1, c0_F:c1_F] += (
                    m_face_grad_phi_k1_psi_k_sum * normal_vector_component)
                local_reconstruction_operator[r0:r1, c0_T:c1_T] -= (
                    m_face_grad_phi_k1_phi_l_sum * normal_vector_component)
        for i in directions:
            r0 = i * cell_basis_k1.basis_dimension
            r1 = (i + 1) * cell_basis_k1.basis_dimension
            m_cell_grad_phi_k1_grad_phi_k1_sum_inv = np.linalg.inv(
                m_cell_grad_phi_k1_grad_phi_k1_sum[1:, 1:])
            local_reconstruction_operator[r0 + 1:r1, :] = (
                m_cell_grad_phi_k1_grad_phi_k1_sum_inv
                @ local_reconstruction_operator[r0 + 1:r1, :])
            # ------------------------------------------------------------------------------------------------------
            cell_integration_vector_k1 = Integration.get_cell_integration_vector(
                cell, cell_basis_k1)
            cell_integration_vector_l = Integration.get_cell_integration_vector(
                cell, cell_basis_l)
            # ------------------------------------------------------------------------------------------------------
            m_mat = np.zeros(
                (cell_basis_l.basis_dimension, local_problem_size))
            c0_m = i * cell_basis_l.basis_dimension
            c1_m = (i + 1) * cell_basis_l.basis_dimension
            m_mat[:, c0_m:c1_m] += np.eye(cell_basis_l.basis_dimension)
            # ------------------------------------------------------------------------------------------------------
            a = (cell_integration_vector_l @ m_mat -
                 cell_integration_vector_k1[1:]
                 @ local_reconstruction_operator[r0 + 1:r1, :])
            a = (1.0 / cell_integration_vector_k1[0]) * a
            local_reconstruction_operator[r0:r0 + 1, :] = a
        # for i in directions:
        #     r0 = i * cell_basis_k1.basis_dimension
        #     r1 = (i + 1) * cell_basis_k1.basis_dimension
        #     c0_T = i * cell_basis_l.basis_dimension
        #     c1_T = (i + 1) * cell_basis_l.basis_dimension
        #     #
        #     local_reconstruction_operator[r0:r1, c0_T:c1_T] += m_cell_grad_phi_k1_grad_phi_l_sum
        #     local_reconstruction_operator[r0:r1, :] = local_reconstruction_operator[r0:r1, :]

        # for j in derivative_directions:
        #     # ------------------------------------------------------------------------------------------------------
        #     # Compting matrices 1
        #     # ------------------------------------------------------------------------------------------------------
        #     m_cell_grad_phi_k1_grad_phi_k1 = Integration.get_cell_stiffness_matrix_in_cell(
        #         cell, cell_basis_k1, cell_basis_k1, j
        #     )
        #     m_cell_grad_phi_k1_grad_phi_k1_sum += m_cell_grad_phi_k1_grad_phi_k1
        #     m_cell_grad_phi_k1_grad_phi_l = Integration.get_cell_stiffness_matrix_in_cell(
        #         cell, cell_basis_k1, cell_basis_l, j
        #     )
        #     for f, face in enumerate(faces):
        #         passmat = Operator.get_face_passmat(cell, face)
        #         normal_vector_component = passmat[-1, j]
        #         m_face_grad_phi_k1_psi_k
        #         m_face_grad_phi_k1_psi_k = Integration.get_hybrid_advection_matrix_in_face(
        #             cell, face, cell_basis_k1, face_basis_k, passmat, j
        #         )
        #         # m_face_grad_phi_k1_phi_l = Integration.get_cell_advection_matrix_in_face(
        #         #     cell, face, cell_basis_k1, cell_basis_l, j
        #         # )
        #         m_face_phi_l_grad_phi_k1 = Integration.get_cell_advection_matrix_in_face(
        #             cell, face, cell_basis_l, cell_basis_k1, j
        #         )
        #         m_face_grad_phi_k1_phi_l = m_face_phi_l_grad_phi_k1.T
        #         for i in directions:
        #             # --------------------------------------------------------------------------------------------------
        #             # bkbjkj
        #             # --------------------------------------------------------------------------------------------------
        #             r0 = i * cell_basis_k1.basis_dimension
        #             r1 = (i + 1) * cell_basis_k1.basis_dimension
        #             # --------------------------------------------------------------------------------------------------
        #             c0_T = i * cell_basis_l.basis_dimension
        #             c1_T = (i + 1) * cell_basis_l.basis_dimension
        #             # --------------------------------------------------------------------------------------------------
        #             # Getting the indices corresponding to the face_index-th face for the field on the ith axis
        #             # --------------------------------------------------------------------------------------------------
        #             c0_F = (
        #                 unknown.field_dimension * cell_basis_l.basis_dimension
        #                 + f * unknown.field_dimension * face_basis_k.basis_dimension
        #                 + i * face_basis_k.basis_dimension
        #             )
        #             c1_F = (
        #                 unknown.field_dimension * cell_basis_l.basis_dimension
        #                 + f * unknown.field_dimension * face_basis_k.basis_dimension
        #                 + (i + 1) * face_basis_k.basis_dimension
        #             )
        #             # --------------------------------------------------------------------------------------------------
        #             # rec
        #             # --------------------------------------------------------------------------------------------------
        #             local_reconstruction_operator[r0:r1, c0_F:c1_F] += (
        #                 m_face_grad_phi_k1_psi_k * normal_vector_component
        #             )
        #             local_reconstruction_operator[r0:r1, c0_T:c1_T] -= (
        #                 m_face_grad_phi_k1_phi_l * normal_vector_component
        #             )
        #     for i in directions:
        #         r0 = i * cell_basis_k1.basis_dimension
        #         r1 = (i + 1) * cell_basis_k1.basis_dimension
        #         # ------------------------------------------------------------------------------------------------------
        #         c0_T = i * cell_basis_l.basis_dimension
        #         c1_T = (i + 1) * cell_basis_l.basis_dimension
        #         local_reconstruction_operator[r0:r1, c0_T:c1_T] += m_cell_grad_phi_k1_grad_phi_l
        # # --------------------------------------------------------------------------------------------------------------
        # for i in directions:
        #     # a_sum = np.zeros((local_problem_size,))
        #     # for i_sum in directions:
        #     r0 = i * cell_basis_k1.basis_dimension
        #     r1 = (i + 1) * cell_basis_k1.basis_dimension
        #     # print("grad_matrx : \n{}".format(m_cell_grad_phi_k1_grad_phi_k1_sum[1:, 1:]))
        #     m_cell_grad_phi_k1_grad_phi_k1_sum_inv = np.linalg.inv(m_cell_grad_phi_k1_grad_phi_k1_sum[1:, 1:])
        #     local_reconstruction_operator[r0 + 1 : r1, :] = (
        #         m_cell_grad_phi_k1_grad_phi_k1_sum_inv @ local_reconstruction_operator[r0 + 1 : r1, :]
        #     )
        #     # ------------------------------------------------------------------------------------------------------
        #     cell_integration_vector_k1 = Integration.get_cell_integration_vector(cell, cell_basis_k1)
        #     cell_integration_vector_l = Integration.get_cell_integration_vector(cell, cell_basis_l)
        #     # ------------------------------------------------------------------------------------------------------
        #     m_mat = np.zeros((cell_basis_l.basis_dimension, local_problem_size))
        #     c0_m = i * cell_basis_l.basis_dimension
        #     c1_m = (i + 1) * cell_basis_l.basis_dimension
        #     m_mat[:, c0_m:c1_m] += np.eye(cell_basis_l.basis_dimension)
        #     # ------------------------------------------------------------------------------------------------------
        #     a = (
        #         cell_integration_vector_l @ m_mat
        #         - cell_integration_vector_k1[1:] @ local_reconstruction_operator[r0 + 1 : r1, :]
        #     )
        #     a = (1.0 / cell_integration_vector_k1[0]) * a
        #     local_reconstruction_operator[r0 : r0 + 1, :] = a
        return local_reconstruction_operator
Пример #5
0
 def __init__(
     self,
     cell_vertices_connectivity_matrix: Mat,
     cell: Cell,
     cell_basis_l: Basis,
     cell_basis_k: Basis,
     cell_basis_k1: Basis,
     unknown: Unknown,
 ):
     """
     ================================================================================================================
     Class :
     ================================================================================================================
     The Mcell class 
     ================================================================================================================
     Parameters :
     ================================================================================================================
     - 
     ================================================================================================================
     Attributes :
     ================================================================================================================
     - 
     """
     # ==============================================================================================================
     # GRADIENT OPERATOR
     # ==============================================================================================================
     # left-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_phi_k_phi_k = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_k, cell_basis_k)
     self.mat_T_phi_k_phi_k_inv = np.linalg.inv(mat_T_phi_k_phi_k)
     # --------------------------------------------------------------------------------------------------------------
     # right-hand side
     # --------------------------------------------------------------------------------------------------------------
     self.mat_T_phi_k_grad_phi_l_list = []
     for j in range(unknown.problem_dimension):
         mat_T_phi_k_grad_phi_l = Integration.get_cell_advection_matrix_in_cell(
             cell, cell_basis_k, cell_basis_l, j)
         self.mat_T_phi_k_grad_phi_l_list.append(mat_T_phi_k_grad_phi_l)
     # ==============================================================================================================
     # RECONSTRUCTION OPERATOR
     # ==============================================================================================================
     # left-hand side
     # --------------------------------------------------------------------------------------------------------------
     self.mat_T_grad_phi_k1_grad_phi_k1_inv_list = []
     for j in range(unknown.problem_dimension):
         mat_T_grad_phi_k1_grad_phi_k1_j = Integration.get_cell_stiffness_matrix_in_cell(
             cell, cell_basis_k1, cell_basis_k1, j)
         self.mat_T_grad_phi_k1_grad_phi_k1_inv_list.append(
             mat_T_grad_phi_k1_grad_phi_k1_j)
     # --------------------------------------------------------------------------------------------------------------
     # right-hand side
     # --------------------------------------------------------------------------------------------------------------
     self.mat_T_grad_phi_k1_phi_l_list = []
     for j in range(unknown.problem_dimension):
         mat_T_phi_l_grad_phi_k1_j = Integration.get_cell_advection_matrix_in_cell(
             cell, cell_basis_l, cell_basis_k1, j)
         mat_T_grad_phi_k1_phi_l_j = mat_T_phi_l_grad_phi_k1_j.T
         self.mat_T_grad_phi_k1_phi_l_list.append(mat_T_grad_phi_k1_phi_l_j)
     # ==============================================================================================================
     # STABILIZATION OPERATOR
     # ==============================================================================================================
     mat_T_phi_k_phi_k1 = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_k, cell_basis_k1)
     self.proj_T_T_k1_k = mat_T_phi_k_phi_k_inv @ mat_T_phi_k_phi_k1
     # ==============================================================================================================
     # PROJECTION OPERATOR
     # ==============================================================================================================
     mat_T_phi_l_phi_l = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_l, cell_basis_l)
     self.mat_T_phi_l_phi_l_inv = np.linalg.inv(mat_T_phi_l_phi_l)
Пример #6
0
 def compute_cell_matrices(self, cell: Cell, cell_basis_l: Basis,
                           cell_basis_k: Basis, cell_basis_k1: Basis):
     """
     ================================================================================================================
     Method :
     ================================================================================================================
     
     ================================================================================================================
     Parameters :
     ================================================================================================================
     - 
     ================================================================================================================
     Returns :
     ================================================================================================================
     - 
     """
     # ==============================================================================================================
     # GRADIENT OPERATOR
     # ==============================================================================================================
     # left-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_phi_k_phi_k = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_k, cell_basis_k)
     mat_T_phi_k_phi_k_inv = np.linalg.inv(mat_T_phi_k_phi_k)
     # --------------------------------------------------------------------------------------------------------------
     # right-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_phi_k_grad_phi_l_x = Integration.get_cell_advection_matrix_in_cell(
         cell, cell_basis_k, cell_basis_l, 0)
     mat_T_phi_k_grad_phi_l_list = [mat_T_phi_k_grad_phi_l_x]
     # ==============================================================================================================
     # RECONSTRUCTION OPERATOR
     # ==============================================================================================================
     # left-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_grad_phi_k1_grad_phi_k1_x = Integration.get_cell_stiffness_matrix_in_cell(
         cell, cell_basis_k1, cell_basis_k1, 0)
     mat_T_grad_phi_k1_grad_phi_k1_inv_list = [
         mat_T_grad_phi_k1_grad_phi_k1_x
     ]
     # --------------------------------------------------------------------------------------------------------------
     # right-hand side
     # --------------------------------------------------------------------------------------------------------------
     mat_T_phi_l_grad_phi_k1_x = Integration.get_cell_advection_matrix_in_cell(
         cell, cell_basis_l, cell_basis_k1, 0)
     mat_T_grad_phi_k1_phi_l_x = mat_T_phi_l_grad_phi_k1_x.T
     mat_T_grad_phi_k1_phi_l_list = [mat_T_grad_phi_k1_phi_l_x]
     # ==============================================================================================================
     # STABILIZATION OPERATOR
     # ==============================================================================================================
     mat_T_phi_k_phi_k1 = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_k, cell_basis_k1)
     proj_T_T_k1_k = mat_T_phi_k_phi_k_inv @ mat_T_phi_k_phi_k1
     # ==============================================================================================================
     # PROJECTION OPERATOR
     # ==============================================================================================================
     mat_T_phi_l_phi_l = Integration.get_cell_mass_matrix_in_cell(
         cell, cell_basis_l, cell_basis_l)
     mat_T_phi_l_phi_l_inv = np.linalg.inv(mat_T_phi_l_phi_l)
     return (
         mat_T_phi_k_phi_k_inv,
         mat_T_phi_k_grad_phi_l_list,
         mat_T_grad_phi_k1_grad_phi_k1_inv_list,
         mat_T_grad_phi_k1_phi_l_list,
         proj_T_T_k1_k,
     )