Api, round 2

This commit is contained in:
Olli Väinölä
2015-11-30 21:50:09 +02:00
parent c2429c9207
commit 40db53cd83
2 changed files with 48 additions and 39 deletions
+21 -14
View File
@@ -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
+27 -25
View File
@@ -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