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)
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, )
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)
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
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)
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, )