20 #ifndef __mast_libmesh_wrapper_elasticity_null_space_h__ 21 #define __mast_libmesh_wrapper_elasticity_null_space_h__ 31 #include <libmesh/system.h> 32 #include <libmesh/dof_map.h> 33 #include <libmesh/mesh_base.h> 34 #include <libmesh/petsc_vector.h> 35 #include <libmesh/node.h> 42 namespace Conduction {
43 namespace libMeshWrapper {
56 "Number of unknowns should be equal to one");
59 Assert0(
_sys.variable_type(0).family == libMesh::LAGRANGE,
60 "Variables are expected to be LAGRANGE");
68 PetscErrorCode ierr = 0;
70 ierr = MatNullSpaceDestroy(&
_mns);
71 CHKERRABORT(
_sys.comm().get(), ierr);
75 inline MatNullSpace
get() {
84 PetscErrorCode ierr = 0;
86 ierr = MatSetNearNullSpace(m,
_mns);
87 CHKERRABORT(
_sys.comm().get(), ierr);
98 std::unique_ptr<libMesh::NumericVector<real_t>>
99 vec(
_sys.solution->zero_clone().release());
101 libMesh::MeshBase::const_node_iterator
102 it =
_sys.get_mesh().local_nodes_begin(),
103 end =
_sys.get_mesh().local_nodes_end();
105 for ( ; it != end; it++)
107 vec->set((*it)->dof_number(0, 0, 0), 1.);
120 std::vector<Vec> v(1);
121 v[0] =
dynamic_cast<libMesh::PetscVector<real_t>*
>(vec.get())->vec();
123 ierr = MatNullSpaceCreate(
_sys.comm().get(),
128 CHKERRABORT(
_sys.comm().get(), ierr);
145 #endif // __mast_libmesh_wrapper_elasticity_null_space_h__
#define Assert1(cond, v1, msg)
void attach_to_matrix(Mat m)
#define Assert0(cond, msg)
#define Assert2(cond, v1, v2, msg)
NullSpace(libMesh::System &sys, uint_t dim)