Topic: ActiveBC with DOFs
We are going to implement an active boundary condition with its own DOFs, basically it will be a condition, allowing to enforce that a given liner combination of other DOFs should be equal to given value. This will be implemented using a Lagrange multipliers, so the additional condition added to the energy functional is:
lambda*(wi*ri + c) = 0,
where wi are the weights, ri linked DOFs, and lambda is associated multiplier, which is a new unknown, introduced by this condition.
I went through the activeBoundaryCondition implementation, it seems that there is some support for internal DOFs, but this is not complete.
I suggest following modifications:
1) the existing (old) boundary conditions already have the possibility to introduce their own DOFs, by managing internal dof managers, see generalboundarycondition.h:
/// Gives the number of internal dof managers.
virtual int giveNumberOfInternalDofManagers() { return 0; }
/// Gives an internal dof manager from receiver.
virtual DofManager *giveInternalDofManager(int i) { return NULL; }2) this is already supported byEngngModel:: forceEquationNumbering methods, so the equations are properly allocated to internal BC unknowns.
Therefore I would suggest to keep this (activeBC maintaining internal dofManagers), or optionally derive activeBC from DofManager. This has a logic, if it has DOFs, then it is a dofManager, and we can use this dofManager interface rather than inventing special interface for activeBC DOFs.