diff --git a/src/JuliaFEM.jl b/src/JuliaFEM.jl index 76e5816..8ed736a 100644 --- a/src/JuliaFEM.jl +++ b/src/JuliaFEM.jl @@ -128,7 +128,8 @@ module Preprocess include("preprocess.jl") export create_elements, Mesh, add_node!, add_nodes!, add_element!, add_elements!, add_element_to_element_set!, add_node_to_node_set!, - find_nearest_nodes, reorder_element_connectivity!, create_node_set_from_element_set! + find_nearest_nodes, find_nearest_node, reorder_element_connectivity!, + create_node_set_from_element_set! include("preprocess_abaqus_reader.jl") export parse_abaqus, parse_section, parse_element_section, abaqus_read_mesh, abaqus_read_model diff --git a/src/preprocess.jl b/src/preprocess.jl index 773f127..9e488ff 100644 --- a/src/preprocess.jl +++ b/src/preprocess.jl @@ -63,6 +63,10 @@ function create_node_set_from_element_set!(mesh::Mesh, set_names::String...) return end +function create_node_set_from_element_set!(mesh::Mesh, set_name::Symbol) + create_node_set_from_element_set!(mesh, string(set_name)) +end + function add_element!(mesh::Mesh, elid::Int, eltype::Symbol, connectivity::Vector{Int}) mesh.elements[elid] = connectivity mesh.element_types[elid] = eltype @@ -160,12 +164,13 @@ function find_nearest_nodes(mesh::Mesh, coords::Vector{Float64}, npts::Int=1; no s = sort(collect(dist), by=x->x[2]) nd = s[1:npts] # [(id1, dist1), (id2, dist2), ..., (id_npts, dist_npts)] node_ids = [n[1] for n in nd] - if length(node_ids) == 1 - return first(node_ids) - end return node_ids end +function find_nearest_node(mesh::Mesh, coords::Vector{Float64}; node_set=nothing) + return first(find_nearest_nodes(mesh, coords, 1; node_set=node_set)) +end + """ Apply new node ordering to elements. In JuliaFEM same node ordering is used than in ABAQUS and if mesh is parsed from FEM format with other node ordering diff --git a/test/test_preprocess.jl b/test/test_preprocess.jl index e9b8e9a..2509b88 100644 --- a/test/test_preprocess.jl +++ b/test/test_preprocess.jl @@ -39,8 +39,8 @@ end mesh = aster_read_mesh(meshfile) create_node_set_from_element_set!(mesh, "LOWER_LEFT", "UPPER_BOTTOM") # nid 1 coords = (0.0, 0.5), nid 13 coords = (0.0, 0.5) - nid = find_nearest_nodes(mesh, [0.0, 0.5]; node_set="LOWER_LEFT") + nid = find_nearest_node(mesh, [0.0, 0.5]; node_set="LOWER_LEFT") @test first(nid) == 1 - nid = find_nearest_nodes(mesh, [0.0, 0.5]; node_set="UPPER_BOTTOM") + nid = find_nearest_node(mesh, [0.0, 0.5]; node_set="UPPER_BOTTOM") @test first(nid) == 13 end diff --git a/test/test_preprocess/block_2d.med b/test/test_preprocess/block_2d.med new file mode 100644 index 0000000..55e8b7a Binary files /dev/null and b/test/test_preprocess/block_2d.med differ