@@ -173,7 +173,7 @@ def _elevate_degree(mesh, degree):
173173 return Mesh (f )
174174
175175
176- use_netgen = False
176+ use_netgen = True
177177quadrilateral = True
178178
179179T = 20 # 10.0 # 12.0
@@ -183,17 +183,17 @@ def _elevate_degree(mesh, degree):
183183ntimesteps = int (T / dt_float )
184184t = Constant (0.0 )
185185dim = 2
186- degree = 3 # 2 - 4
186+ degree = 2 # 2 - 4
187187if use_netgen :
188- nref = 2 # # 2 - 5 tested for CSM 1 and 2
188+ nref = 1 # # 2 - 5 tested for CSM 1 and 2
189189 mesh = make_mesh_netgen (0.1 / 2 ** nref )
190190 mesh = _elevate_degree (mesh , degree )
191191 mesh_f = Submesh (mesh , dmcommon .CELL_SETS_LABEL , label_fluid , mesh .topological_dimension ())
192192 mesh_f = _elevate_degree (mesh_f , degree )
193193 mesh_s = Submesh (mesh , dmcommon .CELL_SETS_LABEL , label_struct , mesh .topological_dimension ())
194194 mesh_s = _elevate_degree (mesh_s , degree )
195195else :
196- nref = 1
196+ nref = 0
197197 mesh = make_mesh (quadrilateral )
198198 if nref > 0 :
199199 mesh = MeshHierarchy (mesh , nref )[- 1 ]
@@ -658,6 +658,8 @@ def compute_elast_tensors(dim, u, lambda_s, mu_s):
658658 S = lambda_s * tr (E ) * Identity (dim ) + 2.0 * mu_s * E
659659 return F , J , E , S
660660 if True : # implicit midpoint
661+ theta_p = Constant (1. / 2. )
662+ theta_m = Constant (1. / 2. )
661663 F_f , J_f , E_f , S_f = compute_elast_tensors (dim , (u_f + u_f_0 ) / 2 , lambda_s , mu_s )
662664 F_s , J_s , E_s , S_s = compute_elast_tensors (dim , (u_s + u_s_0 ) / 2 , lambda_s , mu_s )
663665 v_f_mid = (v_f + v_f_0 ) / 2
@@ -681,38 +683,65 @@ def compute_elast_tensors(dim, u, lambda_s, mu_s):
681683 inner (dot (- p_mid * Identity (dim ) + rho_f * nu_f * 2 * sym (dot (grad (v_f_mid ), inv (F_f ))), dot (J_f * transpose (inv (F_f )), n_f )), dv_s ('|' )) * ds_s (label_interface )
682684 #inner(dot(- p('|') * Identity(dim) + rho_f * nu_f * 2 * sym(dot(grad(v_f('|')), inv(F_f))), dot(J_f * transpose(inv(F_f)), n_f)), dv_s('|')) * ds_s(label_interface)
683685 else : # CN
684- F_f , J_f , E_f , S_f = compute_elast_tensors (dim , u_f , lambda_s , mu_s )
685- F_s , J_s , E_s , S_s = compute_elast_tensors (dim , u_s , lambda_s , mu_s )
686- F_f_0 , J_f_0 , E_f_0 , S_f_0 = compute_elast_tensors (dim , u_f_0 , lambda_s , mu_s )
687- F_s_0 , J_s_0 , E_s_0 , S_s_0 = compute_elast_tensors (dim , u_s_0 , lambda_s , mu_s )
688- theta_p = Constant (1. / 2. )
689- theta_m = Constant (1. / 2. )
686+ #theta_p = Constant(1. / 2. + 100 * float(dt))
687+ #theta_m = Constant(1. / 2. - 100 * float(dt))
688+ theta_p = Constant (1. )
689+ theta_m = Constant (0. )
690690 v_f_dot = (v_f - v_f_0 ) / dt
691691 u_f_dot = (u_f - u_f_0 ) / dt
692692 v_s_dot = (v_s - v_s_0 ) / dt
693693 u_s_dot = (u_s - u_s_0 ) / dt
694- def _fluid (v_f , u_f , F_f , J_f , p ):
695- return (inner (rho_f * J_f * vdot , dv_f ) +
694+ def _fluid (v_f , u_f , p ):
695+ F_f , J_f , E_f , S_f = compute_elast_tensors (dim , u_f , lambda_s , mu_s )
696+ return (inner (rho_f * J_f * v_f_dot , dv_f ) +
696697 inner (rho_f * J_f * dot (dot (grad (v_f ), inv (F_f )), v_f - u_f_dot ), dv_f ) +
697698 inner (rho_f * J_f * nu_f * 2 * sym (dot (grad (v_f ), inv (F_f ))), dot (grad (dv_f ), inv (F_f ))) +
698699 J_f * inner (p , tr (dot (grad (dv_f ), inv (F_f )))) -
699700 J_f * inner (tr (dot (grad (v_f ), inv (F_f ))), dp ) +
700701 J_f * inner (dot (grad (u_f ), inv (F_f )), dot (grad (du_f ), inv (F_f )))) * dx_f
701- def _struct (F_s , S_s , J_s ):
702+ def _struct (v_f , u_f , p , v_s , u_s ):
703+ F_f , J_f , E_f , S_f = compute_elast_tensors (dim , u_f , lambda_s , mu_s )
704+ F_s , J_s , E_s , S_s = compute_elast_tensors (dim , u_s , lambda_s , mu_s )
702705 return (inner (rho_s * J_s * v_s_dot , dv_s ) +
703706 inner (dot (F_s , S_s ), grad (dv_s )) -
704707 inner (rho_s * J_s * as_vector ([0. , - g_s ]), dv_s ) +
705- inner (J_s * (u_s - u_s_0 ) / dt - v_s_mid , du_s )) * dx_s
706- residual_f = theta_p * _fluid (v_f , u_f , F_f , J_f , p ) + \
707- theta_m * _fluid (v_f_0 , u_f_0 , F_f_0 , J_f_0 , p_0 )
708- residual_s = theta_p * _struct () + \
709- theta_m * _struct () + \
710- inner (dot (- p_mid * Identity (dim ) + rho_f * nu_f * 2 * sym (dot (grad (v_f_mid ), inv (F_f ))), dot (J_f * transpose (inv (F_f )), n_f )), dv_s ('|' )) * ds_s (label_interface )
711- #inner(dot(- p('|') * Identity(dim) + rho_f * nu_f * 2 * sym(dot(grad(v_f('|')), inv(F_f))), dot(J_f * transpose(inv(F_f)), n_f)), dv_s('|')) * ds_s(label_interface)
708+ inner (J_s * (u_s_dot - v_s ), du_s )) * dx_s + \
709+ inner (dot (- p ('|' ) * Identity (dim ) + rho_f * nu_f * 2 * sym (dot (grad (v_f ('|' )), inv (F_f ))), dot (J_f * transpose (inv (F_f )), n_f )), dv_s ('|' )) * ds_s (label_interface )
710+ #residual_f = theta_p * _fluid(v_f, u_f, p) + \
711+ # theta_m * _fluid(v_f_0, u_f_0, p_0)
712+ #residual_s = theta_p * _struct(v_f, u_f, p, v_s, u_s) + \
713+ # theta_m * _struct(v_f_0, u_f_0, p_0, v_s_0, u_s_0)
714+ F_f , J_f , E_f , S_f = compute_elast_tensors (dim , u_f , lambda_s , mu_s )
715+ F_s , J_s , E_s , S_s = compute_elast_tensors (dim , u_s , lambda_s , mu_s )
716+ v_f_mid = v_f
717+ v_s_mid = v_s
718+ u_f_mid = u_f
719+ p_mid = p
720+ """
721+ residual_f = (
722+ inner(rho_f * J_f * (v_f - v_f_0) / dt, dv_f) +
723+ inner(rho_f * J_f * dot(dot(grad(v_f_mid), inv(F_f)), v_f_mid - (u_f - u_f_0) / dt), dv_f) +
724+ inner(rho_f * J_f * nu_f * 2 * sym(dot(grad(v_f_mid), inv(F_f))), dot(grad(dv_f), inv(F_f))) -
725+ J_f * inner(p_mid, tr(dot(grad(dv_f), inv(F_f)))) +
726+ J_f * inner(tr(dot(grad(v_f_mid), inv(F_f))), dp) +
727+ J_f * inner(dot(grad(u_f_mid), inv(F_f)), dot(grad(du_f), inv(F_f)))
728+ ) * dx_f
729+ residual_s = (
730+ inner(rho_s * J_s * (v_s - v_s_0) / dt, dv_s) +
731+ inner(dot(F_s, S_s), grad(dv_s)) -
732+ inner(rho_s * J_s * as_vector([0., - g_s]), dv_s) +
733+ inner(J_s * ((u_s - u_s_0) / dt - v_s_mid), du_s)
734+ ) * dx_s + \
735+ inner(dot(- p('|') * Identity(dim) + rho_f * nu_f * 2 * sym(dot(grad(v_f('|')), inv(F_f))), dot(J_f * transpose(inv(F_f)), n_f)), dv_s('|')) * ds_s(label_interface)
736+ #inner(dot(- p_mid * Identity(dim) + rho_f * nu_f * 2 * sym(dot(grad(v_f_mid), inv(F_f))), dot(J_f * transpose(inv(F_f)), n_f)), dv_s('|')) * ds_s(label_interface)
737+ """
738+ residual_f = _fluid (v_f , u_f , p )
739+ residual_s = _struct (v_f , u_f , p , v_s , u_s )
712740 residual = residual_f + residual_s
713- #v_f_left = 1.5 * Ubar * y_f * (H - y_f) / ((H / 2) ** 2) * conditional(t < 2.0, (1 - cos(pi / 2 * t)) / 2., 1.)
714- v_f_left = 1.5 * Ubar * y_f * (H - y_f ) / ((H / 2 ) ** 2 ) * conditional (t < 2.0 + dt / 10. , (1 - cos (pi / 2 * (t - dt / 2 ))) / 2. , 1. )
715- bc_v_f_inflow = DirichletBC (V .sub (0 ), as_vector ([v_f_left , 0. ]), (label_left , ))
741+ def v_f_left (t_ ):
742+ return 1.5 * Ubar * y_f * (H - y_f ) / ((H / 2 ) ** 2 ) * conditional (t_ < 2.0 + dt / 10. , (1 - cos (pi / 2 * t_ )) / 2. , 1. )
743+ bc_v_f_inflow = DirichletBC (V .sub (0 ), as_vector ([theta_p * v_f_left (t - dt + theta_p * dt ) +
744+ theta_m * v_f_left (t - dt + theta_m * dt ), 0. ]), (label_left , ))
716745 bc_v_f_zero = DirichletBC (V .sub (0 ), Constant ((0 , 0 )), (label_bottom , label_top , label_circle ))
717746 bbc_v_f_noslip = DirichletBC (V .sub (0 ), Constant ((0 , 0 )), ((label_circle , label_interface ), ))
718747 bc_v_f_noslip = EquationBC (inner (v_f - v_s , dv_f ) * ds_f (label_interface ) == 0 , solution , label_interface , bcs = [bbc_v_f_noslip ], V = V .sub (0 ))
0 commit comments