mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-12 06:22:00 +00:00
with_mass_matrix keyword for assemble
This commit is contained in:
+18
-10
@@ -348,23 +348,31 @@ function solve!(solver::Solver; empty_assemblies_before_solution=true, show_info
|
||||
end
|
||||
|
||||
""" Default assembler for solver. """
|
||||
function assemble!(solver::Solver; show_info=true, timing=true)
|
||||
function assemble!(solver::Solver; show_info=true, timing=true, with_mass_matrix=false)
|
||||
show_info && info("Assembling problems ...")
|
||||
t0 = Base.time()
|
||||
assembly_times = Dict()
|
||||
nproblems = 0
|
||||
ndofs = 0
|
||||
for problem in solver.problems
|
||||
|
||||
function do_assemble(problem)
|
||||
t00 = Base.time()
|
||||
empty!(problem.assembly)
|
||||
assemble!(problem, solver.time)
|
||||
nproblems += 1
|
||||
if with_mass_matrix && is_field_problem(problem)
|
||||
assemble!(problem, solver.time, Val{:mass_matrix})
|
||||
end
|
||||
t11 = Base.time()
|
||||
return t11-t00
|
||||
end
|
||||
|
||||
t0 = Base.time()
|
||||
assembly_times = map(do_assemble, solver.problems)
|
||||
nproblems = length(assembly_times)
|
||||
|
||||
ndofs = 0
|
||||
for problem in solver.problems
|
||||
Ks = size(problem.assembly.K, 2)
|
||||
Cs = size(problem.assembly.C1, 2)
|
||||
ndofs = max(ndofs, Ks, Cs)
|
||||
t11 = Base.time()
|
||||
assembly_times[problem.name] = t11-t00
|
||||
end
|
||||
|
||||
solver.ndofs = ndofs
|
||||
t1 = round(Base.time()-t0, 2)
|
||||
show_info && info("Assembled $nproblems problems in $t1 seconds. ndofs = $ndofs.")
|
||||
@@ -372,7 +380,7 @@ function assemble!(solver::Solver; show_info=true, timing=true)
|
||||
info("Assembly times:")
|
||||
for (i, problem) in enumerate(solver.problems)
|
||||
pn = problem.name
|
||||
pt = round(assembly_times[pn], 2)
|
||||
pt = round(assembly_times[i], 2)
|
||||
info("$i $pn $pt")
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user