functions to find nodes from dofs and vice versa

This commit is contained in:
Jukka Aho
2016-02-05 11:31:23 +02:00
parent 139eff7f55
commit 2ac577d3f6
2 changed files with 51 additions and 0 deletions
+30
View File
@@ -252,3 +252,33 @@ end
function push!(problem::Problem, element)
push!(problem.elements, element)
end
""" Find dofs corresponding to nodes. """
function find_dofs_by_nodes(problem::Problem, nodes)
dim = get_unknown_field_dimension(problem)
return find_dofs_by_nodes(dim, nodes)
end
function find_dofs_by_nodes(dim::Int, nodes)
dofs = Int64[]
for node in nodes
for j=1:dim
push!(dofs, dim*(node-1)+j)
end
end
return dofs
end
""" Find nodes corresponding to dofs. """
function find_nodes_by_dofs(problem::Problem, dofs)
dim = get_unknown_field_dimension(problem)
end
function find_nodes_by_dofs(dim, dofs)
nodes = Int64[]
for dof in dofs
j = Int(ceil(dof/dim))
j in nodes && continue
push!(nodes, j)
end
return nodes
end
+21
View File
@@ -0,0 +1,21 @@
# This file is a part of JuliaFEM.
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
using JuliaFEM.Test
using JuliaFEM.Core: find_dofs_by_nodes, find_nodes_by_dofs
@testset "find dofs given a set of nodes" begin
nodes = [1, 3]
dim = 3
dofs = find_dofs_by_nodes(dim, nodes)
@test dofs == [1, 2, 3, 7, 8, 9]
end
@testset "find nodes given a set of dofs" begin
dofs = [2, 8, 9]
dim = 3
nodes = find_nodes_by_dofs(dim, dofs)
@test nodes == [1, 3]
end