diff --git a/src/JuliaFEM.jl b/src/JuliaFEM.jl index a265a0d..febd6b5 100644 --- a/src/JuliaFEM.jl +++ b/src/JuliaFEM.jl @@ -142,4 +142,62 @@ function get_nodes(model, node_ids) end + + +@doc """Add new elements to model. +Parameters +---------- +list of dicts, dict = {element_type => elcode, elids => [node ids..]} + +Examples +-------- +Create two tet4 element and add them: + +>>> m = new_model() +>>> const TET4 = 0x6 +>>> el1 = Dict("element_type" => TET4, "node_ids" => [1, 2, 3, 4]) +>>> el2 = Dict("element_type" => TET4, "node_ids" => [4, 3, 2, 1]) + +In dict key means element id + +>>> elements = Dict(1 => el1, 2 => el2) +>>> add_elements(m, elements) + +""" -> +function add_elements(model, elements) + elfield = get_field(model.elements, "connectivity"; create_if_doesnt_exist=true) + eltyfield = get_field(model.elements, "element_type"; create_if_doesnt_exist=true) + for (elid, element) in elements + println("Adding element ", elid) + elfield[elid] = element["node_ids"] + eltyfield[elid] = element["element_type"] + end +end + + + + +@doc """Get subset of elements from model. +Parameters +---------- +element_ids : list of ints + Element id numbers + +Returns +------- +Dict +{element_type = XXX, node_ids = [a, b, c, d, e, ..., n]} +""" -> +function get_elements(model, element_ids) + eltyfield = get_field(model.elements, "element_type") + elfield = get_field(model.elements, "connectivity") + ret = Dict() + for i in element_ids + ret[i] = Dict("element_type" => eltyfield[i], "node_ids" => elfield[i]) + end + return ret +end + + + end # module diff --git a/test/runtests.jl b/test/runtests.jl index 306b11b..8ea5b72 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -59,6 +59,49 @@ end test_add_and_get_nodes() +function test_add_element() + m = new_model() + nodes = Dict(1 => [0.0, 0.0, 0.0], + 2 => [1.0, 0.0, 0.0], + 3 => [0.0, 1.0, 0.0], + 4 => [0.0, 0.0, 1.0]) + add_nodes(m, nodes) + el1 = Dict("element_type" => 0x6, "node_ids" => [1, 2, 3, 4]) + el2 = Dict("element_type" => 0x6, "node_ids" => [4, 3, 2, 1]) + elements = Dict(1 => el1, 2 => el2) + add_elements(m, elements) + println(m) + @test m.elements["element_type"][1] == 0x6 + @test m.elements["connectivity"][1] == [1, 2, 3, 4] +end +test_add_element() + + +function test_get_element() + m = new_model() + nodes = Dict(1 => [0.0, 0.0, 0.0], + 2 => [1.0, 0.0, 0.0], + 3 => [0.0, 1.0, 0.0], + 4 => [0.0, 0.0, 1.0]) + add_nodes(m, nodes) + el1 = Dict("element_type" => 0x6, "node_ids" => [1, 2, 3, 4]) + el2 = Dict("element_type" => 0x6, "node_ids" => [4, 3, 2, 1]) + elements = Dict(1 => el1, 2 => el2) + #println(elements) + add_elements(m, elements) + #println(m) + # get elements by element id + els = get_elements(m, [1]) + #println(els) + @test length(els) == 1 + @test 1 in keys(els) + @test els[1]["element_type"] == 0x6 + @test els[1]["node_ids"] == [1, 2, 3, 4] +end +test_get_element() + + + # write your own tests here # @test 1 == JuliaFEM.test() # @test_approx_eq 1.0 1.0