while we assume free-flow conditions on the remainder of the external
boundary,
@f{align*}
- (2\eta \varepsilon(\mathbf v) + p \mathbf 1) \cdot \mathbf n = 0
+ (2\eta \varepsilon(\mathbf v) - p \mathbf 1) \cdot \mathbf n = 0
\qquad\qquad
\text{on}\ \Gamma_{f,2} = \partial\Omega \cap \partial\Omega_f \backslash
\Gamma_{f,1}.
Secondly, the forces (traction) on the solid equal the normal stress from the fluid,
@f{align*}
(C \varepsilon(\mathbf u)) \mathbf n =
- (2 \eta \varepsilon(\mathbf v) + p \mathbf 1) \mathbf n \qquad\qquad
- \text{on}\ \Gamma_{i} = \partial\Omega_s \cap \partial\Omega_f.
+ (2 \eta \varepsilon(\mathbf v) - p \mathbf 1) \mathbf n \qquad\qquad
+ \text{on}\ \Gamma_{i} = \partial\Omega_s \cap \partial\Omega_f,
@f}
+ where $\mathbf{n}$ is the normal vector on $\Gamma_{i}$ pointing from
+ the solid to the fluid.
We get a weak formulation of this problem by following our usual rule of
multiplying from the left by a test function and integrating over the
+ (\varepsilon(\mathbf b), C \varepsilon(\mathbf u))_{\Omega_s} &
\\
- (\mathbf b,
- (2 \eta \varepsilon(\mathbf v) + p \mathbf 1) \mathbf n)_{\Gamma_i}
+ (2 \eta \varepsilon(\mathbf v) - p \mathbf 1) \mathbf n)_{\Gamma_i}
&=
0,
@f}
+ (\varepsilon(\mathbf b_h), C \varepsilon(\mathbf u_h))_{\Omega_s} &
\\
- (\mathbf b_h,
- (2 \eta \varepsilon(\mathbf v_h) + p \mathbf 1) \mathbf n)_{\Gamma_i}
+ (2 \eta \varepsilon(\mathbf v_h) - p \mathbf 1) \mathbf n)_{\Gamma_i}
&=
0,
@f}
The term that is of more interest is the interface term,
@f[
- (\mathbf b_h,
- (2 \eta \varepsilon(\mathbf v_h) + p \mathbf 1) \mathbf n)_{\Gamma_i}.
+ -(\mathbf b_h,
+ (2 \eta \varepsilon(\mathbf v_h) - p \mathbf 1) \mathbf n)_{\Gamma_i}.
@f]
Based on our assumption that the interface $\Gamma_i$ coincides with
cell boundaries, this can in fact be written as a set of face
term above yields the following contribution to the global matrix
entry $i,j$:
@f[
- \sum_K (\psi_i[\mathbf u],
- (2 \eta \varepsilon(\psi_j[\mathbf v]) + \psi_j[p] \mathbf 1)
+ -\sum_K (\psi_i[\mathbf u],
+ (2 \eta \varepsilon(\psi_j[\mathbf v]) - \psi_j[p] \mathbf 1)
\mathbf n)_{\partial K \cap \Gamma_i}.
@f]
Although it isn't immediately obvious, this term presents a slight
inflow at the left and outflow at the right. At the left and right
boundaries, no boundary conditions are imposed explicitly for the
flow, yielding the implicit no-stress condition $(2\eta
-\varepsilon(\mathbf v) + p \mathbf 1) \cdot \mathbf n = 0$.
+\varepsilon(\mathbf v) - p \mathbf 1) \cdot \mathbf n = 0$.
The conditions on the interface between the two domains has already been
discussed above.
Writing output...
Refinement cycle 2
- Number of active cells: 412
- Number of degrees of freedom: 3667
+ Number of active cells: 436
+ Number of degrees of freedom: 3723
Assembling...
Solving...
Writing output...
Refinement cycle 3
- Number of active cells: 1216
- Number of degrees of freedom: 9999
+ Number of active cells: 1096
+ Number of degrees of freedom: 7737
Assembling...
Solving...
Writing output...
Refinement cycle 4
- Number of active cells: 2788
- Number of degrees of freedom: 18537
+ Number of active cells: 2656
+ Number of degrees of freedom: 15177
Assembling...
Solving...
Writing output...
Refinement cycle 5
- Number of active cells: 6496
- Number of degrees of freedom: 35985
+ Number of active cells: 5992
+ Number of degrees of freedom: 29061
Assembling...
Solving...
Writing output...
FEFaceValues<dim> stokes_fe_face_values(stokes_fe,
common_face_quadrature,
update_JxW_values |
- update_normal_vectors |
update_gradients | update_values);
FEFaceValues<dim> elasticity_fe_face_values(elasticity_fe,
common_face_quadrature,
- update_values);
+ update_normal_vectors |
+ update_values);
FESubfaceValues<dim> stokes_fe_subface_values(stokes_fe,
common_face_quadrature,
update_JxW_values |
- update_normal_vectors |
update_gradients |
update_values);
FESubfaceValues<dim> elasticity_fe_subface_values(elasticity_fe,
common_face_quadrature,
- update_values);
+ update_normal_vectors |
+ update_values);
// ...to objects that are needed to describe the local contributions to
// the global linear system...
for (unsigned int q = 0; q < n_face_quadrature_points; ++q)
{
const Tensor<1, dim> normal_vector =
- stokes_fe_face_values.normal_vector(q);
+ elasticity_fe_face_values.normal_vector(q);
for (unsigned int k = 0; k < stokes_fe_face_values.dofs_per_cell; ++k)
{
++i)
for (unsigned int j = 0; j < stokes_fe_face_values.dofs_per_cell; ++j)
local_interface_matrix(i, j) +=
- -((2 * viscosity * (stokes_symgrad_phi_u[j] * normal_vector) +
+ -((2 * viscosity * (stokes_symgrad_phi_u[j] * normal_vector) -
stokes_phi_p[j] * normal_vector) *
elasticity_phi[i] * stokes_fe_face_values.JxW(q));
}