8 libMesh::PetscMatrix<libMesh::Number> * mat_sys = libMesh::cast_ptr<libMesh::PetscMatrix<libMesh::Number>* >(input_system.matrix);
11 const libMesh::MeshBase& mesh_sys = input_system.get_mesh();
14 unsigned int sys_number = input_system.number();
19 MatGetLocalSize(mat_sys->mat(),NULL,&local_N);
20 VecCreate(mesh_sys.comm().get(),&coord_vec_PETSC);
21 VecSetSizes(coord_vec_PETSC,local_N,mat_sys->n());
22 VecSetBlockSize(coord_vec_PETSC,mesh_sys.mesh_dimension());
23 VecSetFromOptions(coord_vec_PETSC);
25 libMesh::PetscVector<libMesh::Number> coord_vec(coord_vec_PETSC,mesh_sys.comm());
28 auto node_it = mesh_sys.local_nodes_begin();
29 auto node_it_end = mesh_sys.local_nodes_end();
31 unsigned int dof_number = 0;
33 for( ; node_it != node_it_end; ++node_it)
35 const libMesh::Node* node = *node_it;
37 for(
unsigned int var=0; var<node->n_dofs(sys_number); var++)
39 dof_number = node->dof_number(sys_number,var,0);
40 coord_vec.set(dof_number,node->operator ()(var));
44 MatNullSpaceCreateRigidBody(coord_vec.vec(),&nullsp_sys);
45 VecDestroy(&coord_vec_PETSC);
52 PetscInt nullsp_nvecs;
53 const Vec * nullsp_vecs;
54 PetscBool nullsp_has_const;
57 MatNullSpaceGetVecs(nullsp_sys,&nullsp_has_const,&nullsp_nvecs,&nullsp_vecs);
61 for(
int iii = 0; iii < nullsp_nvecs; ++iii)
63 filename = output_base +
"_rb_vector_" + std::to_string(iii) +
"_n_" + std::to_string(nullsp_nvecs);
69 #ifdef PRINT_MATLAB_DEBUG
void write_PETSC_vector(libMesh::PetscVector< libMesh::Number > &input_vec, const std::string &filename, int dim=1)
void write_rigid_body_vectors(MatNullSpace &nullsp_sys, const std::string output_base, int rank)
Export the rigid body mode vectors to a folder.
void build_rigid_body_vectors(libMesh::ImplicitSystem &input_system, MatNullSpace &nullsp_sys)
Build the rigid body modes associated to a given system.
void write_PETSC_vector_MATLAB(Vec input_vec, const std::string &filename, MPI_Comm comm=PETSC_COMM_WORLD)