From aabcda2e26bcc529a3c705cc45c897da63404d68 Mon Sep 17 00:00:00 2001 From: Jukka Aho Date: Thu, 17 Aug 2017 15:19:00 +0300 Subject: [PATCH] Implement new function create_nodal_elements This function can be used to create elements from node set defined in mesh. Resulting elements are of type Poi1, that is, they don't have any volume but it's still possible to add boundary conditions to them which are then enforced in discrete sense. --- src/JuliaFEM.jl | 2 +- src/preprocess_abaqus_reader.jl | 16 ++++++++++++++++ test/test_create_nodal_elements.jl | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 test/test_create_nodal_elements.jl diff --git a/src/JuliaFEM.jl b/src/JuliaFEM.jl index 8ea8c97..5c925b2 100644 --- a/src/JuliaFEM.jl +++ b/src/JuliaFEM.jl @@ -138,7 +138,7 @@ export create_elements, Mesh, add_node!, add_nodes!, add_element!, create_node_set_from_element_set!, filter_by_element_set include("preprocess_abaqus_reader.jl") -export abaqus_read_mesh, create_surface_elements +export abaqus_read_mesh, create_surface_elements, create_nodal_elements include("preprocess_aster_reader.jl") export aster_read_mesh diff --git a/src/preprocess_abaqus_reader.jl b/src/preprocess_abaqus_reader.jl index 070bc1a..8c114ba 100644 --- a/src/preprocess_abaqus_reader.jl +++ b/src/preprocess_abaqus_reader.jl @@ -42,3 +42,19 @@ boundary conditions. function create_surface_elements(mesh::Mesh, surface_name::String) return create_surface_elements(mesh, Symbol(surface_name)) end + +""" + create_nodal_elements(mesh::Mesh, node_set_name::String) + +Create a set of "nodal" elements from node set. + +Nodal elements are of type Poi1. In principle they don't have volume and it's +not possible to integrate over them. It is however possible to add boundary +conditions to them. +""" +function create_nodal_elements(mesh::Mesh, node_set_name::String) + node_ids = mesh.node_sets[Symbol(node_set_name)] + elements = [Element(Poi1, [j]) for j in node_ids] + update!(elements, "geometry", mesh.nodes) + return elements +end diff --git a/test/test_create_nodal_elements.jl b/test/test_create_nodal_elements.jl new file mode 100644 index 0000000..f722699 --- /dev/null +++ b/test/test_create_nodal_elements.jl @@ -0,0 +1,16 @@ +# This file is a part of JuliaFEM. +# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md + +using Base.Test + +using JuliaFEM +using JuliaFEM.Preprocess + +@testset "test create nodal elements" begin + m = Mesh() + add_node!(m, 1, [0.0, 0.0]) + add_node_to_node_set!(m, :test, 1) + els = create_nodal_elements(m, "test") + fel = first(els) + @test fel.connectivity == [1] +end