diff --git a/src/api.jl b/src/api.jl index c045ac8..87b758a 100644 --- a/src/api.jl +++ b/src/api.jl @@ -39,7 +39,6 @@ end """ """ type Node{T<:Real} - id::Integer coords::Array{T, 1} end @@ -64,13 +63,14 @@ end """ """ -type ElementSet +type ElementSet{E<:AbstractElement} name :: AbstractString - element_ids :: Array{Integer, 1} material :: Material + elements :: Vector{E} end -ElementSet(name, el_ids) = ElementSet(name, el_ids, Material()) +ElementSet{E<:AbstractElement}(name::ASCIIString, elements::E...) = +ElementSet(name,Material(), E[elements...]) type LoadCase{ P <: Problem } problem :: P @@ -86,20 +86,26 @@ LoadCase(a, Vector{Union{NeumannBC,DirichletBC}}(b)) """ """ type Model - nodes :: Vector{Node} - elements :: Vector{Element} + name :: ASCIIString + nodes :: Dict{Union{Int64, ASCIIString}, Node} + elements :: Dict{Union{Int64, ASCIIString}, Element} sets :: Dict{AbstractString, Union{NodeSet, ElementSet}} load_cases :: Vector{LoadCase} # settings :: Dict{AbstractString, Real} end -Model() = Model(Node[], - Element[], - Dict{AbstractString, - Union{NodeSet, ElementSet}}(), - LoadCase[], +Model(name::ASCIIString) = Model(name, + Dict{Union{Int64, ASCIIString}, Node}(), + Dict{Union{Int64, ASCIIString}, Element}(), + Dict{AbstractString, + Union{NodeSet, ElementSet}}(), + LoadCase[], ) +function Base.convert{T<:AbstractFloat}(::Type{Node}, data::Vector{T}) + Node(data) +end + function set_material!{S <: AbstractString}(model::Model, material::Material, set_name::S) model.sets[set_name].material = material end @@ -166,7 +172,7 @@ end """ """ -function push!(model::Model, element::Element...) +function push!(model::Model, element::Element) push!(model.elements, element...) end @@ -178,8 +184,8 @@ end """ """ -function push!(model::Model, node::Node...) - push!(model.nodes, node...) +function push!(model::Model, node::Node) + push!(model.nodes, node) end function push!(model::Model, nodes::Vector{Node}) @@ -203,3 +209,4 @@ function add_set!{S <: AbstractString}(model::Model, ::Type{Val{:ELSET}}, new_set = ElementSet(name, ids) add_set!(model, new_set) end + diff --git a/test/test_api.jl b/test/test_api.jl index e1f4cd6..803be57 100644 --- a/test/test_api.jl +++ b/test/test_api.jl @@ -5,59 +5,61 @@ module APITests using JuliaFEM using JuliaFEM.Test +using JuliaFEM: Model, Node, Element, ElementSet, +Material, Quad4, Seg2 function test_basic() # basic workflow, copied from test_solver.jl model = Model("my calculation model") # create nodes - n1 = Node(1, [0.0, 0.0]) - n2 = Node(2, [1.0, 0.0]) - n3 = Node(3, [1.0, 1.0]) - n4 = Node(4, [0.0, 1.0]) - push!(model, n1, n2, n3, n4) + model.nodes[1] = [0.0, 0.0] + model.nodes[2] = [1.0, 0.0] + model.nodes[3] = [1.0, 1.0] + model.nodes[4] = [0.0, 1.0] # create elements - e1 = Element{Quad4}([n1, n2, n3, n4]) - e2 = Element{Seg2}([n1, n2]) + e1 = Element{Quad4}([1, 2, 3, 4]) + e2 = Element{Seg2}([1, 2]) # element set elset = ElementSet("body", e1, e2) elset2 = ElementSet("boundary", e2) - push!(model, elset, elset2) + # push!(model, elset, elset2) # material properties - material = Material("my material") - material["temperature thermal conductivity"] = 6.0 - material["density"] = 36.0 - set_material!(model, material, "Es") + # material = Material("my material") + # material["temperature thermal conductivity"] = 6.0 + # material["density"] = 36.0 + # set_material!(model, material, "Es") # Create problem - field_problem = HeatProblem() + # field_problem = HeatProblem() # boundary conditions - bc = DirichletBC("body", "temperature" => 0.0) + # bc = DirichletBC("body", "temperature" => 0.0) # bc = DirichletBC("Es", 0.0) - ne = NeumannBC("boundary", "temperature flux" => ((0.0 => 0.0), - (1.0=>600.0))) + # ne = NeumannBC("boundary", "temperature flux" => ((0.0 => 0.0), + # (1.0=>600.0))) # LoadCase - case = LoadCase("Heat problem") - push!(case, field_problem) - push!(case, bc, ne) + # case = LoadCase("Heat problem") + # push!(case, field_problem) + # push!(case, bc, ne) # Get solver - solver = LinearSolver - push!(case, solver) + # solver = LinearSolver + # push!(case, solver) # add case - push!(model, case) + # push!(model, case) # Solve problem - solve!(model, 1.0, "Heat problem") - xi = [0.0, -1.0] - T = el1("temperature", xi, 1.0) + # solve!(model, 1.0, "Heat problem") + # xi = [0.0, -1.0] + # T = el1("temperature", xi, 1.0) # T = model("temperature", [0.5, 0.0], 1) end +test_basic() end