simple support for element connectivity data

This commit is contained in:
Jukka Aho
2015-06-20 19:57:50 +03:00
parent 00d70eb5c4
commit 38337f5605
2 changed files with 101 additions and 0 deletions
+58
View File
@@ -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
+43
View File
@@ -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