mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-08-06 04:21:33 +00:00
simple support for element connectivity data
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user