v0.5 fixes

This commit is contained in:
Jukka Aho
2016-11-15 22:01:00 +02:00
parent 95200a81e1
commit e64ed7f6a3
9 changed files with 29 additions and 50 deletions
+2
View File
@@ -1,6 +1,8 @@
# This file is a part of JuliaFEM.
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
# __precompile__()
using Logging
if haskey(ENV, "JULIAFEM_LOGLEVEL")
+2 -2
View File
@@ -423,7 +423,7 @@ function create_boundary_problem(model::Model, bc::AbstractBoundaryCondition, ::
bc_name, bc_type, pressure = row
bc_type == :P || error("bc_type = $bc_type != :P")
elements = []
for (parent_element_id, parent_element_side) in model.mesh.surfaces[bc_name]
for (parent_element_id, parent_element_side) in model.mesh.surface_sets[bc_name]
parent_element_type = model.mesh.element_types[parent_element_id]
parent_element_connectivity = model.mesh.elements[parent_element_id]
@@ -742,7 +742,7 @@ 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]
for (parent_element_id, parent_element_side) in mesh.surface_sets[surface_name]
parent_element_type = mesh.element_types[parent_element_id]
parent_element_connectivity = mesh.elements[parent_element_id]
+5 -5
View File
@@ -7,7 +7,7 @@ type Element{E<:AbstractElement}
id :: Int
connectivity :: Vector{Int}
integration_points :: Vector{IP}
fields :: Dict{AbstractString, Field}
fields :: Dict{String, Field}
properties :: E
end
@@ -298,22 +298,22 @@ function update!(element::Element, datas::Pair...)
end
end
function update!(element::Element, field_name::AbstractString, data::Function)
function update!(element::Element, field_name::String, data::Function)
element[field_name] = data
end
function update!(element::Element, field_name::AbstractString, field::Field)
function update!(element::Element, field_name::String, field::Field)
element[field_name] = field
end
function update!(elements::Vector, field_name::AbstractString, data)
function update!(elements::Vector, field_name::String, data)
for element in elements
update!(element, field_name, data)
end
end
""" Check existence of field. """
function haskey(element::Element, field_name::AbstractString)
function haskey(element::Element, field_name::String)
haskey(element.fields, field_name)
end
+1 -1
View File
@@ -334,7 +334,7 @@ function (field::DVTI)(time::Float64)
return field
end
function (field::DCTI)(time::Float64)
return field
return field.data
end
function (field::CVTI)(time::Float64)
return field.data()
+2 -2
View File
@@ -73,12 +73,12 @@ end
function get_integration_points(element::CartesianSurfaceElement, order::Int64)
w, xi = get_integration_points(order)
[ (w[i]*w[j], [xi[i], xi[j]]) for i=1:order, j=1:order ]
vec([(w[i]*w[j], [xi[i], xi[j]]) for i=1:order, j=1:order])
end
function get_integration_points(element::CartesianVolumeElement, order::Int64)
w, xi = get_integration_points(order)
[ (w[i]*w[j]*w[k], [xi[i], xi[j], xi[k]]) for i=1:order, j=1:order, k=1:order ]
vec([(w[i]*w[j]*w[k], [xi[i], xi[j], xi[k]]) for i=1:order, j=1:order, k=1:order])
end
### triangular and tetrahedral elements
+1 -1
View File
@@ -23,7 +23,7 @@ type Mesh
element_types :: Dict{Int64, Symbol}
element_codes :: Dict{Int64, Symbol}
element_sets :: Dict{Symbol, Set{Int64}}
surfaces :: Dict{Symbol, Vector{Tuple{Int64, Symbol}}}
surface_sets :: Dict{Symbol, Vector{Tuple{Int64, Symbol}}}
surface_types :: Dict{Symbol, Symbol}
end
+1 -1
View File
@@ -244,7 +244,7 @@ function abaqus_read_mesh(fn)
for (elset_name, element_ids) in model["elsets"]
mesh.element_sets[Symbol(elset_name)] = Set(element_ids)
end
mesh.surfaces = model["surfaces"]
mesh.surface_sets = model["surfaces"]
mesh.surface_types = model["surface_types"]
return mesh
end
+13 -38
View File
@@ -400,10 +400,11 @@ function update_xdmf!(solver::Solver{Modal}; show_info=true)
# 2. save topology
nid_mapping = Dict(j => i for (i, j) in enumerate(node_ids))
nid_mapping = Dict(j=>i for (i, j) in enumerate(node_ids))
all_elements = get_all_elements(solver)
nelements = length(all_elements)
info("Saving topology: $nelements elements total.")
element_types = unique(map(get_element_type, all_elements))
xdmf_element_mapping = Dict(
@@ -425,8 +426,9 @@ function update_xdmf!(solver::Solver{Modal}; show_info=true)
topology = []
for element_type in element_types
info("Xdmf save: element type $element_type")
elements = filter_by_element_type(element_type, all_elements)
nelements = length(elements)
info("Xdmf save: $nelements elements of type $element_type")
sort!(elements, by=get_element_id)
#elements = elements[1:5]
element_ids = map(get_element_id, elements)
@@ -460,13 +462,13 @@ function update_xdmf!(solver::Solver{Modal}; show_info=true)
freqs = real(solver.properties.eigvals/(2.0*pi))
for (j, freq) in enumerate(freqs)
info("Saving frequency $(round(freq, 3))")
frame = new_element("Grid")
new_child(frame, "Time", Dict("Value" => freq))
add_child(frame, geometry)
for topo in topology
add_child(frame, topo)
end
add_child(temporal_collection, frame)
mode = zeros(X)
mode_ = solver.properties.eigvecs[:,j]
@@ -478,46 +480,19 @@ function update_xdmf!(solver::Solver{Modal}; show_info=true)
field_type = ndim == 1 ? "Scalar" : "Vector"
field_center = "Node"
unknown_field_name = get_unknown_field_name(solver)
unknown_field_name = ucfirst(unknown_field_name)
freqn = freqs[j]
path = "/Results/Frequency $freqn/Nodal Fields/$unknown_field_name"
info("Storing data to $path")
dataitem = new_dataitem(xdmf, path, mode)
attribute = new_child(frame, "Attribute")
set_attribute(attribute, "Name", unknown_field_name)
set_attribute(attribute, "Center", field_center)
set_attribute(attribute, "AttributeType", field_type)
add_child(attribute, dataitem)
add_child(frame, attribute)
continue
# save solved fields
unknown_field_name = get_unknown_field_name(solver)
U = solver(unknown_field_name, freq)
node_ids2 = sort(collect(keys(U)))
@assert node_ids == node_ids2
ndim = length(U[first(node_ids)])
field_type = ndim == 1 ? "Scalar" : "Vector"
field_center = "Node"
if ndim == 2
for nid in node_ids
U[nid] = [U[nid]; 0.0]
end
ndim = 3
end
U = hcat([U[nid] for nid in node_ids]...)
unknown_field_name = ucfirst(unknown_field_name)
unknown_field_name = ucfirst(get_unknown_field_name(solver))
path = "/Results/Frequency $freq/Nodal Fields/$unknown_field_name"
dataitem = new_dataitem(xdmf, path, U)
info("Storing data to $path")
attribute = new_child(frame, "Attribute")
set_attribute(attribute, "Name", unknown_field_name)
set_attribute(attribute, "Center", field_center)
set_attribute(attribute, "AttributeType", field_type)
add_child(attribute, dataitem)
add_child(attribute, new_dataitem(xdmf, path, mode))
add_child(frame, attribute)
#add_child(frame, new_dataitem(xdmf, "/foo$j", [1, 2, 3]))
#add_child(temporal_collection, new_dataitem(xdmf, "/bar$j", [1, 2, 3]))
add_child(temporal_collection, frame)
end
info("Saving Xdmf")
@@ -57,7 +57,9 @@ using JuliaFEM.Testing
g = 576.0
E = 288.0
nu = 1/3
u3 = block("displacement", 0.0)[3]
u3_expected = f/E*[-nu, 1] + g/(2*E)*[-nu, 1]
@test isapprox(u3, u3_expected)
#=
# fetch nodal results X + u and join them into one table using DataFrames
X = solver(DataFrame, "geometry", :COOR)