I am running a code that basically has to do a Craig-Bampton transformation (compute a subset of eigenvalues and eigenvectors) repeteadly for several complex matrices. The matrices that go inside the reduction are obtained as
function craigbampton_reduction(
cyclic_structure::CyclicStructureMatrices; k::Int, N::Int, Na::Int = 3, kwargs...)
(; Kee, Kec, Kcc, Mee, Mec, Mcc, KCee, KCec, KCcc, MCee, MCec, MCcc) = cyclic_structure
θ = 2k / N
eⁱᵗ = cispi(θ) # exp(i(2πk/N))
e⁻ⁱᵗ = conj(eⁱᵗ) # exp(-i(2πk/N))
MCeeᵏ = MCee * eⁱᵗ
Meeᵏ = MCeeᵏ' + Mee + MCeeᵏ
KCeeᵏ = KCee * eⁱᵗ
Keeᵏ = KCeeᵏ' + Kee + KCeeᵏ
Mecᵏ = MCec * e⁻ⁱᵗ + Mec + MCec * eⁱᵗ
Kecᵏ = KCec * e⁻ⁱᵗ + Kec + KCec * eⁱᵗ
MCccᵏ = MCcc * eⁱᵗ
Mccᵏ = MCccᵏ' + Mcc + MCccᵏ
KCccᵏ = KCcc * eⁱᵗ
Kccᵏ = KCccᵏ' + Kcc + KCccᵏ
return craigbampton_reduction(Keeᵏ, Kecᵏ, Kccᵏ, Meeᵏ, Mecᵏ, Mccᵏ; Na = Na, kwargs...)
end
where all the input matrices are sparse and real. Then, for each k inside a for loop, I compute the CB reduction which involves solving the generalized eigenvalue problem for Keeᵏ
and Meeᵏ
. The issue is that, for some k
, different in each simulation, the program can trigger a segfault. In one of these cases, I got the following error (in others the error message is much less descriptive)
[60721] signal 11 (1): Segmentation fault
in expression starting at /home/javier/.julia/dev/NLVibrationAnalysis/examples/arias_each_k/save_cb_for_k.jl:44
+ at ./float.jl:491 [inlined]
+ at ./complex.jl:297 [inlined]
_map_zeropres! at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/SparseArrays/src/higherorderfns.jl:343
_noshapecheck_map at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/SparseArrays/src/higherorderfns.jl:184
map at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/SparseArrays/src/higherorderfns.jl:1187 [inlined]
+ at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/SparseArrays/src/sparsematrix.jl:2252 [inlined]
+ at ./operators.jl:596 [inlined]
#craigbampton_reduction#4 at /home/javier/.julia/dev/NLVibrationAnalysis/src/craigbampton.jl:165
craigbampton_reduction at /home/javier/.julia/dev/NLVibrationAnalysis/src/craigbampton.jl:144 [inlined]
#save_cb_for_k#6 at /home/javier/.julia/dev/NLVibrationAnalysis/examples/arias_each_k/save_cb_for_k.jl:29
save_cb_for_k at /home/javier/.julia/dev/NLVibrationAnalysis/examples/arias_each_k/save_cb_for_k.jl:22
unknown function (ip: 0x7c5e6b56e50d)
top-level scope at /home/javier/.julia/dev/NLVibrationAnalysis/examples/arias_each_k/save_cb_for_k.jl:45
jl_toplevel_eval_flex at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/toplevel.c:934
jl_toplevel_eval_flex at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/toplevel.c:886
ijl_toplevel_eval_in at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/toplevel.c:994
eval at ./boot.jl:430 [inlined]
include_string at ./loading.jl:2734
_include at ./loading.jl:2794
include at ./sysimg.jl:38
unknown function (ip: 0x7c5e6b50a542)
jl_apply at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/julia.h:2157 [inlined]
do_call at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/interpreter.c:126
eval_value at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/interpreter.c:223
eval_stmt_value at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/interpreter.c:174 [inlined]
eval_body at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/interpreter.c:663
jl_interpret_toplevel_thunk at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/interpreter.c:821
jl_toplevel_eval_flex at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/toplevel.c:943
jl_toplevel_eval_flex at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/toplevel.c:886
ijl_toplevel_eval_in at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/toplevel.c:994
eval at ./boot.jl:430 [inlined]
eval_user_input at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:245
repl_backend_loop at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:342
#start_repl_backend#59 at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:327
start_repl_backend at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:324
#run_repl#72 at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:483
run_repl at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:469
jfptr_run_repl_10097.1 at /home/javier/.julia/juliaup/julia-1.11.3+0.x64.linux.gnu/share/julia/compiled/v1.11/REPL/u0gqU_XvZAg.so (unknown line)
#1150 at ./client.jl:446
jfptr_YY.1150_14693.1 at /home/javier/.julia/juliaup/julia-1.11.3+0.x64.linux.gnu/share/julia/compiled/v1.11/REPL/u0gqU_XvZAg.so (unknown line)
jl_apply at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/julia.h:2157 [inlined]
jl_f__call_latest at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/builtins.c:875
#invokelatest#2 at ./essentials.jl:1055 [inlined]
invokelatest at ./essentials.jl:1052 [inlined]
run_main_repl at ./client.jl:430
repl_main at ./client.jl:567 [inlined]
_start at ./client.jl:541
jfptr__start_73609.1 at /home/javier/.julia/juliaup/julia-1.11.3+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
jl_apply at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/julia.h:2157 [inlined]
true_main at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/jlapi.c:900
jl_repl_entrypoint at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/src/jlapi.c:1059
main at /cache/build/builder-demeter6-3/julialang/julia-release-1-dot-11/cli/loader_exe.c:58
unknown function (ip: 0x7c5f4ae2a1c9)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 16424693 (Pool: 16424298; Big: 395); GC: 3963
[1] 60721 segmentation fault (core dumped) julia --project --threads=auto
and, even though I do not understand most of the trace, I notice that an error is hit on the line where Keeᵏ = KCeeᵏ' + Kee + KCeeᵏ
happens. Anybody has an idea of what is going on?