I'm working on a similar pure Neumann problem with a rank-1 deficiency (pressure known only up to a constant). I've implemented the subspace projection method Konrad mentioned, with good results. However, I'm interested in comparing it to the single DoF constraint method, as well as an alternative penalization method alluded to in the paper by Bochev. I had a few questions:
1. For a Sparse or ChunkSparse matrix object, is there a simple way of obtaining the eigenvalues? I know I can rebuild deal.ii with ARPACK, but this seems like overkill 2. Exactly how would I use an AffineConstraints object to "pin" the degree of freedom? Is it a matter of a single call to AffineConstraints::add_line()? It's unclear to me from the documentation whether this would add an additional "row" to the linear system, or replace an existing one (I'd be looking to do the second) 3. I've implemented the subspace projection by wrapping the ChunkSparse matrix class and overriding the vmult() function; however, at the moment, I'm forced to copy an original ChunkSparse matrix object into the wrapped object because the AffineConstraints::distribute_local_to_global() function doesn't recognize the wrapped matrix --I receive a linker error libHDG_experimental.so: error: undefined reference to 'void dealii::AffineConstraints::distribute_local_to_global<HDG::LinearSystem::ChunkSparseWrapper, dealii::Vector >(dealii::FullMatrix const&, dealii::Vector const&, std::vector<unsigned int, std::allocator > const&, HDG::LinearSystem::ChunkSparseWrapper&, dealii::Vector&, bool, std::integral_constant<bool, false>) const' I find that surprising, given that my wrapper class inherits publicly from ChunkSparseMatrix. Any guidance would be appreciated! Corbin On Monday, December 28, 2020 at 1:23:19 PM UTC-5 Wolfgang Bangerth wrote: > On 12/26/20 3:06 AM, Konrad Simon wrote: > > What one can also do is just constrain one DoF to a specific value (this > would > > also remove rigid motion in elasticity). But think about your solution > > variable: If it is in the Sobolev space H^1 then point evaluations may > not be > > defined for dimension larger than 2. Similarly if, for example, the > pressure > > in a mechanical or fluid problem is often just in L^2. Point evaluations > do > > not make sense there at all. > > Right, this is the correct approach: Constrain a single degree of freedom > to > zero (or any other value you choose) and solve the problem. Then you can > subtract the mean value of the solution *after* solving the linear system. > (See VectorTools::subtract_mean_value and VectorTools::compute_mean_value.) > > If you're uncomfortable with the ill-posedness of taking a point value, > you > can also take the mean value along a small segment of the boundary > (step-1) or > a small part of the domain. But in practice, this is not necessary and > Konrad's solution is what everyone seems to be doing. > > Best > W. > > -- > ------------------------------------------------------------------------ > Wolfgang Bangerth email: bang...@colostate.edu > www: http://www.math.colostate.edu/~bangerth/ > > -- The deal.II project is located at http://www.dealii.org/ For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en --- You received this message because you are subscribed to the Google Groups "deal.II User Group" group. To unsubscribe from this group and stop receiving emails from it, send an email to dealii+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/ae39fbcc-c76b-4c03-bfbb-93d19ab2e3d7n%40googlegroups.com.