def matrix(self, afgrp, volgrp, dtype): nfaces = volgrp.mesh_el_group.nfaces assert afgrp.nelements == nfaces * volgrp.nelements matrix = np.empty( (volgrp.nunit_dofs, nfaces, afgrp.nunit_dofs), dtype=dtype) from modepy.tools import UNIT_VERTICES import modepy as mp for iface, fvi in enumerate( volgrp.mesh_el_group.face_vertex_indices()): face_vertices = UNIT_VERTICES[volgrp.dim][np.array(fvi)].T matrix[:, iface, :] = mp.nodal_face_mass_matrix( volgrp.basis(), volgrp.unit_nodes, afgrp.unit_nodes, volgrp.order, face_vertices) # np.set_printoptions(linewidth=200, precision=3) # matrix[np.abs(matrix) < 1e-13] = 0 # print(matrix) # 1/0 return matrix
def get_local_face_mass_matrix(self, afgrp, volgrp, dtype): nfaces = volgrp.mesh_el_group.nfaces assert afgrp.nelements == nfaces * volgrp.nelements matrix = np.empty((volgrp.nunit_dofs, nfaces, afgrp.nunit_dofs), dtype=dtype) from modepy.tools import UNIT_VERTICES import modepy as mp for iface, fvi in enumerate( volgrp.mesh_el_group.face_vertex_indices()): face_vertices = UNIT_VERTICES[volgrp.dim][np.array(fvi)].T matrix[:, iface, :] = mp.nodal_face_mass_matrix( volgrp.basis(), volgrp.unit_nodes, afgrp.unit_nodes, volgrp.order, face_vertices) actx = self._setup_actx return actx.freeze(actx.from_numpy(matrix))
def get_local_face_mass_matrix(self, afgrp, volgrp, dtype): nfaces = volgrp.mesh_el_group.nfaces assert afgrp.nelements == nfaces * volgrp.nelements matrix = np.empty((volgrp.nunit_nodes, nfaces, afgrp.nunit_nodes), dtype=dtype) from modepy.tools import UNIT_VERTICES import modepy as mp for iface, fvi in enumerate( volgrp.mesh_el_group.face_vertex_indices()): face_vertices = UNIT_VERTICES[volgrp.dim][np.array(fvi)].T matrix[:, iface, :] = mp.nodal_face_mass_matrix( volgrp.basis(), volgrp.unit_nodes, afgrp.unit_nodes, volgrp.order, face_vertices) with cl.CommandQueue(self.cl_context) as queue: return (cla.to_device(queue, matrix).with_queue(None))
def get_local_face_mass_matrix(self, afgrp, volgrp, dtype): nfaces = volgrp.mesh_el_group.nfaces assert afgrp.nelements == nfaces * volgrp.nelements matrix = np.empty((volgrp.nunit_dofs, nfaces, afgrp.nunit_dofs), dtype=dtype) import modepy as mp shape = mp.Simplex(volgrp.dim) unit_vertices = mp.unit_vertices_for_shape(shape).T for face in mp.faces_for_shape(shape): face_vertices = unit_vertices[np.array( face.volume_vertex_indices)].T matrix[:, face.face_index, :] = mp.nodal_face_mass_matrix( volgrp.basis_obj().functions, volgrp.unit_nodes, afgrp.unit_nodes, volgrp.order, face_vertices) actx = self._setup_actx return actx.freeze(actx.from_numpy(matrix))