diff --git a/src/JuliaFEM.jl b/src/JuliaFEM.jl index d228326..f5dfae6 100644 --- a/src/JuliaFEM.jl +++ b/src/JuliaFEM.jl @@ -119,7 +119,7 @@ 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_surface_elements + find_nearest_nodes, reorder_element_connectivity! include("preprocess_abaqus_reader.jl") export parse_abaqus, parse_section, parse_element_section, abaqus_read_mesh, abaqus_read_model @@ -156,7 +156,7 @@ export Postprocessor module Abaqus include("abaqus.jl") -export abaqus_read_model, abaqus_run_model, abaqus_open_results +export abaqus_read_model, abaqus_run_model, abaqus_open_results, create_surface_elements end end # diff --git a/src/abaqus.jl b/src/abaqus.jl index c95aabb..8c586f9 100644 --- a/src/abaqus.jl +++ b/src/abaqus.jl @@ -733,3 +733,27 @@ function abaqus_run_model(name; fetch=false, verbose=false) return status end + +""" +This function gerates surface elements from solid elements + +slave = create_surface_elements(mesh, :slave_surf) +master = create_surface_elements(mesh, :master_surf) +""" +function create_surface_elements(mesh::Mesh, surface_name::Symbol) + elements = [] + for (parent_element_id, parent_element_side) in mesh.surfaces[surface_name] + parent_element_type = mesh.element_types[parent_element_id] + parent_element_connectivity = mesh.elements[parent_element_id] + + child_element_type, child_element_lconn, child_element_connectivity = + get_child_element(parent_element_type, parent_element_side, + parent_element_connectivity) + + child_element = Element(JuliaFEM.(child_element_type), child_element_connectivity) + push!(elements, child_element) + end + update!(elements, "geometry", mesh.nodes) + return elements +end + diff --git a/src/preprocess.jl b/src/preprocess.jl index 9a05208..ede66bb 100644 --- a/src/preprocess.jl +++ b/src/preprocess.jl @@ -132,28 +132,6 @@ function create_elements(mesh::Mesh, element_sets::AbstractString...; element_ty return create_elements(mesh, element_sets...; element_type=element_type) end -""" -This function gerates surface elements from solid elements - -slave = create_surface_elements(mesh, :slave_surf) -master = create_surface_elements(mesh, :master_surf) -""" -function create_surface_elements(mesh::Mesh, surface_name::Symbol) - elements = [] - for (parent_element_id, parent_element_side) in mesh.surfaces[surface_name] - parent_element_type = mesh.element_types[parent_element_id] - parent_element_connectivity = mesh.elements[parent_element_id] - - child_element_type, child_element_lconn, child_element_connectivity = - get_child_element(parent_element_type, parent_element_side, - parent_element_connectivity) - - child_element = Element(JuliaFEM.(child_element_type), child_element_connectivity) - push!(elements, child_element) - end - update!(elements, "geometry", mesh.nodes) - return elements -end """ find npts nearest nodes from mesh and return id numbers as list. """ function find_nearest_nodes(mesh::Mesh, coords::Vector, npts=1) diff --git a/test/test_preprocess_abaqus_reader.jl b/test/test_preprocess_abaqus_reader.jl index 6e94e2a..9af3074 100644 --- a/test/test_preprocess_abaqus_reader.jl +++ b/test/test_preprocess_abaqus_reader.jl @@ -3,6 +3,7 @@ using JuliaFEM using JuliaFEM.Preprocess +using JuliaFEM.Abaqus using JuliaFEM.Testing @testset "read inp file" begin @@ -51,4 +52,6 @@ end @test mesh.surfaces[:LOAD][1] == (16, :S1) @test mesh.surface_types[:LOAD] == :ELEMENT @test length(Set(map(size, values(mesh.nodes)))) == 1 + elements = create_surface_elements(mesh,:LOAD) + @test get_connectivity(elements[1]) == [8,9,10] end