Skip to content

Commit 1fbc37d

Browse files
committed
fixes and optimizations
1 parent 354f451 commit 1fbc37d

File tree

7 files changed

+85
-83
lines changed

7 files changed

+85
-83
lines changed

src/Models/Material/Material_Models/Correspondence/Correspondence.jl

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,10 @@ function compute_correspondence_model(nodes::AbstractVector{Int64},
184184

185185
# material_models = split(material_parameter["Material Model"], "+")
186186
# material_models = map(r -> strip(r), material_models)
187-
@timeit "Calculated material" begin
188-
for material_model in Data_Manager.get_analysis_model("Correspondence Model", block)
189-
mod = Data_Manager.get_model_module(material_model)
187+
@timeit "Calculate material" begin
188+
for material_model in Data_Manager.get_analysis_model("Correspondence Model",
189+
block)
190+
mod::Module = Data_Manager.get_model_module(material_model)
190191

191192
mod.compute_stresses(nodes,
192193
dof,
@@ -202,14 +203,14 @@ function compute_correspondence_model(nodes::AbstractVector{Int64},
202203
if rotation
203204
stress_NP1 = rotate(nodes, stress_NP1, rotation_tensor, true)
204205
end
205-
@timeit "Calculated bond force" calculate_bond_force!(nodes,
206-
dof,
207-
deformation_gradient,
208-
undeformed_bond,
209-
bond_damage,
210-
inverse_shape_tensor,
211-
stress_NP1,
212-
bond_force)
206+
@timeit "Compute bond force" calculate_bond_force!(nodes,
207+
dof,
208+
deformation_gradient,
209+
undeformed_bond,
210+
bond_damage,
211+
inverse_shape_tensor,
212+
stress_NP1,
213+
bond_force)
213214

214215
@timeit "zero energy" Zero_Energy_Control.compute_control(nodes,
215216
material_parameter,

src/Models/Material/Material_Models/Correspondence/Correspondence_Elastic.jl

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,26 @@ function compute_stresses(nodes::AbstractVector{Int64},
110110
strain_increment::NodeTensorField{Float64},
111111
stress_N::NodeTensorField{Float64},
112112
stress_NP1::NodeTensorField{Float64})
113-
mapping::AbstractMatrix{Int64} = get_mapping(dof)
113+
mapping = get_mapping(dof)
114114
hooke_matrix::NodeTensorField{Float64} = Data_Manager.get_field("Elasticity Matrix")
115-
for iID in nodes
116-
@views sNP1 = stress_NP1[iID, :, :]
117-
@views sInc = strain_increment[iID, :, :]
118-
@views sN = stress_N[iID, :, :]
119-
@views fast_mul!(sNP1, hooke_matrix[iID, :, :], sInc, sN, mapping)
115+
116+
n_map = size(mapping, 1)
117+
map_i = @view mapping[:, 1]
118+
map_j = @view mapping[:, 2]
119+
120+
@inbounds for iID in nodes
121+
@fastmath for m in 1:n_map
122+
i = map_i[m]
123+
j = map_j[m]
124+
sNP1::Float64 = stress_N[iID, i, j]
125+
for k in 1:n_map
126+
sNP1 += hooke_matrix[iID, m, k] * strain_increment[iID, map_i[k], map_j[k]]
127+
end
128+
stress_NP1[iID, i, j] = sNP1
129+
if i != j
130+
stress_NP1[iID, j, i] = sNP1
131+
end
132+
end
120133
end
121134
end
122135

src/Models/Material/Material_Models/Zero_Energy_Control/Zero_Energy_Control.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ function compute_control(nodes::AbstractVector{Int64},
3838
dt::Float64)
3939
for zero_energy_model in Data_Manager.get_analysis_model("Zero Energy Control Model",
4040
block)
41+
if zero_energy_model == ""
42+
continue
43+
end
4144
mod = Data_Manager.get_model_module(zero_energy_model)
4245

4346
mod.compute_control(nodes,

src/Models/Pre_calculation/Pre_Calculation_Factory.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ function compute_model(nodes::AbstractVector{Int64},
9191
if !active
9292
continue
9393
end
94-
mod = Data_Manager.get_model_module(pre_calculation_model)
94+
mod::Module = Data_Manager.get_model_module(pre_calculation_model)
9595

9696
@timeit "compute $pre_calculation_model" mod.compute(nodes,
9797
model_param,

src/Models/Pre_calculation/shape_tensor.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,13 @@ Compute the shape tensor.
8080
function compute(nodes::AbstractVector{Int64},
8181
parameter::Union{Dict,OrderedDict},
8282
block::Int64)
83-
nlist = Data_Manager.get_nlist()
84-
volume = Data_Manager.get_field("Volume")
85-
omega = Data_Manager.get_field("Influence Function")
86-
bond_damage = Data_Manager.get_bond_damage("NP1")
87-
undeformed_bond = Data_Manager.get_field("Bond Geometry")
88-
shape_tensor = Data_Manager.get_field("Shape Tensor")
89-
inverse_shape_tensor = Data_Manager.get_field("Inverse Shape Tensor")
83+
nlist::BondScalarState{Int64} = Data_Manager.get_nlist()
84+
volume::NodeScalarField{Float64} = Data_Manager.get_field("Volume")
85+
omega::BondScalarState{Float64} = Data_Manager.get_field("Influence Function")
86+
bond_damage::BondScalarState{Float64} = Data_Manager.get_bond_damage("NP1")
87+
undeformed_bond::BondVectorState{Float64} = Data_Manager.get_field("Bond Geometry")
88+
shape_tensor::NodeTensorField{Float64} = Data_Manager.get_field("Shape Tensor")
89+
inverse_shape_tensor::NodeTensorField{Float64} = Data_Manager.get_field("Inverse Shape Tensor")
9090
# update_list = Data_Manager.get_field("Update")
9191
# active_nodes = Data_Manager.get_field("Active Nodes")
9292
# active_nodes = find_active_nodes(update_list, active_nodes, nodes)

test/unit_tests/Models/Material/Material_Models/Correspondence/ut_Correspondence.jl

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,6 @@
55
using Test
66
#include("../../../../../../src/PeriLab.jl")
77
#using .PeriLab
8-
@testset "zero_energy_mode_compensation_exception" begin
9-
test_data_manager = PeriLab.Data_Manager
10-
nnodes = 2
11-
test_data_manager.set_num_controller(nnodes)
12-
nn = test_data_manager.create_constant_node_scalar_field("Number of Neighbors", Int64)
13-
nn[1] = 2
14-
nn[2] = 3
15-
nodes = Vector{Int64}(1:2)
16-
17-
PeriLab.Solver_Manager.Model_Factory.Material.Correspondence.zero_energy_mode_compensation(nodes,
18-
Dict{String,
19-
Any}(),
20-
0.0,
21-
0.0)
22-
end
238

249
@testset "ut_init_model" begin
2510
test_data_manager = PeriLab.Data_Manager

test/unit_tests/Models/Material/Zero_Energy_Control/ut_Global_Zero_Energy_Control.jl

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,59 +5,59 @@
55
using Test
66

77
@testset "control_name" begin
8-
@test PeriLab.Solver_Manager.Model_Factory.Material.Correspondence.Zero_energy_control.Global_Zero_Energy_Control.control_name() ==
8+
@test PeriLab.Solver_Manager.Zero_Energy_Control.Global_Zero_Energy_Control.control_name() ==
99
"Global"
1010
end
1111

1212
@testset "rotate_fourth_order_tensor_interface test" begin
1313
testval = zeros(3, 3, 3, 3)
14-
@test PeriLab.Solver_Manager.Model_Factory.Material.Correspondence.Zero_energy_control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(3),
15-
zeros(3,
16-
3,
17-
3,
18-
3),
19-
3,
20-
true) ==
14+
@test PeriLab.Solver_Manager.Zero_Energy_Control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(3),
15+
zeros(3,
16+
3,
17+
3,
18+
3),
19+
3,
20+
true) ==
2121
testval
22-
@test PeriLab.Solver_Manager.Model_Factory.Material.Correspondence.Zero_energy_control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(3),
23-
zeros(3,
24-
3,
25-
3,
26-
3),
27-
3,
28-
false) ==
22+
@test PeriLab.Solver_Manager.Zero_Energy_Control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(3),
23+
zeros(3,
24+
3,
25+
3,
26+
3),
27+
3,
28+
false) ==
2929
testval
3030
testval = zeros(2, 2, 2, 2)
31-
@test PeriLab.Solver_Manager.Model_Factory.Material.Correspondence.Zero_energy_control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(1),
32-
zeros(2,
33-
2,
34-
2,
35-
2),
36-
2,
37-
true) ==
31+
@test PeriLab.Solver_Manager.Zero_Energy_Control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(1),
32+
zeros(2,
33+
2,
34+
2,
35+
2),
36+
2,
37+
true) ==
3838
testval
39-
@test PeriLab.Solver_Manager.Model_Factory.Material.Correspondence.Zero_energy_control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(1),
40-
zeros(2,
41-
2,
42-
2,
43-
2),
44-
2,
45-
false) ==
39+
@test PeriLab.Solver_Manager.Zero_Energy_Control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(1),
40+
zeros(2,
41+
2,
42+
2,
43+
2),
44+
2,
45+
false) ==
4646
testval
47-
@test PeriLab.Solver_Manager.Model_Factory.Material.Correspondence.Zero_energy_control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(3),
48-
zeros(2,
49-
2,
50-
2,
51-
2),
52-
3,
53-
true) ==
47+
@test PeriLab.Solver_Manager.Zero_Energy_Control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(3),
48+
zeros(2,
49+
2,
50+
2,
51+
2),
52+
3,
53+
true) ==
5454
testval
55-
@test PeriLab.Solver_Manager.Model_Factory.Material.Correspondence.Zero_energy_control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(3),
56-
zeros(2,
57-
2,
58-
2,
59-
2),
60-
3,
61-
false) ==
55+
@test PeriLab.Solver_Manager.Zero_Energy_Control.Global_Zero_Energy_Control.rotate_fourth_order_tensor(zeros(3),
56+
zeros(2,
57+
2,
58+
2,
59+
2),
60+
3,
61+
false) ==
6262
testval
6363
end

0 commit comments

Comments
 (0)