Just wanted to let everyone know that the snippet for getting the coordinates works just fine and can be used with a PetscVector coords to get the coordinates of all the nodes and then passed to MatNullSpaceCreateRigidBody to build the correct rigid body nullspace for a first order Lagrange basis.
Thank you for all the help, Ata On Sat, Jul 19, 2014 at 7:10 PM, Ataollah Mesgarnejad < [email protected]> wrote: > Thank Dmitry, > > I've seen the implementation in the NonlinearImplicitSystem. I've also > made my own copy of your implementation in > PETScNonlinearSolver::build_mat_null_space inside my own code to do the > same thing for LinearImplicitSystems. I suspect there is something wrong > with the BlockSize since even when I compile libMesh with > enable-blocked-storage the block size for elasticity in 2D (even though I > have 2 variables added) is 1 instead of 2!? The way I understood it was > that if I compile with blocked storage the number of blocks would be equal > to number of variables! > > Best, > Ata > > > > On Sat, Jul 19, 2014 at 5:31 PM, Dmitry Karpeyev <[email protected]> > wrote: > >> Ata, >> >> Note that you can attach a NearNullSpace calculation routine or an >> equivalent callable object to your NonlinearSolver >> (currently supported only for PetscNonlinearSolver, I believe). The >> solver will detect the NearNullSpace calculator, >> evaluate it and attach the resulting NearNullSpace to the Jacobian. >> >> For the calling sequence see >> class >> NonlinearImplicitSystem::ComputeVectorSubspace::operator()(std::vector<NumericVector<Number>*>&sp, >> sys_type& s) >> Set NonlinearSolver::nearnullspace to a pointer to a function with the >> same calling sequence as the operator() above. >> >> The (pointers to the) vectors you want to put into sp above have the same >> structure as the solution vector to your NonlinearImplicitSystem. >> In the case of elasticity, for example, you can interpret the vector >> components as nodal displacements if using a Lagrangian basis. >> The easiest way to obtain these vectors is via >> System::add_vector(name,projections=false,parallel_type=GHOSTED). >> >> Hope this helps, >> Dmitry. >> >> >> On Sat, Jul 19, 2014 at 8:45 PM, Ataollah Mesgarnejad < >> [email protected]> wrote: >> >>> Dear all, >>> >>> I was wondering if there is a way to create the coordinates vector for >>> MatNullSpaceCreateRigidBody? I tried traversing all the nodes in the mesh >>> by doing something like: >>> >>> coords->init (no_nodes*dim, no_local_nodes*dim, false, PARALLEL); >>> >>> coords->zero(); >>> >>> MeshBase::const_node_iterator n = mesh.nodes_begin(); >>> >>> const MeshBase::const_node_iterator end_n = mesh.nodes_end(); >>> >>> for (;n!=end_n;++n) >>> >>> { >>> >>> const Node* node = *n; >>> >>> const dof_id_type global_dof_u = node-dof_number(elasticity_system_no, >>> 0,0); >>> >>> const dof_id_type global_dof_v = node-dof_number(elasticity_system_no, >>> 1,0); >>> >>> const dof_id_type global_dof_w = node-dof_number(elasticity_system_no, >>> 2,0); >>> >>> >>> const Number x = (*node)(0); >>> >>> const Number y = (*node)(1); >>> >>> coords->set(global_dof_u,x); >>> >>> coords->set(global_dof_v,y); >>> >>> const Number z = (*node)(2); >>> >>> coords->set(global_dof_w,z); >>> >>> } >>> >>> >>> >>> with a first order elasticity system (I'm pretty sure the numbering for >>> the >>> variables in elasticity corresponds to those of the PETSc coordinate >>> vector >>> this way). >>> >>> But the Nullspace created by MatNullSpaceCreateRigidBody does not seem to >>> be working (KSP diverges when I set it through KSPSetNullSpace)!!?? >>> >>> As always thank you for the help, >>> Ata >>> >>> ------------------------------------------------------------------------------ >>> Want fast and easy access to all the code in your enterprise? Index and >>> search up to 200,000 lines of code with a free copy of Black Duck >>> Code Sight - the same software that powers the world's largest code >>> search on Ohloh, the Black Duck Open Hub! Try it now. >>> http://p.sf.net/sfu/bds >>> _______________________________________________ >>> Libmesh-users mailing list >>> [email protected] >>> https://lists.sourceforge.net/lists/listinfo/libmesh-users >>> >> >> > > > -- > A. Mesgarnejad > PhD Student, Research Assistant > Mechanical Engineering Department > Louisiana State University > 2203 Patrick F. Taylor Hall > Baton Rouge, La 70803 > www.mesgarnejad.com > -- A. Mesgarnejad PhD Student, Research Assistant Mechanical Engineering Department Louisiana State University 2203 Patrick F. Taylor Hall Baton Rouge, La 70803 www.mesgarnejad.com ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds _______________________________________________ Libmesh-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-users
