Topic: How to implement surface tension
Hello, I have some practical questions
Just some short background;
I'm need to simulate processes involving surface tension. In it's simplest form it's just a surface traction;
where H is the surface curvature (surface divergence of the normal). γ is a material parameter.
In almost all cases, it's best to rewrite the integral with the divergence theorem, and you end with a load dependent only on the normal, and an edge load where the free surface ends (this makes it possible to use linear elements, which is very nice)
What you end up with in the weak form is
In 2D (plane strain or axisymm), Γ is the free surface, C would be the endpoints (if existent) of Γ. m is the tangent of Γ. ∇s would be the derivative along the edge.
Now let's put the theory aside and look at the implementation! I'm seeing three possible options here. I'll list the pros and cons as i see them, but i would appreciate some input on what way is preferable.
Hard code a the edge loads in the input file. This method is of course limited not to have large deformations, which is typical when using surface tension simulations. Not really a suitable solution at all.
Introduce a new type of boundary condition to bcType, i.e. IsotropicSurfaceTensionBC. One problem is the edge term from the divergence theorem, which would need to be applied where the free surface ends. Possible a point
Implement a new boundary element. The element will just as I've just finished such an element, but there is some minor issues.
This edge element should, just as ConstantEdgeLoad, fit both SM and FM problems just fine, but I either let the Domain default to V_u, V_v, P_f (adding zeros to my load vector) or specify it manually to just V_u, V_v using giveDofManIDMask.
The V_u, D_u independence points towards using a load type, while things like the boundary term seems to fit an element more nicely.
Now, this load would also change if you have axisymmetry. If implemented as an element, I guess it would simply be as with any other element, implement another element for each domain type. Not sure how constantboundaryload handles this sort of thing.
In short; I can't quite decide on what approach i should go for, 2 or 3.
Small note;
One could also generalize this even more, the surface tension doesn't have to be isotropic. In that case, I can't see any elegant solution but to use boundary elements, with respective surface material models. However, this is very uncommon it's not worth considering