Transferring stress from fluid to structure
The current interface of the hyperelasticity solver requires that Neumann boundary conditions are given as a Function or Expression defined on the structure mesh. Such a Function is difficult to construct given only the fluid stress in the fluid domain.
However, it is simple to compute the resulting entries that should go into the right-hand side vector by first assembling the entries on the fluid domain and then mapping those entries over to corresponding entries in the structure domain:
L_F = dot(v_F, dot(Sigma_F, N_F))*ds
b_F = assemble(L_F)
b_S += b_F with a suitable reordering of the entries
I suggest that the elasticity solver does not use VariationalProblem internally but instead assembles and applies boundary conditions "manually" and extends the user interface such that one may add entries to the vector.
Blueprint information
- Status:
- Not started
- Approver:
- None
- Priority:
- Undefined
- Drafter:
- None
- Direction:
- Needs approval
- Assignee:
- None
- Definition:
- New
- Series goal:
- None
- Implementation:
- Unknown
- Milestone target:
- None
- Started by
- Completed by
Whiteboard
With some recent changes to the Expression stuff in DOLFIN, I am not able to run any of the twist demos to test changes. Is it a trivial fix to the Expression syntax that is required in the cbc.twist algorithms?
AL: It may or may not work now. I just fixed a bug in UFL that might make things work. The changes in the interface are as follows:
1. Argument V=V should be removed in Expression
2. Mesh argument should be removed in Constant
3. Subclassed Expressions overloading eval must implement the dim() function if not scalar.
e.g. $ python twist.py
A hyperelastic cube twisted by 60 degrees
Debug: Trying to automatically figure out the element [at python-
Debug: Assuming it's a triangle [at python-
Debug: It's a vector [at python-
Traceback (most recent call last):
File "twist.py", line 53, in <module>
u = twist.solve()
File "/Users/
return solver.solve(self)
File "/Users/
dirichlet_
File "twist.py", line 14, in dirichlet_
clamp = Expression(("0.0", "0.0", "0.0"), V = vector)
File "/Users/
element = ufl.VectorEleme
File "/Users/
(self._family, self._cell, self._degree, len(self.
TypeError: int argument required