-
Notifications
You must be signed in to change notification settings - Fork 9
/
abstractmaterial_testing_states.jl
66 lines (57 loc) · 1.77 KB
/
abstractmaterial_testing_states.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using Tensors
using BenchmarkTools
abstract type AbstractMaterialState end
@generated function Base.:+(state::T, dstate::T) where {T <: AbstractMaterialState}
expr = [:(state.$p+ dstate.$p) for p in fieldnames(T)]
return :(T($(expr...)))
end
struct SomeState <: AbstractMaterialState
stress::Symm2{Float64}
end
state = SomeState(Symm2{Float64}([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]))
N = 1000
function bench_state(N)
state = SomeState(Symm2{Float64}([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]))
for i in 1:N
dstate = SomeState(randn(Symm2{Float64}))
state = state + dstate
end
return state
end
# println("Benchmark State{Symm2{Float64}}")
# @btime bench_state(N)
struct AnotherState <: AbstractMaterialState
stress::SymmetricTensor{2,3,Float64,6}
strain::SymmetricTensor{2,3,Float64,6}
backstress1::SymmetricTensor{2,3,Float64,6}
backstress2::SymmetricTensor{2,3,Float64,6}
plastic_strain::SymmetricTensor{2,3,Float64,6}
cumeq::Float64
R::Float64
end
function bench_chaboche_style_state(N)
stress = zero(Symm2)
strain = zero(Symm2)
backstress1 = zero(Symm2)
backstress2 = zero(Symm2)
plastic_strain = zero(Symm2)
cumeq = 0.0
R = 0.0
state = AnotherState(stress, strain, backstress1,
backstress2, plastic_strain, cumeq, R)
for i in 1:N
dstress = randn(Symm2)
dstrain = randn(Symm2)
dbackstress1 = randn(Symm2)
dbackstress2 = randn(Symm2)
dplastic_strain = randn(Symm2)
dcumeq = norm(dplastic_strain)
dR = randn()
dstate = AnotherState(dstress, dstrain, dbackstress1,
dbackstress2, dplastic_strain, dcumeq, dR)
state = state + dstate
end
return state
end
println("Benchmark Chaboche State")
@btime bench_chaboche_style_state(N)