Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid type instability in SemidiscretizationCoupled #1979

Merged
merged 8 commits into from
Jun 21, 2024
20 changes: 4 additions & 16 deletions src/semidiscretization/semidiscretization_coupled.jl
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,8 @@ end

function copy_to_coupled_boundary!(u_ode, semi_coupled, semi, i, n_boundaries,
boundary_condition, boundary_conditions...)
copy_to_coupled_boundary!(boundary_condition, u_ode, semi_coupled, semi)
other_semi = semi_coupled.semis[boundary_condition.other_semi_index]
efaulhaber marked this conversation as resolved.
Show resolved Hide resolved
copy_to_coupled_boundary!(boundary_condition, u_ode, semi_coupled, semi, other_semi)
if i < n_boundaries
copy_to_coupled_boundary!(u_ode, semi_coupled, semi, i + 1, n_boundaries,
boundary_conditions...)
Expand All @@ -558,28 +559,15 @@ function copy_to_coupled_boundary!(boundary_conditions::Union{Tuple, NamedTuple}
boundary_conditions...)
end

function mesh_equations_solver_cache(other_semi_index, i, semi_, semi_tuple...)
SimonCan marked this conversation as resolved.
Show resolved Hide resolved
if i == other_semi_index
return mesh_equations_solver_cache(semi_)
else
# Walk through semidiscretizations until we find `i`
mesh_equations_solver_cache(other_semi_index, i + 1, semi_tuple...)
end
end

# In 2D
function copy_to_coupled_boundary!(boundary_condition::BoundaryConditionCoupled{2},
u_ode,
semi_coupled, semi)
u_ode, semi_coupled, semi, other_semi)
@unpack u_indices = semi_coupled
@unpack other_semi_index, other_orientation, indices = boundary_condition
@unpack coupling_converter, u_boundary = boundary_condition

mesh_own, equations_own, solver_own, cache_own = mesh_equations_solver_cache(semi)

mesh_other, equations_other, solver_other, cache_other = mesh_equations_solver_cache(other_semi_index,
1,
semi_coupled.semis...)
mesh_other, equations_other, solver_other, cache_other = mesh_equations_solver_cache(other_semi)

node_coordinates_other = cache_other.elements.node_coordinates
u_ode_other = get_system_u_ode(u_ode, other_semi_index, semi_coupled)
Expand Down
Loading