From dd847e4370a9807651cda0d474af89cc5dfa5522 Mon Sep 17 00:00:00 2001 From: SimonCan Date: Tue, 7 Nov 2023 23:39:50 +0000 Subject: [PATCH] Fixed type instability with loops over semidiscretizations using lispy tuple programming. --- .../semidiscretization_coupled.jl | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/semidiscretization/semidiscretization_coupled.jl b/src/semidiscretization/semidiscretization_coupled.jl index 6e0bd7681e..635b25dada 100644 --- a/src/semidiscretization/semidiscretization_coupled.jl +++ b/src/semidiscretization/semidiscretization_coupled.jl @@ -143,11 +143,14 @@ end @view u_ode[semi.u_indices[index]] end -@inline function call_rhs!(u_ode, du_ode, i, t, semi::SemidiscretizationCoupled) +# Fix for the type instability. +@inline function call_rhs!(u_ode, du_ode, t, semi, i, semi_, semi_tuple...) u_loc = get_system_u_ode(u_ode, i, semi) du_loc = get_system_u_ode(du_ode, i, semi) rhs!(du_loc, u_loc, semi.semis[i], t) - # @trixi_timeit timer() "system #$i" rhs!(du_loc, u_loc, semi.semis[i], t) + if length(semi_tuple) > 0 + call_rhs!(u_ode, du_ode, t, semi, i+1, semi.semis) + end end function rhs!(du_ode, u_ode, semi::SemidiscretizationCoupled, t) @@ -160,7 +163,13 @@ function rhs!(du_ode, u_ode, semi::SemidiscretizationCoupled, t) foreach(semi_ -> copy_to_coupled_boundary!(semi_.boundary_conditions, u_ode, semi), semi.semis) # Call rhs! for each semidiscretization - foreach(index -> call_rhs!(u_ode, du_ode, index, t, semi), eachsystem(semi)) + call_rhs!(u_ode, du_ode, t, semi, 1, semi.semis...) + + # for i in eachsystem(semi) + # u_loc = get_system_u_ode(u_ode, i, semi) + # du_loc = get_system_u_ode(du_ode, i, semi) + # rhs!(du_loc, u_loc, semi.semis[i], t) + # end runtime = time_ns() - time_start put!(semi.performance_counter, runtime) @@ -470,6 +479,10 @@ function copy_to_coupled_boundary!(boundary_conditions::Union{Tuple, NamedTuple} foreach(boundary_condition -> copy_to_coupled_boundary!(boundary_condition, u_ode, semi), boundary_conditions) end +function mesh_equations_solver_cache_coupled!(semi_, other_semi_index, mesh, equations, solver, cache) + mesh, equations, solver, cache = mesh_equations_solver_cache(semi.semis[other_semi_index]) +end + # In 2D function copy_to_coupled_boundary!(boundary_condition::BoundaryConditionCoupled{2}, u_ode, semi) @@ -477,6 +490,8 @@ function copy_to_coupled_boundary!(boundary_condition::BoundaryConditionCoupled{ @unpack other_semi_index, other_orientation, indices = boundary_condition @unpack coupling_converter, u_boundary = boundary_condition + # foreach(index -> call_rhs!(u_ode, du_ode, index, t, semi), eachsystem(semi)) + # foreach(index -> mesh_equations_solver_cache_coupled!(index, _index, mesh, equations, solver, cache), eachsystem(semi)) mesh, equations, solver, cache = mesh_equations_solver_cache(semi.semis[other_semi_index]) @unpack node_coordinates = cache.elements u = wrap_array(get_system_u_ode(u_ode, other_semi_index, semi), mesh, equations, solver,