The next difficulty with my solve-on-part-of-domain stuff has now
shown up. It is the constrained-dof issue now, which Roy already
predicted and I didn't believe. Luckily enough, my application seems
to be sufficiently complicated for any potential problem to actually
occur.
Let's assume the following situation:
a - - - b - - - c - - - - - - - d
| | | |
| A | B | |
| | | |
e - - - f - - - g E |
| | | |
| C | D | |
| | | |
h - - - i - - - j - - - - - - - k
| | |
| | |
| | |
| F | G |
| | |
| | |
| | |
l - - - - - - - m - - - - - - - n
Elements A, B, and C are inside the active subdomain, the others are
outside. My application hence imposes Dirichlet boundary conditions
for dofs h, i, f, g, and c, where the values equal the
current_local_solution values at the respective dofs. However, using
the constrainig procedure, the equation for dof i is replaced with the
condition that dof i be the mean value of dofs h and j (likewise for
dof g). On first sight, this is no problem because these two dofs are
fixed as well, and their mean value coincides with the value of dof i.
But then, as PetscLinearSolver creates the submatrix, the matrix row
and column corresponding to dof j are removed from the matrix,
resulting in the equation that dof i be half the value of dof h.
This of course results in a completely wrong solution.
To resolve this problem, I thought of the following possibilities:
Idea #1: Add constraining dofs (in this case, dof j) to the set of
active dofs. The problem with this is that I currently don't assemble
anything on element D, so that dof j doesn't have an equation.
Idea #2: Ensure that refined elements whose neighbors are not refined
are either completely contained in the active subdomain or not at all.
I don't like this because it restricts the user's choice of the
subdomain.
Idea #3: Remove row j from the matrix, but not column j. This results
in a non-quadratic matrix, namely an underdetermined system. I wonder
what PETSc would do then. I don't think it will do what I would like
it to do in this situation. (Jed?)
Idea #4: Upon removing the columns of the matrix, automatically adjust
the right hand side. I think this would actually be quite easy to do
by the following procedure:
1. Remove the inactive rows of the matrix.
2. Let B denote the active columns of the matrix and C all the
remaining (inactive) columns.
3. Subtract C*x from b (where b is the right hand side and x the
solution vector).
4. Then solve with B as before.
Idea #5: Follow Jed's prior objection that just leaving the inactive
components of the solution vector unchanged makes the whole thing
become a weird beast. For instance, this should be able to be
achieved by subtracting an appropriate vector before solving and
adding it again afterwards.
Any thoughts? Well, the more I think about this, the more I find that
#4 is the best choice. It can be done in PetscLinearSolver and will
work quite generally (if I don't overlook something), so that the user
wouldn't have to care about.
Best Regars,
Tim
--
Dr. Tim Kroeger
CeVis -- Center of Complex Systems and Visualization
University of Bremen [email protected]
Universitaetsallee 29 [email protected]
D-28359 Bremen Phone +49-421-218-7710
Germany Fax +49-421-218-4236
------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a
Billion" shares his insights and actions to help propel your
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users