Closed hillyuan closed 5 years ago
I had a similar pb in another code base, where we had to impose a dirichlet BC only on the normal/tangential of a vector solution. In that case, we replaced the original row(s) of the matrix with the component of the normal/tangent vector(s). The row(s) to be eliminated was chosen so that the entries would be as large as possible. E.g., for a normal bc, we chose to replace the row correspnding to the cartesian versor v (i,j, or k) that would make n x v maximum. I'm guessing this is something similar to the master-slave technique, where 1 row would be replaced with the constraint, while the others are kept fixed.
I am usually wary of penalization methods, since tuning the penalization constant can be painful and problem dependent. On the other hand, in the Albany framework, it would be easier to add a penalization than to modify the matrix. Sure, we already modify the matrix with dbc, but that evaluation is trickier than a normal volume field manager sweep, I think.
I am not sure which method would be "best" for Albany (assuming there is a "best" way). I think penalization would be relatively fast to implement (I think you don't even need to add anything to Albany, just one evaluator that is evaluated after the residual evaluator, but before the residual scatter). The master-slave (or slave-master, I wonder what Hegel would think of the method name) one would probably have to do some work. It would probably be best to put such modification as an evaluator in the dirichlet FM, but doing that you also need to modify the dbc factory or the dirichlet evaluator itself, adding an option that make it behave as a master-slace MPC evaluator.
In short, penalization is the way to go for a quick implementation. I am more familiar with master-slave, but 1) it is not clear to me whether it is a "better" technique in general, and 2) it will take a non-negligible amount of coding (and interface addition/change in the input files) to make it work, especially if you want to make it fancy, where the master and slave are detected so that the final system is more stable, or enjoys some other desirable properties. I am not sure about lagrange approach.
Closing for lack of response.
MPC (Multi-Point Constraint) is vastly used in FEM analysis. But as far as I known, it is available in Albany. Its implementation may refer to https://www.colorado.edu/engineering/CAS/courses.d/IFEM.d/IFEM.Ch08.d/IFEM.Ch08.pdf https://www.colorado.edu/engineering/CAS/courses.d/IFEM.d/IFEM.Ch09.d/IFEM.Ch09.pdf or example of implementation here https://www.dealii.org/8.4.1/doxygen/deal.II/group__constraints.html
It is generally not that easy to implement it because no matter what approach (Penalty/Lagragian multiplier/master-slave) is adopted, sparse matrix structure would change. I am wondering how we would do it.
By the way, Periodic boundary condition in #146 is a specific kind of MPC.