-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Labels
Description
The current interpolate
has a bit too much overhead to be acceptable
For example
X = Dict(
1 => [0.0, 0.0, 0.0],
2 => [1.0, 0.0, 0.0],
3 => [1.0, 1.0, 0.0],
4 => [0.0, 1.0, 0.0],
5 => [0.0, 0.0, 1.0],
6 => [1.0, 0.0, 1.0],
7 => [1.0, 1.0, 1.0],
8 => [0.0, 1.0, 1.0])
u = Dict(
1 => [0.0, 0.0, 0.0],
2 => [-1/3, 0.0, 0.0],
3 => [-1/3, -1/3, 0.0],
4 => [0.0, -1/3, 0.0],
5 => [0.0, 0.0, 1.0],
6 => [-1/3, 0.0, 1.0],
7 => [-1/3, -1/3, 1.0],
8 => [0.0, -1/3, 1.0])
element = Element(Hex8, (1, 2, 3, 4, 5, 6, 7, 8))
update!(element, "geometry", 0.0 => X)
update!(element, "displacement", 0.0 => u)
update!(element, "youngs modulus", 288.0)
update!(element, "poissons ratio", 1/3)
ip = get_integration_points(element)
using BenchmarkTools
Benchmarking this gives
julia> @btime element("youngs modulus", $ip, 1.0)
87.709 ns (2 allocations: 32 bytes)
This is a bit long and there are two allocations.
I tried to store the field using two vectors, instead of a dictionary with the assumption that the number of keys are small with moderate success. Using d54d5d3 I got
julia> @btime element("youngs modulus", $ip, 1.0)
65.823 ns (2 allocations: 32 bytes)